]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/binutils-tumbl.git/blob - bfd/elfxx-mips.c
bfd/
[fpga/lx-cpu1/binutils-tumbl.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
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 #if 0
424   /* We no longer use this.  */
425   /* String section indices for the dynamic section symbols.  */
426   bfd_size_type dynsym_sec_strindex[SIZEOF_MIPS_DYNSYM_SECNAMES];
427 #endif
428
429   /* The number of .rtproc entries.  */
430   bfd_size_type procedure_count;
431
432   /* The size of the .compact_rel section (if SGI_COMPAT).  */
433   bfd_size_type compact_rel_size;
434
435   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic
436      entry is set to the address of __rld_obj_head as in IRIX5.  */
437   bfd_boolean use_rld_obj_head;
438
439   /* The  __rld_map or __rld_obj_head symbol. */
440   struct elf_link_hash_entry *rld_symbol;
441
442   /* This is set if we see any mips16 stub sections.  */
443   bfd_boolean mips16_stubs_seen;
444
445   /* True if we can generate copy relocs and PLTs.  */
446   bfd_boolean use_plts_and_copy_relocs;
447
448   /* True if we're generating code for VxWorks.  */
449   bfd_boolean is_vxworks;
450
451   /* True if we already reported the small-data section overflow.  */
452   bfd_boolean small_data_overflow_reported;
453
454   /* Shortcuts to some dynamic sections, or NULL if they are not
455      being used.  */
456   asection *srelbss;
457   asection *sdynbss;
458   asection *srelplt;
459   asection *srelplt2;
460   asection *sgotplt;
461   asection *splt;
462   asection *sstubs;
463   asection *sgot;
464
465   /* The master GOT information.  */
466   struct mips_got_info *got_info;
467
468   /* The size of the PLT header in bytes.  */
469   bfd_vma plt_header_size;
470
471   /* The size of a PLT entry in bytes.  */
472   bfd_vma plt_entry_size;
473
474   /* The number of functions that need a lazy-binding stub.  */
475   bfd_vma lazy_stub_count;
476
477   /* The size of a function stub entry in bytes.  */
478   bfd_vma function_stub_size;
479
480   /* The number of reserved entries at the beginning of the GOT.  */
481   unsigned int reserved_gotno;
482
483   /* The section used for mips_elf_la25_stub trampolines.
484      See the comment above that structure for details.  */
485   asection *strampoline;
486
487   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
488      pairs.  */
489   htab_t la25_stubs;
490
491   /* A function FN (NAME, IS, OS) that creates a new input section
492      called NAME and links it to output section OS.  If IS is nonnull,
493      the new section should go immediately before it, otherwise it
494      should go at the (current) beginning of OS.
495
496      The function returns the new section on success, otherwise it
497      returns null.  */
498   asection *(*add_stub_section) (const char *, asection *, asection *);
499 };
500
501 /* Get the MIPS ELF linker hash table from a link_info structure.  */
502
503 #define mips_elf_hash_table(p) \
504   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
505   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
506
507 /* A structure used to communicate with htab_traverse callbacks.  */
508 struct mips_htab_traverse_info
509 {
510   /* The usual link-wide information.  */
511   struct bfd_link_info *info;
512   bfd *output_bfd;
513
514   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
515   bfd_boolean error;
516 };
517
518 #define TLS_RELOC_P(r_type) \
519   (r_type == R_MIPS_TLS_DTPMOD32                \
520    || r_type == R_MIPS_TLS_DTPMOD64             \
521    || r_type == R_MIPS_TLS_DTPREL32             \
522    || r_type == R_MIPS_TLS_DTPREL64             \
523    || r_type == R_MIPS_TLS_GD                   \
524    || r_type == R_MIPS_TLS_LDM                  \
525    || r_type == R_MIPS_TLS_DTPREL_HI16          \
526    || r_type == R_MIPS_TLS_DTPREL_LO16          \
527    || r_type == R_MIPS_TLS_GOTTPREL             \
528    || r_type == R_MIPS_TLS_TPREL32              \
529    || r_type == R_MIPS_TLS_TPREL64              \
530    || r_type == R_MIPS_TLS_TPREL_HI16           \
531    || r_type == R_MIPS_TLS_TPREL_LO16           \
532    || r_type == R_MIPS16_TLS_GD                 \
533    || r_type == R_MIPS16_TLS_LDM                \
534    || r_type == R_MIPS16_TLS_DTPREL_HI16        \
535    || r_type == R_MIPS16_TLS_DTPREL_LO16        \
536    || r_type == R_MIPS16_TLS_GOTTPREL           \
537    || r_type == R_MIPS16_TLS_TPREL_HI16         \
538    || r_type == R_MIPS16_TLS_TPREL_LO16         \
539    || r_type == R_MICROMIPS_TLS_GD              \
540    || r_type == R_MICROMIPS_TLS_LDM             \
541    || r_type == R_MICROMIPS_TLS_DTPREL_HI16     \
542    || r_type == R_MICROMIPS_TLS_DTPREL_LO16     \
543    || r_type == R_MICROMIPS_TLS_GOTTPREL        \
544    || r_type == R_MICROMIPS_TLS_TPREL_HI16      \
545    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
546
547 /* Structure used to pass information to mips_elf_output_extsym.  */
548
549 struct extsym_info
550 {
551   bfd *abfd;
552   struct bfd_link_info *info;
553   struct ecoff_debug_info *debug;
554   const struct ecoff_debug_swap *swap;
555   bfd_boolean failed;
556 };
557
558 /* The names of the runtime procedure table symbols used on IRIX5.  */
559
560 static const char * const mips_elf_dynsym_rtproc_names[] =
561 {
562   "_procedure_table",
563   "_procedure_string_table",
564   "_procedure_table_size",
565   NULL
566 };
567
568 /* These structures are used to generate the .compact_rel section on
569    IRIX5.  */
570
571 typedef struct
572 {
573   unsigned long id1;            /* Always one?  */
574   unsigned long num;            /* Number of compact relocation entries.  */
575   unsigned long id2;            /* Always two?  */
576   unsigned long offset;         /* The file offset of the first relocation.  */
577   unsigned long reserved0;      /* Zero?  */
578   unsigned long reserved1;      /* Zero?  */
579 } Elf32_compact_rel;
580
581 typedef struct
582 {
583   bfd_byte id1[4];
584   bfd_byte num[4];
585   bfd_byte id2[4];
586   bfd_byte offset[4];
587   bfd_byte reserved0[4];
588   bfd_byte reserved1[4];
589 } Elf32_External_compact_rel;
590
591 typedef struct
592 {
593   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
594   unsigned int rtype : 4;       /* Relocation types. See below.  */
595   unsigned int dist2to : 8;
596   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
597   unsigned long konst;          /* KONST field. See below.  */
598   unsigned long vaddr;          /* VADDR to be relocated.  */
599 } Elf32_crinfo;
600
601 typedef struct
602 {
603   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
604   unsigned int rtype : 4;       /* Relocation types. See below.  */
605   unsigned int dist2to : 8;
606   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
607   unsigned long konst;          /* KONST field. See below.  */
608 } Elf32_crinfo2;
609
610 typedef struct
611 {
612   bfd_byte info[4];
613   bfd_byte konst[4];
614   bfd_byte vaddr[4];
615 } Elf32_External_crinfo;
616
617 typedef struct
618 {
619   bfd_byte info[4];
620   bfd_byte konst[4];
621 } Elf32_External_crinfo2;
622
623 /* These are the constants used to swap the bitfields in a crinfo.  */
624
625 #define CRINFO_CTYPE (0x1)
626 #define CRINFO_CTYPE_SH (31)
627 #define CRINFO_RTYPE (0xf)
628 #define CRINFO_RTYPE_SH (27)
629 #define CRINFO_DIST2TO (0xff)
630 #define CRINFO_DIST2TO_SH (19)
631 #define CRINFO_RELVADDR (0x7ffff)
632 #define CRINFO_RELVADDR_SH (0)
633
634 /* A compact relocation info has long (3 words) or short (2 words)
635    formats.  A short format doesn't have VADDR field and relvaddr
636    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
637 #define CRF_MIPS_LONG                   1
638 #define CRF_MIPS_SHORT                  0
639
640 /* There are 4 types of compact relocation at least. The value KONST
641    has different meaning for each type:
642
643    (type)               (konst)
644    CT_MIPS_REL32        Address in data
645    CT_MIPS_WORD         Address in word (XXX)
646    CT_MIPS_GPHI_LO      GP - vaddr
647    CT_MIPS_JMPAD        Address to jump
648    */
649
650 #define CRT_MIPS_REL32                  0xa
651 #define CRT_MIPS_WORD                   0xb
652 #define CRT_MIPS_GPHI_LO                0xc
653 #define CRT_MIPS_JMPAD                  0xd
654
655 #define mips_elf_set_cr_format(x,format)        ((x).ctype = (format))
656 #define mips_elf_set_cr_type(x,type)            ((x).rtype = (type))
657 #define mips_elf_set_cr_dist2to(x,v)            ((x).dist2to = (v))
658 #define mips_elf_set_cr_relvaddr(x,d)           ((x).relvaddr = (d)<<2)
659 \f
660 /* The structure of the runtime procedure descriptor created by the
661    loader for use by the static exception system.  */
662
663 typedef struct runtime_pdr {
664         bfd_vma adr;            /* Memory address of start of procedure.  */
665         long    regmask;        /* Save register mask.  */
666         long    regoffset;      /* Save register offset.  */
667         long    fregmask;       /* Save floating point register mask.  */
668         long    fregoffset;     /* Save floating point register offset.  */
669         long    frameoffset;    /* Frame size.  */
670         short   framereg;       /* Frame pointer register.  */
671         short   pcreg;          /* Offset or reg of return pc.  */
672         long    irpss;          /* Index into the runtime string table.  */
673         long    reserved;
674         struct exception_info *exception_info;/* Pointer to exception array.  */
675 } RPDR, *pRPDR;
676 #define cbRPDR sizeof (RPDR)
677 #define rpdNil ((pRPDR) 0)
678 \f
679 static struct mips_got_entry *mips_elf_create_local_got_entry
680   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
681    struct mips_elf_link_hash_entry *, int);
682 static bfd_boolean mips_elf_sort_hash_table_f
683   (struct mips_elf_link_hash_entry *, void *);
684 static bfd_vma mips_elf_high
685   (bfd_vma);
686 static bfd_boolean mips_elf_create_dynamic_relocation
687   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
688    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
689    bfd_vma *, asection *);
690 static hashval_t mips_elf_got_entry_hash
691   (const void *);
692 static bfd_vma mips_elf_adjust_gp
693   (bfd *, struct mips_got_info *, bfd *);
694 static struct mips_got_info *mips_elf_got_for_ibfd
695   (struct mips_got_info *, bfd *);
696
697 /* This will be used when we sort the dynamic relocation records.  */
698 static bfd *reldyn_sorting_bfd;
699
700 /* True if ABFD is for CPUs with load interlocking that include
701    non-MIPS1 CPUs and R3900.  */
702 #define LOAD_INTERLOCKS_P(abfd) \
703   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
704    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
705
706 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
707    This should be safe for all architectures.  We enable this predicate
708    for RM9000 for now.  */
709 #define JAL_TO_BAL_P(abfd) \
710   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
711
712 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
713    This should be safe for all architectures.  We enable this predicate for
714    all CPUs.  */
715 #define JALR_TO_BAL_P(abfd) 1
716
717 /* True if ABFD is for CPUs that are faster if JR is converted to B.
718    This should be safe for all architectures.  We enable this predicate for
719    all CPUs.  */
720 #define JR_TO_B_P(abfd) 1
721
722 /* True if ABFD is a PIC object.  */
723 #define PIC_OBJECT_P(abfd) \
724   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
725
726 /* Nonzero if ABFD is using the N32 ABI.  */
727 #define ABI_N32_P(abfd) \
728   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
729
730 /* Nonzero if ABFD is using the N64 ABI.  */
731 #define ABI_64_P(abfd) \
732   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
733
734 /* Nonzero if ABFD is using NewABI conventions.  */
735 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
736
737 /* The IRIX compatibility level we are striving for.  */
738 #define IRIX_COMPAT(abfd) \
739   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
740
741 /* Whether we are trying to be compatible with IRIX at all.  */
742 #define SGI_COMPAT(abfd) \
743   (IRIX_COMPAT (abfd) != ict_none)
744
745 /* The name of the options section.  */
746 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
747   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
748
749 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
750    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
751 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
752   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
753
754 /* Whether the section is readonly.  */
755 #define MIPS_ELF_READONLY_SECTION(sec) \
756   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
757    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
758
759 /* The name of the stub section.  */
760 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
761
762 /* The size of an external REL relocation.  */
763 #define MIPS_ELF_REL_SIZE(abfd) \
764   (get_elf_backend_data (abfd)->s->sizeof_rel)
765
766 /* The size of an external RELA relocation.  */
767 #define MIPS_ELF_RELA_SIZE(abfd) \
768   (get_elf_backend_data (abfd)->s->sizeof_rela)
769
770 /* The size of an external dynamic table entry.  */
771 #define MIPS_ELF_DYN_SIZE(abfd) \
772   (get_elf_backend_data (abfd)->s->sizeof_dyn)
773
774 /* The size of a GOT entry.  */
775 #define MIPS_ELF_GOT_SIZE(abfd) \
776   (get_elf_backend_data (abfd)->s->arch_size / 8)
777
778 /* The size of the .rld_map section. */
779 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
780   (get_elf_backend_data (abfd)->s->arch_size / 8)
781
782 /* The size of a symbol-table entry.  */
783 #define MIPS_ELF_SYM_SIZE(abfd) \
784   (get_elf_backend_data (abfd)->s->sizeof_sym)
785
786 /* The default alignment for sections, as a power of two.  */
787 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
788   (get_elf_backend_data (abfd)->s->log_file_align)
789
790 /* Get word-sized data.  */
791 #define MIPS_ELF_GET_WORD(abfd, ptr) \
792   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
793
794 /* Put out word-sized data.  */
795 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
796   (ABI_64_P (abfd)                              \
797    ? bfd_put_64 (abfd, val, ptr)                \
798    : bfd_put_32 (abfd, val, ptr))
799
800 /* The opcode for word-sized loads (LW or LD).  */
801 #define MIPS_ELF_LOAD_WORD(abfd) \
802   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
803
804 /* Add a dynamic symbol table-entry.  */
805 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
806   _bfd_elf_add_dynamic_entry (info, tag, val)
807
808 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
809   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
810
811 /* The name of the dynamic relocation section.  */
812 #define MIPS_ELF_REL_DYN_NAME(INFO) \
813   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
814
815 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
816    from smaller values.  Start with zero, widen, *then* decrement.  */
817 #define MINUS_ONE       (((bfd_vma)0) - 1)
818 #define MINUS_TWO       (((bfd_vma)0) - 2)
819
820 /* The value to write into got[1] for SVR4 targets, to identify it is
821    a GNU object.  The dynamic linker can then use got[1] to store the
822    module pointer.  */
823 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
824   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
825
826 /* The offset of $gp from the beginning of the .got section.  */
827 #define ELF_MIPS_GP_OFFSET(INFO) \
828   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
829
830 /* The maximum size of the GOT for it to be addressable using 16-bit
831    offsets from $gp.  */
832 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
833
834 /* Instructions which appear in a stub.  */
835 #define STUB_LW(abfd)                                                   \
836   ((ABI_64_P (abfd)                                                     \
837     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
838     : 0x8f998010))                              /* lw t9,0x8010(gp) */
839 #define STUB_MOVE(abfd)                                                 \
840    ((ABI_64_P (abfd)                                                    \
841      ? 0x03e0782d                               /* daddu t7,ra */       \
842      : 0x03e07821))                             /* addu t7,ra */
843 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
844 #define STUB_JALR 0x0320f809                    /* jalr t9,ra */
845 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
846 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
847 #define STUB_LI16S(abfd, VAL)                                           \
848    ((ABI_64_P (abfd)                                                    \
849     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
850     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
851
852 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
853 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
854
855 /* The name of the dynamic interpreter.  This is put in the .interp
856    section.  */
857
858 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
859    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
860     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
861     : "/usr/lib/libc.so.1")
862
863 #ifdef BFD64
864 #define MNAME(bfd,pre,pos) \
865   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
866 #define ELF_R_SYM(bfd, i)                                       \
867   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
868 #define ELF_R_TYPE(bfd, i)                                      \
869   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
870 #define ELF_R_INFO(bfd, s, t)                                   \
871   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
872 #else
873 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
874 #define ELF_R_SYM(bfd, i)                                       \
875   (ELF32_R_SYM (i))
876 #define ELF_R_TYPE(bfd, i)                                      \
877   (ELF32_R_TYPE (i))
878 #define ELF_R_INFO(bfd, s, t)                                   \
879   (ELF32_R_INFO (s, t))
880 #endif
881 \f
882   /* The mips16 compiler uses a couple of special sections to handle
883      floating point arguments.
884
885      Section names that look like .mips16.fn.FNNAME contain stubs that
886      copy floating point arguments from the fp regs to the gp regs and
887      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
888      call should be redirected to the stub instead.  If no 32 bit
889      function calls FNNAME, the stub should be discarded.  We need to
890      consider any reference to the function, not just a call, because
891      if the address of the function is taken we will need the stub,
892      since the address might be passed to a 32 bit function.
893
894      Section names that look like .mips16.call.FNNAME contain stubs
895      that copy floating point arguments from the gp regs to the fp
896      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
897      then any 16 bit function that calls FNNAME should be redirected
898      to the stub instead.  If FNNAME is not a 32 bit function, the
899      stub should be discarded.
900
901      .mips16.call.fp.FNNAME sections are similar, but contain stubs
902      which call FNNAME and then copy the return value from the fp regs
903      to the gp regs.  These stubs store the return value in $18 while
904      calling FNNAME; any function which might call one of these stubs
905      must arrange to save $18 around the call.  (This case is not
906      needed for 32 bit functions that call 16 bit functions, because
907      16 bit functions always return floating point values in both
908      $f0/$f1 and $2/$3.)
909
910      Note that in all cases FNNAME might be defined statically.
911      Therefore, FNNAME is not used literally.  Instead, the relocation
912      information will indicate which symbol the section is for.
913
914      We record any stubs that we find in the symbol table.  */
915
916 #define FN_STUB ".mips16.fn."
917 #define CALL_STUB ".mips16.call."
918 #define CALL_FP_STUB ".mips16.call.fp."
919
920 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
921 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
922 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
923 \f
924 /* The format of the first PLT entry in an O32 executable.  */
925 static const bfd_vma mips_o32_exec_plt0_entry[] =
926 {
927   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
928   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
929   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
930   0x031cc023,   /* subu $24, $24, $28                                   */
931   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
932   0x0018c082,   /* srl $24, $24, 2                                      */
933   0x0320f809,   /* jalr $25                                             */
934   0x2718fffe    /* subu $24, $24, 2                                     */
935 };
936
937 /* The format of the first PLT entry in an N32 executable.  Different
938    because gp ($28) is not available; we use t2 ($14) instead.  */
939 static const bfd_vma mips_n32_exec_plt0_entry[] =
940 {
941   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
942   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
943   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
944   0x030ec023,   /* subu $24, $24, $14                                   */
945   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
946   0x0018c082,   /* srl $24, $24, 2                                      */
947   0x0320f809,   /* jalr $25                                             */
948   0x2718fffe    /* subu $24, $24, 2                                     */
949 };
950
951 /* The format of the first PLT entry in an N64 executable.  Different
952    from N32 because of the increased size of GOT entries.  */
953 static const bfd_vma mips_n64_exec_plt0_entry[] =
954 {
955   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
956   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
957   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
958   0x030ec023,   /* subu $24, $24, $14                                   */
959   0x03e0782d,   /* move $15, $31        # 64-bit move (daddu)           */
960   0x0018c0c2,   /* srl $24, $24, 3                                      */
961   0x0320f809,   /* jalr $25                                             */
962   0x2718fffe    /* subu $24, $24, 2                                     */
963 };
964
965 /* The format of subsequent PLT entries.  */
966 static const bfd_vma mips_exec_plt_entry[] =
967 {
968   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
969   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
970   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
971   0x03200008    /* jr $25                                       */
972 };
973
974 /* The format of the first PLT entry in a VxWorks executable.  */
975 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
976 {
977   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
978   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
979   0x8f390008,   /* lw t9, 8(t9)                                 */
980   0x00000000,   /* nop                                          */
981   0x03200008,   /* jr t9                                        */
982   0x00000000    /* nop                                          */
983 };
984
985 /* The format of subsequent PLT entries.  */
986 static const bfd_vma mips_vxworks_exec_plt_entry[] =
987 {
988   0x10000000,   /* b .PLT_resolver                      */
989   0x24180000,   /* li t8, <pltindex>                    */
990   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
991   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
992   0x8f390000,   /* lw t9, 0(t9)                         */
993   0x00000000,   /* nop                                  */
994   0x03200008,   /* jr t9                                */
995   0x00000000    /* nop                                  */
996 };
997
998 /* The format of the first PLT entry in a VxWorks shared object.  */
999 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1000 {
1001   0x8f990008,   /* lw t9, 8(gp)         */
1002   0x00000000,   /* nop                  */
1003   0x03200008,   /* jr t9                */
1004   0x00000000,   /* nop                  */
1005   0x00000000,   /* nop                  */
1006   0x00000000    /* nop                  */
1007 };
1008
1009 /* The format of subsequent PLT entries.  */
1010 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1011 {
1012   0x10000000,   /* b .PLT_resolver      */
1013   0x24180000    /* li t8, <pltindex>    */
1014 };
1015 \f
1016 /* microMIPS 32-bit opcode helper installer.  */
1017
1018 static void
1019 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1020 {
1021   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1022   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1023 }
1024
1025 /* microMIPS 32-bit opcode helper retriever.  */
1026
1027 static bfd_vma
1028 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1029 {
1030   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1031 }
1032 \f
1033 /* Look up an entry in a MIPS ELF linker hash table.  */
1034
1035 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
1036   ((struct mips_elf_link_hash_entry *)                                  \
1037    elf_link_hash_lookup (&(table)->root, (string), (create),            \
1038                          (copy), (follow)))
1039
1040 /* Traverse a MIPS ELF linker hash table.  */
1041
1042 #define mips_elf_link_hash_traverse(table, func, info)                  \
1043   (elf_link_hash_traverse                                               \
1044    (&(table)->root,                                                     \
1045     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1046     (info)))
1047
1048 /* Find the base offsets for thread-local storage in this object,
1049    for GD/LD and IE/LE respectively.  */
1050
1051 #define TP_OFFSET 0x7000
1052 #define DTP_OFFSET 0x8000
1053
1054 static bfd_vma
1055 dtprel_base (struct bfd_link_info *info)
1056 {
1057   /* If tls_sec is NULL, we should have signalled an error already.  */
1058   if (elf_hash_table (info)->tls_sec == NULL)
1059     return 0;
1060   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1061 }
1062
1063 static bfd_vma
1064 tprel_base (struct bfd_link_info *info)
1065 {
1066   /* If tls_sec is NULL, we should have signalled an error already.  */
1067   if (elf_hash_table (info)->tls_sec == NULL)
1068     return 0;
1069   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1070 }
1071
1072 /* Create an entry in a MIPS ELF linker hash table.  */
1073
1074 static struct bfd_hash_entry *
1075 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1076                             struct bfd_hash_table *table, const char *string)
1077 {
1078   struct mips_elf_link_hash_entry *ret =
1079     (struct mips_elf_link_hash_entry *) entry;
1080
1081   /* Allocate the structure if it has not already been allocated by a
1082      subclass.  */
1083   if (ret == NULL)
1084     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1085   if (ret == NULL)
1086     return (struct bfd_hash_entry *) ret;
1087
1088   /* Call the allocation method of the superclass.  */
1089   ret = ((struct mips_elf_link_hash_entry *)
1090          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1091                                      table, string));
1092   if (ret != NULL)
1093     {
1094       /* Set local fields.  */
1095       memset (&ret->esym, 0, sizeof (EXTR));
1096       /* We use -2 as a marker to indicate that the information has
1097          not been set.  -1 means there is no associated ifd.  */
1098       ret->esym.ifd = -2;
1099       ret->la25_stub = 0;
1100       ret->possibly_dynamic_relocs = 0;
1101       ret->fn_stub = NULL;
1102       ret->call_stub = NULL;
1103       ret->call_fp_stub = NULL;
1104       ret->tls_type = GOT_NORMAL;
1105       ret->global_got_area = GGA_NONE;
1106       ret->got_only_for_calls = TRUE;
1107       ret->readonly_reloc = FALSE;
1108       ret->has_static_relocs = FALSE;
1109       ret->no_fn_stub = FALSE;
1110       ret->need_fn_stub = FALSE;
1111       ret->has_nonpic_branches = FALSE;
1112       ret->needs_lazy_stub = FALSE;
1113     }
1114
1115   return (struct bfd_hash_entry *) ret;
1116 }
1117
1118 bfd_boolean
1119 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1120 {
1121   if (!sec->used_by_bfd)
1122     {
1123       struct _mips_elf_section_data *sdata;
1124       bfd_size_type amt = sizeof (*sdata);
1125
1126       sdata = bfd_zalloc (abfd, amt);
1127       if (sdata == NULL)
1128         return FALSE;
1129       sec->used_by_bfd = sdata;
1130     }
1131
1132   return _bfd_elf_new_section_hook (abfd, sec);
1133 }
1134 \f
1135 /* Read ECOFF debugging information from a .mdebug section into a
1136    ecoff_debug_info structure.  */
1137
1138 bfd_boolean
1139 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1140                                struct ecoff_debug_info *debug)
1141 {
1142   HDRR *symhdr;
1143   const struct ecoff_debug_swap *swap;
1144   char *ext_hdr;
1145
1146   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1147   memset (debug, 0, sizeof (*debug));
1148
1149   ext_hdr = bfd_malloc (swap->external_hdr_size);
1150   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1151     goto error_return;
1152
1153   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1154                                   swap->external_hdr_size))
1155     goto error_return;
1156
1157   symhdr = &debug->symbolic_header;
1158   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1159
1160   /* The symbolic header contains absolute file offsets and sizes to
1161      read.  */
1162 #define READ(ptr, offset, count, size, type)                            \
1163   if (symhdr->count == 0)                                               \
1164     debug->ptr = NULL;                                                  \
1165   else                                                                  \
1166     {                                                                   \
1167       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1168       debug->ptr = bfd_malloc (amt);                                    \
1169       if (debug->ptr == NULL)                                           \
1170         goto error_return;                                              \
1171       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1172           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1173         goto error_return;                                              \
1174     }
1175
1176   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1177   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1178   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1179   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1180   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1181   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1182         union aux_ext *);
1183   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1184   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1185   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1186   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1187   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1188 #undef READ
1189
1190   debug->fdr = NULL;
1191
1192   return TRUE;
1193
1194  error_return:
1195   if (ext_hdr != NULL)
1196     free (ext_hdr);
1197   if (debug->line != NULL)
1198     free (debug->line);
1199   if (debug->external_dnr != NULL)
1200     free (debug->external_dnr);
1201   if (debug->external_pdr != NULL)
1202     free (debug->external_pdr);
1203   if (debug->external_sym != NULL)
1204     free (debug->external_sym);
1205   if (debug->external_opt != NULL)
1206     free (debug->external_opt);
1207   if (debug->external_aux != NULL)
1208     free (debug->external_aux);
1209   if (debug->ss != NULL)
1210     free (debug->ss);
1211   if (debug->ssext != NULL)
1212     free (debug->ssext);
1213   if (debug->external_fdr != NULL)
1214     free (debug->external_fdr);
1215   if (debug->external_rfd != NULL)
1216     free (debug->external_rfd);
1217   if (debug->external_ext != NULL)
1218     free (debug->external_ext);
1219   return FALSE;
1220 }
1221 \f
1222 /* Swap RPDR (runtime procedure table entry) for output.  */
1223
1224 static void
1225 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1226 {
1227   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1228   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1229   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1230   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1231   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1232   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1233
1234   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1235   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1236
1237   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1238 }
1239
1240 /* Create a runtime procedure table from the .mdebug section.  */
1241
1242 static bfd_boolean
1243 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1244                                  struct bfd_link_info *info, asection *s,
1245                                  struct ecoff_debug_info *debug)
1246 {
1247   const struct ecoff_debug_swap *swap;
1248   HDRR *hdr = &debug->symbolic_header;
1249   RPDR *rpdr, *rp;
1250   struct rpdr_ext *erp;
1251   void *rtproc;
1252   struct pdr_ext *epdr;
1253   struct sym_ext *esym;
1254   char *ss, **sv;
1255   char *str;
1256   bfd_size_type size;
1257   bfd_size_type count;
1258   unsigned long sindex;
1259   unsigned long i;
1260   PDR pdr;
1261   SYMR sym;
1262   const char *no_name_func = _("static procedure (no name)");
1263
1264   epdr = NULL;
1265   rpdr = NULL;
1266   esym = NULL;
1267   ss = NULL;
1268   sv = NULL;
1269
1270   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1271
1272   sindex = strlen (no_name_func) + 1;
1273   count = hdr->ipdMax;
1274   if (count > 0)
1275     {
1276       size = swap->external_pdr_size;
1277
1278       epdr = bfd_malloc (size * count);
1279       if (epdr == NULL)
1280         goto error_return;
1281
1282       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1283         goto error_return;
1284
1285       size = sizeof (RPDR);
1286       rp = rpdr = bfd_malloc (size * count);
1287       if (rpdr == NULL)
1288         goto error_return;
1289
1290       size = sizeof (char *);
1291       sv = bfd_malloc (size * count);
1292       if (sv == NULL)
1293         goto error_return;
1294
1295       count = hdr->isymMax;
1296       size = swap->external_sym_size;
1297       esym = bfd_malloc (size * count);
1298       if (esym == NULL)
1299         goto error_return;
1300
1301       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1302         goto error_return;
1303
1304       count = hdr->issMax;
1305       ss = bfd_malloc (count);
1306       if (ss == NULL)
1307         goto error_return;
1308       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1309         goto error_return;
1310
1311       count = hdr->ipdMax;
1312       for (i = 0; i < (unsigned long) count; i++, rp++)
1313         {
1314           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1315           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1316           rp->adr = sym.value;
1317           rp->regmask = pdr.regmask;
1318           rp->regoffset = pdr.regoffset;
1319           rp->fregmask = pdr.fregmask;
1320           rp->fregoffset = pdr.fregoffset;
1321           rp->frameoffset = pdr.frameoffset;
1322           rp->framereg = pdr.framereg;
1323           rp->pcreg = pdr.pcreg;
1324           rp->irpss = sindex;
1325           sv[i] = ss + sym.iss;
1326           sindex += strlen (sv[i]) + 1;
1327         }
1328     }
1329
1330   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1331   size = BFD_ALIGN (size, 16);
1332   rtproc = bfd_alloc (abfd, size);
1333   if (rtproc == NULL)
1334     {
1335       mips_elf_hash_table (info)->procedure_count = 0;
1336       goto error_return;
1337     }
1338
1339   mips_elf_hash_table (info)->procedure_count = count + 2;
1340
1341   erp = rtproc;
1342   memset (erp, 0, sizeof (struct rpdr_ext));
1343   erp++;
1344   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1345   strcpy (str, no_name_func);
1346   str += strlen (no_name_func) + 1;
1347   for (i = 0; i < count; i++)
1348     {
1349       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1350       strcpy (str, sv[i]);
1351       str += strlen (sv[i]) + 1;
1352     }
1353   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1354
1355   /* Set the size and contents of .rtproc section.  */
1356   s->size = size;
1357   s->contents = rtproc;
1358
1359   /* Skip this section later on (I don't think this currently
1360      matters, but someday it might).  */
1361   s->map_head.link_order = NULL;
1362
1363   if (epdr != NULL)
1364     free (epdr);
1365   if (rpdr != NULL)
1366     free (rpdr);
1367   if (esym != NULL)
1368     free (esym);
1369   if (ss != NULL)
1370     free (ss);
1371   if (sv != NULL)
1372     free (sv);
1373
1374   return TRUE;
1375
1376  error_return:
1377   if (epdr != NULL)
1378     free (epdr);
1379   if (rpdr != NULL)
1380     free (rpdr);
1381   if (esym != NULL)
1382     free (esym);
1383   if (ss != NULL)
1384     free (ss);
1385   if (sv != NULL)
1386     free (sv);
1387   return FALSE;
1388 }
1389 \f
1390 /* We're going to create a stub for H.  Create a symbol for the stub's
1391    value and size, to help make the disassembly easier to read.  */
1392
1393 static bfd_boolean
1394 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1395                              struct mips_elf_link_hash_entry *h,
1396                              const char *prefix, asection *s, bfd_vma value,
1397                              bfd_vma size)
1398 {
1399   struct bfd_link_hash_entry *bh;
1400   struct elf_link_hash_entry *elfh;
1401   const char *name;
1402
1403   if (ELF_ST_IS_MICROMIPS (h->root.other))
1404     value |= 1;
1405
1406   /* Create a new symbol.  */
1407   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1408   bh = NULL;
1409   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1410                                          BSF_LOCAL, s, value, NULL,
1411                                          TRUE, FALSE, &bh))
1412     return FALSE;
1413
1414   /* Make it a local function.  */
1415   elfh = (struct elf_link_hash_entry *) bh;
1416   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1417   elfh->size = size;
1418   elfh->forced_local = 1;
1419   return TRUE;
1420 }
1421
1422 /* We're about to redefine H.  Create a symbol to represent H's
1423    current value and size, to help make the disassembly easier
1424    to read.  */
1425
1426 static bfd_boolean
1427 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1428                                struct mips_elf_link_hash_entry *h,
1429                                const char *prefix)
1430 {
1431   struct bfd_link_hash_entry *bh;
1432   struct elf_link_hash_entry *elfh;
1433   const char *name;
1434   asection *s;
1435   bfd_vma value;
1436
1437   /* Read the symbol's value.  */
1438   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1439               || h->root.root.type == bfd_link_hash_defweak);
1440   s = h->root.root.u.def.section;
1441   value = h->root.root.u.def.value;
1442
1443   /* Create a new symbol.  */
1444   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1445   bh = NULL;
1446   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1447                                          BSF_LOCAL, s, value, NULL,
1448                                          TRUE, FALSE, &bh))
1449     return FALSE;
1450
1451   /* Make it local and copy the other attributes from H.  */
1452   elfh = (struct elf_link_hash_entry *) bh;
1453   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1454   elfh->other = h->root.other;
1455   elfh->size = h->root.size;
1456   elfh->forced_local = 1;
1457   return TRUE;
1458 }
1459
1460 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1461    function rather than to a hard-float stub.  */
1462
1463 static bfd_boolean
1464 section_allows_mips16_refs_p (asection *section)
1465 {
1466   const char *name;
1467
1468   name = bfd_get_section_name (section->owner, section);
1469   return (FN_STUB_P (name)
1470           || CALL_STUB_P (name)
1471           || CALL_FP_STUB_P (name)
1472           || strcmp (name, ".pdr") == 0);
1473 }
1474
1475 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1476    stub section of some kind.  Return the R_SYMNDX of the target
1477    function, or 0 if we can't decide which function that is.  */
1478
1479 static unsigned long
1480 mips16_stub_symndx (const struct elf_backend_data *bed,
1481                     asection *sec ATTRIBUTE_UNUSED,
1482                     const Elf_Internal_Rela *relocs,
1483                     const Elf_Internal_Rela *relend)
1484 {
1485   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1486   const Elf_Internal_Rela *rel;
1487
1488   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1489      one in a compound relocation.  */
1490   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1491     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1492       return ELF_R_SYM (sec->owner, rel->r_info);
1493
1494   /* Otherwise trust the first relocation, whatever its kind.  This is
1495      the traditional behavior.  */
1496   if (relocs < relend)
1497     return ELF_R_SYM (sec->owner, relocs->r_info);
1498
1499   return 0;
1500 }
1501
1502 /* Check the mips16 stubs for a particular symbol, and see if we can
1503    discard them.  */
1504
1505 static void
1506 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1507                              struct mips_elf_link_hash_entry *h)
1508 {
1509   /* Dynamic symbols must use the standard call interface, in case other
1510      objects try to call them.  */
1511   if (h->fn_stub != NULL
1512       && h->root.dynindx != -1)
1513     {
1514       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1515       h->need_fn_stub = TRUE;
1516     }
1517
1518   if (h->fn_stub != NULL
1519       && ! h->need_fn_stub)
1520     {
1521       /* We don't need the fn_stub; the only references to this symbol
1522          are 16 bit calls.  Clobber the size to 0 to prevent it from
1523          being included in the link.  */
1524       h->fn_stub->size = 0;
1525       h->fn_stub->flags &= ~SEC_RELOC;
1526       h->fn_stub->reloc_count = 0;
1527       h->fn_stub->flags |= SEC_EXCLUDE;
1528     }
1529
1530   if (h->call_stub != NULL
1531       && ELF_ST_IS_MIPS16 (h->root.other))
1532     {
1533       /* We don't need the call_stub; this is a 16 bit function, so
1534          calls from other 16 bit functions are OK.  Clobber the size
1535          to 0 to prevent it from being included in the link.  */
1536       h->call_stub->size = 0;
1537       h->call_stub->flags &= ~SEC_RELOC;
1538       h->call_stub->reloc_count = 0;
1539       h->call_stub->flags |= SEC_EXCLUDE;
1540     }
1541
1542   if (h->call_fp_stub != NULL
1543       && ELF_ST_IS_MIPS16 (h->root.other))
1544     {
1545       /* We don't need the call_stub; this is a 16 bit function, so
1546          calls from other 16 bit functions are OK.  Clobber the size
1547          to 0 to prevent it from being included in the link.  */
1548       h->call_fp_stub->size = 0;
1549       h->call_fp_stub->flags &= ~SEC_RELOC;
1550       h->call_fp_stub->reloc_count = 0;
1551       h->call_fp_stub->flags |= SEC_EXCLUDE;
1552     }
1553 }
1554
1555 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1556
1557 static hashval_t
1558 mips_elf_la25_stub_hash (const void *entry_)
1559 {
1560   const struct mips_elf_la25_stub *entry;
1561
1562   entry = (struct mips_elf_la25_stub *) entry_;
1563   return entry->h->root.root.u.def.section->id
1564     + entry->h->root.root.u.def.value;
1565 }
1566
1567 static int
1568 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1569 {
1570   const struct mips_elf_la25_stub *entry1, *entry2;
1571
1572   entry1 = (struct mips_elf_la25_stub *) entry1_;
1573   entry2 = (struct mips_elf_la25_stub *) entry2_;
1574   return ((entry1->h->root.root.u.def.section
1575            == entry2->h->root.root.u.def.section)
1576           && (entry1->h->root.root.u.def.value
1577               == entry2->h->root.root.u.def.value));
1578 }
1579
1580 /* Called by the linker to set up the la25 stub-creation code.  FN is
1581    the linker's implementation of add_stub_function.  Return true on
1582    success.  */
1583
1584 bfd_boolean
1585 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1586                           asection *(*fn) (const char *, asection *,
1587                                            asection *))
1588 {
1589   struct mips_elf_link_hash_table *htab;
1590
1591   htab = mips_elf_hash_table (info);
1592   if (htab == NULL)
1593     return FALSE;
1594
1595   htab->add_stub_section = fn;
1596   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1597                                       mips_elf_la25_stub_eq, NULL);
1598   if (htab->la25_stubs == NULL)
1599     return FALSE;
1600
1601   return TRUE;
1602 }
1603
1604 /* Return true if H is a locally-defined PIC function, in the sense
1605    that it or its fn_stub might need $25 to be valid on entry.
1606    Note that MIPS16 functions set up $gp using PC-relative instructions,
1607    so they themselves never need $25 to be valid.  Only non-MIPS16
1608    entry points are of interest here.  */
1609
1610 static bfd_boolean
1611 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1612 {
1613   return ((h->root.root.type == bfd_link_hash_defined
1614            || h->root.root.type == bfd_link_hash_defweak)
1615           && h->root.def_regular
1616           && !bfd_is_abs_section (h->root.root.u.def.section)
1617           && (!ELF_ST_IS_MIPS16 (h->root.other)
1618               || (h->fn_stub && h->need_fn_stub))
1619           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1620               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1621 }
1622
1623 /* Set *SEC to the input section that contains the target of STUB.
1624    Return the offset of the target from the start of that section.  */
1625
1626 static bfd_vma
1627 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1628                           asection **sec)
1629 {
1630   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1631     {
1632       BFD_ASSERT (stub->h->need_fn_stub);
1633       *sec = stub->h->fn_stub;
1634       return 0;
1635     }
1636   else
1637     {
1638       *sec = stub->h->root.root.u.def.section;
1639       return stub->h->root.root.u.def.value;
1640     }
1641 }
1642
1643 /* STUB describes an la25 stub that we have decided to implement
1644    by inserting an LUI/ADDIU pair before the target function.
1645    Create the section and redirect the function symbol to it.  */
1646
1647 static bfd_boolean
1648 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1649                          struct bfd_link_info *info)
1650 {
1651   struct mips_elf_link_hash_table *htab;
1652   char *name;
1653   asection *s, *input_section;
1654   unsigned int align;
1655
1656   htab = mips_elf_hash_table (info);
1657   if (htab == NULL)
1658     return FALSE;
1659
1660   /* Create a unique name for the new section.  */
1661   name = bfd_malloc (11 + sizeof (".text.stub."));
1662   if (name == NULL)
1663     return FALSE;
1664   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1665
1666   /* Create the section.  */
1667   mips_elf_get_la25_target (stub, &input_section);
1668   s = htab->add_stub_section (name, input_section,
1669                               input_section->output_section);
1670   if (s == NULL)
1671     return FALSE;
1672
1673   /* Make sure that any padding goes before the stub.  */
1674   align = input_section->alignment_power;
1675   if (!bfd_set_section_alignment (s->owner, s, align))
1676     return FALSE;
1677   if (align > 3)
1678     s->size = (1 << align) - 8;
1679
1680   /* Create a symbol for the stub.  */
1681   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1682   stub->stub_section = s;
1683   stub->offset = s->size;
1684
1685   /* Allocate room for it.  */
1686   s->size += 8;
1687   return TRUE;
1688 }
1689
1690 /* STUB describes an la25 stub that we have decided to implement
1691    with a separate trampoline.  Allocate room for it and redirect
1692    the function symbol to it.  */
1693
1694 static bfd_boolean
1695 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1696                               struct bfd_link_info *info)
1697 {
1698   struct mips_elf_link_hash_table *htab;
1699   asection *s;
1700
1701   htab = mips_elf_hash_table (info);
1702   if (htab == NULL)
1703     return FALSE;
1704
1705   /* Create a trampoline section, if we haven't already.  */
1706   s = htab->strampoline;
1707   if (s == NULL)
1708     {
1709       asection *input_section = stub->h->root.root.u.def.section;
1710       s = htab->add_stub_section (".text", NULL,
1711                                   input_section->output_section);
1712       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1713         return FALSE;
1714       htab->strampoline = s;
1715     }
1716
1717   /* Create a symbol for the stub.  */
1718   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1719   stub->stub_section = s;
1720   stub->offset = s->size;
1721
1722   /* Allocate room for it.  */
1723   s->size += 16;
1724   return TRUE;
1725 }
1726
1727 /* H describes a symbol that needs an la25 stub.  Make sure that an
1728    appropriate stub exists and point H at it.  */
1729
1730 static bfd_boolean
1731 mips_elf_add_la25_stub (struct bfd_link_info *info,
1732                         struct mips_elf_link_hash_entry *h)
1733 {
1734   struct mips_elf_link_hash_table *htab;
1735   struct mips_elf_la25_stub search, *stub;
1736   bfd_boolean use_trampoline_p;
1737   asection *s;
1738   bfd_vma value;
1739   void **slot;
1740
1741   /* Describe the stub we want.  */
1742   search.stub_section = NULL;
1743   search.offset = 0;
1744   search.h = h;
1745
1746   /* See if we've already created an equivalent stub.  */
1747   htab = mips_elf_hash_table (info);
1748   if (htab == NULL)
1749     return FALSE;
1750
1751   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1752   if (slot == NULL)
1753     return FALSE;
1754
1755   stub = (struct mips_elf_la25_stub *) *slot;
1756   if (stub != NULL)
1757     {
1758       /* We can reuse the existing stub.  */
1759       h->la25_stub = stub;
1760       return TRUE;
1761     }
1762
1763   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1764   stub = bfd_malloc (sizeof (search));
1765   if (stub == NULL)
1766     return FALSE;
1767   *stub = search;
1768   *slot = stub;
1769
1770   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1771      of the section and if we would need no more than 2 nops.  */
1772   value = mips_elf_get_la25_target (stub, &s);
1773   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1774
1775   h->la25_stub = stub;
1776   return (use_trampoline_p
1777           ? mips_elf_add_la25_trampoline (stub, info)
1778           : mips_elf_add_la25_intro (stub, info));
1779 }
1780
1781 /* A mips_elf_link_hash_traverse callback that is called before sizing
1782    sections.  DATA points to a mips_htab_traverse_info structure.  */
1783
1784 static bfd_boolean
1785 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1786 {
1787   struct mips_htab_traverse_info *hti;
1788
1789   hti = (struct mips_htab_traverse_info *) data;
1790   if (!hti->info->relocatable)
1791     mips_elf_check_mips16_stubs (hti->info, h);
1792
1793   if (mips_elf_local_pic_function_p (h))
1794     {
1795       /* PR 12845: If H is in a section that has been garbage
1796          collected it will have its output section set to *ABS*.  */
1797       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1798         return TRUE;
1799
1800       /* H is a function that might need $25 to be valid on entry.
1801          If we're creating a non-PIC relocatable object, mark H as
1802          being PIC.  If we're creating a non-relocatable object with
1803          non-PIC branches and jumps to H, make sure that H has an la25
1804          stub.  */
1805       if (hti->info->relocatable)
1806         {
1807           if (!PIC_OBJECT_P (hti->output_bfd))
1808             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1809         }
1810       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1811         {
1812           hti->error = TRUE;
1813           return FALSE;
1814         }
1815     }
1816   return TRUE;
1817 }
1818 \f
1819 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1820    Most mips16 instructions are 16 bits, but these instructions
1821    are 32 bits.
1822
1823    The format of these instructions is:
1824
1825    +--------------+--------------------------------+
1826    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
1827    +--------------+--------------------------------+
1828    |                Immediate  15:0                |
1829    +-----------------------------------------------+
1830
1831    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
1832    Note that the immediate value in the first word is swapped.
1833
1834    When producing a relocatable object file, R_MIPS16_26 is
1835    handled mostly like R_MIPS_26.  In particular, the addend is
1836    stored as a straight 26-bit value in a 32-bit instruction.
1837    (gas makes life simpler for itself by never adjusting a
1838    R_MIPS16_26 reloc to be against a section, so the addend is
1839    always zero).  However, the 32 bit instruction is stored as 2
1840    16-bit values, rather than a single 32-bit value.  In a
1841    big-endian file, the result is the same; in a little-endian
1842    file, the two 16-bit halves of the 32 bit value are swapped.
1843    This is so that a disassembler can recognize the jal
1844    instruction.
1845
1846    When doing a final link, R_MIPS16_26 is treated as a 32 bit
1847    instruction stored as two 16-bit values.  The addend A is the
1848    contents of the targ26 field.  The calculation is the same as
1849    R_MIPS_26.  When storing the calculated value, reorder the
1850    immediate value as shown above, and don't forget to store the
1851    value as two 16-bit values.
1852
1853    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1854    defined as
1855
1856    big-endian:
1857    +--------+----------------------+
1858    |        |                      |
1859    |        |    targ26-16         |
1860    |31    26|25                   0|
1861    +--------+----------------------+
1862
1863    little-endian:
1864    +----------+------+-------------+
1865    |          |      |             |
1866    |  sub1    |      |     sub2    |
1867    |0        9|10  15|16         31|
1868    +----------+--------------------+
1869    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1870    ((sub1 << 16) | sub2)).
1871
1872    When producing a relocatable object file, the calculation is
1873    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1874    When producing a fully linked file, the calculation is
1875    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1876    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1877
1878    The table below lists the other MIPS16 instruction relocations.
1879    Each one is calculated in the same way as the non-MIPS16 relocation
1880    given on the right, but using the extended MIPS16 layout of 16-bit
1881    immediate fields:
1882
1883         R_MIPS16_GPREL          R_MIPS_GPREL16
1884         R_MIPS16_GOT16          R_MIPS_GOT16
1885         R_MIPS16_CALL16         R_MIPS_CALL16
1886         R_MIPS16_HI16           R_MIPS_HI16
1887         R_MIPS16_LO16           R_MIPS_LO16
1888
1889    A typical instruction will have a format like this:
1890
1891    +--------------+--------------------------------+
1892    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
1893    +--------------+--------------------------------+
1894    |    Major     |   rx   |   ry   |   Imm  4:0   |
1895    +--------------+--------------------------------+
1896
1897    EXTEND is the five bit value 11110.  Major is the instruction
1898    opcode.
1899
1900    All we need to do here is shuffle the bits appropriately.
1901    As above, the two 16-bit halves must be swapped on a
1902    little-endian system.  */
1903
1904 static inline bfd_boolean
1905 mips16_reloc_p (int r_type)
1906 {
1907   switch (r_type)
1908     {
1909     case R_MIPS16_26:
1910     case R_MIPS16_GPREL:
1911     case R_MIPS16_GOT16:
1912     case R_MIPS16_CALL16:
1913     case R_MIPS16_HI16:
1914     case R_MIPS16_LO16:
1915     case R_MIPS16_TLS_GD:
1916     case R_MIPS16_TLS_LDM:
1917     case R_MIPS16_TLS_DTPREL_HI16:
1918     case R_MIPS16_TLS_DTPREL_LO16:
1919     case R_MIPS16_TLS_GOTTPREL:
1920     case R_MIPS16_TLS_TPREL_HI16:
1921     case R_MIPS16_TLS_TPREL_LO16:
1922       return TRUE;
1923
1924     default:
1925       return FALSE;
1926     }
1927 }
1928
1929 /* Check if a microMIPS reloc.  */
1930
1931 static inline bfd_boolean
1932 micromips_reloc_p (unsigned int r_type)
1933 {
1934   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
1935 }
1936
1937 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
1938    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
1939    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
1940
1941 static inline bfd_boolean
1942 micromips_reloc_shuffle_p (unsigned int r_type)
1943 {
1944   return (micromips_reloc_p (r_type)
1945           && r_type != R_MICROMIPS_PC7_S1
1946           && r_type != R_MICROMIPS_PC10_S1);
1947 }
1948
1949 static inline bfd_boolean
1950 got16_reloc_p (int r_type)
1951 {
1952   return (r_type == R_MIPS_GOT16
1953           || r_type == R_MIPS16_GOT16
1954           || r_type == R_MICROMIPS_GOT16);
1955 }
1956
1957 static inline bfd_boolean
1958 call16_reloc_p (int r_type)
1959 {
1960   return (r_type == R_MIPS_CALL16
1961           || r_type == R_MIPS16_CALL16
1962           || r_type == R_MICROMIPS_CALL16);
1963 }
1964
1965 static inline bfd_boolean
1966 got_disp_reloc_p (unsigned int r_type)
1967 {
1968   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
1969 }
1970
1971 static inline bfd_boolean
1972 got_page_reloc_p (unsigned int r_type)
1973 {
1974   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
1975 }
1976
1977 static inline bfd_boolean
1978 got_ofst_reloc_p (unsigned int r_type)
1979 {
1980   return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
1981 }
1982
1983 static inline bfd_boolean
1984 got_hi16_reloc_p (unsigned int r_type)
1985 {
1986   return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
1987 }
1988
1989 static inline bfd_boolean
1990 got_lo16_reloc_p (unsigned int r_type)
1991 {
1992   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
1993 }
1994
1995 static inline bfd_boolean
1996 call_hi16_reloc_p (unsigned int r_type)
1997 {
1998   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
1999 }
2000
2001 static inline bfd_boolean
2002 call_lo16_reloc_p (unsigned int r_type)
2003 {
2004   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2005 }
2006
2007 static inline bfd_boolean
2008 hi16_reloc_p (int r_type)
2009 {
2010   return (r_type == R_MIPS_HI16
2011           || r_type == R_MIPS16_HI16
2012           || r_type == R_MICROMIPS_HI16);
2013 }
2014
2015 static inline bfd_boolean
2016 lo16_reloc_p (int r_type)
2017 {
2018   return (r_type == R_MIPS_LO16
2019           || r_type == R_MIPS16_LO16
2020           || r_type == R_MICROMIPS_LO16);
2021 }
2022
2023 static inline bfd_boolean
2024 mips16_call_reloc_p (int r_type)
2025 {
2026   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2027 }
2028
2029 static inline bfd_boolean
2030 jal_reloc_p (int r_type)
2031 {
2032   return (r_type == R_MIPS_26
2033           || r_type == R_MIPS16_26
2034           || r_type == R_MICROMIPS_26_S1);
2035 }
2036
2037 static inline bfd_boolean
2038 micromips_branch_reloc_p (int r_type)
2039 {
2040   return (r_type == R_MICROMIPS_26_S1
2041           || r_type == R_MICROMIPS_PC16_S1
2042           || r_type == R_MICROMIPS_PC10_S1
2043           || r_type == R_MICROMIPS_PC7_S1);
2044 }
2045
2046 static inline bfd_boolean
2047 tls_gd_reloc_p (unsigned int r_type)
2048 {
2049   return (r_type == R_MIPS_TLS_GD
2050           || r_type == R_MIPS16_TLS_GD
2051           || r_type == R_MICROMIPS_TLS_GD);
2052 }
2053
2054 static inline bfd_boolean
2055 tls_ldm_reloc_p (unsigned int r_type)
2056 {
2057   return (r_type == R_MIPS_TLS_LDM
2058           || r_type == R_MIPS16_TLS_LDM
2059           || r_type == R_MICROMIPS_TLS_LDM);
2060 }
2061
2062 static inline bfd_boolean
2063 tls_gottprel_reloc_p (unsigned int r_type)
2064 {
2065   return (r_type == R_MIPS_TLS_GOTTPREL
2066           || r_type == R_MIPS16_TLS_GOTTPREL
2067           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2068 }
2069
2070 void
2071 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2072                                bfd_boolean jal_shuffle, bfd_byte *data)
2073 {
2074   bfd_vma first, second, val;
2075
2076   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2077     return;
2078
2079   /* Pick up the first and second halfwords of the instruction.  */
2080   first = bfd_get_16 (abfd, data);
2081   second = bfd_get_16 (abfd, data + 2);
2082   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2083     val = first << 16 | second;
2084   else if (r_type != R_MIPS16_26)
2085     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2086            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2087   else
2088     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2089            | ((first & 0x1f) << 21) | second);
2090   bfd_put_32 (abfd, val, data);
2091 }
2092
2093 void
2094 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2095                              bfd_boolean jal_shuffle, bfd_byte *data)
2096 {
2097   bfd_vma first, second, val;
2098
2099   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2100     return;
2101
2102   val = bfd_get_32 (abfd, data);
2103   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2104     {
2105       second = val & 0xffff;
2106       first = val >> 16;
2107     }
2108   else if (r_type != R_MIPS16_26)
2109     {
2110       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2111       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2112     }
2113   else
2114     {
2115       second = val & 0xffff;
2116       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2117                | ((val >> 21) & 0x1f);
2118     }
2119   bfd_put_16 (abfd, second, data + 2);
2120   bfd_put_16 (abfd, first, data);
2121 }
2122
2123 bfd_reloc_status_type
2124 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2125                                arelent *reloc_entry, asection *input_section,
2126                                bfd_boolean relocatable, void *data, bfd_vma gp)
2127 {
2128   bfd_vma relocation;
2129   bfd_signed_vma val;
2130   bfd_reloc_status_type status;
2131
2132   if (bfd_is_com_section (symbol->section))
2133     relocation = 0;
2134   else
2135     relocation = symbol->value;
2136
2137   relocation += symbol->section->output_section->vma;
2138   relocation += symbol->section->output_offset;
2139
2140   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2141     return bfd_reloc_outofrange;
2142
2143   /* Set val to the offset into the section or symbol.  */
2144   val = reloc_entry->addend;
2145
2146   _bfd_mips_elf_sign_extend (val, 16);
2147
2148   /* Adjust val for the final section location and GP value.  If we
2149      are producing relocatable output, we don't want to do this for
2150      an external symbol.  */
2151   if (! relocatable
2152       || (symbol->flags & BSF_SECTION_SYM) != 0)
2153     val += relocation - gp;
2154
2155   if (reloc_entry->howto->partial_inplace)
2156     {
2157       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2158                                        (bfd_byte *) data
2159                                        + reloc_entry->address);
2160       if (status != bfd_reloc_ok)
2161         return status;
2162     }
2163   else
2164     reloc_entry->addend = val;
2165
2166   if (relocatable)
2167     reloc_entry->address += input_section->output_offset;
2168
2169   return bfd_reloc_ok;
2170 }
2171
2172 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2173    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2174    that contains the relocation field and DATA points to the start of
2175    INPUT_SECTION.  */
2176
2177 struct mips_hi16
2178 {
2179   struct mips_hi16 *next;
2180   bfd_byte *data;
2181   asection *input_section;
2182   arelent rel;
2183 };
2184
2185 /* FIXME: This should not be a static variable.  */
2186
2187 static struct mips_hi16 *mips_hi16_list;
2188
2189 /* A howto special_function for REL *HI16 relocations.  We can only
2190    calculate the correct value once we've seen the partnering
2191    *LO16 relocation, so just save the information for later.
2192
2193    The ABI requires that the *LO16 immediately follow the *HI16.
2194    However, as a GNU extension, we permit an arbitrary number of
2195    *HI16s to be associated with a single *LO16.  This significantly
2196    simplies the relocation handling in gcc.  */
2197
2198 bfd_reloc_status_type
2199 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2200                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2201                           asection *input_section, bfd *output_bfd,
2202                           char **error_message ATTRIBUTE_UNUSED)
2203 {
2204   struct mips_hi16 *n;
2205
2206   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2207     return bfd_reloc_outofrange;
2208
2209   n = bfd_malloc (sizeof *n);
2210   if (n == NULL)
2211     return bfd_reloc_outofrange;
2212
2213   n->next = mips_hi16_list;
2214   n->data = data;
2215   n->input_section = input_section;
2216   n->rel = *reloc_entry;
2217   mips_hi16_list = n;
2218
2219   if (output_bfd != NULL)
2220     reloc_entry->address += input_section->output_offset;
2221
2222   return bfd_reloc_ok;
2223 }
2224
2225 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2226    like any other 16-bit relocation when applied to global symbols, but is
2227    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2228
2229 bfd_reloc_status_type
2230 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2231                            void *data, asection *input_section,
2232                            bfd *output_bfd, char **error_message)
2233 {
2234   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2235       || bfd_is_und_section (bfd_get_section (symbol))
2236       || bfd_is_com_section (bfd_get_section (symbol)))
2237     /* The relocation is against a global symbol.  */
2238     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2239                                         input_section, output_bfd,
2240                                         error_message);
2241
2242   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2243                                    input_section, output_bfd, error_message);
2244 }
2245
2246 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2247    is a straightforward 16 bit inplace relocation, but we must deal with
2248    any partnering high-part relocations as well.  */
2249
2250 bfd_reloc_status_type
2251 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2252                           void *data, asection *input_section,
2253                           bfd *output_bfd, char **error_message)
2254 {
2255   bfd_vma vallo;
2256   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2257
2258   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2259     return bfd_reloc_outofrange;
2260
2261   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2262                                  location);
2263   vallo = bfd_get_32 (abfd, location);
2264   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2265                                location);
2266
2267   while (mips_hi16_list != NULL)
2268     {
2269       bfd_reloc_status_type ret;
2270       struct mips_hi16 *hi;
2271
2272       hi = mips_hi16_list;
2273
2274       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2275          want to install the addend in the same way as for a R_MIPS*_HI16
2276          relocation (with a rightshift of 16).  However, since GOT16
2277          relocations can also be used with global symbols, their howto
2278          has a rightshift of 0.  */
2279       if (hi->rel.howto->type == R_MIPS_GOT16)
2280         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2281       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2282         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2283       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2284         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2285
2286       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2287          carry or borrow will induce a change of +1 or -1 in the high part.  */
2288       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2289
2290       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2291                                          hi->input_section, output_bfd,
2292                                          error_message);
2293       if (ret != bfd_reloc_ok)
2294         return ret;
2295
2296       mips_hi16_list = hi->next;
2297       free (hi);
2298     }
2299
2300   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2301                                       input_section, output_bfd,
2302                                       error_message);
2303 }
2304
2305 /* A generic howto special_function.  This calculates and installs the
2306    relocation itself, thus avoiding the oft-discussed problems in
2307    bfd_perform_relocation and bfd_install_relocation.  */
2308
2309 bfd_reloc_status_type
2310 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2311                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2312                              asection *input_section, bfd *output_bfd,
2313                              char **error_message ATTRIBUTE_UNUSED)
2314 {
2315   bfd_signed_vma val;
2316   bfd_reloc_status_type status;
2317   bfd_boolean relocatable;
2318
2319   relocatable = (output_bfd != NULL);
2320
2321   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2322     return bfd_reloc_outofrange;
2323
2324   /* Build up the field adjustment in VAL.  */
2325   val = 0;
2326   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2327     {
2328       /* Either we're calculating the final field value or we have a
2329          relocation against a section symbol.  Add in the section's
2330          offset or address.  */
2331       val += symbol->section->output_section->vma;
2332       val += symbol->section->output_offset;
2333     }
2334
2335   if (!relocatable)
2336     {
2337       /* We're calculating the final field value.  Add in the symbol's value
2338          and, if pc-relative, subtract the address of the field itself.  */
2339       val += symbol->value;
2340       if (reloc_entry->howto->pc_relative)
2341         {
2342           val -= input_section->output_section->vma;
2343           val -= input_section->output_offset;
2344           val -= reloc_entry->address;
2345         }
2346     }
2347
2348   /* VAL is now the final adjustment.  If we're keeping this relocation
2349      in the output file, and if the relocation uses a separate addend,
2350      we just need to add VAL to that addend.  Otherwise we need to add
2351      VAL to the relocation field itself.  */
2352   if (relocatable && !reloc_entry->howto->partial_inplace)
2353     reloc_entry->addend += val;
2354   else
2355     {
2356       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2357
2358       /* Add in the separate addend, if any.  */
2359       val += reloc_entry->addend;
2360
2361       /* Add VAL to the relocation field.  */
2362       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2363                                      location);
2364       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2365                                        location);
2366       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2367                                    location);
2368
2369       if (status != bfd_reloc_ok)
2370         return status;
2371     }
2372
2373   if (relocatable)
2374     reloc_entry->address += input_section->output_offset;
2375
2376   return bfd_reloc_ok;
2377 }
2378 \f
2379 /* Swap an entry in a .gptab section.  Note that these routines rely
2380    on the equivalence of the two elements of the union.  */
2381
2382 static void
2383 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2384                               Elf32_gptab *in)
2385 {
2386   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2387   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2388 }
2389
2390 static void
2391 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2392                                Elf32_External_gptab *ex)
2393 {
2394   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2395   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2396 }
2397
2398 static void
2399 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2400                                 Elf32_External_compact_rel *ex)
2401 {
2402   H_PUT_32 (abfd, in->id1, ex->id1);
2403   H_PUT_32 (abfd, in->num, ex->num);
2404   H_PUT_32 (abfd, in->id2, ex->id2);
2405   H_PUT_32 (abfd, in->offset, ex->offset);
2406   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2407   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2408 }
2409
2410 static void
2411 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2412                            Elf32_External_crinfo *ex)
2413 {
2414   unsigned long l;
2415
2416   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2417        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2418        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2419        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2420   H_PUT_32 (abfd, l, ex->info);
2421   H_PUT_32 (abfd, in->konst, ex->konst);
2422   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2423 }
2424 \f
2425 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2426    routines swap this structure in and out.  They are used outside of
2427    BFD, so they are globally visible.  */
2428
2429 void
2430 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2431                                 Elf32_RegInfo *in)
2432 {
2433   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2434   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2435   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2436   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2437   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2438   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2439 }
2440
2441 void
2442 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2443                                  Elf32_External_RegInfo *ex)
2444 {
2445   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2446   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2447   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2448   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2449   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2450   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2451 }
2452
2453 /* In the 64 bit ABI, the .MIPS.options section holds register
2454    information in an Elf64_Reginfo structure.  These routines swap
2455    them in and out.  They are globally visible because they are used
2456    outside of BFD.  These routines are here so that gas can call them
2457    without worrying about whether the 64 bit ABI has been included.  */
2458
2459 void
2460 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2461                                 Elf64_Internal_RegInfo *in)
2462 {
2463   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2464   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2465   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2466   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2467   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2468   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2469   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2470 }
2471
2472 void
2473 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2474                                  Elf64_External_RegInfo *ex)
2475 {
2476   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2477   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2478   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2479   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2480   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2481   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2482   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2483 }
2484
2485 /* Swap in an options header.  */
2486
2487 void
2488 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2489                               Elf_Internal_Options *in)
2490 {
2491   in->kind = H_GET_8 (abfd, ex->kind);
2492   in->size = H_GET_8 (abfd, ex->size);
2493   in->section = H_GET_16 (abfd, ex->section);
2494   in->info = H_GET_32 (abfd, ex->info);
2495 }
2496
2497 /* Swap out an options header.  */
2498
2499 void
2500 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2501                                Elf_External_Options *ex)
2502 {
2503   H_PUT_8 (abfd, in->kind, ex->kind);
2504   H_PUT_8 (abfd, in->size, ex->size);
2505   H_PUT_16 (abfd, in->section, ex->section);
2506   H_PUT_32 (abfd, in->info, ex->info);
2507 }
2508 \f
2509 /* This function is called via qsort() to sort the dynamic relocation
2510    entries by increasing r_symndx value.  */
2511
2512 static int
2513 sort_dynamic_relocs (const void *arg1, const void *arg2)
2514 {
2515   Elf_Internal_Rela int_reloc1;
2516   Elf_Internal_Rela int_reloc2;
2517   int diff;
2518
2519   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2520   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2521
2522   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2523   if (diff != 0)
2524     return diff;
2525
2526   if (int_reloc1.r_offset < int_reloc2.r_offset)
2527     return -1;
2528   if (int_reloc1.r_offset > int_reloc2.r_offset)
2529     return 1;
2530   return 0;
2531 }
2532
2533 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2534
2535 static int
2536 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2537                         const void *arg2 ATTRIBUTE_UNUSED)
2538 {
2539 #ifdef BFD64
2540   Elf_Internal_Rela int_reloc1[3];
2541   Elf_Internal_Rela int_reloc2[3];
2542
2543   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2544     (reldyn_sorting_bfd, arg1, int_reloc1);
2545   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2546     (reldyn_sorting_bfd, arg2, int_reloc2);
2547
2548   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2549     return -1;
2550   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2551     return 1;
2552
2553   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2554     return -1;
2555   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2556     return 1;
2557   return 0;
2558 #else
2559   abort ();
2560 #endif
2561 }
2562
2563
2564 /* This routine is used to write out ECOFF debugging external symbol
2565    information.  It is called via mips_elf_link_hash_traverse.  The
2566    ECOFF external symbol information must match the ELF external
2567    symbol information.  Unfortunately, at this point we don't know
2568    whether a symbol is required by reloc information, so the two
2569    tables may wind up being different.  We must sort out the external
2570    symbol information before we can set the final size of the .mdebug
2571    section, and we must set the size of the .mdebug section before we
2572    can relocate any sections, and we can't know which symbols are
2573    required by relocation until we relocate the sections.
2574    Fortunately, it is relatively unlikely that any symbol will be
2575    stripped but required by a reloc.  In particular, it can not happen
2576    when generating a final executable.  */
2577
2578 static bfd_boolean
2579 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2580 {
2581   struct extsym_info *einfo = data;
2582   bfd_boolean strip;
2583   asection *sec, *output_section;
2584
2585   if (h->root.indx == -2)
2586     strip = FALSE;
2587   else if ((h->root.def_dynamic
2588             || h->root.ref_dynamic
2589             || h->root.type == bfd_link_hash_new)
2590            && !h->root.def_regular
2591            && !h->root.ref_regular)
2592     strip = TRUE;
2593   else if (einfo->info->strip == strip_all
2594            || (einfo->info->strip == strip_some
2595                && bfd_hash_lookup (einfo->info->keep_hash,
2596                                    h->root.root.root.string,
2597                                    FALSE, FALSE) == NULL))
2598     strip = TRUE;
2599   else
2600     strip = FALSE;
2601
2602   if (strip)
2603     return TRUE;
2604
2605   if (h->esym.ifd == -2)
2606     {
2607       h->esym.jmptbl = 0;
2608       h->esym.cobol_main = 0;
2609       h->esym.weakext = 0;
2610       h->esym.reserved = 0;
2611       h->esym.ifd = ifdNil;
2612       h->esym.asym.value = 0;
2613       h->esym.asym.st = stGlobal;
2614
2615       if (h->root.root.type == bfd_link_hash_undefined
2616           || h->root.root.type == bfd_link_hash_undefweak)
2617         {
2618           const char *name;
2619
2620           /* Use undefined class.  Also, set class and type for some
2621              special symbols.  */
2622           name = h->root.root.root.string;
2623           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2624               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2625             {
2626               h->esym.asym.sc = scData;
2627               h->esym.asym.st = stLabel;
2628               h->esym.asym.value = 0;
2629             }
2630           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2631             {
2632               h->esym.asym.sc = scAbs;
2633               h->esym.asym.st = stLabel;
2634               h->esym.asym.value =
2635                 mips_elf_hash_table (einfo->info)->procedure_count;
2636             }
2637           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2638             {
2639               h->esym.asym.sc = scAbs;
2640               h->esym.asym.st = stLabel;
2641               h->esym.asym.value = elf_gp (einfo->abfd);
2642             }
2643           else
2644             h->esym.asym.sc = scUndefined;
2645         }
2646       else if (h->root.root.type != bfd_link_hash_defined
2647           && h->root.root.type != bfd_link_hash_defweak)
2648         h->esym.asym.sc = scAbs;
2649       else
2650         {
2651           const char *name;
2652
2653           sec = h->root.root.u.def.section;
2654           output_section = sec->output_section;
2655
2656           /* When making a shared library and symbol h is the one from
2657              the another shared library, OUTPUT_SECTION may be null.  */
2658           if (output_section == NULL)
2659             h->esym.asym.sc = scUndefined;
2660           else
2661             {
2662               name = bfd_section_name (output_section->owner, output_section);
2663
2664               if (strcmp (name, ".text") == 0)
2665                 h->esym.asym.sc = scText;
2666               else if (strcmp (name, ".data") == 0)
2667                 h->esym.asym.sc = scData;
2668               else if (strcmp (name, ".sdata") == 0)
2669                 h->esym.asym.sc = scSData;
2670               else if (strcmp (name, ".rodata") == 0
2671                        || strcmp (name, ".rdata") == 0)
2672                 h->esym.asym.sc = scRData;
2673               else if (strcmp (name, ".bss") == 0)
2674                 h->esym.asym.sc = scBss;
2675               else if (strcmp (name, ".sbss") == 0)
2676                 h->esym.asym.sc = scSBss;
2677               else if (strcmp (name, ".init") == 0)
2678                 h->esym.asym.sc = scInit;
2679               else if (strcmp (name, ".fini") == 0)
2680                 h->esym.asym.sc = scFini;
2681               else
2682                 h->esym.asym.sc = scAbs;
2683             }
2684         }
2685
2686       h->esym.asym.reserved = 0;
2687       h->esym.asym.index = indexNil;
2688     }
2689
2690   if (h->root.root.type == bfd_link_hash_common)
2691     h->esym.asym.value = h->root.root.u.c.size;
2692   else if (h->root.root.type == bfd_link_hash_defined
2693            || h->root.root.type == bfd_link_hash_defweak)
2694     {
2695       if (h->esym.asym.sc == scCommon)
2696         h->esym.asym.sc = scBss;
2697       else if (h->esym.asym.sc == scSCommon)
2698         h->esym.asym.sc = scSBss;
2699
2700       sec = h->root.root.u.def.section;
2701       output_section = sec->output_section;
2702       if (output_section != NULL)
2703         h->esym.asym.value = (h->root.root.u.def.value
2704                               + sec->output_offset
2705                               + output_section->vma);
2706       else
2707         h->esym.asym.value = 0;
2708     }
2709   else
2710     {
2711       struct mips_elf_link_hash_entry *hd = h;
2712
2713       while (hd->root.root.type == bfd_link_hash_indirect)
2714         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2715
2716       if (hd->needs_lazy_stub)
2717         {
2718           /* Set type and value for a symbol with a function stub.  */
2719           h->esym.asym.st = stProc;
2720           sec = hd->root.root.u.def.section;
2721           if (sec == NULL)
2722             h->esym.asym.value = 0;
2723           else
2724             {
2725               output_section = sec->output_section;
2726               if (output_section != NULL)
2727                 h->esym.asym.value = (hd->root.plt.offset
2728                                       + sec->output_offset
2729                                       + output_section->vma);
2730               else
2731                 h->esym.asym.value = 0;
2732             }
2733         }
2734     }
2735
2736   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2737                                       h->root.root.root.string,
2738                                       &h->esym))
2739     {
2740       einfo->failed = TRUE;
2741       return FALSE;
2742     }
2743
2744   return TRUE;
2745 }
2746
2747 /* A comparison routine used to sort .gptab entries.  */
2748
2749 static int
2750 gptab_compare (const void *p1, const void *p2)
2751 {
2752   const Elf32_gptab *a1 = p1;
2753   const Elf32_gptab *a2 = p2;
2754
2755   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2756 }
2757 \f
2758 /* Functions to manage the got entry hash table.  */
2759
2760 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2761    hash number.  */
2762
2763 static INLINE hashval_t
2764 mips_elf_hash_bfd_vma (bfd_vma addr)
2765 {
2766 #ifdef BFD64
2767   return addr + (addr >> 32);
2768 #else
2769   return addr;
2770 #endif
2771 }
2772
2773 /* got_entries only match if they're identical, except for gotidx, so
2774    use all fields to compute the hash, and compare the appropriate
2775    union members.  */
2776
2777 static hashval_t
2778 mips_elf_got_entry_hash (const void *entry_)
2779 {
2780   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2781
2782   return entry->symndx
2783     + ((entry->tls_type & GOT_TLS_LDM) << 17)
2784     + (! entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
2785        : entry->abfd->id
2786          + (entry->symndx >= 0 ? mips_elf_hash_bfd_vma (entry->d.addend)
2787             : entry->d.h->root.root.root.hash));
2788 }
2789
2790 static int
2791 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
2792 {
2793   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2794   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2795
2796   /* An LDM entry can only match another LDM entry.  */
2797   if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2798     return 0;
2799
2800   return e1->abfd == e2->abfd && e1->symndx == e2->symndx
2801     && (! e1->abfd ? e1->d.address == e2->d.address
2802         : e1->symndx >= 0 ? e1->d.addend == e2->d.addend
2803         : e1->d.h == e2->d.h);
2804 }
2805
2806 /* multi_got_entries are still a match in the case of global objects,
2807    even if the input bfd in which they're referenced differs, so the
2808    hash computation and compare functions are adjusted
2809    accordingly.  */
2810
2811 static hashval_t
2812 mips_elf_multi_got_entry_hash (const void *entry_)
2813 {
2814   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2815
2816   return entry->symndx
2817     + (! entry->abfd
2818        ? mips_elf_hash_bfd_vma (entry->d.address)
2819        : entry->symndx >= 0
2820        ? ((entry->tls_type & GOT_TLS_LDM)
2821           ? (GOT_TLS_LDM << 17)
2822           : (entry->abfd->id
2823              + mips_elf_hash_bfd_vma (entry->d.addend)))
2824        : entry->d.h->root.root.root.hash);
2825 }
2826
2827 static int
2828 mips_elf_multi_got_entry_eq (const void *entry1, const void *entry2)
2829 {
2830   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2831   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2832
2833   /* Any two LDM entries match.  */
2834   if (e1->tls_type & e2->tls_type & GOT_TLS_LDM)
2835     return 1;
2836
2837   /* Nothing else matches an LDM entry.  */
2838   if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2839     return 0;
2840
2841   return e1->symndx == e2->symndx
2842     && (e1->symndx >= 0 ? e1->abfd == e2->abfd && e1->d.addend == e2->d.addend
2843         : e1->abfd == NULL || e2->abfd == NULL
2844         ? e1->abfd == e2->abfd && e1->d.address == e2->d.address
2845         : e1->d.h == e2->d.h);
2846 }
2847
2848 static hashval_t
2849 mips_got_page_entry_hash (const void *entry_)
2850 {
2851   const struct mips_got_page_entry *entry;
2852
2853   entry = (const struct mips_got_page_entry *) entry_;
2854   return entry->abfd->id + entry->symndx;
2855 }
2856
2857 static int
2858 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
2859 {
2860   const struct mips_got_page_entry *entry1, *entry2;
2861
2862   entry1 = (const struct mips_got_page_entry *) entry1_;
2863   entry2 = (const struct mips_got_page_entry *) entry2_;
2864   return entry1->abfd == entry2->abfd && entry1->symndx == entry2->symndx;
2865 }
2866 \f
2867 /* Return the dynamic relocation section.  If it doesn't exist, try to
2868    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
2869    if creation fails.  */
2870
2871 static asection *
2872 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
2873 {
2874   const char *dname;
2875   asection *sreloc;
2876   bfd *dynobj;
2877
2878   dname = MIPS_ELF_REL_DYN_NAME (info);
2879   dynobj = elf_hash_table (info)->dynobj;
2880   sreloc = bfd_get_linker_section (dynobj, dname);
2881   if (sreloc == NULL && create_p)
2882     {
2883       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
2884                                                    (SEC_ALLOC
2885                                                     | SEC_LOAD
2886                                                     | SEC_HAS_CONTENTS
2887                                                     | SEC_IN_MEMORY
2888                                                     | SEC_LINKER_CREATED
2889                                                     | SEC_READONLY));
2890       if (sreloc == NULL
2891           || ! bfd_set_section_alignment (dynobj, sreloc,
2892                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
2893         return NULL;
2894     }
2895   return sreloc;
2896 }
2897
2898 /* Count the number of relocations needed for a TLS GOT entry, with
2899    access types from TLS_TYPE, and symbol H (or a local symbol if H
2900    is NULL).  */
2901
2902 static int
2903 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
2904                      struct elf_link_hash_entry *h)
2905 {
2906   int indx = 0;
2907   int ret = 0;
2908   bfd_boolean need_relocs = FALSE;
2909   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
2910
2911   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
2912       && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
2913     indx = h->dynindx;
2914
2915   if ((info->shared || indx != 0)
2916       && (h == NULL
2917           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2918           || h->root.type != bfd_link_hash_undefweak))
2919     need_relocs = TRUE;
2920
2921   if (!need_relocs)
2922     return FALSE;
2923
2924   if (tls_type & GOT_TLS_GD)
2925     {
2926       ret++;
2927       if (indx != 0)
2928         ret++;
2929     }
2930
2931   if (tls_type & GOT_TLS_IE)
2932     ret++;
2933
2934   if ((tls_type & GOT_TLS_LDM) && info->shared)
2935     ret++;
2936
2937   return ret;
2938 }
2939
2940 /* Count the number of TLS relocations required for the GOT entry in
2941    ARG1, if it describes a local symbol.  */
2942
2943 static int
2944 mips_elf_count_local_tls_relocs (void **arg1, void *arg2)
2945 {
2946   struct mips_got_entry *entry = * (struct mips_got_entry **) arg1;
2947   struct mips_elf_count_tls_arg *arg = arg2;
2948
2949   if (entry->abfd != NULL && entry->symndx != -1)
2950     arg->needed += mips_tls_got_relocs (arg->info, entry->tls_type, NULL);
2951
2952   return 1;
2953 }
2954
2955 /* Count the number of TLS GOT entries required for the global (or
2956    forced-local) symbol in ARG1.  */
2957
2958 static int
2959 mips_elf_count_global_tls_entries (void *arg1, void *arg2)
2960 {
2961   struct mips_elf_link_hash_entry *hm
2962     = (struct mips_elf_link_hash_entry *) arg1;
2963   struct mips_elf_count_tls_arg *arg = arg2;
2964
2965   if (hm->tls_type & GOT_TLS_GD)
2966     arg->needed += 2;
2967   if (hm->tls_type & GOT_TLS_IE)
2968     arg->needed += 1;
2969
2970   return 1;
2971 }
2972
2973 /* Count the number of TLS relocations required for the global (or
2974    forced-local) symbol in ARG1.  */
2975
2976 static int
2977 mips_elf_count_global_tls_relocs (void *arg1, void *arg2)
2978 {
2979   struct mips_elf_link_hash_entry *hm
2980     = (struct mips_elf_link_hash_entry *) arg1;
2981   struct mips_elf_count_tls_arg *arg = arg2;
2982
2983   arg->needed += mips_tls_got_relocs (arg->info, hm->tls_type, &hm->root);
2984
2985   return 1;
2986 }
2987
2988 /* Output a simple dynamic relocation into SRELOC.  */
2989
2990 static void
2991 mips_elf_output_dynamic_relocation (bfd *output_bfd,
2992                                     asection *sreloc,
2993                                     unsigned long reloc_index,
2994                                     unsigned long indx,
2995                                     int r_type,
2996                                     bfd_vma offset)
2997 {
2998   Elf_Internal_Rela rel[3];
2999
3000   memset (rel, 0, sizeof (rel));
3001
3002   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3003   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3004
3005   if (ABI_64_P (output_bfd))
3006     {
3007       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3008         (output_bfd, &rel[0],
3009          (sreloc->contents
3010           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3011     }
3012   else
3013     bfd_elf32_swap_reloc_out
3014       (output_bfd, &rel[0],
3015        (sreloc->contents
3016         + reloc_index * sizeof (Elf32_External_Rel)));
3017 }
3018
3019 /* Initialize a set of TLS GOT entries for one symbol.  */
3020
3021 static void
3022 mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset,
3023                                unsigned char *tls_type_p,
3024                                struct bfd_link_info *info,
3025                                struct mips_elf_link_hash_entry *h,
3026                                bfd_vma value)
3027 {
3028   struct mips_elf_link_hash_table *htab;
3029   int indx;
3030   asection *sreloc, *sgot;
3031   bfd_vma offset, offset2;
3032   bfd_boolean need_relocs = FALSE;
3033
3034   htab = mips_elf_hash_table (info);
3035   if (htab == NULL)
3036     return;
3037
3038   sgot = htab->sgot;
3039
3040   indx = 0;
3041   if (h != NULL)
3042     {
3043       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3044
3045       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
3046           && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3047         indx = h->root.dynindx;
3048     }
3049
3050   if (*tls_type_p & GOT_TLS_DONE)
3051     return;
3052
3053   if ((info->shared || indx != 0)
3054       && (h == NULL
3055           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3056           || h->root.type != bfd_link_hash_undefweak))
3057     need_relocs = TRUE;
3058
3059   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3060      be defined at all; assume that the value doesn't matter in that
3061      case.  Otherwise complain if we would use the value.  */
3062   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3063               || h->root.root.type == bfd_link_hash_undefweak);
3064
3065   /* Emit necessary relocations.  */
3066   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3067
3068   /* General Dynamic.  */
3069   if (*tls_type_p & GOT_TLS_GD)
3070     {
3071       offset = got_offset;
3072       offset2 = offset + MIPS_ELF_GOT_SIZE (abfd);
3073
3074       if (need_relocs)
3075         {
3076           mips_elf_output_dynamic_relocation
3077             (abfd, sreloc, sreloc->reloc_count++, indx,
3078              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3079              sgot->output_offset + sgot->output_section->vma + offset);
3080
3081           if (indx)
3082             mips_elf_output_dynamic_relocation
3083               (abfd, sreloc, sreloc->reloc_count++, indx,
3084                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3085                sgot->output_offset + sgot->output_section->vma + offset2);
3086           else
3087             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3088                                sgot->contents + offset2);
3089         }
3090       else
3091         {
3092           MIPS_ELF_PUT_WORD (abfd, 1,
3093                              sgot->contents + offset);
3094           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3095                              sgot->contents + offset2);
3096         }
3097
3098       got_offset += 2 * MIPS_ELF_GOT_SIZE (abfd);
3099     }
3100
3101   /* Initial Exec model.  */
3102   if (*tls_type_p & GOT_TLS_IE)
3103     {
3104       offset = got_offset;
3105
3106       if (need_relocs)
3107         {
3108           if (indx == 0)
3109             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3110                                sgot->contents + offset);
3111           else
3112             MIPS_ELF_PUT_WORD (abfd, 0,
3113                                sgot->contents + offset);
3114
3115           mips_elf_output_dynamic_relocation
3116             (abfd, sreloc, sreloc->reloc_count++, indx,
3117              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3118              sgot->output_offset + sgot->output_section->vma + offset);
3119         }
3120       else
3121         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3122                            sgot->contents + offset);
3123     }
3124
3125   if (*tls_type_p & GOT_TLS_LDM)
3126     {
3127       /* The initial offset is zero, and the LD offsets will include the
3128          bias by DTP_OFFSET.  */
3129       MIPS_ELF_PUT_WORD (abfd, 0,
3130                          sgot->contents + got_offset
3131                          + MIPS_ELF_GOT_SIZE (abfd));
3132
3133       if (!info->shared)
3134         MIPS_ELF_PUT_WORD (abfd, 1,
3135                            sgot->contents + got_offset);
3136       else
3137         mips_elf_output_dynamic_relocation
3138           (abfd, sreloc, sreloc->reloc_count++, indx,
3139            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3140            sgot->output_offset + sgot->output_section->vma + got_offset);
3141     }
3142
3143   *tls_type_p |= GOT_TLS_DONE;
3144 }
3145
3146 /* Return the GOT index to use for a relocation of type R_TYPE against
3147    a symbol accessed using TLS_TYPE models.  The GOT entries for this
3148    symbol in this GOT start at GOT_INDEX.  This function initializes the
3149    GOT entries and corresponding relocations.  */
3150
3151 static bfd_vma
3152 mips_tls_got_index (bfd *abfd, bfd_vma got_index, unsigned char *tls_type,
3153                     int r_type, struct bfd_link_info *info,
3154                     struct mips_elf_link_hash_entry *h, bfd_vma symbol)
3155 {
3156   BFD_ASSERT (tls_gottprel_reloc_p (r_type)
3157               || tls_gd_reloc_p (r_type)
3158               || tls_ldm_reloc_p (r_type));
3159
3160   mips_elf_initialize_tls_slots (abfd, got_index, tls_type, info, h, symbol);
3161
3162   if (tls_gottprel_reloc_p (r_type))
3163     {
3164       BFD_ASSERT (*tls_type & GOT_TLS_IE);
3165       if (*tls_type & GOT_TLS_GD)
3166         return got_index + 2 * MIPS_ELF_GOT_SIZE (abfd);
3167       else
3168         return got_index;
3169     }
3170
3171   if (tls_gd_reloc_p (r_type))
3172     {
3173       BFD_ASSERT (*tls_type & GOT_TLS_GD);
3174       return got_index;
3175     }
3176
3177   if (tls_ldm_reloc_p (r_type))
3178     {
3179       BFD_ASSERT (*tls_type & GOT_TLS_LDM);
3180       return got_index;
3181     }
3182
3183   return got_index;
3184 }
3185
3186 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3187    for global symbol H.  .got.plt comes before the GOT, so the offset
3188    will be negative.  */
3189
3190 static bfd_vma
3191 mips_elf_gotplt_index (struct bfd_link_info *info,
3192                        struct elf_link_hash_entry *h)
3193 {
3194   bfd_vma plt_index, got_address, got_value;
3195   struct mips_elf_link_hash_table *htab;
3196
3197   htab = mips_elf_hash_table (info);
3198   BFD_ASSERT (htab != NULL);
3199
3200   BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
3201
3202   /* This function only works for VxWorks, because a non-VxWorks .got.plt
3203      section starts with reserved entries.  */
3204   BFD_ASSERT (htab->is_vxworks);
3205
3206   /* Calculate the index of the symbol's PLT entry.  */
3207   plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
3208
3209   /* Calculate the address of the associated .got.plt entry.  */
3210   got_address = (htab->sgotplt->output_section->vma
3211                  + htab->sgotplt->output_offset
3212                  + plt_index * 4);
3213
3214   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3215   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3216                + htab->root.hgot->root.u.def.section->output_offset
3217                + htab->root.hgot->root.u.def.value);
3218
3219   return got_address - got_value;
3220 }
3221
3222 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3223    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3224    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3225    offset can be found.  */
3226
3227 static bfd_vma
3228 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3229                           bfd_vma value, unsigned long r_symndx,
3230                           struct mips_elf_link_hash_entry *h, int r_type)
3231 {
3232   struct mips_elf_link_hash_table *htab;
3233   struct mips_got_entry *entry;
3234
3235   htab = mips_elf_hash_table (info);
3236   BFD_ASSERT (htab != NULL);
3237
3238   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3239                                            r_symndx, h, r_type);
3240   if (!entry)
3241     return MINUS_ONE;
3242
3243   if (TLS_RELOC_P (r_type))
3244     {
3245       if (entry->symndx == -1 && htab->got_info->next == NULL)
3246         /* A type (3) entry in the single-GOT case.  We use the symbol's
3247            hash table entry to track the index.  */
3248         return mips_tls_got_index (abfd, h->tls_got_offset, &h->tls_type,
3249                                    r_type, info, h, value);
3250       else
3251         return mips_tls_got_index (abfd, entry->gotidx, &entry->tls_type,
3252                                    r_type, info, h, value);
3253     }
3254   else
3255     return entry->gotidx;
3256 }
3257
3258 /* Returns the GOT index for the global symbol indicated by H.  */
3259
3260 static bfd_vma
3261 mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h,
3262                            int r_type, struct bfd_link_info *info)
3263 {
3264   struct mips_elf_link_hash_table *htab;
3265   bfd_vma got_index;
3266   struct mips_got_info *g, *gg;
3267   long global_got_dynindx = 0;
3268
3269   htab = mips_elf_hash_table (info);
3270   BFD_ASSERT (htab != NULL);
3271
3272   gg = g = htab->got_info;
3273   if (g->bfd2got && ibfd)
3274     {
3275       struct mips_got_entry e, *p;
3276
3277       BFD_ASSERT (h->dynindx >= 0);
3278
3279       g = mips_elf_got_for_ibfd (g, ibfd);
3280       if (g->next != gg || TLS_RELOC_P (r_type))
3281         {
3282           e.abfd = ibfd;
3283           e.symndx = -1;
3284           e.d.h = (struct mips_elf_link_hash_entry *)h;
3285           e.tls_type = 0;
3286
3287           p = htab_find (g->got_entries, &e);
3288
3289           BFD_ASSERT (p->gotidx > 0);
3290
3291           if (TLS_RELOC_P (r_type))
3292             {
3293               bfd_vma value = MINUS_ONE;
3294               if ((h->root.type == bfd_link_hash_defined
3295                    || h->root.type == bfd_link_hash_defweak)
3296                   && h->root.u.def.section->output_section)
3297                 value = (h->root.u.def.value
3298                          + h->root.u.def.section->output_offset
3299                          + h->root.u.def.section->output_section->vma);
3300
3301               return mips_tls_got_index (abfd, p->gotidx, &p->tls_type, r_type,
3302                                          info, e.d.h, value);
3303             }
3304           else
3305             return p->gotidx;
3306         }
3307     }
3308
3309   if (gg->global_gotsym != NULL)
3310     global_got_dynindx = gg->global_gotsym->dynindx;
3311
3312   if (TLS_RELOC_P (r_type))
3313     {
3314       struct mips_elf_link_hash_entry *hm
3315         = (struct mips_elf_link_hash_entry *) h;
3316       bfd_vma value = MINUS_ONE;
3317
3318       if ((h->root.type == bfd_link_hash_defined
3319            || h->root.type == bfd_link_hash_defweak)
3320           && h->root.u.def.section->output_section)
3321         value = (h->root.u.def.value
3322                  + h->root.u.def.section->output_offset
3323                  + h->root.u.def.section->output_section->vma);
3324
3325       got_index = mips_tls_got_index (abfd, hm->tls_got_offset, &hm->tls_type,
3326                                       r_type, info, hm, value);
3327     }
3328   else
3329     {
3330       /* Once we determine the global GOT entry with the lowest dynamic
3331          symbol table index, we must put all dynamic symbols with greater
3332          indices into the GOT.  That makes it easy to calculate the GOT
3333          offset.  */
3334       BFD_ASSERT (h->dynindx >= global_got_dynindx);
3335       got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3336                    * MIPS_ELF_GOT_SIZE (abfd));
3337     }
3338   BFD_ASSERT (got_index < htab->sgot->size);
3339
3340   return got_index;
3341 }
3342
3343 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3344    entries are supposed to be placed at small offsets in the GOT, i.e.,
3345    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3346    entry could be created.  If OFFSETP is nonnull, use it to return the
3347    offset of the GOT entry from VALUE.  */
3348
3349 static bfd_vma
3350 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3351                    bfd_vma value, bfd_vma *offsetp)
3352 {
3353   bfd_vma page, got_index;
3354   struct mips_got_entry *entry;
3355
3356   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3357   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3358                                            NULL, R_MIPS_GOT_PAGE);
3359
3360   if (!entry)
3361     return MINUS_ONE;
3362
3363   got_index = entry->gotidx;
3364
3365   if (offsetp)
3366     *offsetp = value - entry->d.address;
3367
3368   return got_index;
3369 }
3370
3371 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3372    EXTERNAL is true if the relocation was originally against a global
3373    symbol that binds locally.  */
3374
3375 static bfd_vma
3376 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3377                       bfd_vma value, bfd_boolean external)
3378 {
3379   struct mips_got_entry *entry;
3380
3381   /* GOT16 relocations against local symbols are followed by a LO16
3382      relocation; those against global symbols are not.  Thus if the
3383      symbol was originally local, the GOT16 relocation should load the
3384      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3385   if (! external)
3386     value = mips_elf_high (value) << 16;
3387
3388   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3389      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3390      same in all cases.  */
3391   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3392                                            NULL, R_MIPS_GOT16);
3393   if (entry)
3394     return entry->gotidx;
3395   else
3396     return MINUS_ONE;
3397 }
3398
3399 /* Returns the offset for the entry at the INDEXth position
3400    in the GOT.  */
3401
3402 static bfd_vma
3403 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3404                                 bfd *input_bfd, bfd_vma got_index)
3405 {
3406   struct mips_elf_link_hash_table *htab;
3407   asection *sgot;
3408   bfd_vma gp;
3409
3410   htab = mips_elf_hash_table (info);
3411   BFD_ASSERT (htab != NULL);
3412
3413   sgot = htab->sgot;
3414   gp = _bfd_get_gp_value (output_bfd)
3415     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3416
3417   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3418 }
3419
3420 /* Create and return a local GOT entry for VALUE, which was calculated
3421    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3422    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3423    instead.  */
3424
3425 static struct mips_got_entry *
3426 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3427                                  bfd *ibfd, bfd_vma value,
3428                                  unsigned long r_symndx,
3429                                  struct mips_elf_link_hash_entry *h,
3430                                  int r_type)
3431 {
3432   struct mips_got_entry entry, **loc;
3433   struct mips_got_info *g;
3434   struct mips_elf_link_hash_table *htab;
3435
3436   htab = mips_elf_hash_table (info);
3437   BFD_ASSERT (htab != NULL);
3438
3439   entry.abfd = NULL;
3440   entry.symndx = -1;
3441   entry.d.address = value;
3442   entry.tls_type = 0;
3443
3444   g = mips_elf_got_for_ibfd (htab->got_info, ibfd);
3445   if (g == NULL)
3446     {
3447       g = mips_elf_got_for_ibfd (htab->got_info, abfd);
3448       BFD_ASSERT (g != NULL);
3449     }
3450
3451   /* This function shouldn't be called for symbols that live in the global
3452      area of the GOT.  */
3453   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3454   if (TLS_RELOC_P (r_type))
3455     {
3456       struct mips_got_entry *p;
3457
3458       entry.abfd = ibfd;
3459       if (tls_ldm_reloc_p (r_type))
3460         {
3461           entry.tls_type = GOT_TLS_LDM;
3462           entry.symndx = 0;
3463           entry.d.addend = 0;
3464         }
3465       else if (h == NULL)
3466         {
3467           entry.symndx = r_symndx;
3468           entry.d.addend = 0;
3469         }
3470       else
3471         entry.d.h = h;
3472
3473       p = (struct mips_got_entry *)
3474         htab_find (g->got_entries, &entry);
3475
3476       BFD_ASSERT (p);
3477       return p;
3478     }
3479
3480   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3481                                                    INSERT);
3482   if (*loc)
3483     return *loc;
3484
3485   entry.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
3486   entry.tls_type = 0;
3487
3488   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3489
3490   if (! *loc)
3491     return NULL;
3492
3493   memcpy (*loc, &entry, sizeof entry);
3494
3495   if (g->assigned_gotno > g->local_gotno)
3496     {
3497       (*loc)->gotidx = -1;
3498       /* We didn't allocate enough space in the GOT.  */
3499       (*_bfd_error_handler)
3500         (_("not enough GOT space for local GOT entries"));
3501       bfd_set_error (bfd_error_bad_value);
3502       return NULL;
3503     }
3504
3505   MIPS_ELF_PUT_WORD (abfd, value,
3506                      (htab->sgot->contents + entry.gotidx));
3507
3508   /* These GOT entries need a dynamic relocation on VxWorks.  */
3509   if (htab->is_vxworks)
3510     {
3511       Elf_Internal_Rela outrel;
3512       asection *s;
3513       bfd_byte *rloc;
3514       bfd_vma got_address;
3515
3516       s = mips_elf_rel_dyn_section (info, FALSE);
3517       got_address = (htab->sgot->output_section->vma
3518                      + htab->sgot->output_offset
3519                      + entry.gotidx);
3520
3521       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3522       outrel.r_offset = got_address;
3523       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3524       outrel.r_addend = value;
3525       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3526     }
3527
3528   return *loc;
3529 }
3530
3531 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3532    The number might be exact or a worst-case estimate, depending on how
3533    much information is available to elf_backend_omit_section_dynsym at
3534    the current linking stage.  */
3535
3536 static bfd_size_type
3537 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3538 {
3539   bfd_size_type count;
3540
3541   count = 0;
3542   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3543     {
3544       asection *p;
3545       const struct elf_backend_data *bed;
3546
3547       bed = get_elf_backend_data (output_bfd);
3548       for (p = output_bfd->sections; p ; p = p->next)
3549         if ((p->flags & SEC_EXCLUDE) == 0
3550             && (p->flags & SEC_ALLOC) != 0
3551             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3552           ++count;
3553     }
3554   return count;
3555 }
3556
3557 /* Sort the dynamic symbol table so that symbols that need GOT entries
3558    appear towards the end.  */
3559
3560 static bfd_boolean
3561 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3562 {
3563   struct mips_elf_link_hash_table *htab;
3564   struct mips_elf_hash_sort_data hsd;
3565   struct mips_got_info *g;
3566
3567   if (elf_hash_table (info)->dynsymcount == 0)
3568     return TRUE;
3569
3570   htab = mips_elf_hash_table (info);
3571   BFD_ASSERT (htab != NULL);
3572
3573   g = htab->got_info;
3574   if (g == NULL)
3575     return TRUE;
3576
3577   hsd.low = NULL;
3578   hsd.max_unref_got_dynindx
3579     = hsd.min_got_dynindx
3580     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3581   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3582   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3583                                 elf_hash_table (info)),
3584                                mips_elf_sort_hash_table_f,
3585                                &hsd);
3586
3587   /* There should have been enough room in the symbol table to
3588      accommodate both the GOT and non-GOT symbols.  */
3589   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3590   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3591               == elf_hash_table (info)->dynsymcount);
3592   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3593               == g->global_gotno);
3594
3595   /* Now we know which dynamic symbol has the lowest dynamic symbol
3596      table index in the GOT.  */
3597   g->global_gotsym = hsd.low;
3598
3599   return TRUE;
3600 }
3601
3602 /* If H needs a GOT entry, assign it the highest available dynamic
3603    index.  Otherwise, assign it the lowest available dynamic
3604    index.  */
3605
3606 static bfd_boolean
3607 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3608 {
3609   struct mips_elf_hash_sort_data *hsd = data;
3610
3611   /* Symbols without dynamic symbol table entries aren't interesting
3612      at all.  */
3613   if (h->root.dynindx == -1)
3614     return TRUE;
3615
3616   switch (h->global_got_area)
3617     {
3618     case GGA_NONE:
3619       h->root.dynindx = hsd->max_non_got_dynindx++;
3620       break;
3621
3622     case GGA_NORMAL:
3623       BFD_ASSERT (h->tls_type == GOT_NORMAL);
3624
3625       h->root.dynindx = --hsd->min_got_dynindx;
3626       hsd->low = (struct elf_link_hash_entry *) h;
3627       break;
3628
3629     case GGA_RELOC_ONLY:
3630       BFD_ASSERT (h->tls_type == GOT_NORMAL);
3631
3632       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3633         hsd->low = (struct elf_link_hash_entry *) h;
3634       h->root.dynindx = hsd->max_unref_got_dynindx++;
3635       break;
3636     }
3637
3638   return TRUE;
3639 }
3640
3641 /* If H is a symbol that needs a global GOT entry, but has a dynamic
3642    symbol table index lower than any we've seen to date, record it for
3643    posterity.  FOR_CALL is true if the caller is only interested in
3644    using the GOT entry for calls.  */
3645
3646 static bfd_boolean
3647 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3648                                    bfd *abfd, struct bfd_link_info *info,
3649                                    bfd_boolean for_call,
3650                                    unsigned char tls_flag)
3651 {
3652   struct mips_elf_link_hash_table *htab;
3653   struct mips_elf_link_hash_entry *hmips;
3654   struct mips_got_entry entry, **loc;
3655   struct mips_got_info *g;
3656
3657   htab = mips_elf_hash_table (info);
3658   BFD_ASSERT (htab != NULL);
3659
3660   hmips = (struct mips_elf_link_hash_entry *) h;
3661   if (!for_call)
3662     hmips->got_only_for_calls = FALSE;
3663
3664   /* A global symbol in the GOT must also be in the dynamic symbol
3665      table.  */
3666   if (h->dynindx == -1)
3667     {
3668       switch (ELF_ST_VISIBILITY (h->other))
3669         {
3670         case STV_INTERNAL:
3671         case STV_HIDDEN:
3672           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3673           break;
3674         }
3675       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3676         return FALSE;
3677     }
3678
3679   /* Make sure we have a GOT to put this entry into.  */
3680   g = htab->got_info;
3681   BFD_ASSERT (g != NULL);
3682
3683   entry.abfd = abfd;
3684   entry.symndx = -1;
3685   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3686   entry.tls_type = 0;
3687
3688   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3689                                                    INSERT);
3690
3691   /* If we've already marked this entry as needing GOT space, we don't
3692      need to do it again.  */
3693   if (*loc)
3694     {
3695       (*loc)->tls_type |= tls_flag;
3696       return TRUE;
3697     }
3698
3699   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3700
3701   if (! *loc)
3702     return FALSE;
3703
3704   entry.gotidx = -1;
3705   entry.tls_type = tls_flag;
3706
3707   memcpy (*loc, &entry, sizeof entry);
3708
3709   if (tls_flag == 0)
3710     hmips->global_got_area = GGA_NORMAL;
3711
3712   return TRUE;
3713 }
3714
3715 /* Reserve space in G for a GOT entry containing the value of symbol
3716    SYMNDX in input bfd ABDF, plus ADDEND.  */
3717
3718 static bfd_boolean
3719 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3720                                   struct bfd_link_info *info,
3721                                   unsigned char tls_flag)
3722 {
3723   struct mips_elf_link_hash_table *htab;
3724   struct mips_got_info *g;
3725   struct mips_got_entry entry, **loc;
3726
3727   htab = mips_elf_hash_table (info);
3728   BFD_ASSERT (htab != NULL);
3729
3730   g = htab->got_info;
3731   BFD_ASSERT (g != NULL);
3732
3733   entry.abfd = abfd;
3734   entry.symndx = symndx;
3735   entry.d.addend = addend;
3736   entry.tls_type = tls_flag;
3737   loc = (struct mips_got_entry **)
3738     htab_find_slot (g->got_entries, &entry, INSERT);
3739
3740   if (*loc)
3741     {
3742       if (tls_flag == GOT_TLS_GD && !((*loc)->tls_type & GOT_TLS_GD))
3743         {
3744           g->tls_gotno += 2;
3745           (*loc)->tls_type |= tls_flag;
3746         }
3747       else if (tls_flag == GOT_TLS_IE && !((*loc)->tls_type & GOT_TLS_IE))
3748         {
3749           g->tls_gotno += 1;
3750           (*loc)->tls_type |= tls_flag;
3751         }
3752       return TRUE;
3753     }
3754
3755   if (tls_flag != 0)
3756     {
3757       entry.gotidx = -1;
3758       entry.tls_type = tls_flag;
3759       if (tls_flag == GOT_TLS_IE)
3760         g->tls_gotno += 1;
3761       else if (tls_flag == GOT_TLS_GD)
3762         g->tls_gotno += 2;
3763       else if (g->tls_ldm_offset == MINUS_ONE)
3764         {
3765           g->tls_ldm_offset = MINUS_TWO;
3766           g->tls_gotno += 2;
3767         }
3768     }
3769   else
3770     {
3771       entry.gotidx = g->local_gotno++;
3772       entry.tls_type = 0;
3773     }
3774
3775   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3776
3777   if (! *loc)
3778     return FALSE;
3779
3780   memcpy (*loc, &entry, sizeof entry);
3781
3782   return TRUE;
3783 }
3784
3785 /* Return the maximum number of GOT page entries required for RANGE.  */
3786
3787 static bfd_vma
3788 mips_elf_pages_for_range (const struct mips_got_page_range *range)
3789 {
3790   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
3791 }
3792
3793 /* Record that ABFD has a page relocation against symbol SYMNDX and
3794    that ADDEND is the addend for that relocation.
3795
3796    This function creates an upper bound on the number of GOT slots
3797    required; no attempt is made to combine references to non-overridable
3798    global symbols across multiple input files.  */
3799
3800 static bfd_boolean
3801 mips_elf_record_got_page_entry (struct bfd_link_info *info, bfd *abfd,
3802                                 long symndx, bfd_signed_vma addend)
3803 {
3804   struct mips_elf_link_hash_table *htab;
3805   struct mips_got_info *g;
3806   struct mips_got_page_entry lookup, *entry;
3807   struct mips_got_page_range **range_ptr, *range;
3808   bfd_vma old_pages, new_pages;
3809   void **loc;
3810
3811   htab = mips_elf_hash_table (info);
3812   BFD_ASSERT (htab != NULL);
3813
3814   g = htab->got_info;
3815   BFD_ASSERT (g != NULL);
3816
3817   /* Find the mips_got_page_entry hash table entry for this symbol.  */
3818   lookup.abfd = abfd;
3819   lookup.symndx = symndx;
3820   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
3821   if (loc == NULL)
3822     return FALSE;
3823
3824   /* Create a mips_got_page_entry if this is the first time we've
3825      seen the symbol.  */
3826   entry = (struct mips_got_page_entry *) *loc;
3827   if (!entry)
3828     {
3829       entry = bfd_alloc (abfd, sizeof (*entry));
3830       if (!entry)
3831         return FALSE;
3832
3833       entry->abfd = abfd;
3834       entry->symndx = symndx;
3835       entry->ranges = NULL;
3836       entry->num_pages = 0;
3837       *loc = entry;
3838     }
3839
3840   /* Skip over ranges whose maximum extent cannot share a page entry
3841      with ADDEND.  */
3842   range_ptr = &entry->ranges;
3843   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
3844     range_ptr = &(*range_ptr)->next;
3845
3846   /* If we scanned to the end of the list, or found a range whose
3847      minimum extent cannot share a page entry with ADDEND, create
3848      a new singleton range.  */
3849   range = *range_ptr;
3850   if (!range || addend < range->min_addend - 0xffff)
3851     {
3852       range = bfd_alloc (abfd, sizeof (*range));
3853       if (!range)
3854         return FALSE;
3855
3856       range->next = *range_ptr;
3857       range->min_addend = addend;
3858       range->max_addend = addend;
3859
3860       *range_ptr = range;
3861       entry->num_pages++;
3862       g->page_gotno++;
3863       return TRUE;
3864     }
3865
3866   /* Remember how many pages the old range contributed.  */
3867   old_pages = mips_elf_pages_for_range (range);
3868
3869   /* Update the ranges.  */
3870   if (addend < range->min_addend)
3871     range->min_addend = addend;
3872   else if (addend > range->max_addend)
3873     {
3874       if (range->next && addend >= range->next->min_addend - 0xffff)
3875         {
3876           old_pages += mips_elf_pages_for_range (range->next);
3877           range->max_addend = range->next->max_addend;
3878           range->next = range->next->next;
3879         }
3880       else
3881         range->max_addend = addend;
3882     }
3883
3884   /* Record any change in the total estimate.  */
3885   new_pages = mips_elf_pages_for_range (range);
3886   if (old_pages != new_pages)
3887     {
3888       entry->num_pages += new_pages - old_pages;
3889       g->page_gotno += new_pages - old_pages;
3890     }
3891
3892   return TRUE;
3893 }
3894
3895 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
3896
3897 static void
3898 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
3899                                        unsigned int n)
3900 {
3901   asection *s;
3902   struct mips_elf_link_hash_table *htab;
3903
3904   htab = mips_elf_hash_table (info);
3905   BFD_ASSERT (htab != NULL);
3906
3907   s = mips_elf_rel_dyn_section (info, FALSE);
3908   BFD_ASSERT (s != NULL);
3909
3910   if (htab->is_vxworks)
3911     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
3912   else
3913     {
3914       if (s->size == 0)
3915         {
3916           /* Make room for a null element.  */
3917           s->size += MIPS_ELF_REL_SIZE (abfd);
3918           ++s->reloc_count;
3919         }
3920       s->size += n * MIPS_ELF_REL_SIZE (abfd);
3921     }
3922 }
3923 \f
3924 /* A htab_traverse callback for GOT entries.  Set boolean *DATA to true
3925    if the GOT entry is for an indirect or warning symbol.  */
3926
3927 static int
3928 mips_elf_check_recreate_got (void **entryp, void *data)
3929 {
3930   struct mips_got_entry *entry;
3931   bfd_boolean *must_recreate;
3932
3933   entry = (struct mips_got_entry *) *entryp;
3934   must_recreate = (bfd_boolean *) data;
3935   if (entry->abfd != NULL && entry->symndx == -1)
3936     {
3937       struct mips_elf_link_hash_entry *h;
3938
3939       h = entry->d.h;
3940       if (h->root.root.type == bfd_link_hash_indirect
3941           || h->root.root.type == bfd_link_hash_warning)
3942         {
3943           *must_recreate = TRUE;
3944           return 0;
3945         }
3946     }
3947   return 1;
3948 }
3949
3950 /* A htab_traverse callback for GOT entries.  Add all entries to
3951    hash table *DATA, converting entries for indirect and warning
3952    symbols into entries for the target symbol.  Set *DATA to null
3953    on error.  */
3954
3955 static int
3956 mips_elf_recreate_got (void **entryp, void *data)
3957 {
3958   htab_t *new_got;
3959   struct mips_got_entry *entry;
3960   void **slot;
3961
3962   new_got = (htab_t *) data;
3963   entry = (struct mips_got_entry *) *entryp;
3964   if (entry->abfd != NULL && entry->symndx == -1)
3965     {
3966       struct mips_elf_link_hash_entry *h;
3967
3968       h = entry->d.h;
3969       while (h->root.root.type == bfd_link_hash_indirect
3970              || h->root.root.type == bfd_link_hash_warning)
3971         {
3972           BFD_ASSERT (h->global_got_area == GGA_NONE);
3973           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3974         }
3975       entry->d.h = h;
3976     }
3977   slot = htab_find_slot (*new_got, entry, INSERT);
3978   if (slot == NULL)
3979     {
3980       *new_got = NULL;
3981       return 0;
3982     }
3983   if (*slot == NULL)
3984     *slot = entry;
3985   return 1;
3986 }
3987
3988 /* If any entries in G->got_entries are for indirect or warning symbols,
3989    replace them with entries for the target symbol.  */
3990
3991 static bfd_boolean
3992 mips_elf_resolve_final_got_entries (struct mips_got_info *g)
3993 {
3994   bfd_boolean must_recreate;
3995   htab_t new_got;
3996
3997   must_recreate = FALSE;
3998   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &must_recreate);
3999   if (must_recreate)
4000     {
4001       new_got = htab_create (htab_size (g->got_entries),
4002                              mips_elf_got_entry_hash,
4003                              mips_elf_got_entry_eq, NULL);
4004       htab_traverse (g->got_entries, mips_elf_recreate_got, &new_got);
4005       if (new_got == NULL)
4006         return FALSE;
4007
4008       htab_delete (g->got_entries);
4009       g->got_entries = new_got;
4010     }
4011   return TRUE;
4012 }
4013
4014 /* A mips_elf_link_hash_traverse callback for which DATA points
4015    to the link_info structure.  Count the number of type (3) entries
4016    in the master GOT.  */
4017
4018 static int
4019 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4020 {
4021   struct bfd_link_info *info;
4022   struct mips_elf_link_hash_table *htab;
4023   struct mips_got_info *g;
4024
4025   info = (struct bfd_link_info *) data;
4026   htab = mips_elf_hash_table (info);
4027   g = htab->got_info;
4028   if (h->global_got_area != GGA_NONE)
4029     {
4030       /* Make a final decision about whether the symbol belongs in the
4031          local or global GOT.  Symbols that bind locally can (and in the
4032          case of forced-local symbols, must) live in the local GOT.
4033          Those that are aren't in the dynamic symbol table must also
4034          live in the local GOT.
4035
4036          Note that the former condition does not always imply the
4037          latter: symbols do not bind locally if they are completely
4038          undefined.  We'll report undefined symbols later if appropriate.  */
4039       if (h->root.dynindx == -1
4040           || (h->got_only_for_calls
4041               ? SYMBOL_CALLS_LOCAL (info, &h->root)
4042               : SYMBOL_REFERENCES_LOCAL (info, &h->root)))
4043         {
4044           /* The symbol belongs in the local GOT.  We no longer need this
4045              entry if it was only used for relocations; those relocations
4046              will be against the null or section symbol instead of H.  */
4047           if (h->global_got_area != GGA_RELOC_ONLY)
4048             g->local_gotno++;
4049           h->global_got_area = GGA_NONE;
4050         }
4051       else if (htab->is_vxworks
4052                && h->got_only_for_calls
4053                && h->root.plt.offset != MINUS_ONE)
4054         /* On VxWorks, calls can refer directly to the .got.plt entry;
4055            they don't need entries in the regular GOT.  .got.plt entries
4056            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4057         h->global_got_area = GGA_NONE;
4058       else
4059         {
4060           g->global_gotno++;
4061           if (h->global_got_area == GGA_RELOC_ONLY)
4062             g->reloc_only_gotno++;
4063         }
4064     }
4065   return 1;
4066 }
4067 \f
4068 /* Compute the hash value of the bfd in a bfd2got hash entry.  */
4069
4070 static hashval_t
4071 mips_elf_bfd2got_entry_hash (const void *entry_)
4072 {
4073   const struct mips_elf_bfd2got_hash *entry
4074     = (struct mips_elf_bfd2got_hash *)entry_;
4075
4076   return entry->bfd->id;
4077 }
4078
4079 /* Check whether two hash entries have the same bfd.  */
4080
4081 static int
4082 mips_elf_bfd2got_entry_eq (const void *entry1, const void *entry2)
4083 {
4084   const struct mips_elf_bfd2got_hash *e1
4085     = (const struct mips_elf_bfd2got_hash *)entry1;
4086   const struct mips_elf_bfd2got_hash *e2
4087     = (const struct mips_elf_bfd2got_hash *)entry2;
4088
4089   return e1->bfd == e2->bfd;
4090 }
4091
4092 /* In a multi-got link, determine the GOT to be used for IBFD.  G must
4093    be the master GOT data.  */
4094
4095 static struct mips_got_info *
4096 mips_elf_got_for_ibfd (struct mips_got_info *g, bfd *ibfd)
4097 {
4098   struct mips_elf_bfd2got_hash e, *p;
4099
4100   if (! g->bfd2got)
4101     return g;
4102
4103   e.bfd = ibfd;
4104   p = htab_find (g->bfd2got, &e);
4105   return p ? p->g : NULL;
4106 }
4107
4108 /* Use BFD2GOT to find ABFD's got entry, creating one if none exists.
4109    Return NULL if an error occured.  */
4110
4111 static struct mips_got_info *
4112 mips_elf_get_got_for_bfd (struct htab *bfd2got, bfd *output_bfd,
4113                           bfd *input_bfd)
4114 {
4115   struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot;
4116   struct mips_got_info *g;
4117   void **bfdgotp;
4118
4119   bfdgot_entry.bfd = input_bfd;
4120   bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT);
4121   bfdgot = (struct mips_elf_bfd2got_hash *) *bfdgotp;
4122
4123   if (bfdgot == NULL)
4124     {
4125       bfdgot = ((struct mips_elf_bfd2got_hash *)
4126                 bfd_alloc (output_bfd, sizeof (struct mips_elf_bfd2got_hash)));
4127       if (bfdgot == NULL)
4128         return NULL;
4129
4130       *bfdgotp = bfdgot;
4131
4132       g = ((struct mips_got_info *)
4133            bfd_alloc (output_bfd, sizeof (struct mips_got_info)));
4134       if (g == NULL)
4135         return NULL;
4136
4137       bfdgot->bfd = input_bfd;
4138       bfdgot->g = g;
4139
4140       g->global_gotsym = NULL;
4141       g->global_gotno = 0;
4142       g->reloc_only_gotno = 0;
4143       g->local_gotno = 0;
4144       g->page_gotno = 0;
4145       g->assigned_gotno = -1;
4146       g->tls_gotno = 0;
4147       g->tls_assigned_gotno = 0;
4148       g->tls_ldm_offset = MINUS_ONE;
4149       g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
4150                                         mips_elf_multi_got_entry_eq, NULL);
4151       if (g->got_entries == NULL)
4152         return NULL;
4153
4154       g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4155                                              mips_got_page_entry_eq, NULL);
4156       if (g->got_page_entries == NULL)
4157         return NULL;
4158
4159       g->bfd2got = NULL;
4160       g->next = NULL;
4161     }
4162
4163   return bfdgot->g;
4164 }
4165
4166 /* A htab_traverse callback for the entries in the master got.
4167    Create one separate got for each bfd that has entries in the global
4168    got, such that we can tell how many local and global entries each
4169    bfd requires.  */
4170
4171 static int
4172 mips_elf_make_got_per_bfd (void **entryp, void *p)
4173 {
4174   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4175   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4176   struct mips_got_info *g;
4177
4178   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4179   if (g == NULL)
4180     {
4181       arg->obfd = NULL;
4182       return 0;
4183     }
4184
4185   /* Insert the GOT entry in the bfd's got entry hash table.  */
4186   entryp = htab_find_slot (g->got_entries, entry, INSERT);
4187   if (*entryp != NULL)
4188     return 1;
4189
4190   *entryp = entry;
4191
4192   if (entry->tls_type)
4193     {
4194       if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
4195         g->tls_gotno += 2;
4196       if (entry->tls_type & GOT_TLS_IE)
4197         g->tls_gotno += 1;
4198     }
4199   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
4200     ++g->local_gotno;
4201   else
4202     ++g->global_gotno;
4203
4204   return 1;
4205 }
4206
4207 /* A htab_traverse callback for the page entries in the master got.
4208    Associate each page entry with the bfd's got.  */
4209
4210 static int
4211 mips_elf_make_got_pages_per_bfd (void **entryp, void *p)
4212 {
4213   struct mips_got_page_entry *entry = (struct mips_got_page_entry *) *entryp;
4214   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *) p;
4215   struct mips_got_info *g;
4216
4217   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4218   if (g == NULL)
4219     {
4220       arg->obfd = NULL;
4221       return 0;
4222     }
4223
4224   /* Insert the GOT entry in the bfd's got entry hash table.  */
4225   entryp = htab_find_slot (g->got_page_entries, entry, INSERT);
4226   if (*entryp != NULL)
4227     return 1;
4228
4229   *entryp = entry;
4230   g->page_gotno += entry->num_pages;
4231   return 1;
4232 }
4233
4234 /* Consider merging the got described by BFD2GOT with TO, using the
4235    information given by ARG.  Return -1 if this would lead to overflow,
4236    1 if they were merged successfully, and 0 if a merge failed due to
4237    lack of memory.  (These values are chosen so that nonnegative return
4238    values can be returned by a htab_traverse callback.)  */
4239
4240 static int
4241 mips_elf_merge_got_with (struct mips_elf_bfd2got_hash *bfd2got,
4242                          struct mips_got_info *to,
4243                          struct mips_elf_got_per_bfd_arg *arg)
4244 {
4245   struct mips_got_info *from = bfd2got->g;
4246   unsigned int estimate;
4247
4248   /* Work out how many page entries we would need for the combined GOT.  */
4249   estimate = arg->max_pages;
4250   if (estimate >= from->page_gotno + to->page_gotno)
4251     estimate = from->page_gotno + to->page_gotno;
4252
4253   /* And conservatively estimate how many local and TLS entries
4254      would be needed.  */
4255   estimate += from->local_gotno + to->local_gotno;
4256   estimate += from->tls_gotno + to->tls_gotno;
4257
4258   /* If we're merging with the primary got, we will always have
4259      the full set of global entries.  Otherwise estimate those
4260      conservatively as well.  */
4261   if (to == arg->primary)
4262     estimate += arg->global_count;
4263   else
4264     estimate += from->global_gotno + to->global_gotno;
4265
4266   /* Bail out if the combined GOT might be too big.  */
4267   if (estimate > arg->max_count)
4268     return -1;
4269
4270   /* Commit to the merge.  Record that TO is now the bfd for this got.  */
4271   bfd2got->g = to;
4272
4273   /* Transfer the bfd's got information from FROM to TO.  */
4274   htab_traverse (from->got_entries, mips_elf_make_got_per_bfd, arg);
4275   if (arg->obfd == NULL)
4276     return 0;
4277
4278   htab_traverse (from->got_page_entries, mips_elf_make_got_pages_per_bfd, arg);
4279   if (arg->obfd == NULL)
4280     return 0;
4281
4282   /* We don't have to worry about releasing memory of the actual
4283      got entries, since they're all in the master got_entries hash
4284      table anyway.  */
4285   htab_delete (from->got_entries);
4286   htab_delete (from->got_page_entries);
4287   return 1;
4288 }
4289
4290 /* Attempt to merge gots of different input bfds.  Try to use as much
4291    as possible of the primary got, since it doesn't require explicit
4292    dynamic relocations, but don't use bfds that would reference global
4293    symbols out of the addressable range.  Failing the primary got,
4294    attempt to merge with the current got, or finish the current got
4295    and then make make the new got current.  */
4296
4297 static int
4298 mips_elf_merge_gots (void **bfd2got_, void *p)
4299 {
4300   struct mips_elf_bfd2got_hash *bfd2got
4301     = (struct mips_elf_bfd2got_hash *)*bfd2got_;
4302   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4303   struct mips_got_info *g;
4304   unsigned int estimate;
4305   int result;
4306
4307   g = bfd2got->g;
4308
4309   /* Work out the number of page, local and TLS entries.  */
4310   estimate = arg->max_pages;
4311   if (estimate > g->page_gotno)
4312     estimate = g->page_gotno;
4313   estimate += g->local_gotno + g->tls_gotno;
4314
4315   /* We place TLS GOT entries after both locals and globals.  The globals
4316      for the primary GOT may overflow the normal GOT size limit, so be
4317      sure not to merge a GOT which requires TLS with the primary GOT in that
4318      case.  This doesn't affect non-primary GOTs.  */
4319   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4320
4321   if (estimate <= arg->max_count)
4322     {
4323       /* If we don't have a primary GOT, use it as
4324          a starting point for the primary GOT.  */
4325       if (!arg->primary)
4326         {
4327           arg->primary = bfd2got->g;
4328           return 1;
4329         }
4330
4331       /* Try merging with the primary GOT.  */
4332       result = mips_elf_merge_got_with (bfd2got, arg->primary, arg);
4333       if (result >= 0)
4334         return result;
4335     }
4336
4337   /* If we can merge with the last-created got, do it.  */
4338   if (arg->current)
4339     {
4340       result = mips_elf_merge_got_with (bfd2got, arg->current, arg);
4341       if (result >= 0)
4342         return result;
4343     }
4344
4345   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4346      fits; if it turns out that it doesn't, we'll get relocation
4347      overflows anyway.  */
4348   g->next = arg->current;
4349   arg->current = g;
4350
4351   return 1;
4352 }
4353
4354 /* Set the TLS GOT index for the GOT entry in ENTRYP.  ENTRYP's NEXT field
4355    is null iff there is just a single GOT.  */
4356
4357 static int
4358 mips_elf_initialize_tls_index (void **entryp, void *p)
4359 {
4360   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4361   struct mips_got_info *g = p;
4362   bfd_vma next_index;
4363   unsigned char tls_type;
4364
4365   /* We're only interested in TLS symbols.  */
4366   if (entry->tls_type == 0)
4367     return 1;
4368
4369   next_index = MIPS_ELF_GOT_SIZE (entry->abfd) * (long) g->tls_assigned_gotno;
4370
4371   if (entry->symndx == -1 && g->next == NULL)
4372     {
4373       /* A type (3) got entry in the single-GOT case.  We use the symbol's
4374          hash table entry to track its index.  */
4375       if (entry->d.h->tls_type & GOT_TLS_OFFSET_DONE)
4376         return 1;
4377       entry->d.h->tls_type |= GOT_TLS_OFFSET_DONE;
4378       entry->d.h->tls_got_offset = next_index;
4379       tls_type = entry->d.h->tls_type;
4380     }
4381   else
4382     {
4383       if (entry->tls_type & GOT_TLS_LDM)
4384         {
4385           /* There are separate mips_got_entry objects for each input bfd
4386              that requires an LDM entry.  Make sure that all LDM entries in
4387              a GOT resolve to the same index.  */
4388           if (g->tls_ldm_offset != MINUS_TWO && g->tls_ldm_offset != MINUS_ONE)
4389             {
4390               entry->gotidx = g->tls_ldm_offset;
4391               return 1;
4392             }
4393           g->tls_ldm_offset = next_index;
4394         }
4395       entry->gotidx = next_index;
4396       tls_type = entry->tls_type;
4397     }
4398
4399   /* Account for the entries we've just allocated.  */
4400   if (tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
4401     g->tls_assigned_gotno += 2;
4402   if (tls_type & GOT_TLS_IE)
4403     g->tls_assigned_gotno += 1;
4404
4405   return 1;
4406 }
4407
4408 /* If passed a NULL mips_got_info in the argument, set the marker used
4409    to tell whether a global symbol needs a got entry (in the primary
4410    got) to the given VALUE.
4411
4412    If passed a pointer G to a mips_got_info in the argument (it must
4413    not be the primary GOT), compute the offset from the beginning of
4414    the (primary) GOT section to the entry in G corresponding to the
4415    global symbol.  G's assigned_gotno must contain the index of the
4416    first available global GOT entry in G.  VALUE must contain the size
4417    of a GOT entry in bytes.  For each global GOT entry that requires a
4418    dynamic relocation, NEEDED_RELOCS is incremented, and the symbol is
4419    marked as not eligible for lazy resolution through a function
4420    stub.  */
4421 static int
4422 mips_elf_set_global_got_offset (void **entryp, void *p)
4423 {
4424   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4425   struct mips_elf_set_global_got_offset_arg *arg
4426     = (struct mips_elf_set_global_got_offset_arg *)p;
4427   struct mips_got_info *g = arg->g;
4428
4429   if (g && entry->tls_type != GOT_NORMAL)
4430     arg->needed_relocs +=
4431       mips_tls_got_relocs (arg->info, entry->tls_type,
4432                            entry->symndx == -1 ? &entry->d.h->root : NULL);
4433
4434   if (entry->abfd != NULL
4435       && entry->symndx == -1
4436       && entry->d.h->global_got_area != GGA_NONE)
4437     {
4438       if (g)
4439         {
4440           BFD_ASSERT (g->global_gotsym == NULL);
4441
4442           entry->gotidx = arg->value * (long) g->assigned_gotno++;
4443           if (arg->info->shared
4444               || (elf_hash_table (arg->info)->dynamic_sections_created
4445                   && entry->d.h->root.def_dynamic
4446                   && !entry->d.h->root.def_regular))
4447             ++arg->needed_relocs;
4448         }
4449       else
4450         entry->d.h->global_got_area = arg->value;
4451     }
4452
4453   return 1;
4454 }
4455
4456 /* A htab_traverse callback for GOT entries for which DATA is the
4457    bfd_link_info.  Forbid any global symbols from having traditional
4458    lazy-binding stubs.  */
4459
4460 static int
4461 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4462 {
4463   struct bfd_link_info *info;
4464   struct mips_elf_link_hash_table *htab;
4465   struct mips_got_entry *entry;
4466
4467   entry = (struct mips_got_entry *) *entryp;
4468   info = (struct bfd_link_info *) data;
4469   htab = mips_elf_hash_table (info);
4470   BFD_ASSERT (htab != NULL);
4471
4472   if (entry->abfd != NULL
4473       && entry->symndx == -1
4474       && entry->d.h->needs_lazy_stub)
4475     {
4476       entry->d.h->needs_lazy_stub = FALSE;
4477       htab->lazy_stub_count--;
4478     }
4479
4480   return 1;
4481 }
4482
4483 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4484    the primary GOT.  */
4485 static bfd_vma
4486 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4487 {
4488   if (g->bfd2got == NULL)
4489     return 0;
4490
4491   g = mips_elf_got_for_ibfd (g, ibfd);
4492   if (! g)
4493     return 0;
4494
4495   BFD_ASSERT (g->next);
4496
4497   g = g->next;
4498
4499   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4500     * MIPS_ELF_GOT_SIZE (abfd);
4501 }
4502
4503 /* Turn a single GOT that is too big for 16-bit addressing into
4504    a sequence of GOTs, each one 16-bit addressable.  */
4505
4506 static bfd_boolean
4507 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4508                     asection *got, bfd_size_type pages)
4509 {
4510   struct mips_elf_link_hash_table *htab;
4511   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4512   struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
4513   struct mips_got_info *g, *gg;
4514   unsigned int assign, needed_relocs;
4515   bfd *dynobj;
4516
4517   dynobj = elf_hash_table (info)->dynobj;
4518   htab = mips_elf_hash_table (info);
4519   BFD_ASSERT (htab != NULL);
4520
4521   g = htab->got_info;
4522   g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash,
4523                                 mips_elf_bfd2got_entry_eq, NULL);
4524   if (g->bfd2got == NULL)
4525     return FALSE;
4526
4527   got_per_bfd_arg.bfd2got = g->bfd2got;
4528   got_per_bfd_arg.obfd = abfd;
4529   got_per_bfd_arg.info = info;
4530
4531   /* Count how many GOT entries each input bfd requires, creating a
4532      map from bfd to got info while at that.  */
4533   htab_traverse (g->got_entries, mips_elf_make_got_per_bfd, &got_per_bfd_arg);
4534   if (got_per_bfd_arg.obfd == NULL)
4535     return FALSE;
4536
4537   /* Also count how many page entries each input bfd requires.  */
4538   htab_traverse (g->got_page_entries, mips_elf_make_got_pages_per_bfd,
4539                  &got_per_bfd_arg);
4540   if (got_per_bfd_arg.obfd == NULL)
4541     return FALSE;
4542
4543   got_per_bfd_arg.current = NULL;
4544   got_per_bfd_arg.primary = NULL;
4545   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4546                                 / MIPS_ELF_GOT_SIZE (abfd))
4547                                - htab->reserved_gotno);
4548   got_per_bfd_arg.max_pages = pages;
4549   /* The number of globals that will be included in the primary GOT.
4550      See the calls to mips_elf_set_global_got_offset below for more
4551      information.  */
4552   got_per_bfd_arg.global_count = g->global_gotno;
4553
4554   /* Try to merge the GOTs of input bfds together, as long as they
4555      don't seem to exceed the maximum GOT size, choosing one of them
4556      to be the primary GOT.  */
4557   htab_traverse (g->bfd2got, mips_elf_merge_gots, &got_per_bfd_arg);
4558   if (got_per_bfd_arg.obfd == NULL)
4559     return FALSE;
4560
4561   /* If we do not find any suitable primary GOT, create an empty one.  */
4562   if (got_per_bfd_arg.primary == NULL)
4563     {
4564       g->next = (struct mips_got_info *)
4565         bfd_alloc (abfd, sizeof (struct mips_got_info));
4566       if (g->next == NULL)
4567         return FALSE;
4568
4569       g->next->global_gotsym = NULL;
4570       g->next->global_gotno = 0;
4571       g->next->reloc_only_gotno = 0;
4572       g->next->local_gotno = 0;
4573       g->next->page_gotno = 0;
4574       g->next->tls_gotno = 0;
4575       g->next->assigned_gotno = 0;
4576       g->next->tls_assigned_gotno = 0;
4577       g->next->tls_ldm_offset = MINUS_ONE;
4578       g->next->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
4579                                               mips_elf_multi_got_entry_eq,
4580                                               NULL);
4581       if (g->next->got_entries == NULL)
4582         return FALSE;
4583       g->next->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4584                                                    mips_got_page_entry_eq,
4585                                                    NULL);
4586       if (g->next->got_page_entries == NULL)
4587         return FALSE;
4588       g->next->bfd2got = NULL;
4589     }
4590   else
4591     g->next = got_per_bfd_arg.primary;
4592   g->next->next = got_per_bfd_arg.current;
4593
4594   /* GG is now the master GOT, and G is the primary GOT.  */
4595   gg = g;
4596   g = g->next;
4597
4598   /* Map the output bfd to the primary got.  That's what we're going
4599      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4600      didn't mark in check_relocs, and we want a quick way to find it.
4601      We can't just use gg->next because we're going to reverse the
4602      list.  */
4603   {
4604     struct mips_elf_bfd2got_hash *bfdgot;
4605     void **bfdgotp;
4606
4607     bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
4608       (abfd, sizeof (struct mips_elf_bfd2got_hash));
4609
4610     if (bfdgot == NULL)
4611       return FALSE;
4612
4613     bfdgot->bfd = abfd;
4614     bfdgot->g = g;
4615     bfdgotp = htab_find_slot (gg->bfd2got, bfdgot, INSERT);
4616
4617     BFD_ASSERT (*bfdgotp == NULL);
4618     *bfdgotp = bfdgot;
4619   }
4620
4621   /* Every symbol that is referenced in a dynamic relocation must be
4622      present in the primary GOT, so arrange for them to appear after
4623      those that are actually referenced.  */
4624   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4625   g->global_gotno = gg->global_gotno;
4626
4627   set_got_offset_arg.g = NULL;
4628   set_got_offset_arg.value = GGA_RELOC_ONLY;
4629   htab_traverse (gg->got_entries, mips_elf_set_global_got_offset,
4630                  &set_got_offset_arg);
4631   set_got_offset_arg.value = GGA_NORMAL;
4632   htab_traverse (g->got_entries, mips_elf_set_global_got_offset,
4633                  &set_got_offset_arg);
4634
4635   /* Now go through the GOTs assigning them offset ranges.
4636      [assigned_gotno, local_gotno[ will be set to the range of local
4637      entries in each GOT.  We can then compute the end of a GOT by
4638      adding local_gotno to global_gotno.  We reverse the list and make
4639      it circular since then we'll be able to quickly compute the
4640      beginning of a GOT, by computing the end of its predecessor.  To
4641      avoid special cases for the primary GOT, while still preserving
4642      assertions that are valid for both single- and multi-got links,
4643      we arrange for the main got struct to have the right number of
4644      global entries, but set its local_gotno such that the initial
4645      offset of the primary GOT is zero.  Remember that the primary GOT
4646      will become the last item in the circular linked list, so it
4647      points back to the master GOT.  */
4648   gg->local_gotno = -g->global_gotno;
4649   gg->global_gotno = g->global_gotno;
4650   gg->tls_gotno = 0;
4651   assign = 0;
4652   gg->next = gg;
4653
4654   do
4655     {
4656       struct mips_got_info *gn;
4657
4658       assign += htab->reserved_gotno;
4659       g->assigned_gotno = assign;
4660       g->local_gotno += assign;
4661       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4662       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4663
4664       /* Take g out of the direct list, and push it onto the reversed
4665          list that gg points to.  g->next is guaranteed to be nonnull after
4666          this operation, as required by mips_elf_initialize_tls_index. */
4667       gn = g->next;
4668       g->next = gg->next;
4669       gg->next = g;
4670
4671       /* Set up any TLS entries.  We always place the TLS entries after
4672          all non-TLS entries.  */
4673       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4674       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
4675
4676       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4677       g = gn;
4678
4679       /* Forbid global symbols in every non-primary GOT from having
4680          lazy-binding stubs.  */
4681       if (g)
4682         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4683     }
4684   while (g);
4685
4686   got->size = (gg->next->local_gotno
4687                + gg->next->global_gotno
4688                + gg->next->tls_gotno) * MIPS_ELF_GOT_SIZE (abfd);
4689
4690   needed_relocs = 0;
4691   set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (abfd);
4692   set_got_offset_arg.info = info;
4693   for (g = gg->next; g && g->next != gg; g = g->next)
4694     {
4695       unsigned int save_assign;
4696
4697       /* Assign offsets to global GOT entries.  */
4698       save_assign = g->assigned_gotno;
4699       g->assigned_gotno = g->local_gotno;
4700       set_got_offset_arg.g = g;
4701       set_got_offset_arg.needed_relocs = 0;
4702       htab_traverse (g->got_entries,
4703                      mips_elf_set_global_got_offset,
4704                      &set_got_offset_arg);
4705       needed_relocs += set_got_offset_arg.needed_relocs;
4706       BFD_ASSERT (g->assigned_gotno - g->local_gotno <= g->global_gotno);
4707
4708       g->assigned_gotno = save_assign;
4709       if (info->shared)
4710         {
4711           needed_relocs += g->local_gotno - g->assigned_gotno;
4712           BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4713                       + g->next->global_gotno
4714                       + g->next->tls_gotno
4715                       + htab->reserved_gotno);
4716         }
4717     }
4718
4719   if (needed_relocs)
4720     mips_elf_allocate_dynamic_relocations (dynobj, info,
4721                                            needed_relocs);
4722
4723   return TRUE;
4724 }
4725
4726 \f
4727 /* Returns the first relocation of type r_type found, beginning with
4728    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4729
4730 static const Elf_Internal_Rela *
4731 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4732                           const Elf_Internal_Rela *relocation,
4733                           const Elf_Internal_Rela *relend)
4734 {
4735   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4736
4737   while (relocation < relend)
4738     {
4739       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4740           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4741         return relocation;
4742
4743       ++relocation;
4744     }
4745
4746   /* We didn't find it.  */
4747   return NULL;
4748 }
4749
4750 /* Return whether an input relocation is against a local symbol.  */
4751
4752 static bfd_boolean
4753 mips_elf_local_relocation_p (bfd *input_bfd,
4754                              const Elf_Internal_Rela *relocation,
4755                              asection **local_sections)
4756 {
4757   unsigned long r_symndx;
4758   Elf_Internal_Shdr *symtab_hdr;
4759   size_t extsymoff;
4760
4761   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4762   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4763   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4764
4765   if (r_symndx < extsymoff)
4766     return TRUE;
4767   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4768     return TRUE;
4769
4770   return FALSE;
4771 }
4772 \f
4773 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4774
4775 bfd_vma
4776 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4777 {
4778   if (value & ((bfd_vma) 1 << (bits - 1)))
4779     /* VALUE is negative.  */
4780     value |= ((bfd_vma) - 1) << bits;
4781
4782   return value;
4783 }
4784
4785 /* Return non-zero if the indicated VALUE has overflowed the maximum
4786    range expressible by a signed number with the indicated number of
4787    BITS.  */
4788
4789 static bfd_boolean
4790 mips_elf_overflow_p (bfd_vma value, int bits)
4791 {
4792   bfd_signed_vma svalue = (bfd_signed_vma) value;
4793
4794   if (svalue > (1 << (bits - 1)) - 1)
4795     /* The value is too big.  */
4796     return TRUE;
4797   else if (svalue < -(1 << (bits - 1)))
4798     /* The value is too small.  */
4799     return TRUE;
4800
4801   /* All is well.  */
4802   return FALSE;
4803 }
4804
4805 /* Calculate the %high function.  */
4806
4807 static bfd_vma
4808 mips_elf_high (bfd_vma value)
4809 {
4810   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4811 }
4812
4813 /* Calculate the %higher function.  */
4814
4815 static bfd_vma
4816 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
4817 {
4818 #ifdef BFD64
4819   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4820 #else
4821   abort ();
4822   return MINUS_ONE;
4823 #endif
4824 }
4825
4826 /* Calculate the %highest function.  */
4827
4828 static bfd_vma
4829 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
4830 {
4831 #ifdef BFD64
4832   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
4833 #else
4834   abort ();
4835   return MINUS_ONE;
4836 #endif
4837 }
4838 \f
4839 /* Create the .compact_rel section.  */
4840
4841 static bfd_boolean
4842 mips_elf_create_compact_rel_section
4843   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
4844 {
4845   flagword flags;
4846   register asection *s;
4847
4848   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
4849     {
4850       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4851                | SEC_READONLY);
4852
4853       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
4854       if (s == NULL
4855           || ! bfd_set_section_alignment (abfd, s,
4856                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4857         return FALSE;
4858
4859       s->size = sizeof (Elf32_External_compact_rel);
4860     }
4861
4862   return TRUE;
4863 }
4864
4865 /* Create the .got section to hold the global offset table.  */
4866
4867 static bfd_boolean
4868 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
4869 {
4870   flagword flags;
4871   register asection *s;
4872   struct elf_link_hash_entry *h;
4873   struct bfd_link_hash_entry *bh;
4874   struct mips_got_info *g;
4875   bfd_size_type amt;
4876   struct mips_elf_link_hash_table *htab;
4877
4878   htab = mips_elf_hash_table (info);
4879   BFD_ASSERT (htab != NULL);
4880
4881   /* This function may be called more than once.  */
4882   if (htab->sgot)
4883     return TRUE;
4884
4885   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4886            | SEC_LINKER_CREATED);
4887
4888   /* We have to use an alignment of 2**4 here because this is hardcoded
4889      in the function stub generation and in the linker script.  */
4890   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4891   if (s == NULL
4892       || ! bfd_set_section_alignment (abfd, s, 4))
4893     return FALSE;
4894   htab->sgot = s;
4895
4896   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
4897      linker script because we don't want to define the symbol if we
4898      are not creating a global offset table.  */
4899   bh = NULL;
4900   if (! (_bfd_generic_link_add_one_symbol
4901          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
4902           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
4903     return FALSE;
4904
4905   h = (struct elf_link_hash_entry *) bh;
4906   h->non_elf = 0;
4907   h->def_regular = 1;
4908   h->type = STT_OBJECT;
4909   elf_hash_table (info)->hgot = h;
4910
4911   if (info->shared
4912       && ! bfd_elf_link_record_dynamic_symbol (info, h))
4913     return FALSE;
4914
4915   amt = sizeof (struct mips_got_info);
4916   g = bfd_alloc (abfd, amt);
4917   if (g == NULL)
4918     return FALSE;
4919   g->global_gotsym = NULL;
4920   g->global_gotno = 0;
4921   g->reloc_only_gotno = 0;
4922   g->tls_gotno = 0;
4923   g->local_gotno = 0;
4924   g->page_gotno = 0;
4925   g->assigned_gotno = 0;
4926   g->bfd2got = NULL;
4927   g->next = NULL;
4928   g->tls_ldm_offset = MINUS_ONE;
4929   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
4930                                     mips_elf_got_entry_eq, NULL);
4931   if (g->got_entries == NULL)
4932     return FALSE;
4933   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4934                                          mips_got_page_entry_eq, NULL);
4935   if (g->got_page_entries == NULL)
4936     return FALSE;
4937   htab->got_info = g;
4938   mips_elf_section_data (s)->elf.this_hdr.sh_flags
4939     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4940
4941   /* We also need a .got.plt section when generating PLTs.  */
4942   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
4943                                           SEC_ALLOC | SEC_LOAD
4944                                           | SEC_HAS_CONTENTS
4945                                           | SEC_IN_MEMORY
4946                                           | SEC_LINKER_CREATED);
4947   if (s == NULL)
4948     return FALSE;
4949   htab->sgotplt = s;
4950
4951   return TRUE;
4952 }
4953 \f
4954 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4955    __GOTT_INDEX__ symbols.  These symbols are only special for
4956    shared objects; they are not used in executables.  */
4957
4958 static bfd_boolean
4959 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
4960 {
4961   return (mips_elf_hash_table (info)->is_vxworks
4962           && info->shared
4963           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
4964               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
4965 }
4966
4967 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
4968    require an la25 stub.  See also mips_elf_local_pic_function_p,
4969    which determines whether the destination function ever requires a
4970    stub.  */
4971
4972 static bfd_boolean
4973 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
4974                                      bfd_boolean target_is_16_bit_code_p)
4975 {
4976   /* We specifically ignore branches and jumps from EF_PIC objects,
4977      where the onus is on the compiler or programmer to perform any
4978      necessary initialization of $25.  Sometimes such initialization
4979      is unnecessary; for example, -mno-shared functions do not use
4980      the incoming value of $25, and may therefore be called directly.  */
4981   if (PIC_OBJECT_P (input_bfd))
4982     return FALSE;
4983
4984   switch (r_type)
4985     {
4986     case R_MIPS_26:
4987     case R_MIPS_PC16:
4988     case R_MICROMIPS_26_S1:
4989     case R_MICROMIPS_PC7_S1:
4990     case R_MICROMIPS_PC10_S1:
4991     case R_MICROMIPS_PC16_S1:
4992     case R_MICROMIPS_PC23_S2:
4993       return TRUE;
4994
4995     case R_MIPS16_26:
4996       return !target_is_16_bit_code_p;
4997
4998     default:
4999       return FALSE;
5000     }
5001 }
5002 \f
5003 /* Calculate the value produced by the RELOCATION (which comes from
5004    the INPUT_BFD).  The ADDEND is the addend to use for this
5005    RELOCATION; RELOCATION->R_ADDEND is ignored.
5006
5007    The result of the relocation calculation is stored in VALUEP.
5008    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5009    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5010
5011    This function returns bfd_reloc_continue if the caller need take no
5012    further action regarding this relocation, bfd_reloc_notsupported if
5013    something goes dramatically wrong, bfd_reloc_overflow if an
5014    overflow occurs, and bfd_reloc_ok to indicate success.  */
5015
5016 static bfd_reloc_status_type
5017 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5018                                asection *input_section,
5019                                struct bfd_link_info *info,
5020                                const Elf_Internal_Rela *relocation,
5021                                bfd_vma addend, reloc_howto_type *howto,
5022                                Elf_Internal_Sym *local_syms,
5023                                asection **local_sections, bfd_vma *valuep,
5024                                const char **namep,
5025                                bfd_boolean *cross_mode_jump_p,
5026                                bfd_boolean save_addend)
5027 {
5028   /* The eventual value we will return.  */
5029   bfd_vma value;
5030   /* The address of the symbol against which the relocation is
5031      occurring.  */
5032   bfd_vma symbol = 0;
5033   /* The final GP value to be used for the relocatable, executable, or
5034      shared object file being produced.  */
5035   bfd_vma gp;
5036   /* The place (section offset or address) of the storage unit being
5037      relocated.  */
5038   bfd_vma p;
5039   /* The value of GP used to create the relocatable object.  */
5040   bfd_vma gp0;
5041   /* The offset into the global offset table at which the address of
5042      the relocation entry symbol, adjusted by the addend, resides
5043      during execution.  */
5044   bfd_vma g = MINUS_ONE;
5045   /* The section in which the symbol referenced by the relocation is
5046      located.  */
5047   asection *sec = NULL;
5048   struct mips_elf_link_hash_entry *h = NULL;
5049   /* TRUE if the symbol referred to by this relocation is a local
5050      symbol.  */
5051   bfd_boolean local_p, was_local_p;
5052   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5053   bfd_boolean gp_disp_p = FALSE;
5054   /* TRUE if the symbol referred to by this relocation is
5055      "__gnu_local_gp".  */
5056   bfd_boolean gnu_local_gp_p = FALSE;
5057   Elf_Internal_Shdr *symtab_hdr;
5058   size_t extsymoff;
5059   unsigned long r_symndx;
5060   int r_type;
5061   /* TRUE if overflow occurred during the calculation of the
5062      relocation value.  */
5063   bfd_boolean overflowed_p;
5064   /* TRUE if this relocation refers to a MIPS16 function.  */
5065   bfd_boolean target_is_16_bit_code_p = FALSE;
5066   bfd_boolean target_is_micromips_code_p = FALSE;
5067   struct mips_elf_link_hash_table *htab;
5068   bfd *dynobj;
5069
5070   dynobj = elf_hash_table (info)->dynobj;
5071   htab = mips_elf_hash_table (info);
5072   BFD_ASSERT (htab != NULL);
5073
5074   /* Parse the relocation.  */
5075   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5076   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5077   p = (input_section->output_section->vma
5078        + input_section->output_offset
5079        + relocation->r_offset);
5080
5081   /* Assume that there will be no overflow.  */
5082   overflowed_p = FALSE;
5083
5084   /* Figure out whether or not the symbol is local, and get the offset
5085      used in the array of hash table entries.  */
5086   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5087   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5088                                          local_sections);
5089   was_local_p = local_p;
5090   if (! elf_bad_symtab (input_bfd))
5091     extsymoff = symtab_hdr->sh_info;
5092   else
5093     {
5094       /* The symbol table does not follow the rule that local symbols
5095          must come before globals.  */
5096       extsymoff = 0;
5097     }
5098
5099   /* Figure out the value of the symbol.  */
5100   if (local_p)
5101     {
5102       Elf_Internal_Sym *sym;
5103
5104       sym = local_syms + r_symndx;
5105       sec = local_sections[r_symndx];
5106
5107       symbol = sec->output_section->vma + sec->output_offset;
5108       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5109           || (sec->flags & SEC_MERGE))
5110         symbol += sym->st_value;
5111       if ((sec->flags & SEC_MERGE)
5112           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5113         {
5114           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5115           addend -= symbol;
5116           addend += sec->output_section->vma + sec->output_offset;
5117         }
5118
5119       /* MIPS16/microMIPS text labels should be treated as odd.  */
5120       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5121         ++symbol;
5122
5123       /* Record the name of this symbol, for our caller.  */
5124       *namep = bfd_elf_string_from_elf_section (input_bfd,
5125                                                 symtab_hdr->sh_link,
5126                                                 sym->st_name);
5127       if (*namep == '\0')
5128         *namep = bfd_section_name (input_bfd, sec);
5129
5130       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5131       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5132     }
5133   else
5134     {
5135       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5136
5137       /* For global symbols we look up the symbol in the hash-table.  */
5138       h = ((struct mips_elf_link_hash_entry *)
5139            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5140       /* Find the real hash-table entry for this symbol.  */
5141       while (h->root.root.type == bfd_link_hash_indirect
5142              || h->root.root.type == bfd_link_hash_warning)
5143         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5144
5145       /* Record the name of this symbol, for our caller.  */
5146       *namep = h->root.root.root.string;
5147
5148       /* See if this is the special _gp_disp symbol.  Note that such a
5149          symbol must always be a global symbol.  */
5150       if (strcmp (*namep, "_gp_disp") == 0
5151           && ! NEWABI_P (input_bfd))
5152         {
5153           /* Relocations against _gp_disp are permitted only with
5154              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5155           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5156             return bfd_reloc_notsupported;
5157
5158           gp_disp_p = TRUE;
5159         }
5160       /* See if this is the special _gp symbol.  Note that such a
5161          symbol must always be a global symbol.  */
5162       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5163         gnu_local_gp_p = TRUE;
5164
5165
5166       /* If this symbol is defined, calculate its address.  Note that
5167          _gp_disp is a magic symbol, always implicitly defined by the
5168          linker, so it's inappropriate to check to see whether or not
5169          its defined.  */
5170       else if ((h->root.root.type == bfd_link_hash_defined
5171                 || h->root.root.type == bfd_link_hash_defweak)
5172                && h->root.root.u.def.section)
5173         {
5174           sec = h->root.root.u.def.section;
5175           if (sec->output_section)
5176             symbol = (h->root.root.u.def.value
5177                       + sec->output_section->vma
5178                       + sec->output_offset);
5179           else
5180             symbol = h->root.root.u.def.value;
5181         }
5182       else if (h->root.root.type == bfd_link_hash_undefweak)
5183         /* We allow relocations against undefined weak symbols, giving
5184            it the value zero, so that you can undefined weak functions
5185            and check to see if they exist by looking at their
5186            addresses.  */
5187         symbol = 0;
5188       else if (info->unresolved_syms_in_objects == RM_IGNORE
5189                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5190         symbol = 0;
5191       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5192                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5193         {
5194           /* If this is a dynamic link, we should have created a
5195              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5196              in in _bfd_mips_elf_create_dynamic_sections.
5197              Otherwise, we should define the symbol with a value of 0.
5198              FIXME: It should probably get into the symbol table
5199              somehow as well.  */
5200           BFD_ASSERT (! info->shared);
5201           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5202           symbol = 0;
5203         }
5204       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5205         {
5206           /* This is an optional symbol - an Irix specific extension to the
5207              ELF spec.  Ignore it for now.
5208              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5209              than simply ignoring them, but we do not handle this for now.
5210              For information see the "64-bit ELF Object File Specification"
5211              which is available from here:
5212              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5213           symbol = 0;
5214         }
5215       else if ((*info->callbacks->undefined_symbol)
5216                (info, h->root.root.root.string, input_bfd,
5217                 input_section, relocation->r_offset,
5218                 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5219                  || ELF_ST_VISIBILITY (h->root.other)))
5220         {
5221           return bfd_reloc_undefined;
5222         }
5223       else
5224         {
5225           return bfd_reloc_notsupported;
5226         }
5227
5228       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5229       /* If the output section is the PLT section,
5230          then the target is not microMIPS.  */
5231       target_is_micromips_code_p = (htab->splt != sec
5232                                     && ELF_ST_IS_MICROMIPS (h->root.other));
5233     }
5234
5235   /* If this is a reference to a 16-bit function with a stub, we need
5236      to redirect the relocation to the stub unless:
5237
5238      (a) the relocation is for a MIPS16 JAL;
5239
5240      (b) the relocation is for a MIPS16 PIC call, and there are no
5241          non-MIPS16 uses of the GOT slot; or
5242
5243      (c) the section allows direct references to MIPS16 functions.  */
5244   if (r_type != R_MIPS16_26
5245       && !info->relocatable
5246       && ((h != NULL
5247            && h->fn_stub != NULL
5248            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5249           || (local_p
5250               && elf_tdata (input_bfd)->local_stubs != NULL
5251               && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5252       && !section_allows_mips16_refs_p (input_section))
5253     {
5254       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5255          have already noticed that we were going to need the
5256          stub.  */
5257       if (local_p)
5258         {
5259           sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
5260           value = 0;
5261         }
5262       else
5263         {
5264           BFD_ASSERT (h->need_fn_stub);
5265           if (h->la25_stub)
5266             {
5267               /* If a LA25 header for the stub itself exists, point to the
5268                  prepended LUI/ADDIU sequence.  */
5269               sec = h->la25_stub->stub_section;
5270               value = h->la25_stub->offset;
5271             }
5272           else
5273             {
5274               sec = h->fn_stub;
5275               value = 0;
5276             }
5277         }
5278
5279       symbol = sec->output_section->vma + sec->output_offset + value;
5280       /* The target is 16-bit, but the stub isn't.  */
5281       target_is_16_bit_code_p = FALSE;
5282     }
5283   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
5284      need to redirect the call to the stub.  Note that we specifically
5285      exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5286      use an indirect stub instead.  */
5287   else if (r_type == R_MIPS16_26 && !info->relocatable
5288            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5289                || (local_p
5290                    && elf_tdata (input_bfd)->local_call_stubs != NULL
5291                    && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5292            && !target_is_16_bit_code_p)
5293     {
5294       if (local_p)
5295         sec = elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5296       else
5297         {
5298           /* If both call_stub and call_fp_stub are defined, we can figure
5299              out which one to use by checking which one appears in the input
5300              file.  */
5301           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5302             {
5303               asection *o;
5304               
5305               sec = NULL;
5306               for (o = input_bfd->sections; o != NULL; o = o->next)
5307                 {
5308                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5309                     {
5310                       sec = h->call_fp_stub;
5311                       break;
5312                     }
5313                 }
5314               if (sec == NULL)
5315                 sec = h->call_stub;
5316             }
5317           else if (h->call_stub != NULL)
5318             sec = h->call_stub;
5319           else
5320             sec = h->call_fp_stub;
5321         }
5322
5323       BFD_ASSERT (sec->size > 0);
5324       symbol = sec->output_section->vma + sec->output_offset;
5325     }
5326   /* If this is a direct call to a PIC function, redirect to the
5327      non-PIC stub.  */
5328   else if (h != NULL && h->la25_stub
5329            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5330                                                    target_is_16_bit_code_p))
5331     symbol = (h->la25_stub->stub_section->output_section->vma
5332               + h->la25_stub->stub_section->output_offset
5333               + h->la25_stub->offset);
5334
5335   /* Make sure MIPS16 and microMIPS are not used together.  */
5336   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5337       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5338    {
5339       (*_bfd_error_handler)
5340         (_("MIPS16 and microMIPS functions cannot call each other"));
5341       return bfd_reloc_notsupported;
5342    }
5343
5344   /* Calls from 16-bit code to 32-bit code and vice versa require the
5345      mode change.  However, we can ignore calls to undefined weak symbols,
5346      which should never be executed at runtime.  This exception is important
5347      because the assembly writer may have "known" that any definition of the
5348      symbol would be 16-bit code, and that direct jumps were therefore
5349      acceptable.  */
5350   *cross_mode_jump_p = (!info->relocatable
5351                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5352                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5353                             || (r_type == R_MICROMIPS_26_S1
5354                                 && !target_is_micromips_code_p)
5355                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5356                                 && (target_is_16_bit_code_p
5357                                     || target_is_micromips_code_p))));
5358
5359   local_p = (h == NULL
5360              || (h->got_only_for_calls
5361                  ? SYMBOL_CALLS_LOCAL (info, &h->root)
5362                  : SYMBOL_REFERENCES_LOCAL (info, &h->root)));
5363
5364   gp0 = _bfd_get_gp_value (input_bfd);
5365   gp = _bfd_get_gp_value (abfd);
5366   if (htab->got_info)
5367     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5368
5369   if (gnu_local_gp_p)
5370     symbol = gp;
5371
5372   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5373      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5374      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5375   if (got_page_reloc_p (r_type) && !local_p)
5376     {
5377       r_type = (micromips_reloc_p (r_type)
5378                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5379       addend = 0;
5380     }
5381
5382   /* If we haven't already determined the GOT offset, and we're going
5383      to need it, get it now.  */
5384   switch (r_type)
5385     {
5386     case R_MIPS16_CALL16:
5387     case R_MIPS16_GOT16:
5388     case R_MIPS_CALL16:
5389     case R_MIPS_GOT16:
5390     case R_MIPS_GOT_DISP:
5391     case R_MIPS_GOT_HI16:
5392     case R_MIPS_CALL_HI16:
5393     case R_MIPS_GOT_LO16:
5394     case R_MIPS_CALL_LO16:
5395     case R_MICROMIPS_CALL16:
5396     case R_MICROMIPS_GOT16:
5397     case R_MICROMIPS_GOT_DISP:
5398     case R_MICROMIPS_GOT_HI16:
5399     case R_MICROMIPS_CALL_HI16:
5400     case R_MICROMIPS_GOT_LO16:
5401     case R_MICROMIPS_CALL_LO16:
5402     case R_MIPS_TLS_GD:
5403     case R_MIPS_TLS_GOTTPREL:
5404     case R_MIPS_TLS_LDM:
5405     case R_MIPS16_TLS_GD:
5406     case R_MIPS16_TLS_GOTTPREL:
5407     case R_MIPS16_TLS_LDM:
5408     case R_MICROMIPS_TLS_GD:
5409     case R_MICROMIPS_TLS_GOTTPREL:
5410     case R_MICROMIPS_TLS_LDM:
5411       /* Find the index into the GOT where this value is located.  */
5412       if (tls_ldm_reloc_p (r_type))
5413         {
5414           g = mips_elf_local_got_index (abfd, input_bfd, info,
5415                                         0, 0, NULL, r_type);
5416           if (g == MINUS_ONE)
5417             return bfd_reloc_outofrange;
5418         }
5419       else if (!local_p)
5420         {
5421           /* On VxWorks, CALL relocations should refer to the .got.plt
5422              entry, which is initialized to point at the PLT stub.  */
5423           if (htab->is_vxworks
5424               && (call_hi16_reloc_p (r_type)
5425                   || call_lo16_reloc_p (r_type)
5426                   || call16_reloc_p (r_type)))
5427             {
5428               BFD_ASSERT (addend == 0);
5429               BFD_ASSERT (h->root.needs_plt);
5430               g = mips_elf_gotplt_index (info, &h->root);
5431             }
5432           else
5433             {
5434               BFD_ASSERT (addend == 0);
5435               g = mips_elf_global_got_index (dynobj, input_bfd,
5436                                              &h->root, r_type, info);
5437               if (h->tls_type == GOT_NORMAL
5438                   && !elf_hash_table (info)->dynamic_sections_created)
5439                 /* This is a static link.  We must initialize the GOT entry.  */
5440                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5441             }
5442         }
5443       else if (!htab->is_vxworks
5444                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5445         /* The calculation below does not involve "g".  */
5446         break;
5447       else
5448         {
5449           g = mips_elf_local_got_index (abfd, input_bfd, info,
5450                                         symbol + addend, r_symndx, h, r_type);
5451           if (g == MINUS_ONE)
5452             return bfd_reloc_outofrange;
5453         }
5454
5455       /* Convert GOT indices to actual offsets.  */
5456       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5457       break;
5458     }
5459
5460   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5461      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5462   if (h != NULL && is_gott_symbol (info, &h->root))
5463     {
5464       Elf_Internal_Rela outrel;
5465       bfd_byte *loc;
5466       asection *s;
5467
5468       s = mips_elf_rel_dyn_section (info, FALSE);
5469       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5470
5471       outrel.r_offset = (input_section->output_section->vma
5472                          + input_section->output_offset
5473                          + relocation->r_offset);
5474       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5475       outrel.r_addend = addend;
5476       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5477
5478       /* If we've written this relocation for a readonly section,
5479          we need to set DF_TEXTREL again, so that we do not delete the
5480          DT_TEXTREL tag.  */
5481       if (MIPS_ELF_READONLY_SECTION (input_section))
5482         info->flags |= DF_TEXTREL;
5483
5484       *valuep = 0;
5485       return bfd_reloc_ok;
5486     }
5487
5488   /* Figure out what kind of relocation is being performed.  */
5489   switch (r_type)
5490     {
5491     case R_MIPS_NONE:
5492       return bfd_reloc_continue;
5493
5494     case R_MIPS_16:
5495       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
5496       overflowed_p = mips_elf_overflow_p (value, 16);
5497       break;
5498
5499     case R_MIPS_32:
5500     case R_MIPS_REL32:
5501     case R_MIPS_64:
5502       if ((info->shared
5503            || (htab->root.dynamic_sections_created
5504                && h != NULL
5505                && h->root.def_dynamic
5506                && !h->root.def_regular
5507                && !h->has_static_relocs))
5508           && r_symndx != STN_UNDEF
5509           && (h == NULL
5510               || h->root.root.type != bfd_link_hash_undefweak
5511               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5512           && (input_section->flags & SEC_ALLOC) != 0)
5513         {
5514           /* If we're creating a shared library, then we can't know
5515              where the symbol will end up.  So, we create a relocation
5516              record in the output, and leave the job up to the dynamic
5517              linker.  We must do the same for executable references to
5518              shared library symbols, unless we've decided to use copy
5519              relocs or PLTs instead.  */
5520           value = addend;
5521           if (!mips_elf_create_dynamic_relocation (abfd,
5522                                                    info,
5523                                                    relocation,
5524                                                    h,
5525                                                    sec,
5526                                                    symbol,
5527                                                    &value,
5528                                                    input_section))
5529             return bfd_reloc_undefined;
5530         }
5531       else
5532         {
5533           if (r_type != R_MIPS_REL32)
5534             value = symbol + addend;
5535           else
5536             value = addend;
5537         }
5538       value &= howto->dst_mask;
5539       break;
5540
5541     case R_MIPS_PC32:
5542       value = symbol + addend - p;
5543       value &= howto->dst_mask;
5544       break;
5545
5546     case R_MIPS16_26:
5547       /* The calculation for R_MIPS16_26 is just the same as for an
5548          R_MIPS_26.  It's only the storage of the relocated field into
5549          the output file that's different.  That's handled in
5550          mips_elf_perform_relocation.  So, we just fall through to the
5551          R_MIPS_26 case here.  */
5552     case R_MIPS_26:
5553     case R_MICROMIPS_26_S1:
5554       {
5555         unsigned int shift;
5556
5557         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5558            the correct ISA mode selector and bit 1 must be 0.  */
5559         if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5560           return bfd_reloc_outofrange;
5561
5562         /* Shift is 2, unusually, for microMIPS JALX.  */
5563         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5564
5565         if (was_local_p)
5566           value = addend | ((p + 4) & (0xfc000000 << shift));
5567         else
5568           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5569         value = (value + symbol) >> shift;
5570         if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5571           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5572         value &= howto->dst_mask;
5573       }
5574       break;
5575
5576     case R_MIPS_TLS_DTPREL_HI16:
5577     case R_MIPS16_TLS_DTPREL_HI16:
5578     case R_MICROMIPS_TLS_DTPREL_HI16:
5579       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5580                & howto->dst_mask);
5581       break;
5582
5583     case R_MIPS_TLS_DTPREL_LO16:
5584     case R_MIPS_TLS_DTPREL32:
5585     case R_MIPS_TLS_DTPREL64:
5586     case R_MIPS16_TLS_DTPREL_LO16:
5587     case R_MICROMIPS_TLS_DTPREL_LO16:
5588       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5589       break;
5590
5591     case R_MIPS_TLS_TPREL_HI16:
5592     case R_MIPS16_TLS_TPREL_HI16:
5593     case R_MICROMIPS_TLS_TPREL_HI16:
5594       value = (mips_elf_high (addend + symbol - tprel_base (info))
5595                & howto->dst_mask);
5596       break;
5597
5598     case R_MIPS_TLS_TPREL_LO16:
5599     case R_MIPS_TLS_TPREL32:
5600     case R_MIPS_TLS_TPREL64:
5601     case R_MIPS16_TLS_TPREL_LO16:
5602     case R_MICROMIPS_TLS_TPREL_LO16:
5603       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5604       break;
5605
5606     case R_MIPS_HI16:
5607     case R_MIPS16_HI16:
5608     case R_MICROMIPS_HI16:
5609       if (!gp_disp_p)
5610         {
5611           value = mips_elf_high (addend + symbol);
5612           value &= howto->dst_mask;
5613         }
5614       else
5615         {
5616           /* For MIPS16 ABI code we generate this sequence
5617                 0: li      $v0,%hi(_gp_disp)
5618                 4: addiupc $v1,%lo(_gp_disp)
5619                 8: sll     $v0,16
5620                12: addu    $v0,$v1
5621                14: move    $gp,$v0
5622              So the offsets of hi and lo relocs are the same, but the
5623              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5624              ADDIUPC clears the low two bits of the instruction address,
5625              so the base is ($t9 + 4) & ~3.  */
5626           if (r_type == R_MIPS16_HI16)
5627             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5628           /* The microMIPS .cpload sequence uses the same assembly
5629              instructions as the traditional psABI version, but the
5630              incoming $t9 has the low bit set.  */
5631           else if (r_type == R_MICROMIPS_HI16)
5632             value = mips_elf_high (addend + gp - p - 1);
5633           else
5634             value = mips_elf_high (addend + gp - p);
5635           overflowed_p = mips_elf_overflow_p (value, 16);
5636         }
5637       break;
5638
5639     case R_MIPS_LO16:
5640     case R_MIPS16_LO16:
5641     case R_MICROMIPS_LO16:
5642     case R_MICROMIPS_HI0_LO16:
5643       if (!gp_disp_p)
5644         value = (symbol + addend) & howto->dst_mask;
5645       else
5646         {
5647           /* See the comment for R_MIPS16_HI16 above for the reason
5648              for this conditional.  */
5649           if (r_type == R_MIPS16_LO16)
5650             value = addend + gp - (p & ~(bfd_vma) 0x3);
5651           else if (r_type == R_MICROMIPS_LO16
5652                    || r_type == R_MICROMIPS_HI0_LO16)
5653             value = addend + gp - p + 3;
5654           else
5655             value = addend + gp - p + 4;
5656           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5657              for overflow.  But, on, say, IRIX5, relocations against
5658              _gp_disp are normally generated from the .cpload
5659              pseudo-op.  It generates code that normally looks like
5660              this:
5661
5662                lui    $gp,%hi(_gp_disp)
5663                addiu  $gp,$gp,%lo(_gp_disp)
5664                addu   $gp,$gp,$t9
5665
5666              Here $t9 holds the address of the function being called,
5667              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5668              relocation can easily overflow in this situation, but the
5669              R_MIPS_HI16 relocation will handle the overflow.
5670              Therefore, we consider this a bug in the MIPS ABI, and do
5671              not check for overflow here.  */
5672         }
5673       break;
5674
5675     case R_MIPS_LITERAL:
5676     case R_MICROMIPS_LITERAL:
5677       /* Because we don't merge literal sections, we can handle this
5678          just like R_MIPS_GPREL16.  In the long run, we should merge
5679          shared literals, and then we will need to additional work
5680          here.  */
5681
5682       /* Fall through.  */
5683
5684     case R_MIPS16_GPREL:
5685       /* The R_MIPS16_GPREL performs the same calculation as
5686          R_MIPS_GPREL16, but stores the relocated bits in a different
5687          order.  We don't need to do anything special here; the
5688          differences are handled in mips_elf_perform_relocation.  */
5689     case R_MIPS_GPREL16:
5690     case R_MICROMIPS_GPREL7_S2:
5691     case R_MICROMIPS_GPREL16:
5692       /* Only sign-extend the addend if it was extracted from the
5693          instruction.  If the addend was separate, leave it alone,
5694          otherwise we may lose significant bits.  */
5695       if (howto->partial_inplace)
5696         addend = _bfd_mips_elf_sign_extend (addend, 16);
5697       value = symbol + addend - gp;
5698       /* If the symbol was local, any earlier relocatable links will
5699          have adjusted its addend with the gp offset, so compensate
5700          for that now.  Don't do it for symbols forced local in this
5701          link, though, since they won't have had the gp offset applied
5702          to them before.  */
5703       if (was_local_p)
5704         value += gp0;
5705       overflowed_p = mips_elf_overflow_p (value, 16);
5706       break;
5707
5708     case R_MIPS16_GOT16:
5709     case R_MIPS16_CALL16:
5710     case R_MIPS_GOT16:
5711     case R_MIPS_CALL16:
5712     case R_MICROMIPS_GOT16:
5713     case R_MICROMIPS_CALL16:
5714       /* VxWorks does not have separate local and global semantics for
5715          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5716       if (!htab->is_vxworks && local_p)
5717         {
5718           value = mips_elf_got16_entry (abfd, input_bfd, info,
5719                                         symbol + addend, !was_local_p);
5720           if (value == MINUS_ONE)
5721             return bfd_reloc_outofrange;
5722           value
5723             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5724           overflowed_p = mips_elf_overflow_p (value, 16);
5725           break;
5726         }
5727
5728       /* Fall through.  */
5729
5730     case R_MIPS_TLS_GD:
5731     case R_MIPS_TLS_GOTTPREL:
5732     case R_MIPS_TLS_LDM:
5733     case R_MIPS_GOT_DISP:
5734     case R_MIPS16_TLS_GD:
5735     case R_MIPS16_TLS_GOTTPREL:
5736     case R_MIPS16_TLS_LDM:
5737     case R_MICROMIPS_TLS_GD:
5738     case R_MICROMIPS_TLS_GOTTPREL:
5739     case R_MICROMIPS_TLS_LDM:
5740     case R_MICROMIPS_GOT_DISP:
5741       value = g;
5742       overflowed_p = mips_elf_overflow_p (value, 16);
5743       break;
5744
5745     case R_MIPS_GPREL32:
5746       value = (addend + symbol + gp0 - gp);
5747       if (!save_addend)
5748         value &= howto->dst_mask;
5749       break;
5750
5751     case R_MIPS_PC16:
5752     case R_MIPS_GNU_REL16_S2:
5753       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5754       overflowed_p = mips_elf_overflow_p (value, 18);
5755       value >>= howto->rightshift;
5756       value &= howto->dst_mask;
5757       break;
5758
5759     case R_MICROMIPS_PC7_S1:
5760       value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p;
5761       overflowed_p = mips_elf_overflow_p (value, 8);
5762       value >>= howto->rightshift;
5763       value &= howto->dst_mask;
5764       break;
5765
5766     case R_MICROMIPS_PC10_S1:
5767       value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p;
5768       overflowed_p = mips_elf_overflow_p (value, 11);
5769       value >>= howto->rightshift;
5770       value &= howto->dst_mask;
5771       break;
5772
5773     case R_MICROMIPS_PC16_S1:
5774       value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p;
5775       overflowed_p = mips_elf_overflow_p (value, 17);
5776       value >>= howto->rightshift;
5777       value &= howto->dst_mask;
5778       break;
5779
5780     case R_MICROMIPS_PC23_S2:
5781       value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3);
5782       overflowed_p = mips_elf_overflow_p (value, 25);
5783       value >>= howto->rightshift;
5784       value &= howto->dst_mask;
5785       break;
5786
5787     case R_MIPS_GOT_HI16:
5788     case R_MIPS_CALL_HI16:
5789     case R_MICROMIPS_GOT_HI16:
5790     case R_MICROMIPS_CALL_HI16:
5791       /* We're allowed to handle these two relocations identically.
5792          The dynamic linker is allowed to handle the CALL relocations
5793          differently by creating a lazy evaluation stub.  */
5794       value = g;
5795       value = mips_elf_high (value);
5796       value &= howto->dst_mask;
5797       break;
5798
5799     case R_MIPS_GOT_LO16:
5800     case R_MIPS_CALL_LO16:
5801     case R_MICROMIPS_GOT_LO16:
5802     case R_MICROMIPS_CALL_LO16:
5803       value = g & howto->dst_mask;
5804       break;
5805
5806     case R_MIPS_GOT_PAGE:
5807     case R_MICROMIPS_GOT_PAGE:
5808       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
5809       if (value == MINUS_ONE)
5810         return bfd_reloc_outofrange;
5811       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5812       overflowed_p = mips_elf_overflow_p (value, 16);
5813       break;
5814
5815     case R_MIPS_GOT_OFST:
5816     case R_MICROMIPS_GOT_OFST:
5817       if (local_p)
5818         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
5819       else
5820         value = addend;
5821       overflowed_p = mips_elf_overflow_p (value, 16);
5822       break;
5823
5824     case R_MIPS_SUB:
5825     case R_MICROMIPS_SUB:
5826       value = symbol - addend;
5827       value &= howto->dst_mask;
5828       break;
5829
5830     case R_MIPS_HIGHER:
5831     case R_MICROMIPS_HIGHER:
5832       value = mips_elf_higher (addend + symbol);
5833       value &= howto->dst_mask;
5834       break;
5835
5836     case R_MIPS_HIGHEST:
5837     case R_MICROMIPS_HIGHEST:
5838       value = mips_elf_highest (addend + symbol);
5839       value &= howto->dst_mask;
5840       break;
5841
5842     case R_MIPS_SCN_DISP:
5843     case R_MICROMIPS_SCN_DISP:
5844       value = symbol + addend - sec->output_offset;
5845       value &= howto->dst_mask;
5846       break;
5847
5848     case R_MIPS_JALR:
5849     case R_MICROMIPS_JALR:
5850       /* This relocation is only a hint.  In some cases, we optimize
5851          it into a bal instruction.  But we don't try to optimize
5852          when the symbol does not resolve locally.  */
5853       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
5854         return bfd_reloc_continue;
5855       value = symbol + addend;
5856       break;
5857
5858     case R_MIPS_PJUMP:
5859     case R_MIPS_GNU_VTINHERIT:
5860     case R_MIPS_GNU_VTENTRY:
5861       /* We don't do anything with these at present.  */
5862       return bfd_reloc_continue;
5863
5864     default:
5865       /* An unrecognized relocation type.  */
5866       return bfd_reloc_notsupported;
5867     }
5868
5869   /* Store the VALUE for our caller.  */
5870   *valuep = value;
5871   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5872 }
5873
5874 /* Obtain the field relocated by RELOCATION.  */
5875
5876 static bfd_vma
5877 mips_elf_obtain_contents (reloc_howto_type *howto,
5878                           const Elf_Internal_Rela *relocation,
5879                           bfd *input_bfd, bfd_byte *contents)
5880 {
5881   bfd_vma x;
5882   bfd_byte *location = contents + relocation->r_offset;
5883
5884   /* Obtain the bytes.  */
5885   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5886
5887   return x;
5888 }
5889
5890 /* It has been determined that the result of the RELOCATION is the
5891    VALUE.  Use HOWTO to place VALUE into the output file at the
5892    appropriate position.  The SECTION is the section to which the
5893    relocation applies.  
5894    CROSS_MODE_JUMP_P is true if the relocation field
5895    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5896
5897    Returns FALSE if anything goes wrong.  */
5898
5899 static bfd_boolean
5900 mips_elf_perform_relocation (struct bfd_link_info *info,
5901                              reloc_howto_type *howto,
5902                              const Elf_Internal_Rela *relocation,
5903                              bfd_vma value, bfd *input_bfd,
5904                              asection *input_section, bfd_byte *contents,
5905                              bfd_boolean cross_mode_jump_p)
5906 {
5907   bfd_vma x;
5908   bfd_byte *location;
5909   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5910
5911   /* Figure out where the relocation is occurring.  */
5912   location = contents + relocation->r_offset;
5913
5914   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5915
5916   /* Obtain the current value.  */
5917   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5918
5919   /* Clear the field we are setting.  */
5920   x &= ~howto->dst_mask;
5921
5922   /* Set the field.  */
5923   x |= (value & howto->dst_mask);
5924
5925   /* If required, turn JAL into JALX.  */
5926   if (cross_mode_jump_p && jal_reloc_p (r_type))
5927     {
5928       bfd_boolean ok;
5929       bfd_vma opcode = x >> 26;
5930       bfd_vma jalx_opcode;
5931
5932       /* Check to see if the opcode is already JAL or JALX.  */
5933       if (r_type == R_MIPS16_26)
5934         {
5935           ok = ((opcode == 0x6) || (opcode == 0x7));
5936           jalx_opcode = 0x7;
5937         }
5938       else if (r_type == R_MICROMIPS_26_S1)
5939         {
5940           ok = ((opcode == 0x3d) || (opcode == 0x3c));
5941           jalx_opcode = 0x3c;
5942         }
5943       else
5944         {
5945           ok = ((opcode == 0x3) || (opcode == 0x1d));
5946           jalx_opcode = 0x1d;
5947         }
5948
5949       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
5950          convert J or JALS to JALX.  */
5951       if (!ok)
5952         {
5953           (*_bfd_error_handler)
5954             (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
5955              input_bfd,
5956              input_section,
5957              (unsigned long) relocation->r_offset);
5958           bfd_set_error (bfd_error_bad_value);
5959           return FALSE;
5960         }
5961
5962       /* Make this the JALX opcode.  */
5963       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
5964     }
5965
5966   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
5967      range.  */
5968   if (!info->relocatable
5969       && !cross_mode_jump_p
5970       && ((JAL_TO_BAL_P (input_bfd)
5971            && r_type == R_MIPS_26
5972            && (x >> 26) == 0x3)         /* jal addr */
5973           || (JALR_TO_BAL_P (input_bfd)
5974               && r_type == R_MIPS_JALR
5975               && x == 0x0320f809)       /* jalr t9 */
5976           || (JR_TO_B_P (input_bfd)
5977               && r_type == R_MIPS_JALR
5978               && x == 0x03200008)))     /* jr t9 */
5979     {
5980       bfd_vma addr;
5981       bfd_vma dest;
5982       bfd_signed_vma off;
5983
5984       addr = (input_section->output_section->vma
5985               + input_section->output_offset
5986               + relocation->r_offset
5987               + 4);
5988       if (r_type == R_MIPS_26)
5989         dest = (value << 2) | ((addr >> 28) << 28);
5990       else
5991         dest = value;
5992       off = dest - addr;
5993       if (off <= 0x1ffff && off >= -0x20000)
5994         {
5995           if (x == 0x03200008)  /* jr t9 */
5996             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
5997           else
5998             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
5999         }
6000     }
6001
6002   /* Put the value into the output.  */
6003   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
6004
6005   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
6006                                location);
6007
6008   return TRUE;
6009 }
6010 \f
6011 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6012    is the original relocation, which is now being transformed into a
6013    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6014    caller should store the result in place of the original addend.  */
6015
6016 static bfd_boolean
6017 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6018                                     struct bfd_link_info *info,
6019                                     const Elf_Internal_Rela *rel,
6020                                     struct mips_elf_link_hash_entry *h,
6021                                     asection *sec, bfd_vma symbol,
6022                                     bfd_vma *addendp, asection *input_section)
6023 {
6024   Elf_Internal_Rela outrel[3];
6025   asection *sreloc;
6026   bfd *dynobj;
6027   int r_type;
6028   long indx;
6029   bfd_boolean defined_p;
6030   struct mips_elf_link_hash_table *htab;
6031
6032   htab = mips_elf_hash_table (info);
6033   BFD_ASSERT (htab != NULL);
6034
6035   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6036   dynobj = elf_hash_table (info)->dynobj;
6037   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6038   BFD_ASSERT (sreloc != NULL);
6039   BFD_ASSERT (sreloc->contents != NULL);
6040   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6041               < sreloc->size);
6042
6043   outrel[0].r_offset =
6044     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6045   if (ABI_64_P (output_bfd))
6046     {
6047       outrel[1].r_offset =
6048         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6049       outrel[2].r_offset =
6050         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6051     }
6052
6053   if (outrel[0].r_offset == MINUS_ONE)
6054     /* The relocation field has been deleted.  */
6055     return TRUE;
6056
6057   if (outrel[0].r_offset == MINUS_TWO)
6058     {
6059       /* The relocation field has been converted into a relative value of
6060          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6061          the field to be fully relocated, so add in the symbol's value.  */
6062       *addendp += symbol;
6063       return TRUE;
6064     }
6065
6066   /* We must now calculate the dynamic symbol table index to use
6067      in the relocation.  */
6068   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6069     {
6070       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6071       indx = h->root.dynindx;
6072       if (SGI_COMPAT (output_bfd))
6073         defined_p = h->root.def_regular;
6074       else
6075         /* ??? glibc's ld.so just adds the final GOT entry to the
6076            relocation field.  It therefore treats relocs against
6077            defined symbols in the same way as relocs against
6078            undefined symbols.  */
6079         defined_p = FALSE;
6080     }
6081   else
6082     {
6083       if (sec != NULL && bfd_is_abs_section (sec))
6084         indx = 0;
6085       else if (sec == NULL || sec->owner == NULL)
6086         {
6087           bfd_set_error (bfd_error_bad_value);
6088           return FALSE;
6089         }
6090       else
6091         {
6092           indx = elf_section_data (sec->output_section)->dynindx;
6093           if (indx == 0)
6094             {
6095               asection *osec = htab->root.text_index_section;
6096               indx = elf_section_data (osec)->dynindx;
6097             }
6098           if (indx == 0)
6099             abort ();
6100         }
6101
6102       /* Instead of generating a relocation using the section
6103          symbol, we may as well make it a fully relative
6104          relocation.  We want to avoid generating relocations to
6105          local symbols because we used to generate them
6106          incorrectly, without adding the original symbol value,
6107          which is mandated by the ABI for section symbols.  In
6108          order to give dynamic loaders and applications time to
6109          phase out the incorrect use, we refrain from emitting
6110          section-relative relocations.  It's not like they're
6111          useful, after all.  This should be a bit more efficient
6112          as well.  */
6113       /* ??? Although this behavior is compatible with glibc's ld.so,
6114          the ABI says that relocations against STN_UNDEF should have
6115          a symbol value of 0.  Irix rld honors this, so relocations
6116          against STN_UNDEF have no effect.  */
6117       if (!SGI_COMPAT (output_bfd))
6118         indx = 0;
6119       defined_p = TRUE;
6120     }
6121
6122   /* If the relocation was previously an absolute relocation and
6123      this symbol will not be referred to by the relocation, we must
6124      adjust it by the value we give it in the dynamic symbol table.
6125      Otherwise leave the job up to the dynamic linker.  */
6126   if (defined_p && r_type != R_MIPS_REL32)
6127     *addendp += symbol;
6128
6129   if (htab->is_vxworks)
6130     /* VxWorks uses non-relative relocations for this.  */
6131     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6132   else
6133     /* The relocation is always an REL32 relocation because we don't
6134        know where the shared library will wind up at load-time.  */
6135     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6136                                    R_MIPS_REL32);
6137
6138   /* For strict adherence to the ABI specification, we should
6139      generate a R_MIPS_64 relocation record by itself before the
6140      _REL32/_64 record as well, such that the addend is read in as
6141      a 64-bit value (REL32 is a 32-bit relocation, after all).
6142      However, since none of the existing ELF64 MIPS dynamic
6143      loaders seems to care, we don't waste space with these
6144      artificial relocations.  If this turns out to not be true,
6145      mips_elf_allocate_dynamic_relocation() should be tweaked so
6146      as to make room for a pair of dynamic relocations per
6147      invocation if ABI_64_P, and here we should generate an
6148      additional relocation record with R_MIPS_64 by itself for a
6149      NULL symbol before this relocation record.  */
6150   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6151                                  ABI_64_P (output_bfd)
6152                                  ? R_MIPS_64
6153                                  : R_MIPS_NONE);
6154   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6155
6156   /* Adjust the output offset of the relocation to reference the
6157      correct location in the output file.  */
6158   outrel[0].r_offset += (input_section->output_section->vma
6159                          + input_section->output_offset);
6160   outrel[1].r_offset += (input_section->output_section->vma
6161                          + input_section->output_offset);
6162   outrel[2].r_offset += (input_section->output_section->vma
6163                          + input_section->output_offset);
6164
6165   /* Put the relocation back out.  We have to use the special
6166      relocation outputter in the 64-bit case since the 64-bit
6167      relocation format is non-standard.  */
6168   if (ABI_64_P (output_bfd))
6169     {
6170       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6171         (output_bfd, &outrel[0],
6172          (sreloc->contents
6173           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6174     }
6175   else if (htab->is_vxworks)
6176     {
6177       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6178       outrel[0].r_addend = *addendp;
6179       bfd_elf32_swap_reloca_out
6180         (output_bfd, &outrel[0],
6181          (sreloc->contents
6182           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6183     }
6184   else
6185     bfd_elf32_swap_reloc_out
6186       (output_bfd, &outrel[0],
6187        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6188
6189   /* We've now added another relocation.  */
6190   ++sreloc->reloc_count;
6191
6192   /* Make sure the output section is writable.  The dynamic linker
6193      will be writing to it.  */
6194   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6195     |= SHF_WRITE;
6196
6197   /* On IRIX5, make an entry of compact relocation info.  */
6198   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6199     {
6200       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6201       bfd_byte *cr;
6202
6203       if (scpt)
6204         {
6205           Elf32_crinfo cptrel;
6206
6207           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6208           cptrel.vaddr = (rel->r_offset
6209                           + input_section->output_section->vma
6210                           + input_section->output_offset);
6211           if (r_type == R_MIPS_REL32)
6212             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6213           else
6214             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6215           mips_elf_set_cr_dist2to (cptrel, 0);
6216           cptrel.konst = *addendp;
6217
6218           cr = (scpt->contents
6219                 + sizeof (Elf32_External_compact_rel));
6220           mips_elf_set_cr_relvaddr (cptrel, 0);
6221           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6222                                      ((Elf32_External_crinfo *) cr
6223                                       + scpt->reloc_count));
6224           ++scpt->reloc_count;
6225         }
6226     }
6227
6228   /* If we've written this relocation for a readonly section,
6229      we need to set DF_TEXTREL again, so that we do not delete the
6230      DT_TEXTREL tag.  */
6231   if (MIPS_ELF_READONLY_SECTION (input_section))
6232     info->flags |= DF_TEXTREL;
6233
6234   return TRUE;
6235 }
6236 \f
6237 /* Return the MACH for a MIPS e_flags value.  */
6238
6239 unsigned long
6240 _bfd_elf_mips_mach (flagword flags)
6241 {
6242   switch (flags & EF_MIPS_MACH)
6243     {
6244     case E_MIPS_MACH_3900:
6245       return bfd_mach_mips3900;
6246
6247     case E_MIPS_MACH_4010:
6248       return bfd_mach_mips4010;
6249
6250     case E_MIPS_MACH_4100:
6251       return bfd_mach_mips4100;
6252
6253     case E_MIPS_MACH_4111:
6254       return bfd_mach_mips4111;
6255
6256     case E_MIPS_MACH_4120:
6257       return bfd_mach_mips4120;
6258
6259     case E_MIPS_MACH_4650:
6260       return bfd_mach_mips4650;
6261
6262     case E_MIPS_MACH_5400:
6263       return bfd_mach_mips5400;
6264
6265     case E_MIPS_MACH_5500:
6266       return bfd_mach_mips5500;
6267
6268     case E_MIPS_MACH_9000:
6269       return bfd_mach_mips9000;
6270
6271     case E_MIPS_MACH_SB1:
6272       return bfd_mach_mips_sb1;
6273
6274     case E_MIPS_MACH_LS2E:
6275       return bfd_mach_mips_loongson_2e;
6276
6277     case E_MIPS_MACH_LS2F:
6278       return bfd_mach_mips_loongson_2f;
6279
6280     case E_MIPS_MACH_LS3A:
6281       return bfd_mach_mips_loongson_3a;
6282
6283     case E_MIPS_MACH_OCTEON2:
6284       return bfd_mach_mips_octeon2;
6285
6286     case E_MIPS_MACH_OCTEON:
6287       return bfd_mach_mips_octeon;
6288
6289     case E_MIPS_MACH_XLR:
6290       return bfd_mach_mips_xlr;
6291
6292     default:
6293       switch (flags & EF_MIPS_ARCH)
6294         {
6295         default:
6296         case E_MIPS_ARCH_1:
6297           return bfd_mach_mips3000;
6298
6299         case E_MIPS_ARCH_2:
6300           return bfd_mach_mips6000;
6301
6302         case E_MIPS_ARCH_3:
6303           return bfd_mach_mips4000;
6304
6305         case E_MIPS_ARCH_4:
6306           return bfd_mach_mips8000;
6307
6308         case E_MIPS_ARCH_5:
6309           return bfd_mach_mips5;
6310
6311         case E_MIPS_ARCH_32:
6312           return bfd_mach_mipsisa32;
6313
6314         case E_MIPS_ARCH_64:
6315           return bfd_mach_mipsisa64;
6316
6317         case E_MIPS_ARCH_32R2:
6318           return bfd_mach_mipsisa32r2;
6319
6320         case E_MIPS_ARCH_64R2:
6321           return bfd_mach_mipsisa64r2;
6322         }
6323     }
6324
6325   return 0;
6326 }
6327
6328 /* Return printable name for ABI.  */
6329
6330 static INLINE char *
6331 elf_mips_abi_name (bfd *abfd)
6332 {
6333   flagword flags;
6334
6335   flags = elf_elfheader (abfd)->e_flags;
6336   switch (flags & EF_MIPS_ABI)
6337     {
6338     case 0:
6339       if (ABI_N32_P (abfd))
6340         return "N32";
6341       else if (ABI_64_P (abfd))
6342         return "64";
6343       else
6344         return "none";
6345     case E_MIPS_ABI_O32:
6346       return "O32";
6347     case E_MIPS_ABI_O64:
6348       return "O64";
6349     case E_MIPS_ABI_EABI32:
6350       return "EABI32";
6351     case E_MIPS_ABI_EABI64:
6352       return "EABI64";
6353     default:
6354       return "unknown abi";
6355     }
6356 }
6357 \f
6358 /* MIPS ELF uses two common sections.  One is the usual one, and the
6359    other is for small objects.  All the small objects are kept
6360    together, and then referenced via the gp pointer, which yields
6361    faster assembler code.  This is what we use for the small common
6362    section.  This approach is copied from ecoff.c.  */
6363 static asection mips_elf_scom_section;
6364 static asymbol mips_elf_scom_symbol;
6365 static asymbol *mips_elf_scom_symbol_ptr;
6366
6367 /* MIPS ELF also uses an acommon section, which represents an
6368    allocated common symbol which may be overridden by a
6369    definition in a shared library.  */
6370 static asection mips_elf_acom_section;
6371 static asymbol mips_elf_acom_symbol;
6372 static asymbol *mips_elf_acom_symbol_ptr;
6373
6374 /* This is used for both the 32-bit and the 64-bit ABI.  */
6375
6376 void
6377 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6378 {
6379   elf_symbol_type *elfsym;
6380
6381   /* Handle the special MIPS section numbers that a symbol may use.  */
6382   elfsym = (elf_symbol_type *) asym;
6383   switch (elfsym->internal_elf_sym.st_shndx)
6384     {
6385     case SHN_MIPS_ACOMMON:
6386       /* This section is used in a dynamically linked executable file.
6387          It is an allocated common section.  The dynamic linker can
6388          either resolve these symbols to something in a shared
6389          library, or it can just leave them here.  For our purposes,
6390          we can consider these symbols to be in a new section.  */
6391       if (mips_elf_acom_section.name == NULL)
6392         {
6393           /* Initialize the acommon section.  */
6394           mips_elf_acom_section.name = ".acommon";
6395           mips_elf_acom_section.flags = SEC_ALLOC;
6396           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6397           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6398           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6399           mips_elf_acom_symbol.name = ".acommon";
6400           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6401           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6402           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6403         }
6404       asym->section = &mips_elf_acom_section;
6405       break;
6406
6407     case SHN_COMMON:
6408       /* Common symbols less than the GP size are automatically
6409          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6410       if (asym->value > elf_gp_size (abfd)
6411           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6412           || IRIX_COMPAT (abfd) == ict_irix6)
6413         break;
6414       /* Fall through.  */
6415     case SHN_MIPS_SCOMMON:
6416       if (mips_elf_scom_section.name == NULL)
6417         {
6418           /* Initialize the small common section.  */
6419           mips_elf_scom_section.name = ".scommon";
6420           mips_elf_scom_section.flags = SEC_IS_COMMON;
6421           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6422           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6423           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6424           mips_elf_scom_symbol.name = ".scommon";
6425           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6426           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6427           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6428         }
6429       asym->section = &mips_elf_scom_section;
6430       asym->value = elfsym->internal_elf_sym.st_size;
6431       break;
6432
6433     case SHN_MIPS_SUNDEFINED:
6434       asym->section = bfd_und_section_ptr;
6435       break;
6436
6437     case SHN_MIPS_TEXT:
6438       {
6439         asection *section = bfd_get_section_by_name (abfd, ".text");
6440
6441         if (section != NULL)
6442           {
6443             asym->section = section;
6444             /* MIPS_TEXT is a bit special, the address is not an offset
6445                to the base of the .text section.  So substract the section
6446                base address to make it an offset.  */
6447             asym->value -= section->vma;
6448           }
6449       }
6450       break;
6451
6452     case SHN_MIPS_DATA:
6453       {
6454         asection *section = bfd_get_section_by_name (abfd, ".data");
6455
6456         if (section != NULL)
6457           {
6458             asym->section = section;
6459             /* MIPS_DATA is a bit special, the address is not an offset
6460                to the base of the .data section.  So substract the section
6461                base address to make it an offset.  */
6462             asym->value -= section->vma;
6463           }
6464       }
6465       break;
6466     }
6467
6468   /* If this is an odd-valued function symbol, assume it's a MIPS16
6469      or microMIPS one.  */
6470   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6471       && (asym->value & 1) != 0)
6472     {
6473       asym->value--;
6474       if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
6475         elfsym->internal_elf_sym.st_other
6476           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6477       else
6478         elfsym->internal_elf_sym.st_other
6479           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6480     }
6481 }
6482 \f
6483 /* Implement elf_backend_eh_frame_address_size.  This differs from
6484    the default in the way it handles EABI64.
6485
6486    EABI64 was originally specified as an LP64 ABI, and that is what
6487    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6488    historically accepted the combination of -mabi=eabi and -mlong32,
6489    and this ILP32 variation has become semi-official over time.
6490    Both forms use elf32 and have pointer-sized FDE addresses.
6491
6492    If an EABI object was generated by GCC 4.0 or above, it will have
6493    an empty .gcc_compiled_longXX section, where XX is the size of longs
6494    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6495    have no special marking to distinguish them from LP64 objects.
6496
6497    We don't want users of the official LP64 ABI to be punished for the
6498    existence of the ILP32 variant, but at the same time, we don't want
6499    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6500    We therefore take the following approach:
6501
6502       - If ABFD contains a .gcc_compiled_longXX section, use it to
6503         determine the pointer size.
6504
6505       - Otherwise check the type of the first relocation.  Assume that
6506         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6507
6508       - Otherwise punt.
6509
6510    The second check is enough to detect LP64 objects generated by pre-4.0
6511    compilers because, in the kind of output generated by those compilers,
6512    the first relocation will be associated with either a CIE personality
6513    routine or an FDE start address.  Furthermore, the compilers never
6514    used a special (non-pointer) encoding for this ABI.
6515
6516    Checking the relocation type should also be safe because there is no
6517    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6518    did so.  */
6519
6520 unsigned int
6521 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6522 {
6523   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6524     return 8;
6525   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6526     {
6527       bfd_boolean long32_p, long64_p;
6528
6529       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6530       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6531       if (long32_p && long64_p)
6532         return 0;
6533       if (long32_p)
6534         return 4;
6535       if (long64_p)
6536         return 8;
6537
6538       if (sec->reloc_count > 0
6539           && elf_section_data (sec)->relocs != NULL
6540           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6541               == R_MIPS_64))
6542         return 8;
6543
6544       return 0;
6545     }
6546   return 4;
6547 }
6548 \f
6549 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6550    relocations against two unnamed section symbols to resolve to the
6551    same address.  For example, if we have code like:
6552
6553         lw      $4,%got_disp(.data)($gp)
6554         lw      $25,%got_disp(.text)($gp)
6555         jalr    $25
6556
6557    then the linker will resolve both relocations to .data and the program
6558    will jump there rather than to .text.
6559
6560    We can work around this problem by giving names to local section symbols.
6561    This is also what the MIPSpro tools do.  */
6562
6563 bfd_boolean
6564 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6565 {
6566   return SGI_COMPAT (abfd);
6567 }
6568 \f
6569 /* Work over a section just before writing it out.  This routine is
6570    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6571    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6572    a better way.  */
6573
6574 bfd_boolean
6575 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6576 {
6577   if (hdr->sh_type == SHT_MIPS_REGINFO
6578       && hdr->sh_size > 0)
6579     {
6580       bfd_byte buf[4];
6581
6582       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6583       BFD_ASSERT (hdr->contents == NULL);
6584
6585       if (bfd_seek (abfd,
6586                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6587                     SEEK_SET) != 0)
6588         return FALSE;
6589       H_PUT_32 (abfd, elf_gp (abfd), buf);
6590       if (bfd_bwrite (buf, 4, abfd) != 4)
6591         return FALSE;
6592     }
6593
6594   if (hdr->sh_type == SHT_MIPS_OPTIONS
6595       && hdr->bfd_section != NULL
6596       && mips_elf_section_data (hdr->bfd_section) != NULL
6597       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6598     {
6599       bfd_byte *contents, *l, *lend;
6600
6601       /* We stored the section contents in the tdata field in the
6602          set_section_contents routine.  We save the section contents
6603          so that we don't have to read them again.
6604          At this point we know that elf_gp is set, so we can look
6605          through the section contents to see if there is an
6606          ODK_REGINFO structure.  */
6607
6608       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6609       l = contents;
6610       lend = contents + hdr->sh_size;
6611       while (l + sizeof (Elf_External_Options) <= lend)
6612         {
6613           Elf_Internal_Options intopt;
6614
6615           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6616                                         &intopt);
6617           if (intopt.size < sizeof (Elf_External_Options))
6618             {
6619               (*_bfd_error_handler)
6620                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6621                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6622               break;
6623             }
6624           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6625             {
6626               bfd_byte buf[8];
6627
6628               if (bfd_seek (abfd,
6629                             (hdr->sh_offset
6630                              + (l - contents)
6631                              + sizeof (Elf_External_Options)
6632                              + (sizeof (Elf64_External_RegInfo) - 8)),
6633                              SEEK_SET) != 0)
6634                 return FALSE;
6635               H_PUT_64 (abfd, elf_gp (abfd), buf);
6636               if (bfd_bwrite (buf, 8, abfd) != 8)
6637                 return FALSE;
6638             }
6639           else if (intopt.kind == ODK_REGINFO)
6640             {
6641               bfd_byte buf[4];
6642
6643               if (bfd_seek (abfd,
6644                             (hdr->sh_offset
6645                              + (l - contents)
6646                              + sizeof (Elf_External_Options)
6647                              + (sizeof (Elf32_External_RegInfo) - 4)),
6648                             SEEK_SET) != 0)
6649                 return FALSE;
6650               H_PUT_32 (abfd, elf_gp (abfd), buf);
6651               if (bfd_bwrite (buf, 4, abfd) != 4)
6652                 return FALSE;
6653             }
6654           l += intopt.size;
6655         }
6656     }
6657
6658   if (hdr->bfd_section != NULL)
6659     {
6660       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6661
6662       /* .sbss is not handled specially here because the GNU/Linux
6663          prelinker can convert .sbss from NOBITS to PROGBITS and
6664          changing it back to NOBITS breaks the binary.  The entry in
6665          _bfd_mips_elf_special_sections will ensure the correct flags
6666          are set on .sbss if BFD creates it without reading it from an
6667          input file, and without special handling here the flags set
6668          on it in an input file will be followed.  */
6669       if (strcmp (name, ".sdata") == 0
6670           || strcmp (name, ".lit8") == 0
6671           || strcmp (name, ".lit4") == 0)
6672         {
6673           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6674           hdr->sh_type = SHT_PROGBITS;
6675         }
6676       else if (strcmp (name, ".srdata") == 0)
6677         {
6678           hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6679           hdr->sh_type = SHT_PROGBITS;
6680         }
6681       else if (strcmp (name, ".compact_rel") == 0)
6682         {
6683           hdr->sh_flags = 0;
6684           hdr->sh_type = SHT_PROGBITS;
6685         }
6686       else if (strcmp (name, ".rtproc") == 0)
6687         {
6688           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6689             {
6690               unsigned int adjust;
6691
6692               adjust = hdr->sh_size % hdr->sh_addralign;
6693               if (adjust != 0)
6694                 hdr->sh_size += hdr->sh_addralign - adjust;
6695             }
6696         }
6697     }
6698
6699   return TRUE;
6700 }
6701
6702 /* Handle a MIPS specific section when reading an object file.  This
6703    is called when elfcode.h finds a section with an unknown type.
6704    This routine supports both the 32-bit and 64-bit ELF ABI.
6705
6706    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6707    how to.  */
6708
6709 bfd_boolean
6710 _bfd_mips_elf_section_from_shdr (bfd *abfd,
6711                                  Elf_Internal_Shdr *hdr,
6712                                  const char *name,
6713                                  int shindex)
6714 {
6715   flagword flags = 0;
6716
6717   /* There ought to be a place to keep ELF backend specific flags, but
6718      at the moment there isn't one.  We just keep track of the
6719      sections by their name, instead.  Fortunately, the ABI gives
6720      suggested names for all the MIPS specific sections, so we will
6721      probably get away with this.  */
6722   switch (hdr->sh_type)
6723     {
6724     case SHT_MIPS_LIBLIST:
6725       if (strcmp (name, ".liblist") != 0)
6726         return FALSE;
6727       break;
6728     case SHT_MIPS_MSYM:
6729       if (strcmp (name, ".msym") != 0)
6730         return FALSE;
6731       break;
6732     case SHT_MIPS_CONFLICT:
6733       if (strcmp (name, ".conflict") != 0)
6734         return FALSE;
6735       break;
6736     case SHT_MIPS_GPTAB:
6737       if (! CONST_STRNEQ (name, ".gptab."))
6738         return FALSE;
6739       break;
6740     case SHT_MIPS_UCODE:
6741       if (strcmp (name, ".ucode") != 0)
6742         return FALSE;
6743       break;
6744     case SHT_MIPS_DEBUG:
6745       if (strcmp (name, ".mdebug") != 0)
6746         return FALSE;
6747       flags = SEC_DEBUGGING;
6748       break;
6749     case SHT_MIPS_REGINFO:
6750       if (strcmp (name, ".reginfo") != 0
6751           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
6752         return FALSE;
6753       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6754       break;
6755     case SHT_MIPS_IFACE:
6756       if (strcmp (name, ".MIPS.interfaces") != 0)
6757         return FALSE;
6758       break;
6759     case SHT_MIPS_CONTENT:
6760       if (! CONST_STRNEQ (name, ".MIPS.content"))
6761         return FALSE;
6762       break;
6763     case SHT_MIPS_OPTIONS:
6764       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6765         return FALSE;
6766       break;
6767     case SHT_MIPS_DWARF:
6768       if (! CONST_STRNEQ (name, ".debug_")
6769           && ! CONST_STRNEQ (name, ".zdebug_"))
6770         return FALSE;
6771       break;
6772     case SHT_MIPS_SYMBOL_LIB:
6773       if (strcmp (name, ".MIPS.symlib") != 0)
6774         return FALSE;
6775       break;
6776     case SHT_MIPS_EVENTS:
6777       if (! CONST_STRNEQ (name, ".MIPS.events")
6778           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
6779         return FALSE;
6780       break;
6781     default:
6782       break;
6783     }
6784
6785   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
6786     return FALSE;
6787
6788   if (flags)
6789     {
6790       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6791                                    (bfd_get_section_flags (abfd,
6792                                                            hdr->bfd_section)
6793                                     | flags)))
6794         return FALSE;
6795     }
6796
6797   /* FIXME: We should record sh_info for a .gptab section.  */
6798
6799   /* For a .reginfo section, set the gp value in the tdata information
6800      from the contents of this section.  We need the gp value while
6801      processing relocs, so we just get it now.  The .reginfo section
6802      is not used in the 64-bit MIPS ELF ABI.  */
6803   if (hdr->sh_type == SHT_MIPS_REGINFO)
6804     {
6805       Elf32_External_RegInfo ext;
6806       Elf32_RegInfo s;
6807
6808       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6809                                       &ext, 0, sizeof ext))
6810         return FALSE;
6811       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6812       elf_gp (abfd) = s.ri_gp_value;
6813     }
6814
6815   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6816      set the gp value based on what we find.  We may see both
6817      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6818      they should agree.  */
6819   if (hdr->sh_type == SHT_MIPS_OPTIONS)
6820     {
6821       bfd_byte *contents, *l, *lend;
6822
6823       contents = bfd_malloc (hdr->sh_size);
6824       if (contents == NULL)
6825         return FALSE;
6826       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
6827                                       0, hdr->sh_size))
6828         {
6829           free (contents);
6830           return FALSE;
6831         }
6832       l = contents;
6833       lend = contents + hdr->sh_size;
6834       while (l + sizeof (Elf_External_Options) <= lend)
6835         {
6836           Elf_Internal_Options intopt;
6837
6838           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6839                                         &intopt);
6840           if (intopt.size < sizeof (Elf_External_Options))
6841             {
6842               (*_bfd_error_handler)
6843                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6844                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6845               break;
6846             }
6847           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6848             {
6849               Elf64_Internal_RegInfo intreg;
6850
6851               bfd_mips_elf64_swap_reginfo_in
6852                 (abfd,
6853                  ((Elf64_External_RegInfo *)
6854                   (l + sizeof (Elf_External_Options))),
6855                  &intreg);
6856               elf_gp (abfd) = intreg.ri_gp_value;
6857             }
6858           else if (intopt.kind == ODK_REGINFO)
6859             {
6860               Elf32_RegInfo intreg;
6861
6862               bfd_mips_elf32_swap_reginfo_in
6863                 (abfd,
6864                  ((Elf32_External_RegInfo *)
6865                   (l + sizeof (Elf_External_Options))),
6866                  &intreg);
6867               elf_gp (abfd) = intreg.ri_gp_value;
6868             }
6869           l += intopt.size;
6870         }
6871       free (contents);
6872     }
6873
6874   return TRUE;
6875 }
6876
6877 /* Set the correct type for a MIPS ELF section.  We do this by the
6878    section name, which is a hack, but ought to work.  This routine is
6879    used by both the 32-bit and the 64-bit ABI.  */
6880
6881 bfd_boolean
6882 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
6883 {
6884   const char *name = bfd_get_section_name (abfd, sec);
6885
6886   if (strcmp (name, ".liblist") == 0)
6887     {
6888       hdr->sh_type = SHT_MIPS_LIBLIST;
6889       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
6890       /* The sh_link field is set in final_write_processing.  */
6891     }
6892   else if (strcmp (name, ".conflict") == 0)
6893     hdr->sh_type = SHT_MIPS_CONFLICT;
6894   else if (CONST_STRNEQ (name, ".gptab."))
6895     {
6896       hdr->sh_type = SHT_MIPS_GPTAB;
6897       hdr->sh_entsize = sizeof (Elf32_External_gptab);
6898       /* The sh_info field is set in final_write_processing.  */
6899     }
6900   else if (strcmp (name, ".ucode") == 0)
6901     hdr->sh_type = SHT_MIPS_UCODE;
6902   else if (strcmp (name, ".mdebug") == 0)
6903     {
6904       hdr->sh_type = SHT_MIPS_DEBUG;
6905       /* In a shared object on IRIX 5.3, the .mdebug section has an
6906          entsize of 0.  FIXME: Does this matter?  */
6907       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6908         hdr->sh_entsize = 0;
6909       else
6910         hdr->sh_entsize = 1;
6911     }
6912   else if (strcmp (name, ".reginfo") == 0)
6913     {
6914       hdr->sh_type = SHT_MIPS_REGINFO;
6915       /* In a shared object on IRIX 5.3, the .reginfo section has an
6916          entsize of 0x18.  FIXME: Does this matter?  */
6917       if (SGI_COMPAT (abfd))
6918         {
6919           if ((abfd->flags & DYNAMIC) != 0)
6920             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6921           else
6922             hdr->sh_entsize = 1;
6923         }
6924       else
6925         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6926     }
6927   else if (SGI_COMPAT (abfd)
6928            && (strcmp (name, ".hash") == 0
6929                || strcmp (name, ".dynamic") == 0
6930                || strcmp (name, ".dynstr") == 0))
6931     {
6932       if (SGI_COMPAT (abfd))
6933         hdr->sh_entsize = 0;
6934 #if 0
6935       /* This isn't how the IRIX6 linker behaves.  */
6936       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6937 #endif
6938     }
6939   else if (strcmp (name, ".got") == 0
6940            || strcmp (name, ".srdata") == 0
6941            || strcmp (name, ".sdata") == 0
6942            || strcmp (name, ".sbss") == 0
6943            || strcmp (name, ".lit4") == 0
6944            || strcmp (name, ".lit8") == 0)
6945     hdr->sh_flags |= SHF_MIPS_GPREL;
6946   else if (strcmp (name, ".MIPS.interfaces") == 0)
6947     {
6948       hdr->sh_type = SHT_MIPS_IFACE;
6949       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6950     }
6951   else if (CONST_STRNEQ (name, ".MIPS.content"))
6952     {
6953       hdr->sh_type = SHT_MIPS_CONTENT;
6954       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6955       /* The sh_info field is set in final_write_processing.  */
6956     }
6957   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6958     {
6959       hdr->sh_type = SHT_MIPS_OPTIONS;
6960       hdr->sh_entsize = 1;
6961       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6962     }
6963   else if (CONST_STRNEQ (name, ".debug_")
6964            || CONST_STRNEQ (name, ".zdebug_"))
6965     {
6966       hdr->sh_type = SHT_MIPS_DWARF;
6967
6968       /* Irix facilities such as libexc expect a single .debug_frame
6969          per executable, the system ones have NOSTRIP set and the linker
6970          doesn't merge sections with different flags so ...  */
6971       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
6972         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6973     }
6974   else if (strcmp (name, ".MIPS.symlib") == 0)
6975     {
6976       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
6977       /* The sh_link and sh_info fields are set in
6978          final_write_processing.  */
6979     }
6980   else if (CONST_STRNEQ (name, ".MIPS.events")
6981            || CONST_STRNEQ (name, ".MIPS.post_rel"))
6982     {
6983       hdr->sh_type = SHT_MIPS_EVENTS;
6984       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6985       /* The sh_link field is set in final_write_processing.  */
6986     }
6987   else if (strcmp (name, ".msym") == 0)
6988     {
6989       hdr->sh_type = SHT_MIPS_MSYM;
6990       hdr->sh_flags |= SHF_ALLOC;
6991       hdr->sh_entsize = 8;
6992     }
6993
6994   /* The generic elf_fake_sections will set up REL_HDR using the default
6995    kind of relocations.  We used to set up a second header for the
6996    non-default kind of relocations here, but only NewABI would use
6997    these, and the IRIX ld doesn't like resulting empty RELA sections.
6998    Thus we create those header only on demand now.  */
6999
7000   return TRUE;
7001 }
7002
7003 /* Given a BFD section, try to locate the corresponding ELF section
7004    index.  This is used by both the 32-bit and the 64-bit ABI.
7005    Actually, it's not clear to me that the 64-bit ABI supports these,
7006    but for non-PIC objects we will certainly want support for at least
7007    the .scommon section.  */
7008
7009 bfd_boolean
7010 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7011                                         asection *sec, int *retval)
7012 {
7013   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7014     {
7015       *retval = SHN_MIPS_SCOMMON;
7016       return TRUE;
7017     }
7018   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7019     {
7020       *retval = SHN_MIPS_ACOMMON;
7021       return TRUE;
7022     }
7023   return FALSE;
7024 }
7025 \f
7026 /* Hook called by the linker routine which adds symbols from an object
7027    file.  We must handle the special MIPS section numbers here.  */
7028
7029 bfd_boolean
7030 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7031                                Elf_Internal_Sym *sym, const char **namep,
7032                                flagword *flagsp ATTRIBUTE_UNUSED,
7033                                asection **secp, bfd_vma *valp)
7034 {
7035   if (SGI_COMPAT (abfd)
7036       && (abfd->flags & DYNAMIC) != 0
7037       && strcmp (*namep, "_rld_new_interface") == 0)
7038     {
7039       /* Skip IRIX5 rld entry name.  */
7040       *namep = NULL;
7041       return TRUE;
7042     }
7043
7044   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7045      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7046      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7047      a magic symbol resolved by the linker, we ignore this bogus definition
7048      of _gp_disp.  New ABI objects do not suffer from this problem so this
7049      is not done for them. */
7050   if (!NEWABI_P(abfd)
7051       && (sym->st_shndx == SHN_ABS)
7052       && (strcmp (*namep, "_gp_disp") == 0))
7053     {
7054       *namep = NULL;
7055       return TRUE;
7056     }
7057
7058   switch (sym->st_shndx)
7059     {
7060     case SHN_COMMON:
7061       /* Common symbols less than the GP size are automatically
7062          treated as SHN_MIPS_SCOMMON symbols.  */
7063       if (sym->st_size > elf_gp_size (abfd)
7064           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7065           || IRIX_COMPAT (abfd) == ict_irix6)
7066         break;
7067       /* Fall through.  */
7068     case SHN_MIPS_SCOMMON:
7069       *secp = bfd_make_section_old_way (abfd, ".scommon");
7070       (*secp)->flags |= SEC_IS_COMMON;
7071       *valp = sym->st_size;
7072       break;
7073
7074     case SHN_MIPS_TEXT:
7075       /* This section is used in a shared object.  */
7076       if (elf_tdata (abfd)->elf_text_section == NULL)
7077         {
7078           asymbol *elf_text_symbol;
7079           asection *elf_text_section;
7080           bfd_size_type amt = sizeof (asection);
7081
7082           elf_text_section = bfd_zalloc (abfd, amt);
7083           if (elf_text_section == NULL)
7084             return FALSE;
7085
7086           amt = sizeof (asymbol);
7087           elf_text_symbol = bfd_zalloc (abfd, amt);
7088           if (elf_text_symbol == NULL)
7089             return FALSE;
7090
7091           /* Initialize the section.  */
7092
7093           elf_tdata (abfd)->elf_text_section = elf_text_section;
7094           elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7095
7096           elf_text_section->symbol = elf_text_symbol;
7097           elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
7098
7099           elf_text_section->name = ".text";
7100           elf_text_section->flags = SEC_NO_FLAGS;
7101           elf_text_section->output_section = NULL;
7102           elf_text_section->owner = abfd;
7103           elf_text_symbol->name = ".text";
7104           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7105           elf_text_symbol->section = elf_text_section;
7106         }
7107       /* This code used to do *secp = bfd_und_section_ptr if
7108          info->shared.  I don't know why, and that doesn't make sense,
7109          so I took it out.  */
7110       *secp = elf_tdata (abfd)->elf_text_section;
7111       break;
7112
7113     case SHN_MIPS_ACOMMON:
7114       /* Fall through. XXX Can we treat this as allocated data?  */
7115     case SHN_MIPS_DATA:
7116       /* This section is used in a shared object.  */
7117       if (elf_tdata (abfd)->elf_data_section == NULL)
7118         {
7119           asymbol *elf_data_symbol;
7120           asection *elf_data_section;
7121           bfd_size_type amt = sizeof (asection);
7122
7123           elf_data_section = bfd_zalloc (abfd, amt);
7124           if (elf_data_section == NULL)
7125             return FALSE;
7126
7127           amt = sizeof (asymbol);
7128           elf_data_symbol = bfd_zalloc (abfd, amt);
7129           if (elf_data_symbol == NULL)
7130             return FALSE;
7131
7132           /* Initialize the section.  */
7133
7134           elf_tdata (abfd)->elf_data_section = elf_data_section;
7135           elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7136
7137           elf_data_section->symbol = elf_data_symbol;
7138           elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
7139
7140           elf_data_section->name = ".data";
7141           elf_data_section->flags = SEC_NO_FLAGS;
7142           elf_data_section->output_section = NULL;
7143           elf_data_section->owner = abfd;
7144           elf_data_symbol->name = ".data";
7145           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7146           elf_data_symbol->section = elf_data_section;
7147         }
7148       /* This code used to do *secp = bfd_und_section_ptr if
7149          info->shared.  I don't know why, and that doesn't make sense,
7150          so I took it out.  */
7151       *secp = elf_tdata (abfd)->elf_data_section;
7152       break;
7153
7154     case SHN_MIPS_SUNDEFINED:
7155       *secp = bfd_und_section_ptr;
7156       break;
7157     }
7158
7159   if (SGI_COMPAT (abfd)
7160       && ! info->shared
7161       && info->output_bfd->xvec == abfd->xvec
7162       && strcmp (*namep, "__rld_obj_head") == 0)
7163     {
7164       struct elf_link_hash_entry *h;
7165       struct bfd_link_hash_entry *bh;
7166
7167       /* Mark __rld_obj_head as dynamic.  */
7168       bh = NULL;
7169       if (! (_bfd_generic_link_add_one_symbol
7170              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7171               get_elf_backend_data (abfd)->collect, &bh)))
7172         return FALSE;
7173
7174       h = (struct elf_link_hash_entry *) bh;
7175       h->non_elf = 0;
7176       h->def_regular = 1;
7177       h->type = STT_OBJECT;
7178
7179       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7180         return FALSE;
7181
7182       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7183       mips_elf_hash_table (info)->rld_symbol = h;
7184     }
7185
7186   /* If this is a mips16 text symbol, add 1 to the value to make it
7187      odd.  This will cause something like .word SYM to come up with
7188      the right value when it is loaded into the PC.  */
7189   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7190     ++*valp;
7191
7192   return TRUE;
7193 }
7194
7195 /* This hook function is called before the linker writes out a global
7196    symbol.  We mark symbols as small common if appropriate.  This is
7197    also where we undo the increment of the value for a mips16 symbol.  */
7198
7199 int
7200 _bfd_mips_elf_link_output_symbol_hook
7201   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7202    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7203    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7204 {
7205   /* If we see a common symbol, which implies a relocatable link, then
7206      if a symbol was small common in an input file, mark it as small
7207      common in the output file.  */
7208   if (sym->st_shndx == SHN_COMMON
7209       && strcmp (input_sec->name, ".scommon") == 0)
7210     sym->st_shndx = SHN_MIPS_SCOMMON;
7211
7212   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7213     sym->st_value &= ~1;
7214
7215   return 1;
7216 }
7217 \f
7218 /* Functions for the dynamic linker.  */
7219
7220 /* Create dynamic sections when linking against a dynamic object.  */
7221
7222 bfd_boolean
7223 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7224 {
7225   struct elf_link_hash_entry *h;
7226   struct bfd_link_hash_entry *bh;
7227   flagword flags;
7228   register asection *s;
7229   const char * const *namep;
7230   struct mips_elf_link_hash_table *htab;
7231
7232   htab = mips_elf_hash_table (info);
7233   BFD_ASSERT (htab != NULL);
7234
7235   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7236            | SEC_LINKER_CREATED | SEC_READONLY);
7237
7238   /* The psABI requires a read-only .dynamic section, but the VxWorks
7239      EABI doesn't.  */
7240   if (!htab->is_vxworks)
7241     {
7242       s = bfd_get_linker_section (abfd, ".dynamic");
7243       if (s != NULL)
7244         {
7245           if (! bfd_set_section_flags (abfd, s, flags))
7246             return FALSE;
7247         }
7248     }
7249
7250   /* We need to create .got section.  */
7251   if (!mips_elf_create_got_section (abfd, info))
7252     return FALSE;
7253
7254   if (! mips_elf_rel_dyn_section (info, TRUE))
7255     return FALSE;
7256
7257   /* Create .stub section.  */
7258   s = bfd_make_section_anyway_with_flags (abfd,
7259                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7260                                           flags | SEC_CODE);
7261   if (s == NULL
7262       || ! bfd_set_section_alignment (abfd, s,
7263                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7264     return FALSE;
7265   htab->sstubs = s;
7266
7267   if ((IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none)
7268       && !info->shared
7269       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7270     {
7271       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7272                                               flags &~ (flagword) SEC_READONLY);
7273       if (s == NULL
7274           || ! bfd_set_section_alignment (abfd, s,
7275                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7276         return FALSE;
7277     }
7278
7279   /* On IRIX5, we adjust add some additional symbols and change the
7280      alignments of several sections.  There is no ABI documentation
7281      indicating that this is necessary on IRIX6, nor any evidence that
7282      the linker takes such action.  */
7283   if (IRIX_COMPAT (abfd) == ict_irix5)
7284     {
7285       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7286         {
7287           bh = NULL;
7288           if (! (_bfd_generic_link_add_one_symbol
7289                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7290                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7291             return FALSE;
7292
7293           h = (struct elf_link_hash_entry *) bh;
7294           h->non_elf = 0;
7295           h->def_regular = 1;
7296           h->type = STT_SECTION;
7297
7298           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7299             return FALSE;
7300         }
7301
7302       /* We need to create a .compact_rel section.  */
7303       if (SGI_COMPAT (abfd))
7304         {
7305           if (!mips_elf_create_compact_rel_section (abfd, info))
7306             return FALSE;
7307         }
7308
7309       /* Change alignments of some sections.  */
7310       s = bfd_get_linker_section (abfd, ".hash");
7311       if (s != NULL)
7312         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7313       s = bfd_get_linker_section (abfd, ".dynsym");
7314       if (s != NULL)
7315         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7316       s = bfd_get_linker_section (abfd, ".dynstr");
7317       if (s != NULL)
7318         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7319       /* ??? */
7320       s = bfd_get_section_by_name (abfd, ".reginfo");
7321       if (s != NULL)
7322         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7323       s = bfd_get_linker_section (abfd, ".dynamic");
7324       if (s != NULL)
7325         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7326     }
7327
7328   if (!info->shared)
7329     {
7330       const char *name;
7331
7332       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7333       bh = NULL;
7334       if (!(_bfd_generic_link_add_one_symbol
7335             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7336              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7337         return FALSE;
7338
7339       h = (struct elf_link_hash_entry *) bh;
7340       h->non_elf = 0;
7341       h->def_regular = 1;
7342       h->type = STT_SECTION;
7343
7344       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7345         return FALSE;
7346
7347       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7348         {
7349           /* __rld_map is a four byte word located in the .data section
7350              and is filled in by the rtld to contain a pointer to
7351              the _r_debug structure. Its symbol value will be set in
7352              _bfd_mips_elf_finish_dynamic_symbol.  */
7353           s = bfd_get_linker_section (abfd, ".rld_map");
7354           BFD_ASSERT (s != NULL);
7355
7356           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7357           bh = NULL;
7358           if (!(_bfd_generic_link_add_one_symbol
7359                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7360                  get_elf_backend_data (abfd)->collect, &bh)))
7361             return FALSE;
7362
7363           h = (struct elf_link_hash_entry *) bh;
7364           h->non_elf = 0;
7365           h->def_regular = 1;
7366           h->type = STT_OBJECT;
7367
7368           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7369             return FALSE;
7370           mips_elf_hash_table (info)->rld_symbol = h;
7371         }
7372     }
7373
7374   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7375      Also create the _PROCEDURE_LINKAGE_TABLE symbol.  */
7376   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7377     return FALSE;
7378
7379   /* Cache the sections created above.  */
7380   htab->splt = bfd_get_linker_section (abfd, ".plt");
7381   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7382   if (htab->is_vxworks)
7383     {
7384       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7385       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7386     }
7387   else
7388     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7389   if (!htab->sdynbss
7390       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7391       || !htab->srelplt
7392       || !htab->splt)
7393     abort ();
7394
7395   if (htab->is_vxworks)
7396     {
7397       /* Do the usual VxWorks handling.  */
7398       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7399         return FALSE;
7400
7401       /* Work out the PLT sizes.  */
7402       if (info->shared)
7403         {
7404           htab->plt_header_size
7405             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7406           htab->plt_entry_size
7407             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7408         }
7409       else
7410         {
7411           htab->plt_header_size
7412             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7413           htab->plt_entry_size
7414             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7415         }
7416     }
7417   else if (!info->shared)
7418     {
7419       /* All variants of the plt0 entry are the same size.  */
7420       htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7421       htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7422     }
7423
7424   return TRUE;
7425 }
7426 \f
7427 /* Return true if relocation REL against section SEC is a REL rather than
7428    RELA relocation.  RELOCS is the first relocation in the section and
7429    ABFD is the bfd that contains SEC.  */
7430
7431 static bfd_boolean
7432 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7433                            const Elf_Internal_Rela *relocs,
7434                            const Elf_Internal_Rela *rel)
7435 {
7436   Elf_Internal_Shdr *rel_hdr;
7437   const struct elf_backend_data *bed;
7438
7439   /* To determine which flavor of relocation this is, we depend on the
7440      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7441   rel_hdr = elf_section_data (sec)->rel.hdr;
7442   if (rel_hdr == NULL)
7443     return FALSE;
7444   bed = get_elf_backend_data (abfd);
7445   return ((size_t) (rel - relocs)
7446           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7447 }
7448
7449 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7450    HOWTO is the relocation's howto and CONTENTS points to the contents
7451    of the section that REL is against.  */
7452
7453 static bfd_vma
7454 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7455                           reloc_howto_type *howto, bfd_byte *contents)
7456 {
7457   bfd_byte *location;
7458   unsigned int r_type;
7459   bfd_vma addend;
7460
7461   r_type = ELF_R_TYPE (abfd, rel->r_info);
7462   location = contents + rel->r_offset;
7463
7464   /* Get the addend, which is stored in the input file.  */
7465   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7466   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7467   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7468
7469   return addend & howto->src_mask;
7470 }
7471
7472 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7473    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7474    and update *ADDEND with the final addend.  Return true on success
7475    or false if the LO16 could not be found.  RELEND is the exclusive
7476    upper bound on the relocations for REL's section.  */
7477
7478 static bfd_boolean
7479 mips_elf_add_lo16_rel_addend (bfd *abfd,
7480                               const Elf_Internal_Rela *rel,
7481                               const Elf_Internal_Rela *relend,
7482                               bfd_byte *contents, bfd_vma *addend)
7483 {
7484   unsigned int r_type, lo16_type;
7485   const Elf_Internal_Rela *lo16_relocation;
7486   reloc_howto_type *lo16_howto;
7487   bfd_vma l;
7488
7489   r_type = ELF_R_TYPE (abfd, rel->r_info);
7490   if (mips16_reloc_p (r_type))
7491     lo16_type = R_MIPS16_LO16;
7492   else if (micromips_reloc_p (r_type))
7493     lo16_type = R_MICROMIPS_LO16;
7494   else
7495     lo16_type = R_MIPS_LO16;
7496
7497   /* The combined value is the sum of the HI16 addend, left-shifted by
7498      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7499      code does a `lui' of the HI16 value, and then an `addiu' of the
7500      LO16 value.)
7501
7502      Scan ahead to find a matching LO16 relocation.
7503
7504      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7505      be immediately following.  However, for the IRIX6 ABI, the next
7506      relocation may be a composed relocation consisting of several
7507      relocations for the same address.  In that case, the R_MIPS_LO16
7508      relocation may occur as one of these.  We permit a similar
7509      extension in general, as that is useful for GCC.
7510
7511      In some cases GCC dead code elimination removes the LO16 but keeps
7512      the corresponding HI16.  This is strictly speaking a violation of
7513      the ABI but not immediately harmful.  */
7514   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7515   if (lo16_relocation == NULL)
7516     return FALSE;
7517
7518   /* Obtain the addend kept there.  */
7519   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7520   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7521
7522   l <<= lo16_howto->rightshift;
7523   l = _bfd_mips_elf_sign_extend (l, 16);
7524
7525   *addend <<= 16;
7526   *addend += l;
7527   return TRUE;
7528 }
7529
7530 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7531    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7532    already holds the contents if it is nonull on entry.  */
7533
7534 static bfd_boolean
7535 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7536 {
7537   if (*contents)
7538     return TRUE;
7539
7540   /* Get cached copy if it exists.  */
7541   if (elf_section_data (sec)->this_hdr.contents != NULL)
7542     {
7543       *contents = elf_section_data (sec)->this_hdr.contents;
7544       return TRUE;
7545     }
7546
7547   return bfd_malloc_and_get_section (abfd, sec, contents);
7548 }
7549
7550 /* Look through the relocs for a section during the first phase, and
7551    allocate space in the global offset table.  */
7552
7553 bfd_boolean
7554 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7555                             asection *sec, const Elf_Internal_Rela *relocs)
7556 {
7557   const char *name;
7558   bfd *dynobj;
7559   Elf_Internal_Shdr *symtab_hdr;
7560   struct elf_link_hash_entry **sym_hashes;
7561   size_t extsymoff;
7562   const Elf_Internal_Rela *rel;
7563   const Elf_Internal_Rela *rel_end;
7564   asection *sreloc;
7565   const struct elf_backend_data *bed;
7566   struct mips_elf_link_hash_table *htab;
7567   bfd_byte *contents;
7568   bfd_vma addend;
7569   reloc_howto_type *howto;
7570
7571   if (info->relocatable)
7572     return TRUE;
7573
7574   htab = mips_elf_hash_table (info);
7575   BFD_ASSERT (htab != NULL);
7576
7577   dynobj = elf_hash_table (info)->dynobj;
7578   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7579   sym_hashes = elf_sym_hashes (abfd);
7580   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7581
7582   bed = get_elf_backend_data (abfd);
7583   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7584
7585   /* Check for the mips16 stub sections.  */
7586
7587   name = bfd_get_section_name (abfd, sec);
7588   if (FN_STUB_P (name))
7589     {
7590       unsigned long r_symndx;
7591
7592       /* Look at the relocation information to figure out which symbol
7593          this is for.  */
7594
7595       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7596       if (r_symndx == 0)
7597         {
7598           (*_bfd_error_handler)
7599             (_("%B: Warning: cannot determine the target function for"
7600                " stub section `%s'"),
7601              abfd, name);
7602           bfd_set_error (bfd_error_bad_value);
7603           return FALSE;
7604         }
7605
7606       if (r_symndx < extsymoff
7607           || sym_hashes[r_symndx - extsymoff] == NULL)
7608         {
7609           asection *o;
7610
7611           /* This stub is for a local symbol.  This stub will only be
7612              needed if there is some relocation in this BFD, other
7613              than a 16 bit function call, which refers to this symbol.  */
7614           for (o = abfd->sections; o != NULL; o = o->next)
7615             {
7616               Elf_Internal_Rela *sec_relocs;
7617               const Elf_Internal_Rela *r, *rend;
7618
7619               /* We can ignore stub sections when looking for relocs.  */
7620               if ((o->flags & SEC_RELOC) == 0
7621                   || o->reloc_count == 0
7622                   || section_allows_mips16_refs_p (o))
7623                 continue;
7624
7625               sec_relocs
7626                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7627                                              info->keep_memory);
7628               if (sec_relocs == NULL)
7629                 return FALSE;
7630
7631               rend = sec_relocs + o->reloc_count;
7632               for (r = sec_relocs; r < rend; r++)
7633                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7634                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7635                   break;
7636
7637               if (elf_section_data (o)->relocs != sec_relocs)
7638                 free (sec_relocs);
7639
7640               if (r < rend)
7641                 break;
7642             }
7643
7644           if (o == NULL)
7645             {
7646               /* There is no non-call reloc for this stub, so we do
7647                  not need it.  Since this function is called before
7648                  the linker maps input sections to output sections, we
7649                  can easily discard it by setting the SEC_EXCLUDE
7650                  flag.  */
7651               sec->flags |= SEC_EXCLUDE;
7652               return TRUE;
7653             }
7654
7655           /* Record this stub in an array of local symbol stubs for
7656              this BFD.  */
7657           if (elf_tdata (abfd)->local_stubs == NULL)
7658             {
7659               unsigned long symcount;
7660               asection **n;
7661               bfd_size_type amt;
7662
7663               if (elf_bad_symtab (abfd))
7664                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7665               else
7666                 symcount = symtab_hdr->sh_info;
7667               amt = symcount * sizeof (asection *);
7668               n = bfd_zalloc (abfd, amt);
7669               if (n == NULL)
7670                 return FALSE;
7671               elf_tdata (abfd)->local_stubs = n;
7672             }
7673
7674           sec->flags |= SEC_KEEP;
7675           elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7676
7677           /* We don't need to set mips16_stubs_seen in this case.
7678              That flag is used to see whether we need to look through
7679              the global symbol table for stubs.  We don't need to set
7680              it here, because we just have a local stub.  */
7681         }
7682       else
7683         {
7684           struct mips_elf_link_hash_entry *h;
7685
7686           h = ((struct mips_elf_link_hash_entry *)
7687                sym_hashes[r_symndx - extsymoff]);
7688
7689           while (h->root.root.type == bfd_link_hash_indirect
7690                  || h->root.root.type == bfd_link_hash_warning)
7691             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7692
7693           /* H is the symbol this stub is for.  */
7694
7695           /* If we already have an appropriate stub for this function, we
7696              don't need another one, so we can discard this one.  Since
7697              this function is called before the linker maps input sections
7698              to output sections, we can easily discard it by setting the
7699              SEC_EXCLUDE flag.  */
7700           if (h->fn_stub != NULL)
7701             {
7702               sec->flags |= SEC_EXCLUDE;
7703               return TRUE;
7704             }
7705
7706           sec->flags |= SEC_KEEP;
7707           h->fn_stub = sec;
7708           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7709         }
7710     }
7711   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
7712     {
7713       unsigned long r_symndx;
7714       struct mips_elf_link_hash_entry *h;
7715       asection **loc;
7716
7717       /* Look at the relocation information to figure out which symbol
7718          this is for.  */
7719
7720       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7721       if (r_symndx == 0)
7722         {
7723           (*_bfd_error_handler)
7724             (_("%B: Warning: cannot determine the target function for"
7725                " stub section `%s'"),
7726              abfd, name);
7727           bfd_set_error (bfd_error_bad_value);
7728           return FALSE;
7729         }
7730
7731       if (r_symndx < extsymoff
7732           || sym_hashes[r_symndx - extsymoff] == NULL)
7733         {
7734           asection *o;
7735
7736           /* This stub is for a local symbol.  This stub will only be
7737              needed if there is some relocation (R_MIPS16_26) in this BFD
7738              that refers to this symbol.  */
7739           for (o = abfd->sections; o != NULL; o = o->next)
7740             {
7741               Elf_Internal_Rela *sec_relocs;
7742               const Elf_Internal_Rela *r, *rend;
7743
7744               /* We can ignore stub sections when looking for relocs.  */
7745               if ((o->flags & SEC_RELOC) == 0
7746                   || o->reloc_count == 0
7747                   || section_allows_mips16_refs_p (o))
7748                 continue;
7749
7750               sec_relocs
7751                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7752                                              info->keep_memory);
7753               if (sec_relocs == NULL)
7754                 return FALSE;
7755
7756               rend = sec_relocs + o->reloc_count;
7757               for (r = sec_relocs; r < rend; r++)
7758                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7759                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7760                     break;
7761
7762               if (elf_section_data (o)->relocs != sec_relocs)
7763                 free (sec_relocs);
7764
7765               if (r < rend)
7766                 break;
7767             }
7768
7769           if (o == NULL)
7770             {
7771               /* There is no non-call reloc for this stub, so we do
7772                  not need it.  Since this function is called before
7773                  the linker maps input sections to output sections, we
7774                  can easily discard it by setting the SEC_EXCLUDE
7775                  flag.  */
7776               sec->flags |= SEC_EXCLUDE;
7777               return TRUE;
7778             }
7779
7780           /* Record this stub in an array of local symbol call_stubs for
7781              this BFD.  */
7782           if (elf_tdata (abfd)->local_call_stubs == NULL)
7783             {
7784               unsigned long symcount;
7785               asection **n;
7786               bfd_size_type amt;
7787
7788               if (elf_bad_symtab (abfd))
7789                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7790               else
7791                 symcount = symtab_hdr->sh_info;
7792               amt = symcount * sizeof (asection *);
7793               n = bfd_zalloc (abfd, amt);
7794               if (n == NULL)
7795                 return FALSE;
7796               elf_tdata (abfd)->local_call_stubs = n;
7797             }
7798
7799           sec->flags |= SEC_KEEP;
7800           elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
7801
7802           /* We don't need to set mips16_stubs_seen in this case.
7803              That flag is used to see whether we need to look through
7804              the global symbol table for stubs.  We don't need to set
7805              it here, because we just have a local stub.  */
7806         }
7807       else
7808         {
7809           h = ((struct mips_elf_link_hash_entry *)
7810                sym_hashes[r_symndx - extsymoff]);
7811           
7812           /* H is the symbol this stub is for.  */
7813           
7814           if (CALL_FP_STUB_P (name))
7815             loc = &h->call_fp_stub;
7816           else
7817             loc = &h->call_stub;
7818           
7819           /* If we already have an appropriate stub for this function, we
7820              don't need another one, so we can discard this one.  Since
7821              this function is called before the linker maps input sections
7822              to output sections, we can easily discard it by setting the
7823              SEC_EXCLUDE flag.  */
7824           if (*loc != NULL)
7825             {
7826               sec->flags |= SEC_EXCLUDE;
7827               return TRUE;
7828             }
7829
7830           sec->flags |= SEC_KEEP;
7831           *loc = sec;
7832           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7833         }
7834     }
7835
7836   sreloc = NULL;
7837   contents = NULL;
7838   for (rel = relocs; rel < rel_end; ++rel)
7839     {
7840       unsigned long r_symndx;
7841       unsigned int r_type;
7842       struct elf_link_hash_entry *h;
7843       bfd_boolean can_make_dynamic_p;
7844
7845       r_symndx = ELF_R_SYM (abfd, rel->r_info);
7846       r_type = ELF_R_TYPE (abfd, rel->r_info);
7847
7848       if (r_symndx < extsymoff)
7849         h = NULL;
7850       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7851         {
7852           (*_bfd_error_handler)
7853             (_("%B: Malformed reloc detected for section %s"),
7854              abfd, name);
7855           bfd_set_error (bfd_error_bad_value);
7856           return FALSE;
7857         }
7858       else
7859         {
7860           h = sym_hashes[r_symndx - extsymoff];
7861           while (h != NULL
7862                  && (h->root.type == bfd_link_hash_indirect
7863                      || h->root.type == bfd_link_hash_warning))
7864             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7865         }
7866
7867       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7868          relocation into a dynamic one.  */
7869       can_make_dynamic_p = FALSE;
7870       switch (r_type)
7871         {
7872         case R_MIPS_GOT16:
7873         case R_MIPS_CALL16:
7874         case R_MIPS_CALL_HI16:
7875         case R_MIPS_CALL_LO16:
7876         case R_MIPS_GOT_HI16:
7877         case R_MIPS_GOT_LO16:
7878         case R_MIPS_GOT_PAGE:
7879         case R_MIPS_GOT_OFST:
7880         case R_MIPS_GOT_DISP:
7881         case R_MIPS_TLS_GOTTPREL:
7882         case R_MIPS_TLS_GD:
7883         case R_MIPS_TLS_LDM:
7884         case R_MIPS16_GOT16:
7885         case R_MIPS16_CALL16:
7886         case R_MIPS16_TLS_GOTTPREL:
7887         case R_MIPS16_TLS_GD:
7888         case R_MIPS16_TLS_LDM:
7889         case R_MICROMIPS_GOT16:
7890         case R_MICROMIPS_CALL16:
7891         case R_MICROMIPS_CALL_HI16:
7892         case R_MICROMIPS_CALL_LO16:
7893         case R_MICROMIPS_GOT_HI16:
7894         case R_MICROMIPS_GOT_LO16:
7895         case R_MICROMIPS_GOT_PAGE:
7896         case R_MICROMIPS_GOT_OFST:
7897         case R_MICROMIPS_GOT_DISP:
7898         case R_MICROMIPS_TLS_GOTTPREL:
7899         case R_MICROMIPS_TLS_GD:
7900         case R_MICROMIPS_TLS_LDM:
7901           if (dynobj == NULL)
7902             elf_hash_table (info)->dynobj = dynobj = abfd;
7903           if (!mips_elf_create_got_section (dynobj, info))
7904             return FALSE;
7905           if (htab->is_vxworks && !info->shared)
7906             {
7907               (*_bfd_error_handler)
7908                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
7909                  abfd, (unsigned long) rel->r_offset);
7910               bfd_set_error (bfd_error_bad_value);
7911               return FALSE;
7912             }
7913           break;
7914
7915           /* This is just a hint; it can safely be ignored.  Don't set
7916              has_static_relocs for the corresponding symbol.  */
7917         case R_MIPS_JALR:
7918         case R_MICROMIPS_JALR:
7919           break;
7920
7921         case R_MIPS_32:
7922         case R_MIPS_REL32:
7923         case R_MIPS_64:
7924           /* In VxWorks executables, references to external symbols
7925              must be handled using copy relocs or PLT entries; it is not
7926              possible to convert this relocation into a dynamic one.
7927
7928              For executables that use PLTs and copy-relocs, we have a
7929              choice between converting the relocation into a dynamic
7930              one or using copy relocations or PLT entries.  It is
7931              usually better to do the former, unless the relocation is
7932              against a read-only section.  */
7933           if ((info->shared
7934                || (h != NULL
7935                    && !htab->is_vxworks
7936                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7937                    && !(!info->nocopyreloc
7938                         && !PIC_OBJECT_P (abfd)
7939                         && MIPS_ELF_READONLY_SECTION (sec))))
7940               && (sec->flags & SEC_ALLOC) != 0)
7941             {
7942               can_make_dynamic_p = TRUE;
7943               if (dynobj == NULL)
7944                 elf_hash_table (info)->dynobj = dynobj = abfd;
7945               break;
7946             }
7947           /* For sections that are not SEC_ALLOC a copy reloc would be
7948              output if possible (implying questionable semantics for
7949              read-only data objects) or otherwise the final link would
7950              fail as ld.so will not process them and could not therefore
7951              handle any outstanding dynamic relocations.
7952
7953              For such sections that are also SEC_DEBUGGING, we can avoid
7954              these problems by simply ignoring any relocs as these
7955              sections have a predefined use and we know it is safe to do
7956              so.
7957
7958              This is needed in cases such as a global symbol definition
7959              in a shared library causing a common symbol from an object
7960              file to be converted to an undefined reference.  If that
7961              happens, then all the relocations against this symbol from
7962              SEC_DEBUGGING sections in the object file will resolve to
7963              nil.  */
7964           if ((sec->flags & SEC_DEBUGGING) != 0)
7965             break;
7966           /* Fall through.  */
7967
7968         default:
7969           /* Most static relocations require pointer equality, except
7970              for branches.  */
7971           if (h)
7972             h->pointer_equality_needed = TRUE;
7973           /* Fall through.  */
7974
7975         case R_MIPS_26:
7976         case R_MIPS_PC16:
7977         case R_MIPS16_26:
7978         case R_MICROMIPS_26_S1:
7979         case R_MICROMIPS_PC7_S1:
7980         case R_MICROMIPS_PC10_S1:
7981         case R_MICROMIPS_PC16_S1:
7982         case R_MICROMIPS_PC23_S2:
7983           if (h)
7984             ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
7985           break;
7986         }
7987
7988       if (h)
7989         {
7990           /* Relocations against the special VxWorks __GOTT_BASE__ and
7991              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
7992              room for them in .rela.dyn.  */
7993           if (is_gott_symbol (info, h))
7994             {
7995               if (sreloc == NULL)
7996                 {
7997                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
7998                   if (sreloc == NULL)
7999                     return FALSE;
8000                 }
8001               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8002               if (MIPS_ELF_READONLY_SECTION (sec))
8003                 /* We tell the dynamic linker that there are
8004                    relocations against the text segment.  */
8005                 info->flags |= DF_TEXTREL;
8006             }
8007         }
8008       else if (call_lo16_reloc_p (r_type)
8009                || got_lo16_reloc_p (r_type)
8010                || got_disp_reloc_p (r_type)
8011                || (got16_reloc_p (r_type) && htab->is_vxworks))
8012         {
8013           /* We may need a local GOT entry for this relocation.  We
8014              don't count R_MIPS_GOT_PAGE because we can estimate the
8015              maximum number of pages needed by looking at the size of
8016              the segment.  Similar comments apply to R_MIPS*_GOT16 and
8017              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8018              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8019              R_MIPS_CALL_HI16 because these are always followed by an
8020              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8021           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8022                                                  rel->r_addend, info, 0))
8023             return FALSE;
8024         }
8025
8026       if (h != NULL
8027           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8028                                                   ELF_ST_IS_MIPS16 (h->other)))
8029         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8030
8031       switch (r_type)
8032         {
8033         case R_MIPS_CALL16:
8034         case R_MIPS16_CALL16:
8035         case R_MICROMIPS_CALL16:
8036           if (h == NULL)
8037             {
8038               (*_bfd_error_handler)
8039                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8040                  abfd, (unsigned long) rel->r_offset);
8041               bfd_set_error (bfd_error_bad_value);
8042               return FALSE;
8043             }
8044           /* Fall through.  */
8045
8046         case R_MIPS_CALL_HI16:
8047         case R_MIPS_CALL_LO16:
8048         case R_MICROMIPS_CALL_HI16:
8049         case R_MICROMIPS_CALL_LO16:
8050           if (h != NULL)
8051             {
8052               /* Make sure there is room in the regular GOT to hold the
8053                  function's address.  We may eliminate it in favour of
8054                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8055               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE, 0))
8056                 return FALSE;
8057
8058               /* We need a stub, not a plt entry for the undefined
8059                  function.  But we record it as if it needs plt.  See
8060                  _bfd_elf_adjust_dynamic_symbol.  */
8061               h->needs_plt = 1;
8062               h->type = STT_FUNC;
8063             }
8064           break;
8065
8066         case R_MIPS_GOT_PAGE:
8067         case R_MICROMIPS_GOT_PAGE:
8068           /* If this is a global, overridable symbol, GOT_PAGE will
8069              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8070           if (h)
8071             {
8072               struct mips_elf_link_hash_entry *hmips =
8073                 (struct mips_elf_link_hash_entry *) h;
8074
8075               /* This symbol is definitely not overridable.  */
8076               if (hmips->root.def_regular
8077                   && ! (info->shared && ! info->symbolic
8078                         && ! hmips->root.forced_local))
8079                 h = NULL;
8080             }
8081           /* Fall through.  */
8082
8083         case R_MIPS16_GOT16:
8084         case R_MIPS_GOT16:
8085         case R_MIPS_GOT_HI16:
8086         case R_MIPS_GOT_LO16:
8087         case R_MICROMIPS_GOT16:
8088         case R_MICROMIPS_GOT_HI16:
8089         case R_MICROMIPS_GOT_LO16:
8090           if (!h || got_page_reloc_p (r_type))
8091             {
8092               /* This relocation needs (or may need, if h != NULL) a
8093                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8094                  know for sure until we know whether the symbol is
8095                  preemptible.  */
8096               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8097                 {
8098                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8099                     return FALSE;
8100                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8101                   addend = mips_elf_read_rel_addend (abfd, rel,
8102                                                      howto, contents);
8103                   if (got16_reloc_p (r_type))
8104                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8105                                                   contents, &addend);
8106                   else
8107                     addend <<= howto->rightshift;
8108                 }
8109               else
8110                 addend = rel->r_addend;
8111               if (!mips_elf_record_got_page_entry (info, abfd, r_symndx,
8112                                                    addend))
8113                 return FALSE;
8114             }
8115           /* Fall through.  */
8116
8117         case R_MIPS_GOT_DISP:
8118         case R_MICROMIPS_GOT_DISP:
8119           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8120                                                        FALSE, 0))
8121             return FALSE;
8122           break;
8123
8124         case R_MIPS_TLS_GOTTPREL:
8125         case R_MIPS16_TLS_GOTTPREL:
8126         case R_MICROMIPS_TLS_GOTTPREL:
8127           if (info->shared)
8128             info->flags |= DF_STATIC_TLS;
8129           /* Fall through */
8130
8131         case R_MIPS_TLS_LDM:
8132         case R_MIPS16_TLS_LDM:
8133         case R_MICROMIPS_TLS_LDM:
8134           if (tls_ldm_reloc_p (r_type))
8135             {
8136               r_symndx = STN_UNDEF;
8137               h = NULL;
8138             }
8139           /* Fall through */
8140
8141         case R_MIPS_TLS_GD:
8142         case R_MIPS16_TLS_GD:
8143         case R_MICROMIPS_TLS_GD:
8144           /* This symbol requires a global offset table entry, or two
8145              for TLS GD relocations.  */
8146           {
8147             unsigned char flag;
8148
8149             flag = (tls_gd_reloc_p (r_type)
8150                     ? GOT_TLS_GD
8151                     : tls_ldm_reloc_p (r_type) ? GOT_TLS_LDM : GOT_TLS_IE);
8152             if (h != NULL)
8153               {
8154                 struct mips_elf_link_hash_entry *hmips =
8155                   (struct mips_elf_link_hash_entry *) h;
8156                 hmips->tls_type |= flag;
8157
8158                 if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8159                                                              FALSE, flag))
8160                   return FALSE;
8161               }
8162             else
8163               {
8164                 BFD_ASSERT (flag == GOT_TLS_LDM || r_symndx != STN_UNDEF);
8165
8166                 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8167                                                        rel->r_addend,
8168                                                        info, flag))
8169                   return FALSE;
8170               }
8171           }
8172           break;
8173
8174         case R_MIPS_32:
8175         case R_MIPS_REL32:
8176         case R_MIPS_64:
8177           /* In VxWorks executables, references to external symbols
8178              are handled using copy relocs or PLT stubs, so there's
8179              no need to add a .rela.dyn entry for this relocation.  */
8180           if (can_make_dynamic_p)
8181             {
8182               if (sreloc == NULL)
8183                 {
8184                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8185                   if (sreloc == NULL)
8186                     return FALSE;
8187                 }
8188               if (info->shared && h == NULL)
8189                 {
8190                   /* When creating a shared object, we must copy these
8191                      reloc types into the output file as R_MIPS_REL32
8192                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8193                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8194                   if (MIPS_ELF_READONLY_SECTION (sec))
8195                     /* We tell the dynamic linker that there are
8196                        relocations against the text segment.  */
8197                     info->flags |= DF_TEXTREL;
8198                 }
8199               else
8200                 {
8201                   struct mips_elf_link_hash_entry *hmips;
8202
8203                   /* For a shared object, we must copy this relocation
8204                      unless the symbol turns out to be undefined and
8205                      weak with non-default visibility, in which case
8206                      it will be left as zero.
8207
8208                      We could elide R_MIPS_REL32 for locally binding symbols
8209                      in shared libraries, but do not yet do so.
8210
8211                      For an executable, we only need to copy this
8212                      reloc if the symbol is defined in a dynamic
8213                      object.  */
8214                   hmips = (struct mips_elf_link_hash_entry *) h;
8215                   ++hmips->possibly_dynamic_relocs;
8216                   if (MIPS_ELF_READONLY_SECTION (sec))
8217                     /* We need it to tell the dynamic linker if there
8218                        are relocations against the text segment.  */
8219                     hmips->readonly_reloc = TRUE;
8220                 }
8221             }
8222
8223           if (SGI_COMPAT (abfd))
8224             mips_elf_hash_table (info)->compact_rel_size +=
8225               sizeof (Elf32_External_crinfo);
8226           break;
8227
8228         case R_MIPS_26:
8229         case R_MIPS_GPREL16:
8230         case R_MIPS_LITERAL:
8231         case R_MIPS_GPREL32:
8232         case R_MICROMIPS_26_S1:
8233         case R_MICROMIPS_GPREL16:
8234         case R_MICROMIPS_LITERAL:
8235         case R_MICROMIPS_GPREL7_S2:
8236           if (SGI_COMPAT (abfd))
8237             mips_elf_hash_table (info)->compact_rel_size +=
8238               sizeof (Elf32_External_crinfo);
8239           break;
8240
8241           /* This relocation describes the C++ object vtable hierarchy.
8242              Reconstruct it for later use during GC.  */
8243         case R_MIPS_GNU_VTINHERIT:
8244           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8245             return FALSE;
8246           break;
8247
8248           /* This relocation describes which C++ vtable entries are actually
8249              used.  Record for later use during GC.  */
8250         case R_MIPS_GNU_VTENTRY:
8251           BFD_ASSERT (h != NULL);
8252           if (h != NULL
8253               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8254             return FALSE;
8255           break;
8256
8257         default:
8258           break;
8259         }
8260
8261       /* We must not create a stub for a symbol that has relocations
8262          related to taking the function's address.  This doesn't apply to
8263          VxWorks, where CALL relocs refer to a .got.plt entry instead of
8264          a normal .got entry.  */
8265       if (!htab->is_vxworks && h != NULL)
8266         switch (r_type)
8267           {
8268           default:
8269             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8270             break;
8271           case R_MIPS16_CALL16:
8272           case R_MIPS_CALL16:
8273           case R_MIPS_CALL_HI16:
8274           case R_MIPS_CALL_LO16:
8275           case R_MIPS_JALR:
8276           case R_MICROMIPS_CALL16:
8277           case R_MICROMIPS_CALL_HI16:
8278           case R_MICROMIPS_CALL_LO16:
8279           case R_MICROMIPS_JALR:
8280             break;
8281           }
8282
8283       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8284          if there is one.  We only need to handle global symbols here;
8285          we decide whether to keep or delete stubs for local symbols
8286          when processing the stub's relocations.  */
8287       if (h != NULL
8288           && !mips16_call_reloc_p (r_type)
8289           && !section_allows_mips16_refs_p (sec))
8290         {
8291           struct mips_elf_link_hash_entry *mh;
8292
8293           mh = (struct mips_elf_link_hash_entry *) h;
8294           mh->need_fn_stub = TRUE;
8295         }
8296
8297       /* Refuse some position-dependent relocations when creating a
8298          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8299          not PIC, but we can create dynamic relocations and the result
8300          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8301          combined with R_MIPS_GOT16.  */
8302       if (info->shared)
8303         {
8304           switch (r_type)
8305             {
8306             case R_MIPS16_HI16:
8307             case R_MIPS_HI16:
8308             case R_MIPS_HIGHER:
8309             case R_MIPS_HIGHEST:
8310             case R_MICROMIPS_HI16:
8311             case R_MICROMIPS_HIGHER:
8312             case R_MICROMIPS_HIGHEST:
8313               /* Don't refuse a high part relocation if it's against
8314                  no symbol (e.g. part of a compound relocation).  */
8315               if (r_symndx == STN_UNDEF)
8316                 break;
8317
8318               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8319                  and has a special meaning.  */
8320               if (!NEWABI_P (abfd) && h != NULL
8321                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8322                 break;
8323
8324               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8325               if (is_gott_symbol (info, h))
8326                 break;
8327
8328               /* FALLTHROUGH */
8329
8330             case R_MIPS16_26:
8331             case R_MIPS_26:
8332             case R_MICROMIPS_26_S1:
8333               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8334               (*_bfd_error_handler)
8335                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8336                  abfd, howto->name,
8337                  (h) ? h->root.root.string : "a local symbol");
8338               bfd_set_error (bfd_error_bad_value);
8339               return FALSE;
8340             default:
8341               break;
8342             }
8343         }
8344     }
8345
8346   return TRUE;
8347 }
8348 \f
8349 bfd_boolean
8350 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8351                          struct bfd_link_info *link_info,
8352                          bfd_boolean *again)
8353 {
8354   Elf_Internal_Rela *internal_relocs;
8355   Elf_Internal_Rela *irel, *irelend;
8356   Elf_Internal_Shdr *symtab_hdr;
8357   bfd_byte *contents = NULL;
8358   size_t extsymoff;
8359   bfd_boolean changed_contents = FALSE;
8360   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8361   Elf_Internal_Sym *isymbuf = NULL;
8362
8363   /* We are not currently changing any sizes, so only one pass.  */
8364   *again = FALSE;
8365
8366   if (link_info->relocatable)
8367     return TRUE;
8368
8369   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8370                                                link_info->keep_memory);
8371   if (internal_relocs == NULL)
8372     return TRUE;
8373
8374   irelend = internal_relocs + sec->reloc_count
8375     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8376   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8377   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8378
8379   for (irel = internal_relocs; irel < irelend; irel++)
8380     {
8381       bfd_vma symval;
8382       bfd_signed_vma sym_offset;
8383       unsigned int r_type;
8384       unsigned long r_symndx;
8385       asection *sym_sec;
8386       unsigned long instruction;
8387
8388       /* Turn jalr into bgezal, and jr into beq, if they're marked
8389          with a JALR relocation, that indicate where they jump to.
8390          This saves some pipeline bubbles.  */
8391       r_type = ELF_R_TYPE (abfd, irel->r_info);
8392       if (r_type != R_MIPS_JALR)
8393         continue;
8394
8395       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8396       /* Compute the address of the jump target.  */
8397       if (r_symndx >= extsymoff)
8398         {
8399           struct mips_elf_link_hash_entry *h
8400             = ((struct mips_elf_link_hash_entry *)
8401                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8402
8403           while (h->root.root.type == bfd_link_hash_indirect
8404                  || h->root.root.type == bfd_link_hash_warning)
8405             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8406
8407           /* If a symbol is undefined, or if it may be overridden,
8408              skip it.  */
8409           if (! ((h->root.root.type == bfd_link_hash_defined
8410                   || h->root.root.type == bfd_link_hash_defweak)
8411                  && h->root.root.u.def.section)
8412               || (link_info->shared && ! link_info->symbolic
8413                   && !h->root.forced_local))
8414             continue;
8415
8416           sym_sec = h->root.root.u.def.section;
8417           if (sym_sec->output_section)
8418             symval = (h->root.root.u.def.value
8419                       + sym_sec->output_section->vma
8420                       + sym_sec->output_offset);
8421           else
8422             symval = h->root.root.u.def.value;
8423         }
8424       else
8425         {
8426           Elf_Internal_Sym *isym;
8427
8428           /* Read this BFD's symbols if we haven't done so already.  */
8429           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8430             {
8431               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8432               if (isymbuf == NULL)
8433                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8434                                                 symtab_hdr->sh_info, 0,
8435                                                 NULL, NULL, NULL);
8436               if (isymbuf == NULL)
8437                 goto relax_return;
8438             }
8439
8440           isym = isymbuf + r_symndx;
8441           if (isym->st_shndx == SHN_UNDEF)
8442             continue;
8443           else if (isym->st_shndx == SHN_ABS)
8444             sym_sec = bfd_abs_section_ptr;
8445           else if (isym->st_shndx == SHN_COMMON)
8446             sym_sec = bfd_com_section_ptr;
8447           else
8448             sym_sec
8449               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8450           symval = isym->st_value
8451             + sym_sec->output_section->vma
8452             + sym_sec->output_offset;
8453         }
8454
8455       /* Compute branch offset, from delay slot of the jump to the
8456          branch target.  */
8457       sym_offset = (symval + irel->r_addend)
8458         - (sec_start + irel->r_offset + 4);
8459
8460       /* Branch offset must be properly aligned.  */
8461       if ((sym_offset & 3) != 0)
8462         continue;
8463
8464       sym_offset >>= 2;
8465
8466       /* Check that it's in range.  */
8467       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8468         continue;
8469
8470       /* Get the section contents if we haven't done so already.  */
8471       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8472         goto relax_return;
8473
8474       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8475
8476       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8477       if ((instruction & 0xfc1fffff) == 0x0000f809)
8478         instruction = 0x04110000;
8479       /* If it was jr <reg>, turn it into b <target>.  */
8480       else if ((instruction & 0xfc1fffff) == 0x00000008)
8481         instruction = 0x10000000;
8482       else
8483         continue;
8484
8485       instruction |= (sym_offset & 0xffff);
8486       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8487       changed_contents = TRUE;
8488     }
8489
8490   if (contents != NULL
8491       && elf_section_data (sec)->this_hdr.contents != contents)
8492     {
8493       if (!changed_contents && !link_info->keep_memory)
8494         free (contents);
8495       else
8496         {
8497           /* Cache the section contents for elf_link_input_bfd.  */
8498           elf_section_data (sec)->this_hdr.contents = contents;
8499         }
8500     }
8501   return TRUE;
8502
8503  relax_return:
8504   if (contents != NULL
8505       && elf_section_data (sec)->this_hdr.contents != contents)
8506     free (contents);
8507   return FALSE;
8508 }
8509 \f
8510 /* Allocate space for global sym dynamic relocs.  */
8511
8512 static bfd_boolean
8513 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8514 {
8515   struct bfd_link_info *info = inf;
8516   bfd *dynobj;
8517   struct mips_elf_link_hash_entry *hmips;
8518   struct mips_elf_link_hash_table *htab;
8519
8520   htab = mips_elf_hash_table (info);
8521   BFD_ASSERT (htab != NULL);
8522
8523   dynobj = elf_hash_table (info)->dynobj;
8524   hmips = (struct mips_elf_link_hash_entry *) h;
8525
8526   /* VxWorks executables are handled elsewhere; we only need to
8527      allocate relocations in shared objects.  */
8528   if (htab->is_vxworks && !info->shared)
8529     return TRUE;
8530
8531   /* Ignore indirect symbols.  All relocations against such symbols
8532      will be redirected to the target symbol.  */
8533   if (h->root.type == bfd_link_hash_indirect)
8534     return TRUE;
8535
8536   /* If this symbol is defined in a dynamic object, or we are creating
8537      a shared library, we will need to copy any R_MIPS_32 or
8538      R_MIPS_REL32 relocs against it into the output file.  */
8539   if (! info->relocatable
8540       && hmips->possibly_dynamic_relocs != 0
8541       && (h->root.type == bfd_link_hash_defweak
8542           || !h->def_regular
8543           || info->shared))
8544     {
8545       bfd_boolean do_copy = TRUE;
8546
8547       if (h->root.type == bfd_link_hash_undefweak)
8548         {
8549           /* Do not copy relocations for undefined weak symbols with
8550              non-default visibility.  */
8551           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8552             do_copy = FALSE;
8553
8554           /* Make sure undefined weak symbols are output as a dynamic
8555              symbol in PIEs.  */
8556           else if (h->dynindx == -1 && !h->forced_local)
8557             {
8558               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8559                 return FALSE;
8560             }
8561         }
8562
8563       if (do_copy)
8564         {
8565           /* Even though we don't directly need a GOT entry for this symbol,
8566              the SVR4 psABI requires it to have a dynamic symbol table
8567              index greater that DT_MIPS_GOTSYM if there are dynamic
8568              relocations against it.
8569
8570              VxWorks does not enforce the same mapping between the GOT
8571              and the symbol table, so the same requirement does not
8572              apply there.  */
8573           if (!htab->is_vxworks)
8574             {
8575               if (hmips->global_got_area > GGA_RELOC_ONLY)
8576                 hmips->global_got_area = GGA_RELOC_ONLY;
8577               hmips->got_only_for_calls = FALSE;
8578             }
8579
8580           mips_elf_allocate_dynamic_relocations
8581             (dynobj, info, hmips->possibly_dynamic_relocs);
8582           if (hmips->readonly_reloc)
8583             /* We tell the dynamic linker that there are relocations
8584                against the text segment.  */
8585             info->flags |= DF_TEXTREL;
8586         }
8587     }
8588
8589   return TRUE;
8590 }
8591
8592 /* Adjust a symbol defined by a dynamic object and referenced by a
8593    regular object.  The current definition is in some section of the
8594    dynamic object, but we're not including those sections.  We have to
8595    change the definition to something the rest of the link can
8596    understand.  */
8597
8598 bfd_boolean
8599 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8600                                      struct elf_link_hash_entry *h)
8601 {
8602   bfd *dynobj;
8603   struct mips_elf_link_hash_entry *hmips;
8604   struct mips_elf_link_hash_table *htab;
8605
8606   htab = mips_elf_hash_table (info);
8607   BFD_ASSERT (htab != NULL);
8608
8609   dynobj = elf_hash_table (info)->dynobj;
8610   hmips = (struct mips_elf_link_hash_entry *) h;
8611
8612   /* Make sure we know what is going on here.  */
8613   BFD_ASSERT (dynobj != NULL
8614               && (h->needs_plt
8615                   || h->u.weakdef != NULL
8616                   || (h->def_dynamic
8617                       && h->ref_regular
8618                       && !h->def_regular)));
8619
8620   hmips = (struct mips_elf_link_hash_entry *) h;
8621
8622   /* If there are call relocations against an externally-defined symbol,
8623      see whether we can create a MIPS lazy-binding stub for it.  We can
8624      only do this if all references to the function are through call
8625      relocations, and in that case, the traditional lazy-binding stubs
8626      are much more efficient than PLT entries.
8627
8628      Traditional stubs are only available on SVR4 psABI-based systems;
8629      VxWorks always uses PLTs instead.  */
8630   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8631     {
8632       if (! elf_hash_table (info)->dynamic_sections_created)
8633         return TRUE;
8634
8635       /* If this symbol is not defined in a regular file, then set
8636          the symbol to the stub location.  This is required to make
8637          function pointers compare as equal between the normal
8638          executable and the shared library.  */
8639       if (!h->def_regular)
8640         {
8641           hmips->needs_lazy_stub = TRUE;
8642           htab->lazy_stub_count++;
8643           return TRUE;
8644         }
8645     }
8646   /* As above, VxWorks requires PLT entries for externally-defined
8647      functions that are only accessed through call relocations.
8648
8649      Both VxWorks and non-VxWorks targets also need PLT entries if there
8650      are static-only relocations against an externally-defined function.
8651      This can technically occur for shared libraries if there are
8652      branches to the symbol, although it is unlikely that this will be
8653      used in practice due to the short ranges involved.  It can occur
8654      for any relative or absolute relocation in executables; in that
8655      case, the PLT entry becomes the function's canonical address.  */
8656   else if (((h->needs_plt && !hmips->no_fn_stub)
8657             || (h->type == STT_FUNC && hmips->has_static_relocs))
8658            && htab->use_plts_and_copy_relocs
8659            && !SYMBOL_CALLS_LOCAL (info, h)
8660            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8661                 && h->root.type == bfd_link_hash_undefweak))
8662     {
8663       /* If this is the first symbol to need a PLT entry, allocate room
8664          for the header.  */
8665       if (htab->splt->size == 0)
8666         {
8667           BFD_ASSERT (htab->sgotplt->size == 0);
8668
8669           /* If we're using the PLT additions to the psABI, each PLT
8670              entry is 16 bytes and the PLT0 entry is 32 bytes.
8671              Encourage better cache usage by aligning.  We do this
8672              lazily to avoid pessimizing traditional objects.  */
8673           if (!htab->is_vxworks
8674               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8675             return FALSE;
8676
8677           /* Make sure that .got.plt is word-aligned.  We do this lazily
8678              for the same reason as above.  */
8679           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8680                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8681             return FALSE;
8682
8683           htab->splt->size += htab->plt_header_size;
8684
8685           /* On non-VxWorks targets, the first two entries in .got.plt
8686              are reserved.  */
8687           if (!htab->is_vxworks)
8688             htab->sgotplt->size
8689               += get_elf_backend_data (dynobj)->got_header_size;
8690
8691           /* On VxWorks, also allocate room for the header's
8692              .rela.plt.unloaded entries.  */
8693           if (htab->is_vxworks && !info->shared)
8694             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8695         }
8696
8697       /* Assign the next .plt entry to this symbol.  */
8698       h->plt.offset = htab->splt->size;
8699       htab->splt->size += htab->plt_entry_size;
8700
8701       /* If the output file has no definition of the symbol, set the
8702          symbol's value to the address of the stub.  */
8703       if (!info->shared && !h->def_regular)
8704         {
8705           h->root.u.def.section = htab->splt;
8706           h->root.u.def.value = h->plt.offset;
8707           /* For VxWorks, point at the PLT load stub rather than the
8708              lazy resolution stub; this stub will become the canonical
8709              function address.  */
8710           if (htab->is_vxworks)
8711             h->root.u.def.value += 8;
8712         }
8713
8714       /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8715          relocation.  */
8716       htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8717       htab->srelplt->size += (htab->is_vxworks
8718                               ? MIPS_ELF_RELA_SIZE (dynobj)
8719                               : MIPS_ELF_REL_SIZE (dynobj));
8720
8721       /* Make room for the .rela.plt.unloaded relocations.  */
8722       if (htab->is_vxworks && !info->shared)
8723         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8724
8725       /* All relocations against this symbol that could have been made
8726          dynamic will now refer to the PLT entry instead.  */
8727       hmips->possibly_dynamic_relocs = 0;
8728
8729       return TRUE;
8730     }
8731
8732   /* If this is a weak symbol, and there is a real definition, the
8733      processor independent code will have arranged for us to see the
8734      real definition first, and we can just use the same value.  */
8735   if (h->u.weakdef != NULL)
8736     {
8737       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8738                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
8739       h->root.u.def.section = h->u.weakdef->root.u.def.section;
8740       h->root.u.def.value = h->u.weakdef->root.u.def.value;
8741       return TRUE;
8742     }
8743
8744   /* Otherwise, there is nothing further to do for symbols defined
8745      in regular objects.  */
8746   if (h->def_regular)
8747     return TRUE;
8748
8749   /* There's also nothing more to do if we'll convert all relocations
8750      against this symbol into dynamic relocations.  */
8751   if (!hmips->has_static_relocs)
8752     return TRUE;
8753
8754   /* We're now relying on copy relocations.  Complain if we have
8755      some that we can't convert.  */
8756   if (!htab->use_plts_and_copy_relocs || info->shared)
8757     {
8758       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8759                                "dynamic symbol %s"),
8760                              h->root.root.string);
8761       bfd_set_error (bfd_error_bad_value);
8762       return FALSE;
8763     }
8764
8765   /* We must allocate the symbol in our .dynbss section, which will
8766      become part of the .bss section of the executable.  There will be
8767      an entry for this symbol in the .dynsym section.  The dynamic
8768      object will contain position independent code, so all references
8769      from the dynamic object to this symbol will go through the global
8770      offset table.  The dynamic linker will use the .dynsym entry to
8771      determine the address it must put in the global offset table, so
8772      both the dynamic object and the regular object will refer to the
8773      same memory location for the variable.  */
8774
8775   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8776     {
8777       if (htab->is_vxworks)
8778         htab->srelbss->size += sizeof (Elf32_External_Rela);
8779       else
8780         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8781       h->needs_copy = 1;
8782     }
8783
8784   /* All relocations against this symbol that could have been made
8785      dynamic will now refer to the local copy instead.  */
8786   hmips->possibly_dynamic_relocs = 0;
8787
8788   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
8789 }
8790 \f
8791 /* This function is called after all the input files have been read,
8792    and the input sections have been assigned to output sections.  We
8793    check for any mips16 stub sections that we can discard.  */
8794
8795 bfd_boolean
8796 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
8797                                     struct bfd_link_info *info)
8798 {
8799   asection *ri;
8800   struct mips_elf_link_hash_table *htab;
8801   struct mips_htab_traverse_info hti;
8802
8803   htab = mips_elf_hash_table (info);
8804   BFD_ASSERT (htab != NULL);
8805
8806   /* The .reginfo section has a fixed size.  */
8807   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8808   if (ri != NULL)
8809     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
8810
8811   hti.info = info;
8812   hti.output_bfd = output_bfd;
8813   hti.error = FALSE;
8814   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8815                                mips_elf_check_symbols, &hti);
8816   if (hti.error)
8817     return FALSE;
8818
8819   return TRUE;
8820 }
8821
8822 /* If the link uses a GOT, lay it out and work out its size.  */
8823
8824 static bfd_boolean
8825 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8826 {
8827   bfd *dynobj;
8828   asection *s;
8829   struct mips_got_info *g;
8830   bfd_size_type loadable_size = 0;
8831   bfd_size_type page_gotno;
8832   bfd *sub;
8833   struct mips_elf_count_tls_arg count_tls_arg;
8834   struct mips_elf_link_hash_table *htab;
8835
8836   htab = mips_elf_hash_table (info);
8837   BFD_ASSERT (htab != NULL);
8838
8839   s = htab->sgot;
8840   if (s == NULL)
8841     return TRUE;
8842
8843   dynobj = elf_hash_table (info)->dynobj;
8844   g = htab->got_info;
8845
8846   /* Allocate room for the reserved entries.  VxWorks always reserves
8847      3 entries; other objects only reserve 2 entries.  */
8848   BFD_ASSERT (g->assigned_gotno == 0);
8849   if (htab->is_vxworks)
8850     htab->reserved_gotno = 3;
8851   else
8852     htab->reserved_gotno = 2;
8853   g->local_gotno += htab->reserved_gotno;
8854   g->assigned_gotno = htab->reserved_gotno;
8855
8856   /* Replace entries for indirect and warning symbols with entries for
8857      the target symbol.  */
8858   if (!mips_elf_resolve_final_got_entries (g))
8859     return FALSE;
8860
8861   /* Count the number of GOT symbols.  */
8862   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
8863
8864   /* Calculate the total loadable size of the output.  That
8865      will give us the maximum number of GOT_PAGE entries
8866      required.  */
8867   for (sub = info->input_bfds; sub; sub = sub->link_next)
8868     {
8869       asection *subsection;
8870
8871       for (subsection = sub->sections;
8872            subsection;
8873            subsection = subsection->next)
8874         {
8875           if ((subsection->flags & SEC_ALLOC) == 0)
8876             continue;
8877           loadable_size += ((subsection->size + 0xf)
8878                             &~ (bfd_size_type) 0xf);
8879         }
8880     }
8881
8882   if (htab->is_vxworks)
8883     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
8884        relocations against local symbols evaluate to "G", and the EABI does
8885        not include R_MIPS_GOT_PAGE.  */
8886     page_gotno = 0;
8887   else
8888     /* Assume there are two loadable segments consisting of contiguous
8889        sections.  Is 5 enough?  */
8890     page_gotno = (loadable_size >> 16) + 5;
8891
8892   /* Choose the smaller of the two estimates; both are intended to be
8893      conservative.  */
8894   if (page_gotno > g->page_gotno)
8895     page_gotno = g->page_gotno;
8896
8897   g->local_gotno += page_gotno;
8898   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8899   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8900
8901   /* We need to calculate tls_gotno for global symbols at this point
8902      instead of building it up earlier, to avoid doublecounting
8903      entries for one global symbol from multiple input files.  */
8904   count_tls_arg.info = info;
8905   count_tls_arg.needed = 0;
8906   elf_link_hash_traverse (elf_hash_table (info),
8907                           mips_elf_count_global_tls_entries,
8908                           &count_tls_arg);
8909   g->tls_gotno += count_tls_arg.needed;
8910   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8911
8912   /* VxWorks does not support multiple GOTs.  It initializes $gp to
8913      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8914      dynamic loader.  */
8915   if (htab->is_vxworks)
8916     {
8917       /* VxWorks executables do not need a GOT.  */
8918       if (info->shared)
8919         {
8920           /* Each VxWorks GOT entry needs an explicit relocation.  */
8921           unsigned int count;
8922
8923           count = g->global_gotno + g->local_gotno - htab->reserved_gotno;
8924           if (count)
8925             mips_elf_allocate_dynamic_relocations (dynobj, info, count);
8926         }
8927     }
8928   else if (s->size > MIPS_ELF_GOT_MAX_SIZE (info))
8929     {
8930       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
8931         return FALSE;
8932     }
8933   else
8934     {
8935       struct mips_elf_count_tls_arg arg;
8936
8937       /* Set up TLS entries.  */
8938       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8939       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
8940
8941       /* Allocate room for the TLS relocations.  */
8942       arg.info = info;
8943       arg.needed = 0;
8944       htab_traverse (g->got_entries, mips_elf_count_local_tls_relocs, &arg);
8945       elf_link_hash_traverse (elf_hash_table (info),
8946                               mips_elf_count_global_tls_relocs,
8947                               &arg);
8948       if (arg.needed)
8949         mips_elf_allocate_dynamic_relocations (dynobj, info, arg.needed);
8950     }
8951
8952   return TRUE;
8953 }
8954
8955 /* Estimate the size of the .MIPS.stubs section.  */
8956
8957 static void
8958 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
8959 {
8960   struct mips_elf_link_hash_table *htab;
8961   bfd_size_type dynsymcount;
8962
8963   htab = mips_elf_hash_table (info);
8964   BFD_ASSERT (htab != NULL);
8965
8966   if (htab->lazy_stub_count == 0)
8967     return;
8968
8969   /* IRIX rld assumes that a function stub isn't at the end of the .text
8970      section, so add a dummy entry to the end.  */
8971   htab->lazy_stub_count++;
8972
8973   /* Get a worst-case estimate of the number of dynamic symbols needed.
8974      At this point, dynsymcount does not account for section symbols
8975      and count_section_dynsyms may overestimate the number that will
8976      be needed.  */
8977   dynsymcount = (elf_hash_table (info)->dynsymcount
8978                  + count_section_dynsyms (output_bfd, info));
8979
8980   /* Determine the size of one stub entry.  */
8981   htab->function_stub_size = (dynsymcount > 0x10000
8982                               ? MIPS_FUNCTION_STUB_BIG_SIZE
8983                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
8984
8985   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
8986 }
8987
8988 /* A mips_elf_link_hash_traverse callback for which DATA points to the
8989    MIPS hash table.  If H needs a traditional MIPS lazy-binding stub,
8990    allocate an entry in the stubs section.  */
8991
8992 static bfd_boolean
8993 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data)
8994 {
8995   struct mips_elf_link_hash_table *htab;
8996
8997   htab = (struct mips_elf_link_hash_table *) data;
8998   if (h->needs_lazy_stub)
8999     {
9000       h->root.root.u.def.section = htab->sstubs;
9001       h->root.root.u.def.value = htab->sstubs->size;
9002       h->root.plt.offset = htab->sstubs->size;
9003       htab->sstubs->size += htab->function_stub_size;
9004     }
9005   return TRUE;
9006 }
9007
9008 /* Allocate offsets in the stubs section to each symbol that needs one.
9009    Set the final size of the .MIPS.stub section.  */
9010
9011 static void
9012 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9013 {
9014   struct mips_elf_link_hash_table *htab;
9015
9016   htab = mips_elf_hash_table (info);
9017   BFD_ASSERT (htab != NULL);
9018
9019   if (htab->lazy_stub_count == 0)
9020     return;
9021
9022   htab->sstubs->size = 0;
9023   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
9024   htab->sstubs->size += htab->function_stub_size;
9025   BFD_ASSERT (htab->sstubs->size
9026               == htab->lazy_stub_count * htab->function_stub_size);
9027 }
9028
9029 /* Set the sizes of the dynamic sections.  */
9030
9031 bfd_boolean
9032 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9033                                      struct bfd_link_info *info)
9034 {
9035   bfd *dynobj;
9036   asection *s, *sreldyn;
9037   bfd_boolean reltext;
9038   struct mips_elf_link_hash_table *htab;
9039
9040   htab = mips_elf_hash_table (info);
9041   BFD_ASSERT (htab != NULL);
9042   dynobj = elf_hash_table (info)->dynobj;
9043   BFD_ASSERT (dynobj != NULL);
9044
9045   if (elf_hash_table (info)->dynamic_sections_created)
9046     {
9047       /* Set the contents of the .interp section to the interpreter.  */
9048       if (info->executable)
9049         {
9050           s = bfd_get_linker_section (dynobj, ".interp");
9051           BFD_ASSERT (s != NULL);
9052           s->size
9053             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9054           s->contents
9055             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9056         }
9057
9058       /* Create a symbol for the PLT, if we know that we are using it.  */
9059       if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
9060         {
9061           struct elf_link_hash_entry *h;
9062
9063           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9064
9065           h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9066                                            "_PROCEDURE_LINKAGE_TABLE_");
9067           htab->root.hplt = h;
9068           if (h == NULL)
9069             return FALSE;
9070           h->type = STT_FUNC;
9071         }
9072     }
9073
9074   /* Allocate space for global sym dynamic relocs.  */
9075   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9076
9077   mips_elf_estimate_stub_size (output_bfd, info);
9078
9079   if (!mips_elf_lay_out_got (output_bfd, info))
9080     return FALSE;
9081
9082   mips_elf_lay_out_lazy_stubs (info);
9083
9084   /* The check_relocs and adjust_dynamic_symbol entry points have
9085      determined the sizes of the various dynamic sections.  Allocate
9086      memory for them.  */
9087   reltext = FALSE;
9088   for (s = dynobj->sections; s != NULL; s = s->next)
9089     {
9090       const char *name;
9091
9092       /* It's OK to base decisions on the section name, because none
9093          of the dynobj section names depend upon the input files.  */
9094       name = bfd_get_section_name (dynobj, s);
9095
9096       if ((s->flags & SEC_LINKER_CREATED) == 0)
9097         continue;
9098
9099       if (CONST_STRNEQ (name, ".rel"))
9100         {
9101           if (s->size != 0)
9102             {
9103               const char *outname;
9104               asection *target;
9105
9106               /* If this relocation section applies to a read only
9107                  section, then we probably need a DT_TEXTREL entry.
9108                  If the relocation section is .rel(a).dyn, we always
9109                  assert a DT_TEXTREL entry rather than testing whether
9110                  there exists a relocation to a read only section or
9111                  not.  */
9112               outname = bfd_get_section_name (output_bfd,
9113                                               s->output_section);
9114               target = bfd_get_section_by_name (output_bfd, outname + 4);
9115               if ((target != NULL
9116                    && (target->flags & SEC_READONLY) != 0
9117                    && (target->flags & SEC_ALLOC) != 0)
9118                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9119                 reltext = TRUE;
9120
9121               /* We use the reloc_count field as a counter if we need
9122                  to copy relocs into the output file.  */
9123               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9124                 s->reloc_count = 0;
9125
9126               /* If combreloc is enabled, elf_link_sort_relocs() will
9127                  sort relocations, but in a different way than we do,
9128                  and before we're done creating relocations.  Also, it
9129                  will move them around between input sections'
9130                  relocation's contents, so our sorting would be
9131                  broken, so don't let it run.  */
9132               info->combreloc = 0;
9133             }
9134         }
9135       else if (! info->shared
9136                && ! mips_elf_hash_table (info)->use_rld_obj_head
9137                && CONST_STRNEQ (name, ".rld_map"))
9138         {
9139           /* We add a room for __rld_map.  It will be filled in by the
9140              rtld to contain a pointer to the _r_debug structure.  */
9141           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9142         }
9143       else if (SGI_COMPAT (output_bfd)
9144                && CONST_STRNEQ (name, ".compact_rel"))
9145         s->size += mips_elf_hash_table (info)->compact_rel_size;
9146       else if (s == htab->splt)
9147         {
9148           /* If the last PLT entry has a branch delay slot, allocate
9149              room for an extra nop to fill the delay slot.  This is
9150              for CPUs without load interlocking.  */
9151           if (! LOAD_INTERLOCKS_P (output_bfd)
9152               && ! htab->is_vxworks && s->size > 0)
9153             s->size += 4;
9154         }
9155       else if (! CONST_STRNEQ (name, ".init")
9156                && s != htab->sgot
9157                && s != htab->sgotplt
9158                && s != htab->sstubs
9159                && s != htab->sdynbss)
9160         {
9161           /* It's not one of our sections, so don't allocate space.  */
9162           continue;
9163         }
9164
9165       if (s->size == 0)
9166         {
9167           s->flags |= SEC_EXCLUDE;
9168           continue;
9169         }
9170
9171       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9172         continue;
9173
9174       /* Allocate memory for the section contents.  */
9175       s->contents = bfd_zalloc (dynobj, s->size);
9176       if (s->contents == NULL)
9177         {
9178           bfd_set_error (bfd_error_no_memory);
9179           return FALSE;
9180         }
9181     }
9182
9183   if (elf_hash_table (info)->dynamic_sections_created)
9184     {
9185       /* Add some entries to the .dynamic section.  We fill in the
9186          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9187          must add the entries now so that we get the correct size for
9188          the .dynamic section.  */
9189
9190       /* SGI object has the equivalence of DT_DEBUG in the
9191          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9192          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and GDB only
9193          looks at the first one it sees.  */
9194       if (!info->shared
9195           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9196         return FALSE;
9197
9198       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9199          used by the debugger.  */
9200       if (info->executable
9201           && !SGI_COMPAT (output_bfd)
9202           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9203         return FALSE;
9204
9205       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9206         info->flags |= DF_TEXTREL;
9207
9208       if ((info->flags & DF_TEXTREL) != 0)
9209         {
9210           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9211             return FALSE;
9212
9213           /* Clear the DF_TEXTREL flag.  It will be set again if we
9214              write out an actual text relocation; we may not, because
9215              at this point we do not know whether e.g. any .eh_frame
9216              absolute relocations have been converted to PC-relative.  */
9217           info->flags &= ~DF_TEXTREL;
9218         }
9219
9220       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9221         return FALSE;
9222
9223       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9224       if (htab->is_vxworks)
9225         {
9226           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9227              use any of the DT_MIPS_* tags.  */
9228           if (sreldyn && sreldyn->size > 0)
9229             {
9230               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9231                 return FALSE;
9232
9233               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9234                 return FALSE;
9235
9236               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9237                 return FALSE;
9238             }
9239         }
9240       else
9241         {
9242           if (sreldyn && sreldyn->size > 0)
9243             {
9244               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9245                 return FALSE;
9246
9247               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9248                 return FALSE;
9249
9250               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9251                 return FALSE;
9252             }
9253
9254           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9255             return FALSE;
9256
9257           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9258             return FALSE;
9259
9260           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9261             return FALSE;
9262
9263           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9264             return FALSE;
9265
9266           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9267             return FALSE;
9268
9269           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9270             return FALSE;
9271
9272           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9273             return FALSE;
9274
9275           if (IRIX_COMPAT (dynobj) == ict_irix5
9276               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9277             return FALSE;
9278
9279           if (IRIX_COMPAT (dynobj) == ict_irix6
9280               && (bfd_get_section_by_name
9281                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9282               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9283             return FALSE;
9284         }
9285       if (htab->splt->size > 0)
9286         {
9287           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9288             return FALSE;
9289
9290           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9291             return FALSE;
9292
9293           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9294             return FALSE;
9295
9296           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9297             return FALSE;
9298         }
9299       if (htab->is_vxworks
9300           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9301         return FALSE;
9302     }
9303
9304   return TRUE;
9305 }
9306 \f
9307 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9308    Adjust its R_ADDEND field so that it is correct for the output file.
9309    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9310    and sections respectively; both use symbol indexes.  */
9311
9312 static void
9313 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9314                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9315                         asection **local_sections, Elf_Internal_Rela *rel)
9316 {
9317   unsigned int r_type, r_symndx;
9318   Elf_Internal_Sym *sym;
9319   asection *sec;
9320
9321   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9322     {
9323       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9324       if (gprel16_reloc_p (r_type)
9325           || r_type == R_MIPS_GPREL32
9326           || literal_reloc_p (r_type))
9327         {
9328           rel->r_addend += _bfd_get_gp_value (input_bfd);
9329           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9330         }
9331
9332       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9333       sym = local_syms + r_symndx;
9334
9335       /* Adjust REL's addend to account for section merging.  */
9336       if (!info->relocatable)
9337         {
9338           sec = local_sections[r_symndx];
9339           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9340         }
9341
9342       /* This would normally be done by the rela_normal code in elflink.c.  */
9343       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9344         rel->r_addend += local_sections[r_symndx]->output_offset;
9345     }
9346 }
9347
9348 /* Handle relocations against symbols from removed linkonce sections,
9349    or sections discarded by a linker script.  We use this wrapper around
9350    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9351    on 64-bit ELF targets.  In this case for any relocation handled, which
9352    always be the first in a triplet, the remaining two have to be processed
9353    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9354    index referred by the first reloc that applies to all the three and the
9355    remaining two never refer to an object symbol.  And it is the final
9356    relocation (the last non-null one) that determines the output field of
9357    the whole relocation so retrieve the corresponding howto structure for
9358    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9359
9360    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9361    and therefore requires to be pasted in a loop.  It also defines a block
9362    and does not protect any of its arguments, hence the extra brackets.  */
9363
9364 static void
9365 mips_reloc_against_discarded_section (bfd *output_bfd,
9366                                       struct bfd_link_info *info,
9367                                       bfd *input_bfd, asection *input_section,
9368                                       Elf_Internal_Rela **rel,
9369                                       const Elf_Internal_Rela **relend,
9370                                       bfd_boolean rel_reloc,
9371                                       reloc_howto_type *howto,
9372                                       bfd_byte *contents)
9373 {
9374   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9375   int count = bed->s->int_rels_per_ext_rel;
9376   unsigned int r_type;
9377   int i;
9378
9379   for (i = count - 1; i > 0; i--)
9380     {
9381       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9382       if (r_type != R_MIPS_NONE)
9383         {
9384           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9385           break;
9386         }
9387     }
9388   do
9389     {
9390        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9391                                         (*rel), count, (*relend),
9392                                         howto, i, contents);
9393     }
9394   while (0);
9395 }
9396
9397 /* Relocate a MIPS ELF section.  */
9398
9399 bfd_boolean
9400 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9401                                 bfd *input_bfd, asection *input_section,
9402                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
9403                                 Elf_Internal_Sym *local_syms,
9404                                 asection **local_sections)
9405 {
9406   Elf_Internal_Rela *rel;
9407   const Elf_Internal_Rela *relend;
9408   bfd_vma addend = 0;
9409   bfd_boolean use_saved_addend_p = FALSE;
9410   const struct elf_backend_data *bed;
9411
9412   bed = get_elf_backend_data (output_bfd);
9413   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9414   for (rel = relocs; rel < relend; ++rel)
9415     {
9416       const char *name;
9417       bfd_vma value = 0;
9418       reloc_howto_type *howto;
9419       bfd_boolean cross_mode_jump_p;
9420       /* TRUE if the relocation is a RELA relocation, rather than a
9421          REL relocation.  */
9422       bfd_boolean rela_relocation_p = TRUE;
9423       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9424       const char *msg;
9425       unsigned long r_symndx;
9426       asection *sec;
9427       Elf_Internal_Shdr *symtab_hdr;
9428       struct elf_link_hash_entry *h;
9429       bfd_boolean rel_reloc;
9430
9431       rel_reloc = (NEWABI_P (input_bfd)
9432                    && mips_elf_rel_relocation_p (input_bfd, input_section,
9433                                                  relocs, rel));
9434       /* Find the relocation howto for this relocation.  */
9435       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9436
9437       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
9438       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9439       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9440         {
9441           sec = local_sections[r_symndx];
9442           h = NULL;
9443         }
9444       else
9445         {
9446           unsigned long extsymoff;
9447
9448           extsymoff = 0;
9449           if (!elf_bad_symtab (input_bfd))
9450             extsymoff = symtab_hdr->sh_info;
9451           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9452           while (h->root.type == bfd_link_hash_indirect
9453                  || h->root.type == bfd_link_hash_warning)
9454             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9455
9456           sec = NULL;
9457           if (h->root.type == bfd_link_hash_defined
9458               || h->root.type == bfd_link_hash_defweak)
9459             sec = h->root.u.def.section;
9460         }
9461
9462       if (sec != NULL && discarded_section (sec))
9463         {
9464           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
9465                                                 input_section, &rel, &relend,
9466                                                 rel_reloc, howto, contents);
9467           continue;
9468         }
9469
9470       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
9471         {
9472           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
9473              64-bit code, but make sure all their addresses are in the
9474              lowermost or uppermost 32-bit section of the 64-bit address
9475              space.  Thus, when they use an R_MIPS_64 they mean what is
9476              usually meant by R_MIPS_32, with the exception that the
9477              stored value is sign-extended to 64 bits.  */
9478           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
9479
9480           /* On big-endian systems, we need to lie about the position
9481              of the reloc.  */
9482           if (bfd_big_endian (input_bfd))
9483             rel->r_offset += 4;
9484         }
9485
9486       if (!use_saved_addend_p)
9487         {
9488           /* If these relocations were originally of the REL variety,
9489              we must pull the addend out of the field that will be
9490              relocated.  Otherwise, we simply use the contents of the
9491              RELA relocation.  */
9492           if (mips_elf_rel_relocation_p (input_bfd, input_section,
9493                                          relocs, rel))
9494             {
9495               rela_relocation_p = FALSE;
9496               addend = mips_elf_read_rel_addend (input_bfd, rel,
9497                                                  howto, contents);
9498               if (hi16_reloc_p (r_type)
9499                   || (got16_reloc_p (r_type)
9500                       && mips_elf_local_relocation_p (input_bfd, rel,
9501                                                       local_sections)))
9502                 {
9503                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9504                                                      contents, &addend))
9505                     {
9506                       if (h)
9507                         name = h->root.root.string;
9508                       else
9509                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9510                                                  local_syms + r_symndx,
9511                                                  sec);
9512                       (*_bfd_error_handler)
9513                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9514                          input_bfd, input_section, name, howto->name,
9515                          rel->r_offset);
9516                     }
9517                 }
9518               else
9519                 addend <<= howto->rightshift;
9520             }
9521           else
9522             addend = rel->r_addend;
9523           mips_elf_adjust_addend (output_bfd, info, input_bfd,
9524                                   local_syms, local_sections, rel);
9525         }
9526
9527       if (info->relocatable)
9528         {
9529           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
9530               && bfd_big_endian (input_bfd))
9531             rel->r_offset -= 4;
9532
9533           if (!rela_relocation_p && rel->r_addend)
9534             {
9535               addend += rel->r_addend;
9536               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
9537                 addend = mips_elf_high (addend);
9538               else if (r_type == R_MIPS_HIGHER)
9539                 addend = mips_elf_higher (addend);
9540               else if (r_type == R_MIPS_HIGHEST)
9541                 addend = mips_elf_highest (addend);
9542               else
9543                 addend >>= howto->rightshift;
9544
9545               /* We use the source mask, rather than the destination
9546                  mask because the place to which we are writing will be
9547                  source of the addend in the final link.  */
9548               addend &= howto->src_mask;
9549
9550               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9551                 /* See the comment above about using R_MIPS_64 in the 32-bit
9552                    ABI.  Here, we need to update the addend.  It would be
9553                    possible to get away with just using the R_MIPS_32 reloc
9554                    but for endianness.  */
9555                 {
9556                   bfd_vma sign_bits;
9557                   bfd_vma low_bits;
9558                   bfd_vma high_bits;
9559
9560                   if (addend & ((bfd_vma) 1 << 31))
9561 #ifdef BFD64
9562                     sign_bits = ((bfd_vma) 1 << 32) - 1;
9563 #else
9564                     sign_bits = -1;
9565 #endif
9566                   else
9567                     sign_bits = 0;
9568
9569                   /* If we don't know that we have a 64-bit type,
9570                      do two separate stores.  */
9571                   if (bfd_big_endian (input_bfd))
9572                     {
9573                       /* Store the sign-bits (which are most significant)
9574                          first.  */
9575                       low_bits = sign_bits;
9576                       high_bits = addend;
9577                     }
9578                   else
9579                     {
9580                       low_bits = addend;
9581                       high_bits = sign_bits;
9582                     }
9583                   bfd_put_32 (input_bfd, low_bits,
9584                               contents + rel->r_offset);
9585                   bfd_put_32 (input_bfd, high_bits,
9586                               contents + rel->r_offset + 4);
9587                   continue;
9588                 }
9589
9590               if (! mips_elf_perform_relocation (info, howto, rel, addend,
9591                                                  input_bfd, input_section,
9592                                                  contents, FALSE))
9593                 return FALSE;
9594             }
9595
9596           /* Go on to the next relocation.  */
9597           continue;
9598         }
9599
9600       /* In the N32 and 64-bit ABIs there may be multiple consecutive
9601          relocations for the same offset.  In that case we are
9602          supposed to treat the output of each relocation as the addend
9603          for the next.  */
9604       if (rel + 1 < relend
9605           && rel->r_offset == rel[1].r_offset
9606           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
9607         use_saved_addend_p = TRUE;
9608       else
9609         use_saved_addend_p = FALSE;
9610
9611       /* Figure out what value we are supposed to relocate.  */
9612       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9613                                              input_section, info, rel,
9614                                              addend, howto, local_syms,
9615                                              local_sections, &value,
9616                                              &name, &cross_mode_jump_p,
9617                                              use_saved_addend_p))
9618         {
9619         case bfd_reloc_continue:
9620           /* There's nothing to do.  */
9621           continue;
9622
9623         case bfd_reloc_undefined:
9624           /* mips_elf_calculate_relocation already called the
9625              undefined_symbol callback.  There's no real point in
9626              trying to perform the relocation at this point, so we
9627              just skip ahead to the next relocation.  */
9628           continue;
9629
9630         case bfd_reloc_notsupported:
9631           msg = _("internal error: unsupported relocation error");
9632           info->callbacks->warning
9633             (info, msg, name, input_bfd, input_section, rel->r_offset);
9634           return FALSE;
9635
9636         case bfd_reloc_overflow:
9637           if (use_saved_addend_p)
9638             /* Ignore overflow until we reach the last relocation for
9639                a given location.  */
9640             ;
9641           else
9642             {
9643               struct mips_elf_link_hash_table *htab;
9644
9645               htab = mips_elf_hash_table (info);
9646               BFD_ASSERT (htab != NULL);
9647               BFD_ASSERT (name != NULL);
9648               if (!htab->small_data_overflow_reported
9649                   && (gprel16_reloc_p (howto->type)
9650                       || literal_reloc_p (howto->type)))
9651                 {
9652                   msg = _("small-data section exceeds 64KB;"
9653                           " lower small-data size limit (see option -G)");
9654
9655                   htab->small_data_overflow_reported = TRUE;
9656                   (*info->callbacks->einfo) ("%P: %s\n", msg);
9657                 }
9658               if (! ((*info->callbacks->reloc_overflow)
9659                      (info, NULL, name, howto->name, (bfd_vma) 0,
9660                       input_bfd, input_section, rel->r_offset)))
9661                 return FALSE;
9662             }
9663           break;
9664
9665         case bfd_reloc_ok:
9666           break;
9667
9668         case bfd_reloc_outofrange:
9669           if (jal_reloc_p (howto->type))
9670             {
9671               msg = _("JALX to a non-word-aligned address");
9672               info->callbacks->warning
9673                 (info, msg, name, input_bfd, input_section, rel->r_offset);
9674               return FALSE;
9675             }
9676           /* Fall through.  */
9677
9678         default:
9679           abort ();
9680           break;
9681         }
9682
9683       /* If we've got another relocation for the address, keep going
9684          until we reach the last one.  */
9685       if (use_saved_addend_p)
9686         {
9687           addend = value;
9688           continue;
9689         }
9690
9691       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9692         /* See the comment above about using R_MIPS_64 in the 32-bit
9693            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
9694            that calculated the right value.  Now, however, we
9695            sign-extend the 32-bit result to 64-bits, and store it as a
9696            64-bit value.  We are especially generous here in that we
9697            go to extreme lengths to support this usage on systems with
9698            only a 32-bit VMA.  */
9699         {
9700           bfd_vma sign_bits;
9701           bfd_vma low_bits;
9702           bfd_vma high_bits;
9703
9704           if (value & ((bfd_vma) 1 << 31))
9705 #ifdef BFD64
9706             sign_bits = ((bfd_vma) 1 << 32) - 1;
9707 #else
9708             sign_bits = -1;
9709 #endif
9710           else
9711             sign_bits = 0;
9712
9713           /* If we don't know that we have a 64-bit type,
9714              do two separate stores.  */
9715           if (bfd_big_endian (input_bfd))
9716             {
9717               /* Undo what we did above.  */
9718               rel->r_offset -= 4;
9719               /* Store the sign-bits (which are most significant)
9720                  first.  */
9721               low_bits = sign_bits;
9722               high_bits = value;
9723             }
9724           else
9725             {
9726               low_bits = value;
9727               high_bits = sign_bits;
9728             }
9729           bfd_put_32 (input_bfd, low_bits,
9730                       contents + rel->r_offset);
9731           bfd_put_32 (input_bfd, high_bits,
9732                       contents + rel->r_offset + 4);
9733           continue;
9734         }
9735
9736       /* Actually perform the relocation.  */
9737       if (! mips_elf_perform_relocation (info, howto, rel, value,
9738                                          input_bfd, input_section,
9739                                          contents, cross_mode_jump_p))
9740         return FALSE;
9741     }
9742
9743   return TRUE;
9744 }
9745 \f
9746 /* A function that iterates over each entry in la25_stubs and fills
9747    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
9748
9749 static int
9750 mips_elf_create_la25_stub (void **slot, void *data)
9751 {
9752   struct mips_htab_traverse_info *hti;
9753   struct mips_elf_link_hash_table *htab;
9754   struct mips_elf_la25_stub *stub;
9755   asection *s;
9756   bfd_byte *loc;
9757   bfd_vma offset, target, target_high, target_low;
9758
9759   stub = (struct mips_elf_la25_stub *) *slot;
9760   hti = (struct mips_htab_traverse_info *) data;
9761   htab = mips_elf_hash_table (hti->info);
9762   BFD_ASSERT (htab != NULL);
9763
9764   /* Create the section contents, if we haven't already.  */
9765   s = stub->stub_section;
9766   loc = s->contents;
9767   if (loc == NULL)
9768     {
9769       loc = bfd_malloc (s->size);
9770       if (loc == NULL)
9771         {
9772           hti->error = TRUE;
9773           return FALSE;
9774         }
9775       s->contents = loc;
9776     }
9777
9778   /* Work out where in the section this stub should go.  */
9779   offset = stub->offset;
9780
9781   /* Work out the target address.  */
9782   target = mips_elf_get_la25_target (stub, &s);
9783   target += s->output_section->vma + s->output_offset;
9784
9785   target_high = ((target + 0x8000) >> 16) & 0xffff;
9786   target_low = (target & 0xffff);
9787
9788   if (stub->stub_section != htab->strampoline)
9789     {
9790       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
9791          of the section and write the two instructions at the end.  */
9792       memset (loc, 0, offset);
9793       loc += offset;
9794       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9795         {
9796           bfd_put_micromips_32 (hti->output_bfd,
9797                                 LA25_LUI_MICROMIPS (target_high),
9798                                 loc);
9799           bfd_put_micromips_32 (hti->output_bfd,
9800                                 LA25_ADDIU_MICROMIPS (target_low),
9801                                 loc + 4);
9802         }
9803       else
9804         {
9805           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9806           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9807         }
9808     }
9809   else
9810     {
9811       /* This is trampoline.  */
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), loc);
9817           bfd_put_micromips_32 (hti->output_bfd,
9818                                 LA25_J_MICROMIPS (target), loc + 4);
9819           bfd_put_micromips_32 (hti->output_bfd,
9820                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
9821           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9822         }
9823       else
9824         {
9825           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9826           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9827           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9828           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9829         }
9830     }
9831   return TRUE;
9832 }
9833
9834 /* If NAME is one of the special IRIX6 symbols defined by the linker,
9835    adjust it appropriately now.  */
9836
9837 static void
9838 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9839                                       const char *name, Elf_Internal_Sym *sym)
9840 {
9841   /* The linker script takes care of providing names and values for
9842      these, but we must place them into the right sections.  */
9843   static const char* const text_section_symbols[] = {
9844     "_ftext",
9845     "_etext",
9846     "__dso_displacement",
9847     "__elf_header",
9848     "__program_header_table",
9849     NULL
9850   };
9851
9852   static const char* const data_section_symbols[] = {
9853     "_fdata",
9854     "_edata",
9855     "_end",
9856     "_fbss",
9857     NULL
9858   };
9859
9860   const char* const *p;
9861   int i;
9862
9863   for (i = 0; i < 2; ++i)
9864     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9865          *p;
9866          ++p)
9867       if (strcmp (*p, name) == 0)
9868         {
9869           /* All of these symbols are given type STT_SECTION by the
9870              IRIX6 linker.  */
9871           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9872           sym->st_other = STO_PROTECTED;
9873
9874           /* The IRIX linker puts these symbols in special sections.  */
9875           if (i == 0)
9876             sym->st_shndx = SHN_MIPS_TEXT;
9877           else
9878             sym->st_shndx = SHN_MIPS_DATA;
9879
9880           break;
9881         }
9882 }
9883
9884 /* Finish up dynamic symbol handling.  We set the contents of various
9885    dynamic sections here.  */
9886
9887 bfd_boolean
9888 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9889                                      struct bfd_link_info *info,
9890                                      struct elf_link_hash_entry *h,
9891                                      Elf_Internal_Sym *sym)
9892 {
9893   bfd *dynobj;
9894   asection *sgot;
9895   struct mips_got_info *g, *gg;
9896   const char *name;
9897   int idx;
9898   struct mips_elf_link_hash_table *htab;
9899   struct mips_elf_link_hash_entry *hmips;
9900
9901   htab = mips_elf_hash_table (info);
9902   BFD_ASSERT (htab != NULL);
9903   dynobj = elf_hash_table (info)->dynobj;
9904   hmips = (struct mips_elf_link_hash_entry *) h;
9905
9906   BFD_ASSERT (!htab->is_vxworks);
9907
9908   if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9909     {
9910       /* We've decided to create a PLT entry for this symbol.  */
9911       bfd_byte *loc;
9912       bfd_vma header_address, plt_index, got_address;
9913       bfd_vma got_address_high, got_address_low, load;
9914       const bfd_vma *plt_entry;
9915
9916       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9917       BFD_ASSERT (h->dynindx != -1);
9918       BFD_ASSERT (htab->splt != NULL);
9919       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9920       BFD_ASSERT (!h->def_regular);
9921
9922       /* Calculate the address of the PLT header.  */
9923       header_address = (htab->splt->output_section->vma
9924                         + htab->splt->output_offset);
9925
9926       /* Calculate the index of the entry.  */
9927       plt_index = ((h->plt.offset - htab->plt_header_size)
9928                    / htab->plt_entry_size);
9929
9930       /* Calculate the address of the .got.plt entry.  */
9931       got_address = (htab->sgotplt->output_section->vma
9932                      + htab->sgotplt->output_offset
9933                      + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9934       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9935       got_address_low = got_address & 0xffff;
9936
9937       /* Initially point the .got.plt entry at the PLT header.  */
9938       loc = (htab->sgotplt->contents
9939              + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9940       if (ABI_64_P (output_bfd))
9941         bfd_put_64 (output_bfd, header_address, loc);
9942       else
9943         bfd_put_32 (output_bfd, header_address, loc);
9944
9945       /* Find out where the .plt entry should go.  */
9946       loc = htab->splt->contents + h->plt.offset;
9947
9948       /* Pick the load opcode.  */
9949       load = MIPS_ELF_LOAD_WORD (output_bfd);
9950
9951       /* Fill in the PLT entry itself.  */
9952       plt_entry = mips_exec_plt_entry;
9953       bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
9954       bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
9955
9956       if (! LOAD_INTERLOCKS_P (output_bfd))
9957         {
9958           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
9959           bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9960         }
9961       else
9962         {
9963           bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
9964           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
9965         }
9966
9967       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
9968       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
9969                                           plt_index, h->dynindx,
9970                                           R_MIPS_JUMP_SLOT, got_address);
9971
9972       /* We distinguish between PLT entries and lazy-binding stubs by
9973          giving the former an st_other value of STO_MIPS_PLT.  Set the
9974          flag and leave the value if there are any relocations in the
9975          binary where pointer equality matters.  */
9976       sym->st_shndx = SHN_UNDEF;
9977       if (h->pointer_equality_needed)
9978         sym->st_other = STO_MIPS_PLT;
9979       else
9980         sym->st_value = 0;
9981     }
9982   else if (h->plt.offset != MINUS_ONE)
9983     {
9984       /* We've decided to create a lazy-binding stub.  */
9985       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
9986
9987       /* This symbol has a stub.  Set it up.  */
9988
9989       BFD_ASSERT (h->dynindx != -1);
9990
9991       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9992                   || (h->dynindx <= 0xffff));
9993
9994       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
9995          sign extension at runtime in the stub, resulting in a negative
9996          index value.  */
9997       if (h->dynindx & ~0x7fffffff)
9998         return FALSE;
9999
10000       /* Fill the stub.  */
10001       idx = 0;
10002       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10003       idx += 4;
10004       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
10005       idx += 4;
10006       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10007         {
10008           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10009                       stub + idx);
10010           idx += 4;
10011         }
10012       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10013       idx += 4;
10014
10015       /* If a large stub is not required and sign extension is not a
10016          problem, then use legacy code in the stub.  */
10017       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10018         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
10019       else if (h->dynindx & ~0x7fff)
10020         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
10021       else
10022         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10023                     stub + idx);
10024
10025       BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
10026       memcpy (htab->sstubs->contents + h->plt.offset,
10027               stub, htab->function_stub_size);
10028
10029       /* Mark the symbol as undefined.  plt.offset != -1 occurs
10030          only for the referenced symbol.  */
10031       sym->st_shndx = SHN_UNDEF;
10032
10033       /* The run-time linker uses the st_value field of the symbol
10034          to reset the global offset table entry for this external
10035          to its stub address when unlinking a shared object.  */
10036       sym->st_value = (htab->sstubs->output_section->vma
10037                        + htab->sstubs->output_offset
10038                        + h->plt.offset);
10039     }
10040
10041   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10042      refer to the stub, since only the stub uses the standard calling
10043      conventions.  */
10044   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10045     {
10046       BFD_ASSERT (hmips->need_fn_stub);
10047       sym->st_value = (hmips->fn_stub->output_section->vma
10048                        + hmips->fn_stub->output_offset);
10049       sym->st_size = hmips->fn_stub->size;
10050       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10051     }
10052
10053   BFD_ASSERT (h->dynindx != -1
10054               || h->forced_local);
10055
10056   sgot = htab->sgot;
10057   g = htab->got_info;
10058   BFD_ASSERT (g != NULL);
10059
10060   /* Run through the global symbol table, creating GOT entries for all
10061      the symbols that need them.  */
10062   if (hmips->global_got_area != GGA_NONE)
10063     {
10064       bfd_vma offset;
10065       bfd_vma value;
10066
10067       value = sym->st_value;
10068       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10069                                           R_MIPS_GOT16, info);
10070       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10071     }
10072
10073   if (hmips->global_got_area != GGA_NONE && g->next && h->type != STT_TLS)
10074     {
10075       struct mips_got_entry e, *p;
10076       bfd_vma entry;
10077       bfd_vma offset;
10078
10079       gg = g;
10080
10081       e.abfd = output_bfd;
10082       e.symndx = -1;
10083       e.d.h = hmips;
10084       e.tls_type = 0;
10085
10086       for (g = g->next; g->next != gg; g = g->next)
10087         {
10088           if (g->got_entries
10089               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10090                                                            &e)))
10091             {
10092               offset = p->gotidx;
10093               if (info->shared
10094                   || (elf_hash_table (info)->dynamic_sections_created
10095                       && p->d.h != NULL
10096                       && p->d.h->root.def_dynamic
10097                       && !p->d.h->root.def_regular))
10098                 {
10099                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10100                      the various compatibility problems, it's easier to mock
10101                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10102                      mips_elf_create_dynamic_relocation to calculate the
10103                      appropriate addend.  */
10104                   Elf_Internal_Rela rel[3];
10105
10106                   memset (rel, 0, sizeof (rel));
10107                   if (ABI_64_P (output_bfd))
10108                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10109                   else
10110                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10111                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10112
10113                   entry = 0;
10114                   if (! (mips_elf_create_dynamic_relocation
10115                          (output_bfd, info, rel,
10116                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10117                     return FALSE;
10118                 }
10119               else
10120                 entry = sym->st_value;
10121               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10122             }
10123         }
10124     }
10125
10126   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10127   name = h->root.root.string;
10128   if (strcmp (name, "_DYNAMIC") == 0
10129       || h == elf_hash_table (info)->hgot)
10130     sym->st_shndx = SHN_ABS;
10131   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10132            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10133     {
10134       sym->st_shndx = SHN_ABS;
10135       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10136       sym->st_value = 1;
10137     }
10138   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10139     {
10140       sym->st_shndx = SHN_ABS;
10141       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10142       sym->st_value = elf_gp (output_bfd);
10143     }
10144   else if (SGI_COMPAT (output_bfd))
10145     {
10146       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10147           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10148         {
10149           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10150           sym->st_other = STO_PROTECTED;
10151           sym->st_value = 0;
10152           sym->st_shndx = SHN_MIPS_DATA;
10153         }
10154       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10155         {
10156           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10157           sym->st_other = STO_PROTECTED;
10158           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10159           sym->st_shndx = SHN_ABS;
10160         }
10161       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10162         {
10163           if (h->type == STT_FUNC)
10164             sym->st_shndx = SHN_MIPS_TEXT;
10165           else if (h->type == STT_OBJECT)
10166             sym->st_shndx = SHN_MIPS_DATA;
10167         }
10168     }
10169
10170   /* Emit a copy reloc, if needed.  */
10171   if (h->needs_copy)
10172     {
10173       asection *s;
10174       bfd_vma symval;
10175
10176       BFD_ASSERT (h->dynindx != -1);
10177       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10178
10179       s = mips_elf_rel_dyn_section (info, FALSE);
10180       symval = (h->root.u.def.section->output_section->vma
10181                 + h->root.u.def.section->output_offset
10182                 + h->root.u.def.value);
10183       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10184                                           h->dynindx, R_MIPS_COPY, symval);
10185     }
10186
10187   /* Handle the IRIX6-specific symbols.  */
10188   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10189     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10190
10191   /* Keep dynamic MIPS16 symbols odd.  This allows the dynamic linker to
10192      treat MIPS16 symbols like any other.  */
10193   if (ELF_ST_IS_MIPS16 (sym->st_other))
10194     {
10195       BFD_ASSERT (sym->st_value & 1);
10196       sym->st_other -= STO_MIPS16;
10197     }
10198
10199   return TRUE;
10200 }
10201
10202 /* Likewise, for VxWorks.  */
10203
10204 bfd_boolean
10205 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10206                                          struct bfd_link_info *info,
10207                                          struct elf_link_hash_entry *h,
10208                                          Elf_Internal_Sym *sym)
10209 {
10210   bfd *dynobj;
10211   asection *sgot;
10212   struct mips_got_info *g;
10213   struct mips_elf_link_hash_table *htab;
10214   struct mips_elf_link_hash_entry *hmips;
10215
10216   htab = mips_elf_hash_table (info);
10217   BFD_ASSERT (htab != NULL);
10218   dynobj = elf_hash_table (info)->dynobj;
10219   hmips = (struct mips_elf_link_hash_entry *) h;
10220
10221   if (h->plt.offset != (bfd_vma) -1)
10222     {
10223       bfd_byte *loc;
10224       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10225       Elf_Internal_Rela rel;
10226       static const bfd_vma *plt_entry;
10227
10228       BFD_ASSERT (h->dynindx != -1);
10229       BFD_ASSERT (htab->splt != NULL);
10230       BFD_ASSERT (h->plt.offset <= htab->splt->size);
10231
10232       /* Calculate the address of the .plt entry.  */
10233       plt_address = (htab->splt->output_section->vma
10234                      + htab->splt->output_offset
10235                      + h->plt.offset);
10236
10237       /* Calculate the index of the entry.  */
10238       plt_index = ((h->plt.offset - htab->plt_header_size)
10239                    / htab->plt_entry_size);
10240
10241       /* Calculate the address of the .got.plt entry.  */
10242       got_address = (htab->sgotplt->output_section->vma
10243                      + htab->sgotplt->output_offset
10244                      + plt_index * 4);
10245
10246       /* Calculate the offset of the .got.plt entry from
10247          _GLOBAL_OFFSET_TABLE_.  */
10248       got_offset = mips_elf_gotplt_index (info, h);
10249
10250       /* Calculate the offset for the branch at the start of the PLT
10251          entry.  The branch jumps to the beginning of .plt.  */
10252       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10253
10254       /* Fill in the initial value of the .got.plt entry.  */
10255       bfd_put_32 (output_bfd, plt_address,
10256                   htab->sgotplt->contents + plt_index * 4);
10257
10258       /* Find out where the .plt entry should go.  */
10259       loc = htab->splt->contents + h->plt.offset;
10260
10261       if (info->shared)
10262         {
10263           plt_entry = mips_vxworks_shared_plt_entry;
10264           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10265           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10266         }
10267       else
10268         {
10269           bfd_vma got_address_high, got_address_low;
10270
10271           plt_entry = mips_vxworks_exec_plt_entry;
10272           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10273           got_address_low = got_address & 0xffff;
10274
10275           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10276           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10277           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10278           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10279           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10280           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10281           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10282           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10283
10284           loc = (htab->srelplt2->contents
10285                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10286
10287           /* Emit a relocation for the .got.plt entry.  */
10288           rel.r_offset = got_address;
10289           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10290           rel.r_addend = h->plt.offset;
10291           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10292
10293           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
10294           loc += sizeof (Elf32_External_Rela);
10295           rel.r_offset = plt_address + 8;
10296           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10297           rel.r_addend = got_offset;
10298           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10299
10300           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
10301           loc += sizeof (Elf32_External_Rela);
10302           rel.r_offset += 4;
10303           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10304           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10305         }
10306
10307       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10308       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10309       rel.r_offset = got_address;
10310       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10311       rel.r_addend = 0;
10312       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10313
10314       if (!h->def_regular)
10315         sym->st_shndx = SHN_UNDEF;
10316     }
10317
10318   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10319
10320   sgot = htab->sgot;
10321   g = htab->got_info;
10322   BFD_ASSERT (g != NULL);
10323
10324   /* See if this symbol has an entry in the GOT.  */
10325   if (hmips->global_got_area != GGA_NONE)
10326     {
10327       bfd_vma offset;
10328       Elf_Internal_Rela outrel;
10329       bfd_byte *loc;
10330       asection *s;
10331
10332       /* Install the symbol value in the GOT.   */
10333       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10334                                           R_MIPS_GOT16, info);
10335       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10336
10337       /* Add a dynamic relocation for it.  */
10338       s = mips_elf_rel_dyn_section (info, FALSE);
10339       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10340       outrel.r_offset = (sgot->output_section->vma
10341                          + sgot->output_offset
10342                          + offset);
10343       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10344       outrel.r_addend = 0;
10345       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10346     }
10347
10348   /* Emit a copy reloc, if needed.  */
10349   if (h->needs_copy)
10350     {
10351       Elf_Internal_Rela rel;
10352
10353       BFD_ASSERT (h->dynindx != -1);
10354
10355       rel.r_offset = (h->root.u.def.section->output_section->vma
10356                       + h->root.u.def.section->output_offset
10357                       + h->root.u.def.value);
10358       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10359       rel.r_addend = 0;
10360       bfd_elf32_swap_reloca_out (output_bfd, &rel,
10361                                  htab->srelbss->contents
10362                                  + (htab->srelbss->reloc_count
10363                                     * sizeof (Elf32_External_Rela)));
10364       ++htab->srelbss->reloc_count;
10365     }
10366
10367   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
10368   if (ELF_ST_IS_COMPRESSED (sym->st_other))
10369     sym->st_value &= ~1;
10370
10371   return TRUE;
10372 }
10373
10374 /* Write out a plt0 entry to the beginning of .plt.  */
10375
10376 static void
10377 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10378 {
10379   bfd_byte *loc;
10380   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10381   static const bfd_vma *plt_entry;
10382   struct mips_elf_link_hash_table *htab;
10383
10384   htab = mips_elf_hash_table (info);
10385   BFD_ASSERT (htab != NULL);
10386
10387   if (ABI_64_P (output_bfd))
10388     plt_entry = mips_n64_exec_plt0_entry;
10389   else if (ABI_N32_P (output_bfd))
10390     plt_entry = mips_n32_exec_plt0_entry;
10391   else
10392     plt_entry = mips_o32_exec_plt0_entry;
10393
10394   /* Calculate the value of .got.plt.  */
10395   gotplt_value = (htab->sgotplt->output_section->vma
10396                   + htab->sgotplt->output_offset);
10397   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10398   gotplt_value_low = gotplt_value & 0xffff;
10399
10400   /* The PLT sequence is not safe for N64 if .got.plt's address can
10401      not be loaded in two instructions.  */
10402   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10403               || ~(gotplt_value | 0x7fffffff) == 0);
10404
10405   /* Install the PLT header.  */
10406   loc = htab->splt->contents;
10407   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10408   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10409   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10410   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10411   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10412   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10413   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10414   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10415 }
10416
10417 /* Install the PLT header for a VxWorks executable and finalize the
10418    contents of .rela.plt.unloaded.  */
10419
10420 static void
10421 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10422 {
10423   Elf_Internal_Rela rela;
10424   bfd_byte *loc;
10425   bfd_vma got_value, got_value_high, got_value_low, plt_address;
10426   static const bfd_vma *plt_entry;
10427   struct mips_elf_link_hash_table *htab;
10428
10429   htab = mips_elf_hash_table (info);
10430   BFD_ASSERT (htab != NULL);
10431
10432   plt_entry = mips_vxworks_exec_plt0_entry;
10433
10434   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
10435   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10436                + htab->root.hgot->root.u.def.section->output_offset
10437                + htab->root.hgot->root.u.def.value);
10438
10439   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10440   got_value_low = got_value & 0xffff;
10441
10442   /* Calculate the address of the PLT header.  */
10443   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10444
10445   /* Install the PLT header.  */
10446   loc = htab->splt->contents;
10447   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10448   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10449   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10450   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10451   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10452   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10453
10454   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10455   loc = htab->srelplt2->contents;
10456   rela.r_offset = plt_address;
10457   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10458   rela.r_addend = 0;
10459   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10460   loc += sizeof (Elf32_External_Rela);
10461
10462   /* Output the relocation for the following addiu of
10463      %lo(_GLOBAL_OFFSET_TABLE_).  */
10464   rela.r_offset += 4;
10465   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10466   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10467   loc += sizeof (Elf32_External_Rela);
10468
10469   /* Fix up the remaining relocations.  They may have the wrong
10470      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10471      in which symbols were output.  */
10472   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10473     {
10474       Elf_Internal_Rela rel;
10475
10476       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10477       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10478       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10479       loc += sizeof (Elf32_External_Rela);
10480
10481       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10482       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10483       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10484       loc += sizeof (Elf32_External_Rela);
10485
10486       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10487       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10488       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10489       loc += sizeof (Elf32_External_Rela);
10490     }
10491 }
10492
10493 /* Install the PLT header for a VxWorks shared library.  */
10494
10495 static void
10496 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10497 {
10498   unsigned int i;
10499   struct mips_elf_link_hash_table *htab;
10500
10501   htab = mips_elf_hash_table (info);
10502   BFD_ASSERT (htab != NULL);
10503
10504   /* We just need to copy the entry byte-by-byte.  */
10505   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10506     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10507                 htab->splt->contents + i * 4);
10508 }
10509
10510 /* Finish up the dynamic sections.  */
10511
10512 bfd_boolean
10513 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10514                                        struct bfd_link_info *info)
10515 {
10516   bfd *dynobj;
10517   asection *sdyn;
10518   asection *sgot;
10519   struct mips_got_info *gg, *g;
10520   struct mips_elf_link_hash_table *htab;
10521
10522   htab = mips_elf_hash_table (info);
10523   BFD_ASSERT (htab != NULL);
10524
10525   dynobj = elf_hash_table (info)->dynobj;
10526
10527   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
10528
10529   sgot = htab->sgot;
10530   gg = htab->got_info;
10531
10532   if (elf_hash_table (info)->dynamic_sections_created)
10533     {
10534       bfd_byte *b;
10535       int dyn_to_skip = 0, dyn_skipped = 0;
10536
10537       BFD_ASSERT (sdyn != NULL);
10538       BFD_ASSERT (gg != NULL);
10539
10540       g = mips_elf_got_for_ibfd (gg, output_bfd);
10541       BFD_ASSERT (g != NULL);
10542
10543       for (b = sdyn->contents;
10544            b < sdyn->contents + sdyn->size;
10545            b += MIPS_ELF_DYN_SIZE (dynobj))
10546         {
10547           Elf_Internal_Dyn dyn;
10548           const char *name;
10549           size_t elemsize;
10550           asection *s;
10551           bfd_boolean swap_out_p;
10552
10553           /* Read in the current dynamic entry.  */
10554           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10555
10556           /* Assume that we're going to modify it and write it out.  */
10557           swap_out_p = TRUE;
10558
10559           switch (dyn.d_tag)
10560             {
10561             case DT_RELENT:
10562               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10563               break;
10564
10565             case DT_RELAENT:
10566               BFD_ASSERT (htab->is_vxworks);
10567               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10568               break;
10569
10570             case DT_STRSZ:
10571               /* Rewrite DT_STRSZ.  */
10572               dyn.d_un.d_val =
10573                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10574               break;
10575
10576             case DT_PLTGOT:
10577               s = htab->sgot;
10578               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10579               break;
10580
10581             case DT_MIPS_PLTGOT:
10582               s = htab->sgotplt;
10583               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10584               break;
10585
10586             case DT_MIPS_RLD_VERSION:
10587               dyn.d_un.d_val = 1; /* XXX */
10588               break;
10589
10590             case DT_MIPS_FLAGS:
10591               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10592               break;
10593
10594             case DT_MIPS_TIME_STAMP:
10595               {
10596                 time_t t;
10597                 time (&t);
10598                 dyn.d_un.d_val = t;
10599               }
10600               break;
10601
10602             case DT_MIPS_ICHECKSUM:
10603               /* XXX FIXME: */
10604               swap_out_p = FALSE;
10605               break;
10606
10607             case DT_MIPS_IVERSION:
10608               /* XXX FIXME: */
10609               swap_out_p = FALSE;
10610               break;
10611
10612             case DT_MIPS_BASE_ADDRESS:
10613               s = output_bfd->sections;
10614               BFD_ASSERT (s != NULL);
10615               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10616               break;
10617
10618             case DT_MIPS_LOCAL_GOTNO:
10619               dyn.d_un.d_val = g->local_gotno;
10620               break;
10621
10622             case DT_MIPS_UNREFEXTNO:
10623               /* The index into the dynamic symbol table which is the
10624                  entry of the first external symbol that is not
10625                  referenced within the same object.  */
10626               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10627               break;
10628
10629             case DT_MIPS_GOTSYM:
10630               if (gg->global_gotsym)
10631                 {
10632                   dyn.d_un.d_val = gg->global_gotsym->dynindx;
10633                   break;
10634                 }
10635               /* In case if we don't have global got symbols we default
10636                  to setting DT_MIPS_GOTSYM to the same value as
10637                  DT_MIPS_SYMTABNO, so we just fall through.  */
10638
10639             case DT_MIPS_SYMTABNO:
10640               name = ".dynsym";
10641               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10642               s = bfd_get_section_by_name (output_bfd, name);
10643               BFD_ASSERT (s != NULL);
10644
10645               dyn.d_un.d_val = s->size / elemsize;
10646               break;
10647
10648             case DT_MIPS_HIPAGENO:
10649               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10650               break;
10651
10652             case DT_MIPS_RLD_MAP:
10653               {
10654                 struct elf_link_hash_entry *h;
10655                 h = mips_elf_hash_table (info)->rld_symbol;
10656                 if (!h)
10657                   {
10658                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10659                     swap_out_p = FALSE;
10660                     break;
10661                   }
10662                 s = h->root.u.def.section;
10663                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10664                                   + h->root.u.def.value);
10665               }
10666               break;
10667
10668             case DT_MIPS_OPTIONS:
10669               s = (bfd_get_section_by_name
10670                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10671               dyn.d_un.d_ptr = s->vma;
10672               break;
10673
10674             case DT_RELASZ:
10675               BFD_ASSERT (htab->is_vxworks);
10676               /* The count does not include the JUMP_SLOT relocations.  */
10677               if (htab->srelplt)
10678                 dyn.d_un.d_val -= htab->srelplt->size;
10679               break;
10680
10681             case DT_PLTREL:
10682               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10683               if (htab->is_vxworks)
10684                 dyn.d_un.d_val = DT_RELA;
10685               else
10686                 dyn.d_un.d_val = DT_REL;
10687               break;
10688
10689             case DT_PLTRELSZ:
10690               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10691               dyn.d_un.d_val = htab->srelplt->size;
10692               break;
10693
10694             case DT_JMPREL:
10695               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10696               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10697                                 + htab->srelplt->output_offset);
10698               break;
10699
10700             case DT_TEXTREL:
10701               /* If we didn't need any text relocations after all, delete
10702                  the dynamic tag.  */
10703               if (!(info->flags & DF_TEXTREL))
10704                 {
10705                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10706                   swap_out_p = FALSE;
10707                 }
10708               break;
10709
10710             case DT_FLAGS:
10711               /* If we didn't need any text relocations after all, clear
10712                  DF_TEXTREL from DT_FLAGS.  */
10713               if (!(info->flags & DF_TEXTREL))
10714                 dyn.d_un.d_val &= ~DF_TEXTREL;
10715               else
10716                 swap_out_p = FALSE;
10717               break;
10718
10719             default:
10720               swap_out_p = FALSE;
10721               if (htab->is_vxworks
10722                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10723                 swap_out_p = TRUE;
10724               break;
10725             }
10726
10727           if (swap_out_p || dyn_skipped)
10728             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10729               (dynobj, &dyn, b - dyn_skipped);
10730
10731           if (dyn_to_skip)
10732             {
10733               dyn_skipped += dyn_to_skip;
10734               dyn_to_skip = 0;
10735             }
10736         }
10737
10738       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10739       if (dyn_skipped > 0)
10740         memset (b - dyn_skipped, 0, dyn_skipped);
10741     }
10742
10743   if (sgot != NULL && sgot->size > 0
10744       && !bfd_is_abs_section (sgot->output_section))
10745     {
10746       if (htab->is_vxworks)
10747         {
10748           /* The first entry of the global offset table points to the
10749              ".dynamic" section.  The second is initialized by the
10750              loader and contains the shared library identifier.
10751              The third is also initialized by the loader and points
10752              to the lazy resolution stub.  */
10753           MIPS_ELF_PUT_WORD (output_bfd,
10754                              sdyn->output_offset + sdyn->output_section->vma,
10755                              sgot->contents);
10756           MIPS_ELF_PUT_WORD (output_bfd, 0,
10757                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10758           MIPS_ELF_PUT_WORD (output_bfd, 0,
10759                              sgot->contents
10760                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10761         }
10762       else
10763         {
10764           /* The first entry of the global offset table will be filled at
10765              runtime. The second entry will be used by some runtime loaders.
10766              This isn't the case of IRIX rld.  */
10767           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10768           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10769                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10770         }
10771
10772       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10773          = MIPS_ELF_GOT_SIZE (output_bfd);
10774     }
10775
10776   /* Generate dynamic relocations for the non-primary gots.  */
10777   if (gg != NULL && gg->next)
10778     {
10779       Elf_Internal_Rela rel[3];
10780       bfd_vma addend = 0;
10781
10782       memset (rel, 0, sizeof (rel));
10783       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10784
10785       for (g = gg->next; g->next != gg; g = g->next)
10786         {
10787           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10788             + g->next->tls_gotno;
10789
10790           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10791                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10792           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10793                              sgot->contents
10794                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10795
10796           if (! info->shared)
10797             continue;
10798
10799           while (got_index < g->assigned_gotno)
10800             {
10801               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10802                 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10803               if (!(mips_elf_create_dynamic_relocation
10804                     (output_bfd, info, rel, NULL,
10805                      bfd_abs_section_ptr,
10806                      0, &addend, sgot)))
10807                 return FALSE;
10808               BFD_ASSERT (addend == 0);
10809             }
10810         }
10811     }
10812
10813   /* The generation of dynamic relocations for the non-primary gots
10814      adds more dynamic relocations.  We cannot count them until
10815      here.  */
10816
10817   if (elf_hash_table (info)->dynamic_sections_created)
10818     {
10819       bfd_byte *b;
10820       bfd_boolean swap_out_p;
10821
10822       BFD_ASSERT (sdyn != NULL);
10823
10824       for (b = sdyn->contents;
10825            b < sdyn->contents + sdyn->size;
10826            b += MIPS_ELF_DYN_SIZE (dynobj))
10827         {
10828           Elf_Internal_Dyn dyn;
10829           asection *s;
10830
10831           /* Read in the current dynamic entry.  */
10832           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10833
10834           /* Assume that we're going to modify it and write it out.  */
10835           swap_out_p = TRUE;
10836
10837           switch (dyn.d_tag)
10838             {
10839             case DT_RELSZ:
10840               /* Reduce DT_RELSZ to account for any relocations we
10841                  decided not to make.  This is for the n64 irix rld,
10842                  which doesn't seem to apply any relocations if there
10843                  are trailing null entries.  */
10844               s = mips_elf_rel_dyn_section (info, FALSE);
10845               dyn.d_un.d_val = (s->reloc_count
10846                                 * (ABI_64_P (output_bfd)
10847                                    ? sizeof (Elf64_Mips_External_Rel)
10848                                    : sizeof (Elf32_External_Rel)));
10849               /* Adjust the section size too.  Tools like the prelinker
10850                  can reasonably expect the values to the same.  */
10851               elf_section_data (s->output_section)->this_hdr.sh_size
10852                 = dyn.d_un.d_val;
10853               break;
10854
10855             default:
10856               swap_out_p = FALSE;
10857               break;
10858             }
10859
10860           if (swap_out_p)
10861             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10862               (dynobj, &dyn, b);
10863         }
10864     }
10865
10866   {
10867     asection *s;
10868     Elf32_compact_rel cpt;
10869
10870     if (SGI_COMPAT (output_bfd))
10871       {
10872         /* Write .compact_rel section out.  */
10873         s = bfd_get_linker_section (dynobj, ".compact_rel");
10874         if (s != NULL)
10875           {
10876             cpt.id1 = 1;
10877             cpt.num = s->reloc_count;
10878             cpt.id2 = 2;
10879             cpt.offset = (s->output_section->filepos
10880                           + sizeof (Elf32_External_compact_rel));
10881             cpt.reserved0 = 0;
10882             cpt.reserved1 = 0;
10883             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10884                                             ((Elf32_External_compact_rel *)
10885                                              s->contents));
10886
10887             /* Clean up a dummy stub function entry in .text.  */
10888             if (htab->sstubs != NULL)
10889               {
10890                 file_ptr dummy_offset;
10891
10892                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10893                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10894                 memset (htab->sstubs->contents + dummy_offset, 0,
10895                         htab->function_stub_size);
10896               }
10897           }
10898       }
10899
10900     /* The psABI says that the dynamic relocations must be sorted in
10901        increasing order of r_symndx.  The VxWorks EABI doesn't require
10902        this, and because the code below handles REL rather than RELA
10903        relocations, using it for VxWorks would be outright harmful.  */
10904     if (!htab->is_vxworks)
10905       {
10906         s = mips_elf_rel_dyn_section (info, FALSE);
10907         if (s != NULL
10908             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10909           {
10910             reldyn_sorting_bfd = output_bfd;
10911
10912             if (ABI_64_P (output_bfd))
10913               qsort ((Elf64_External_Rel *) s->contents + 1,
10914                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10915                      sort_dynamic_relocs_64);
10916             else
10917               qsort ((Elf32_External_Rel *) s->contents + 1,
10918                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
10919                      sort_dynamic_relocs);
10920           }
10921       }
10922   }
10923
10924   if (htab->splt && htab->splt->size > 0)
10925     {
10926       if (htab->is_vxworks)
10927         {
10928           if (info->shared)
10929             mips_vxworks_finish_shared_plt (output_bfd, info);
10930           else
10931             mips_vxworks_finish_exec_plt (output_bfd, info);
10932         }
10933       else
10934         {
10935           BFD_ASSERT (!info->shared);
10936           mips_finish_exec_plt (output_bfd, info);
10937         }
10938     }
10939   return TRUE;
10940 }
10941
10942
10943 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10944
10945 static void
10946 mips_set_isa_flags (bfd *abfd)
10947 {
10948   flagword val;
10949
10950   switch (bfd_get_mach (abfd))
10951     {
10952     default:
10953     case bfd_mach_mips3000:
10954       val = E_MIPS_ARCH_1;
10955       break;
10956
10957     case bfd_mach_mips3900:
10958       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10959       break;
10960
10961     case bfd_mach_mips6000:
10962       val = E_MIPS_ARCH_2;
10963       break;
10964
10965     case bfd_mach_mips4000:
10966     case bfd_mach_mips4300:
10967     case bfd_mach_mips4400:
10968     case bfd_mach_mips4600:
10969       val = E_MIPS_ARCH_3;
10970       break;
10971
10972     case bfd_mach_mips4010:
10973       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
10974       break;
10975
10976     case bfd_mach_mips4100:
10977       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
10978       break;
10979
10980     case bfd_mach_mips4111:
10981       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
10982       break;
10983
10984     case bfd_mach_mips4120:
10985       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
10986       break;
10987
10988     case bfd_mach_mips4650:
10989       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
10990       break;
10991
10992     case bfd_mach_mips5400:
10993       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
10994       break;
10995
10996     case bfd_mach_mips5500:
10997       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
10998       break;
10999
11000     case bfd_mach_mips9000:
11001       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11002       break;
11003
11004     case bfd_mach_mips5000:
11005     case bfd_mach_mips7000:
11006     case bfd_mach_mips8000:
11007     case bfd_mach_mips10000:
11008     case bfd_mach_mips12000:
11009     case bfd_mach_mips14000:
11010     case bfd_mach_mips16000:
11011       val = E_MIPS_ARCH_4;
11012       break;
11013
11014     case bfd_mach_mips5:
11015       val = E_MIPS_ARCH_5;
11016       break;
11017
11018     case bfd_mach_mips_loongson_2e:
11019       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11020       break;
11021
11022     case bfd_mach_mips_loongson_2f:
11023       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11024       break;
11025
11026     case bfd_mach_mips_sb1:
11027       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11028       break;
11029
11030     case bfd_mach_mips_loongson_3a:
11031       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
11032       break;
11033
11034     case bfd_mach_mips_octeon:
11035     case bfd_mach_mips_octeonp:
11036       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11037       break;
11038
11039     case bfd_mach_mips_xlr:
11040       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11041       break;
11042
11043     case bfd_mach_mips_octeon2:
11044       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11045       break;
11046
11047     case bfd_mach_mipsisa32:
11048       val = E_MIPS_ARCH_32;
11049       break;
11050
11051     case bfd_mach_mipsisa64:
11052       val = E_MIPS_ARCH_64;
11053       break;
11054
11055     case bfd_mach_mipsisa32r2:
11056       val = E_MIPS_ARCH_32R2;
11057       break;
11058
11059     case bfd_mach_mipsisa64r2:
11060       val = E_MIPS_ARCH_64R2;
11061       break;
11062     }
11063   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11064   elf_elfheader (abfd)->e_flags |= val;
11065
11066 }
11067
11068
11069 /* The final processing done just before writing out a MIPS ELF object
11070    file.  This gets the MIPS architecture right based on the machine
11071    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11072
11073 void
11074 _bfd_mips_elf_final_write_processing (bfd *abfd,
11075                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11076 {
11077   unsigned int i;
11078   Elf_Internal_Shdr **hdrpp;
11079   const char *name;
11080   asection *sec;
11081
11082   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11083      is nonzero.  This is for compatibility with old objects, which used
11084      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11085   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11086     mips_set_isa_flags (abfd);
11087
11088   /* Set the sh_info field for .gptab sections and other appropriate
11089      info for each special section.  */
11090   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11091        i < elf_numsections (abfd);
11092        i++, hdrpp++)
11093     {
11094       switch ((*hdrpp)->sh_type)
11095         {
11096         case SHT_MIPS_MSYM:
11097         case SHT_MIPS_LIBLIST:
11098           sec = bfd_get_section_by_name (abfd, ".dynstr");
11099           if (sec != NULL)
11100             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11101           break;
11102
11103         case SHT_MIPS_GPTAB:
11104           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11105           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11106           BFD_ASSERT (name != NULL
11107                       && CONST_STRNEQ (name, ".gptab."));
11108           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11109           BFD_ASSERT (sec != NULL);
11110           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11111           break;
11112
11113         case SHT_MIPS_CONTENT:
11114           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11115           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11116           BFD_ASSERT (name != NULL
11117                       && CONST_STRNEQ (name, ".MIPS.content"));
11118           sec = bfd_get_section_by_name (abfd,
11119                                          name + sizeof ".MIPS.content" - 1);
11120           BFD_ASSERT (sec != NULL);
11121           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11122           break;
11123
11124         case SHT_MIPS_SYMBOL_LIB:
11125           sec = bfd_get_section_by_name (abfd, ".dynsym");
11126           if (sec != NULL)
11127             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11128           sec = bfd_get_section_by_name (abfd, ".liblist");
11129           if (sec != NULL)
11130             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11131           break;
11132
11133         case SHT_MIPS_EVENTS:
11134           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11135           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11136           BFD_ASSERT (name != NULL);
11137           if (CONST_STRNEQ (name, ".MIPS.events"))
11138             sec = bfd_get_section_by_name (abfd,
11139                                            name + sizeof ".MIPS.events" - 1);
11140           else
11141             {
11142               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
11143               sec = bfd_get_section_by_name (abfd,
11144                                              (name
11145                                               + sizeof ".MIPS.post_rel" - 1));
11146             }
11147           BFD_ASSERT (sec != NULL);
11148           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11149           break;
11150
11151         }
11152     }
11153 }
11154 \f
11155 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
11156    segments.  */
11157
11158 int
11159 _bfd_mips_elf_additional_program_headers (bfd *abfd,
11160                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
11161 {
11162   asection *s;
11163   int ret = 0;
11164
11165   /* See if we need a PT_MIPS_REGINFO segment.  */
11166   s = bfd_get_section_by_name (abfd, ".reginfo");
11167   if (s && (s->flags & SEC_LOAD))
11168     ++ret;
11169
11170   /* See if we need a PT_MIPS_OPTIONS segment.  */
11171   if (IRIX_COMPAT (abfd) == ict_irix6
11172       && bfd_get_section_by_name (abfd,
11173                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11174     ++ret;
11175
11176   /* See if we need a PT_MIPS_RTPROC segment.  */
11177   if (IRIX_COMPAT (abfd) == ict_irix5
11178       && bfd_get_section_by_name (abfd, ".dynamic")
11179       && bfd_get_section_by_name (abfd, ".mdebug"))
11180     ++ret;
11181
11182   /* Allocate a PT_NULL header in dynamic objects.  See
11183      _bfd_mips_elf_modify_segment_map for details.  */
11184   if (!SGI_COMPAT (abfd)
11185       && bfd_get_section_by_name (abfd, ".dynamic"))
11186     ++ret;
11187
11188   return ret;
11189 }
11190
11191 /* Modify the segment map for an IRIX5 executable.  */
11192
11193 bfd_boolean
11194 _bfd_mips_elf_modify_segment_map (bfd *abfd,
11195                                   struct bfd_link_info *info)
11196 {
11197   asection *s;
11198   struct elf_segment_map *m, **pm;
11199   bfd_size_type amt;
11200
11201   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11202      segment.  */
11203   s = bfd_get_section_by_name (abfd, ".reginfo");
11204   if (s != NULL && (s->flags & SEC_LOAD) != 0)
11205     {
11206       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11207         if (m->p_type == PT_MIPS_REGINFO)
11208           break;
11209       if (m == NULL)
11210         {
11211           amt = sizeof *m;
11212           m = bfd_zalloc (abfd, amt);
11213           if (m == NULL)
11214             return FALSE;
11215
11216           m->p_type = PT_MIPS_REGINFO;
11217           m->count = 1;
11218           m->sections[0] = s;
11219
11220           /* We want to put it after the PHDR and INTERP segments.  */
11221           pm = &elf_tdata (abfd)->segment_map;
11222           while (*pm != NULL
11223                  && ((*pm)->p_type == PT_PHDR
11224                      || (*pm)->p_type == PT_INTERP))
11225             pm = &(*pm)->next;
11226
11227           m->next = *pm;
11228           *pm = m;
11229         }
11230     }
11231
11232   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11233      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
11234      PT_MIPS_OPTIONS segment immediately following the program header
11235      table.  */
11236   if (NEWABI_P (abfd)
11237       /* On non-IRIX6 new abi, we'll have already created a segment
11238          for this section, so don't create another.  I'm not sure this
11239          is not also the case for IRIX 6, but I can't test it right
11240          now.  */
11241       && IRIX_COMPAT (abfd) == ict_irix6)
11242     {
11243       for (s = abfd->sections; s; s = s->next)
11244         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11245           break;
11246
11247       if (s)
11248         {
11249           struct elf_segment_map *options_segment;
11250
11251           pm = &elf_tdata (abfd)->segment_map;
11252           while (*pm != NULL
11253                  && ((*pm)->p_type == PT_PHDR
11254                      || (*pm)->p_type == PT_INTERP))
11255             pm = &(*pm)->next;
11256
11257           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11258             {
11259               amt = sizeof (struct elf_segment_map);
11260               options_segment = bfd_zalloc (abfd, amt);
11261               options_segment->next = *pm;
11262               options_segment->p_type = PT_MIPS_OPTIONS;
11263               options_segment->p_flags = PF_R;
11264               options_segment->p_flags_valid = TRUE;
11265               options_segment->count = 1;
11266               options_segment->sections[0] = s;
11267               *pm = options_segment;
11268             }
11269         }
11270     }
11271   else
11272     {
11273       if (IRIX_COMPAT (abfd) == ict_irix5)
11274         {
11275           /* If there are .dynamic and .mdebug sections, we make a room
11276              for the RTPROC header.  FIXME: Rewrite without section names.  */
11277           if (bfd_get_section_by_name (abfd, ".interp") == NULL
11278               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11279               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11280             {
11281               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11282                 if (m->p_type == PT_MIPS_RTPROC)
11283                   break;
11284               if (m == NULL)
11285                 {
11286                   amt = sizeof *m;
11287                   m = bfd_zalloc (abfd, amt);
11288                   if (m == NULL)
11289                     return FALSE;
11290
11291                   m->p_type = PT_MIPS_RTPROC;
11292
11293                   s = bfd_get_section_by_name (abfd, ".rtproc");
11294                   if (s == NULL)
11295                     {
11296                       m->count = 0;
11297                       m->p_flags = 0;
11298                       m->p_flags_valid = 1;
11299                     }
11300                   else
11301                     {
11302                       m->count = 1;
11303                       m->sections[0] = s;
11304                     }
11305
11306                   /* We want to put it after the DYNAMIC segment.  */
11307                   pm = &elf_tdata (abfd)->segment_map;
11308                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11309                     pm = &(*pm)->next;
11310                   if (*pm != NULL)
11311                     pm = &(*pm)->next;
11312
11313                   m->next = *pm;
11314                   *pm = m;
11315                 }
11316             }
11317         }
11318       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
11319          .dynstr, .dynsym, and .hash sections, and everything in
11320          between.  */
11321       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
11322            pm = &(*pm)->next)
11323         if ((*pm)->p_type == PT_DYNAMIC)
11324           break;
11325       m = *pm;
11326       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11327         {
11328           /* For a normal mips executable the permissions for the PT_DYNAMIC
11329              segment are read, write and execute. We do that here since
11330              the code in elf.c sets only the read permission. This matters
11331              sometimes for the dynamic linker.  */
11332           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11333             {
11334               m->p_flags = PF_R | PF_W | PF_X;
11335               m->p_flags_valid = 1;
11336             }
11337         }
11338       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11339          glibc's dynamic linker has traditionally derived the number of
11340          tags from the p_filesz field, and sometimes allocates stack
11341          arrays of that size.  An overly-big PT_DYNAMIC segment can
11342          be actively harmful in such cases.  Making PT_DYNAMIC contain
11343          other sections can also make life hard for the prelinker,
11344          which might move one of the other sections to a different
11345          PT_LOAD segment.  */
11346       if (SGI_COMPAT (abfd)
11347           && m != NULL
11348           && m->count == 1
11349           && strcmp (m->sections[0]->name, ".dynamic") == 0)
11350         {
11351           static const char *sec_names[] =
11352           {
11353             ".dynamic", ".dynstr", ".dynsym", ".hash"
11354           };
11355           bfd_vma low, high;
11356           unsigned int i, c;
11357           struct elf_segment_map *n;
11358
11359           low = ~(bfd_vma) 0;
11360           high = 0;
11361           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11362             {
11363               s = bfd_get_section_by_name (abfd, sec_names[i]);
11364               if (s != NULL && (s->flags & SEC_LOAD) != 0)
11365                 {
11366                   bfd_size_type sz;
11367
11368                   if (low > s->vma)
11369                     low = s->vma;
11370                   sz = s->size;
11371                   if (high < s->vma + sz)
11372                     high = s->vma + sz;
11373                 }
11374             }
11375
11376           c = 0;
11377           for (s = abfd->sections; s != NULL; s = s->next)
11378             if ((s->flags & SEC_LOAD) != 0
11379                 && s->vma >= low
11380                 && s->vma + s->size <= high)
11381               ++c;
11382
11383           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
11384           n = bfd_zalloc (abfd, amt);
11385           if (n == NULL)
11386             return FALSE;
11387           *n = *m;
11388           n->count = c;
11389
11390           i = 0;
11391           for (s = abfd->sections; s != NULL; s = s->next)
11392             {
11393               if ((s->flags & SEC_LOAD) != 0
11394                   && s->vma >= low
11395                   && s->vma + s->size <= high)
11396                 {
11397                   n->sections[i] = s;
11398                   ++i;
11399                 }
11400             }
11401
11402           *pm = n;
11403         }
11404     }
11405
11406   /* Allocate a spare program header in dynamic objects so that tools
11407      like the prelinker can add an extra PT_LOAD entry.
11408
11409      If the prelinker needs to make room for a new PT_LOAD entry, its
11410      standard procedure is to move the first (read-only) sections into
11411      the new (writable) segment.  However, the MIPS ABI requires
11412      .dynamic to be in a read-only segment, and the section will often
11413      start within sizeof (ElfNN_Phdr) bytes of the last program header.
11414
11415      Although the prelinker could in principle move .dynamic to a
11416      writable segment, it seems better to allocate a spare program
11417      header instead, and avoid the need to move any sections.
11418      There is a long tradition of allocating spare dynamic tags,
11419      so allocating a spare program header seems like a natural
11420      extension.
11421
11422      If INFO is NULL, we may be copying an already prelinked binary
11423      with objcopy or strip, so do not add this header.  */
11424   if (info != NULL
11425       && !SGI_COMPAT (abfd)
11426       && bfd_get_section_by_name (abfd, ".dynamic"))
11427     {
11428       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
11429         if ((*pm)->p_type == PT_NULL)
11430           break;
11431       if (*pm == NULL)
11432         {
11433           m = bfd_zalloc (abfd, sizeof (*m));
11434           if (m == NULL)
11435             return FALSE;
11436
11437           m->p_type = PT_NULL;
11438           *pm = m;
11439         }
11440     }
11441
11442   return TRUE;
11443 }
11444 \f
11445 /* Return the section that should be marked against GC for a given
11446    relocation.  */
11447
11448 asection *
11449 _bfd_mips_elf_gc_mark_hook (asection *sec,
11450                             struct bfd_link_info *info,
11451                             Elf_Internal_Rela *rel,
11452                             struct elf_link_hash_entry *h,
11453                             Elf_Internal_Sym *sym)
11454 {
11455   /* ??? Do mips16 stub sections need to be handled special?  */
11456
11457   if (h != NULL)
11458     switch (ELF_R_TYPE (sec->owner, rel->r_info))
11459       {
11460       case R_MIPS_GNU_VTINHERIT:
11461       case R_MIPS_GNU_VTENTRY:
11462         return NULL;
11463       }
11464
11465   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11466 }
11467
11468 /* Update the got entry reference counts for the section being removed.  */
11469
11470 bfd_boolean
11471 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11472                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
11473                              asection *sec ATTRIBUTE_UNUSED,
11474                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11475 {
11476 #if 0
11477   Elf_Internal_Shdr *symtab_hdr;
11478   struct elf_link_hash_entry **sym_hashes;
11479   bfd_signed_vma *local_got_refcounts;
11480   const Elf_Internal_Rela *rel, *relend;
11481   unsigned long r_symndx;
11482   struct elf_link_hash_entry *h;
11483
11484   if (info->relocatable)
11485     return TRUE;
11486
11487   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11488   sym_hashes = elf_sym_hashes (abfd);
11489   local_got_refcounts = elf_local_got_refcounts (abfd);
11490
11491   relend = relocs + sec->reloc_count;
11492   for (rel = relocs; rel < relend; rel++)
11493     switch (ELF_R_TYPE (abfd, rel->r_info))
11494       {
11495       case R_MIPS16_GOT16:
11496       case R_MIPS16_CALL16:
11497       case R_MIPS_GOT16:
11498       case R_MIPS_CALL16:
11499       case R_MIPS_CALL_HI16:
11500       case R_MIPS_CALL_LO16:
11501       case R_MIPS_GOT_HI16:
11502       case R_MIPS_GOT_LO16:
11503       case R_MIPS_GOT_DISP:
11504       case R_MIPS_GOT_PAGE:
11505       case R_MIPS_GOT_OFST:
11506       case R_MICROMIPS_GOT16:
11507       case R_MICROMIPS_CALL16:
11508       case R_MICROMIPS_CALL_HI16:
11509       case R_MICROMIPS_CALL_LO16:
11510       case R_MICROMIPS_GOT_HI16:
11511       case R_MICROMIPS_GOT_LO16:
11512       case R_MICROMIPS_GOT_DISP:
11513       case R_MICROMIPS_GOT_PAGE:
11514       case R_MICROMIPS_GOT_OFST:
11515         /* ??? It would seem that the existing MIPS code does no sort
11516            of reference counting or whatnot on its GOT and PLT entries,
11517            so it is not possible to garbage collect them at this time.  */
11518         break;
11519
11520       default:
11521         break;
11522       }
11523 #endif
11524
11525   return TRUE;
11526 }
11527 \f
11528 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11529    hiding the old indirect symbol.  Process additional relocation
11530    information.  Also called for weakdefs, in which case we just let
11531    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11532
11533 void
11534 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11535                                     struct elf_link_hash_entry *dir,
11536                                     struct elf_link_hash_entry *ind)
11537 {
11538   struct mips_elf_link_hash_entry *dirmips, *indmips;
11539
11540   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11541
11542   dirmips = (struct mips_elf_link_hash_entry *) dir;
11543   indmips = (struct mips_elf_link_hash_entry *) ind;
11544   /* Any absolute non-dynamic relocations against an indirect or weak
11545      definition will be against the target symbol.  */
11546   if (indmips->has_static_relocs)
11547     dirmips->has_static_relocs = TRUE;
11548
11549   if (ind->root.type != bfd_link_hash_indirect)
11550     return;
11551
11552   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11553   if (indmips->readonly_reloc)
11554     dirmips->readonly_reloc = TRUE;
11555   if (indmips->no_fn_stub)
11556     dirmips->no_fn_stub = TRUE;
11557   if (indmips->fn_stub)
11558     {
11559       dirmips->fn_stub = indmips->fn_stub;
11560       indmips->fn_stub = NULL;
11561     }
11562   if (indmips->need_fn_stub)
11563     {
11564       dirmips->need_fn_stub = TRUE;
11565       indmips->need_fn_stub = FALSE;
11566     }
11567   if (indmips->call_stub)
11568     {
11569       dirmips->call_stub = indmips->call_stub;
11570       indmips->call_stub = NULL;
11571     }
11572   if (indmips->call_fp_stub)
11573     {
11574       dirmips->call_fp_stub = indmips->call_fp_stub;
11575       indmips->call_fp_stub = NULL;
11576     }
11577   if (indmips->global_got_area < dirmips->global_got_area)
11578     dirmips->global_got_area = indmips->global_got_area;
11579   if (indmips->global_got_area < GGA_NONE)
11580     indmips->global_got_area = GGA_NONE;
11581   if (indmips->has_nonpic_branches)
11582     dirmips->has_nonpic_branches = TRUE;
11583
11584   if (dirmips->tls_type == 0)
11585     dirmips->tls_type = indmips->tls_type;
11586 }
11587 \f
11588 #define PDR_SIZE 32
11589
11590 bfd_boolean
11591 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11592                             struct bfd_link_info *info)
11593 {
11594   asection *o;
11595   bfd_boolean ret = FALSE;
11596   unsigned char *tdata;
11597   size_t i, skip;
11598
11599   o = bfd_get_section_by_name (abfd, ".pdr");
11600   if (! o)
11601     return FALSE;
11602   if (o->size == 0)
11603     return FALSE;
11604   if (o->size % PDR_SIZE != 0)
11605     return FALSE;
11606   if (o->output_section != NULL
11607       && bfd_is_abs_section (o->output_section))
11608     return FALSE;
11609
11610   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11611   if (! tdata)
11612     return FALSE;
11613
11614   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11615                                             info->keep_memory);
11616   if (!cookie->rels)
11617     {
11618       free (tdata);
11619       return FALSE;
11620     }
11621
11622   cookie->rel = cookie->rels;
11623   cookie->relend = cookie->rels + o->reloc_count;
11624
11625   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11626     {
11627       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11628         {
11629           tdata[i] = 1;
11630           skip ++;
11631         }
11632     }
11633
11634   if (skip != 0)
11635     {
11636       mips_elf_section_data (o)->u.tdata = tdata;
11637       o->size -= skip * PDR_SIZE;
11638       ret = TRUE;
11639     }
11640   else
11641     free (tdata);
11642
11643   if (! info->keep_memory)
11644     free (cookie->rels);
11645
11646   return ret;
11647 }
11648
11649 bfd_boolean
11650 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11651 {
11652   if (strcmp (sec->name, ".pdr") == 0)
11653     return TRUE;
11654   return FALSE;
11655 }
11656
11657 bfd_boolean
11658 _bfd_mips_elf_write_section (bfd *output_bfd,
11659                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11660                              asection *sec, bfd_byte *contents)
11661 {
11662   bfd_byte *to, *from, *end;
11663   int i;
11664
11665   if (strcmp (sec->name, ".pdr") != 0)
11666     return FALSE;
11667
11668   if (mips_elf_section_data (sec)->u.tdata == NULL)
11669     return FALSE;
11670
11671   to = contents;
11672   end = contents + sec->size;
11673   for (from = contents, i = 0;
11674        from < end;
11675        from += PDR_SIZE, i++)
11676     {
11677       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11678         continue;
11679       if (to != from)
11680         memcpy (to, from, PDR_SIZE);
11681       to += PDR_SIZE;
11682     }
11683   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11684                             sec->output_offset, sec->size);
11685   return TRUE;
11686 }
11687 \f
11688 /* microMIPS code retains local labels for linker relaxation.  Omit them
11689    from output by default for clarity.  */
11690
11691 bfd_boolean
11692 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11693 {
11694   return _bfd_elf_is_local_label_name (abfd, sym->name);
11695 }
11696
11697 /* MIPS ELF uses a special find_nearest_line routine in order the
11698    handle the ECOFF debugging information.  */
11699
11700 struct mips_elf_find_line
11701 {
11702   struct ecoff_debug_info d;
11703   struct ecoff_find_line i;
11704 };
11705
11706 bfd_boolean
11707 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11708                                  asymbol **symbols, bfd_vma offset,
11709                                  const char **filename_ptr,
11710                                  const char **functionname_ptr,
11711                                  unsigned int *line_ptr)
11712 {
11713   asection *msec;
11714
11715   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11716                                      filename_ptr, functionname_ptr,
11717                                      line_ptr))
11718     return TRUE;
11719
11720   if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11721                                      section, symbols, offset,
11722                                      filename_ptr, functionname_ptr,
11723                                      line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
11724                                      &elf_tdata (abfd)->dwarf2_find_line_info))
11725     return TRUE;
11726
11727   msec = bfd_get_section_by_name (abfd, ".mdebug");
11728   if (msec != NULL)
11729     {
11730       flagword origflags;
11731       struct mips_elf_find_line *fi;
11732       const struct ecoff_debug_swap * const swap =
11733         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11734
11735       /* If we are called during a link, mips_elf_final_link may have
11736          cleared the SEC_HAS_CONTENTS field.  We force it back on here
11737          if appropriate (which it normally will be).  */
11738       origflags = msec->flags;
11739       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11740         msec->flags |= SEC_HAS_CONTENTS;
11741
11742       fi = elf_tdata (abfd)->find_line_info;
11743       if (fi == NULL)
11744         {
11745           bfd_size_type external_fdr_size;
11746           char *fraw_src;
11747           char *fraw_end;
11748           struct fdr *fdr_ptr;
11749           bfd_size_type amt = sizeof (struct mips_elf_find_line);
11750
11751           fi = bfd_zalloc (abfd, amt);
11752           if (fi == NULL)
11753             {
11754               msec->flags = origflags;
11755               return FALSE;
11756             }
11757
11758           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11759             {
11760               msec->flags = origflags;
11761               return FALSE;
11762             }
11763
11764           /* Swap in the FDR information.  */
11765           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11766           fi->d.fdr = bfd_alloc (abfd, amt);
11767           if (fi->d.fdr == NULL)
11768             {
11769               msec->flags = origflags;
11770               return FALSE;
11771             }
11772           external_fdr_size = swap->external_fdr_size;
11773           fdr_ptr = fi->d.fdr;
11774           fraw_src = (char *) fi->d.external_fdr;
11775           fraw_end = (fraw_src
11776                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
11777           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11778             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11779
11780           elf_tdata (abfd)->find_line_info = fi;
11781
11782           /* Note that we don't bother to ever free this information.
11783              find_nearest_line is either called all the time, as in
11784              objdump -l, so the information should be saved, or it is
11785              rarely called, as in ld error messages, so the memory
11786              wasted is unimportant.  Still, it would probably be a
11787              good idea for free_cached_info to throw it away.  */
11788         }
11789
11790       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11791                                   &fi->i, filename_ptr, functionname_ptr,
11792                                   line_ptr))
11793         {
11794           msec->flags = origflags;
11795           return TRUE;
11796         }
11797
11798       msec->flags = origflags;
11799     }
11800
11801   /* Fall back on the generic ELF find_nearest_line routine.  */
11802
11803   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11804                                      filename_ptr, functionname_ptr,
11805                                      line_ptr);
11806 }
11807
11808 bfd_boolean
11809 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11810                                  const char **filename_ptr,
11811                                  const char **functionname_ptr,
11812                                  unsigned int *line_ptr)
11813 {
11814   bfd_boolean found;
11815   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11816                                          functionname_ptr, line_ptr,
11817                                          & elf_tdata (abfd)->dwarf2_find_line_info);
11818   return found;
11819 }
11820
11821 \f
11822 /* When are writing out the .options or .MIPS.options section,
11823    remember the bytes we are writing out, so that we can install the
11824    GP value in the section_processing routine.  */
11825
11826 bfd_boolean
11827 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11828                                     const void *location,
11829                                     file_ptr offset, bfd_size_type count)
11830 {
11831   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11832     {
11833       bfd_byte *c;
11834
11835       if (elf_section_data (section) == NULL)
11836         {
11837           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11838           section->used_by_bfd = bfd_zalloc (abfd, amt);
11839           if (elf_section_data (section) == NULL)
11840             return FALSE;
11841         }
11842       c = mips_elf_section_data (section)->u.tdata;
11843       if (c == NULL)
11844         {
11845           c = bfd_zalloc (abfd, section->size);
11846           if (c == NULL)
11847             return FALSE;
11848           mips_elf_section_data (section)->u.tdata = c;
11849         }
11850
11851       memcpy (c + offset, location, count);
11852     }
11853
11854   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11855                                         count);
11856 }
11857
11858 /* This is almost identical to bfd_generic_get_... except that some
11859    MIPS relocations need to be handled specially.  Sigh.  */
11860
11861 bfd_byte *
11862 _bfd_elf_mips_get_relocated_section_contents
11863   (bfd *abfd,
11864    struct bfd_link_info *link_info,
11865    struct bfd_link_order *link_order,
11866    bfd_byte *data,
11867    bfd_boolean relocatable,
11868    asymbol **symbols)
11869 {
11870   /* Get enough memory to hold the stuff */
11871   bfd *input_bfd = link_order->u.indirect.section->owner;
11872   asection *input_section = link_order->u.indirect.section;
11873   bfd_size_type sz;
11874
11875   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11876   arelent **reloc_vector = NULL;
11877   long reloc_count;
11878
11879   if (reloc_size < 0)
11880     goto error_return;
11881
11882   reloc_vector = bfd_malloc (reloc_size);
11883   if (reloc_vector == NULL && reloc_size != 0)
11884     goto error_return;
11885
11886   /* read in the section */
11887   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11888   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11889     goto error_return;
11890
11891   reloc_count = bfd_canonicalize_reloc (input_bfd,
11892                                         input_section,
11893                                         reloc_vector,
11894                                         symbols);
11895   if (reloc_count < 0)
11896     goto error_return;
11897
11898   if (reloc_count > 0)
11899     {
11900       arelent **parent;
11901       /* for mips */
11902       int gp_found;
11903       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
11904
11905       {
11906         struct bfd_hash_entry *h;
11907         struct bfd_link_hash_entry *lh;
11908         /* Skip all this stuff if we aren't mixing formats.  */
11909         if (abfd && input_bfd
11910             && abfd->xvec == input_bfd->xvec)
11911           lh = 0;
11912         else
11913           {
11914             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11915             lh = (struct bfd_link_hash_entry *) h;
11916           }
11917       lookup:
11918         if (lh)
11919           {
11920             switch (lh->type)
11921               {
11922               case bfd_link_hash_undefined:
11923               case bfd_link_hash_undefweak:
11924               case bfd_link_hash_common:
11925                 gp_found = 0;
11926                 break;
11927               case bfd_link_hash_defined:
11928               case bfd_link_hash_defweak:
11929                 gp_found = 1;
11930                 gp = lh->u.def.value;
11931                 break;
11932               case bfd_link_hash_indirect:
11933               case bfd_link_hash_warning:
11934                 lh = lh->u.i.link;
11935                 /* @@FIXME  ignoring warning for now */
11936                 goto lookup;
11937               case bfd_link_hash_new:
11938               default:
11939                 abort ();
11940               }
11941           }
11942         else
11943           gp_found = 0;
11944       }
11945       /* end mips */
11946       for (parent = reloc_vector; *parent != NULL; parent++)
11947         {
11948           char *error_message = NULL;
11949           bfd_reloc_status_type r;
11950
11951           /* Specific to MIPS: Deal with relocation types that require
11952              knowing the gp of the output bfd.  */
11953           asymbol *sym = *(*parent)->sym_ptr_ptr;
11954
11955           /* If we've managed to find the gp and have a special
11956              function for the relocation then go ahead, else default
11957              to the generic handling.  */
11958           if (gp_found
11959               && (*parent)->howto->special_function
11960               == _bfd_mips_elf32_gprel16_reloc)
11961             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11962                                                input_section, relocatable,
11963                                                data, gp);
11964           else
11965             r = bfd_perform_relocation (input_bfd, *parent, data,
11966                                         input_section,
11967                                         relocatable ? abfd : NULL,
11968                                         &error_message);
11969
11970           if (relocatable)
11971             {
11972               asection *os = input_section->output_section;
11973
11974               /* A partial link, so keep the relocs */
11975               os->orelocation[os->reloc_count] = *parent;
11976               os->reloc_count++;
11977             }
11978
11979           if (r != bfd_reloc_ok)
11980             {
11981               switch (r)
11982                 {
11983                 case bfd_reloc_undefined:
11984                   if (!((*link_info->callbacks->undefined_symbol)
11985                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11986                          input_bfd, input_section, (*parent)->address, TRUE)))
11987                     goto error_return;
11988                   break;
11989                 case bfd_reloc_dangerous:
11990                   BFD_ASSERT (error_message != NULL);
11991                   if (!((*link_info->callbacks->reloc_dangerous)
11992                         (link_info, error_message, input_bfd, input_section,
11993                          (*parent)->address)))
11994                     goto error_return;
11995                   break;
11996                 case bfd_reloc_overflow:
11997                   if (!((*link_info->callbacks->reloc_overflow)
11998                         (link_info, NULL,
11999                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12000                          (*parent)->howto->name, (*parent)->addend,
12001                          input_bfd, input_section, (*parent)->address)))
12002                     goto error_return;
12003                   break;
12004                 case bfd_reloc_outofrange:
12005                 default:
12006                   abort ();
12007                   break;
12008                 }
12009
12010             }
12011         }
12012     }
12013   if (reloc_vector != NULL)
12014     free (reloc_vector);
12015   return data;
12016
12017 error_return:
12018   if (reloc_vector != NULL)
12019     free (reloc_vector);
12020   return NULL;
12021 }
12022 \f
12023 static bfd_boolean
12024 mips_elf_relax_delete_bytes (bfd *abfd,
12025                              asection *sec, bfd_vma addr, int count)
12026 {
12027   Elf_Internal_Shdr *symtab_hdr;
12028   unsigned int sec_shndx;
12029   bfd_byte *contents;
12030   Elf_Internal_Rela *irel, *irelend;
12031   Elf_Internal_Sym *isym;
12032   Elf_Internal_Sym *isymend;
12033   struct elf_link_hash_entry **sym_hashes;
12034   struct elf_link_hash_entry **end_hashes;
12035   struct elf_link_hash_entry **start_hashes;
12036   unsigned int symcount;
12037
12038   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12039   contents = elf_section_data (sec)->this_hdr.contents;
12040
12041   irel = elf_section_data (sec)->relocs;
12042   irelend = irel + sec->reloc_count;
12043
12044   /* Actually delete the bytes.  */
12045   memmove (contents + addr, contents + addr + count,
12046            (size_t) (sec->size - addr - count));
12047   sec->size -= count;
12048
12049   /* Adjust all the relocs.  */
12050   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
12051     {
12052       /* Get the new reloc address.  */
12053       if (irel->r_offset > addr)
12054         irel->r_offset -= count;
12055     }
12056
12057   BFD_ASSERT (addr % 2 == 0);
12058   BFD_ASSERT (count % 2 == 0);
12059
12060   /* Adjust the local symbols defined in this section.  */
12061   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12062   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
12063   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
12064     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
12065       isym->st_value -= count;
12066
12067   /* Now adjust the global symbols defined in this section.  */
12068   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
12069               - symtab_hdr->sh_info);
12070   sym_hashes = start_hashes = elf_sym_hashes (abfd);
12071   end_hashes = sym_hashes + symcount;
12072
12073   for (; sym_hashes < end_hashes; sym_hashes++)
12074     {
12075       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12076
12077       if ((sym_hash->root.type == bfd_link_hash_defined
12078            || sym_hash->root.type == bfd_link_hash_defweak)
12079           && sym_hash->root.u.def.section == sec)
12080         {
12081           bfd_vma value = sym_hash->root.u.def.value;
12082
12083           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12084             value &= MINUS_TWO;
12085           if (value > addr)
12086             sym_hash->root.u.def.value -= count;
12087         }
12088     }
12089
12090   return TRUE;
12091 }
12092
12093
12094 /* Opcodes needed for microMIPS relaxation as found in
12095    opcodes/micromips-opc.c.  */
12096
12097 struct opcode_descriptor {
12098   unsigned long match;
12099   unsigned long mask;
12100 };
12101
12102 /* The $ra register aka $31.  */
12103
12104 #define RA 31
12105
12106 /* 32-bit instruction format register fields.  */
12107
12108 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12109 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12110
12111 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
12112
12113 #define OP16_VALID_REG(r) \
12114   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12115
12116
12117 /* 32-bit and 16-bit branches.  */
12118
12119 static const struct opcode_descriptor b_insns_32[] = {
12120   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
12121   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12122   { 0, 0 }  /* End marker for find_match().  */
12123 };
12124
12125 static const struct opcode_descriptor bc_insn_32 =
12126   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
12127
12128 static const struct opcode_descriptor bz_insn_32 =
12129   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
12130
12131 static const struct opcode_descriptor bzal_insn_32 =
12132   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
12133
12134 static const struct opcode_descriptor beq_insn_32 =
12135   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
12136
12137 static const struct opcode_descriptor b_insn_16 =
12138   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
12139
12140 static const struct opcode_descriptor bz_insn_16 =
12141   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
12142
12143
12144 /* 32-bit and 16-bit branch EQ and NE zero.  */
12145
12146 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12147    eq and second the ne.  This convention is used when replacing a
12148    32-bit BEQ/BNE with the 16-bit version.  */
12149
12150 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12151
12152 static const struct opcode_descriptor bz_rs_insns_32[] = {
12153   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
12154   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
12155   { 0, 0 }  /* End marker for find_match().  */
12156 };
12157
12158 static const struct opcode_descriptor bz_rt_insns_32[] = {
12159   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
12160   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
12161   { 0, 0 }  /* End marker for find_match().  */
12162 };
12163
12164 static const struct opcode_descriptor bzc_insns_32[] = {
12165   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
12166   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
12167   { 0, 0 }  /* End marker for find_match().  */
12168 };
12169
12170 static const struct opcode_descriptor bz_insns_16[] = {
12171   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
12172   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
12173   { 0, 0 }  /* End marker for find_match().  */
12174 };
12175
12176 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
12177
12178 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12179 #define BZ16_REG_FIELD(r) \
12180   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12181
12182
12183 /* 32-bit instructions with a delay slot.  */
12184
12185 static const struct opcode_descriptor jal_insn_32_bd16 =
12186   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
12187
12188 static const struct opcode_descriptor jal_insn_32_bd32 =
12189   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
12190
12191 static const struct opcode_descriptor jal_x_insn_32_bd32 =
12192   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
12193
12194 static const struct opcode_descriptor j_insn_32 =
12195   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
12196
12197 static const struct opcode_descriptor jalr_insn_32 =
12198   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
12199
12200 /* This table can be compacted, because no opcode replacement is made.  */
12201
12202 static const struct opcode_descriptor ds_insns_32_bd16[] = {
12203   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
12204
12205   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
12206   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
12207
12208   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
12209   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
12210   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
12211   { 0, 0 }  /* End marker for find_match().  */
12212 };
12213
12214 /* This table can be compacted, because no opcode replacement is made.  */
12215
12216 static const struct opcode_descriptor ds_insns_32_bd32[] = {
12217   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
12218
12219   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
12220   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
12221   { 0, 0 }  /* End marker for find_match().  */
12222 };
12223
12224
12225 /* 16-bit instructions with a delay slot.  */
12226
12227 static const struct opcode_descriptor jalr_insn_16_bd16 =
12228   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
12229
12230 static const struct opcode_descriptor jalr_insn_16_bd32 =
12231   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
12232
12233 static const struct opcode_descriptor jr_insn_16 =
12234   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
12235
12236 #define JR16_REG(opcode) ((opcode) & 0x1f)
12237
12238 /* This table can be compacted, because no opcode replacement is made.  */
12239
12240 static const struct opcode_descriptor ds_insns_16_bd16[] = {
12241   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
12242
12243   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
12244   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
12245   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
12246   { 0, 0 }  /* End marker for find_match().  */
12247 };
12248
12249
12250 /* LUI instruction.  */
12251
12252 static const struct opcode_descriptor lui_insn =
12253  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
12254
12255
12256 /* ADDIU instruction.  */
12257
12258 static const struct opcode_descriptor addiu_insn =
12259   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
12260
12261 static const struct opcode_descriptor addiupc_insn =
12262   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
12263
12264 #define ADDIUPC_REG_FIELD(r) \
12265   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12266
12267
12268 /* Relaxable instructions in a JAL delay slot: MOVE.  */
12269
12270 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
12271    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
12272 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12273 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12274
12275 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12276 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
12277
12278 static const struct opcode_descriptor move_insns_32[] = {
12279   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12280   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
12281   { 0, 0 }  /* End marker for find_match().  */
12282 };
12283
12284 static const struct opcode_descriptor move_insn_16 =
12285   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
12286
12287
12288 /* NOP instructions.  */
12289
12290 static const struct opcode_descriptor nop_insn_32 =
12291   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
12292
12293 static const struct opcode_descriptor nop_insn_16 =
12294   { /* "nop",   "",             */ 0x0c00,     0xffff };
12295
12296
12297 /* Instruction match support.  */
12298
12299 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12300
12301 static int
12302 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12303 {
12304   unsigned long indx;
12305
12306   for (indx = 0; insn[indx].mask != 0; indx++)
12307     if (MATCH (opcode, insn[indx]))
12308       return indx;
12309
12310   return -1;
12311 }
12312
12313
12314 /* Branch and delay slot decoding support.  */
12315
12316 /* If PTR points to what *might* be a 16-bit branch or jump, then
12317    return the minimum length of its delay slot, otherwise return 0.
12318    Non-zero results are not definitive as we might be checking against
12319    the second half of another instruction.  */
12320
12321 static int
12322 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12323 {
12324   unsigned long opcode;
12325   int bdsize;
12326
12327   opcode = bfd_get_16 (abfd, ptr);
12328   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12329     /* 16-bit branch/jump with a 32-bit delay slot.  */
12330     bdsize = 4;
12331   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12332            || find_match (opcode, ds_insns_16_bd16) >= 0)
12333     /* 16-bit branch/jump with a 16-bit delay slot.  */
12334     bdsize = 2;
12335   else
12336     /* No delay slot.  */
12337     bdsize = 0;
12338
12339   return bdsize;
12340 }
12341
12342 /* If PTR points to what *might* be a 32-bit branch or jump, then
12343    return the minimum length of its delay slot, otherwise return 0.
12344    Non-zero results are not definitive as we might be checking against
12345    the second half of another instruction.  */
12346
12347 static int
12348 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12349 {
12350   unsigned long opcode;
12351   int bdsize;
12352
12353   opcode = bfd_get_micromips_32 (abfd, ptr);
12354   if (find_match (opcode, ds_insns_32_bd32) >= 0)
12355     /* 32-bit branch/jump with a 32-bit delay slot.  */
12356     bdsize = 4;
12357   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12358     /* 32-bit branch/jump with a 16-bit delay slot.  */
12359     bdsize = 2;
12360   else
12361     /* No delay slot.  */
12362     bdsize = 0;
12363
12364   return bdsize;
12365 }
12366
12367 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12368    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
12369
12370 static bfd_boolean
12371 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12372 {
12373   unsigned long opcode;
12374
12375   opcode = bfd_get_16 (abfd, ptr);
12376   if (MATCH (opcode, b_insn_16)
12377                                                 /* B16  */
12378       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12379                                                 /* JR16  */
12380       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12381                                                 /* BEQZ16, BNEZ16  */
12382       || (MATCH (opcode, jalr_insn_16_bd32)
12383                                                 /* JALR16  */
12384           && reg != JR16_REG (opcode) && reg != RA))
12385     return TRUE;
12386
12387   return FALSE;
12388 }
12389
12390 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12391    then return TRUE, otherwise FALSE.  */
12392
12393 static bfd_boolean
12394 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12395 {
12396   unsigned long opcode;
12397
12398   opcode = bfd_get_micromips_32 (abfd, ptr);
12399   if (MATCH (opcode, j_insn_32)
12400                                                 /* J  */
12401       || MATCH (opcode, bc_insn_32)
12402                                                 /* BC1F, BC1T, BC2F, BC2T  */
12403       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12404                                                 /* JAL, JALX  */
12405       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12406                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
12407       || (MATCH (opcode, bzal_insn_32)
12408                                                 /* BGEZAL, BLTZAL  */
12409           && reg != OP32_SREG (opcode) && reg != RA)
12410       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12411                                                 /* JALR, JALR.HB, BEQ, BNE  */
12412           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12413     return TRUE;
12414
12415   return FALSE;
12416 }
12417
12418 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12419    IRELEND) at OFFSET indicate that there must be a compact branch there,
12420    then return TRUE, otherwise FALSE.  */
12421
12422 static bfd_boolean
12423 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12424                      const Elf_Internal_Rela *internal_relocs,
12425                      const Elf_Internal_Rela *irelend)
12426 {
12427   const Elf_Internal_Rela *irel;
12428   unsigned long opcode;
12429
12430   opcode = bfd_get_micromips_32 (abfd, ptr);
12431   if (find_match (opcode, bzc_insns_32) < 0)
12432     return FALSE;
12433
12434   for (irel = internal_relocs; irel < irelend; irel++)
12435     if (irel->r_offset == offset
12436         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12437       return TRUE;
12438
12439   return FALSE;
12440 }
12441
12442 /* Bitsize checking.  */
12443 #define IS_BITSIZE(val, N)                                              \
12444   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
12445     - (1ULL << ((N) - 1))) == (val))
12446
12447 \f
12448 bfd_boolean
12449 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12450                              struct bfd_link_info *link_info,
12451                              bfd_boolean *again)
12452 {
12453   Elf_Internal_Shdr *symtab_hdr;
12454   Elf_Internal_Rela *internal_relocs;
12455   Elf_Internal_Rela *irel, *irelend;
12456   bfd_byte *contents = NULL;
12457   Elf_Internal_Sym *isymbuf = NULL;
12458
12459   /* Assume nothing changes.  */
12460   *again = FALSE;
12461
12462   /* We don't have to do anything for a relocatable link, if
12463      this section does not have relocs, or if this is not a
12464      code section.  */
12465
12466   if (link_info->relocatable
12467       || (sec->flags & SEC_RELOC) == 0
12468       || sec->reloc_count == 0
12469       || (sec->flags & SEC_CODE) == 0)
12470     return TRUE;
12471
12472   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12473
12474   /* Get a copy of the native relocations.  */
12475   internal_relocs = (_bfd_elf_link_read_relocs
12476                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
12477                       link_info->keep_memory));
12478   if (internal_relocs == NULL)
12479     goto error_return;
12480
12481   /* Walk through them looking for relaxing opportunities.  */
12482   irelend = internal_relocs + sec->reloc_count;
12483   for (irel = internal_relocs; irel < irelend; irel++)
12484     {
12485       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12486       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12487       bfd_boolean target_is_micromips_code_p;
12488       unsigned long opcode;
12489       bfd_vma symval;
12490       bfd_vma pcrval;
12491       bfd_byte *ptr;
12492       int fndopc;
12493
12494       /* The number of bytes to delete for relaxation and from where
12495          to delete these bytes starting at irel->r_offset.  */
12496       int delcnt = 0;
12497       int deloff = 0;
12498
12499       /* If this isn't something that can be relaxed, then ignore
12500          this reloc.  */
12501       if (r_type != R_MICROMIPS_HI16
12502           && r_type != R_MICROMIPS_PC16_S1
12503           && r_type != R_MICROMIPS_26_S1)
12504         continue;
12505
12506       /* Get the section contents if we haven't done so already.  */
12507       if (contents == NULL)
12508         {
12509           /* Get cached copy if it exists.  */
12510           if (elf_section_data (sec)->this_hdr.contents != NULL)
12511             contents = elf_section_data (sec)->this_hdr.contents;
12512           /* Go get them off disk.  */
12513           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12514             goto error_return;
12515         }
12516       ptr = contents + irel->r_offset;
12517
12518       /* Read this BFD's local symbols if we haven't done so already.  */
12519       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12520         {
12521           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12522           if (isymbuf == NULL)
12523             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12524                                             symtab_hdr->sh_info, 0,
12525                                             NULL, NULL, NULL);
12526           if (isymbuf == NULL)
12527             goto error_return;
12528         }
12529
12530       /* Get the value of the symbol referred to by the reloc.  */
12531       if (r_symndx < symtab_hdr->sh_info)
12532         {
12533           /* A local symbol.  */
12534           Elf_Internal_Sym *isym;
12535           asection *sym_sec;
12536
12537           isym = isymbuf + r_symndx;
12538           if (isym->st_shndx == SHN_UNDEF)
12539             sym_sec = bfd_und_section_ptr;
12540           else if (isym->st_shndx == SHN_ABS)
12541             sym_sec = bfd_abs_section_ptr;
12542           else if (isym->st_shndx == SHN_COMMON)
12543             sym_sec = bfd_com_section_ptr;
12544           else
12545             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12546           symval = (isym->st_value
12547                     + sym_sec->output_section->vma
12548                     + sym_sec->output_offset);
12549           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12550         }
12551       else
12552         {
12553           unsigned long indx;
12554           struct elf_link_hash_entry *h;
12555
12556           /* An external symbol.  */
12557           indx = r_symndx - symtab_hdr->sh_info;
12558           h = elf_sym_hashes (abfd)[indx];
12559           BFD_ASSERT (h != NULL);
12560
12561           if (h->root.type != bfd_link_hash_defined
12562               && h->root.type != bfd_link_hash_defweak)
12563             /* This appears to be a reference to an undefined
12564                symbol.  Just ignore it -- it will be caught by the
12565                regular reloc processing.  */
12566             continue;
12567
12568           symval = (h->root.u.def.value
12569                     + h->root.u.def.section->output_section->vma
12570                     + h->root.u.def.section->output_offset);
12571           target_is_micromips_code_p = (!h->needs_plt
12572                                         && ELF_ST_IS_MICROMIPS (h->other));
12573         }
12574
12575
12576       /* For simplicity of coding, we are going to modify the
12577          section contents, the section relocs, and the BFD symbol
12578          table.  We must tell the rest of the code not to free up this
12579          information.  It would be possible to instead create a table
12580          of changes which have to be made, as is done in coff-mips.c;
12581          that would be more work, but would require less memory when
12582          the linker is run.  */
12583
12584       /* Only 32-bit instructions relaxed.  */
12585       if (irel->r_offset + 4 > sec->size)
12586         continue;
12587
12588       opcode = bfd_get_micromips_32 (abfd, ptr);
12589
12590       /* This is the pc-relative distance from the instruction the
12591          relocation is applied to, to the symbol referred.  */
12592       pcrval = (symval
12593                 - (sec->output_section->vma + sec->output_offset)
12594                 - irel->r_offset);
12595
12596       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12597          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12598          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
12599
12600            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12601
12602          where pcrval has first to be adjusted to apply against the LO16
12603          location (we make the adjustment later on, when we have figured
12604          out the offset).  */
12605       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12606         {
12607           bfd_boolean bzc = FALSE;
12608           unsigned long nextopc;
12609           unsigned long reg;
12610           bfd_vma offset;
12611
12612           /* Give up if the previous reloc was a HI16 against this symbol
12613              too.  */
12614           if (irel > internal_relocs
12615               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12616               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12617             continue;
12618
12619           /* Or if the next reloc is not a LO16 against this symbol.  */
12620           if (irel + 1 >= irelend
12621               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12622               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12623             continue;
12624
12625           /* Or if the second next reloc is a LO16 against this symbol too.  */
12626           if (irel + 2 >= irelend
12627               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12628               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12629             continue;
12630
12631           /* See if the LUI instruction *might* be in a branch delay slot.
12632              We check whether what looks like a 16-bit branch or jump is
12633              actually an immediate argument to a compact branch, and let
12634              it through if so.  */
12635           if (irel->r_offset >= 2
12636               && check_br16_dslot (abfd, ptr - 2)
12637               && !(irel->r_offset >= 4
12638                    && (bzc = check_relocated_bzc (abfd,
12639                                                   ptr - 4, irel->r_offset - 4,
12640                                                   internal_relocs, irelend))))
12641             continue;
12642           if (irel->r_offset >= 4
12643               && !bzc
12644               && check_br32_dslot (abfd, ptr - 4))
12645             continue;
12646
12647           reg = OP32_SREG (opcode);
12648
12649           /* We only relax adjacent instructions or ones separated with
12650              a branch or jump that has a delay slot.  The branch or jump
12651              must not fiddle with the register used to hold the address.
12652              Subtract 4 for the LUI itself.  */
12653           offset = irel[1].r_offset - irel[0].r_offset;
12654           switch (offset - 4)
12655             {
12656             case 0:
12657               break;
12658             case 2:
12659               if (check_br16 (abfd, ptr + 4, reg))
12660                 break;
12661               continue;
12662             case 4:
12663               if (check_br32 (abfd, ptr + 4, reg))
12664                 break;
12665               continue;
12666             default:
12667               continue;
12668             }
12669
12670           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
12671
12672           /* Give up unless the same register is used with both
12673              relocations.  */
12674           if (OP32_SREG (nextopc) != reg)
12675             continue;
12676
12677           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12678              and rounding up to take masking of the two LSBs into account.  */
12679           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12680
12681           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
12682           if (IS_BITSIZE (symval, 16))
12683             {
12684               /* Fix the relocation's type.  */
12685               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12686
12687               /* Instructions using R_MICROMIPS_LO16 have the base or
12688                  source register in bits 20:16.  This register becomes $0
12689                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
12690               nextopc &= ~0x001f0000;
12691               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12692                           contents + irel[1].r_offset);
12693             }
12694
12695           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12696              We add 4 to take LUI deletion into account while checking
12697              the PC-relative distance.  */
12698           else if (symval % 4 == 0
12699                    && IS_BITSIZE (pcrval + 4, 25)
12700                    && MATCH (nextopc, addiu_insn)
12701                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12702                    && OP16_VALID_REG (OP32_TREG (nextopc)))
12703             {
12704               /* Fix the relocation's type.  */
12705               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12706
12707               /* Replace ADDIU with the ADDIUPC version.  */
12708               nextopc = (addiupc_insn.match
12709                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12710
12711               bfd_put_micromips_32 (abfd, nextopc,
12712                                     contents + irel[1].r_offset);
12713             }
12714
12715           /* Can't do anything, give up, sigh...  */
12716           else
12717             continue;
12718
12719           /* Fix the relocation's type.  */
12720           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12721
12722           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
12723           delcnt = 4;
12724           deloff = 0;
12725         }
12726
12727       /* Compact branch relaxation -- due to the multitude of macros
12728          employed by the compiler/assembler, compact branches are not
12729          always generated.  Obviously, this can/will be fixed elsewhere,
12730          but there is no drawback in double checking it here.  */
12731       else if (r_type == R_MICROMIPS_PC16_S1
12732                && irel->r_offset + 5 < sec->size
12733                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12734                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
12735                && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
12736         {
12737           unsigned long reg;
12738
12739           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12740
12741           /* Replace BEQZ/BNEZ with the compact version.  */
12742           opcode = (bzc_insns_32[fndopc].match
12743                     | BZC32_REG_FIELD (reg)
12744                     | (opcode & 0xffff));               /* Addend value.  */
12745
12746           bfd_put_micromips_32 (abfd, opcode, ptr);
12747
12748           /* Delete the 16-bit delay slot NOP: two bytes from
12749              irel->offset + 4.  */
12750           delcnt = 2;
12751           deloff = 4;
12752         }
12753
12754       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
12755          to check the distance from the next instruction, so subtract 2.  */
12756       else if (r_type == R_MICROMIPS_PC16_S1
12757                && IS_BITSIZE (pcrval - 2, 11)
12758                && find_match (opcode, b_insns_32) >= 0)
12759         {
12760           /* Fix the relocation's type.  */
12761           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12762
12763           /* Replace the the 32-bit opcode with a 16-bit opcode.  */
12764           bfd_put_16 (abfd,
12765                       (b_insn_16.match
12766                        | (opcode & 0x3ff)),             /* Addend value.  */
12767                       ptr);
12768
12769           /* Delete 2 bytes from irel->r_offset + 2.  */
12770           delcnt = 2;
12771           deloff = 2;
12772         }
12773
12774       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
12775          to check the distance from the next instruction, so subtract 2.  */
12776       else if (r_type == R_MICROMIPS_PC16_S1
12777                && IS_BITSIZE (pcrval - 2, 8)
12778                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12779                     && OP16_VALID_REG (OP32_SREG (opcode)))
12780                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12781                        && OP16_VALID_REG (OP32_TREG (opcode)))))
12782         {
12783           unsigned long reg;
12784
12785           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12786
12787           /* Fix the relocation's type.  */
12788           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12789
12790           /* Replace the the 32-bit opcode with a 16-bit opcode.  */
12791           bfd_put_16 (abfd,
12792                       (bz_insns_16[fndopc].match
12793                        | BZ16_REG_FIELD (reg)
12794                        | (opcode & 0x7f)),              /* Addend value.  */
12795                       ptr);
12796
12797           /* Delete 2 bytes from irel->r_offset + 2.  */
12798           delcnt = 2;
12799           deloff = 2;
12800         }
12801
12802       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
12803       else if (r_type == R_MICROMIPS_26_S1
12804                && target_is_micromips_code_p
12805                && irel->r_offset + 7 < sec->size
12806                && MATCH (opcode, jal_insn_32_bd32))
12807         {
12808           unsigned long n32opc;
12809           bfd_boolean relaxed = FALSE;
12810
12811           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
12812
12813           if (MATCH (n32opc, nop_insn_32))
12814             {
12815               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
12816               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
12817
12818               relaxed = TRUE;
12819             }
12820           else if (find_match (n32opc, move_insns_32) >= 0)
12821             {
12822               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
12823               bfd_put_16 (abfd,
12824                           (move_insn_16.match
12825                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12826                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
12827                           ptr + 4);
12828
12829               relaxed = TRUE;
12830             }
12831           /* Other 32-bit instructions relaxable to 16-bit
12832              instructions will be handled here later.  */
12833
12834           if (relaxed)
12835             {
12836               /* JAL with 32-bit delay slot that is changed to a JALS
12837                  with 16-bit delay slot.  */
12838               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
12839
12840               /* Delete 2 bytes from irel->r_offset + 6.  */
12841               delcnt = 2;
12842               deloff = 6;
12843             }
12844         }
12845
12846       if (delcnt != 0)
12847         {
12848           /* Note that we've changed the relocs, section contents, etc.  */
12849           elf_section_data (sec)->relocs = internal_relocs;
12850           elf_section_data (sec)->this_hdr.contents = contents;
12851           symtab_hdr->contents = (unsigned char *) isymbuf;
12852
12853           /* Delete bytes depending on the delcnt and deloff.  */
12854           if (!mips_elf_relax_delete_bytes (abfd, sec,
12855                                             irel->r_offset + deloff, delcnt))
12856             goto error_return;
12857
12858           /* That will change things, so we should relax again.
12859              Note that this is not required, and it may be slow.  */
12860           *again = TRUE;
12861         }
12862     }
12863
12864   if (isymbuf != NULL
12865       && symtab_hdr->contents != (unsigned char *) isymbuf)
12866     {
12867       if (! link_info->keep_memory)
12868         free (isymbuf);
12869       else
12870         {
12871           /* Cache the symbols for elf_link_input_bfd.  */
12872           symtab_hdr->contents = (unsigned char *) isymbuf;
12873         }
12874     }
12875
12876   if (contents != NULL
12877       && elf_section_data (sec)->this_hdr.contents != contents)
12878     {
12879       if (! link_info->keep_memory)
12880         free (contents);
12881       else
12882         {
12883           /* Cache the section contents for elf_link_input_bfd.  */
12884           elf_section_data (sec)->this_hdr.contents = contents;
12885         }
12886     }
12887
12888   if (internal_relocs != NULL
12889       && elf_section_data (sec)->relocs != internal_relocs)
12890     free (internal_relocs);
12891
12892   return TRUE;
12893
12894  error_return:
12895   if (isymbuf != NULL
12896       && symtab_hdr->contents != (unsigned char *) isymbuf)
12897     free (isymbuf);
12898   if (contents != NULL
12899       && elf_section_data (sec)->this_hdr.contents != contents)
12900     free (contents);
12901   if (internal_relocs != NULL
12902       && elf_section_data (sec)->relocs != internal_relocs)
12903     free (internal_relocs);
12904
12905   return FALSE;
12906 }
12907 \f
12908 /* Create a MIPS ELF linker hash table.  */
12909
12910 struct bfd_link_hash_table *
12911 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
12912 {
12913   struct mips_elf_link_hash_table *ret;
12914   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12915
12916   ret = bfd_malloc (amt);
12917   if (ret == NULL)
12918     return NULL;
12919
12920   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12921                                       mips_elf_link_hash_newfunc,
12922                                       sizeof (struct mips_elf_link_hash_entry),
12923                                       MIPS_ELF_DATA))
12924     {
12925       free (ret);
12926       return NULL;
12927     }
12928
12929 #if 0
12930   /* We no longer use this.  */
12931   for (i = 0; i < SIZEOF_MIPS_DYNSYM_SECNAMES; i++)
12932     ret->dynsym_sec_strindex[i] = (bfd_size_type) -1;
12933 #endif
12934   ret->procedure_count = 0;
12935   ret->compact_rel_size = 0;
12936   ret->use_rld_obj_head = FALSE;
12937   ret->rld_symbol = NULL;
12938   ret->mips16_stubs_seen = FALSE;
12939   ret->use_plts_and_copy_relocs = FALSE;
12940   ret->is_vxworks = FALSE;
12941   ret->small_data_overflow_reported = FALSE;
12942   ret->srelbss = NULL;
12943   ret->sdynbss = NULL;
12944   ret->srelplt = NULL;
12945   ret->srelplt2 = NULL;
12946   ret->sgotplt = NULL;
12947   ret->splt = NULL;
12948   ret->sstubs = NULL;
12949   ret->sgot = NULL;
12950   ret->got_info = NULL;
12951   ret->plt_header_size = 0;
12952   ret->plt_entry_size = 0;
12953   ret->lazy_stub_count = 0;
12954   ret->function_stub_size = 0;
12955   ret->strampoline = NULL;
12956   ret->la25_stubs = NULL;
12957   ret->add_stub_section = NULL;
12958
12959   return &ret->root.root;
12960 }
12961
12962 /* Likewise, but indicate that the target is VxWorks.  */
12963
12964 struct bfd_link_hash_table *
12965 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12966 {
12967   struct bfd_link_hash_table *ret;
12968
12969   ret = _bfd_mips_elf_link_hash_table_create (abfd);
12970   if (ret)
12971     {
12972       struct mips_elf_link_hash_table *htab;
12973
12974       htab = (struct mips_elf_link_hash_table *) ret;
12975       htab->use_plts_and_copy_relocs = TRUE;
12976       htab->is_vxworks = TRUE;
12977     }
12978   return ret;
12979 }
12980
12981 /* A function that the linker calls if we are allowed to use PLTs
12982    and copy relocs.  */
12983
12984 void
12985 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
12986 {
12987   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
12988 }
12989 \f
12990 /* We need to use a special link routine to handle the .reginfo and
12991    the .mdebug sections.  We need to merge all instances of these
12992    sections together, not write them all out sequentially.  */
12993
12994 bfd_boolean
12995 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
12996 {
12997   asection *o;
12998   struct bfd_link_order *p;
12999   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
13000   asection *rtproc_sec;
13001   Elf32_RegInfo reginfo;
13002   struct ecoff_debug_info debug;
13003   struct mips_htab_traverse_info hti;
13004   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13005   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
13006   HDRR *symhdr = &debug.symbolic_header;
13007   void *mdebug_handle = NULL;
13008   asection *s;
13009   EXTR esym;
13010   unsigned int i;
13011   bfd_size_type amt;
13012   struct mips_elf_link_hash_table *htab;
13013
13014   static const char * const secname[] =
13015   {
13016     ".text", ".init", ".fini", ".data",
13017     ".rodata", ".sdata", ".sbss", ".bss"
13018   };
13019   static const int sc[] =
13020   {
13021     scText, scInit, scFini, scData,
13022     scRData, scSData, scSBss, scBss
13023   };
13024
13025   /* Sort the dynamic symbols so that those with GOT entries come after
13026      those without.  */
13027   htab = mips_elf_hash_table (info);
13028   BFD_ASSERT (htab != NULL);
13029
13030   if (!mips_elf_sort_hash_table (abfd, info))
13031     return FALSE;
13032
13033   /* Create any scheduled LA25 stubs.  */
13034   hti.info = info;
13035   hti.output_bfd = abfd;
13036   hti.error = FALSE;
13037   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
13038   if (hti.error)
13039     return FALSE;
13040
13041   /* Get a value for the GP register.  */
13042   if (elf_gp (abfd) == 0)
13043     {
13044       struct bfd_link_hash_entry *h;
13045
13046       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
13047       if (h != NULL && h->type == bfd_link_hash_defined)
13048         elf_gp (abfd) = (h->u.def.value
13049                          + h->u.def.section->output_section->vma
13050                          + h->u.def.section->output_offset);
13051       else if (htab->is_vxworks
13052                && (h = bfd_link_hash_lookup (info->hash,
13053                                              "_GLOBAL_OFFSET_TABLE_",
13054                                              FALSE, FALSE, TRUE))
13055                && h->type == bfd_link_hash_defined)
13056         elf_gp (abfd) = (h->u.def.section->output_section->vma
13057                          + h->u.def.section->output_offset
13058                          + h->u.def.value);
13059       else if (info->relocatable)
13060         {
13061           bfd_vma lo = MINUS_ONE;
13062
13063           /* Find the GP-relative section with the lowest offset.  */
13064           for (o = abfd->sections; o != NULL; o = o->next)
13065             if (o->vma < lo
13066                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
13067               lo = o->vma;
13068
13069           /* And calculate GP relative to that.  */
13070           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
13071         }
13072       else
13073         {
13074           /* If the relocate_section function needs to do a reloc
13075              involving the GP value, it should make a reloc_dangerous
13076              callback to warn that GP is not defined.  */
13077         }
13078     }
13079
13080   /* Go through the sections and collect the .reginfo and .mdebug
13081      information.  */
13082   reginfo_sec = NULL;
13083   mdebug_sec = NULL;
13084   gptab_data_sec = NULL;
13085   gptab_bss_sec = NULL;
13086   for (o = abfd->sections; o != NULL; o = o->next)
13087     {
13088       if (strcmp (o->name, ".reginfo") == 0)
13089         {
13090           memset (&reginfo, 0, sizeof reginfo);
13091
13092           /* We have found the .reginfo section in the output file.
13093              Look through all the link_orders comprising it and merge
13094              the information together.  */
13095           for (p = o->map_head.link_order; p != NULL; p = p->next)
13096             {
13097               asection *input_section;
13098               bfd *input_bfd;
13099               Elf32_External_RegInfo ext;
13100               Elf32_RegInfo sub;
13101
13102               if (p->type != bfd_indirect_link_order)
13103                 {
13104                   if (p->type == bfd_data_link_order)
13105                     continue;
13106                   abort ();
13107                 }
13108
13109               input_section = p->u.indirect.section;
13110               input_bfd = input_section->owner;
13111
13112               if (! bfd_get_section_contents (input_bfd, input_section,
13113                                               &ext, 0, sizeof ext))
13114                 return FALSE;
13115
13116               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13117
13118               reginfo.ri_gprmask |= sub.ri_gprmask;
13119               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13120               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13121               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13122               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13123
13124               /* ri_gp_value is set by the function
13125                  mips_elf32_section_processing when the section is
13126                  finally written out.  */
13127
13128               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13129                  elf_link_input_bfd ignores this section.  */
13130               input_section->flags &= ~SEC_HAS_CONTENTS;
13131             }
13132
13133           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
13134           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
13135
13136           /* Skip this section later on (I don't think this currently
13137              matters, but someday it might).  */
13138           o->map_head.link_order = NULL;
13139
13140           reginfo_sec = o;
13141         }
13142
13143       if (strcmp (o->name, ".mdebug") == 0)
13144         {
13145           struct extsym_info einfo;
13146           bfd_vma last;
13147
13148           /* We have found the .mdebug section in the output file.
13149              Look through all the link_orders comprising it and merge
13150              the information together.  */
13151           symhdr->magic = swap->sym_magic;
13152           /* FIXME: What should the version stamp be?  */
13153           symhdr->vstamp = 0;
13154           symhdr->ilineMax = 0;
13155           symhdr->cbLine = 0;
13156           symhdr->idnMax = 0;
13157           symhdr->ipdMax = 0;
13158           symhdr->isymMax = 0;
13159           symhdr->ioptMax = 0;
13160           symhdr->iauxMax = 0;
13161           symhdr->issMax = 0;
13162           symhdr->issExtMax = 0;
13163           symhdr->ifdMax = 0;
13164           symhdr->crfd = 0;
13165           symhdr->iextMax = 0;
13166
13167           /* We accumulate the debugging information itself in the
13168              debug_info structure.  */
13169           debug.line = NULL;
13170           debug.external_dnr = NULL;
13171           debug.external_pdr = NULL;
13172           debug.external_sym = NULL;
13173           debug.external_opt = NULL;
13174           debug.external_aux = NULL;
13175           debug.ss = NULL;
13176           debug.ssext = debug.ssext_end = NULL;
13177           debug.external_fdr = NULL;
13178           debug.external_rfd = NULL;
13179           debug.external_ext = debug.external_ext_end = NULL;
13180
13181           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
13182           if (mdebug_handle == NULL)
13183             return FALSE;
13184
13185           esym.jmptbl = 0;
13186           esym.cobol_main = 0;
13187           esym.weakext = 0;
13188           esym.reserved = 0;
13189           esym.ifd = ifdNil;
13190           esym.asym.iss = issNil;
13191           esym.asym.st = stLocal;
13192           esym.asym.reserved = 0;
13193           esym.asym.index = indexNil;
13194           last = 0;
13195           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13196             {
13197               esym.asym.sc = sc[i];
13198               s = bfd_get_section_by_name (abfd, secname[i]);
13199               if (s != NULL)
13200                 {
13201                   esym.asym.value = s->vma;
13202                   last = s->vma + s->size;
13203                 }
13204               else
13205                 esym.asym.value = last;
13206               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13207                                                  secname[i], &esym))
13208                 return FALSE;
13209             }
13210
13211           for (p = o->map_head.link_order; p != NULL; p = p->next)
13212             {
13213               asection *input_section;
13214               bfd *input_bfd;
13215               const struct ecoff_debug_swap *input_swap;
13216               struct ecoff_debug_info input_debug;
13217               char *eraw_src;
13218               char *eraw_end;
13219
13220               if (p->type != bfd_indirect_link_order)
13221                 {
13222                   if (p->type == bfd_data_link_order)
13223                     continue;
13224                   abort ();
13225                 }
13226
13227               input_section = p->u.indirect.section;
13228               input_bfd = input_section->owner;
13229
13230               if (!is_mips_elf (input_bfd))
13231                 {
13232                   /* I don't know what a non MIPS ELF bfd would be
13233                      doing with a .mdebug section, but I don't really
13234                      want to deal with it.  */
13235                   continue;
13236                 }
13237
13238               input_swap = (get_elf_backend_data (input_bfd)
13239                             ->elf_backend_ecoff_debug_swap);
13240
13241               BFD_ASSERT (p->size == input_section->size);
13242
13243               /* The ECOFF linking code expects that we have already
13244                  read in the debugging information and set up an
13245                  ecoff_debug_info structure, so we do that now.  */
13246               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13247                                                    &input_debug))
13248                 return FALSE;
13249
13250               if (! (bfd_ecoff_debug_accumulate
13251                      (mdebug_handle, abfd, &debug, swap, input_bfd,
13252                       &input_debug, input_swap, info)))
13253                 return FALSE;
13254
13255               /* Loop through the external symbols.  For each one with
13256                  interesting information, try to find the symbol in
13257                  the linker global hash table and save the information
13258                  for the output external symbols.  */
13259               eraw_src = input_debug.external_ext;
13260               eraw_end = (eraw_src
13261                           + (input_debug.symbolic_header.iextMax
13262                              * input_swap->external_ext_size));
13263               for (;
13264                    eraw_src < eraw_end;
13265                    eraw_src += input_swap->external_ext_size)
13266                 {
13267                   EXTR ext;
13268                   const char *name;
13269                   struct mips_elf_link_hash_entry *h;
13270
13271                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
13272                   if (ext.asym.sc == scNil
13273                       || ext.asym.sc == scUndefined
13274                       || ext.asym.sc == scSUndefined)
13275                     continue;
13276
13277                   name = input_debug.ssext + ext.asym.iss;
13278                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
13279                                                  name, FALSE, FALSE, TRUE);
13280                   if (h == NULL || h->esym.ifd != -2)
13281                     continue;
13282
13283                   if (ext.ifd != -1)
13284                     {
13285                       BFD_ASSERT (ext.ifd
13286                                   < input_debug.symbolic_header.ifdMax);
13287                       ext.ifd = input_debug.ifdmap[ext.ifd];
13288                     }
13289
13290                   h->esym = ext;
13291                 }
13292
13293               /* Free up the information we just read.  */
13294               free (input_debug.line);
13295               free (input_debug.external_dnr);
13296               free (input_debug.external_pdr);
13297               free (input_debug.external_sym);
13298               free (input_debug.external_opt);
13299               free (input_debug.external_aux);
13300               free (input_debug.ss);
13301               free (input_debug.ssext);
13302               free (input_debug.external_fdr);
13303               free (input_debug.external_rfd);
13304               free (input_debug.external_ext);
13305
13306               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13307                  elf_link_input_bfd ignores this section.  */
13308               input_section->flags &= ~SEC_HAS_CONTENTS;
13309             }
13310
13311           if (SGI_COMPAT (abfd) && info->shared)
13312             {
13313               /* Create .rtproc section.  */
13314               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
13315               if (rtproc_sec == NULL)
13316                 {
13317                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13318                                     | SEC_LINKER_CREATED | SEC_READONLY);
13319
13320                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13321                                                                    ".rtproc",
13322                                                                    flags);
13323                   if (rtproc_sec == NULL
13324                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
13325                     return FALSE;
13326                 }
13327
13328               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13329                                                      info, rtproc_sec,
13330                                                      &debug))
13331                 return FALSE;
13332             }
13333
13334           /* Build the external symbol information.  */
13335           einfo.abfd = abfd;
13336           einfo.info = info;
13337           einfo.debug = &debug;
13338           einfo.swap = swap;
13339           einfo.failed = FALSE;
13340           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
13341                                        mips_elf_output_extsym, &einfo);
13342           if (einfo.failed)
13343             return FALSE;
13344
13345           /* Set the size of the .mdebug section.  */
13346           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
13347
13348           /* Skip this section later on (I don't think this currently
13349              matters, but someday it might).  */
13350           o->map_head.link_order = NULL;
13351
13352           mdebug_sec = o;
13353         }
13354
13355       if (CONST_STRNEQ (o->name, ".gptab."))
13356         {
13357           const char *subname;
13358           unsigned int c;
13359           Elf32_gptab *tab;
13360           Elf32_External_gptab *ext_tab;
13361           unsigned int j;
13362
13363           /* The .gptab.sdata and .gptab.sbss sections hold
13364              information describing how the small data area would
13365              change depending upon the -G switch.  These sections
13366              not used in executables files.  */
13367           if (! info->relocatable)
13368             {
13369               for (p = o->map_head.link_order; p != NULL; p = p->next)
13370                 {
13371                   asection *input_section;
13372
13373                   if (p->type != bfd_indirect_link_order)
13374                     {
13375                       if (p->type == bfd_data_link_order)
13376                         continue;
13377                       abort ();
13378                     }
13379
13380                   input_section = p->u.indirect.section;
13381
13382                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
13383                      elf_link_input_bfd ignores this section.  */
13384                   input_section->flags &= ~SEC_HAS_CONTENTS;
13385                 }
13386
13387               /* Skip this section later on (I don't think this
13388                  currently matters, but someday it might).  */
13389               o->map_head.link_order = NULL;
13390
13391               /* Really remove the section.  */
13392               bfd_section_list_remove (abfd, o);
13393               --abfd->section_count;
13394
13395               continue;
13396             }
13397
13398           /* There is one gptab for initialized data, and one for
13399              uninitialized data.  */
13400           if (strcmp (o->name, ".gptab.sdata") == 0)
13401             gptab_data_sec = o;
13402           else if (strcmp (o->name, ".gptab.sbss") == 0)
13403             gptab_bss_sec = o;
13404           else
13405             {
13406               (*_bfd_error_handler)
13407                 (_("%s: illegal section name `%s'"),
13408                  bfd_get_filename (abfd), o->name);
13409               bfd_set_error (bfd_error_nonrepresentable_section);
13410               return FALSE;
13411             }
13412
13413           /* The linker script always combines .gptab.data and
13414              .gptab.sdata into .gptab.sdata, and likewise for
13415              .gptab.bss and .gptab.sbss.  It is possible that there is
13416              no .sdata or .sbss section in the output file, in which
13417              case we must change the name of the output section.  */
13418           subname = o->name + sizeof ".gptab" - 1;
13419           if (bfd_get_section_by_name (abfd, subname) == NULL)
13420             {
13421               if (o == gptab_data_sec)
13422                 o->name = ".gptab.data";
13423               else
13424                 o->name = ".gptab.bss";
13425               subname = o->name + sizeof ".gptab" - 1;
13426               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13427             }
13428
13429           /* Set up the first entry.  */
13430           c = 1;
13431           amt = c * sizeof (Elf32_gptab);
13432           tab = bfd_malloc (amt);
13433           if (tab == NULL)
13434             return FALSE;
13435           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13436           tab[0].gt_header.gt_unused = 0;
13437
13438           /* Combine the input sections.  */
13439           for (p = o->map_head.link_order; p != NULL; p = p->next)
13440             {
13441               asection *input_section;
13442               bfd *input_bfd;
13443               bfd_size_type size;
13444               unsigned long last;
13445               bfd_size_type gpentry;
13446
13447               if (p->type != bfd_indirect_link_order)
13448                 {
13449                   if (p->type == bfd_data_link_order)
13450                     continue;
13451                   abort ();
13452                 }
13453
13454               input_section = p->u.indirect.section;
13455               input_bfd = input_section->owner;
13456
13457               /* Combine the gptab entries for this input section one
13458                  by one.  We know that the input gptab entries are
13459                  sorted by ascending -G value.  */
13460               size = input_section->size;
13461               last = 0;
13462               for (gpentry = sizeof (Elf32_External_gptab);
13463                    gpentry < size;
13464                    gpentry += sizeof (Elf32_External_gptab))
13465                 {
13466                   Elf32_External_gptab ext_gptab;
13467                   Elf32_gptab int_gptab;
13468                   unsigned long val;
13469                   unsigned long add;
13470                   bfd_boolean exact;
13471                   unsigned int look;
13472
13473                   if (! (bfd_get_section_contents
13474                          (input_bfd, input_section, &ext_gptab, gpentry,
13475                           sizeof (Elf32_External_gptab))))
13476                     {
13477                       free (tab);
13478                       return FALSE;
13479                     }
13480
13481                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13482                                                 &int_gptab);
13483                   val = int_gptab.gt_entry.gt_g_value;
13484                   add = int_gptab.gt_entry.gt_bytes - last;
13485
13486                   exact = FALSE;
13487                   for (look = 1; look < c; look++)
13488                     {
13489                       if (tab[look].gt_entry.gt_g_value >= val)
13490                         tab[look].gt_entry.gt_bytes += add;
13491
13492                       if (tab[look].gt_entry.gt_g_value == val)
13493                         exact = TRUE;
13494                     }
13495
13496                   if (! exact)
13497                     {
13498                       Elf32_gptab *new_tab;
13499                       unsigned int max;
13500
13501                       /* We need a new table entry.  */
13502                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
13503                       new_tab = bfd_realloc (tab, amt);
13504                       if (new_tab == NULL)
13505                         {
13506                           free (tab);
13507                           return FALSE;
13508                         }
13509                       tab = new_tab;
13510                       tab[c].gt_entry.gt_g_value = val;
13511                       tab[c].gt_entry.gt_bytes = add;
13512
13513                       /* Merge in the size for the next smallest -G
13514                          value, since that will be implied by this new
13515                          value.  */
13516                       max = 0;
13517                       for (look = 1; look < c; look++)
13518                         {
13519                           if (tab[look].gt_entry.gt_g_value < val
13520                               && (max == 0
13521                                   || (tab[look].gt_entry.gt_g_value
13522                                       > tab[max].gt_entry.gt_g_value)))
13523                             max = look;
13524                         }
13525                       if (max != 0)
13526                         tab[c].gt_entry.gt_bytes +=
13527                           tab[max].gt_entry.gt_bytes;
13528
13529                       ++c;
13530                     }
13531
13532                   last = int_gptab.gt_entry.gt_bytes;
13533                 }
13534
13535               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13536                  elf_link_input_bfd ignores this section.  */
13537               input_section->flags &= ~SEC_HAS_CONTENTS;
13538             }
13539
13540           /* The table must be sorted by -G value.  */
13541           if (c > 2)
13542             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13543
13544           /* Swap out the table.  */
13545           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
13546           ext_tab = bfd_alloc (abfd, amt);
13547           if (ext_tab == NULL)
13548             {
13549               free (tab);
13550               return FALSE;
13551             }
13552
13553           for (j = 0; j < c; j++)
13554             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13555           free (tab);
13556
13557           o->size = c * sizeof (Elf32_External_gptab);
13558           o->contents = (bfd_byte *) ext_tab;
13559
13560           /* Skip this section later on (I don't think this currently
13561              matters, but someday it might).  */
13562           o->map_head.link_order = NULL;
13563         }
13564     }
13565
13566   /* Invoke the regular ELF backend linker to do all the work.  */
13567   if (!bfd_elf_final_link (abfd, info))
13568     return FALSE;
13569
13570   /* Now write out the computed sections.  */
13571
13572   if (reginfo_sec != NULL)
13573     {
13574       Elf32_External_RegInfo ext;
13575
13576       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
13577       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
13578         return FALSE;
13579     }
13580
13581   if (mdebug_sec != NULL)
13582     {
13583       BFD_ASSERT (abfd->output_has_begun);
13584       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13585                                                swap, info,
13586                                                mdebug_sec->filepos))
13587         return FALSE;
13588
13589       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13590     }
13591
13592   if (gptab_data_sec != NULL)
13593     {
13594       if (! bfd_set_section_contents (abfd, gptab_data_sec,
13595                                       gptab_data_sec->contents,
13596                                       0, gptab_data_sec->size))
13597         return FALSE;
13598     }
13599
13600   if (gptab_bss_sec != NULL)
13601     {
13602       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13603                                       gptab_bss_sec->contents,
13604                                       0, gptab_bss_sec->size))
13605         return FALSE;
13606     }
13607
13608   if (SGI_COMPAT (abfd))
13609     {
13610       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13611       if (rtproc_sec != NULL)
13612         {
13613           if (! bfd_set_section_contents (abfd, rtproc_sec,
13614                                           rtproc_sec->contents,
13615                                           0, rtproc_sec->size))
13616             return FALSE;
13617         }
13618     }
13619
13620   return TRUE;
13621 }
13622 \f
13623 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13624
13625 struct mips_mach_extension {
13626   unsigned long extension, base;
13627 };
13628
13629
13630 /* An array describing how BFD machines relate to one another.  The entries
13631    are ordered topologically with MIPS I extensions listed last.  */
13632
13633 static const struct mips_mach_extension mips_mach_extensions[] = {
13634   /* MIPS64r2 extensions.  */
13635   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13636   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13637   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13638
13639   /* MIPS64 extensions.  */
13640   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13641   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13642   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13643   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
13644
13645   /* MIPS V extensions.  */
13646   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13647
13648   /* R10000 extensions.  */
13649   { bfd_mach_mips12000, bfd_mach_mips10000 },
13650   { bfd_mach_mips14000, bfd_mach_mips10000 },
13651   { bfd_mach_mips16000, bfd_mach_mips10000 },
13652
13653   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13654      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13655      better to allow vr5400 and vr5500 code to be merged anyway, since
13656      many libraries will just use the core ISA.  Perhaps we could add
13657      some sort of ASE flag if this ever proves a problem.  */
13658   { bfd_mach_mips5500, bfd_mach_mips5400 },
13659   { bfd_mach_mips5400, bfd_mach_mips5000 },
13660
13661   /* MIPS IV extensions.  */
13662   { bfd_mach_mips5, bfd_mach_mips8000 },
13663   { bfd_mach_mips10000, bfd_mach_mips8000 },
13664   { bfd_mach_mips5000, bfd_mach_mips8000 },
13665   { bfd_mach_mips7000, bfd_mach_mips8000 },
13666   { bfd_mach_mips9000, bfd_mach_mips8000 },
13667
13668   /* VR4100 extensions.  */
13669   { bfd_mach_mips4120, bfd_mach_mips4100 },
13670   { bfd_mach_mips4111, bfd_mach_mips4100 },
13671
13672   /* MIPS III extensions.  */
13673   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13674   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13675   { bfd_mach_mips8000, bfd_mach_mips4000 },
13676   { bfd_mach_mips4650, bfd_mach_mips4000 },
13677   { bfd_mach_mips4600, bfd_mach_mips4000 },
13678   { bfd_mach_mips4400, bfd_mach_mips4000 },
13679   { bfd_mach_mips4300, bfd_mach_mips4000 },
13680   { bfd_mach_mips4100, bfd_mach_mips4000 },
13681   { bfd_mach_mips4010, bfd_mach_mips4000 },
13682
13683   /* MIPS32 extensions.  */
13684   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13685
13686   /* MIPS II extensions.  */
13687   { bfd_mach_mips4000, bfd_mach_mips6000 },
13688   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13689
13690   /* MIPS I extensions.  */
13691   { bfd_mach_mips6000, bfd_mach_mips3000 },
13692   { bfd_mach_mips3900, bfd_mach_mips3000 }
13693 };
13694
13695
13696 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
13697
13698 static bfd_boolean
13699 mips_mach_extends_p (unsigned long base, unsigned long extension)
13700 {
13701   size_t i;
13702
13703   if (extension == base)
13704     return TRUE;
13705
13706   if (base == bfd_mach_mipsisa32
13707       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13708     return TRUE;
13709
13710   if (base == bfd_mach_mipsisa32r2
13711       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13712     return TRUE;
13713
13714   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
13715     if (extension == mips_mach_extensions[i].extension)
13716       {
13717         extension = mips_mach_extensions[i].base;
13718         if (extension == base)
13719           return TRUE;
13720       }
13721
13722   return FALSE;
13723 }
13724
13725
13726 /* Return true if the given ELF header flags describe a 32-bit binary.  */
13727
13728 static bfd_boolean
13729 mips_32bit_flags_p (flagword flags)
13730 {
13731   return ((flags & EF_MIPS_32BITMODE) != 0
13732           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13733           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13734           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13735           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13736           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13737           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
13738 }
13739
13740
13741 /* Merge object attributes from IBFD into OBFD.  Raise an error if
13742    there are conflicting attributes.  */
13743 static bfd_boolean
13744 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13745 {
13746   obj_attribute *in_attr;
13747   obj_attribute *out_attr;
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   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13764   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13765   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13766     {
13767       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13768       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13769         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
13770       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13771         ;
13772       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i > 4)
13773         _bfd_error_handler
13774           (_("Warning: %B uses unknown floating point ABI %d"), ibfd,
13775            in_attr[Tag_GNU_MIPS_ABI_FP].i);
13776       else if (out_attr[Tag_GNU_MIPS_ABI_FP].i > 4)
13777         _bfd_error_handler
13778           (_("Warning: %B uses unknown floating point ABI %d"), obfd,
13779            out_attr[Tag_GNU_MIPS_ABI_FP].i);
13780       else
13781         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13782           {
13783           case 1:
13784             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13785               {
13786               case 2:
13787                 _bfd_error_handler
13788                   (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
13789                    obfd, ibfd);
13790                 break;
13791
13792               case 3:
13793                 _bfd_error_handler
13794                   (_("Warning: %B uses hard float, %B uses soft float"),
13795                    obfd, ibfd);
13796                 break;
13797
13798               case 4:
13799                 _bfd_error_handler
13800                   (_("Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64"),
13801                    obfd, ibfd);
13802                 break;
13803
13804               default:
13805                 abort ();
13806               }
13807             break;
13808
13809           case 2:
13810             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13811               {
13812               case 1:
13813                 _bfd_error_handler
13814                   (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
13815                    ibfd, obfd);
13816                 break;
13817
13818               case 3:
13819                 _bfd_error_handler
13820                   (_("Warning: %B uses hard float, %B uses soft float"),
13821                    obfd, ibfd);
13822                 break;
13823
13824               case 4:
13825                 _bfd_error_handler
13826                   (_("Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64"),
13827                    obfd, ibfd);
13828                 break;
13829
13830               default:
13831                 abort ();
13832               }
13833             break;
13834
13835           case 3:
13836             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13837               {
13838               case 1:
13839               case 2:
13840               case 4:
13841                 _bfd_error_handler
13842                   (_("Warning: %B uses hard float, %B uses soft float"),
13843                    ibfd, obfd);
13844                 break;
13845
13846               default:
13847                 abort ();
13848               }
13849             break;
13850
13851           case 4:
13852             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13853               {
13854               case 1:
13855                 _bfd_error_handler
13856                   (_("Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64"),
13857                    ibfd, obfd);
13858                 break;
13859
13860               case 2:
13861                 _bfd_error_handler
13862                   (_("Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64"),
13863                    ibfd, obfd);
13864                 break;
13865
13866               case 3:
13867                 _bfd_error_handler
13868                   (_("Warning: %B uses hard float, %B uses soft float"),
13869                    obfd, ibfd);
13870                 break;
13871
13872               default:
13873                 abort ();
13874               }
13875             break;
13876
13877           default:
13878             abort ();
13879           }
13880     }
13881
13882   /* Merge Tag_compatibility attributes and any common GNU ones.  */
13883   _bfd_elf_merge_object_attributes (ibfd, obfd);
13884
13885   return TRUE;
13886 }
13887
13888 /* Merge backend specific data from an object file to the output
13889    object file when linking.  */
13890
13891 bfd_boolean
13892 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
13893 {
13894   flagword old_flags;
13895   flagword new_flags;
13896   bfd_boolean ok;
13897   bfd_boolean null_input_bfd = TRUE;
13898   asection *sec;
13899
13900   /* Check if we have the same endianness.  */
13901   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
13902     {
13903       (*_bfd_error_handler)
13904         (_("%B: endianness incompatible with that of the selected emulation"),
13905          ibfd);
13906       return FALSE;
13907     }
13908
13909   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
13910     return TRUE;
13911
13912   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
13913     {
13914       (*_bfd_error_handler)
13915         (_("%B: ABI is incompatible with that of the selected emulation"),
13916          ibfd);
13917       return FALSE;
13918     }
13919
13920   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
13921     return FALSE;
13922
13923   new_flags = elf_elfheader (ibfd)->e_flags;
13924   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
13925   old_flags = elf_elfheader (obfd)->e_flags;
13926
13927   if (! elf_flags_init (obfd))
13928     {
13929       elf_flags_init (obfd) = TRUE;
13930       elf_elfheader (obfd)->e_flags = new_flags;
13931       elf_elfheader (obfd)->e_ident[EI_CLASS]
13932         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
13933
13934       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
13935           && (bfd_get_arch_info (obfd)->the_default
13936               || mips_mach_extends_p (bfd_get_mach (obfd), 
13937                                       bfd_get_mach (ibfd))))
13938         {
13939           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
13940                                    bfd_get_mach (ibfd)))
13941             return FALSE;
13942         }
13943
13944       return TRUE;
13945     }
13946
13947   /* Check flag compatibility.  */
13948
13949   new_flags &= ~EF_MIPS_NOREORDER;
13950   old_flags &= ~EF_MIPS_NOREORDER;
13951
13952   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
13953      doesn't seem to matter.  */
13954   new_flags &= ~EF_MIPS_XGOT;
13955   old_flags &= ~EF_MIPS_XGOT;
13956
13957   /* MIPSpro generates ucode info in n64 objects.  Again, we should
13958      just be able to ignore this.  */
13959   new_flags &= ~EF_MIPS_UCODE;
13960   old_flags &= ~EF_MIPS_UCODE;
13961
13962   /* DSOs should only be linked with CPIC code.  */
13963   if ((ibfd->flags & DYNAMIC) != 0)
13964     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
13965
13966   if (new_flags == old_flags)
13967     return TRUE;
13968
13969   /* Check to see if the input BFD actually contains any sections.
13970      If not, its flags may not have been initialised either, but it cannot
13971      actually cause any incompatibility.  */
13972   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
13973     {
13974       /* Ignore synthetic sections and empty .text, .data and .bss sections
13975          which are automatically generated by gas.  Also ignore fake
13976          (s)common sections, since merely defining a common symbol does
13977          not affect compatibility.  */
13978       if ((sec->flags & SEC_IS_COMMON) == 0
13979           && strcmp (sec->name, ".reginfo")
13980           && strcmp (sec->name, ".mdebug")
13981           && (sec->size != 0
13982               || (strcmp (sec->name, ".text")
13983                   && strcmp (sec->name, ".data")
13984                   && strcmp (sec->name, ".bss"))))
13985         {
13986           null_input_bfd = FALSE;
13987           break;
13988         }
13989     }
13990   if (null_input_bfd)
13991     return TRUE;
13992
13993   ok = TRUE;
13994
13995   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
13996       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
13997     {
13998       (*_bfd_error_handler)
13999         (_("%B: warning: linking abicalls files with non-abicalls files"),
14000          ibfd);
14001       ok = TRUE;
14002     }
14003
14004   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14005     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14006   if (! (new_flags & EF_MIPS_PIC))
14007     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14008
14009   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14010   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14011
14012   /* Compare the ISAs.  */
14013   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14014     {
14015       (*_bfd_error_handler)
14016         (_("%B: linking 32-bit code with 64-bit code"),
14017          ibfd);
14018       ok = FALSE;
14019     }
14020   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14021     {
14022       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
14023       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
14024         {
14025           /* Copy the architecture info from IBFD to OBFD.  Also copy
14026              the 32-bit flag (if set) so that we continue to recognise
14027              OBFD as a 32-bit binary.  */
14028           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14029           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14030           elf_elfheader (obfd)->e_flags
14031             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14032
14033           /* Copy across the ABI flags if OBFD doesn't use them
14034              and if that was what caused us to treat IBFD as 32-bit.  */
14035           if ((old_flags & EF_MIPS_ABI) == 0
14036               && mips_32bit_flags_p (new_flags)
14037               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14038             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14039         }
14040       else
14041         {
14042           /* The ISAs aren't compatible.  */
14043           (*_bfd_error_handler)
14044             (_("%B: linking %s module with previous %s modules"),
14045              ibfd,
14046              bfd_printable_name (ibfd),
14047              bfd_printable_name (obfd));
14048           ok = FALSE;
14049         }
14050     }
14051
14052   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14053   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14054
14055   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14056      does set EI_CLASS differently from any 32-bit ABI.  */
14057   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14058       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14059           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14060     {
14061       /* Only error if both are set (to different values).  */
14062       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14063           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14064               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14065         {
14066           (*_bfd_error_handler)
14067             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14068              ibfd,
14069              elf_mips_abi_name (ibfd),
14070              elf_mips_abi_name (obfd));
14071           ok = FALSE;
14072         }
14073       new_flags &= ~EF_MIPS_ABI;
14074       old_flags &= ~EF_MIPS_ABI;
14075     }
14076
14077   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
14078      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
14079   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14080     {
14081       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14082       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14083       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14084       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14085       int micro_mis = old_m16 && new_micro;
14086       int m16_mis = old_micro && new_m16;
14087
14088       if (m16_mis || micro_mis)
14089         {
14090           (*_bfd_error_handler)
14091             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14092              ibfd,
14093              m16_mis ? "MIPS16" : "microMIPS",
14094              m16_mis ? "microMIPS" : "MIPS16");
14095           ok = FALSE;
14096         }
14097
14098       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14099
14100       new_flags &= ~ EF_MIPS_ARCH_ASE;
14101       old_flags &= ~ EF_MIPS_ARCH_ASE;
14102     }
14103
14104   /* Warn about any other mismatches */
14105   if (new_flags != old_flags)
14106     {
14107       (*_bfd_error_handler)
14108         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14109          ibfd, (unsigned long) new_flags,
14110          (unsigned long) old_flags);
14111       ok = FALSE;
14112     }
14113
14114   if (! ok)
14115     {
14116       bfd_set_error (bfd_error_bad_value);
14117       return FALSE;
14118     }
14119
14120   return TRUE;
14121 }
14122
14123 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
14124
14125 bfd_boolean
14126 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
14127 {
14128   BFD_ASSERT (!elf_flags_init (abfd)
14129               || elf_elfheader (abfd)->e_flags == flags);
14130
14131   elf_elfheader (abfd)->e_flags = flags;
14132   elf_flags_init (abfd) = TRUE;
14133   return TRUE;
14134 }
14135
14136 char *
14137 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14138 {
14139   switch (dtag)
14140     {
14141     default: return "";
14142     case DT_MIPS_RLD_VERSION:
14143       return "MIPS_RLD_VERSION";
14144     case DT_MIPS_TIME_STAMP:
14145       return "MIPS_TIME_STAMP";
14146     case DT_MIPS_ICHECKSUM:
14147       return "MIPS_ICHECKSUM";
14148     case DT_MIPS_IVERSION:
14149       return "MIPS_IVERSION";
14150     case DT_MIPS_FLAGS:
14151       return "MIPS_FLAGS";
14152     case DT_MIPS_BASE_ADDRESS:
14153       return "MIPS_BASE_ADDRESS";
14154     case DT_MIPS_MSYM:
14155       return "MIPS_MSYM";
14156     case DT_MIPS_CONFLICT:
14157       return "MIPS_CONFLICT";
14158     case DT_MIPS_LIBLIST:
14159       return "MIPS_LIBLIST";
14160     case DT_MIPS_LOCAL_GOTNO:
14161       return "MIPS_LOCAL_GOTNO";
14162     case DT_MIPS_CONFLICTNO:
14163       return "MIPS_CONFLICTNO";
14164     case DT_MIPS_LIBLISTNO:
14165       return "MIPS_LIBLISTNO";
14166     case DT_MIPS_SYMTABNO:
14167       return "MIPS_SYMTABNO";
14168     case DT_MIPS_UNREFEXTNO:
14169       return "MIPS_UNREFEXTNO";
14170     case DT_MIPS_GOTSYM:
14171       return "MIPS_GOTSYM";
14172     case DT_MIPS_HIPAGENO:
14173       return "MIPS_HIPAGENO";
14174     case DT_MIPS_RLD_MAP:
14175       return "MIPS_RLD_MAP";
14176     case DT_MIPS_DELTA_CLASS:
14177       return "MIPS_DELTA_CLASS";
14178     case DT_MIPS_DELTA_CLASS_NO:
14179       return "MIPS_DELTA_CLASS_NO";
14180     case DT_MIPS_DELTA_INSTANCE:
14181       return "MIPS_DELTA_INSTANCE";
14182     case DT_MIPS_DELTA_INSTANCE_NO:
14183       return "MIPS_DELTA_INSTANCE_NO";
14184     case DT_MIPS_DELTA_RELOC:
14185       return "MIPS_DELTA_RELOC";
14186     case DT_MIPS_DELTA_RELOC_NO:
14187       return "MIPS_DELTA_RELOC_NO";
14188     case DT_MIPS_DELTA_SYM:
14189       return "MIPS_DELTA_SYM";
14190     case DT_MIPS_DELTA_SYM_NO:
14191       return "MIPS_DELTA_SYM_NO";
14192     case DT_MIPS_DELTA_CLASSSYM:
14193       return "MIPS_DELTA_CLASSSYM";
14194     case DT_MIPS_DELTA_CLASSSYM_NO:
14195       return "MIPS_DELTA_CLASSSYM_NO";
14196     case DT_MIPS_CXX_FLAGS:
14197       return "MIPS_CXX_FLAGS";
14198     case DT_MIPS_PIXIE_INIT:
14199       return "MIPS_PIXIE_INIT";
14200     case DT_MIPS_SYMBOL_LIB:
14201       return "MIPS_SYMBOL_LIB";
14202     case DT_MIPS_LOCALPAGE_GOTIDX:
14203       return "MIPS_LOCALPAGE_GOTIDX";
14204     case DT_MIPS_LOCAL_GOTIDX:
14205       return "MIPS_LOCAL_GOTIDX";
14206     case DT_MIPS_HIDDEN_GOTIDX:
14207       return "MIPS_HIDDEN_GOTIDX";
14208     case DT_MIPS_PROTECTED_GOTIDX:
14209       return "MIPS_PROTECTED_GOT_IDX";
14210     case DT_MIPS_OPTIONS:
14211       return "MIPS_OPTIONS";
14212     case DT_MIPS_INTERFACE:
14213       return "MIPS_INTERFACE";
14214     case DT_MIPS_DYNSTR_ALIGN:
14215       return "DT_MIPS_DYNSTR_ALIGN";
14216     case DT_MIPS_INTERFACE_SIZE:
14217       return "DT_MIPS_INTERFACE_SIZE";
14218     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14219       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14220     case DT_MIPS_PERF_SUFFIX:
14221       return "DT_MIPS_PERF_SUFFIX";
14222     case DT_MIPS_COMPACT_SIZE:
14223       return "DT_MIPS_COMPACT_SIZE";
14224     case DT_MIPS_GP_VALUE:
14225       return "DT_MIPS_GP_VALUE";
14226     case DT_MIPS_AUX_DYNAMIC:
14227       return "DT_MIPS_AUX_DYNAMIC";
14228     case DT_MIPS_PLTGOT:
14229       return "DT_MIPS_PLTGOT";
14230     case DT_MIPS_RWPLT:
14231       return "DT_MIPS_RWPLT";
14232     }
14233 }
14234
14235 bfd_boolean
14236 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
14237 {
14238   FILE *file = ptr;
14239
14240   BFD_ASSERT (abfd != NULL && ptr != NULL);
14241
14242   /* Print normal ELF private data.  */
14243   _bfd_elf_print_private_bfd_data (abfd, ptr);
14244
14245   /* xgettext:c-format */
14246   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14247
14248   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14249     fprintf (file, _(" [abi=O32]"));
14250   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14251     fprintf (file, _(" [abi=O64]"));
14252   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14253     fprintf (file, _(" [abi=EABI32]"));
14254   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14255     fprintf (file, _(" [abi=EABI64]"));
14256   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14257     fprintf (file, _(" [abi unknown]"));
14258   else if (ABI_N32_P (abfd))
14259     fprintf (file, _(" [abi=N32]"));
14260   else if (ABI_64_P (abfd))
14261     fprintf (file, _(" [abi=64]"));
14262   else
14263     fprintf (file, _(" [no abi set]"));
14264
14265   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
14266     fprintf (file, " [mips1]");
14267   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
14268     fprintf (file, " [mips2]");
14269   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
14270     fprintf (file, " [mips3]");
14271   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
14272     fprintf (file, " [mips4]");
14273   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
14274     fprintf (file, " [mips5]");
14275   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
14276     fprintf (file, " [mips32]");
14277   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
14278     fprintf (file, " [mips64]");
14279   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
14280     fprintf (file, " [mips32r2]");
14281   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
14282     fprintf (file, " [mips64r2]");
14283   else
14284     fprintf (file, _(" [unknown ISA]"));
14285
14286   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14287     fprintf (file, " [mdmx]");
14288
14289   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14290     fprintf (file, " [mips16]");
14291
14292   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14293     fprintf (file, " [micromips]");
14294
14295   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
14296     fprintf (file, " [32bitmode]");
14297   else
14298     fprintf (file, _(" [not 32bitmode]"));
14299
14300   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
14301     fprintf (file, " [noreorder]");
14302
14303   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
14304     fprintf (file, " [PIC]");
14305
14306   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
14307     fprintf (file, " [CPIC]");
14308
14309   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
14310     fprintf (file, " [XGOT]");
14311
14312   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
14313     fprintf (file, " [UCODE]");
14314
14315   fputc ('\n', file);
14316
14317   return TRUE;
14318 }
14319
14320 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
14321 {
14322   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14323   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14324   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14325   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14326   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14327   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
14328   { NULL,                     0,  0, 0,              0 }
14329 };
14330
14331 /* Merge non visibility st_other attributes.  Ensure that the
14332    STO_OPTIONAL flag is copied into h->other, even if this is not a
14333    definiton of the symbol.  */
14334 void
14335 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14336                                       const Elf_Internal_Sym *isym,
14337                                       bfd_boolean definition,
14338                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
14339 {
14340   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14341     {
14342       unsigned char other;
14343
14344       other = (definition ? isym->st_other : h->other);
14345       other &= ~ELF_ST_VISIBILITY (-1);
14346       h->other = other | ELF_ST_VISIBILITY (h->other);
14347     }
14348
14349   if (!definition
14350       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14351     h->other |= STO_OPTIONAL;
14352 }
14353
14354 /* Decide whether an undefined symbol is special and can be ignored.
14355    This is the case for OPTIONAL symbols on IRIX.  */
14356 bfd_boolean
14357 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14358 {
14359   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14360 }
14361
14362 bfd_boolean
14363 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14364 {
14365   return (sym->st_shndx == SHN_COMMON
14366           || sym->st_shndx == SHN_MIPS_ACOMMON
14367           || sym->st_shndx == SHN_MIPS_SCOMMON);
14368 }
14369
14370 /* Return address for Ith PLT stub in section PLT, for relocation REL
14371    or (bfd_vma) -1 if it should not be included.  */
14372
14373 bfd_vma
14374 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14375                            const arelent *rel ATTRIBUTE_UNUSED)
14376 {
14377   return (plt->vma
14378           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14379           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14380 }
14381
14382 void
14383 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14384 {
14385   struct mips_elf_link_hash_table *htab;
14386   Elf_Internal_Ehdr *i_ehdrp;
14387
14388   i_ehdrp = elf_elfheader (abfd);
14389   if (link_info)
14390     {
14391       htab = mips_elf_hash_table (link_info);
14392       BFD_ASSERT (htab != NULL);
14393
14394       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14395         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14396     }
14397 }