* elf-bfd.h (struct elf_obj_tdata): Move find_line_info, local_stubs,
[platform/upstream/binutils.git] / bfd / elfxx-mips.c
1 /* MIPS-specific support for ELF
2    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
4    Free Software Foundation, Inc.
5
6    Most of the information added by Ian Lance Taylor, Cygnus Support,
7    <ian@cygnus.com>.
8    N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
9    <mark@codesourcery.com>
10    Traditional MIPS targets support added by Koundinya.K, Dansk Data
11    Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
12
13    This file is part of BFD, the Binary File Descriptor library.
14
15    This program is free software; you can redistribute it and/or modify
16    it under the terms of the GNU General Public License as published by
17    the Free Software Foundation; either version 3 of the License, or
18    (at your option) any later version.
19
20    This program is distributed in the hope that it will be useful,
21    but WITHOUT ANY WARRANTY; without even the implied warranty of
22    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23    GNU General Public License for more details.
24
25    You should have received a copy of the GNU General Public License
26    along with this program; if not, write to the Free Software
27    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
28    MA 02110-1301, USA.  */
29
30
31 /* This file handles functionality common to the different MIPS ABI's.  */
32
33 #include "sysdep.h"
34 #include "bfd.h"
35 #include "libbfd.h"
36 #include "libiberty.h"
37 #include "elf-bfd.h"
38 #include "elfxx-mips.h"
39 #include "elf/mips.h"
40 #include "elf-vxworks.h"
41
42 /* Get the ECOFF swapping routines.  */
43 #include "coff/sym.h"
44 #include "coff/symconst.h"
45 #include "coff/ecoff.h"
46 #include "coff/mips.h"
47
48 #include "hashtab.h"
49
50 /* Types of TLS GOT entry.  */
51 enum mips_got_tls_type {
52   GOT_TLS_NONE,
53   GOT_TLS_GD,
54   GOT_TLS_LDM,
55   GOT_TLS_IE
56 };
57
58 /* This structure is used to hold information about one GOT entry.
59    There are four types of entry:
60
61       (1) an absolute address
62             requires: abfd == NULL
63             fields: d.address
64
65       (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd
66             requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM
67             fields: abfd, symndx, d.addend, tls_type
68
69       (3) a SYMBOL address, where SYMBOL is not local to an input bfd
70             requires: abfd != NULL, symndx == -1
71             fields: d.h, tls_type
72
73       (4) a TLS LDM slot
74             requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM
75             fields: none; there's only one of these per GOT.  */
76 struct mips_got_entry
77 {
78   /* One input bfd that needs the GOT entry.  */
79   bfd *abfd;
80   /* The index of the symbol, as stored in the relocation r_info, if
81      we have a local symbol; -1 otherwise.  */
82   long symndx;
83   union
84   {
85     /* If abfd == NULL, an address that must be stored in the got.  */
86     bfd_vma address;
87     /* If abfd != NULL && symndx != -1, the addend of the relocation
88        that should be added to the symbol value.  */
89     bfd_vma addend;
90     /* If abfd != NULL && symndx == -1, the hash table entry
91        corresponding to a symbol in the GOT.  The symbol's entry
92        is in the local area if h->global_got_area is GGA_NONE,
93        otherwise it is in the global area.  */
94     struct mips_elf_link_hash_entry *h;
95   } d;
96
97   /* The TLS type of this GOT entry.  An LDM GOT entry will be a local
98      symbol entry with r_symndx == 0.  */
99   unsigned char tls_type;
100
101   /* True if we have filled in the GOT contents for a TLS entry,
102      and created the associated relocations.  */
103   unsigned char tls_initialized;
104
105   /* The offset from the beginning of the .got section to the entry
106      corresponding to this symbol+addend.  If it's a global symbol
107      whose offset is yet to be decided, it's going to be -1.  */
108   long gotidx;
109 };
110
111 /* This structure represents a GOT page reference from an input bfd.
112    Each instance represents a symbol + ADDEND, where the representation
113    of the symbol depends on whether it is local to the input bfd.
114    If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD.
115    Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry.
116
117    Page references with SYMNDX >= 0 always become page references
118    in the output.  Page references with SYMNDX < 0 only become page
119    references if the symbol binds locally; in other cases, the page
120    reference decays to a global GOT reference.  */
121 struct mips_got_page_ref
122 {
123   long symndx;
124   union
125   {
126     struct mips_elf_link_hash_entry *h;
127     bfd *abfd;
128   } u;
129   bfd_vma addend;
130 };
131
132 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
133    The structures form a non-overlapping list that is sorted by increasing
134    MIN_ADDEND.  */
135 struct mips_got_page_range
136 {
137   struct mips_got_page_range *next;
138   bfd_signed_vma min_addend;
139   bfd_signed_vma max_addend;
140 };
141
142 /* This structure describes the range of addends that are applied to page
143    relocations against a given section.  */
144 struct mips_got_page_entry
145 {
146   /* The section that these entries are based on.  */
147   asection *sec;
148   /* The ranges for this page entry.  */
149   struct mips_got_page_range *ranges;
150   /* The maximum number of page entries needed for RANGES.  */
151   bfd_vma num_pages;
152 };
153
154 /* This structure is used to hold .got information when linking.  */
155
156 struct mips_got_info
157 {
158   /* The number of global .got entries.  */
159   unsigned int global_gotno;
160   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
161   unsigned int reloc_only_gotno;
162   /* The number of .got slots used for TLS.  */
163   unsigned int tls_gotno;
164   /* The first unused TLS .got entry.  Used only during
165      mips_elf_initialize_tls_index.  */
166   unsigned int tls_assigned_gotno;
167   /* The number of local .got entries, eventually including page entries.  */
168   unsigned int local_gotno;
169   /* The maximum number of page entries needed.  */
170   unsigned int page_gotno;
171   /* The number of relocations needed for the GOT entries.  */
172   unsigned int relocs;
173   /* The number of local .got entries we have used.  */
174   unsigned int assigned_gotno;
175   /* A hash table holding members of the got.  */
176   struct htab *got_entries;
177   /* A hash table holding mips_got_page_ref structures.  */
178   struct htab *got_page_refs;
179   /* A hash table of mips_got_page_entry structures.  */
180   struct htab *got_page_entries;
181   /* In multi-got links, a pointer to the next got (err, rather, most
182      of the time, it points to the previous got).  */
183   struct mips_got_info *next;
184 };
185
186 /* Structure passed when merging bfds' gots.  */
187
188 struct mips_elf_got_per_bfd_arg
189 {
190   /* The output bfd.  */
191   bfd *obfd;
192   /* The link information.  */
193   struct bfd_link_info *info;
194   /* A pointer to the primary got, i.e., the one that's going to get
195      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
196      DT_MIPS_GOTSYM.  */
197   struct mips_got_info *primary;
198   /* A non-primary got we're trying to merge with other input bfd's
199      gots.  */
200   struct mips_got_info *current;
201   /* The maximum number of got entries that can be addressed with a
202      16-bit offset.  */
203   unsigned int max_count;
204   /* The maximum number of page entries needed by each got.  */
205   unsigned int max_pages;
206   /* The total number of global entries which will live in the
207      primary got and be automatically relocated.  This includes
208      those not referenced by the primary GOT but included in
209      the "master" GOT.  */
210   unsigned int global_count;
211 };
212
213 /* A structure used to pass information to htab_traverse callbacks
214    when laying out the GOT.  */
215
216 struct mips_elf_traverse_got_arg
217 {
218   struct bfd_link_info *info;
219   struct mips_got_info *g;
220   int value;
221 };
222
223 struct _mips_elf_section_data
224 {
225   struct bfd_elf_section_data elf;
226   union
227   {
228     bfd_byte *tdata;
229   } u;
230 };
231
232 #define mips_elf_section_data(sec) \
233   ((struct _mips_elf_section_data *) elf_section_data (sec))
234
235 #define is_mips_elf(bfd)                                \
236   (bfd_get_flavour (bfd) == bfd_target_elf_flavour      \
237    && elf_tdata (bfd) != NULL                           \
238    && elf_object_id (bfd) == MIPS_ELF_DATA)
239
240 /* The ABI says that every symbol used by dynamic relocations must have
241    a global GOT entry.  Among other things, this provides the dynamic
242    linker with a free, directly-indexed cache.  The GOT can therefore
243    contain symbols that are not referenced by GOT relocations themselves
244    (in other words, it may have symbols that are not referenced by things
245    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
246
247    GOT relocations are less likely to overflow if we put the associated
248    GOT entries towards the beginning.  We therefore divide the global
249    GOT entries into two areas: "normal" and "reloc-only".  Entries in
250    the first area can be used for both dynamic relocations and GP-relative
251    accesses, while those in the "reloc-only" area are for dynamic
252    relocations only.
253
254    These GGA_* ("Global GOT Area") values are organised so that lower
255    values are more general than higher values.  Also, non-GGA_NONE
256    values are ordered by the position of the area in the GOT.  */
257 #define GGA_NORMAL 0
258 #define GGA_RELOC_ONLY 1
259 #define GGA_NONE 2
260
261 /* Information about a non-PIC interface to a PIC function.  There are
262    two ways of creating these interfaces.  The first is to add:
263
264         lui     $25,%hi(func)
265         addiu   $25,$25,%lo(func)
266
267    immediately before a PIC function "func".  The second is to add:
268
269         lui     $25,%hi(func)
270         j       func
271         addiu   $25,$25,%lo(func)
272
273    to a separate trampoline section.
274
275    Stubs of the first kind go in a new section immediately before the
276    target function.  Stubs of the second kind go in a single section
277    pointed to by the hash table's "strampoline" field.  */
278 struct mips_elf_la25_stub {
279   /* The generated section that contains this stub.  */
280   asection *stub_section;
281
282   /* The offset of the stub from the start of STUB_SECTION.  */
283   bfd_vma offset;
284
285   /* One symbol for the original function.  Its location is available
286      in H->root.root.u.def.  */
287   struct mips_elf_link_hash_entry *h;
288 };
289
290 /* Macros for populating a mips_elf_la25_stub.  */
291
292 #define LA25_LUI(VAL) (0x3c190000 | (VAL))      /* lui t9,VAL */
293 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
294 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))    /* addiu t9,t9,VAL */
295 #define LA25_LUI_MICROMIPS(VAL)                                         \
296   (0x41b90000 | (VAL))                          /* lui t9,VAL */
297 #define LA25_J_MICROMIPS(VAL)                                           \
298   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))     /* j VAL */
299 #define LA25_ADDIU_MICROMIPS(VAL)                                       \
300   (0x33390000 | (VAL))                          /* addiu t9,t9,VAL */
301
302 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
303    the dynamic symbols.  */
304
305 struct mips_elf_hash_sort_data
306 {
307   /* The symbol in the global GOT with the lowest dynamic symbol table
308      index.  */
309   struct elf_link_hash_entry *low;
310   /* The least dynamic symbol table index corresponding to a non-TLS
311      symbol with a GOT entry.  */
312   long min_got_dynindx;
313   /* The greatest dynamic symbol table index corresponding to a symbol
314      with a GOT entry that is not referenced (e.g., a dynamic symbol
315      with dynamic relocations pointing to it from non-primary GOTs).  */
316   long max_unref_got_dynindx;
317   /* The greatest dynamic symbol table index not corresponding to a
318      symbol without a GOT entry.  */
319   long max_non_got_dynindx;
320 };
321
322 /* The MIPS ELF linker needs additional information for each symbol in
323    the global hash table.  */
324
325 struct mips_elf_link_hash_entry
326 {
327   struct elf_link_hash_entry root;
328
329   /* External symbol information.  */
330   EXTR esym;
331
332   /* The la25 stub we have created for ths symbol, if any.  */
333   struct mips_elf_la25_stub *la25_stub;
334
335   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
336      this symbol.  */
337   unsigned int possibly_dynamic_relocs;
338
339   /* If there is a stub that 32 bit functions should use to call this
340      16 bit function, this points to the section containing the stub.  */
341   asection *fn_stub;
342
343   /* If there is a stub that 16 bit functions should use to call this
344      32 bit function, this points to the section containing the stub.  */
345   asection *call_stub;
346
347   /* This is like the call_stub field, but it is used if the function
348      being called returns a floating point value.  */
349   asection *call_fp_stub;
350
351   /* The highest GGA_* value that satisfies all references to this symbol.  */
352   unsigned int global_got_area : 2;
353
354   /* True if all GOT relocations against this symbol are for calls.  This is
355      a looser condition than no_fn_stub below, because there may be other
356      non-call non-GOT relocations against the symbol.  */
357   unsigned int got_only_for_calls : 1;
358
359   /* True if one of the relocations described by possibly_dynamic_relocs
360      is against a readonly section.  */
361   unsigned int readonly_reloc : 1;
362
363   /* True if there is a relocation against this symbol that must be
364      resolved by the static linker (in other words, if the relocation
365      cannot possibly be made dynamic).  */
366   unsigned int has_static_relocs : 1;
367
368   /* True if we must not create a .MIPS.stubs entry for this symbol.
369      This is set, for example, if there are relocations related to
370      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
371      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
372   unsigned int no_fn_stub : 1;
373
374   /* Whether we need the fn_stub; this is true if this symbol appears
375      in any relocs other than a 16 bit call.  */
376   unsigned int need_fn_stub : 1;
377
378   /* True if this symbol is referenced by branch relocations from
379      any non-PIC input file.  This is used to determine whether an
380      la25 stub is required.  */
381   unsigned int has_nonpic_branches : 1;
382
383   /* Does this symbol need a traditional MIPS lazy-binding stub
384      (as opposed to a PLT entry)?  */
385   unsigned int needs_lazy_stub : 1;
386 };
387
388 /* MIPS ELF linker hash table.  */
389
390 struct mips_elf_link_hash_table
391 {
392   struct elf_link_hash_table root;
393
394   /* The number of .rtproc entries.  */
395   bfd_size_type procedure_count;
396
397   /* The size of the .compact_rel section (if SGI_COMPAT).  */
398   bfd_size_type compact_rel_size;
399
400   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
401      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
402   bfd_boolean use_rld_obj_head;
403
404   /* The  __rld_map or __rld_obj_head symbol. */
405   struct elf_link_hash_entry *rld_symbol;
406
407   /* This is set if we see any mips16 stub sections.  */
408   bfd_boolean mips16_stubs_seen;
409
410   /* True if we can generate copy relocs and PLTs.  */
411   bfd_boolean use_plts_and_copy_relocs;
412
413   /* True if we're generating code for VxWorks.  */
414   bfd_boolean is_vxworks;
415
416   /* True if we already reported the small-data section overflow.  */
417   bfd_boolean small_data_overflow_reported;
418
419   /* Shortcuts to some dynamic sections, or NULL if they are not
420      being used.  */
421   asection *srelbss;
422   asection *sdynbss;
423   asection *srelplt;
424   asection *srelplt2;
425   asection *sgotplt;
426   asection *splt;
427   asection *sstubs;
428   asection *sgot;
429
430   /* The master GOT information.  */
431   struct mips_got_info *got_info;
432
433   /* The global symbol in the GOT with the lowest index in the dynamic
434      symbol table.  */
435   struct elf_link_hash_entry *global_gotsym;
436
437   /* The size of the PLT header in bytes.  */
438   bfd_vma plt_header_size;
439
440   /* The size of a PLT entry in bytes.  */
441   bfd_vma plt_entry_size;
442
443   /* The number of functions that need a lazy-binding stub.  */
444   bfd_vma lazy_stub_count;
445
446   /* The size of a function stub entry in bytes.  */
447   bfd_vma function_stub_size;
448
449   /* The number of reserved entries at the beginning of the GOT.  */
450   unsigned int reserved_gotno;
451
452   /* The section used for mips_elf_la25_stub trampolines.
453      See the comment above that structure for details.  */
454   asection *strampoline;
455
456   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
457      pairs.  */
458   htab_t la25_stubs;
459
460   /* A function FN (NAME, IS, OS) that creates a new input section
461      called NAME and links it to output section OS.  If IS is nonnull,
462      the new section should go immediately before it, otherwise it
463      should go at the (current) beginning of OS.
464
465      The function returns the new section on success, otherwise it
466      returns null.  */
467   asection *(*add_stub_section) (const char *, asection *, asection *);
468
469   /* Small local sym cache.  */
470   struct sym_cache sym_cache;
471 };
472
473 /* Get the MIPS ELF linker hash table from a link_info structure.  */
474
475 #define mips_elf_hash_table(p) \
476   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
477   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
478
479 /* A structure used to communicate with htab_traverse callbacks.  */
480 struct mips_htab_traverse_info
481 {
482   /* The usual link-wide information.  */
483   struct bfd_link_info *info;
484   bfd *output_bfd;
485
486   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
487   bfd_boolean error;
488 };
489
490 /* MIPS ELF private object data.  */
491
492 struct mips_elf_obj_tdata
493 {
494   /* Generic ELF private object data.  */
495   struct elf_obj_tdata root;
496
497   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
498   bfd *abi_fp_bfd;
499
500   /* The GOT requirements of input bfds.  */
501   struct mips_got_info *got;
502
503   /* Used by _bfd_mips_elf_find_nearest_line.  The structure could be
504      included directly in this one, but there's no point to wasting
505      the memory just for the infrequently called find_nearest_line.  */
506   struct mips_elf_find_line *find_line_info;
507
508   /* An array of stub sections indexed by symbol number.  */
509   asection **local_stubs;
510   asection **local_call_stubs;
511
512   /* The Irix 5 support uses two virtual sections, which represent
513      text/data symbols defined in dynamic objects.  */
514   asymbol *elf_data_symbol;
515   asymbol *elf_text_symbol;
516   asection *elf_data_section;
517   asection *elf_text_section;
518 };
519
520 /* Get MIPS ELF private object data from BFD's tdata.  */
521
522 #define mips_elf_tdata(bfd) \
523   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
524
525 #define TLS_RELOC_P(r_type) \
526   (r_type == R_MIPS_TLS_DTPMOD32                \
527    || r_type == R_MIPS_TLS_DTPMOD64             \
528    || r_type == R_MIPS_TLS_DTPREL32             \
529    || r_type == R_MIPS_TLS_DTPREL64             \
530    || r_type == R_MIPS_TLS_GD                   \
531    || r_type == R_MIPS_TLS_LDM                  \
532    || r_type == R_MIPS_TLS_DTPREL_HI16          \
533    || r_type == R_MIPS_TLS_DTPREL_LO16          \
534    || r_type == R_MIPS_TLS_GOTTPREL             \
535    || r_type == R_MIPS_TLS_TPREL32              \
536    || r_type == R_MIPS_TLS_TPREL64              \
537    || r_type == R_MIPS_TLS_TPREL_HI16           \
538    || r_type == R_MIPS_TLS_TPREL_LO16           \
539    || r_type == R_MIPS16_TLS_GD                 \
540    || r_type == R_MIPS16_TLS_LDM                \
541    || r_type == R_MIPS16_TLS_DTPREL_HI16        \
542    || r_type == R_MIPS16_TLS_DTPREL_LO16        \
543    || r_type == R_MIPS16_TLS_GOTTPREL           \
544    || r_type == R_MIPS16_TLS_TPREL_HI16         \
545    || r_type == R_MIPS16_TLS_TPREL_LO16         \
546    || r_type == R_MICROMIPS_TLS_GD              \
547    || r_type == R_MICROMIPS_TLS_LDM             \
548    || r_type == R_MICROMIPS_TLS_DTPREL_HI16     \
549    || r_type == R_MICROMIPS_TLS_DTPREL_LO16     \
550    || r_type == R_MICROMIPS_TLS_GOTTPREL        \
551    || r_type == R_MICROMIPS_TLS_TPREL_HI16      \
552    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
553
554 /* Structure used to pass information to mips_elf_output_extsym.  */
555
556 struct extsym_info
557 {
558   bfd *abfd;
559   struct bfd_link_info *info;
560   struct ecoff_debug_info *debug;
561   const struct ecoff_debug_swap *swap;
562   bfd_boolean failed;
563 };
564
565 /* The names of the runtime procedure table symbols used on IRIX5.  */
566
567 static const char * const mips_elf_dynsym_rtproc_names[] =
568 {
569   "_procedure_table",
570   "_procedure_string_table",
571   "_procedure_table_size",
572   NULL
573 };
574
575 /* These structures are used to generate the .compact_rel section on
576    IRIX5.  */
577
578 typedef struct
579 {
580   unsigned long id1;            /* Always one?  */
581   unsigned long num;            /* Number of compact relocation entries.  */
582   unsigned long id2;            /* Always two?  */
583   unsigned long offset;         /* The file offset of the first relocation.  */
584   unsigned long reserved0;      /* Zero?  */
585   unsigned long reserved1;      /* Zero?  */
586 } Elf32_compact_rel;
587
588 typedef struct
589 {
590   bfd_byte id1[4];
591   bfd_byte num[4];
592   bfd_byte id2[4];
593   bfd_byte offset[4];
594   bfd_byte reserved0[4];
595   bfd_byte reserved1[4];
596 } Elf32_External_compact_rel;
597
598 typedef struct
599 {
600   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
601   unsigned int rtype : 4;       /* Relocation types. See below.  */
602   unsigned int dist2to : 8;
603   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
604   unsigned long konst;          /* KONST field. See below.  */
605   unsigned long vaddr;          /* VADDR to be relocated.  */
606 } Elf32_crinfo;
607
608 typedef struct
609 {
610   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
611   unsigned int rtype : 4;       /* Relocation types. See below.  */
612   unsigned int dist2to : 8;
613   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
614   unsigned long konst;          /* KONST field. See below.  */
615 } Elf32_crinfo2;
616
617 typedef struct
618 {
619   bfd_byte info[4];
620   bfd_byte konst[4];
621   bfd_byte vaddr[4];
622 } Elf32_External_crinfo;
623
624 typedef struct
625 {
626   bfd_byte info[4];
627   bfd_byte konst[4];
628 } Elf32_External_crinfo2;
629
630 /* These are the constants used to swap the bitfields in a crinfo.  */
631
632 #define CRINFO_CTYPE (0x1)
633 #define CRINFO_CTYPE_SH (31)
634 #define CRINFO_RTYPE (0xf)
635 #define CRINFO_RTYPE_SH (27)
636 #define CRINFO_DIST2TO (0xff)
637 #define CRINFO_DIST2TO_SH (19)
638 #define CRINFO_RELVADDR (0x7ffff)
639 #define CRINFO_RELVADDR_SH (0)
640
641 /* A compact relocation info has long (3 words) or short (2 words)
642    formats.  A short format doesn't have VADDR field and relvaddr
643    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
644 #define CRF_MIPS_LONG                   1
645 #define CRF_MIPS_SHORT                  0
646
647 /* There are 4 types of compact relocation at least. The value KONST
648    has different meaning for each type:
649
650    (type)               (konst)
651    CT_MIPS_REL32        Address in data
652    CT_MIPS_WORD         Address in word (XXX)
653    CT_MIPS_GPHI_LO      GP - vaddr
654    CT_MIPS_JMPAD        Address to jump
655    */
656
657 #define CRT_MIPS_REL32                  0xa
658 #define CRT_MIPS_WORD                   0xb
659 #define CRT_MIPS_GPHI_LO                0xc
660 #define CRT_MIPS_JMPAD                  0xd
661
662 #define mips_elf_set_cr_format(x,format)        ((x).ctype = (format))
663 #define mips_elf_set_cr_type(x,type)            ((x).rtype = (type))
664 #define mips_elf_set_cr_dist2to(x,v)            ((x).dist2to = (v))
665 #define mips_elf_set_cr_relvaddr(x,d)           ((x).relvaddr = (d)<<2)
666 \f
667 /* The structure of the runtime procedure descriptor created by the
668    loader for use by the static exception system.  */
669
670 typedef struct runtime_pdr {
671         bfd_vma adr;            /* Memory address of start of procedure.  */
672         long    regmask;        /* Save register mask.  */
673         long    regoffset;      /* Save register offset.  */
674         long    fregmask;       /* Save floating point register mask.  */
675         long    fregoffset;     /* Save floating point register offset.  */
676         long    frameoffset;    /* Frame size.  */
677         short   framereg;       /* Frame pointer register.  */
678         short   pcreg;          /* Offset or reg of return pc.  */
679         long    irpss;          /* Index into the runtime string table.  */
680         long    reserved;
681         struct exception_info *exception_info;/* Pointer to exception array.  */
682 } RPDR, *pRPDR;
683 #define cbRPDR sizeof (RPDR)
684 #define rpdNil ((pRPDR) 0)
685 \f
686 static struct mips_got_entry *mips_elf_create_local_got_entry
687   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
688    struct mips_elf_link_hash_entry *, int);
689 static bfd_boolean mips_elf_sort_hash_table_f
690   (struct mips_elf_link_hash_entry *, void *);
691 static bfd_vma mips_elf_high
692   (bfd_vma);
693 static bfd_boolean mips_elf_create_dynamic_relocation
694   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
695    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
696    bfd_vma *, asection *);
697 static bfd_vma mips_elf_adjust_gp
698   (bfd *, struct mips_got_info *, bfd *);
699
700 /* This will be used when we sort the dynamic relocation records.  */
701 static bfd *reldyn_sorting_bfd;
702
703 /* True if ABFD is for CPUs with load interlocking that include
704    non-MIPS1 CPUs and R3900.  */
705 #define LOAD_INTERLOCKS_P(abfd) \
706   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
707    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
708
709 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
710    This should be safe for all architectures.  We enable this predicate
711    for RM9000 for now.  */
712 #define JAL_TO_BAL_P(abfd) \
713   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
714
715 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
716    This should be safe for all architectures.  We enable this predicate for
717    all CPUs.  */
718 #define JALR_TO_BAL_P(abfd) 1
719
720 /* True if ABFD is for CPUs that are faster if JR is converted to B.
721    This should be safe for all architectures.  We enable this predicate for
722    all CPUs.  */
723 #define JR_TO_B_P(abfd) 1
724
725 /* True if ABFD is a PIC object.  */
726 #define PIC_OBJECT_P(abfd) \
727   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
728
729 /* Nonzero if ABFD is using the N32 ABI.  */
730 #define ABI_N32_P(abfd) \
731   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
732
733 /* Nonzero if ABFD is using the N64 ABI.  */
734 #define ABI_64_P(abfd) \
735   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
736
737 /* Nonzero if ABFD is using NewABI conventions.  */
738 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
739
740 /* The IRIX compatibility level we are striving for.  */
741 #define IRIX_COMPAT(abfd) \
742   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
743
744 /* Whether we are trying to be compatible with IRIX at all.  */
745 #define SGI_COMPAT(abfd) \
746   (IRIX_COMPAT (abfd) != ict_none)
747
748 /* The name of the options section.  */
749 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
750   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
751
752 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
753    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
754 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
755   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
756
757 /* Whether the section is readonly.  */
758 #define MIPS_ELF_READONLY_SECTION(sec) \
759   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
760    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
761
762 /* The name of the stub section.  */
763 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
764
765 /* The size of an external REL relocation.  */
766 #define MIPS_ELF_REL_SIZE(abfd) \
767   (get_elf_backend_data (abfd)->s->sizeof_rel)
768
769 /* The size of an external RELA relocation.  */
770 #define MIPS_ELF_RELA_SIZE(abfd) \
771   (get_elf_backend_data (abfd)->s->sizeof_rela)
772
773 /* The size of an external dynamic table entry.  */
774 #define MIPS_ELF_DYN_SIZE(abfd) \
775   (get_elf_backend_data (abfd)->s->sizeof_dyn)
776
777 /* The size of a GOT entry.  */
778 #define MIPS_ELF_GOT_SIZE(abfd) \
779   (get_elf_backend_data (abfd)->s->arch_size / 8)
780
781 /* The size of the .rld_map section. */
782 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
783   (get_elf_backend_data (abfd)->s->arch_size / 8)
784
785 /* The size of a symbol-table entry.  */
786 #define MIPS_ELF_SYM_SIZE(abfd) \
787   (get_elf_backend_data (abfd)->s->sizeof_sym)
788
789 /* The default alignment for sections, as a power of two.  */
790 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
791   (get_elf_backend_data (abfd)->s->log_file_align)
792
793 /* Get word-sized data.  */
794 #define MIPS_ELF_GET_WORD(abfd, ptr) \
795   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
796
797 /* Put out word-sized data.  */
798 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
799   (ABI_64_P (abfd)                              \
800    ? bfd_put_64 (abfd, val, ptr)                \
801    : bfd_put_32 (abfd, val, ptr))
802
803 /* The opcode for word-sized loads (LW or LD).  */
804 #define MIPS_ELF_LOAD_WORD(abfd) \
805   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
806
807 /* Add a dynamic symbol table-entry.  */
808 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
809   _bfd_elf_add_dynamic_entry (info, tag, val)
810
811 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
812   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
813
814 /* The name of the dynamic relocation section.  */
815 #define MIPS_ELF_REL_DYN_NAME(INFO) \
816   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
817
818 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
819    from smaller values.  Start with zero, widen, *then* decrement.  */
820 #define MINUS_ONE       (((bfd_vma)0) - 1)
821 #define MINUS_TWO       (((bfd_vma)0) - 2)
822
823 /* The value to write into got[1] for SVR4 targets, to identify it is
824    a GNU object.  The dynamic linker can then use got[1] to store the
825    module pointer.  */
826 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
827   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
828
829 /* The offset of $gp from the beginning of the .got section.  */
830 #define ELF_MIPS_GP_OFFSET(INFO) \
831   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
832
833 /* The maximum size of the GOT for it to be addressable using 16-bit
834    offsets from $gp.  */
835 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
836
837 /* Instructions which appear in a stub.  */
838 #define STUB_LW(abfd)                                                   \
839   ((ABI_64_P (abfd)                                                     \
840     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
841     : 0x8f998010))                              /* lw t9,0x8010(gp) */
842 #define STUB_MOVE(abfd)                                                 \
843    ((ABI_64_P (abfd)                                                    \
844      ? 0x03e0782d                               /* daddu t7,ra */       \
845      : 0x03e07821))                             /* addu t7,ra */
846 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
847 #define STUB_JALR 0x0320f809                    /* jalr t9,ra */
848 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
849 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
850 #define STUB_LI16S(abfd, VAL)                                           \
851    ((ABI_64_P (abfd)                                                    \
852     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
853     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
854
855 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
856 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
857
858 /* The name of the dynamic interpreter.  This is put in the .interp
859    section.  */
860
861 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
862    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
863     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
864     : "/usr/lib/libc.so.1")
865
866 #ifdef BFD64
867 #define MNAME(bfd,pre,pos) \
868   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
869 #define ELF_R_SYM(bfd, i)                                       \
870   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
871 #define ELF_R_TYPE(bfd, i)                                      \
872   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
873 #define ELF_R_INFO(bfd, s, t)                                   \
874   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
875 #else
876 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
877 #define ELF_R_SYM(bfd, i)                                       \
878   (ELF32_R_SYM (i))
879 #define ELF_R_TYPE(bfd, i)                                      \
880   (ELF32_R_TYPE (i))
881 #define ELF_R_INFO(bfd, s, t)                                   \
882   (ELF32_R_INFO (s, t))
883 #endif
884 \f
885   /* The mips16 compiler uses a couple of special sections to handle
886      floating point arguments.
887
888      Section names that look like .mips16.fn.FNNAME contain stubs that
889      copy floating point arguments from the fp regs to the gp regs and
890      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
891      call should be redirected to the stub instead.  If no 32 bit
892      function calls FNNAME, the stub should be discarded.  We need to
893      consider any reference to the function, not just a call, because
894      if the address of the function is taken we will need the stub,
895      since the address might be passed to a 32 bit function.
896
897      Section names that look like .mips16.call.FNNAME contain stubs
898      that copy floating point arguments from the gp regs to the fp
899      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
900      then any 16 bit function that calls FNNAME should be redirected
901      to the stub instead.  If FNNAME is not a 32 bit function, the
902      stub should be discarded.
903
904      .mips16.call.fp.FNNAME sections are similar, but contain stubs
905      which call FNNAME and then copy the return value from the fp regs
906      to the gp regs.  These stubs store the return value in $18 while
907      calling FNNAME; any function which might call one of these stubs
908      must arrange to save $18 around the call.  (This case is not
909      needed for 32 bit functions that call 16 bit functions, because
910      16 bit functions always return floating point values in both
911      $f0/$f1 and $2/$3.)
912
913      Note that in all cases FNNAME might be defined statically.
914      Therefore, FNNAME is not used literally.  Instead, the relocation
915      information will indicate which symbol the section is for.
916
917      We record any stubs that we find in the symbol table.  */
918
919 #define FN_STUB ".mips16.fn."
920 #define CALL_STUB ".mips16.call."
921 #define CALL_FP_STUB ".mips16.call.fp."
922
923 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
924 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
925 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
926 \f
927 /* The format of the first PLT entry in an O32 executable.  */
928 static const bfd_vma mips_o32_exec_plt0_entry[] =
929 {
930   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
931   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
932   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
933   0x031cc023,   /* subu $24, $24, $28                                   */
934   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
935   0x0018c082,   /* srl $24, $24, 2                                      */
936   0x0320f809,   /* jalr $25                                             */
937   0x2718fffe    /* subu $24, $24, 2                                     */
938 };
939
940 /* The format of the first PLT entry in an N32 executable.  Different
941    because gp ($28) is not available; we use t2 ($14) instead.  */
942 static const bfd_vma mips_n32_exec_plt0_entry[] =
943 {
944   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
945   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
946   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
947   0x030ec023,   /* subu $24, $24, $14                                   */
948   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
949   0x0018c082,   /* srl $24, $24, 2                                      */
950   0x0320f809,   /* jalr $25                                             */
951   0x2718fffe    /* subu $24, $24, 2                                     */
952 };
953
954 /* The format of the first PLT entry in an N64 executable.  Different
955    from N32 because of the increased size of GOT entries.  */
956 static const bfd_vma mips_n64_exec_plt0_entry[] =
957 {
958   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
959   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
960   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
961   0x030ec023,   /* subu $24, $24, $14                                   */
962   0x03e0782d,   /* move $15, $31        # 64-bit move (daddu)           */
963   0x0018c0c2,   /* srl $24, $24, 3                                      */
964   0x0320f809,   /* jalr $25                                             */
965   0x2718fffe    /* subu $24, $24, 2                                     */
966 };
967
968 /* The format of subsequent PLT entries.  */
969 static const bfd_vma mips_exec_plt_entry[] =
970 {
971   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
972   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
973   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
974   0x03200008    /* jr $25                                       */
975 };
976
977 /* The format of the first PLT entry in a VxWorks executable.  */
978 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
979 {
980   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
981   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
982   0x8f390008,   /* lw t9, 8(t9)                                 */
983   0x00000000,   /* nop                                          */
984   0x03200008,   /* jr t9                                        */
985   0x00000000    /* nop                                          */
986 };
987
988 /* The format of subsequent PLT entries.  */
989 static const bfd_vma mips_vxworks_exec_plt_entry[] =
990 {
991   0x10000000,   /* b .PLT_resolver                      */
992   0x24180000,   /* li t8, <pltindex>                    */
993   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
994   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
995   0x8f390000,   /* lw t9, 0(t9)                         */
996   0x00000000,   /* nop                                  */
997   0x03200008,   /* jr t9                                */
998   0x00000000    /* nop                                  */
999 };
1000
1001 /* The format of the first PLT entry in a VxWorks shared object.  */
1002 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1003 {
1004   0x8f990008,   /* lw t9, 8(gp)         */
1005   0x00000000,   /* nop                  */
1006   0x03200008,   /* jr t9                */
1007   0x00000000,   /* nop                  */
1008   0x00000000,   /* nop                  */
1009   0x00000000    /* nop                  */
1010 };
1011
1012 /* The format of subsequent PLT entries.  */
1013 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1014 {
1015   0x10000000,   /* b .PLT_resolver      */
1016   0x24180000    /* li t8, <pltindex>    */
1017 };
1018 \f
1019 /* microMIPS 32-bit opcode helper installer.  */
1020
1021 static void
1022 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1023 {
1024   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1025   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1026 }
1027
1028 /* microMIPS 32-bit opcode helper retriever.  */
1029
1030 static bfd_vma
1031 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1032 {
1033   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1034 }
1035 \f
1036 /* Look up an entry in a MIPS ELF linker hash table.  */
1037
1038 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
1039   ((struct mips_elf_link_hash_entry *)                                  \
1040    elf_link_hash_lookup (&(table)->root, (string), (create),            \
1041                          (copy), (follow)))
1042
1043 /* Traverse a MIPS ELF linker hash table.  */
1044
1045 #define mips_elf_link_hash_traverse(table, func, info)                  \
1046   (elf_link_hash_traverse                                               \
1047    (&(table)->root,                                                     \
1048     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1049     (info)))
1050
1051 /* Find the base offsets for thread-local storage in this object,
1052    for GD/LD and IE/LE respectively.  */
1053
1054 #define TP_OFFSET 0x7000
1055 #define DTP_OFFSET 0x8000
1056
1057 static bfd_vma
1058 dtprel_base (struct bfd_link_info *info)
1059 {
1060   /* If tls_sec is NULL, we should have signalled an error already.  */
1061   if (elf_hash_table (info)->tls_sec == NULL)
1062     return 0;
1063   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1064 }
1065
1066 static bfd_vma
1067 tprel_base (struct bfd_link_info *info)
1068 {
1069   /* If tls_sec is NULL, we should have signalled an error already.  */
1070   if (elf_hash_table (info)->tls_sec == NULL)
1071     return 0;
1072   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1073 }
1074
1075 /* Create an entry in a MIPS ELF linker hash table.  */
1076
1077 static struct bfd_hash_entry *
1078 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1079                             struct bfd_hash_table *table, const char *string)
1080 {
1081   struct mips_elf_link_hash_entry *ret =
1082     (struct mips_elf_link_hash_entry *) entry;
1083
1084   /* Allocate the structure if it has not already been allocated by a
1085      subclass.  */
1086   if (ret == NULL)
1087     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1088   if (ret == NULL)
1089     return (struct bfd_hash_entry *) ret;
1090
1091   /* Call the allocation method of the superclass.  */
1092   ret = ((struct mips_elf_link_hash_entry *)
1093          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1094                                      table, string));
1095   if (ret != NULL)
1096     {
1097       /* Set local fields.  */
1098       memset (&ret->esym, 0, sizeof (EXTR));
1099       /* We use -2 as a marker to indicate that the information has
1100          not been set.  -1 means there is no associated ifd.  */
1101       ret->esym.ifd = -2;
1102       ret->la25_stub = 0;
1103       ret->possibly_dynamic_relocs = 0;
1104       ret->fn_stub = NULL;
1105       ret->call_stub = NULL;
1106       ret->call_fp_stub = NULL;
1107       ret->global_got_area = GGA_NONE;
1108       ret->got_only_for_calls = TRUE;
1109       ret->readonly_reloc = FALSE;
1110       ret->has_static_relocs = FALSE;
1111       ret->no_fn_stub = FALSE;
1112       ret->need_fn_stub = FALSE;
1113       ret->has_nonpic_branches = FALSE;
1114       ret->needs_lazy_stub = FALSE;
1115     }
1116
1117   return (struct bfd_hash_entry *) ret;
1118 }
1119
1120 /* Allocate MIPS ELF private object data.  */
1121
1122 bfd_boolean
1123 _bfd_mips_elf_mkobject (bfd *abfd)
1124 {
1125   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1126                                   MIPS_ELF_DATA);
1127 }
1128
1129 bfd_boolean
1130 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1131 {
1132   if (!sec->used_by_bfd)
1133     {
1134       struct _mips_elf_section_data *sdata;
1135       bfd_size_type amt = sizeof (*sdata);
1136
1137       sdata = bfd_zalloc (abfd, amt);
1138       if (sdata == NULL)
1139         return FALSE;
1140       sec->used_by_bfd = sdata;
1141     }
1142
1143   return _bfd_elf_new_section_hook (abfd, sec);
1144 }
1145 \f
1146 /* Read ECOFF debugging information from a .mdebug section into a
1147    ecoff_debug_info structure.  */
1148
1149 bfd_boolean
1150 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1151                                struct ecoff_debug_info *debug)
1152 {
1153   HDRR *symhdr;
1154   const struct ecoff_debug_swap *swap;
1155   char *ext_hdr;
1156
1157   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1158   memset (debug, 0, sizeof (*debug));
1159
1160   ext_hdr = bfd_malloc (swap->external_hdr_size);
1161   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1162     goto error_return;
1163
1164   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1165                                   swap->external_hdr_size))
1166     goto error_return;
1167
1168   symhdr = &debug->symbolic_header;
1169   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1170
1171   /* The symbolic header contains absolute file offsets and sizes to
1172      read.  */
1173 #define READ(ptr, offset, count, size, type)                            \
1174   if (symhdr->count == 0)                                               \
1175     debug->ptr = NULL;                                                  \
1176   else                                                                  \
1177     {                                                                   \
1178       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1179       debug->ptr = bfd_malloc (amt);                                    \
1180       if (debug->ptr == NULL)                                           \
1181         goto error_return;                                              \
1182       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1183           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1184         goto error_return;                                              \
1185     }
1186
1187   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1188   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1189   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1190   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1191   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1192   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1193         union aux_ext *);
1194   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1195   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1196   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1197   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1198   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1199 #undef READ
1200
1201   debug->fdr = NULL;
1202
1203   return TRUE;
1204
1205  error_return:
1206   if (ext_hdr != NULL)
1207     free (ext_hdr);
1208   if (debug->line != NULL)
1209     free (debug->line);
1210   if (debug->external_dnr != NULL)
1211     free (debug->external_dnr);
1212   if (debug->external_pdr != NULL)
1213     free (debug->external_pdr);
1214   if (debug->external_sym != NULL)
1215     free (debug->external_sym);
1216   if (debug->external_opt != NULL)
1217     free (debug->external_opt);
1218   if (debug->external_aux != NULL)
1219     free (debug->external_aux);
1220   if (debug->ss != NULL)
1221     free (debug->ss);
1222   if (debug->ssext != NULL)
1223     free (debug->ssext);
1224   if (debug->external_fdr != NULL)
1225     free (debug->external_fdr);
1226   if (debug->external_rfd != NULL)
1227     free (debug->external_rfd);
1228   if (debug->external_ext != NULL)
1229     free (debug->external_ext);
1230   return FALSE;
1231 }
1232 \f
1233 /* Swap RPDR (runtime procedure table entry) for output.  */
1234
1235 static void
1236 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1237 {
1238   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1239   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1240   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1241   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1242   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1243   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1244
1245   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1246   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1247
1248   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1249 }
1250
1251 /* Create a runtime procedure table from the .mdebug section.  */
1252
1253 static bfd_boolean
1254 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1255                                  struct bfd_link_info *info, asection *s,
1256                                  struct ecoff_debug_info *debug)
1257 {
1258   const struct ecoff_debug_swap *swap;
1259   HDRR *hdr = &debug->symbolic_header;
1260   RPDR *rpdr, *rp;
1261   struct rpdr_ext *erp;
1262   void *rtproc;
1263   struct pdr_ext *epdr;
1264   struct sym_ext *esym;
1265   char *ss, **sv;
1266   char *str;
1267   bfd_size_type size;
1268   bfd_size_type count;
1269   unsigned long sindex;
1270   unsigned long i;
1271   PDR pdr;
1272   SYMR sym;
1273   const char *no_name_func = _("static procedure (no name)");
1274
1275   epdr = NULL;
1276   rpdr = NULL;
1277   esym = NULL;
1278   ss = NULL;
1279   sv = NULL;
1280
1281   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1282
1283   sindex = strlen (no_name_func) + 1;
1284   count = hdr->ipdMax;
1285   if (count > 0)
1286     {
1287       size = swap->external_pdr_size;
1288
1289       epdr = bfd_malloc (size * count);
1290       if (epdr == NULL)
1291         goto error_return;
1292
1293       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1294         goto error_return;
1295
1296       size = sizeof (RPDR);
1297       rp = rpdr = bfd_malloc (size * count);
1298       if (rpdr == NULL)
1299         goto error_return;
1300
1301       size = sizeof (char *);
1302       sv = bfd_malloc (size * count);
1303       if (sv == NULL)
1304         goto error_return;
1305
1306       count = hdr->isymMax;
1307       size = swap->external_sym_size;
1308       esym = bfd_malloc (size * count);
1309       if (esym == NULL)
1310         goto error_return;
1311
1312       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1313         goto error_return;
1314
1315       count = hdr->issMax;
1316       ss = bfd_malloc (count);
1317       if (ss == NULL)
1318         goto error_return;
1319       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1320         goto error_return;
1321
1322       count = hdr->ipdMax;
1323       for (i = 0; i < (unsigned long) count; i++, rp++)
1324         {
1325           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1326           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1327           rp->adr = sym.value;
1328           rp->regmask = pdr.regmask;
1329           rp->regoffset = pdr.regoffset;
1330           rp->fregmask = pdr.fregmask;
1331           rp->fregoffset = pdr.fregoffset;
1332           rp->frameoffset = pdr.frameoffset;
1333           rp->framereg = pdr.framereg;
1334           rp->pcreg = pdr.pcreg;
1335           rp->irpss = sindex;
1336           sv[i] = ss + sym.iss;
1337           sindex += strlen (sv[i]) + 1;
1338         }
1339     }
1340
1341   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1342   size = BFD_ALIGN (size, 16);
1343   rtproc = bfd_alloc (abfd, size);
1344   if (rtproc == NULL)
1345     {
1346       mips_elf_hash_table (info)->procedure_count = 0;
1347       goto error_return;
1348     }
1349
1350   mips_elf_hash_table (info)->procedure_count = count + 2;
1351
1352   erp = rtproc;
1353   memset (erp, 0, sizeof (struct rpdr_ext));
1354   erp++;
1355   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1356   strcpy (str, no_name_func);
1357   str += strlen (no_name_func) + 1;
1358   for (i = 0; i < count; i++)
1359     {
1360       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1361       strcpy (str, sv[i]);
1362       str += strlen (sv[i]) + 1;
1363     }
1364   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1365
1366   /* Set the size and contents of .rtproc section.  */
1367   s->size = size;
1368   s->contents = rtproc;
1369
1370   /* Skip this section later on (I don't think this currently
1371      matters, but someday it might).  */
1372   s->map_head.link_order = NULL;
1373
1374   if (epdr != NULL)
1375     free (epdr);
1376   if (rpdr != NULL)
1377     free (rpdr);
1378   if (esym != NULL)
1379     free (esym);
1380   if (ss != NULL)
1381     free (ss);
1382   if (sv != NULL)
1383     free (sv);
1384
1385   return TRUE;
1386
1387  error_return:
1388   if (epdr != NULL)
1389     free (epdr);
1390   if (rpdr != NULL)
1391     free (rpdr);
1392   if (esym != NULL)
1393     free (esym);
1394   if (ss != NULL)
1395     free (ss);
1396   if (sv != NULL)
1397     free (sv);
1398   return FALSE;
1399 }
1400 \f
1401 /* We're going to create a stub for H.  Create a symbol for the stub's
1402    value and size, to help make the disassembly easier to read.  */
1403
1404 static bfd_boolean
1405 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1406                              struct mips_elf_link_hash_entry *h,
1407                              const char *prefix, asection *s, bfd_vma value,
1408                              bfd_vma size)
1409 {
1410   struct bfd_link_hash_entry *bh;
1411   struct elf_link_hash_entry *elfh;
1412   const char *name;
1413
1414   if (ELF_ST_IS_MICROMIPS (h->root.other))
1415     value |= 1;
1416
1417   /* Create a new symbol.  */
1418   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1419   bh = NULL;
1420   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1421                                          BSF_LOCAL, s, value, NULL,
1422                                          TRUE, FALSE, &bh))
1423     return FALSE;
1424
1425   /* Make it a local function.  */
1426   elfh = (struct elf_link_hash_entry *) bh;
1427   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1428   elfh->size = size;
1429   elfh->forced_local = 1;
1430   return TRUE;
1431 }
1432
1433 /* We're about to redefine H.  Create a symbol to represent H's
1434    current value and size, to help make the disassembly easier
1435    to read.  */
1436
1437 static bfd_boolean
1438 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1439                                struct mips_elf_link_hash_entry *h,
1440                                const char *prefix)
1441 {
1442   struct bfd_link_hash_entry *bh;
1443   struct elf_link_hash_entry *elfh;
1444   const char *name;
1445   asection *s;
1446   bfd_vma value;
1447
1448   /* Read the symbol's value.  */
1449   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1450               || h->root.root.type == bfd_link_hash_defweak);
1451   s = h->root.root.u.def.section;
1452   value = h->root.root.u.def.value;
1453
1454   /* Create a new symbol.  */
1455   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1456   bh = NULL;
1457   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1458                                          BSF_LOCAL, s, value, NULL,
1459                                          TRUE, FALSE, &bh))
1460     return FALSE;
1461
1462   /* Make it local and copy the other attributes from H.  */
1463   elfh = (struct elf_link_hash_entry *) bh;
1464   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1465   elfh->other = h->root.other;
1466   elfh->size = h->root.size;
1467   elfh->forced_local = 1;
1468   return TRUE;
1469 }
1470
1471 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1472    function rather than to a hard-float stub.  */
1473
1474 static bfd_boolean
1475 section_allows_mips16_refs_p (asection *section)
1476 {
1477   const char *name;
1478
1479   name = bfd_get_section_name (section->owner, section);
1480   return (FN_STUB_P (name)
1481           || CALL_STUB_P (name)
1482           || CALL_FP_STUB_P (name)
1483           || strcmp (name, ".pdr") == 0);
1484 }
1485
1486 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1487    stub section of some kind.  Return the R_SYMNDX of the target
1488    function, or 0 if we can't decide which function that is.  */
1489
1490 static unsigned long
1491 mips16_stub_symndx (const struct elf_backend_data *bed,
1492                     asection *sec ATTRIBUTE_UNUSED,
1493                     const Elf_Internal_Rela *relocs,
1494                     const Elf_Internal_Rela *relend)
1495 {
1496   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1497   const Elf_Internal_Rela *rel;
1498
1499   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1500      one in a compound relocation.  */
1501   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1502     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1503       return ELF_R_SYM (sec->owner, rel->r_info);
1504
1505   /* Otherwise trust the first relocation, whatever its kind.  This is
1506      the traditional behavior.  */
1507   if (relocs < relend)
1508     return ELF_R_SYM (sec->owner, relocs->r_info);
1509
1510   return 0;
1511 }
1512
1513 /* Check the mips16 stubs for a particular symbol, and see if we can
1514    discard them.  */
1515
1516 static void
1517 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1518                              struct mips_elf_link_hash_entry *h)
1519 {
1520   /* Dynamic symbols must use the standard call interface, in case other
1521      objects try to call them.  */
1522   if (h->fn_stub != NULL
1523       && h->root.dynindx != -1)
1524     {
1525       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1526       h->need_fn_stub = TRUE;
1527     }
1528
1529   if (h->fn_stub != NULL
1530       && ! h->need_fn_stub)
1531     {
1532       /* We don't need the fn_stub; the only references to this symbol
1533          are 16 bit calls.  Clobber the size to 0 to prevent it from
1534          being included in the link.  */
1535       h->fn_stub->size = 0;
1536       h->fn_stub->flags &= ~SEC_RELOC;
1537       h->fn_stub->reloc_count = 0;
1538       h->fn_stub->flags |= SEC_EXCLUDE;
1539     }
1540
1541   if (h->call_stub != NULL
1542       && ELF_ST_IS_MIPS16 (h->root.other))
1543     {
1544       /* We don't need the call_stub; this is a 16 bit function, so
1545          calls from other 16 bit functions are OK.  Clobber the size
1546          to 0 to prevent it from being included in the link.  */
1547       h->call_stub->size = 0;
1548       h->call_stub->flags &= ~SEC_RELOC;
1549       h->call_stub->reloc_count = 0;
1550       h->call_stub->flags |= SEC_EXCLUDE;
1551     }
1552
1553   if (h->call_fp_stub != NULL
1554       && ELF_ST_IS_MIPS16 (h->root.other))
1555     {
1556       /* We don't need the call_stub; this is a 16 bit function, so
1557          calls from other 16 bit functions are OK.  Clobber the size
1558          to 0 to prevent it from being included in the link.  */
1559       h->call_fp_stub->size = 0;
1560       h->call_fp_stub->flags &= ~SEC_RELOC;
1561       h->call_fp_stub->reloc_count = 0;
1562       h->call_fp_stub->flags |= SEC_EXCLUDE;
1563     }
1564 }
1565
1566 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1567
1568 static hashval_t
1569 mips_elf_la25_stub_hash (const void *entry_)
1570 {
1571   const struct mips_elf_la25_stub *entry;
1572
1573   entry = (struct mips_elf_la25_stub *) entry_;
1574   return entry->h->root.root.u.def.section->id
1575     + entry->h->root.root.u.def.value;
1576 }
1577
1578 static int
1579 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1580 {
1581   const struct mips_elf_la25_stub *entry1, *entry2;
1582
1583   entry1 = (struct mips_elf_la25_stub *) entry1_;
1584   entry2 = (struct mips_elf_la25_stub *) entry2_;
1585   return ((entry1->h->root.root.u.def.section
1586            == entry2->h->root.root.u.def.section)
1587           && (entry1->h->root.root.u.def.value
1588               == entry2->h->root.root.u.def.value));
1589 }
1590
1591 /* Called by the linker to set up the la25 stub-creation code.  FN is
1592    the linker's implementation of add_stub_function.  Return true on
1593    success.  */
1594
1595 bfd_boolean
1596 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1597                           asection *(*fn) (const char *, asection *,
1598                                            asection *))
1599 {
1600   struct mips_elf_link_hash_table *htab;
1601
1602   htab = mips_elf_hash_table (info);
1603   if (htab == NULL)
1604     return FALSE;
1605
1606   htab->add_stub_section = fn;
1607   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1608                                       mips_elf_la25_stub_eq, NULL);
1609   if (htab->la25_stubs == NULL)
1610     return FALSE;
1611
1612   return TRUE;
1613 }
1614
1615 /* Return true if H is a locally-defined PIC function, in the sense
1616    that it or its fn_stub might need $25 to be valid on entry.
1617    Note that MIPS16 functions set up $gp using PC-relative instructions,
1618    so they themselves never need $25 to be valid.  Only non-MIPS16
1619    entry points are of interest here.  */
1620
1621 static bfd_boolean
1622 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1623 {
1624   return ((h->root.root.type == bfd_link_hash_defined
1625            || h->root.root.type == bfd_link_hash_defweak)
1626           && h->root.def_regular
1627           && !bfd_is_abs_section (h->root.root.u.def.section)
1628           && (!ELF_ST_IS_MIPS16 (h->root.other)
1629               || (h->fn_stub && h->need_fn_stub))
1630           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1631               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1632 }
1633
1634 /* Set *SEC to the input section that contains the target of STUB.
1635    Return the offset of the target from the start of that section.  */
1636
1637 static bfd_vma
1638 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1639                           asection **sec)
1640 {
1641   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1642     {
1643       BFD_ASSERT (stub->h->need_fn_stub);
1644       *sec = stub->h->fn_stub;
1645       return 0;
1646     }
1647   else
1648     {
1649       *sec = stub->h->root.root.u.def.section;
1650       return stub->h->root.root.u.def.value;
1651     }
1652 }
1653
1654 /* STUB describes an la25 stub that we have decided to implement
1655    by inserting an LUI/ADDIU pair before the target function.
1656    Create the section and redirect the function symbol to it.  */
1657
1658 static bfd_boolean
1659 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1660                          struct bfd_link_info *info)
1661 {
1662   struct mips_elf_link_hash_table *htab;
1663   char *name;
1664   asection *s, *input_section;
1665   unsigned int align;
1666
1667   htab = mips_elf_hash_table (info);
1668   if (htab == NULL)
1669     return FALSE;
1670
1671   /* Create a unique name for the new section.  */
1672   name = bfd_malloc (11 + sizeof (".text.stub."));
1673   if (name == NULL)
1674     return FALSE;
1675   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1676
1677   /* Create the section.  */
1678   mips_elf_get_la25_target (stub, &input_section);
1679   s = htab->add_stub_section (name, input_section,
1680                               input_section->output_section);
1681   if (s == NULL)
1682     return FALSE;
1683
1684   /* Make sure that any padding goes before the stub.  */
1685   align = input_section->alignment_power;
1686   if (!bfd_set_section_alignment (s->owner, s, align))
1687     return FALSE;
1688   if (align > 3)
1689     s->size = (1 << align) - 8;
1690
1691   /* Create a symbol for the stub.  */
1692   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1693   stub->stub_section = s;
1694   stub->offset = s->size;
1695
1696   /* Allocate room for it.  */
1697   s->size += 8;
1698   return TRUE;
1699 }
1700
1701 /* STUB describes an la25 stub that we have decided to implement
1702    with a separate trampoline.  Allocate room for it and redirect
1703    the function symbol to it.  */
1704
1705 static bfd_boolean
1706 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1707                               struct bfd_link_info *info)
1708 {
1709   struct mips_elf_link_hash_table *htab;
1710   asection *s;
1711
1712   htab = mips_elf_hash_table (info);
1713   if (htab == NULL)
1714     return FALSE;
1715
1716   /* Create a trampoline section, if we haven't already.  */
1717   s = htab->strampoline;
1718   if (s == NULL)
1719     {
1720       asection *input_section = stub->h->root.root.u.def.section;
1721       s = htab->add_stub_section (".text", NULL,
1722                                   input_section->output_section);
1723       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1724         return FALSE;
1725       htab->strampoline = s;
1726     }
1727
1728   /* Create a symbol for the stub.  */
1729   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1730   stub->stub_section = s;
1731   stub->offset = s->size;
1732
1733   /* Allocate room for it.  */
1734   s->size += 16;
1735   return TRUE;
1736 }
1737
1738 /* H describes a symbol that needs an la25 stub.  Make sure that an
1739    appropriate stub exists and point H at it.  */
1740
1741 static bfd_boolean
1742 mips_elf_add_la25_stub (struct bfd_link_info *info,
1743                         struct mips_elf_link_hash_entry *h)
1744 {
1745   struct mips_elf_link_hash_table *htab;
1746   struct mips_elf_la25_stub search, *stub;
1747   bfd_boolean use_trampoline_p;
1748   asection *s;
1749   bfd_vma value;
1750   void **slot;
1751
1752   /* Describe the stub we want.  */
1753   search.stub_section = NULL;
1754   search.offset = 0;
1755   search.h = h;
1756
1757   /* See if we've already created an equivalent stub.  */
1758   htab = mips_elf_hash_table (info);
1759   if (htab == NULL)
1760     return FALSE;
1761
1762   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1763   if (slot == NULL)
1764     return FALSE;
1765
1766   stub = (struct mips_elf_la25_stub *) *slot;
1767   if (stub != NULL)
1768     {
1769       /* We can reuse the existing stub.  */
1770       h->la25_stub = stub;
1771       return TRUE;
1772     }
1773
1774   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1775   stub = bfd_malloc (sizeof (search));
1776   if (stub == NULL)
1777     return FALSE;
1778   *stub = search;
1779   *slot = stub;
1780
1781   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1782      of the section and if we would need no more than 2 nops.  */
1783   value = mips_elf_get_la25_target (stub, &s);
1784   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1785
1786   h->la25_stub = stub;
1787   return (use_trampoline_p
1788           ? mips_elf_add_la25_trampoline (stub, info)
1789           : mips_elf_add_la25_intro (stub, info));
1790 }
1791
1792 /* A mips_elf_link_hash_traverse callback that is called before sizing
1793    sections.  DATA points to a mips_htab_traverse_info structure.  */
1794
1795 static bfd_boolean
1796 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1797 {
1798   struct mips_htab_traverse_info *hti;
1799
1800   hti = (struct mips_htab_traverse_info *) data;
1801   if (!hti->info->relocatable)
1802     mips_elf_check_mips16_stubs (hti->info, h);
1803
1804   if (mips_elf_local_pic_function_p (h))
1805     {
1806       /* PR 12845: If H is in a section that has been garbage
1807          collected it will have its output section set to *ABS*.  */
1808       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1809         return TRUE;
1810
1811       /* H is a function that might need $25 to be valid on entry.
1812          If we're creating a non-PIC relocatable object, mark H as
1813          being PIC.  If we're creating a non-relocatable object with
1814          non-PIC branches and jumps to H, make sure that H has an la25
1815          stub.  */
1816       if (hti->info->relocatable)
1817         {
1818           if (!PIC_OBJECT_P (hti->output_bfd))
1819             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1820         }
1821       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1822         {
1823           hti->error = TRUE;
1824           return FALSE;
1825         }
1826     }
1827   return TRUE;
1828 }
1829 \f
1830 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1831    Most mips16 instructions are 16 bits, but these instructions
1832    are 32 bits.
1833
1834    The format of these instructions is:
1835
1836    +--------------+--------------------------------+
1837    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
1838    +--------------+--------------------------------+
1839    |                Immediate  15:0                |
1840    +-----------------------------------------------+
1841
1842    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
1843    Note that the immediate value in the first word is swapped.
1844
1845    When producing a relocatable object file, R_MIPS16_26 is
1846    handled mostly like R_MIPS_26.  In particular, the addend is
1847    stored as a straight 26-bit value in a 32-bit instruction.
1848    (gas makes life simpler for itself by never adjusting a
1849    R_MIPS16_26 reloc to be against a section, so the addend is
1850    always zero).  However, the 32 bit instruction is stored as 2
1851    16-bit values, rather than a single 32-bit value.  In a
1852    big-endian file, the result is the same; in a little-endian
1853    file, the two 16-bit halves of the 32 bit value are swapped.
1854    This is so that a disassembler can recognize the jal
1855    instruction.
1856
1857    When doing a final link, R_MIPS16_26 is treated as a 32 bit
1858    instruction stored as two 16-bit values.  The addend A is the
1859    contents of the targ26 field.  The calculation is the same as
1860    R_MIPS_26.  When storing the calculated value, reorder the
1861    immediate value as shown above, and don't forget to store the
1862    value as two 16-bit values.
1863
1864    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1865    defined as
1866
1867    big-endian:
1868    +--------+----------------------+
1869    |        |                      |
1870    |        |    targ26-16         |
1871    |31    26|25                   0|
1872    +--------+----------------------+
1873
1874    little-endian:
1875    +----------+------+-------------+
1876    |          |      |             |
1877    |  sub1    |      |     sub2    |
1878    |0        9|10  15|16         31|
1879    +----------+--------------------+
1880    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1881    ((sub1 << 16) | sub2)).
1882
1883    When producing a relocatable object file, the calculation is
1884    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1885    When producing a fully linked file, the calculation is
1886    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1887    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1888
1889    The table below lists the other MIPS16 instruction relocations.
1890    Each one is calculated in the same way as the non-MIPS16 relocation
1891    given on the right, but using the extended MIPS16 layout of 16-bit
1892    immediate fields:
1893
1894         R_MIPS16_GPREL          R_MIPS_GPREL16
1895         R_MIPS16_GOT16          R_MIPS_GOT16
1896         R_MIPS16_CALL16         R_MIPS_CALL16
1897         R_MIPS16_HI16           R_MIPS_HI16
1898         R_MIPS16_LO16           R_MIPS_LO16
1899
1900    A typical instruction will have a format like this:
1901
1902    +--------------+--------------------------------+
1903    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
1904    +--------------+--------------------------------+
1905    |    Major     |   rx   |   ry   |   Imm  4:0   |
1906    +--------------+--------------------------------+
1907
1908    EXTEND is the five bit value 11110.  Major is the instruction
1909    opcode.
1910
1911    All we need to do here is shuffle the bits appropriately.
1912    As above, the two 16-bit halves must be swapped on a
1913    little-endian system.  */
1914
1915 static inline bfd_boolean
1916 mips16_reloc_p (int r_type)
1917 {
1918   switch (r_type)
1919     {
1920     case R_MIPS16_26:
1921     case R_MIPS16_GPREL:
1922     case R_MIPS16_GOT16:
1923     case R_MIPS16_CALL16:
1924     case R_MIPS16_HI16:
1925     case R_MIPS16_LO16:
1926     case R_MIPS16_TLS_GD:
1927     case R_MIPS16_TLS_LDM:
1928     case R_MIPS16_TLS_DTPREL_HI16:
1929     case R_MIPS16_TLS_DTPREL_LO16:
1930     case R_MIPS16_TLS_GOTTPREL:
1931     case R_MIPS16_TLS_TPREL_HI16:
1932     case R_MIPS16_TLS_TPREL_LO16:
1933       return TRUE;
1934
1935     default:
1936       return FALSE;
1937     }
1938 }
1939
1940 /* Check if a microMIPS reloc.  */
1941
1942 static inline bfd_boolean
1943 micromips_reloc_p (unsigned int r_type)
1944 {
1945   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
1946 }
1947
1948 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
1949    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
1950    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
1951
1952 static inline bfd_boolean
1953 micromips_reloc_shuffle_p (unsigned int r_type)
1954 {
1955   return (micromips_reloc_p (r_type)
1956           && r_type != R_MICROMIPS_PC7_S1
1957           && r_type != R_MICROMIPS_PC10_S1);
1958 }
1959
1960 static inline bfd_boolean
1961 got16_reloc_p (int r_type)
1962 {
1963   return (r_type == R_MIPS_GOT16
1964           || r_type == R_MIPS16_GOT16
1965           || r_type == R_MICROMIPS_GOT16);
1966 }
1967
1968 static inline bfd_boolean
1969 call16_reloc_p (int r_type)
1970 {
1971   return (r_type == R_MIPS_CALL16
1972           || r_type == R_MIPS16_CALL16
1973           || r_type == R_MICROMIPS_CALL16);
1974 }
1975
1976 static inline bfd_boolean
1977 got_disp_reloc_p (unsigned int r_type)
1978 {
1979   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
1980 }
1981
1982 static inline bfd_boolean
1983 got_page_reloc_p (unsigned int r_type)
1984 {
1985   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
1986 }
1987
1988 static inline bfd_boolean
1989 got_ofst_reloc_p (unsigned int r_type)
1990 {
1991   return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
1992 }
1993
1994 static inline bfd_boolean
1995 got_hi16_reloc_p (unsigned int r_type)
1996 {
1997   return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
1998 }
1999
2000 static inline bfd_boolean
2001 got_lo16_reloc_p (unsigned int r_type)
2002 {
2003   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2004 }
2005
2006 static inline bfd_boolean
2007 call_hi16_reloc_p (unsigned int r_type)
2008 {
2009   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2010 }
2011
2012 static inline bfd_boolean
2013 call_lo16_reloc_p (unsigned int r_type)
2014 {
2015   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2016 }
2017
2018 static inline bfd_boolean
2019 hi16_reloc_p (int r_type)
2020 {
2021   return (r_type == R_MIPS_HI16
2022           || r_type == R_MIPS16_HI16
2023           || r_type == R_MICROMIPS_HI16);
2024 }
2025
2026 static inline bfd_boolean
2027 lo16_reloc_p (int r_type)
2028 {
2029   return (r_type == R_MIPS_LO16
2030           || r_type == R_MIPS16_LO16
2031           || r_type == R_MICROMIPS_LO16);
2032 }
2033
2034 static inline bfd_boolean
2035 mips16_call_reloc_p (int r_type)
2036 {
2037   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2038 }
2039
2040 static inline bfd_boolean
2041 jal_reloc_p (int r_type)
2042 {
2043   return (r_type == R_MIPS_26
2044           || r_type == R_MIPS16_26
2045           || r_type == R_MICROMIPS_26_S1);
2046 }
2047
2048 static inline bfd_boolean
2049 micromips_branch_reloc_p (int r_type)
2050 {
2051   return (r_type == R_MICROMIPS_26_S1
2052           || r_type == R_MICROMIPS_PC16_S1
2053           || r_type == R_MICROMIPS_PC10_S1
2054           || r_type == R_MICROMIPS_PC7_S1);
2055 }
2056
2057 static inline bfd_boolean
2058 tls_gd_reloc_p (unsigned int r_type)
2059 {
2060   return (r_type == R_MIPS_TLS_GD
2061           || r_type == R_MIPS16_TLS_GD
2062           || r_type == R_MICROMIPS_TLS_GD);
2063 }
2064
2065 static inline bfd_boolean
2066 tls_ldm_reloc_p (unsigned int r_type)
2067 {
2068   return (r_type == R_MIPS_TLS_LDM
2069           || r_type == R_MIPS16_TLS_LDM
2070           || r_type == R_MICROMIPS_TLS_LDM);
2071 }
2072
2073 static inline bfd_boolean
2074 tls_gottprel_reloc_p (unsigned int r_type)
2075 {
2076   return (r_type == R_MIPS_TLS_GOTTPREL
2077           || r_type == R_MIPS16_TLS_GOTTPREL
2078           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2079 }
2080
2081 void
2082 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2083                                bfd_boolean jal_shuffle, bfd_byte *data)
2084 {
2085   bfd_vma first, second, val;
2086
2087   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2088     return;
2089
2090   /* Pick up the first and second halfwords of the instruction.  */
2091   first = bfd_get_16 (abfd, data);
2092   second = bfd_get_16 (abfd, data + 2);
2093   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2094     val = first << 16 | second;
2095   else if (r_type != R_MIPS16_26)
2096     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2097            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2098   else
2099     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2100            | ((first & 0x1f) << 21) | second);
2101   bfd_put_32 (abfd, val, data);
2102 }
2103
2104 void
2105 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2106                              bfd_boolean jal_shuffle, bfd_byte *data)
2107 {
2108   bfd_vma first, second, val;
2109
2110   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2111     return;
2112
2113   val = bfd_get_32 (abfd, data);
2114   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2115     {
2116       second = val & 0xffff;
2117       first = val >> 16;
2118     }
2119   else if (r_type != R_MIPS16_26)
2120     {
2121       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2122       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2123     }
2124   else
2125     {
2126       second = val & 0xffff;
2127       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2128                | ((val >> 21) & 0x1f);
2129     }
2130   bfd_put_16 (abfd, second, data + 2);
2131   bfd_put_16 (abfd, first, data);
2132 }
2133
2134 bfd_reloc_status_type
2135 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2136                                arelent *reloc_entry, asection *input_section,
2137                                bfd_boolean relocatable, void *data, bfd_vma gp)
2138 {
2139   bfd_vma relocation;
2140   bfd_signed_vma val;
2141   bfd_reloc_status_type status;
2142
2143   if (bfd_is_com_section (symbol->section))
2144     relocation = 0;
2145   else
2146     relocation = symbol->value;
2147
2148   relocation += symbol->section->output_section->vma;
2149   relocation += symbol->section->output_offset;
2150
2151   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2152     return bfd_reloc_outofrange;
2153
2154   /* Set val to the offset into the section or symbol.  */
2155   val = reloc_entry->addend;
2156
2157   _bfd_mips_elf_sign_extend (val, 16);
2158
2159   /* Adjust val for the final section location and GP value.  If we
2160      are producing relocatable output, we don't want to do this for
2161      an external symbol.  */
2162   if (! relocatable
2163       || (symbol->flags & BSF_SECTION_SYM) != 0)
2164     val += relocation - gp;
2165
2166   if (reloc_entry->howto->partial_inplace)
2167     {
2168       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2169                                        (bfd_byte *) data
2170                                        + reloc_entry->address);
2171       if (status != bfd_reloc_ok)
2172         return status;
2173     }
2174   else
2175     reloc_entry->addend = val;
2176
2177   if (relocatable)
2178     reloc_entry->address += input_section->output_offset;
2179
2180   return bfd_reloc_ok;
2181 }
2182
2183 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2184    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2185    that contains the relocation field and DATA points to the start of
2186    INPUT_SECTION.  */
2187
2188 struct mips_hi16
2189 {
2190   struct mips_hi16 *next;
2191   bfd_byte *data;
2192   asection *input_section;
2193   arelent rel;
2194 };
2195
2196 /* FIXME: This should not be a static variable.  */
2197
2198 static struct mips_hi16 *mips_hi16_list;
2199
2200 /* A howto special_function for REL *HI16 relocations.  We can only
2201    calculate the correct value once we've seen the partnering
2202    *LO16 relocation, so just save the information for later.
2203
2204    The ABI requires that the *LO16 immediately follow the *HI16.
2205    However, as a GNU extension, we permit an arbitrary number of
2206    *HI16s to be associated with a single *LO16.  This significantly
2207    simplies the relocation handling in gcc.  */
2208
2209 bfd_reloc_status_type
2210 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2211                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2212                           asection *input_section, bfd *output_bfd,
2213                           char **error_message ATTRIBUTE_UNUSED)
2214 {
2215   struct mips_hi16 *n;
2216
2217   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2218     return bfd_reloc_outofrange;
2219
2220   n = bfd_malloc (sizeof *n);
2221   if (n == NULL)
2222     return bfd_reloc_outofrange;
2223
2224   n->next = mips_hi16_list;
2225   n->data = data;
2226   n->input_section = input_section;
2227   n->rel = *reloc_entry;
2228   mips_hi16_list = n;
2229
2230   if (output_bfd != NULL)
2231     reloc_entry->address += input_section->output_offset;
2232
2233   return bfd_reloc_ok;
2234 }
2235
2236 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2237    like any other 16-bit relocation when applied to global symbols, but is
2238    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2239
2240 bfd_reloc_status_type
2241 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2242                            void *data, asection *input_section,
2243                            bfd *output_bfd, char **error_message)
2244 {
2245   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2246       || bfd_is_und_section (bfd_get_section (symbol))
2247       || bfd_is_com_section (bfd_get_section (symbol)))
2248     /* The relocation is against a global symbol.  */
2249     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2250                                         input_section, output_bfd,
2251                                         error_message);
2252
2253   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2254                                    input_section, output_bfd, error_message);
2255 }
2256
2257 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2258    is a straightforward 16 bit inplace relocation, but we must deal with
2259    any partnering high-part relocations as well.  */
2260
2261 bfd_reloc_status_type
2262 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2263                           void *data, asection *input_section,
2264                           bfd *output_bfd, char **error_message)
2265 {
2266   bfd_vma vallo;
2267   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2268
2269   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2270     return bfd_reloc_outofrange;
2271
2272   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2273                                  location);
2274   vallo = bfd_get_32 (abfd, location);
2275   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2276                                location);
2277
2278   while (mips_hi16_list != NULL)
2279     {
2280       bfd_reloc_status_type ret;
2281       struct mips_hi16 *hi;
2282
2283       hi = mips_hi16_list;
2284
2285       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2286          want to install the addend in the same way as for a R_MIPS*_HI16
2287          relocation (with a rightshift of 16).  However, since GOT16
2288          relocations can also be used with global symbols, their howto
2289          has a rightshift of 0.  */
2290       if (hi->rel.howto->type == R_MIPS_GOT16)
2291         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2292       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2293         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2294       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2295         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2296
2297       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2298          carry or borrow will induce a change of +1 or -1 in the high part.  */
2299       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2300
2301       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2302                                          hi->input_section, output_bfd,
2303                                          error_message);
2304       if (ret != bfd_reloc_ok)
2305         return ret;
2306
2307       mips_hi16_list = hi->next;
2308       free (hi);
2309     }
2310
2311   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2312                                       input_section, output_bfd,
2313                                       error_message);
2314 }
2315
2316 /* A generic howto special_function.  This calculates and installs the
2317    relocation itself, thus avoiding the oft-discussed problems in
2318    bfd_perform_relocation and bfd_install_relocation.  */
2319
2320 bfd_reloc_status_type
2321 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2322                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2323                              asection *input_section, bfd *output_bfd,
2324                              char **error_message ATTRIBUTE_UNUSED)
2325 {
2326   bfd_signed_vma val;
2327   bfd_reloc_status_type status;
2328   bfd_boolean relocatable;
2329
2330   relocatable = (output_bfd != NULL);
2331
2332   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2333     return bfd_reloc_outofrange;
2334
2335   /* Build up the field adjustment in VAL.  */
2336   val = 0;
2337   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2338     {
2339       /* Either we're calculating the final field value or we have a
2340          relocation against a section symbol.  Add in the section's
2341          offset or address.  */
2342       val += symbol->section->output_section->vma;
2343       val += symbol->section->output_offset;
2344     }
2345
2346   if (!relocatable)
2347     {
2348       /* We're calculating the final field value.  Add in the symbol's value
2349          and, if pc-relative, subtract the address of the field itself.  */
2350       val += symbol->value;
2351       if (reloc_entry->howto->pc_relative)
2352         {
2353           val -= input_section->output_section->vma;
2354           val -= input_section->output_offset;
2355           val -= reloc_entry->address;
2356         }
2357     }
2358
2359   /* VAL is now the final adjustment.  If we're keeping this relocation
2360      in the output file, and if the relocation uses a separate addend,
2361      we just need to add VAL to that addend.  Otherwise we need to add
2362      VAL to the relocation field itself.  */
2363   if (relocatable && !reloc_entry->howto->partial_inplace)
2364     reloc_entry->addend += val;
2365   else
2366     {
2367       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2368
2369       /* Add in the separate addend, if any.  */
2370       val += reloc_entry->addend;
2371
2372       /* Add VAL to the relocation field.  */
2373       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2374                                      location);
2375       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2376                                        location);
2377       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2378                                    location);
2379
2380       if (status != bfd_reloc_ok)
2381         return status;
2382     }
2383
2384   if (relocatable)
2385     reloc_entry->address += input_section->output_offset;
2386
2387   return bfd_reloc_ok;
2388 }
2389 \f
2390 /* Swap an entry in a .gptab section.  Note that these routines rely
2391    on the equivalence of the two elements of the union.  */
2392
2393 static void
2394 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2395                               Elf32_gptab *in)
2396 {
2397   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2398   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2399 }
2400
2401 static void
2402 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2403                                Elf32_External_gptab *ex)
2404 {
2405   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2406   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2407 }
2408
2409 static void
2410 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2411                                 Elf32_External_compact_rel *ex)
2412 {
2413   H_PUT_32 (abfd, in->id1, ex->id1);
2414   H_PUT_32 (abfd, in->num, ex->num);
2415   H_PUT_32 (abfd, in->id2, ex->id2);
2416   H_PUT_32 (abfd, in->offset, ex->offset);
2417   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2418   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2419 }
2420
2421 static void
2422 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2423                            Elf32_External_crinfo *ex)
2424 {
2425   unsigned long l;
2426
2427   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2428        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2429        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2430        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2431   H_PUT_32 (abfd, l, ex->info);
2432   H_PUT_32 (abfd, in->konst, ex->konst);
2433   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2434 }
2435 \f
2436 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2437    routines swap this structure in and out.  They are used outside of
2438    BFD, so they are globally visible.  */
2439
2440 void
2441 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2442                                 Elf32_RegInfo *in)
2443 {
2444   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2445   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2446   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2447   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2448   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2449   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2450 }
2451
2452 void
2453 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2454                                  Elf32_External_RegInfo *ex)
2455 {
2456   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2457   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2458   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2459   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2460   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2461   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2462 }
2463
2464 /* In the 64 bit ABI, the .MIPS.options section holds register
2465    information in an Elf64_Reginfo structure.  These routines swap
2466    them in and out.  They are globally visible because they are used
2467    outside of BFD.  These routines are here so that gas can call them
2468    without worrying about whether the 64 bit ABI has been included.  */
2469
2470 void
2471 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2472                                 Elf64_Internal_RegInfo *in)
2473 {
2474   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2475   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2476   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2477   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2478   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2479   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2480   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2481 }
2482
2483 void
2484 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2485                                  Elf64_External_RegInfo *ex)
2486 {
2487   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2488   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2489   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2490   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2491   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2492   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2493   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2494 }
2495
2496 /* Swap in an options header.  */
2497
2498 void
2499 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2500                               Elf_Internal_Options *in)
2501 {
2502   in->kind = H_GET_8 (abfd, ex->kind);
2503   in->size = H_GET_8 (abfd, ex->size);
2504   in->section = H_GET_16 (abfd, ex->section);
2505   in->info = H_GET_32 (abfd, ex->info);
2506 }
2507
2508 /* Swap out an options header.  */
2509
2510 void
2511 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2512                                Elf_External_Options *ex)
2513 {
2514   H_PUT_8 (abfd, in->kind, ex->kind);
2515   H_PUT_8 (abfd, in->size, ex->size);
2516   H_PUT_16 (abfd, in->section, ex->section);
2517   H_PUT_32 (abfd, in->info, ex->info);
2518 }
2519 \f
2520 /* This function is called via qsort() to sort the dynamic relocation
2521    entries by increasing r_symndx value.  */
2522
2523 static int
2524 sort_dynamic_relocs (const void *arg1, const void *arg2)
2525 {
2526   Elf_Internal_Rela int_reloc1;
2527   Elf_Internal_Rela int_reloc2;
2528   int diff;
2529
2530   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2531   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2532
2533   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2534   if (diff != 0)
2535     return diff;
2536
2537   if (int_reloc1.r_offset < int_reloc2.r_offset)
2538     return -1;
2539   if (int_reloc1.r_offset > int_reloc2.r_offset)
2540     return 1;
2541   return 0;
2542 }
2543
2544 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2545
2546 static int
2547 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2548                         const void *arg2 ATTRIBUTE_UNUSED)
2549 {
2550 #ifdef BFD64
2551   Elf_Internal_Rela int_reloc1[3];
2552   Elf_Internal_Rela int_reloc2[3];
2553
2554   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2555     (reldyn_sorting_bfd, arg1, int_reloc1);
2556   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2557     (reldyn_sorting_bfd, arg2, int_reloc2);
2558
2559   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2560     return -1;
2561   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2562     return 1;
2563
2564   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2565     return -1;
2566   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2567     return 1;
2568   return 0;
2569 #else
2570   abort ();
2571 #endif
2572 }
2573
2574
2575 /* This routine is used to write out ECOFF debugging external symbol
2576    information.  It is called via mips_elf_link_hash_traverse.  The
2577    ECOFF external symbol information must match the ELF external
2578    symbol information.  Unfortunately, at this point we don't know
2579    whether a symbol is required by reloc information, so the two
2580    tables may wind up being different.  We must sort out the external
2581    symbol information before we can set the final size of the .mdebug
2582    section, and we must set the size of the .mdebug section before we
2583    can relocate any sections, and we can't know which symbols are
2584    required by relocation until we relocate the sections.
2585    Fortunately, it is relatively unlikely that any symbol will be
2586    stripped but required by a reloc.  In particular, it can not happen
2587    when generating a final executable.  */
2588
2589 static bfd_boolean
2590 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2591 {
2592   struct extsym_info *einfo = data;
2593   bfd_boolean strip;
2594   asection *sec, *output_section;
2595
2596   if (h->root.indx == -2)
2597     strip = FALSE;
2598   else if ((h->root.def_dynamic
2599             || h->root.ref_dynamic
2600             || h->root.type == bfd_link_hash_new)
2601            && !h->root.def_regular
2602            && !h->root.ref_regular)
2603     strip = TRUE;
2604   else if (einfo->info->strip == strip_all
2605            || (einfo->info->strip == strip_some
2606                && bfd_hash_lookup (einfo->info->keep_hash,
2607                                    h->root.root.root.string,
2608                                    FALSE, FALSE) == NULL))
2609     strip = TRUE;
2610   else
2611     strip = FALSE;
2612
2613   if (strip)
2614     return TRUE;
2615
2616   if (h->esym.ifd == -2)
2617     {
2618       h->esym.jmptbl = 0;
2619       h->esym.cobol_main = 0;
2620       h->esym.weakext = 0;
2621       h->esym.reserved = 0;
2622       h->esym.ifd = ifdNil;
2623       h->esym.asym.value = 0;
2624       h->esym.asym.st = stGlobal;
2625
2626       if (h->root.root.type == bfd_link_hash_undefined
2627           || h->root.root.type == bfd_link_hash_undefweak)
2628         {
2629           const char *name;
2630
2631           /* Use undefined class.  Also, set class and type for some
2632              special symbols.  */
2633           name = h->root.root.root.string;
2634           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2635               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2636             {
2637               h->esym.asym.sc = scData;
2638               h->esym.asym.st = stLabel;
2639               h->esym.asym.value = 0;
2640             }
2641           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2642             {
2643               h->esym.asym.sc = scAbs;
2644               h->esym.asym.st = stLabel;
2645               h->esym.asym.value =
2646                 mips_elf_hash_table (einfo->info)->procedure_count;
2647             }
2648           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2649             {
2650               h->esym.asym.sc = scAbs;
2651               h->esym.asym.st = stLabel;
2652               h->esym.asym.value = elf_gp (einfo->abfd);
2653             }
2654           else
2655             h->esym.asym.sc = scUndefined;
2656         }
2657       else if (h->root.root.type != bfd_link_hash_defined
2658           && h->root.root.type != bfd_link_hash_defweak)
2659         h->esym.asym.sc = scAbs;
2660       else
2661         {
2662           const char *name;
2663
2664           sec = h->root.root.u.def.section;
2665           output_section = sec->output_section;
2666
2667           /* When making a shared library and symbol h is the one from
2668              the another shared library, OUTPUT_SECTION may be null.  */
2669           if (output_section == NULL)
2670             h->esym.asym.sc = scUndefined;
2671           else
2672             {
2673               name = bfd_section_name (output_section->owner, output_section);
2674
2675               if (strcmp (name, ".text") == 0)
2676                 h->esym.asym.sc = scText;
2677               else if (strcmp (name, ".data") == 0)
2678                 h->esym.asym.sc = scData;
2679               else if (strcmp (name, ".sdata") == 0)
2680                 h->esym.asym.sc = scSData;
2681               else if (strcmp (name, ".rodata") == 0
2682                        || strcmp (name, ".rdata") == 0)
2683                 h->esym.asym.sc = scRData;
2684               else if (strcmp (name, ".bss") == 0)
2685                 h->esym.asym.sc = scBss;
2686               else if (strcmp (name, ".sbss") == 0)
2687                 h->esym.asym.sc = scSBss;
2688               else if (strcmp (name, ".init") == 0)
2689                 h->esym.asym.sc = scInit;
2690               else if (strcmp (name, ".fini") == 0)
2691                 h->esym.asym.sc = scFini;
2692               else
2693                 h->esym.asym.sc = scAbs;
2694             }
2695         }
2696
2697       h->esym.asym.reserved = 0;
2698       h->esym.asym.index = indexNil;
2699     }
2700
2701   if (h->root.root.type == bfd_link_hash_common)
2702     h->esym.asym.value = h->root.root.u.c.size;
2703   else if (h->root.root.type == bfd_link_hash_defined
2704            || h->root.root.type == bfd_link_hash_defweak)
2705     {
2706       if (h->esym.asym.sc == scCommon)
2707         h->esym.asym.sc = scBss;
2708       else if (h->esym.asym.sc == scSCommon)
2709         h->esym.asym.sc = scSBss;
2710
2711       sec = h->root.root.u.def.section;
2712       output_section = sec->output_section;
2713       if (output_section != NULL)
2714         h->esym.asym.value = (h->root.root.u.def.value
2715                               + sec->output_offset
2716                               + output_section->vma);
2717       else
2718         h->esym.asym.value = 0;
2719     }
2720   else
2721     {
2722       struct mips_elf_link_hash_entry *hd = h;
2723
2724       while (hd->root.root.type == bfd_link_hash_indirect)
2725         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2726
2727       if (hd->needs_lazy_stub)
2728         {
2729           /* Set type and value for a symbol with a function stub.  */
2730           h->esym.asym.st = stProc;
2731           sec = hd->root.root.u.def.section;
2732           if (sec == NULL)
2733             h->esym.asym.value = 0;
2734           else
2735             {
2736               output_section = sec->output_section;
2737               if (output_section != NULL)
2738                 h->esym.asym.value = (hd->root.plt.offset
2739                                       + sec->output_offset
2740                                       + output_section->vma);
2741               else
2742                 h->esym.asym.value = 0;
2743             }
2744         }
2745     }
2746
2747   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2748                                       h->root.root.root.string,
2749                                       &h->esym))
2750     {
2751       einfo->failed = TRUE;
2752       return FALSE;
2753     }
2754
2755   return TRUE;
2756 }
2757
2758 /* A comparison routine used to sort .gptab entries.  */
2759
2760 static int
2761 gptab_compare (const void *p1, const void *p2)
2762 {
2763   const Elf32_gptab *a1 = p1;
2764   const Elf32_gptab *a2 = p2;
2765
2766   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2767 }
2768 \f
2769 /* Functions to manage the got entry hash table.  */
2770
2771 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2772    hash number.  */
2773
2774 static INLINE hashval_t
2775 mips_elf_hash_bfd_vma (bfd_vma addr)
2776 {
2777 #ifdef BFD64
2778   return addr + (addr >> 32);
2779 #else
2780   return addr;
2781 #endif
2782 }
2783
2784 static hashval_t
2785 mips_elf_got_entry_hash (const void *entry_)
2786 {
2787   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2788
2789   return (entry->symndx
2790           + ((entry->tls_type == GOT_TLS_LDM) << 18)
2791           + (entry->tls_type == GOT_TLS_LDM ? 0
2792              : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
2793              : entry->symndx >= 0 ? (entry->abfd->id
2794                                      + mips_elf_hash_bfd_vma (entry->d.addend))
2795              : entry->d.h->root.root.root.hash));
2796 }
2797
2798 static int
2799 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
2800 {
2801   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2802   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2803
2804   return (e1->symndx == e2->symndx
2805           && e1->tls_type == e2->tls_type
2806           && (e1->tls_type == GOT_TLS_LDM ? TRUE
2807               : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
2808               : e1->symndx >= 0 ? (e1->abfd == e2->abfd
2809                                    && e1->d.addend == e2->d.addend)
2810               : e2->abfd && e1->d.h == e2->d.h));
2811 }
2812
2813 static hashval_t
2814 mips_got_page_ref_hash (const void *ref_)
2815 {
2816   const struct mips_got_page_ref *ref;
2817
2818   ref = (const struct mips_got_page_ref *) ref_;
2819   return ((ref->symndx >= 0
2820            ? (hashval_t) (ref->u.abfd->id + ref->symndx)
2821            : ref->u.h->root.root.root.hash)
2822           + mips_elf_hash_bfd_vma (ref->addend));
2823 }
2824
2825 static int
2826 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
2827 {
2828   const struct mips_got_page_ref *ref1, *ref2;
2829
2830   ref1 = (const struct mips_got_page_ref *) ref1_;
2831   ref2 = (const struct mips_got_page_ref *) ref2_;
2832   return (ref1->symndx == ref2->symndx
2833           && (ref1->symndx < 0
2834               ? ref1->u.h == ref2->u.h
2835               : ref1->u.abfd == ref2->u.abfd)
2836           && ref1->addend == ref2->addend);
2837 }
2838
2839 static hashval_t
2840 mips_got_page_entry_hash (const void *entry_)
2841 {
2842   const struct mips_got_page_entry *entry;
2843
2844   entry = (const struct mips_got_page_entry *) entry_;
2845   return entry->sec->id;
2846 }
2847
2848 static int
2849 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
2850 {
2851   const struct mips_got_page_entry *entry1, *entry2;
2852
2853   entry1 = (const struct mips_got_page_entry *) entry1_;
2854   entry2 = (const struct mips_got_page_entry *) entry2_;
2855   return entry1->sec == entry2->sec;
2856 }
2857 \f
2858 /* Create and return a new mips_got_info structure.  */
2859
2860 static struct mips_got_info *
2861 mips_elf_create_got_info (bfd *abfd)
2862 {
2863   struct mips_got_info *g;
2864
2865   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
2866   if (g == NULL)
2867     return NULL;
2868
2869   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
2870                                     mips_elf_got_entry_eq, NULL);
2871   if (g->got_entries == NULL)
2872     return NULL;
2873
2874   g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
2875                                       mips_got_page_ref_eq, NULL);
2876   if (g->got_page_refs == NULL)
2877     return NULL;
2878
2879   return g;
2880 }
2881
2882 /* Return the GOT info for input bfd ABFD, trying to create a new one if
2883    CREATE_P and if ABFD doesn't already have a GOT.  */
2884
2885 static struct mips_got_info *
2886 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
2887 {
2888   struct mips_elf_obj_tdata *tdata;
2889
2890   if (!is_mips_elf (abfd))
2891     return NULL;
2892
2893   tdata = mips_elf_tdata (abfd);
2894   if (!tdata->got && create_p)
2895     tdata->got = mips_elf_create_got_info (abfd);
2896   return tdata->got;
2897 }
2898
2899 /* Record that ABFD should use output GOT G.  */
2900
2901 static void
2902 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
2903 {
2904   struct mips_elf_obj_tdata *tdata;
2905
2906   BFD_ASSERT (is_mips_elf (abfd));
2907   tdata = mips_elf_tdata (abfd);
2908   if (tdata->got)
2909     {
2910       /* The GOT structure itself and the hash table entries are
2911          allocated to a bfd, but the hash tables aren't.  */
2912       htab_delete (tdata->got->got_entries);
2913       htab_delete (tdata->got->got_page_refs);
2914       if (tdata->got->got_page_entries)
2915         htab_delete (tdata->got->got_page_entries);
2916     }
2917   tdata->got = g;
2918 }
2919
2920 /* Return the dynamic relocation section.  If it doesn't exist, try to
2921    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
2922    if creation fails.  */
2923
2924 static asection *
2925 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
2926 {
2927   const char *dname;
2928   asection *sreloc;
2929   bfd *dynobj;
2930
2931   dname = MIPS_ELF_REL_DYN_NAME (info);
2932   dynobj = elf_hash_table (info)->dynobj;
2933   sreloc = bfd_get_linker_section (dynobj, dname);
2934   if (sreloc == NULL && create_p)
2935     {
2936       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
2937                                                    (SEC_ALLOC
2938                                                     | SEC_LOAD
2939                                                     | SEC_HAS_CONTENTS
2940                                                     | SEC_IN_MEMORY
2941                                                     | SEC_LINKER_CREATED
2942                                                     | SEC_READONLY));
2943       if (sreloc == NULL
2944           || ! bfd_set_section_alignment (dynobj, sreloc,
2945                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
2946         return NULL;
2947     }
2948   return sreloc;
2949 }
2950
2951 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
2952
2953 static int
2954 mips_elf_reloc_tls_type (unsigned int r_type)
2955 {
2956   if (tls_gd_reloc_p (r_type))
2957     return GOT_TLS_GD;
2958
2959   if (tls_ldm_reloc_p (r_type))
2960     return GOT_TLS_LDM;
2961
2962   if (tls_gottprel_reloc_p (r_type))
2963     return GOT_TLS_IE;
2964
2965   return GOT_TLS_NONE;
2966 }
2967
2968 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
2969
2970 static int
2971 mips_tls_got_entries (unsigned int type)
2972 {
2973   switch (type)
2974     {
2975     case GOT_TLS_GD:
2976     case GOT_TLS_LDM:
2977       return 2;
2978
2979     case GOT_TLS_IE:
2980       return 1;
2981
2982     case GOT_TLS_NONE:
2983       return 0;
2984     }
2985   abort ();
2986 }
2987
2988 /* Count the number of relocations needed for a TLS GOT entry, with
2989    access types from TLS_TYPE, and symbol H (or a local symbol if H
2990    is NULL).  */
2991
2992 static int
2993 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
2994                      struct elf_link_hash_entry *h)
2995 {
2996   int indx = 0;
2997   bfd_boolean need_relocs = FALSE;
2998   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
2999
3000   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
3001       && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
3002     indx = h->dynindx;
3003
3004   if ((info->shared || indx != 0)
3005       && (h == NULL
3006           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3007           || h->root.type != bfd_link_hash_undefweak))
3008     need_relocs = TRUE;
3009
3010   if (!need_relocs)
3011     return 0;
3012
3013   switch (tls_type)
3014     {
3015     case GOT_TLS_GD:
3016       return indx != 0 ? 2 : 1;
3017
3018     case GOT_TLS_IE:
3019       return 1;
3020
3021     case GOT_TLS_LDM:
3022       return info->shared ? 1 : 0;
3023
3024     default:
3025       return 0;
3026     }
3027 }
3028
3029 /* Add the number of GOT entries and TLS relocations required by ENTRY
3030    to G.  */
3031
3032 static void
3033 mips_elf_count_got_entry (struct bfd_link_info *info,
3034                           struct mips_got_info *g,
3035                           struct mips_got_entry *entry)
3036 {
3037   if (entry->tls_type)
3038     {
3039       g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3040       g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3041                                         entry->symndx < 0
3042                                         ? &entry->d.h->root : NULL);
3043     }
3044   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3045     g->local_gotno += 1;
3046   else
3047     g->global_gotno += 1;
3048 }
3049
3050 /* Output a simple dynamic relocation into SRELOC.  */
3051
3052 static void
3053 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3054                                     asection *sreloc,
3055                                     unsigned long reloc_index,
3056                                     unsigned long indx,
3057                                     int r_type,
3058                                     bfd_vma offset)
3059 {
3060   Elf_Internal_Rela rel[3];
3061
3062   memset (rel, 0, sizeof (rel));
3063
3064   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3065   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3066
3067   if (ABI_64_P (output_bfd))
3068     {
3069       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3070         (output_bfd, &rel[0],
3071          (sreloc->contents
3072           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3073     }
3074   else
3075     bfd_elf32_swap_reloc_out
3076       (output_bfd, &rel[0],
3077        (sreloc->contents
3078         + reloc_index * sizeof (Elf32_External_Rel)));
3079 }
3080
3081 /* Initialize a set of TLS GOT entries for one symbol.  */
3082
3083 static void
3084 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3085                                struct mips_got_entry *entry,
3086                                struct mips_elf_link_hash_entry *h,
3087                                bfd_vma value)
3088 {
3089   struct mips_elf_link_hash_table *htab;
3090   int indx;
3091   asection *sreloc, *sgot;
3092   bfd_vma got_offset, got_offset2;
3093   bfd_boolean need_relocs = FALSE;
3094
3095   htab = mips_elf_hash_table (info);
3096   if (htab == NULL)
3097     return;
3098
3099   sgot = htab->sgot;
3100
3101   indx = 0;
3102   if (h != NULL)
3103     {
3104       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3105
3106       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
3107           && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3108         indx = h->root.dynindx;
3109     }
3110
3111   if (entry->tls_initialized)
3112     return;
3113
3114   if ((info->shared || indx != 0)
3115       && (h == NULL
3116           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3117           || h->root.type != bfd_link_hash_undefweak))
3118     need_relocs = TRUE;
3119
3120   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3121      be defined at all; assume that the value doesn't matter in that
3122      case.  Otherwise complain if we would use the value.  */
3123   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3124               || h->root.root.type == bfd_link_hash_undefweak);
3125
3126   /* Emit necessary relocations.  */
3127   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3128   got_offset = entry->gotidx;
3129
3130   switch (entry->tls_type)
3131     {
3132     case GOT_TLS_GD:
3133       /* General Dynamic.  */
3134       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3135
3136       if (need_relocs)
3137         {
3138           mips_elf_output_dynamic_relocation
3139             (abfd, sreloc, sreloc->reloc_count++, indx,
3140              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3141              sgot->output_offset + sgot->output_section->vma + got_offset);
3142
3143           if (indx)
3144             mips_elf_output_dynamic_relocation
3145               (abfd, sreloc, sreloc->reloc_count++, indx,
3146                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3147                sgot->output_offset + sgot->output_section->vma + got_offset2);
3148           else
3149             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3150                                sgot->contents + got_offset2);
3151         }
3152       else
3153         {
3154           MIPS_ELF_PUT_WORD (abfd, 1,
3155                              sgot->contents + got_offset);
3156           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3157                              sgot->contents + got_offset2);
3158         }
3159       break;
3160
3161     case GOT_TLS_IE:
3162       /* Initial Exec model.  */
3163       if (need_relocs)
3164         {
3165           if (indx == 0)
3166             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3167                                sgot->contents + got_offset);
3168           else
3169             MIPS_ELF_PUT_WORD (abfd, 0,
3170                                sgot->contents + got_offset);
3171
3172           mips_elf_output_dynamic_relocation
3173             (abfd, sreloc, sreloc->reloc_count++, indx,
3174              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3175              sgot->output_offset + sgot->output_section->vma + got_offset);
3176         }
3177       else
3178         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3179                            sgot->contents + got_offset);
3180       break;
3181
3182     case GOT_TLS_LDM:
3183       /* The initial offset is zero, and the LD offsets will include the
3184          bias by DTP_OFFSET.  */
3185       MIPS_ELF_PUT_WORD (abfd, 0,
3186                          sgot->contents + got_offset
3187                          + MIPS_ELF_GOT_SIZE (abfd));
3188
3189       if (!info->shared)
3190         MIPS_ELF_PUT_WORD (abfd, 1,
3191                            sgot->contents + got_offset);
3192       else
3193         mips_elf_output_dynamic_relocation
3194           (abfd, sreloc, sreloc->reloc_count++, indx,
3195            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3196            sgot->output_offset + sgot->output_section->vma + got_offset);
3197       break;
3198
3199     default:
3200       abort ();
3201     }
3202
3203   entry->tls_initialized = TRUE;
3204 }
3205
3206 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3207    for global symbol H.  .got.plt comes before the GOT, so the offset
3208    will be negative.  */
3209
3210 static bfd_vma
3211 mips_elf_gotplt_index (struct bfd_link_info *info,
3212                        struct elf_link_hash_entry *h)
3213 {
3214   bfd_vma plt_index, got_address, got_value;
3215   struct mips_elf_link_hash_table *htab;
3216
3217   htab = mips_elf_hash_table (info);
3218   BFD_ASSERT (htab != NULL);
3219
3220   BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
3221
3222   /* This function only works for VxWorks, because a non-VxWorks .got.plt
3223      section starts with reserved entries.  */
3224   BFD_ASSERT (htab->is_vxworks);
3225
3226   /* Calculate the index of the symbol's PLT entry.  */
3227   plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
3228
3229   /* Calculate the address of the associated .got.plt entry.  */
3230   got_address = (htab->sgotplt->output_section->vma
3231                  + htab->sgotplt->output_offset
3232                  + plt_index * 4);
3233
3234   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3235   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3236                + htab->root.hgot->root.u.def.section->output_offset
3237                + htab->root.hgot->root.u.def.value);
3238
3239   return got_address - got_value;
3240 }
3241
3242 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3243    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3244    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3245    offset can be found.  */
3246
3247 static bfd_vma
3248 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3249                           bfd_vma value, unsigned long r_symndx,
3250                           struct mips_elf_link_hash_entry *h, int r_type)
3251 {
3252   struct mips_elf_link_hash_table *htab;
3253   struct mips_got_entry *entry;
3254
3255   htab = mips_elf_hash_table (info);
3256   BFD_ASSERT (htab != NULL);
3257
3258   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3259                                            r_symndx, h, r_type);
3260   if (!entry)
3261     return MINUS_ONE;
3262
3263   if (entry->tls_type)
3264     mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3265   return entry->gotidx;
3266 }
3267
3268 /* Return the GOT index of global symbol H in the primary GOT.  */
3269
3270 static bfd_vma
3271 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3272                                    struct elf_link_hash_entry *h)
3273 {
3274   struct mips_elf_link_hash_table *htab;
3275   long global_got_dynindx;
3276   struct mips_got_info *g;
3277   bfd_vma got_index;
3278
3279   htab = mips_elf_hash_table (info);
3280   BFD_ASSERT (htab != NULL);
3281
3282   global_got_dynindx = 0;
3283   if (htab->global_gotsym != NULL)
3284     global_got_dynindx = htab->global_gotsym->dynindx;
3285
3286   /* Once we determine the global GOT entry with the lowest dynamic
3287      symbol table index, we must put all dynamic symbols with greater
3288      indices into the primary GOT.  That makes it easy to calculate the
3289      GOT offset.  */
3290   BFD_ASSERT (h->dynindx >= global_got_dynindx);
3291   g = mips_elf_bfd_got (obfd, FALSE);
3292   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3293                * MIPS_ELF_GOT_SIZE (obfd));
3294   BFD_ASSERT (got_index < htab->sgot->size);
3295
3296   return got_index;
3297 }
3298
3299 /* Return the GOT index for the global symbol indicated by H, which is
3300    referenced by a relocation of type R_TYPE in IBFD.  */
3301
3302 static bfd_vma
3303 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3304                            struct elf_link_hash_entry *h, int r_type)
3305 {
3306   struct mips_elf_link_hash_table *htab;
3307   struct mips_got_info *g;
3308   struct mips_got_entry lookup, *entry;
3309   bfd_vma gotidx;
3310
3311   htab = mips_elf_hash_table (info);
3312   BFD_ASSERT (htab != NULL);
3313
3314   g = mips_elf_bfd_got (ibfd, FALSE);
3315   BFD_ASSERT (g);
3316
3317   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3318   if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3319     return mips_elf_primary_global_got_index (obfd, info, h);
3320
3321   lookup.abfd = ibfd;
3322   lookup.symndx = -1;
3323   lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3324   entry = htab_find (g->got_entries, &lookup);
3325   BFD_ASSERT (entry);
3326
3327   gotidx = entry->gotidx;
3328   BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3329
3330   if (lookup.tls_type)
3331     {
3332       bfd_vma value = MINUS_ONE;
3333
3334       if ((h->root.type == bfd_link_hash_defined
3335            || h->root.type == bfd_link_hash_defweak)
3336           && h->root.u.def.section->output_section)
3337         value = (h->root.u.def.value
3338                  + h->root.u.def.section->output_offset
3339                  + h->root.u.def.section->output_section->vma);
3340
3341       mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3342     }
3343   return gotidx;
3344 }
3345
3346 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3347    entries are supposed to be placed at small offsets in the GOT, i.e.,
3348    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3349    entry could be created.  If OFFSETP is nonnull, use it to return the
3350    offset of the GOT entry from VALUE.  */
3351
3352 static bfd_vma
3353 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3354                    bfd_vma value, bfd_vma *offsetp)
3355 {
3356   bfd_vma page, got_index;
3357   struct mips_got_entry *entry;
3358
3359   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3360   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3361                                            NULL, R_MIPS_GOT_PAGE);
3362
3363   if (!entry)
3364     return MINUS_ONE;
3365
3366   got_index = entry->gotidx;
3367
3368   if (offsetp)
3369     *offsetp = value - entry->d.address;
3370
3371   return got_index;
3372 }
3373
3374 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3375    EXTERNAL is true if the relocation was originally against a global
3376    symbol that binds locally.  */
3377
3378 static bfd_vma
3379 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3380                       bfd_vma value, bfd_boolean external)
3381 {
3382   struct mips_got_entry *entry;
3383
3384   /* GOT16 relocations against local symbols are followed by a LO16
3385      relocation; those against global symbols are not.  Thus if the
3386      symbol was originally local, the GOT16 relocation should load the
3387      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3388   if (! external)
3389     value = mips_elf_high (value) << 16;
3390
3391   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3392      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3393      same in all cases.  */
3394   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3395                                            NULL, R_MIPS_GOT16);
3396   if (entry)
3397     return entry->gotidx;
3398   else
3399     return MINUS_ONE;
3400 }
3401
3402 /* Returns the offset for the entry at the INDEXth position
3403    in the GOT.  */
3404
3405 static bfd_vma
3406 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3407                                 bfd *input_bfd, bfd_vma got_index)
3408 {
3409   struct mips_elf_link_hash_table *htab;
3410   asection *sgot;
3411   bfd_vma gp;
3412
3413   htab = mips_elf_hash_table (info);
3414   BFD_ASSERT (htab != NULL);
3415
3416   sgot = htab->sgot;
3417   gp = _bfd_get_gp_value (output_bfd)
3418     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3419
3420   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3421 }
3422
3423 /* Create and return a local GOT entry for VALUE, which was calculated
3424    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3425    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3426    instead.  */
3427
3428 static struct mips_got_entry *
3429 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3430                                  bfd *ibfd, bfd_vma value,
3431                                  unsigned long r_symndx,
3432                                  struct mips_elf_link_hash_entry *h,
3433                                  int r_type)
3434 {
3435   struct mips_got_entry lookup, *entry;
3436   void **loc;
3437   struct mips_got_info *g;
3438   struct mips_elf_link_hash_table *htab;
3439   bfd_vma gotidx;
3440
3441   htab = mips_elf_hash_table (info);
3442   BFD_ASSERT (htab != NULL);
3443
3444   g = mips_elf_bfd_got (ibfd, FALSE);
3445   if (g == NULL)
3446     {
3447       g = mips_elf_bfd_got (abfd, FALSE);
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
3455   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3456   if (lookup.tls_type)
3457     {
3458       lookup.abfd = ibfd;
3459       if (tls_ldm_reloc_p (r_type))
3460         {
3461           lookup.symndx = 0;
3462           lookup.d.addend = 0;
3463         }
3464       else if (h == NULL)
3465         {
3466           lookup.symndx = r_symndx;
3467           lookup.d.addend = 0;
3468         }
3469       else
3470         {
3471           lookup.symndx = -1;
3472           lookup.d.h = h;
3473         }
3474
3475       entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3476       BFD_ASSERT (entry);
3477
3478       gotidx = entry->gotidx;
3479       BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3480
3481       return entry;
3482     }
3483
3484   lookup.abfd = NULL;
3485   lookup.symndx = -1;
3486   lookup.d.address = value;
3487   loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3488   if (!loc)
3489     return NULL;
3490
3491   entry = (struct mips_got_entry *) *loc;
3492   if (entry)
3493     return entry;
3494
3495   if (g->assigned_gotno >= g->local_gotno)
3496     {
3497       /* We didn't allocate enough space in the GOT.  */
3498       (*_bfd_error_handler)
3499         (_("not enough GOT space for local GOT entries"));
3500       bfd_set_error (bfd_error_bad_value);
3501       return NULL;
3502     }
3503
3504   entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3505   if (!entry)
3506     return NULL;
3507
3508   lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
3509   *entry = lookup;
3510   *loc = entry;
3511
3512   MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx);
3513
3514   /* These GOT entries need a dynamic relocation on VxWorks.  */
3515   if (htab->is_vxworks)
3516     {
3517       Elf_Internal_Rela outrel;
3518       asection *s;
3519       bfd_byte *rloc;
3520       bfd_vma got_address;
3521
3522       s = mips_elf_rel_dyn_section (info, FALSE);
3523       got_address = (htab->sgot->output_section->vma
3524                      + htab->sgot->output_offset
3525                      + entry->gotidx);
3526
3527       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3528       outrel.r_offset = got_address;
3529       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3530       outrel.r_addend = value;
3531       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3532     }
3533
3534   return entry;
3535 }
3536
3537 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3538    The number might be exact or a worst-case estimate, depending on how
3539    much information is available to elf_backend_omit_section_dynsym at
3540    the current linking stage.  */
3541
3542 static bfd_size_type
3543 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3544 {
3545   bfd_size_type count;
3546
3547   count = 0;
3548   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3549     {
3550       asection *p;
3551       const struct elf_backend_data *bed;
3552
3553       bed = get_elf_backend_data (output_bfd);
3554       for (p = output_bfd->sections; p ; p = p->next)
3555         if ((p->flags & SEC_EXCLUDE) == 0
3556             && (p->flags & SEC_ALLOC) != 0
3557             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3558           ++count;
3559     }
3560   return count;
3561 }
3562
3563 /* Sort the dynamic symbol table so that symbols that need GOT entries
3564    appear towards the end.  */
3565
3566 static bfd_boolean
3567 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3568 {
3569   struct mips_elf_link_hash_table *htab;
3570   struct mips_elf_hash_sort_data hsd;
3571   struct mips_got_info *g;
3572
3573   if (elf_hash_table (info)->dynsymcount == 0)
3574     return TRUE;
3575
3576   htab = mips_elf_hash_table (info);
3577   BFD_ASSERT (htab != NULL);
3578
3579   g = htab->got_info;
3580   if (g == NULL)
3581     return TRUE;
3582
3583   hsd.low = NULL;
3584   hsd.max_unref_got_dynindx
3585     = hsd.min_got_dynindx
3586     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3587   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3588   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3589                                 elf_hash_table (info)),
3590                                mips_elf_sort_hash_table_f,
3591                                &hsd);
3592
3593   /* There should have been enough room in the symbol table to
3594      accommodate both the GOT and non-GOT symbols.  */
3595   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3596   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3597               == elf_hash_table (info)->dynsymcount);
3598   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3599               == g->global_gotno);
3600
3601   /* Now we know which dynamic symbol has the lowest dynamic symbol
3602      table index in the GOT.  */
3603   htab->global_gotsym = hsd.low;
3604
3605   return TRUE;
3606 }
3607
3608 /* If H needs a GOT entry, assign it the highest available dynamic
3609    index.  Otherwise, assign it the lowest available dynamic
3610    index.  */
3611
3612 static bfd_boolean
3613 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3614 {
3615   struct mips_elf_hash_sort_data *hsd = data;
3616
3617   /* Symbols without dynamic symbol table entries aren't interesting
3618      at all.  */
3619   if (h->root.dynindx == -1)
3620     return TRUE;
3621
3622   switch (h->global_got_area)
3623     {
3624     case GGA_NONE:
3625       h->root.dynindx = hsd->max_non_got_dynindx++;
3626       break;
3627
3628     case GGA_NORMAL:
3629       h->root.dynindx = --hsd->min_got_dynindx;
3630       hsd->low = (struct elf_link_hash_entry *) h;
3631       break;
3632
3633     case GGA_RELOC_ONLY:
3634       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3635         hsd->low = (struct elf_link_hash_entry *) h;
3636       h->root.dynindx = hsd->max_unref_got_dynindx++;
3637       break;
3638     }
3639
3640   return TRUE;
3641 }
3642
3643 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3644    (which is owned by the caller and shouldn't be added to the
3645    hash table directly).  */
3646
3647 static bfd_boolean
3648 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3649                            struct mips_got_entry *lookup)
3650 {
3651   struct mips_elf_link_hash_table *htab;
3652   struct mips_got_entry *entry;
3653   struct mips_got_info *g;
3654   void **loc, **bfd_loc;
3655
3656   /* Make sure there's a slot for this entry in the master GOT.  */
3657   htab = mips_elf_hash_table (info);
3658   g = htab->got_info;
3659   loc = htab_find_slot (g->got_entries, lookup, INSERT);
3660   if (!loc)
3661     return FALSE;
3662
3663   /* Populate the entry if it isn't already.  */
3664   entry = (struct mips_got_entry *) *loc;
3665   if (!entry)
3666     {
3667       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3668       if (!entry)
3669         return FALSE;
3670
3671       lookup->tls_initialized = FALSE;
3672       lookup->gotidx = -1;
3673       *entry = *lookup;
3674       *loc = entry;
3675     }
3676
3677   /* Reuse the same GOT entry for the BFD's GOT.  */
3678   g = mips_elf_bfd_got (abfd, TRUE);
3679   if (!g)
3680     return FALSE;
3681
3682   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3683   if (!bfd_loc)
3684     return FALSE;
3685
3686   if (!*bfd_loc)
3687     *bfd_loc = entry;
3688   return TRUE;
3689 }
3690
3691 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
3692    entry for it.  FOR_CALL is true if the caller is only interested in
3693    using the GOT entry for calls.  */
3694
3695 static bfd_boolean
3696 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3697                                    bfd *abfd, struct bfd_link_info *info,
3698                                    bfd_boolean for_call, int r_type)
3699 {
3700   struct mips_elf_link_hash_table *htab;
3701   struct mips_elf_link_hash_entry *hmips;
3702   struct mips_got_entry entry;
3703   unsigned char tls_type;
3704
3705   htab = mips_elf_hash_table (info);
3706   BFD_ASSERT (htab != NULL);
3707
3708   hmips = (struct mips_elf_link_hash_entry *) h;
3709   if (!for_call)
3710     hmips->got_only_for_calls = FALSE;
3711
3712   /* A global symbol in the GOT must also be in the dynamic symbol
3713      table.  */
3714   if (h->dynindx == -1)
3715     {
3716       switch (ELF_ST_VISIBILITY (h->other))
3717         {
3718         case STV_INTERNAL:
3719         case STV_HIDDEN:
3720           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3721           break;
3722         }
3723       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3724         return FALSE;
3725     }
3726
3727   tls_type = mips_elf_reloc_tls_type (r_type);
3728   if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
3729     hmips->global_got_area = GGA_NORMAL;
3730
3731   entry.abfd = abfd;
3732   entry.symndx = -1;
3733   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3734   entry.tls_type = tls_type;
3735   return mips_elf_record_got_entry (info, abfd, &entry);
3736 }
3737
3738 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
3739    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
3740
3741 static bfd_boolean
3742 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3743                                   struct bfd_link_info *info, int r_type)
3744 {
3745   struct mips_elf_link_hash_table *htab;
3746   struct mips_got_info *g;
3747   struct mips_got_entry entry;
3748
3749   htab = mips_elf_hash_table (info);
3750   BFD_ASSERT (htab != NULL);
3751
3752   g = htab->got_info;
3753   BFD_ASSERT (g != NULL);
3754
3755   entry.abfd = abfd;
3756   entry.symndx = symndx;
3757   entry.d.addend = addend;
3758   entry.tls_type = mips_elf_reloc_tls_type (r_type);
3759   return mips_elf_record_got_entry (info, abfd, &entry);
3760 }
3761
3762 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
3763    H is the symbol's hash table entry, or null if SYMNDX is local
3764    to ABFD.  */
3765
3766 static bfd_boolean
3767 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
3768                               long symndx, struct elf_link_hash_entry *h,
3769                               bfd_signed_vma addend)
3770 {
3771   struct mips_elf_link_hash_table *htab;
3772   struct mips_got_info *g1, *g2;
3773   struct mips_got_page_ref lookup, *entry;
3774   void **loc, **bfd_loc;
3775
3776   htab = mips_elf_hash_table (info);
3777   BFD_ASSERT (htab != NULL);
3778
3779   g1 = htab->got_info;
3780   BFD_ASSERT (g1 != NULL);
3781
3782   if (h)
3783     {
3784       lookup.symndx = -1;
3785       lookup.u.h = (struct mips_elf_link_hash_entry *) h;
3786     }
3787   else
3788     {
3789       lookup.symndx = symndx;
3790       lookup.u.abfd = abfd;
3791     }
3792   lookup.addend = addend;
3793   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
3794   if (loc == NULL)
3795     return FALSE;
3796
3797   entry = (struct mips_got_page_ref *) *loc;
3798   if (!entry)
3799     {
3800       entry = bfd_alloc (abfd, sizeof (*entry));
3801       if (!entry)
3802         return FALSE;
3803
3804       *entry = lookup;
3805       *loc = entry;
3806     }
3807
3808   /* Add the same entry to the BFD's GOT.  */
3809   g2 = mips_elf_bfd_got (abfd, TRUE);
3810   if (!g2)
3811     return FALSE;
3812
3813   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
3814   if (!bfd_loc)
3815     return FALSE;
3816
3817   if (!*bfd_loc)
3818     *bfd_loc = entry;
3819
3820   return TRUE;
3821 }
3822
3823 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
3824
3825 static void
3826 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
3827                                        unsigned int n)
3828 {
3829   asection *s;
3830   struct mips_elf_link_hash_table *htab;
3831
3832   htab = mips_elf_hash_table (info);
3833   BFD_ASSERT (htab != NULL);
3834
3835   s = mips_elf_rel_dyn_section (info, FALSE);
3836   BFD_ASSERT (s != NULL);
3837
3838   if (htab->is_vxworks)
3839     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
3840   else
3841     {
3842       if (s->size == 0)
3843         {
3844           /* Make room for a null element.  */
3845           s->size += MIPS_ELF_REL_SIZE (abfd);
3846           ++s->reloc_count;
3847         }
3848       s->size += n * MIPS_ELF_REL_SIZE (abfd);
3849     }
3850 }
3851 \f
3852 /* A htab_traverse callback for GOT entries, with DATA pointing to a
3853    mips_elf_traverse_got_arg structure.  Count the number of GOT
3854    entries and TLS relocs.  Set DATA->value to true if we need
3855    to resolve indirect or warning symbols and then recreate the GOT.  */
3856
3857 static int
3858 mips_elf_check_recreate_got (void **entryp, void *data)
3859 {
3860   struct mips_got_entry *entry;
3861   struct mips_elf_traverse_got_arg *arg;
3862
3863   entry = (struct mips_got_entry *) *entryp;
3864   arg = (struct mips_elf_traverse_got_arg *) data;
3865   if (entry->abfd != NULL && entry->symndx == -1)
3866     {
3867       struct mips_elf_link_hash_entry *h;
3868
3869       h = entry->d.h;
3870       if (h->root.root.type == bfd_link_hash_indirect
3871           || h->root.root.type == bfd_link_hash_warning)
3872         {
3873           arg->value = TRUE;
3874           return 0;
3875         }
3876     }
3877   mips_elf_count_got_entry (arg->info, arg->g, entry);
3878   return 1;
3879 }
3880
3881 /* A htab_traverse callback for GOT entries, with DATA pointing to a
3882    mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
3883    converting entries for indirect and warning symbols into entries
3884    for the target symbol.  Set DATA->g to null on error.  */
3885
3886 static int
3887 mips_elf_recreate_got (void **entryp, void *data)
3888 {
3889   struct mips_got_entry new_entry, *entry;
3890   struct mips_elf_traverse_got_arg *arg;
3891   void **slot;
3892
3893   entry = (struct mips_got_entry *) *entryp;
3894   arg = (struct mips_elf_traverse_got_arg *) data;
3895   if (entry->abfd != NULL
3896       && entry->symndx == -1
3897       && (entry->d.h->root.root.type == bfd_link_hash_indirect
3898           || entry->d.h->root.root.type == bfd_link_hash_warning))
3899     {
3900       struct mips_elf_link_hash_entry *h;
3901
3902       new_entry = *entry;
3903       entry = &new_entry;
3904       h = entry->d.h;
3905       do
3906         {
3907           BFD_ASSERT (h->global_got_area == GGA_NONE);
3908           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3909         }
3910       while (h->root.root.type == bfd_link_hash_indirect
3911              || h->root.root.type == bfd_link_hash_warning);
3912       entry->d.h = h;
3913     }
3914   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
3915   if (slot == NULL)
3916     {
3917       arg->g = NULL;
3918       return 0;
3919     }
3920   if (*slot == NULL)
3921     {
3922       if (entry == &new_entry)
3923         {
3924           entry = bfd_alloc (entry->abfd, sizeof (*entry));
3925           if (!entry)
3926             {
3927               arg->g = NULL;
3928               return 0;
3929             }
3930           *entry = new_entry;
3931         }
3932       *slot = entry;
3933       mips_elf_count_got_entry (arg->info, arg->g, entry);
3934     }
3935   return 1;
3936 }
3937
3938 /* Return the maximum number of GOT page entries required for RANGE.  */
3939
3940 static bfd_vma
3941 mips_elf_pages_for_range (const struct mips_got_page_range *range)
3942 {
3943   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
3944 }
3945
3946 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
3947
3948 static bfd_boolean
3949 mips_elf_record_got_page_entry (struct mips_got_info *g,
3950                                 asection *sec, bfd_signed_vma addend)
3951 {
3952   struct mips_got_page_entry lookup, *entry;
3953   struct mips_got_page_range **range_ptr, *range;
3954   bfd_vma old_pages, new_pages;
3955   void **loc;
3956
3957   /* Find the mips_got_page_entry hash table entry for this section.  */
3958   lookup.sec = sec;
3959   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
3960   if (loc == NULL)
3961     return FALSE;
3962
3963   /* Create a mips_got_page_entry if this is the first time we've
3964      seen the section.  */
3965   entry = (struct mips_got_page_entry *) *loc;
3966   if (!entry)
3967     {
3968       entry = bfd_zalloc (sec->owner, sizeof (*entry));
3969       if (!entry)
3970         return FALSE;
3971
3972       entry->sec = sec;
3973       *loc = entry;
3974     }
3975
3976   /* Skip over ranges whose maximum extent cannot share a page entry
3977      with ADDEND.  */
3978   range_ptr = &entry->ranges;
3979   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
3980     range_ptr = &(*range_ptr)->next;
3981
3982   /* If we scanned to the end of the list, or found a range whose
3983      minimum extent cannot share a page entry with ADDEND, create
3984      a new singleton range.  */
3985   range = *range_ptr;
3986   if (!range || addend < range->min_addend - 0xffff)
3987     {
3988       range = bfd_zalloc (sec->owner, sizeof (*range));
3989       if (!range)
3990         return FALSE;
3991
3992       range->next = *range_ptr;
3993       range->min_addend = addend;
3994       range->max_addend = addend;
3995
3996       *range_ptr = range;
3997       entry->num_pages++;
3998       g->page_gotno++;
3999       return TRUE;
4000     }
4001
4002   /* Remember how many pages the old range contributed.  */
4003   old_pages = mips_elf_pages_for_range (range);
4004
4005   /* Update the ranges.  */
4006   if (addend < range->min_addend)
4007     range->min_addend = addend;
4008   else if (addend > range->max_addend)
4009     {
4010       if (range->next && addend >= range->next->min_addend - 0xffff)
4011         {
4012           old_pages += mips_elf_pages_for_range (range->next);
4013           range->max_addend = range->next->max_addend;
4014           range->next = range->next->next;
4015         }
4016       else
4017         range->max_addend = addend;
4018     }
4019
4020   /* Record any change in the total estimate.  */
4021   new_pages = mips_elf_pages_for_range (range);
4022   if (old_pages != new_pages)
4023     {
4024       entry->num_pages += new_pages - old_pages;
4025       g->page_gotno += new_pages - old_pages;
4026     }
4027
4028   return TRUE;
4029 }
4030
4031 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4032    and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4033    whether the page reference described by *REFP needs a GOT page entry,
4034    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4035
4036 static bfd_boolean
4037 mips_elf_resolve_got_page_ref (void **refp, void *data)
4038 {
4039   struct mips_got_page_ref *ref;
4040   struct mips_elf_traverse_got_arg *arg;
4041   struct mips_elf_link_hash_table *htab;
4042   asection *sec;
4043   bfd_vma addend;
4044
4045   ref = (struct mips_got_page_ref *) *refp;
4046   arg = (struct mips_elf_traverse_got_arg *) data;
4047   htab = mips_elf_hash_table (arg->info);
4048
4049   if (ref->symndx < 0)
4050     {
4051       struct mips_elf_link_hash_entry *h;
4052
4053       /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4054       h = ref->u.h;
4055       if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4056         return 1;
4057
4058       /* Ignore undefined symbols; we'll issue an error later if
4059          appropriate.  */
4060       if (!((h->root.root.type == bfd_link_hash_defined
4061              || h->root.root.type == bfd_link_hash_defweak)
4062             && h->root.root.u.def.section))
4063         return 1;
4064
4065       sec = h->root.root.u.def.section;
4066       addend = h->root.root.u.def.value + ref->addend;
4067     }
4068   else
4069     {
4070       Elf_Internal_Sym *isym;
4071
4072       /* Read in the symbol.  */
4073       isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4074                                     ref->symndx);
4075       if (isym == NULL)
4076         {
4077           arg->g = NULL;
4078           return 0;
4079         }
4080
4081       /* Get the associated input section.  */
4082       sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4083       if (sec == NULL)
4084         {
4085           arg->g = NULL;
4086           return 0;
4087         }
4088
4089       /* If this is a mergable section, work out the section and offset
4090          of the merged data.  For section symbols, the addend specifies
4091          of the offset _of_ the first byte in the data, otherwise it
4092          specifies the offset _from_ the first byte.  */
4093       if (sec->flags & SEC_MERGE)
4094         {
4095           void *secinfo;
4096
4097           secinfo = elf_section_data (sec)->sec_info;
4098           if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4099             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4100                                                  isym->st_value + ref->addend);
4101           else
4102             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4103                                                  isym->st_value) + ref->addend;
4104         }
4105       else
4106         addend = isym->st_value + ref->addend;
4107     }
4108   if (!mips_elf_record_got_page_entry (arg->g, sec, addend))
4109     {
4110       arg->g = NULL;
4111       return 0;
4112     }
4113   return 1;
4114 }
4115
4116 /* If any entries in G->got_entries are for indirect or warning symbols,
4117    replace them with entries for the target symbol.  Convert g->got_page_refs
4118    into got_page_entry structures and estimate the number of page entries
4119    that they require.  */
4120
4121 static bfd_boolean
4122 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4123                                     struct mips_got_info *g)
4124 {
4125   struct mips_elf_traverse_got_arg tga;
4126   struct mips_got_info oldg;
4127
4128   oldg = *g;
4129
4130   tga.info = info;
4131   tga.g = g;
4132   tga.value = FALSE;
4133   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4134   if (tga.value)
4135     {
4136       *g = oldg;
4137       g->got_entries = htab_create (htab_size (oldg.got_entries),
4138                                     mips_elf_got_entry_hash,
4139                                     mips_elf_got_entry_eq, NULL);
4140       if (!g->got_entries)
4141         return FALSE;
4142
4143       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4144       if (!tga.g)
4145         return FALSE;
4146
4147       htab_delete (oldg.got_entries);
4148     }
4149
4150   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4151                                          mips_got_page_entry_eq, NULL);
4152   if (g->got_page_entries == NULL)
4153     return FALSE;
4154
4155   tga.info = info;
4156   tga.g = g;
4157   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4158
4159   return TRUE;
4160 }
4161
4162 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4163    link_info structure.  Decide whether the hash entry needs an entry in
4164    the global part of the primary GOT, setting global_got_area accordingly.
4165    Count the number of global symbols that are in the primary GOT only
4166    because they have relocations against them (reloc_only_gotno).  */
4167
4168 static int
4169 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4170 {
4171   struct bfd_link_info *info;
4172   struct mips_elf_link_hash_table *htab;
4173   struct mips_got_info *g;
4174
4175   info = (struct bfd_link_info *) data;
4176   htab = mips_elf_hash_table (info);
4177   g = htab->got_info;
4178   if (h->global_got_area != GGA_NONE)
4179     {
4180       /* Make a final decision about whether the symbol belongs in the
4181          local or global GOT.  Symbols that bind locally can (and in the
4182          case of forced-local symbols, must) live in the local GOT.
4183          Those that are aren't in the dynamic symbol table must also
4184          live in the local GOT.
4185
4186          Note that the former condition does not always imply the
4187          latter: symbols do not bind locally if they are completely
4188          undefined.  We'll report undefined symbols later if appropriate.  */
4189       if (h->root.dynindx == -1
4190           || (h->got_only_for_calls
4191               ? SYMBOL_CALLS_LOCAL (info, &h->root)
4192               : SYMBOL_REFERENCES_LOCAL (info, &h->root)))
4193         /* The symbol belongs in the local GOT.  We no longer need this
4194            entry if it was only used for relocations; those relocations
4195            will be against the null or section symbol instead of H.  */
4196         h->global_got_area = GGA_NONE;
4197       else if (htab->is_vxworks
4198                && h->got_only_for_calls
4199                && h->root.plt.offset != MINUS_ONE)
4200         /* On VxWorks, calls can refer directly to the .got.plt entry;
4201            they don't need entries in the regular GOT.  .got.plt entries
4202            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4203         h->global_got_area = GGA_NONE;
4204       else if (h->global_got_area == GGA_RELOC_ONLY)
4205         {
4206           g->reloc_only_gotno++;
4207           g->global_gotno++;
4208         }
4209     }
4210   return 1;
4211 }
4212 \f
4213 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4214    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4215
4216 static int
4217 mips_elf_add_got_entry (void **entryp, void *data)
4218 {
4219   struct mips_got_entry *entry;
4220   struct mips_elf_traverse_got_arg *arg;
4221   void **slot;
4222
4223   entry = (struct mips_got_entry *) *entryp;
4224   arg = (struct mips_elf_traverse_got_arg *) data;
4225   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4226   if (!slot)
4227     {
4228       arg->g = NULL;
4229       return 0;
4230     }
4231   if (!*slot)
4232     {
4233       *slot = entry;
4234       mips_elf_count_got_entry (arg->info, arg->g, entry);
4235     }
4236   return 1;
4237 }
4238
4239 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4240    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4241
4242 static int
4243 mips_elf_add_got_page_entry (void **entryp, void *data)
4244 {
4245   struct mips_got_page_entry *entry;
4246   struct mips_elf_traverse_got_arg *arg;
4247   void **slot;
4248
4249   entry = (struct mips_got_page_entry *) *entryp;
4250   arg = (struct mips_elf_traverse_got_arg *) data;
4251   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4252   if (!slot)
4253     {
4254       arg->g = NULL;
4255       return 0;
4256     }
4257   if (!*slot)
4258     {
4259       *slot = entry;
4260       arg->g->page_gotno += entry->num_pages;
4261     }
4262   return 1;
4263 }
4264
4265 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4266    this would lead to overflow, 1 if they were merged successfully,
4267    and 0 if a merge failed due to lack of memory.  (These values are chosen
4268    so that nonnegative return values can be returned by a htab_traverse
4269    callback.)  */
4270
4271 static int
4272 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4273                          struct mips_got_info *to,
4274                          struct mips_elf_got_per_bfd_arg *arg)
4275 {
4276   struct mips_elf_traverse_got_arg tga;
4277   unsigned int estimate;
4278
4279   /* Work out how many page entries we would need for the combined GOT.  */
4280   estimate = arg->max_pages;
4281   if (estimate >= from->page_gotno + to->page_gotno)
4282     estimate = from->page_gotno + to->page_gotno;
4283
4284   /* And conservatively estimate how many local and TLS entries
4285      would be needed.  */
4286   estimate += from->local_gotno + to->local_gotno;
4287   estimate += from->tls_gotno + to->tls_gotno;
4288
4289   /* If we're merging with the primary got, any TLS relocations will
4290      come after the full set of global entries.  Otherwise estimate those
4291      conservatively as well.  */
4292   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4293     estimate += arg->global_count;
4294   else
4295     estimate += from->global_gotno + to->global_gotno;
4296
4297   /* Bail out if the combined GOT might be too big.  */
4298   if (estimate > arg->max_count)
4299     return -1;
4300
4301   /* Transfer the bfd's got information from FROM to TO.  */
4302   tga.info = arg->info;
4303   tga.g = to;
4304   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4305   if (!tga.g)
4306     return 0;
4307
4308   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4309   if (!tga.g)
4310     return 0;
4311
4312   mips_elf_replace_bfd_got (abfd, to);
4313   return 1;
4314 }
4315
4316 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4317    as possible of the primary got, since it doesn't require explicit
4318    dynamic relocations, but don't use bfds that would reference global
4319    symbols out of the addressable range.  Failing the primary got,
4320    attempt to merge with the current got, or finish the current got
4321    and then make make the new got current.  */
4322
4323 static bfd_boolean
4324 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4325                     struct mips_elf_got_per_bfd_arg *arg)
4326 {
4327   unsigned int estimate;
4328   int result;
4329
4330   if (!mips_elf_resolve_final_got_entries (arg->info, g))
4331     return FALSE;
4332
4333   /* Work out the number of page, local and TLS entries.  */
4334   estimate = arg->max_pages;
4335   if (estimate > g->page_gotno)
4336     estimate = g->page_gotno;
4337   estimate += g->local_gotno + g->tls_gotno;
4338
4339   /* We place TLS GOT entries after both locals and globals.  The globals
4340      for the primary GOT may overflow the normal GOT size limit, so be
4341      sure not to merge a GOT which requires TLS with the primary GOT in that
4342      case.  This doesn't affect non-primary GOTs.  */
4343   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4344
4345   if (estimate <= arg->max_count)
4346     {
4347       /* If we don't have a primary GOT, use it as
4348          a starting point for the primary GOT.  */
4349       if (!arg->primary)
4350         {
4351           arg->primary = g;
4352           return TRUE;
4353         }
4354
4355       /* Try merging with the primary GOT.  */
4356       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4357       if (result >= 0)
4358         return result;
4359     }
4360
4361   /* If we can merge with the last-created got, do it.  */
4362   if (arg->current)
4363     {
4364       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4365       if (result >= 0)
4366         return result;
4367     }
4368
4369   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4370      fits; if it turns out that it doesn't, we'll get relocation
4371      overflows anyway.  */
4372   g->next = arg->current;
4373   arg->current = g;
4374
4375   return TRUE;
4376 }
4377
4378 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4379    to GOTIDX, duplicating the entry if it has already been assigned
4380    an index in a different GOT.  */
4381
4382 static bfd_boolean
4383 mips_elf_set_gotidx (void **entryp, long gotidx)
4384 {
4385   struct mips_got_entry *entry;
4386
4387   entry = (struct mips_got_entry *) *entryp;
4388   if (entry->gotidx > 0)
4389     {
4390       struct mips_got_entry *new_entry;
4391
4392       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4393       if (!new_entry)
4394         return FALSE;
4395
4396       *new_entry = *entry;
4397       *entryp = new_entry;
4398       entry = new_entry;
4399     }
4400   entry->gotidx = gotidx;
4401   return TRUE;
4402 }
4403
4404 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4405    mips_elf_traverse_got_arg in which DATA->value is the size of one
4406    GOT entry.  Set DATA->g to null on failure.  */
4407
4408 static int
4409 mips_elf_initialize_tls_index (void **entryp, void *data)
4410 {
4411   struct mips_got_entry *entry;
4412   struct mips_elf_traverse_got_arg *arg;
4413
4414   /* We're only interested in TLS symbols.  */
4415   entry = (struct mips_got_entry *) *entryp;
4416   if (entry->tls_type == GOT_TLS_NONE)
4417     return 1;
4418
4419   arg = (struct mips_elf_traverse_got_arg *) data;
4420   if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4421     {
4422       arg->g = NULL;
4423       return 0;
4424     }
4425
4426   /* Account for the entries we've just allocated.  */
4427   arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4428   return 1;
4429 }
4430
4431 /* A htab_traverse callback for GOT entries, where DATA points to a
4432    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4433    symbol to DATA->value.  */
4434
4435 static int
4436 mips_elf_set_global_got_area (void **entryp, void *data)
4437 {
4438   struct mips_got_entry *entry;
4439   struct mips_elf_traverse_got_arg *arg;
4440
4441   entry = (struct mips_got_entry *) *entryp;
4442   arg = (struct mips_elf_traverse_got_arg *) data;
4443   if (entry->abfd != NULL
4444       && entry->symndx == -1
4445       && entry->d.h->global_got_area != GGA_NONE)
4446     entry->d.h->global_got_area = arg->value;
4447   return 1;
4448 }
4449
4450 /* A htab_traverse callback for secondary GOT entries, where DATA points
4451    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4452    and record the number of relocations they require.  DATA->value is
4453    the size of one GOT entry.  Set DATA->g to null on failure.  */
4454
4455 static int
4456 mips_elf_set_global_gotidx (void **entryp, void *data)
4457 {
4458   struct mips_got_entry *entry;
4459   struct mips_elf_traverse_got_arg *arg;
4460
4461   entry = (struct mips_got_entry *) *entryp;
4462   arg = (struct mips_elf_traverse_got_arg *) data;
4463   if (entry->abfd != NULL
4464       && entry->symndx == -1
4465       && entry->d.h->global_got_area != GGA_NONE)
4466     {
4467       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_gotno))
4468         {
4469           arg->g = NULL;
4470           return 0;
4471         }
4472       arg->g->assigned_gotno += 1;
4473
4474       if (arg->info->shared
4475           || (elf_hash_table (arg->info)->dynamic_sections_created
4476               && entry->d.h->root.def_dynamic
4477               && !entry->d.h->root.def_regular))
4478         arg->g->relocs += 1;
4479     }
4480
4481   return 1;
4482 }
4483
4484 /* A htab_traverse callback for GOT entries for which DATA is the
4485    bfd_link_info.  Forbid any global symbols from having traditional
4486    lazy-binding stubs.  */
4487
4488 static int
4489 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4490 {
4491   struct bfd_link_info *info;
4492   struct mips_elf_link_hash_table *htab;
4493   struct mips_got_entry *entry;
4494
4495   entry = (struct mips_got_entry *) *entryp;
4496   info = (struct bfd_link_info *) data;
4497   htab = mips_elf_hash_table (info);
4498   BFD_ASSERT (htab != NULL);
4499
4500   if (entry->abfd != NULL
4501       && entry->symndx == -1
4502       && entry->d.h->needs_lazy_stub)
4503     {
4504       entry->d.h->needs_lazy_stub = FALSE;
4505       htab->lazy_stub_count--;
4506     }
4507
4508   return 1;
4509 }
4510
4511 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4512    the primary GOT.  */
4513 static bfd_vma
4514 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4515 {
4516   if (!g->next)
4517     return 0;
4518
4519   g = mips_elf_bfd_got (ibfd, FALSE);
4520   if (! g)
4521     return 0;
4522
4523   BFD_ASSERT (g->next);
4524
4525   g = g->next;
4526
4527   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4528     * MIPS_ELF_GOT_SIZE (abfd);
4529 }
4530
4531 /* Turn a single GOT that is too big for 16-bit addressing into
4532    a sequence of GOTs, each one 16-bit addressable.  */
4533
4534 static bfd_boolean
4535 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4536                     asection *got, bfd_size_type pages)
4537 {
4538   struct mips_elf_link_hash_table *htab;
4539   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4540   struct mips_elf_traverse_got_arg tga;
4541   struct mips_got_info *g, *gg;
4542   unsigned int assign, needed_relocs;
4543   bfd *dynobj, *ibfd;
4544
4545   dynobj = elf_hash_table (info)->dynobj;
4546   htab = mips_elf_hash_table (info);
4547   BFD_ASSERT (htab != NULL);
4548
4549   g = htab->got_info;
4550
4551   got_per_bfd_arg.obfd = abfd;
4552   got_per_bfd_arg.info = info;
4553   got_per_bfd_arg.current = NULL;
4554   got_per_bfd_arg.primary = NULL;
4555   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4556                                 / MIPS_ELF_GOT_SIZE (abfd))
4557                                - htab->reserved_gotno);
4558   got_per_bfd_arg.max_pages = pages;
4559   /* The number of globals that will be included in the primary GOT.
4560      See the calls to mips_elf_set_global_got_area below for more
4561      information.  */
4562   got_per_bfd_arg.global_count = g->global_gotno;
4563
4564   /* Try to merge the GOTs of input bfds together, as long as they
4565      don't seem to exceed the maximum GOT size, choosing one of them
4566      to be the primary GOT.  */
4567   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
4568     {
4569       gg = mips_elf_bfd_got (ibfd, FALSE);
4570       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4571         return FALSE;
4572     }
4573
4574   /* If we do not find any suitable primary GOT, create an empty one.  */
4575   if (got_per_bfd_arg.primary == NULL)
4576     g->next = mips_elf_create_got_info (abfd);
4577   else
4578     g->next = got_per_bfd_arg.primary;
4579   g->next->next = got_per_bfd_arg.current;
4580
4581   /* GG is now the master GOT, and G is the primary GOT.  */
4582   gg = g;
4583   g = g->next;
4584
4585   /* Map the output bfd to the primary got.  That's what we're going
4586      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4587      didn't mark in check_relocs, and we want a quick way to find it.
4588      We can't just use gg->next because we're going to reverse the
4589      list.  */
4590   mips_elf_replace_bfd_got (abfd, g);
4591
4592   /* Every symbol that is referenced in a dynamic relocation must be
4593      present in the primary GOT, so arrange for them to appear after
4594      those that are actually referenced.  */
4595   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4596   g->global_gotno = gg->global_gotno;
4597
4598   tga.info = info;
4599   tga.value = GGA_RELOC_ONLY;
4600   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4601   tga.value = GGA_NORMAL;
4602   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4603
4604   /* Now go through the GOTs assigning them offset ranges.
4605      [assigned_gotno, local_gotno[ will be set to the range of local
4606      entries in each GOT.  We can then compute the end of a GOT by
4607      adding local_gotno to global_gotno.  We reverse the list and make
4608      it circular since then we'll be able to quickly compute the
4609      beginning of a GOT, by computing the end of its predecessor.  To
4610      avoid special cases for the primary GOT, while still preserving
4611      assertions that are valid for both single- and multi-got links,
4612      we arrange for the main got struct to have the right number of
4613      global entries, but set its local_gotno such that the initial
4614      offset of the primary GOT is zero.  Remember that the primary GOT
4615      will become the last item in the circular linked list, so it
4616      points back to the master GOT.  */
4617   gg->local_gotno = -g->global_gotno;
4618   gg->global_gotno = g->global_gotno;
4619   gg->tls_gotno = 0;
4620   assign = 0;
4621   gg->next = gg;
4622
4623   do
4624     {
4625       struct mips_got_info *gn;
4626
4627       assign += htab->reserved_gotno;
4628       g->assigned_gotno = assign;
4629       g->local_gotno += assign;
4630       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4631       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4632
4633       /* Take g out of the direct list, and push it onto the reversed
4634          list that gg points to.  g->next is guaranteed to be nonnull after
4635          this operation, as required by mips_elf_initialize_tls_index. */
4636       gn = g->next;
4637       g->next = gg->next;
4638       gg->next = g;
4639
4640       /* Set up any TLS entries.  We always place the TLS entries after
4641          all non-TLS entries.  */
4642       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4643       tga.g = g;
4644       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4645       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4646       if (!tga.g)
4647         return FALSE;
4648       BFD_ASSERT (g->tls_assigned_gotno == assign);
4649
4650       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4651       g = gn;
4652
4653       /* Forbid global symbols in every non-primary GOT from having
4654          lazy-binding stubs.  */
4655       if (g)
4656         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4657     }
4658   while (g);
4659
4660   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4661
4662   needed_relocs = 0;
4663   for (g = gg->next; g && g->next != gg; g = g->next)
4664     {
4665       unsigned int save_assign;
4666
4667       /* Assign offsets to global GOT entries and count how many
4668          relocations they need.  */
4669       save_assign = g->assigned_gotno;
4670       g->assigned_gotno = g->local_gotno;
4671       tga.info = info;
4672       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4673       tga.g = g;
4674       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4675       if (!tga.g)
4676         return FALSE;
4677       BFD_ASSERT (g->assigned_gotno == g->local_gotno + g->global_gotno);
4678       g->assigned_gotno = save_assign;
4679
4680       if (info->shared)
4681         {
4682           g->relocs += g->local_gotno - g->assigned_gotno;
4683           BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4684                       + g->next->global_gotno
4685                       + g->next->tls_gotno
4686                       + htab->reserved_gotno);
4687         }
4688       needed_relocs += g->relocs;
4689     }
4690   needed_relocs += g->relocs;
4691
4692   if (needed_relocs)
4693     mips_elf_allocate_dynamic_relocations (dynobj, info,
4694                                            needed_relocs);
4695
4696   return TRUE;
4697 }
4698
4699 \f
4700 /* Returns the first relocation of type r_type found, beginning with
4701    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4702
4703 static const Elf_Internal_Rela *
4704 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4705                           const Elf_Internal_Rela *relocation,
4706                           const Elf_Internal_Rela *relend)
4707 {
4708   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4709
4710   while (relocation < relend)
4711     {
4712       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4713           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4714         return relocation;
4715
4716       ++relocation;
4717     }
4718
4719   /* We didn't find it.  */
4720   return NULL;
4721 }
4722
4723 /* Return whether an input relocation is against a local symbol.  */
4724
4725 static bfd_boolean
4726 mips_elf_local_relocation_p (bfd *input_bfd,
4727                              const Elf_Internal_Rela *relocation,
4728                              asection **local_sections)
4729 {
4730   unsigned long r_symndx;
4731   Elf_Internal_Shdr *symtab_hdr;
4732   size_t extsymoff;
4733
4734   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4735   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4736   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4737
4738   if (r_symndx < extsymoff)
4739     return TRUE;
4740   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4741     return TRUE;
4742
4743   return FALSE;
4744 }
4745 \f
4746 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4747
4748 bfd_vma
4749 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4750 {
4751   if (value & ((bfd_vma) 1 << (bits - 1)))
4752     /* VALUE is negative.  */
4753     value |= ((bfd_vma) - 1) << bits;
4754
4755   return value;
4756 }
4757
4758 /* Return non-zero if the indicated VALUE has overflowed the maximum
4759    range expressible by a signed number with the indicated number of
4760    BITS.  */
4761
4762 static bfd_boolean
4763 mips_elf_overflow_p (bfd_vma value, int bits)
4764 {
4765   bfd_signed_vma svalue = (bfd_signed_vma) value;
4766
4767   if (svalue > (1 << (bits - 1)) - 1)
4768     /* The value is too big.  */
4769     return TRUE;
4770   else if (svalue < -(1 << (bits - 1)))
4771     /* The value is too small.  */
4772     return TRUE;
4773
4774   /* All is well.  */
4775   return FALSE;
4776 }
4777
4778 /* Calculate the %high function.  */
4779
4780 static bfd_vma
4781 mips_elf_high (bfd_vma value)
4782 {
4783   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4784 }
4785
4786 /* Calculate the %higher function.  */
4787
4788 static bfd_vma
4789 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
4790 {
4791 #ifdef BFD64
4792   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4793 #else
4794   abort ();
4795   return MINUS_ONE;
4796 #endif
4797 }
4798
4799 /* Calculate the %highest function.  */
4800
4801 static bfd_vma
4802 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
4803 {
4804 #ifdef BFD64
4805   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
4806 #else
4807   abort ();
4808   return MINUS_ONE;
4809 #endif
4810 }
4811 \f
4812 /* Create the .compact_rel section.  */
4813
4814 static bfd_boolean
4815 mips_elf_create_compact_rel_section
4816   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
4817 {
4818   flagword flags;
4819   register asection *s;
4820
4821   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
4822     {
4823       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4824                | SEC_READONLY);
4825
4826       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
4827       if (s == NULL
4828           || ! bfd_set_section_alignment (abfd, s,
4829                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4830         return FALSE;
4831
4832       s->size = sizeof (Elf32_External_compact_rel);
4833     }
4834
4835   return TRUE;
4836 }
4837
4838 /* Create the .got section to hold the global offset table.  */
4839
4840 static bfd_boolean
4841 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
4842 {
4843   flagword flags;
4844   register asection *s;
4845   struct elf_link_hash_entry *h;
4846   struct bfd_link_hash_entry *bh;
4847   struct mips_elf_link_hash_table *htab;
4848
4849   htab = mips_elf_hash_table (info);
4850   BFD_ASSERT (htab != NULL);
4851
4852   /* This function may be called more than once.  */
4853   if (htab->sgot)
4854     return TRUE;
4855
4856   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4857            | SEC_LINKER_CREATED);
4858
4859   /* We have to use an alignment of 2**4 here because this is hardcoded
4860      in the function stub generation and in the linker script.  */
4861   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4862   if (s == NULL
4863       || ! bfd_set_section_alignment (abfd, s, 4))
4864     return FALSE;
4865   htab->sgot = s;
4866
4867   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
4868      linker script because we don't want to define the symbol if we
4869      are not creating a global offset table.  */
4870   bh = NULL;
4871   if (! (_bfd_generic_link_add_one_symbol
4872          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
4873           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
4874     return FALSE;
4875
4876   h = (struct elf_link_hash_entry *) bh;
4877   h->non_elf = 0;
4878   h->def_regular = 1;
4879   h->type = STT_OBJECT;
4880   elf_hash_table (info)->hgot = h;
4881
4882   if (info->shared
4883       && ! bfd_elf_link_record_dynamic_symbol (info, h))
4884     return FALSE;
4885
4886   htab->got_info = mips_elf_create_got_info (abfd);
4887   mips_elf_section_data (s)->elf.this_hdr.sh_flags
4888     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4889
4890   /* We also need a .got.plt section when generating PLTs.  */
4891   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
4892                                           SEC_ALLOC | SEC_LOAD
4893                                           | SEC_HAS_CONTENTS
4894                                           | SEC_IN_MEMORY
4895                                           | SEC_LINKER_CREATED);
4896   if (s == NULL)
4897     return FALSE;
4898   htab->sgotplt = s;
4899
4900   return TRUE;
4901 }
4902 \f
4903 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4904    __GOTT_INDEX__ symbols.  These symbols are only special for
4905    shared objects; they are not used in executables.  */
4906
4907 static bfd_boolean
4908 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
4909 {
4910   return (mips_elf_hash_table (info)->is_vxworks
4911           && info->shared
4912           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
4913               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
4914 }
4915
4916 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
4917    require an la25 stub.  See also mips_elf_local_pic_function_p,
4918    which determines whether the destination function ever requires a
4919    stub.  */
4920
4921 static bfd_boolean
4922 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
4923                                      bfd_boolean target_is_16_bit_code_p)
4924 {
4925   /* We specifically ignore branches and jumps from EF_PIC objects,
4926      where the onus is on the compiler or programmer to perform any
4927      necessary initialization of $25.  Sometimes such initialization
4928      is unnecessary; for example, -mno-shared functions do not use
4929      the incoming value of $25, and may therefore be called directly.  */
4930   if (PIC_OBJECT_P (input_bfd))
4931     return FALSE;
4932
4933   switch (r_type)
4934     {
4935     case R_MIPS_26:
4936     case R_MIPS_PC16:
4937     case R_MICROMIPS_26_S1:
4938     case R_MICROMIPS_PC7_S1:
4939     case R_MICROMIPS_PC10_S1:
4940     case R_MICROMIPS_PC16_S1:
4941     case R_MICROMIPS_PC23_S2:
4942       return TRUE;
4943
4944     case R_MIPS16_26:
4945       return !target_is_16_bit_code_p;
4946
4947     default:
4948       return FALSE;
4949     }
4950 }
4951 \f
4952 /* Calculate the value produced by the RELOCATION (which comes from
4953    the INPUT_BFD).  The ADDEND is the addend to use for this
4954    RELOCATION; RELOCATION->R_ADDEND is ignored.
4955
4956    The result of the relocation calculation is stored in VALUEP.
4957    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
4958    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
4959
4960    This function returns bfd_reloc_continue if the caller need take no
4961    further action regarding this relocation, bfd_reloc_notsupported if
4962    something goes dramatically wrong, bfd_reloc_overflow if an
4963    overflow occurs, and bfd_reloc_ok to indicate success.  */
4964
4965 static bfd_reloc_status_type
4966 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
4967                                asection *input_section,
4968                                struct bfd_link_info *info,
4969                                const Elf_Internal_Rela *relocation,
4970                                bfd_vma addend, reloc_howto_type *howto,
4971                                Elf_Internal_Sym *local_syms,
4972                                asection **local_sections, bfd_vma *valuep,
4973                                const char **namep,
4974                                bfd_boolean *cross_mode_jump_p,
4975                                bfd_boolean save_addend)
4976 {
4977   /* The eventual value we will return.  */
4978   bfd_vma value;
4979   /* The address of the symbol against which the relocation is
4980      occurring.  */
4981   bfd_vma symbol = 0;
4982   /* The final GP value to be used for the relocatable, executable, or
4983      shared object file being produced.  */
4984   bfd_vma gp;
4985   /* The place (section offset or address) of the storage unit being
4986      relocated.  */
4987   bfd_vma p;
4988   /* The value of GP used to create the relocatable object.  */
4989   bfd_vma gp0;
4990   /* The offset into the global offset table at which the address of
4991      the relocation entry symbol, adjusted by the addend, resides
4992      during execution.  */
4993   bfd_vma g = MINUS_ONE;
4994   /* The section in which the symbol referenced by the relocation is
4995      located.  */
4996   asection *sec = NULL;
4997   struct mips_elf_link_hash_entry *h = NULL;
4998   /* TRUE if the symbol referred to by this relocation is a local
4999      symbol.  */
5000   bfd_boolean local_p, was_local_p;
5001   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5002   bfd_boolean gp_disp_p = FALSE;
5003   /* TRUE if the symbol referred to by this relocation is
5004      "__gnu_local_gp".  */
5005   bfd_boolean gnu_local_gp_p = FALSE;
5006   Elf_Internal_Shdr *symtab_hdr;
5007   size_t extsymoff;
5008   unsigned long r_symndx;
5009   int r_type;
5010   /* TRUE if overflow occurred during the calculation of the
5011      relocation value.  */
5012   bfd_boolean overflowed_p;
5013   /* TRUE if this relocation refers to a MIPS16 function.  */
5014   bfd_boolean target_is_16_bit_code_p = FALSE;
5015   bfd_boolean target_is_micromips_code_p = FALSE;
5016   struct mips_elf_link_hash_table *htab;
5017   bfd *dynobj;
5018
5019   dynobj = elf_hash_table (info)->dynobj;
5020   htab = mips_elf_hash_table (info);
5021   BFD_ASSERT (htab != NULL);
5022
5023   /* Parse the relocation.  */
5024   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5025   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5026   p = (input_section->output_section->vma
5027        + input_section->output_offset
5028        + relocation->r_offset);
5029
5030   /* Assume that there will be no overflow.  */
5031   overflowed_p = FALSE;
5032
5033   /* Figure out whether or not the symbol is local, and get the offset
5034      used in the array of hash table entries.  */
5035   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5036   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5037                                          local_sections);
5038   was_local_p = local_p;
5039   if (! elf_bad_symtab (input_bfd))
5040     extsymoff = symtab_hdr->sh_info;
5041   else
5042     {
5043       /* The symbol table does not follow the rule that local symbols
5044          must come before globals.  */
5045       extsymoff = 0;
5046     }
5047
5048   /* Figure out the value of the symbol.  */
5049   if (local_p)
5050     {
5051       Elf_Internal_Sym *sym;
5052
5053       sym = local_syms + r_symndx;
5054       sec = local_sections[r_symndx];
5055
5056       symbol = sec->output_section->vma + sec->output_offset;
5057       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5058           || (sec->flags & SEC_MERGE))
5059         symbol += sym->st_value;
5060       if ((sec->flags & SEC_MERGE)
5061           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5062         {
5063           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5064           addend -= symbol;
5065           addend += sec->output_section->vma + sec->output_offset;
5066         }
5067
5068       /* MIPS16/microMIPS text labels should be treated as odd.  */
5069       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5070         ++symbol;
5071
5072       /* Record the name of this symbol, for our caller.  */
5073       *namep = bfd_elf_string_from_elf_section (input_bfd,
5074                                                 symtab_hdr->sh_link,
5075                                                 sym->st_name);
5076       if (*namep == '\0')
5077         *namep = bfd_section_name (input_bfd, sec);
5078
5079       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5080       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5081     }
5082   else
5083     {
5084       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5085
5086       /* For global symbols we look up the symbol in the hash-table.  */
5087       h = ((struct mips_elf_link_hash_entry *)
5088            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5089       /* Find the real hash-table entry for this symbol.  */
5090       while (h->root.root.type == bfd_link_hash_indirect
5091              || h->root.root.type == bfd_link_hash_warning)
5092         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5093
5094       /* Record the name of this symbol, for our caller.  */
5095       *namep = h->root.root.root.string;
5096
5097       /* See if this is the special _gp_disp symbol.  Note that such a
5098          symbol must always be a global symbol.  */
5099       if (strcmp (*namep, "_gp_disp") == 0
5100           && ! NEWABI_P (input_bfd))
5101         {
5102           /* Relocations against _gp_disp are permitted only with
5103              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5104           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5105             return bfd_reloc_notsupported;
5106
5107           gp_disp_p = TRUE;
5108         }
5109       /* See if this is the special _gp symbol.  Note that such a
5110          symbol must always be a global symbol.  */
5111       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5112         gnu_local_gp_p = TRUE;
5113
5114
5115       /* If this symbol is defined, calculate its address.  Note that
5116          _gp_disp is a magic symbol, always implicitly defined by the
5117          linker, so it's inappropriate to check to see whether or not
5118          its defined.  */
5119       else if ((h->root.root.type == bfd_link_hash_defined
5120                 || h->root.root.type == bfd_link_hash_defweak)
5121                && h->root.root.u.def.section)
5122         {
5123           sec = h->root.root.u.def.section;
5124           if (sec->output_section)
5125             symbol = (h->root.root.u.def.value
5126                       + sec->output_section->vma
5127                       + sec->output_offset);
5128           else
5129             symbol = h->root.root.u.def.value;
5130         }
5131       else if (h->root.root.type == bfd_link_hash_undefweak)
5132         /* We allow relocations against undefined weak symbols, giving
5133            it the value zero, so that you can undefined weak functions
5134            and check to see if they exist by looking at their
5135            addresses.  */
5136         symbol = 0;
5137       else if (info->unresolved_syms_in_objects == RM_IGNORE
5138                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5139         symbol = 0;
5140       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5141                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5142         {
5143           /* If this is a dynamic link, we should have created a
5144              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5145              in in _bfd_mips_elf_create_dynamic_sections.
5146              Otherwise, we should define the symbol with a value of 0.
5147              FIXME: It should probably get into the symbol table
5148              somehow as well.  */
5149           BFD_ASSERT (! info->shared);
5150           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5151           symbol = 0;
5152         }
5153       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5154         {
5155           /* This is an optional symbol - an Irix specific extension to the
5156              ELF spec.  Ignore it for now.
5157              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5158              than simply ignoring them, but we do not handle this for now.
5159              For information see the "64-bit ELF Object File Specification"
5160              which is available from here:
5161              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5162           symbol = 0;
5163         }
5164       else if ((*info->callbacks->undefined_symbol)
5165                (info, h->root.root.root.string, input_bfd,
5166                 input_section, relocation->r_offset,
5167                 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5168                  || ELF_ST_VISIBILITY (h->root.other)))
5169         {
5170           return bfd_reloc_undefined;
5171         }
5172       else
5173         {
5174           return bfd_reloc_notsupported;
5175         }
5176
5177       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5178       /* If the output section is the PLT section,
5179          then the target is not microMIPS.  */
5180       target_is_micromips_code_p = (htab->splt != sec
5181                                     && ELF_ST_IS_MICROMIPS (h->root.other));
5182     }
5183
5184   /* If this is a reference to a 16-bit function with a stub, we need
5185      to redirect the relocation to the stub unless:
5186
5187      (a) the relocation is for a MIPS16 JAL;
5188
5189      (b) the relocation is for a MIPS16 PIC call, and there are no
5190          non-MIPS16 uses of the GOT slot; or
5191
5192      (c) the section allows direct references to MIPS16 functions.  */
5193   if (r_type != R_MIPS16_26
5194       && !info->relocatable
5195       && ((h != NULL
5196            && h->fn_stub != NULL
5197            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5198           || (local_p
5199               && mips_elf_tdata (input_bfd)->local_stubs != NULL
5200               && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5201       && !section_allows_mips16_refs_p (input_section))
5202     {
5203       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5204          have already noticed that we were going to need the
5205          stub.  */
5206       if (local_p)
5207         {
5208           sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5209           value = 0;
5210         }
5211       else
5212         {
5213           BFD_ASSERT (h->need_fn_stub);
5214           if (h->la25_stub)
5215             {
5216               /* If a LA25 header for the stub itself exists, point to the
5217                  prepended LUI/ADDIU sequence.  */
5218               sec = h->la25_stub->stub_section;
5219               value = h->la25_stub->offset;
5220             }
5221           else
5222             {
5223               sec = h->fn_stub;
5224               value = 0;
5225             }
5226         }
5227
5228       symbol = sec->output_section->vma + sec->output_offset + value;
5229       /* The target is 16-bit, but the stub isn't.  */
5230       target_is_16_bit_code_p = FALSE;
5231     }
5232   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
5233      need to redirect the call to the stub.  Note that we specifically
5234      exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5235      use an indirect stub instead.  */
5236   else if (r_type == R_MIPS16_26 && !info->relocatable
5237            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5238                || (local_p
5239                    && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5240                    && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5241            && !target_is_16_bit_code_p)
5242     {
5243       if (local_p)
5244         sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5245       else
5246         {
5247           /* If both call_stub and call_fp_stub are defined, we can figure
5248              out which one to use by checking which one appears in the input
5249              file.  */
5250           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5251             {
5252               asection *o;
5253
5254               sec = NULL;
5255               for (o = input_bfd->sections; o != NULL; o = o->next)
5256                 {
5257                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5258                     {
5259                       sec = h->call_fp_stub;
5260                       break;
5261                     }
5262                 }
5263               if (sec == NULL)
5264                 sec = h->call_stub;
5265             }
5266           else if (h->call_stub != NULL)
5267             sec = h->call_stub;
5268           else
5269             sec = h->call_fp_stub;
5270         }
5271
5272       BFD_ASSERT (sec->size > 0);
5273       symbol = sec->output_section->vma + sec->output_offset;
5274     }
5275   /* If this is a direct call to a PIC function, redirect to the
5276      non-PIC stub.  */
5277   else if (h != NULL && h->la25_stub
5278            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5279                                                    target_is_16_bit_code_p))
5280     symbol = (h->la25_stub->stub_section->output_section->vma
5281               + h->la25_stub->stub_section->output_offset
5282               + h->la25_stub->offset);
5283
5284   /* Make sure MIPS16 and microMIPS are not used together.  */
5285   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5286       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5287    {
5288       (*_bfd_error_handler)
5289         (_("MIPS16 and microMIPS functions cannot call each other"));
5290       return bfd_reloc_notsupported;
5291    }
5292
5293   /* Calls from 16-bit code to 32-bit code and vice versa require the
5294      mode change.  However, we can ignore calls to undefined weak symbols,
5295      which should never be executed at runtime.  This exception is important
5296      because the assembly writer may have "known" that any definition of the
5297      symbol would be 16-bit code, and that direct jumps were therefore
5298      acceptable.  */
5299   *cross_mode_jump_p = (!info->relocatable
5300                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5301                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5302                             || (r_type == R_MICROMIPS_26_S1
5303                                 && !target_is_micromips_code_p)
5304                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5305                                 && (target_is_16_bit_code_p
5306                                     || target_is_micromips_code_p))));
5307
5308   local_p = (h == NULL
5309              || (h->got_only_for_calls
5310                  ? SYMBOL_CALLS_LOCAL (info, &h->root)
5311                  : SYMBOL_REFERENCES_LOCAL (info, &h->root)));
5312
5313   gp0 = _bfd_get_gp_value (input_bfd);
5314   gp = _bfd_get_gp_value (abfd);
5315   if (htab->got_info)
5316     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5317
5318   if (gnu_local_gp_p)
5319     symbol = gp;
5320
5321   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5322      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5323      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5324   if (got_page_reloc_p (r_type) && !local_p)
5325     {
5326       r_type = (micromips_reloc_p (r_type)
5327                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5328       addend = 0;
5329     }
5330
5331   /* If we haven't already determined the GOT offset, and we're going
5332      to need it, get it now.  */
5333   switch (r_type)
5334     {
5335     case R_MIPS16_CALL16:
5336     case R_MIPS16_GOT16:
5337     case R_MIPS_CALL16:
5338     case R_MIPS_GOT16:
5339     case R_MIPS_GOT_DISP:
5340     case R_MIPS_GOT_HI16:
5341     case R_MIPS_CALL_HI16:
5342     case R_MIPS_GOT_LO16:
5343     case R_MIPS_CALL_LO16:
5344     case R_MICROMIPS_CALL16:
5345     case R_MICROMIPS_GOT16:
5346     case R_MICROMIPS_GOT_DISP:
5347     case R_MICROMIPS_GOT_HI16:
5348     case R_MICROMIPS_CALL_HI16:
5349     case R_MICROMIPS_GOT_LO16:
5350     case R_MICROMIPS_CALL_LO16:
5351     case R_MIPS_TLS_GD:
5352     case R_MIPS_TLS_GOTTPREL:
5353     case R_MIPS_TLS_LDM:
5354     case R_MIPS16_TLS_GD:
5355     case R_MIPS16_TLS_GOTTPREL:
5356     case R_MIPS16_TLS_LDM:
5357     case R_MICROMIPS_TLS_GD:
5358     case R_MICROMIPS_TLS_GOTTPREL:
5359     case R_MICROMIPS_TLS_LDM:
5360       /* Find the index into the GOT where this value is located.  */
5361       if (tls_ldm_reloc_p (r_type))
5362         {
5363           g = mips_elf_local_got_index (abfd, input_bfd, info,
5364                                         0, 0, NULL, r_type);
5365           if (g == MINUS_ONE)
5366             return bfd_reloc_outofrange;
5367         }
5368       else if (!local_p)
5369         {
5370           /* On VxWorks, CALL relocations should refer to the .got.plt
5371              entry, which is initialized to point at the PLT stub.  */
5372           if (htab->is_vxworks
5373               && (call_hi16_reloc_p (r_type)
5374                   || call_lo16_reloc_p (r_type)
5375                   || call16_reloc_p (r_type)))
5376             {
5377               BFD_ASSERT (addend == 0);
5378               BFD_ASSERT (h->root.needs_plt);
5379               g = mips_elf_gotplt_index (info, &h->root);
5380             }
5381           else
5382             {
5383               BFD_ASSERT (addend == 0);
5384               g = mips_elf_global_got_index (abfd, info, input_bfd,
5385                                              &h->root, r_type);
5386               if (!TLS_RELOC_P (r_type)
5387                   && !elf_hash_table (info)->dynamic_sections_created)
5388                 /* This is a static link.  We must initialize the GOT entry.  */
5389                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5390             }
5391         }
5392       else if (!htab->is_vxworks
5393                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5394         /* The calculation below does not involve "g".  */
5395         break;
5396       else
5397         {
5398           g = mips_elf_local_got_index (abfd, input_bfd, info,
5399                                         symbol + addend, r_symndx, h, r_type);
5400           if (g == MINUS_ONE)
5401             return bfd_reloc_outofrange;
5402         }
5403
5404       /* Convert GOT indices to actual offsets.  */
5405       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5406       break;
5407     }
5408
5409   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5410      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5411   if (h != NULL && is_gott_symbol (info, &h->root))
5412     {
5413       Elf_Internal_Rela outrel;
5414       bfd_byte *loc;
5415       asection *s;
5416
5417       s = mips_elf_rel_dyn_section (info, FALSE);
5418       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5419
5420       outrel.r_offset = (input_section->output_section->vma
5421                          + input_section->output_offset
5422                          + relocation->r_offset);
5423       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5424       outrel.r_addend = addend;
5425       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5426
5427       /* If we've written this relocation for a readonly section,
5428          we need to set DF_TEXTREL again, so that we do not delete the
5429          DT_TEXTREL tag.  */
5430       if (MIPS_ELF_READONLY_SECTION (input_section))
5431         info->flags |= DF_TEXTREL;
5432
5433       *valuep = 0;
5434       return bfd_reloc_ok;
5435     }
5436
5437   /* Figure out what kind of relocation is being performed.  */
5438   switch (r_type)
5439     {
5440     case R_MIPS_NONE:
5441       return bfd_reloc_continue;
5442
5443     case R_MIPS_16:
5444       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
5445       overflowed_p = mips_elf_overflow_p (value, 16);
5446       break;
5447
5448     case R_MIPS_32:
5449     case R_MIPS_REL32:
5450     case R_MIPS_64:
5451       if ((info->shared
5452            || (htab->root.dynamic_sections_created
5453                && h != NULL
5454                && h->root.def_dynamic
5455                && !h->root.def_regular
5456                && !h->has_static_relocs))
5457           && r_symndx != STN_UNDEF
5458           && (h == NULL
5459               || h->root.root.type != bfd_link_hash_undefweak
5460               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5461           && (input_section->flags & SEC_ALLOC) != 0)
5462         {
5463           /* If we're creating a shared library, then we can't know
5464              where the symbol will end up.  So, we create a relocation
5465              record in the output, and leave the job up to the dynamic
5466              linker.  We must do the same for executable references to
5467              shared library symbols, unless we've decided to use copy
5468              relocs or PLTs instead.  */
5469           value = addend;
5470           if (!mips_elf_create_dynamic_relocation (abfd,
5471                                                    info,
5472                                                    relocation,
5473                                                    h,
5474                                                    sec,
5475                                                    symbol,
5476                                                    &value,
5477                                                    input_section))
5478             return bfd_reloc_undefined;
5479         }
5480       else
5481         {
5482           if (r_type != R_MIPS_REL32)
5483             value = symbol + addend;
5484           else
5485             value = addend;
5486         }
5487       value &= howto->dst_mask;
5488       break;
5489
5490     case R_MIPS_PC32:
5491       value = symbol + addend - p;
5492       value &= howto->dst_mask;
5493       break;
5494
5495     case R_MIPS16_26:
5496       /* The calculation for R_MIPS16_26 is just the same as for an
5497          R_MIPS_26.  It's only the storage of the relocated field into
5498          the output file that's different.  That's handled in
5499          mips_elf_perform_relocation.  So, we just fall through to the
5500          R_MIPS_26 case here.  */
5501     case R_MIPS_26:
5502     case R_MICROMIPS_26_S1:
5503       {
5504         unsigned int shift;
5505
5506         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5507            the correct ISA mode selector and bit 1 must be 0.  */
5508         if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5509           return bfd_reloc_outofrange;
5510
5511         /* Shift is 2, unusually, for microMIPS JALX.  */
5512         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5513
5514         if (was_local_p)
5515           value = addend | ((p + 4) & (0xfc000000 << shift));
5516         else
5517           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5518         value = (value + symbol) >> shift;
5519         if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5520           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5521         value &= howto->dst_mask;
5522       }
5523       break;
5524
5525     case R_MIPS_TLS_DTPREL_HI16:
5526     case R_MIPS16_TLS_DTPREL_HI16:
5527     case R_MICROMIPS_TLS_DTPREL_HI16:
5528       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5529                & howto->dst_mask);
5530       break;
5531
5532     case R_MIPS_TLS_DTPREL_LO16:
5533     case R_MIPS_TLS_DTPREL32:
5534     case R_MIPS_TLS_DTPREL64:
5535     case R_MIPS16_TLS_DTPREL_LO16:
5536     case R_MICROMIPS_TLS_DTPREL_LO16:
5537       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5538       break;
5539
5540     case R_MIPS_TLS_TPREL_HI16:
5541     case R_MIPS16_TLS_TPREL_HI16:
5542     case R_MICROMIPS_TLS_TPREL_HI16:
5543       value = (mips_elf_high (addend + symbol - tprel_base (info))
5544                & howto->dst_mask);
5545       break;
5546
5547     case R_MIPS_TLS_TPREL_LO16:
5548     case R_MIPS_TLS_TPREL32:
5549     case R_MIPS_TLS_TPREL64:
5550     case R_MIPS16_TLS_TPREL_LO16:
5551     case R_MICROMIPS_TLS_TPREL_LO16:
5552       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5553       break;
5554
5555     case R_MIPS_HI16:
5556     case R_MIPS16_HI16:
5557     case R_MICROMIPS_HI16:
5558       if (!gp_disp_p)
5559         {
5560           value = mips_elf_high (addend + symbol);
5561           value &= howto->dst_mask;
5562         }
5563       else
5564         {
5565           /* For MIPS16 ABI code we generate this sequence
5566                 0: li      $v0,%hi(_gp_disp)
5567                 4: addiupc $v1,%lo(_gp_disp)
5568                 8: sll     $v0,16
5569                12: addu    $v0,$v1
5570                14: move    $gp,$v0
5571              So the offsets of hi and lo relocs are the same, but the
5572              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5573              ADDIUPC clears the low two bits of the instruction address,
5574              so the base is ($t9 + 4) & ~3.  */
5575           if (r_type == R_MIPS16_HI16)
5576             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5577           /* The microMIPS .cpload sequence uses the same assembly
5578              instructions as the traditional psABI version, but the
5579              incoming $t9 has the low bit set.  */
5580           else if (r_type == R_MICROMIPS_HI16)
5581             value = mips_elf_high (addend + gp - p - 1);
5582           else
5583             value = mips_elf_high (addend + gp - p);
5584           overflowed_p = mips_elf_overflow_p (value, 16);
5585         }
5586       break;
5587
5588     case R_MIPS_LO16:
5589     case R_MIPS16_LO16:
5590     case R_MICROMIPS_LO16:
5591     case R_MICROMIPS_HI0_LO16:
5592       if (!gp_disp_p)
5593         value = (symbol + addend) & howto->dst_mask;
5594       else
5595         {
5596           /* See the comment for R_MIPS16_HI16 above for the reason
5597              for this conditional.  */
5598           if (r_type == R_MIPS16_LO16)
5599             value = addend + gp - (p & ~(bfd_vma) 0x3);
5600           else if (r_type == R_MICROMIPS_LO16
5601                    || r_type == R_MICROMIPS_HI0_LO16)
5602             value = addend + gp - p + 3;
5603           else
5604             value = addend + gp - p + 4;
5605           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5606              for overflow.  But, on, say, IRIX5, relocations against
5607              _gp_disp are normally generated from the .cpload
5608              pseudo-op.  It generates code that normally looks like
5609              this:
5610
5611                lui    $gp,%hi(_gp_disp)
5612                addiu  $gp,$gp,%lo(_gp_disp)
5613                addu   $gp,$gp,$t9
5614
5615              Here $t9 holds the address of the function being called,
5616              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5617              relocation can easily overflow in this situation, but the
5618              R_MIPS_HI16 relocation will handle the overflow.
5619              Therefore, we consider this a bug in the MIPS ABI, and do
5620              not check for overflow here.  */
5621         }
5622       break;
5623
5624     case R_MIPS_LITERAL:
5625     case R_MICROMIPS_LITERAL:
5626       /* Because we don't merge literal sections, we can handle this
5627          just like R_MIPS_GPREL16.  In the long run, we should merge
5628          shared literals, and then we will need to additional work
5629          here.  */
5630
5631       /* Fall through.  */
5632
5633     case R_MIPS16_GPREL:
5634       /* The R_MIPS16_GPREL performs the same calculation as
5635          R_MIPS_GPREL16, but stores the relocated bits in a different
5636          order.  We don't need to do anything special here; the
5637          differences are handled in mips_elf_perform_relocation.  */
5638     case R_MIPS_GPREL16:
5639     case R_MICROMIPS_GPREL7_S2:
5640     case R_MICROMIPS_GPREL16:
5641       /* Only sign-extend the addend if it was extracted from the
5642          instruction.  If the addend was separate, leave it alone,
5643          otherwise we may lose significant bits.  */
5644       if (howto->partial_inplace)
5645         addend = _bfd_mips_elf_sign_extend (addend, 16);
5646       value = symbol + addend - gp;
5647       /* If the symbol was local, any earlier relocatable links will
5648          have adjusted its addend with the gp offset, so compensate
5649          for that now.  Don't do it for symbols forced local in this
5650          link, though, since they won't have had the gp offset applied
5651          to them before.  */
5652       if (was_local_p)
5653         value += gp0;
5654       overflowed_p = mips_elf_overflow_p (value, 16);
5655       break;
5656
5657     case R_MIPS16_GOT16:
5658     case R_MIPS16_CALL16:
5659     case R_MIPS_GOT16:
5660     case R_MIPS_CALL16:
5661     case R_MICROMIPS_GOT16:
5662     case R_MICROMIPS_CALL16:
5663       /* VxWorks does not have separate local and global semantics for
5664          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5665       if (!htab->is_vxworks && local_p)
5666         {
5667           value = mips_elf_got16_entry (abfd, input_bfd, info,
5668                                         symbol + addend, !was_local_p);
5669           if (value == MINUS_ONE)
5670             return bfd_reloc_outofrange;
5671           value
5672             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5673           overflowed_p = mips_elf_overflow_p (value, 16);
5674           break;
5675         }
5676
5677       /* Fall through.  */
5678
5679     case R_MIPS_TLS_GD:
5680     case R_MIPS_TLS_GOTTPREL:
5681     case R_MIPS_TLS_LDM:
5682     case R_MIPS_GOT_DISP:
5683     case R_MIPS16_TLS_GD:
5684     case R_MIPS16_TLS_GOTTPREL:
5685     case R_MIPS16_TLS_LDM:
5686     case R_MICROMIPS_TLS_GD:
5687     case R_MICROMIPS_TLS_GOTTPREL:
5688     case R_MICROMIPS_TLS_LDM:
5689     case R_MICROMIPS_GOT_DISP:
5690       value = g;
5691       overflowed_p = mips_elf_overflow_p (value, 16);
5692       break;
5693
5694     case R_MIPS_GPREL32:
5695       value = (addend + symbol + gp0 - gp);
5696       if (!save_addend)
5697         value &= howto->dst_mask;
5698       break;
5699
5700     case R_MIPS_PC16:
5701     case R_MIPS_GNU_REL16_S2:
5702       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5703       overflowed_p = mips_elf_overflow_p (value, 18);
5704       value >>= howto->rightshift;
5705       value &= howto->dst_mask;
5706       break;
5707
5708     case R_MICROMIPS_PC7_S1:
5709       value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p;
5710       overflowed_p = mips_elf_overflow_p (value, 8);
5711       value >>= howto->rightshift;
5712       value &= howto->dst_mask;
5713       break;
5714
5715     case R_MICROMIPS_PC10_S1:
5716       value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p;
5717       overflowed_p = mips_elf_overflow_p (value, 11);
5718       value >>= howto->rightshift;
5719       value &= howto->dst_mask;
5720       break;
5721
5722     case R_MICROMIPS_PC16_S1:
5723       value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p;
5724       overflowed_p = mips_elf_overflow_p (value, 17);
5725       value >>= howto->rightshift;
5726       value &= howto->dst_mask;
5727       break;
5728
5729     case R_MICROMIPS_PC23_S2:
5730       value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3);
5731       overflowed_p = mips_elf_overflow_p (value, 25);
5732       value >>= howto->rightshift;
5733       value &= howto->dst_mask;
5734       break;
5735
5736     case R_MIPS_GOT_HI16:
5737     case R_MIPS_CALL_HI16:
5738     case R_MICROMIPS_GOT_HI16:
5739     case R_MICROMIPS_CALL_HI16:
5740       /* We're allowed to handle these two relocations identically.
5741          The dynamic linker is allowed to handle the CALL relocations
5742          differently by creating a lazy evaluation stub.  */
5743       value = g;
5744       value = mips_elf_high (value);
5745       value &= howto->dst_mask;
5746       break;
5747
5748     case R_MIPS_GOT_LO16:
5749     case R_MIPS_CALL_LO16:
5750     case R_MICROMIPS_GOT_LO16:
5751     case R_MICROMIPS_CALL_LO16:
5752       value = g & howto->dst_mask;
5753       break;
5754
5755     case R_MIPS_GOT_PAGE:
5756     case R_MICROMIPS_GOT_PAGE:
5757       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
5758       if (value == MINUS_ONE)
5759         return bfd_reloc_outofrange;
5760       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5761       overflowed_p = mips_elf_overflow_p (value, 16);
5762       break;
5763
5764     case R_MIPS_GOT_OFST:
5765     case R_MICROMIPS_GOT_OFST:
5766       if (local_p)
5767         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
5768       else
5769         value = addend;
5770       overflowed_p = mips_elf_overflow_p (value, 16);
5771       break;
5772
5773     case R_MIPS_SUB:
5774     case R_MICROMIPS_SUB:
5775       value = symbol - addend;
5776       value &= howto->dst_mask;
5777       break;
5778
5779     case R_MIPS_HIGHER:
5780     case R_MICROMIPS_HIGHER:
5781       value = mips_elf_higher (addend + symbol);
5782       value &= howto->dst_mask;
5783       break;
5784
5785     case R_MIPS_HIGHEST:
5786     case R_MICROMIPS_HIGHEST:
5787       value = mips_elf_highest (addend + symbol);
5788       value &= howto->dst_mask;
5789       break;
5790
5791     case R_MIPS_SCN_DISP:
5792     case R_MICROMIPS_SCN_DISP:
5793       value = symbol + addend - sec->output_offset;
5794       value &= howto->dst_mask;
5795       break;
5796
5797     case R_MIPS_JALR:
5798     case R_MICROMIPS_JALR:
5799       /* This relocation is only a hint.  In some cases, we optimize
5800          it into a bal instruction.  But we don't try to optimize
5801          when the symbol does not resolve locally.  */
5802       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
5803         return bfd_reloc_continue;
5804       value = symbol + addend;
5805       break;
5806
5807     case R_MIPS_PJUMP:
5808     case R_MIPS_GNU_VTINHERIT:
5809     case R_MIPS_GNU_VTENTRY:
5810       /* We don't do anything with these at present.  */
5811       return bfd_reloc_continue;
5812
5813     default:
5814       /* An unrecognized relocation type.  */
5815       return bfd_reloc_notsupported;
5816     }
5817
5818   /* Store the VALUE for our caller.  */
5819   *valuep = value;
5820   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5821 }
5822
5823 /* Obtain the field relocated by RELOCATION.  */
5824
5825 static bfd_vma
5826 mips_elf_obtain_contents (reloc_howto_type *howto,
5827                           const Elf_Internal_Rela *relocation,
5828                           bfd *input_bfd, bfd_byte *contents)
5829 {
5830   bfd_vma x;
5831   bfd_byte *location = contents + relocation->r_offset;
5832
5833   /* Obtain the bytes.  */
5834   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5835
5836   return x;
5837 }
5838
5839 /* It has been determined that the result of the RELOCATION is the
5840    VALUE.  Use HOWTO to place VALUE into the output file at the
5841    appropriate position.  The SECTION is the section to which the
5842    relocation applies.
5843    CROSS_MODE_JUMP_P is true if the relocation field
5844    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5845
5846    Returns FALSE if anything goes wrong.  */
5847
5848 static bfd_boolean
5849 mips_elf_perform_relocation (struct bfd_link_info *info,
5850                              reloc_howto_type *howto,
5851                              const Elf_Internal_Rela *relocation,
5852                              bfd_vma value, bfd *input_bfd,
5853                              asection *input_section, bfd_byte *contents,
5854                              bfd_boolean cross_mode_jump_p)
5855 {
5856   bfd_vma x;
5857   bfd_byte *location;
5858   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5859
5860   /* Figure out where the relocation is occurring.  */
5861   location = contents + relocation->r_offset;
5862
5863   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5864
5865   /* Obtain the current value.  */
5866   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5867
5868   /* Clear the field we are setting.  */
5869   x &= ~howto->dst_mask;
5870
5871   /* Set the field.  */
5872   x |= (value & howto->dst_mask);
5873
5874   /* If required, turn JAL into JALX.  */
5875   if (cross_mode_jump_p && jal_reloc_p (r_type))
5876     {
5877       bfd_boolean ok;
5878       bfd_vma opcode = x >> 26;
5879       bfd_vma jalx_opcode;
5880
5881       /* Check to see if the opcode is already JAL or JALX.  */
5882       if (r_type == R_MIPS16_26)
5883         {
5884           ok = ((opcode == 0x6) || (opcode == 0x7));
5885           jalx_opcode = 0x7;
5886         }
5887       else if (r_type == R_MICROMIPS_26_S1)
5888         {
5889           ok = ((opcode == 0x3d) || (opcode == 0x3c));
5890           jalx_opcode = 0x3c;
5891         }
5892       else
5893         {
5894           ok = ((opcode == 0x3) || (opcode == 0x1d));
5895           jalx_opcode = 0x1d;
5896         }
5897
5898       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
5899          convert J or JALS to JALX.  */
5900       if (!ok)
5901         {
5902           (*_bfd_error_handler)
5903             (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
5904              input_bfd,
5905              input_section,
5906              (unsigned long) relocation->r_offset);
5907           bfd_set_error (bfd_error_bad_value);
5908           return FALSE;
5909         }
5910
5911       /* Make this the JALX opcode.  */
5912       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
5913     }
5914
5915   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
5916      range.  */
5917   if (!info->relocatable
5918       && !cross_mode_jump_p
5919       && ((JAL_TO_BAL_P (input_bfd)
5920            && r_type == R_MIPS_26
5921            && (x >> 26) == 0x3)         /* jal addr */
5922           || (JALR_TO_BAL_P (input_bfd)
5923               && r_type == R_MIPS_JALR
5924               && x == 0x0320f809)       /* jalr t9 */
5925           || (JR_TO_B_P (input_bfd)
5926               && r_type == R_MIPS_JALR
5927               && x == 0x03200008)))     /* jr t9 */
5928     {
5929       bfd_vma addr;
5930       bfd_vma dest;
5931       bfd_signed_vma off;
5932
5933       addr = (input_section->output_section->vma
5934               + input_section->output_offset
5935               + relocation->r_offset
5936               + 4);
5937       if (r_type == R_MIPS_26)
5938         dest = (value << 2) | ((addr >> 28) << 28);
5939       else
5940         dest = value;
5941       off = dest - addr;
5942       if (off <= 0x1ffff && off >= -0x20000)
5943         {
5944           if (x == 0x03200008)  /* jr t9 */
5945             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
5946           else
5947             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
5948         }
5949     }
5950
5951   /* Put the value into the output.  */
5952   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
5953
5954   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
5955                                location);
5956
5957   return TRUE;
5958 }
5959 \f
5960 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
5961    is the original relocation, which is now being transformed into a
5962    dynamic relocation.  The ADDENDP is adjusted if necessary; the
5963    caller should store the result in place of the original addend.  */
5964
5965 static bfd_boolean
5966 mips_elf_create_dynamic_relocation (bfd *output_bfd,
5967                                     struct bfd_link_info *info,
5968                                     const Elf_Internal_Rela *rel,
5969                                     struct mips_elf_link_hash_entry *h,
5970                                     asection *sec, bfd_vma symbol,
5971                                     bfd_vma *addendp, asection *input_section)
5972 {
5973   Elf_Internal_Rela outrel[3];
5974   asection *sreloc;
5975   bfd *dynobj;
5976   int r_type;
5977   long indx;
5978   bfd_boolean defined_p;
5979   struct mips_elf_link_hash_table *htab;
5980
5981   htab = mips_elf_hash_table (info);
5982   BFD_ASSERT (htab != NULL);
5983
5984   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
5985   dynobj = elf_hash_table (info)->dynobj;
5986   sreloc = mips_elf_rel_dyn_section (info, FALSE);
5987   BFD_ASSERT (sreloc != NULL);
5988   BFD_ASSERT (sreloc->contents != NULL);
5989   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
5990               < sreloc->size);
5991
5992   outrel[0].r_offset =
5993     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
5994   if (ABI_64_P (output_bfd))
5995     {
5996       outrel[1].r_offset =
5997         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
5998       outrel[2].r_offset =
5999         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6000     }
6001
6002   if (outrel[0].r_offset == MINUS_ONE)
6003     /* The relocation field has been deleted.  */
6004     return TRUE;
6005
6006   if (outrel[0].r_offset == MINUS_TWO)
6007     {
6008       /* The relocation field has been converted into a relative value of
6009          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6010          the field to be fully relocated, so add in the symbol's value.  */
6011       *addendp += symbol;
6012       return TRUE;
6013     }
6014
6015   /* We must now calculate the dynamic symbol table index to use
6016      in the relocation.  */
6017   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6018     {
6019       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6020       indx = h->root.dynindx;
6021       if (SGI_COMPAT (output_bfd))
6022         defined_p = h->root.def_regular;
6023       else
6024         /* ??? glibc's ld.so just adds the final GOT entry to the
6025            relocation field.  It therefore treats relocs against
6026            defined symbols in the same way as relocs against
6027            undefined symbols.  */
6028         defined_p = FALSE;
6029     }
6030   else
6031     {
6032       if (sec != NULL && bfd_is_abs_section (sec))
6033         indx = 0;
6034       else if (sec == NULL || sec->owner == NULL)
6035         {
6036           bfd_set_error (bfd_error_bad_value);
6037           return FALSE;
6038         }
6039       else
6040         {
6041           indx = elf_section_data (sec->output_section)->dynindx;
6042           if (indx == 0)
6043             {
6044               asection *osec = htab->root.text_index_section;
6045               indx = elf_section_data (osec)->dynindx;
6046             }
6047           if (indx == 0)
6048             abort ();
6049         }
6050
6051       /* Instead of generating a relocation using the section
6052          symbol, we may as well make it a fully relative
6053          relocation.  We want to avoid generating relocations to
6054          local symbols because we used to generate them
6055          incorrectly, without adding the original symbol value,
6056          which is mandated by the ABI for section symbols.  In
6057          order to give dynamic loaders and applications time to
6058          phase out the incorrect use, we refrain from emitting
6059          section-relative relocations.  It's not like they're
6060          useful, after all.  This should be a bit more efficient
6061          as well.  */
6062       /* ??? Although this behavior is compatible with glibc's ld.so,
6063          the ABI says that relocations against STN_UNDEF should have
6064          a symbol value of 0.  Irix rld honors this, so relocations
6065          against STN_UNDEF have no effect.  */
6066       if (!SGI_COMPAT (output_bfd))
6067         indx = 0;
6068       defined_p = TRUE;
6069     }
6070
6071   /* If the relocation was previously an absolute relocation and
6072      this symbol will not be referred to by the relocation, we must
6073      adjust it by the value we give it in the dynamic symbol table.
6074      Otherwise leave the job up to the dynamic linker.  */
6075   if (defined_p && r_type != R_MIPS_REL32)
6076     *addendp += symbol;
6077
6078   if (htab->is_vxworks)
6079     /* VxWorks uses non-relative relocations for this.  */
6080     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6081   else
6082     /* The relocation is always an REL32 relocation because we don't
6083        know where the shared library will wind up at load-time.  */
6084     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6085                                    R_MIPS_REL32);
6086
6087   /* For strict adherence to the ABI specification, we should
6088      generate a R_MIPS_64 relocation record by itself before the
6089      _REL32/_64 record as well, such that the addend is read in as
6090      a 64-bit value (REL32 is a 32-bit relocation, after all).
6091      However, since none of the existing ELF64 MIPS dynamic
6092      loaders seems to care, we don't waste space with these
6093      artificial relocations.  If this turns out to not be true,
6094      mips_elf_allocate_dynamic_relocation() should be tweaked so
6095      as to make room for a pair of dynamic relocations per
6096      invocation if ABI_64_P, and here we should generate an
6097      additional relocation record with R_MIPS_64 by itself for a
6098      NULL symbol before this relocation record.  */
6099   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6100                                  ABI_64_P (output_bfd)
6101                                  ? R_MIPS_64
6102                                  : R_MIPS_NONE);
6103   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6104
6105   /* Adjust the output offset of the relocation to reference the
6106      correct location in the output file.  */
6107   outrel[0].r_offset += (input_section->output_section->vma
6108                          + input_section->output_offset);
6109   outrel[1].r_offset += (input_section->output_section->vma
6110                          + input_section->output_offset);
6111   outrel[2].r_offset += (input_section->output_section->vma
6112                          + input_section->output_offset);
6113
6114   /* Put the relocation back out.  We have to use the special
6115      relocation outputter in the 64-bit case since the 64-bit
6116      relocation format is non-standard.  */
6117   if (ABI_64_P (output_bfd))
6118     {
6119       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6120         (output_bfd, &outrel[0],
6121          (sreloc->contents
6122           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6123     }
6124   else if (htab->is_vxworks)
6125     {
6126       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6127       outrel[0].r_addend = *addendp;
6128       bfd_elf32_swap_reloca_out
6129         (output_bfd, &outrel[0],
6130          (sreloc->contents
6131           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6132     }
6133   else
6134     bfd_elf32_swap_reloc_out
6135       (output_bfd, &outrel[0],
6136        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6137
6138   /* We've now added another relocation.  */
6139   ++sreloc->reloc_count;
6140
6141   /* Make sure the output section is writable.  The dynamic linker
6142      will be writing to it.  */
6143   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6144     |= SHF_WRITE;
6145
6146   /* On IRIX5, make an entry of compact relocation info.  */
6147   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6148     {
6149       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6150       bfd_byte *cr;
6151
6152       if (scpt)
6153         {
6154           Elf32_crinfo cptrel;
6155
6156           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6157           cptrel.vaddr = (rel->r_offset
6158                           + input_section->output_section->vma
6159                           + input_section->output_offset);
6160           if (r_type == R_MIPS_REL32)
6161             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6162           else
6163             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6164           mips_elf_set_cr_dist2to (cptrel, 0);
6165           cptrel.konst = *addendp;
6166
6167           cr = (scpt->contents
6168                 + sizeof (Elf32_External_compact_rel));
6169           mips_elf_set_cr_relvaddr (cptrel, 0);
6170           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6171                                      ((Elf32_External_crinfo *) cr
6172                                       + scpt->reloc_count));
6173           ++scpt->reloc_count;
6174         }
6175     }
6176
6177   /* If we've written this relocation for a readonly section,
6178      we need to set DF_TEXTREL again, so that we do not delete the
6179      DT_TEXTREL tag.  */
6180   if (MIPS_ELF_READONLY_SECTION (input_section))
6181     info->flags |= DF_TEXTREL;
6182
6183   return TRUE;
6184 }
6185 \f
6186 /* Return the MACH for a MIPS e_flags value.  */
6187
6188 unsigned long
6189 _bfd_elf_mips_mach (flagword flags)
6190 {
6191   switch (flags & EF_MIPS_MACH)
6192     {
6193     case E_MIPS_MACH_3900:
6194       return bfd_mach_mips3900;
6195
6196     case E_MIPS_MACH_4010:
6197       return bfd_mach_mips4010;
6198
6199     case E_MIPS_MACH_4100:
6200       return bfd_mach_mips4100;
6201
6202     case E_MIPS_MACH_4111:
6203       return bfd_mach_mips4111;
6204
6205     case E_MIPS_MACH_4120:
6206       return bfd_mach_mips4120;
6207
6208     case E_MIPS_MACH_4650:
6209       return bfd_mach_mips4650;
6210
6211     case E_MIPS_MACH_5400:
6212       return bfd_mach_mips5400;
6213
6214     case E_MIPS_MACH_5500:
6215       return bfd_mach_mips5500;
6216
6217     case E_MIPS_MACH_5900:
6218       return bfd_mach_mips5900;
6219
6220     case E_MIPS_MACH_9000:
6221       return bfd_mach_mips9000;
6222
6223     case E_MIPS_MACH_SB1:
6224       return bfd_mach_mips_sb1;
6225
6226     case E_MIPS_MACH_LS2E:
6227       return bfd_mach_mips_loongson_2e;
6228
6229     case E_MIPS_MACH_LS2F:
6230       return bfd_mach_mips_loongson_2f;
6231
6232     case E_MIPS_MACH_LS3A:
6233       return bfd_mach_mips_loongson_3a;
6234
6235     case E_MIPS_MACH_OCTEON2:
6236       return bfd_mach_mips_octeon2;
6237
6238     case E_MIPS_MACH_OCTEON:
6239       return bfd_mach_mips_octeon;
6240
6241     case E_MIPS_MACH_XLR:
6242       return bfd_mach_mips_xlr;
6243
6244     default:
6245       switch (flags & EF_MIPS_ARCH)
6246         {
6247         default:
6248         case E_MIPS_ARCH_1:
6249           return bfd_mach_mips3000;
6250
6251         case E_MIPS_ARCH_2:
6252           return bfd_mach_mips6000;
6253
6254         case E_MIPS_ARCH_3:
6255           return bfd_mach_mips4000;
6256
6257         case E_MIPS_ARCH_4:
6258           return bfd_mach_mips8000;
6259
6260         case E_MIPS_ARCH_5:
6261           return bfd_mach_mips5;
6262
6263         case E_MIPS_ARCH_32:
6264           return bfd_mach_mipsisa32;
6265
6266         case E_MIPS_ARCH_64:
6267           return bfd_mach_mipsisa64;
6268
6269         case E_MIPS_ARCH_32R2:
6270           return bfd_mach_mipsisa32r2;
6271
6272         case E_MIPS_ARCH_64R2:
6273           return bfd_mach_mipsisa64r2;
6274         }
6275     }
6276
6277   return 0;
6278 }
6279
6280 /* Return printable name for ABI.  */
6281
6282 static INLINE char *
6283 elf_mips_abi_name (bfd *abfd)
6284 {
6285   flagword flags;
6286
6287   flags = elf_elfheader (abfd)->e_flags;
6288   switch (flags & EF_MIPS_ABI)
6289     {
6290     case 0:
6291       if (ABI_N32_P (abfd))
6292         return "N32";
6293       else if (ABI_64_P (abfd))
6294         return "64";
6295       else
6296         return "none";
6297     case E_MIPS_ABI_O32:
6298       return "O32";
6299     case E_MIPS_ABI_O64:
6300       return "O64";
6301     case E_MIPS_ABI_EABI32:
6302       return "EABI32";
6303     case E_MIPS_ABI_EABI64:
6304       return "EABI64";
6305     default:
6306       return "unknown abi";
6307     }
6308 }
6309 \f
6310 /* MIPS ELF uses two common sections.  One is the usual one, and the
6311    other is for small objects.  All the small objects are kept
6312    together, and then referenced via the gp pointer, which yields
6313    faster assembler code.  This is what we use for the small common
6314    section.  This approach is copied from ecoff.c.  */
6315 static asection mips_elf_scom_section;
6316 static asymbol mips_elf_scom_symbol;
6317 static asymbol *mips_elf_scom_symbol_ptr;
6318
6319 /* MIPS ELF also uses an acommon section, which represents an
6320    allocated common symbol which may be overridden by a
6321    definition in a shared library.  */
6322 static asection mips_elf_acom_section;
6323 static asymbol mips_elf_acom_symbol;
6324 static asymbol *mips_elf_acom_symbol_ptr;
6325
6326 /* This is used for both the 32-bit and the 64-bit ABI.  */
6327
6328 void
6329 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6330 {
6331   elf_symbol_type *elfsym;
6332
6333   /* Handle the special MIPS section numbers that a symbol may use.  */
6334   elfsym = (elf_symbol_type *) asym;
6335   switch (elfsym->internal_elf_sym.st_shndx)
6336     {
6337     case SHN_MIPS_ACOMMON:
6338       /* This section is used in a dynamically linked executable file.
6339          It is an allocated common section.  The dynamic linker can
6340          either resolve these symbols to something in a shared
6341          library, or it can just leave them here.  For our purposes,
6342          we can consider these symbols to be in a new section.  */
6343       if (mips_elf_acom_section.name == NULL)
6344         {
6345           /* Initialize the acommon section.  */
6346           mips_elf_acom_section.name = ".acommon";
6347           mips_elf_acom_section.flags = SEC_ALLOC;
6348           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6349           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6350           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6351           mips_elf_acom_symbol.name = ".acommon";
6352           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6353           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6354           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6355         }
6356       asym->section = &mips_elf_acom_section;
6357       break;
6358
6359     case SHN_COMMON:
6360       /* Common symbols less than the GP size are automatically
6361          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6362       if (asym->value > elf_gp_size (abfd)
6363           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6364           || IRIX_COMPAT (abfd) == ict_irix6)
6365         break;
6366       /* Fall through.  */
6367     case SHN_MIPS_SCOMMON:
6368       if (mips_elf_scom_section.name == NULL)
6369         {
6370           /* Initialize the small common section.  */
6371           mips_elf_scom_section.name = ".scommon";
6372           mips_elf_scom_section.flags = SEC_IS_COMMON;
6373           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6374           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6375           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6376           mips_elf_scom_symbol.name = ".scommon";
6377           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6378           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6379           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6380         }
6381       asym->section = &mips_elf_scom_section;
6382       asym->value = elfsym->internal_elf_sym.st_size;
6383       break;
6384
6385     case SHN_MIPS_SUNDEFINED:
6386       asym->section = bfd_und_section_ptr;
6387       break;
6388
6389     case SHN_MIPS_TEXT:
6390       {
6391         asection *section = bfd_get_section_by_name (abfd, ".text");
6392
6393         if (section != NULL)
6394           {
6395             asym->section = section;
6396             /* MIPS_TEXT is a bit special, the address is not an offset
6397                to the base of the .text section.  So substract the section
6398                base address to make it an offset.  */
6399             asym->value -= section->vma;
6400           }
6401       }
6402       break;
6403
6404     case SHN_MIPS_DATA:
6405       {
6406         asection *section = bfd_get_section_by_name (abfd, ".data");
6407
6408         if (section != NULL)
6409           {
6410             asym->section = section;
6411             /* MIPS_DATA is a bit special, the address is not an offset
6412                to the base of the .data section.  So substract the section
6413                base address to make it an offset.  */
6414             asym->value -= section->vma;
6415           }
6416       }
6417       break;
6418     }
6419
6420   /* If this is an odd-valued function symbol, assume it's a MIPS16
6421      or microMIPS one.  */
6422   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6423       && (asym->value & 1) != 0)
6424     {
6425       asym->value--;
6426       if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
6427         elfsym->internal_elf_sym.st_other
6428           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6429       else
6430         elfsym->internal_elf_sym.st_other
6431           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6432     }
6433 }
6434 \f
6435 /* Implement elf_backend_eh_frame_address_size.  This differs from
6436    the default in the way it handles EABI64.
6437
6438    EABI64 was originally specified as an LP64 ABI, and that is what
6439    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6440    historically accepted the combination of -mabi=eabi and -mlong32,
6441    and this ILP32 variation has become semi-official over time.
6442    Both forms use elf32 and have pointer-sized FDE addresses.
6443
6444    If an EABI object was generated by GCC 4.0 or above, it will have
6445    an empty .gcc_compiled_longXX section, where XX is the size of longs
6446    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6447    have no special marking to distinguish them from LP64 objects.
6448
6449    We don't want users of the official LP64 ABI to be punished for the
6450    existence of the ILP32 variant, but at the same time, we don't want
6451    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6452    We therefore take the following approach:
6453
6454       - If ABFD contains a .gcc_compiled_longXX section, use it to
6455         determine the pointer size.
6456
6457       - Otherwise check the type of the first relocation.  Assume that
6458         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6459
6460       - Otherwise punt.
6461
6462    The second check is enough to detect LP64 objects generated by pre-4.0
6463    compilers because, in the kind of output generated by those compilers,
6464    the first relocation will be associated with either a CIE personality
6465    routine or an FDE start address.  Furthermore, the compilers never
6466    used a special (non-pointer) encoding for this ABI.
6467
6468    Checking the relocation type should also be safe because there is no
6469    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6470    did so.  */
6471
6472 unsigned int
6473 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6474 {
6475   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6476     return 8;
6477   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6478     {
6479       bfd_boolean long32_p, long64_p;
6480
6481       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6482       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6483       if (long32_p && long64_p)
6484         return 0;
6485       if (long32_p)
6486         return 4;
6487       if (long64_p)
6488         return 8;
6489
6490       if (sec->reloc_count > 0
6491           && elf_section_data (sec)->relocs != NULL
6492           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6493               == R_MIPS_64))
6494         return 8;
6495
6496       return 0;
6497     }
6498   return 4;
6499 }
6500 \f
6501 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6502    relocations against two unnamed section symbols to resolve to the
6503    same address.  For example, if we have code like:
6504
6505         lw      $4,%got_disp(.data)($gp)
6506         lw      $25,%got_disp(.text)($gp)
6507         jalr    $25
6508
6509    then the linker will resolve both relocations to .data and the program
6510    will jump there rather than to .text.
6511
6512    We can work around this problem by giving names to local section symbols.
6513    This is also what the MIPSpro tools do.  */
6514
6515 bfd_boolean
6516 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6517 {
6518   return SGI_COMPAT (abfd);
6519 }
6520 \f
6521 /* Work over a section just before writing it out.  This routine is
6522    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6523    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6524    a better way.  */
6525
6526 bfd_boolean
6527 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6528 {
6529   if (hdr->sh_type == SHT_MIPS_REGINFO
6530       && hdr->sh_size > 0)
6531     {
6532       bfd_byte buf[4];
6533
6534       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6535       BFD_ASSERT (hdr->contents == NULL);
6536
6537       if (bfd_seek (abfd,
6538                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6539                     SEEK_SET) != 0)
6540         return FALSE;
6541       H_PUT_32 (abfd, elf_gp (abfd), buf);
6542       if (bfd_bwrite (buf, 4, abfd) != 4)
6543         return FALSE;
6544     }
6545
6546   if (hdr->sh_type == SHT_MIPS_OPTIONS
6547       && hdr->bfd_section != NULL
6548       && mips_elf_section_data (hdr->bfd_section) != NULL
6549       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6550     {
6551       bfd_byte *contents, *l, *lend;
6552
6553       /* We stored the section contents in the tdata field in the
6554          set_section_contents routine.  We save the section contents
6555          so that we don't have to read them again.
6556          At this point we know that elf_gp is set, so we can look
6557          through the section contents to see if there is an
6558          ODK_REGINFO structure.  */
6559
6560       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6561       l = contents;
6562       lend = contents + hdr->sh_size;
6563       while (l + sizeof (Elf_External_Options) <= lend)
6564         {
6565           Elf_Internal_Options intopt;
6566
6567           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6568                                         &intopt);
6569           if (intopt.size < sizeof (Elf_External_Options))
6570             {
6571               (*_bfd_error_handler)
6572                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6573                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6574               break;
6575             }
6576           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6577             {
6578               bfd_byte buf[8];
6579
6580               if (bfd_seek (abfd,
6581                             (hdr->sh_offset
6582                              + (l - contents)
6583                              + sizeof (Elf_External_Options)
6584                              + (sizeof (Elf64_External_RegInfo) - 8)),
6585                              SEEK_SET) != 0)
6586                 return FALSE;
6587               H_PUT_64 (abfd, elf_gp (abfd), buf);
6588               if (bfd_bwrite (buf, 8, abfd) != 8)
6589                 return FALSE;
6590             }
6591           else if (intopt.kind == ODK_REGINFO)
6592             {
6593               bfd_byte buf[4];
6594
6595               if (bfd_seek (abfd,
6596                             (hdr->sh_offset
6597                              + (l - contents)
6598                              + sizeof (Elf_External_Options)
6599                              + (sizeof (Elf32_External_RegInfo) - 4)),
6600                             SEEK_SET) != 0)
6601                 return FALSE;
6602               H_PUT_32 (abfd, elf_gp (abfd), buf);
6603               if (bfd_bwrite (buf, 4, abfd) != 4)
6604                 return FALSE;
6605             }
6606           l += intopt.size;
6607         }
6608     }
6609
6610   if (hdr->bfd_section != NULL)
6611     {
6612       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6613
6614       /* .sbss is not handled specially here because the GNU/Linux
6615          prelinker can convert .sbss from NOBITS to PROGBITS and
6616          changing it back to NOBITS breaks the binary.  The entry in
6617          _bfd_mips_elf_special_sections will ensure the correct flags
6618          are set on .sbss if BFD creates it without reading it from an
6619          input file, and without special handling here the flags set
6620          on it in an input file will be followed.  */
6621       if (strcmp (name, ".sdata") == 0
6622           || strcmp (name, ".lit8") == 0
6623           || strcmp (name, ".lit4") == 0)
6624         {
6625           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6626           hdr->sh_type = SHT_PROGBITS;
6627         }
6628       else if (strcmp (name, ".srdata") == 0)
6629         {
6630           hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6631           hdr->sh_type = SHT_PROGBITS;
6632         }
6633       else if (strcmp (name, ".compact_rel") == 0)
6634         {
6635           hdr->sh_flags = 0;
6636           hdr->sh_type = SHT_PROGBITS;
6637         }
6638       else if (strcmp (name, ".rtproc") == 0)
6639         {
6640           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6641             {
6642               unsigned int adjust;
6643
6644               adjust = hdr->sh_size % hdr->sh_addralign;
6645               if (adjust != 0)
6646                 hdr->sh_size += hdr->sh_addralign - adjust;
6647             }
6648         }
6649     }
6650
6651   return TRUE;
6652 }
6653
6654 /* Handle a MIPS specific section when reading an object file.  This
6655    is called when elfcode.h finds a section with an unknown type.
6656    This routine supports both the 32-bit and 64-bit ELF ABI.
6657
6658    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6659    how to.  */
6660
6661 bfd_boolean
6662 _bfd_mips_elf_section_from_shdr (bfd *abfd,
6663                                  Elf_Internal_Shdr *hdr,
6664                                  const char *name,
6665                                  int shindex)
6666 {
6667   flagword flags = 0;
6668
6669   /* There ought to be a place to keep ELF backend specific flags, but
6670      at the moment there isn't one.  We just keep track of the
6671      sections by their name, instead.  Fortunately, the ABI gives
6672      suggested names for all the MIPS specific sections, so we will
6673      probably get away with this.  */
6674   switch (hdr->sh_type)
6675     {
6676     case SHT_MIPS_LIBLIST:
6677       if (strcmp (name, ".liblist") != 0)
6678         return FALSE;
6679       break;
6680     case SHT_MIPS_MSYM:
6681       if (strcmp (name, ".msym") != 0)
6682         return FALSE;
6683       break;
6684     case SHT_MIPS_CONFLICT:
6685       if (strcmp (name, ".conflict") != 0)
6686         return FALSE;
6687       break;
6688     case SHT_MIPS_GPTAB:
6689       if (! CONST_STRNEQ (name, ".gptab."))
6690         return FALSE;
6691       break;
6692     case SHT_MIPS_UCODE:
6693       if (strcmp (name, ".ucode") != 0)
6694         return FALSE;
6695       break;
6696     case SHT_MIPS_DEBUG:
6697       if (strcmp (name, ".mdebug") != 0)
6698         return FALSE;
6699       flags = SEC_DEBUGGING;
6700       break;
6701     case SHT_MIPS_REGINFO:
6702       if (strcmp (name, ".reginfo") != 0
6703           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
6704         return FALSE;
6705       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6706       break;
6707     case SHT_MIPS_IFACE:
6708       if (strcmp (name, ".MIPS.interfaces") != 0)
6709         return FALSE;
6710       break;
6711     case SHT_MIPS_CONTENT:
6712       if (! CONST_STRNEQ (name, ".MIPS.content"))
6713         return FALSE;
6714       break;
6715     case SHT_MIPS_OPTIONS:
6716       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6717         return FALSE;
6718       break;
6719     case SHT_MIPS_DWARF:
6720       if (! CONST_STRNEQ (name, ".debug_")
6721           && ! CONST_STRNEQ (name, ".zdebug_"))
6722         return FALSE;
6723       break;
6724     case SHT_MIPS_SYMBOL_LIB:
6725       if (strcmp (name, ".MIPS.symlib") != 0)
6726         return FALSE;
6727       break;
6728     case SHT_MIPS_EVENTS:
6729       if (! CONST_STRNEQ (name, ".MIPS.events")
6730           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
6731         return FALSE;
6732       break;
6733     default:
6734       break;
6735     }
6736
6737   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
6738     return FALSE;
6739
6740   if (flags)
6741     {
6742       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6743                                    (bfd_get_section_flags (abfd,
6744                                                            hdr->bfd_section)
6745                                     | flags)))
6746         return FALSE;
6747     }
6748
6749   /* FIXME: We should record sh_info for a .gptab section.  */
6750
6751   /* For a .reginfo section, set the gp value in the tdata information
6752      from the contents of this section.  We need the gp value while
6753      processing relocs, so we just get it now.  The .reginfo section
6754      is not used in the 64-bit MIPS ELF ABI.  */
6755   if (hdr->sh_type == SHT_MIPS_REGINFO)
6756     {
6757       Elf32_External_RegInfo ext;
6758       Elf32_RegInfo s;
6759
6760       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6761                                       &ext, 0, sizeof ext))
6762         return FALSE;
6763       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6764       elf_gp (abfd) = s.ri_gp_value;
6765     }
6766
6767   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6768      set the gp value based on what we find.  We may see both
6769      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6770      they should agree.  */
6771   if (hdr->sh_type == SHT_MIPS_OPTIONS)
6772     {
6773       bfd_byte *contents, *l, *lend;
6774
6775       contents = bfd_malloc (hdr->sh_size);
6776       if (contents == NULL)
6777         return FALSE;
6778       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
6779                                       0, hdr->sh_size))
6780         {
6781           free (contents);
6782           return FALSE;
6783         }
6784       l = contents;
6785       lend = contents + hdr->sh_size;
6786       while (l + sizeof (Elf_External_Options) <= lend)
6787         {
6788           Elf_Internal_Options intopt;
6789
6790           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6791                                         &intopt);
6792           if (intopt.size < sizeof (Elf_External_Options))
6793             {
6794               (*_bfd_error_handler)
6795                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6796                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6797               break;
6798             }
6799           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6800             {
6801               Elf64_Internal_RegInfo intreg;
6802
6803               bfd_mips_elf64_swap_reginfo_in
6804                 (abfd,
6805                  ((Elf64_External_RegInfo *)
6806                   (l + sizeof (Elf_External_Options))),
6807                  &intreg);
6808               elf_gp (abfd) = intreg.ri_gp_value;
6809             }
6810           else if (intopt.kind == ODK_REGINFO)
6811             {
6812               Elf32_RegInfo intreg;
6813
6814               bfd_mips_elf32_swap_reginfo_in
6815                 (abfd,
6816                  ((Elf32_External_RegInfo *)
6817                   (l + sizeof (Elf_External_Options))),
6818                  &intreg);
6819               elf_gp (abfd) = intreg.ri_gp_value;
6820             }
6821           l += intopt.size;
6822         }
6823       free (contents);
6824     }
6825
6826   return TRUE;
6827 }
6828
6829 /* Set the correct type for a MIPS ELF section.  We do this by the
6830    section name, which is a hack, but ought to work.  This routine is
6831    used by both the 32-bit and the 64-bit ABI.  */
6832
6833 bfd_boolean
6834 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
6835 {
6836   const char *name = bfd_get_section_name (abfd, sec);
6837
6838   if (strcmp (name, ".liblist") == 0)
6839     {
6840       hdr->sh_type = SHT_MIPS_LIBLIST;
6841       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
6842       /* The sh_link field is set in final_write_processing.  */
6843     }
6844   else if (strcmp (name, ".conflict") == 0)
6845     hdr->sh_type = SHT_MIPS_CONFLICT;
6846   else if (CONST_STRNEQ (name, ".gptab."))
6847     {
6848       hdr->sh_type = SHT_MIPS_GPTAB;
6849       hdr->sh_entsize = sizeof (Elf32_External_gptab);
6850       /* The sh_info field is set in final_write_processing.  */
6851     }
6852   else if (strcmp (name, ".ucode") == 0)
6853     hdr->sh_type = SHT_MIPS_UCODE;
6854   else if (strcmp (name, ".mdebug") == 0)
6855     {
6856       hdr->sh_type = SHT_MIPS_DEBUG;
6857       /* In a shared object on IRIX 5.3, the .mdebug section has an
6858          entsize of 0.  FIXME: Does this matter?  */
6859       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6860         hdr->sh_entsize = 0;
6861       else
6862         hdr->sh_entsize = 1;
6863     }
6864   else if (strcmp (name, ".reginfo") == 0)
6865     {
6866       hdr->sh_type = SHT_MIPS_REGINFO;
6867       /* In a shared object on IRIX 5.3, the .reginfo section has an
6868          entsize of 0x18.  FIXME: Does this matter?  */
6869       if (SGI_COMPAT (abfd))
6870         {
6871           if ((abfd->flags & DYNAMIC) != 0)
6872             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6873           else
6874             hdr->sh_entsize = 1;
6875         }
6876       else
6877         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6878     }
6879   else if (SGI_COMPAT (abfd)
6880            && (strcmp (name, ".hash") == 0
6881                || strcmp (name, ".dynamic") == 0
6882                || strcmp (name, ".dynstr") == 0))
6883     {
6884       if (SGI_COMPAT (abfd))
6885         hdr->sh_entsize = 0;
6886 #if 0
6887       /* This isn't how the IRIX6 linker behaves.  */
6888       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6889 #endif
6890     }
6891   else if (strcmp (name, ".got") == 0
6892            || strcmp (name, ".srdata") == 0
6893            || strcmp (name, ".sdata") == 0
6894            || strcmp (name, ".sbss") == 0
6895            || strcmp (name, ".lit4") == 0
6896            || strcmp (name, ".lit8") == 0)
6897     hdr->sh_flags |= SHF_MIPS_GPREL;
6898   else if (strcmp (name, ".MIPS.interfaces") == 0)
6899     {
6900       hdr->sh_type = SHT_MIPS_IFACE;
6901       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6902     }
6903   else if (CONST_STRNEQ (name, ".MIPS.content"))
6904     {
6905       hdr->sh_type = SHT_MIPS_CONTENT;
6906       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6907       /* The sh_info field is set in final_write_processing.  */
6908     }
6909   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6910     {
6911       hdr->sh_type = SHT_MIPS_OPTIONS;
6912       hdr->sh_entsize = 1;
6913       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6914     }
6915   else if (CONST_STRNEQ (name, ".debug_")
6916            || CONST_STRNEQ (name, ".zdebug_"))
6917     {
6918       hdr->sh_type = SHT_MIPS_DWARF;
6919
6920       /* Irix facilities such as libexc expect a single .debug_frame
6921          per executable, the system ones have NOSTRIP set and the linker
6922          doesn't merge sections with different flags so ...  */
6923       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
6924         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6925     }
6926   else if (strcmp (name, ".MIPS.symlib") == 0)
6927     {
6928       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
6929       /* The sh_link and sh_info fields are set in
6930          final_write_processing.  */
6931     }
6932   else if (CONST_STRNEQ (name, ".MIPS.events")
6933            || CONST_STRNEQ (name, ".MIPS.post_rel"))
6934     {
6935       hdr->sh_type = SHT_MIPS_EVENTS;
6936       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6937       /* The sh_link field is set in final_write_processing.  */
6938     }
6939   else if (strcmp (name, ".msym") == 0)
6940     {
6941       hdr->sh_type = SHT_MIPS_MSYM;
6942       hdr->sh_flags |= SHF_ALLOC;
6943       hdr->sh_entsize = 8;
6944     }
6945
6946   /* The generic elf_fake_sections will set up REL_HDR using the default
6947    kind of relocations.  We used to set up a second header for the
6948    non-default kind of relocations here, but only NewABI would use
6949    these, and the IRIX ld doesn't like resulting empty RELA sections.
6950    Thus we create those header only on demand now.  */
6951
6952   return TRUE;
6953 }
6954
6955 /* Given a BFD section, try to locate the corresponding ELF section
6956    index.  This is used by both the 32-bit and the 64-bit ABI.
6957    Actually, it's not clear to me that the 64-bit ABI supports these,
6958    but for non-PIC objects we will certainly want support for at least
6959    the .scommon section.  */
6960
6961 bfd_boolean
6962 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
6963                                         asection *sec, int *retval)
6964 {
6965   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
6966     {
6967       *retval = SHN_MIPS_SCOMMON;
6968       return TRUE;
6969     }
6970   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
6971     {
6972       *retval = SHN_MIPS_ACOMMON;
6973       return TRUE;
6974     }
6975   return FALSE;
6976 }
6977 \f
6978 /* Hook called by the linker routine which adds symbols from an object
6979    file.  We must handle the special MIPS section numbers here.  */
6980
6981 bfd_boolean
6982 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
6983                                Elf_Internal_Sym *sym, const char **namep,
6984                                flagword *flagsp ATTRIBUTE_UNUSED,
6985                                asection **secp, bfd_vma *valp)
6986 {
6987   if (SGI_COMPAT (abfd)
6988       && (abfd->flags & DYNAMIC) != 0
6989       && strcmp (*namep, "_rld_new_interface") == 0)
6990     {
6991       /* Skip IRIX5 rld entry name.  */
6992       *namep = NULL;
6993       return TRUE;
6994     }
6995
6996   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
6997      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
6998      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
6999      a magic symbol resolved by the linker, we ignore this bogus definition
7000      of _gp_disp.  New ABI objects do not suffer from this problem so this
7001      is not done for them. */
7002   if (!NEWABI_P(abfd)
7003       && (sym->st_shndx == SHN_ABS)
7004       && (strcmp (*namep, "_gp_disp") == 0))
7005     {
7006       *namep = NULL;
7007       return TRUE;
7008     }
7009
7010   switch (sym->st_shndx)
7011     {
7012     case SHN_COMMON:
7013       /* Common symbols less than the GP size are automatically
7014          treated as SHN_MIPS_SCOMMON symbols.  */
7015       if (sym->st_size > elf_gp_size (abfd)
7016           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7017           || IRIX_COMPAT (abfd) == ict_irix6)
7018         break;
7019       /* Fall through.  */
7020     case SHN_MIPS_SCOMMON:
7021       *secp = bfd_make_section_old_way (abfd, ".scommon");
7022       (*secp)->flags |= SEC_IS_COMMON;
7023       *valp = sym->st_size;
7024       break;
7025
7026     case SHN_MIPS_TEXT:
7027       /* This section is used in a shared object.  */
7028       if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7029         {
7030           asymbol *elf_text_symbol;
7031           asection *elf_text_section;
7032           bfd_size_type amt = sizeof (asection);
7033
7034           elf_text_section = bfd_zalloc (abfd, amt);
7035           if (elf_text_section == NULL)
7036             return FALSE;
7037
7038           amt = sizeof (asymbol);
7039           elf_text_symbol = bfd_zalloc (abfd, amt);
7040           if (elf_text_symbol == NULL)
7041             return FALSE;
7042
7043           /* Initialize the section.  */
7044
7045           mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7046           mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7047
7048           elf_text_section->symbol = elf_text_symbol;
7049           elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7050
7051           elf_text_section->name = ".text";
7052           elf_text_section->flags = SEC_NO_FLAGS;
7053           elf_text_section->output_section = NULL;
7054           elf_text_section->owner = abfd;
7055           elf_text_symbol->name = ".text";
7056           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7057           elf_text_symbol->section = elf_text_section;
7058         }
7059       /* This code used to do *secp = bfd_und_section_ptr if
7060          info->shared.  I don't know why, and that doesn't make sense,
7061          so I took it out.  */
7062       *secp = mips_elf_tdata (abfd)->elf_text_section;
7063       break;
7064
7065     case SHN_MIPS_ACOMMON:
7066       /* Fall through. XXX Can we treat this as allocated data?  */
7067     case SHN_MIPS_DATA:
7068       /* This section is used in a shared object.  */
7069       if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7070         {
7071           asymbol *elf_data_symbol;
7072           asection *elf_data_section;
7073           bfd_size_type amt = sizeof (asection);
7074
7075           elf_data_section = bfd_zalloc (abfd, amt);
7076           if (elf_data_section == NULL)
7077             return FALSE;
7078
7079           amt = sizeof (asymbol);
7080           elf_data_symbol = bfd_zalloc (abfd, amt);
7081           if (elf_data_symbol == NULL)
7082             return FALSE;
7083
7084           /* Initialize the section.  */
7085
7086           mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7087           mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7088
7089           elf_data_section->symbol = elf_data_symbol;
7090           elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7091
7092           elf_data_section->name = ".data";
7093           elf_data_section->flags = SEC_NO_FLAGS;
7094           elf_data_section->output_section = NULL;
7095           elf_data_section->owner = abfd;
7096           elf_data_symbol->name = ".data";
7097           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7098           elf_data_symbol->section = elf_data_section;
7099         }
7100       /* This code used to do *secp = bfd_und_section_ptr if
7101          info->shared.  I don't know why, and that doesn't make sense,
7102          so I took it out.  */
7103       *secp = mips_elf_tdata (abfd)->elf_data_section;
7104       break;
7105
7106     case SHN_MIPS_SUNDEFINED:
7107       *secp = bfd_und_section_ptr;
7108       break;
7109     }
7110
7111   if (SGI_COMPAT (abfd)
7112       && ! info->shared
7113       && info->output_bfd->xvec == abfd->xvec
7114       && strcmp (*namep, "__rld_obj_head") == 0)
7115     {
7116       struct elf_link_hash_entry *h;
7117       struct bfd_link_hash_entry *bh;
7118
7119       /* Mark __rld_obj_head as dynamic.  */
7120       bh = NULL;
7121       if (! (_bfd_generic_link_add_one_symbol
7122              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7123               get_elf_backend_data (abfd)->collect, &bh)))
7124         return FALSE;
7125
7126       h = (struct elf_link_hash_entry *) bh;
7127       h->non_elf = 0;
7128       h->def_regular = 1;
7129       h->type = STT_OBJECT;
7130
7131       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7132         return FALSE;
7133
7134       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7135       mips_elf_hash_table (info)->rld_symbol = h;
7136     }
7137
7138   /* If this is a mips16 text symbol, add 1 to the value to make it
7139      odd.  This will cause something like .word SYM to come up with
7140      the right value when it is loaded into the PC.  */
7141   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7142     ++*valp;
7143
7144   return TRUE;
7145 }
7146
7147 /* This hook function is called before the linker writes out a global
7148    symbol.  We mark symbols as small common if appropriate.  This is
7149    also where we undo the increment of the value for a mips16 symbol.  */
7150
7151 int
7152 _bfd_mips_elf_link_output_symbol_hook
7153   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7154    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7155    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7156 {
7157   /* If we see a common symbol, which implies a relocatable link, then
7158      if a symbol was small common in an input file, mark it as small
7159      common in the output file.  */
7160   if (sym->st_shndx == SHN_COMMON
7161       && strcmp (input_sec->name, ".scommon") == 0)
7162     sym->st_shndx = SHN_MIPS_SCOMMON;
7163
7164   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7165     sym->st_value &= ~1;
7166
7167   return 1;
7168 }
7169 \f
7170 /* Functions for the dynamic linker.  */
7171
7172 /* Create dynamic sections when linking against a dynamic object.  */
7173
7174 bfd_boolean
7175 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7176 {
7177   struct elf_link_hash_entry *h;
7178   struct bfd_link_hash_entry *bh;
7179   flagword flags;
7180   register asection *s;
7181   const char * const *namep;
7182   struct mips_elf_link_hash_table *htab;
7183
7184   htab = mips_elf_hash_table (info);
7185   BFD_ASSERT (htab != NULL);
7186
7187   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7188            | SEC_LINKER_CREATED | SEC_READONLY);
7189
7190   /* The psABI requires a read-only .dynamic section, but the VxWorks
7191      EABI doesn't.  */
7192   if (!htab->is_vxworks)
7193     {
7194       s = bfd_get_linker_section (abfd, ".dynamic");
7195       if (s != NULL)
7196         {
7197           if (! bfd_set_section_flags (abfd, s, flags))
7198             return FALSE;
7199         }
7200     }
7201
7202   /* We need to create .got section.  */
7203   if (!mips_elf_create_got_section (abfd, info))
7204     return FALSE;
7205
7206   if (! mips_elf_rel_dyn_section (info, TRUE))
7207     return FALSE;
7208
7209   /* Create .stub section.  */
7210   s = bfd_make_section_anyway_with_flags (abfd,
7211                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7212                                           flags | SEC_CODE);
7213   if (s == NULL
7214       || ! bfd_set_section_alignment (abfd, s,
7215                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7216     return FALSE;
7217   htab->sstubs = s;
7218
7219   if (!mips_elf_hash_table (info)->use_rld_obj_head
7220       && !info->shared
7221       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7222     {
7223       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7224                                               flags &~ (flagword) SEC_READONLY);
7225       if (s == NULL
7226           || ! bfd_set_section_alignment (abfd, s,
7227                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7228         return FALSE;
7229     }
7230
7231   /* On IRIX5, we adjust add some additional symbols and change the
7232      alignments of several sections.  There is no ABI documentation
7233      indicating that this is necessary on IRIX6, nor any evidence that
7234      the linker takes such action.  */
7235   if (IRIX_COMPAT (abfd) == ict_irix5)
7236     {
7237       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7238         {
7239           bh = NULL;
7240           if (! (_bfd_generic_link_add_one_symbol
7241                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7242                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7243             return FALSE;
7244
7245           h = (struct elf_link_hash_entry *) bh;
7246           h->non_elf = 0;
7247           h->def_regular = 1;
7248           h->type = STT_SECTION;
7249
7250           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7251             return FALSE;
7252         }
7253
7254       /* We need to create a .compact_rel section.  */
7255       if (SGI_COMPAT (abfd))
7256         {
7257           if (!mips_elf_create_compact_rel_section (abfd, info))
7258             return FALSE;
7259         }
7260
7261       /* Change alignments of some sections.  */
7262       s = bfd_get_linker_section (abfd, ".hash");
7263       if (s != NULL)
7264         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7265       s = bfd_get_linker_section (abfd, ".dynsym");
7266       if (s != NULL)
7267         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7268       s = bfd_get_linker_section (abfd, ".dynstr");
7269       if (s != NULL)
7270         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7271       /* ??? */
7272       s = bfd_get_section_by_name (abfd, ".reginfo");
7273       if (s != NULL)
7274         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7275       s = bfd_get_linker_section (abfd, ".dynamic");
7276       if (s != NULL)
7277         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7278     }
7279
7280   if (!info->shared)
7281     {
7282       const char *name;
7283
7284       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7285       bh = NULL;
7286       if (!(_bfd_generic_link_add_one_symbol
7287             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7288              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7289         return FALSE;
7290
7291       h = (struct elf_link_hash_entry *) bh;
7292       h->non_elf = 0;
7293       h->def_regular = 1;
7294       h->type = STT_SECTION;
7295
7296       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7297         return FALSE;
7298
7299       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7300         {
7301           /* __rld_map is a four byte word located in the .data section
7302              and is filled in by the rtld to contain a pointer to
7303              the _r_debug structure. Its symbol value will be set in
7304              _bfd_mips_elf_finish_dynamic_symbol.  */
7305           s = bfd_get_linker_section (abfd, ".rld_map");
7306           BFD_ASSERT (s != NULL);
7307
7308           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7309           bh = NULL;
7310           if (!(_bfd_generic_link_add_one_symbol
7311                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7312                  get_elf_backend_data (abfd)->collect, &bh)))
7313             return FALSE;
7314
7315           h = (struct elf_link_hash_entry *) bh;
7316           h->non_elf = 0;
7317           h->def_regular = 1;
7318           h->type = STT_OBJECT;
7319
7320           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7321             return FALSE;
7322           mips_elf_hash_table (info)->rld_symbol = h;
7323         }
7324     }
7325
7326   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7327      Also create the _PROCEDURE_LINKAGE_TABLE symbol.  */
7328   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7329     return FALSE;
7330
7331   /* Cache the sections created above.  */
7332   htab->splt = bfd_get_linker_section (abfd, ".plt");
7333   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7334   if (htab->is_vxworks)
7335     {
7336       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7337       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7338     }
7339   else
7340     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7341   if (!htab->sdynbss
7342       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7343       || !htab->srelplt
7344       || !htab->splt)
7345     abort ();
7346
7347   if (htab->is_vxworks)
7348     {
7349       /* Do the usual VxWorks handling.  */
7350       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7351         return FALSE;
7352
7353       /* Work out the PLT sizes.  */
7354       if (info->shared)
7355         {
7356           htab->plt_header_size
7357             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7358           htab->plt_entry_size
7359             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7360         }
7361       else
7362         {
7363           htab->plt_header_size
7364             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7365           htab->plt_entry_size
7366             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7367         }
7368     }
7369   else if (!info->shared)
7370     {
7371       /* All variants of the plt0 entry are the same size.  */
7372       htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7373       htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7374     }
7375
7376   return TRUE;
7377 }
7378 \f
7379 /* Return true if relocation REL against section SEC is a REL rather than
7380    RELA relocation.  RELOCS is the first relocation in the section and
7381    ABFD is the bfd that contains SEC.  */
7382
7383 static bfd_boolean
7384 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7385                            const Elf_Internal_Rela *relocs,
7386                            const Elf_Internal_Rela *rel)
7387 {
7388   Elf_Internal_Shdr *rel_hdr;
7389   const struct elf_backend_data *bed;
7390
7391   /* To determine which flavor of relocation this is, we depend on the
7392      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7393   rel_hdr = elf_section_data (sec)->rel.hdr;
7394   if (rel_hdr == NULL)
7395     return FALSE;
7396   bed = get_elf_backend_data (abfd);
7397   return ((size_t) (rel - relocs)
7398           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7399 }
7400
7401 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7402    HOWTO is the relocation's howto and CONTENTS points to the contents
7403    of the section that REL is against.  */
7404
7405 static bfd_vma
7406 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7407                           reloc_howto_type *howto, bfd_byte *contents)
7408 {
7409   bfd_byte *location;
7410   unsigned int r_type;
7411   bfd_vma addend;
7412
7413   r_type = ELF_R_TYPE (abfd, rel->r_info);
7414   location = contents + rel->r_offset;
7415
7416   /* Get the addend, which is stored in the input file.  */
7417   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7418   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7419   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7420
7421   return addend & howto->src_mask;
7422 }
7423
7424 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7425    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7426    and update *ADDEND with the final addend.  Return true on success
7427    or false if the LO16 could not be found.  RELEND is the exclusive
7428    upper bound on the relocations for REL's section.  */
7429
7430 static bfd_boolean
7431 mips_elf_add_lo16_rel_addend (bfd *abfd,
7432                               const Elf_Internal_Rela *rel,
7433                               const Elf_Internal_Rela *relend,
7434                               bfd_byte *contents, bfd_vma *addend)
7435 {
7436   unsigned int r_type, lo16_type;
7437   const Elf_Internal_Rela *lo16_relocation;
7438   reloc_howto_type *lo16_howto;
7439   bfd_vma l;
7440
7441   r_type = ELF_R_TYPE (abfd, rel->r_info);
7442   if (mips16_reloc_p (r_type))
7443     lo16_type = R_MIPS16_LO16;
7444   else if (micromips_reloc_p (r_type))
7445     lo16_type = R_MICROMIPS_LO16;
7446   else
7447     lo16_type = R_MIPS_LO16;
7448
7449   /* The combined value is the sum of the HI16 addend, left-shifted by
7450      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7451      code does a `lui' of the HI16 value, and then an `addiu' of the
7452      LO16 value.)
7453
7454      Scan ahead to find a matching LO16 relocation.
7455
7456      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7457      be immediately following.  However, for the IRIX6 ABI, the next
7458      relocation may be a composed relocation consisting of several
7459      relocations for the same address.  In that case, the R_MIPS_LO16
7460      relocation may occur as one of these.  We permit a similar
7461      extension in general, as that is useful for GCC.
7462
7463      In some cases GCC dead code elimination removes the LO16 but keeps
7464      the corresponding HI16.  This is strictly speaking a violation of
7465      the ABI but not immediately harmful.  */
7466   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7467   if (lo16_relocation == NULL)
7468     return FALSE;
7469
7470   /* Obtain the addend kept there.  */
7471   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7472   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7473
7474   l <<= lo16_howto->rightshift;
7475   l = _bfd_mips_elf_sign_extend (l, 16);
7476
7477   *addend <<= 16;
7478   *addend += l;
7479   return TRUE;
7480 }
7481
7482 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7483    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7484    already holds the contents if it is nonull on entry.  */
7485
7486 static bfd_boolean
7487 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7488 {
7489   if (*contents)
7490     return TRUE;
7491
7492   /* Get cached copy if it exists.  */
7493   if (elf_section_data (sec)->this_hdr.contents != NULL)
7494     {
7495       *contents = elf_section_data (sec)->this_hdr.contents;
7496       return TRUE;
7497     }
7498
7499   return bfd_malloc_and_get_section (abfd, sec, contents);
7500 }
7501
7502 /* Look through the relocs for a section during the first phase, and
7503    allocate space in the global offset table.  */
7504
7505 bfd_boolean
7506 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7507                             asection *sec, const Elf_Internal_Rela *relocs)
7508 {
7509   const char *name;
7510   bfd *dynobj;
7511   Elf_Internal_Shdr *symtab_hdr;
7512   struct elf_link_hash_entry **sym_hashes;
7513   size_t extsymoff;
7514   const Elf_Internal_Rela *rel;
7515   const Elf_Internal_Rela *rel_end;
7516   asection *sreloc;
7517   const struct elf_backend_data *bed;
7518   struct mips_elf_link_hash_table *htab;
7519   bfd_byte *contents;
7520   bfd_vma addend;
7521   reloc_howto_type *howto;
7522
7523   if (info->relocatable)
7524     return TRUE;
7525
7526   htab = mips_elf_hash_table (info);
7527   BFD_ASSERT (htab != NULL);
7528
7529   dynobj = elf_hash_table (info)->dynobj;
7530   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7531   sym_hashes = elf_sym_hashes (abfd);
7532   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7533
7534   bed = get_elf_backend_data (abfd);
7535   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7536
7537   /* Check for the mips16 stub sections.  */
7538
7539   name = bfd_get_section_name (abfd, sec);
7540   if (FN_STUB_P (name))
7541     {
7542       unsigned long r_symndx;
7543
7544       /* Look at the relocation information to figure out which symbol
7545          this is for.  */
7546
7547       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7548       if (r_symndx == 0)
7549         {
7550           (*_bfd_error_handler)
7551             (_("%B: Warning: cannot determine the target function for"
7552                " stub section `%s'"),
7553              abfd, name);
7554           bfd_set_error (bfd_error_bad_value);
7555           return FALSE;
7556         }
7557
7558       if (r_symndx < extsymoff
7559           || sym_hashes[r_symndx - extsymoff] == NULL)
7560         {
7561           asection *o;
7562
7563           /* This stub is for a local symbol.  This stub will only be
7564              needed if there is some relocation in this BFD, other
7565              than a 16 bit function call, which refers to this symbol.  */
7566           for (o = abfd->sections; o != NULL; o = o->next)
7567             {
7568               Elf_Internal_Rela *sec_relocs;
7569               const Elf_Internal_Rela *r, *rend;
7570
7571               /* We can ignore stub sections when looking for relocs.  */
7572               if ((o->flags & SEC_RELOC) == 0
7573                   || o->reloc_count == 0
7574                   || section_allows_mips16_refs_p (o))
7575                 continue;
7576
7577               sec_relocs
7578                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7579                                              info->keep_memory);
7580               if (sec_relocs == NULL)
7581                 return FALSE;
7582
7583               rend = sec_relocs + o->reloc_count;
7584               for (r = sec_relocs; r < rend; r++)
7585                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7586                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7587                   break;
7588
7589               if (elf_section_data (o)->relocs != sec_relocs)
7590                 free (sec_relocs);
7591
7592               if (r < rend)
7593                 break;
7594             }
7595
7596           if (o == NULL)
7597             {
7598               /* There is no non-call reloc for this stub, so we do
7599                  not need it.  Since this function is called before
7600                  the linker maps input sections to output sections, we
7601                  can easily discard it by setting the SEC_EXCLUDE
7602                  flag.  */
7603               sec->flags |= SEC_EXCLUDE;
7604               return TRUE;
7605             }
7606
7607           /* Record this stub in an array of local symbol stubs for
7608              this BFD.  */
7609           if (mips_elf_tdata (abfd)->local_stubs == NULL)
7610             {
7611               unsigned long symcount;
7612               asection **n;
7613               bfd_size_type amt;
7614
7615               if (elf_bad_symtab (abfd))
7616                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7617               else
7618                 symcount = symtab_hdr->sh_info;
7619               amt = symcount * sizeof (asection *);
7620               n = bfd_zalloc (abfd, amt);
7621               if (n == NULL)
7622                 return FALSE;
7623               mips_elf_tdata (abfd)->local_stubs = n;
7624             }
7625
7626           sec->flags |= SEC_KEEP;
7627           mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7628
7629           /* We don't need to set mips16_stubs_seen in this case.
7630              That flag is used to see whether we need to look through
7631              the global symbol table for stubs.  We don't need to set
7632              it here, because we just have a local stub.  */
7633         }
7634       else
7635         {
7636           struct mips_elf_link_hash_entry *h;
7637
7638           h = ((struct mips_elf_link_hash_entry *)
7639                sym_hashes[r_symndx - extsymoff]);
7640
7641           while (h->root.root.type == bfd_link_hash_indirect
7642                  || h->root.root.type == bfd_link_hash_warning)
7643             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7644
7645           /* H is the symbol this stub is for.  */
7646
7647           /* If we already have an appropriate stub for this function, we
7648              don't need another one, so we can discard this one.  Since
7649              this function is called before the linker maps input sections
7650              to output sections, we can easily discard it by setting the
7651              SEC_EXCLUDE flag.  */
7652           if (h->fn_stub != NULL)
7653             {
7654               sec->flags |= SEC_EXCLUDE;
7655               return TRUE;
7656             }
7657
7658           sec->flags |= SEC_KEEP;
7659           h->fn_stub = sec;
7660           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7661         }
7662     }
7663   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
7664     {
7665       unsigned long r_symndx;
7666       struct mips_elf_link_hash_entry *h;
7667       asection **loc;
7668
7669       /* Look at the relocation information to figure out which symbol
7670          this is for.  */
7671
7672       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7673       if (r_symndx == 0)
7674         {
7675           (*_bfd_error_handler)
7676             (_("%B: Warning: cannot determine the target function for"
7677                " stub section `%s'"),
7678              abfd, name);
7679           bfd_set_error (bfd_error_bad_value);
7680           return FALSE;
7681         }
7682
7683       if (r_symndx < extsymoff
7684           || sym_hashes[r_symndx - extsymoff] == NULL)
7685         {
7686           asection *o;
7687
7688           /* This stub is for a local symbol.  This stub will only be
7689              needed if there is some relocation (R_MIPS16_26) in this BFD
7690              that refers to this symbol.  */
7691           for (o = abfd->sections; o != NULL; o = o->next)
7692             {
7693               Elf_Internal_Rela *sec_relocs;
7694               const Elf_Internal_Rela *r, *rend;
7695
7696               /* We can ignore stub sections when looking for relocs.  */
7697               if ((o->flags & SEC_RELOC) == 0
7698                   || o->reloc_count == 0
7699                   || section_allows_mips16_refs_p (o))
7700                 continue;
7701
7702               sec_relocs
7703                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7704                                              info->keep_memory);
7705               if (sec_relocs == NULL)
7706                 return FALSE;
7707
7708               rend = sec_relocs + o->reloc_count;
7709               for (r = sec_relocs; r < rend; r++)
7710                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7711                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7712                     break;
7713
7714               if (elf_section_data (o)->relocs != sec_relocs)
7715                 free (sec_relocs);
7716
7717               if (r < rend)
7718                 break;
7719             }
7720
7721           if (o == NULL)
7722             {
7723               /* There is no non-call reloc for this stub, so we do
7724                  not need it.  Since this function is called before
7725                  the linker maps input sections to output sections, we
7726                  can easily discard it by setting the SEC_EXCLUDE
7727                  flag.  */
7728               sec->flags |= SEC_EXCLUDE;
7729               return TRUE;
7730             }
7731
7732           /* Record this stub in an array of local symbol call_stubs for
7733              this BFD.  */
7734           if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
7735             {
7736               unsigned long symcount;
7737               asection **n;
7738               bfd_size_type amt;
7739
7740               if (elf_bad_symtab (abfd))
7741                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7742               else
7743                 symcount = symtab_hdr->sh_info;
7744               amt = symcount * sizeof (asection *);
7745               n = bfd_zalloc (abfd, amt);
7746               if (n == NULL)
7747                 return FALSE;
7748               mips_elf_tdata (abfd)->local_call_stubs = n;
7749             }
7750
7751           sec->flags |= SEC_KEEP;
7752           mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
7753
7754           /* We don't need to set mips16_stubs_seen in this case.
7755              That flag is used to see whether we need to look through
7756              the global symbol table for stubs.  We don't need to set
7757              it here, because we just have a local stub.  */
7758         }
7759       else
7760         {
7761           h = ((struct mips_elf_link_hash_entry *)
7762                sym_hashes[r_symndx - extsymoff]);
7763
7764           /* H is the symbol this stub is for.  */
7765
7766           if (CALL_FP_STUB_P (name))
7767             loc = &h->call_fp_stub;
7768           else
7769             loc = &h->call_stub;
7770
7771           /* If we already have an appropriate stub for this function, we
7772              don't need another one, so we can discard this one.  Since
7773              this function is called before the linker maps input sections
7774              to output sections, we can easily discard it by setting the
7775              SEC_EXCLUDE flag.  */
7776           if (*loc != NULL)
7777             {
7778               sec->flags |= SEC_EXCLUDE;
7779               return TRUE;
7780             }
7781
7782           sec->flags |= SEC_KEEP;
7783           *loc = sec;
7784           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7785         }
7786     }
7787
7788   sreloc = NULL;
7789   contents = NULL;
7790   for (rel = relocs; rel < rel_end; ++rel)
7791     {
7792       unsigned long r_symndx;
7793       unsigned int r_type;
7794       struct elf_link_hash_entry *h;
7795       bfd_boolean can_make_dynamic_p;
7796
7797       r_symndx = ELF_R_SYM (abfd, rel->r_info);
7798       r_type = ELF_R_TYPE (abfd, rel->r_info);
7799
7800       if (r_symndx < extsymoff)
7801         h = NULL;
7802       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7803         {
7804           (*_bfd_error_handler)
7805             (_("%B: Malformed reloc detected for section %s"),
7806              abfd, name);
7807           bfd_set_error (bfd_error_bad_value);
7808           return FALSE;
7809         }
7810       else
7811         {
7812           h = sym_hashes[r_symndx - extsymoff];
7813           while (h != NULL
7814                  && (h->root.type == bfd_link_hash_indirect
7815                      || h->root.type == bfd_link_hash_warning))
7816             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7817         }
7818
7819       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7820          relocation into a dynamic one.  */
7821       can_make_dynamic_p = FALSE;
7822       switch (r_type)
7823         {
7824         case R_MIPS_GOT16:
7825         case R_MIPS_CALL16:
7826         case R_MIPS_CALL_HI16:
7827         case R_MIPS_CALL_LO16:
7828         case R_MIPS_GOT_HI16:
7829         case R_MIPS_GOT_LO16:
7830         case R_MIPS_GOT_PAGE:
7831         case R_MIPS_GOT_OFST:
7832         case R_MIPS_GOT_DISP:
7833         case R_MIPS_TLS_GOTTPREL:
7834         case R_MIPS_TLS_GD:
7835         case R_MIPS_TLS_LDM:
7836         case R_MIPS16_GOT16:
7837         case R_MIPS16_CALL16:
7838         case R_MIPS16_TLS_GOTTPREL:
7839         case R_MIPS16_TLS_GD:
7840         case R_MIPS16_TLS_LDM:
7841         case R_MICROMIPS_GOT16:
7842         case R_MICROMIPS_CALL16:
7843         case R_MICROMIPS_CALL_HI16:
7844         case R_MICROMIPS_CALL_LO16:
7845         case R_MICROMIPS_GOT_HI16:
7846         case R_MICROMIPS_GOT_LO16:
7847         case R_MICROMIPS_GOT_PAGE:
7848         case R_MICROMIPS_GOT_OFST:
7849         case R_MICROMIPS_GOT_DISP:
7850         case R_MICROMIPS_TLS_GOTTPREL:
7851         case R_MICROMIPS_TLS_GD:
7852         case R_MICROMIPS_TLS_LDM:
7853           if (dynobj == NULL)
7854             elf_hash_table (info)->dynobj = dynobj = abfd;
7855           if (!mips_elf_create_got_section (dynobj, info))
7856             return FALSE;
7857           if (htab->is_vxworks && !info->shared)
7858             {
7859               (*_bfd_error_handler)
7860                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
7861                  abfd, (unsigned long) rel->r_offset);
7862               bfd_set_error (bfd_error_bad_value);
7863               return FALSE;
7864             }
7865           break;
7866
7867           /* This is just a hint; it can safely be ignored.  Don't set
7868              has_static_relocs for the corresponding symbol.  */
7869         case R_MIPS_JALR:
7870         case R_MICROMIPS_JALR:
7871           break;
7872
7873         case R_MIPS_32:
7874         case R_MIPS_REL32:
7875         case R_MIPS_64:
7876           /* In VxWorks executables, references to external symbols
7877              must be handled using copy relocs or PLT entries; it is not
7878              possible to convert this relocation into a dynamic one.
7879
7880              For executables that use PLTs and copy-relocs, we have a
7881              choice between converting the relocation into a dynamic
7882              one or using copy relocations or PLT entries.  It is
7883              usually better to do the former, unless the relocation is
7884              against a read-only section.  */
7885           if ((info->shared
7886                || (h != NULL
7887                    && !htab->is_vxworks
7888                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7889                    && !(!info->nocopyreloc
7890                         && !PIC_OBJECT_P (abfd)
7891                         && MIPS_ELF_READONLY_SECTION (sec))))
7892               && (sec->flags & SEC_ALLOC) != 0)
7893             {
7894               can_make_dynamic_p = TRUE;
7895               if (dynobj == NULL)
7896                 elf_hash_table (info)->dynobj = dynobj = abfd;
7897               break;
7898             }
7899           /* For sections that are not SEC_ALLOC a copy reloc would be
7900              output if possible (implying questionable semantics for
7901              read-only data objects) or otherwise the final link would
7902              fail as ld.so will not process them and could not therefore
7903              handle any outstanding dynamic relocations.
7904
7905              For such sections that are also SEC_DEBUGGING, we can avoid
7906              these problems by simply ignoring any relocs as these
7907              sections have a predefined use and we know it is safe to do
7908              so.
7909
7910              This is needed in cases such as a global symbol definition
7911              in a shared library causing a common symbol from an object
7912              file to be converted to an undefined reference.  If that
7913              happens, then all the relocations against this symbol from
7914              SEC_DEBUGGING sections in the object file will resolve to
7915              nil.  */
7916           if ((sec->flags & SEC_DEBUGGING) != 0)
7917             break;
7918           /* Fall through.  */
7919
7920         default:
7921           /* Most static relocations require pointer equality, except
7922              for branches.  */
7923           if (h)
7924             h->pointer_equality_needed = TRUE;
7925           /* Fall through.  */
7926
7927         case R_MIPS_26:
7928         case R_MIPS_PC16:
7929         case R_MIPS16_26:
7930         case R_MICROMIPS_26_S1:
7931         case R_MICROMIPS_PC7_S1:
7932         case R_MICROMIPS_PC10_S1:
7933         case R_MICROMIPS_PC16_S1:
7934         case R_MICROMIPS_PC23_S2:
7935           if (h)
7936             ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
7937           break;
7938         }
7939
7940       if (h)
7941         {
7942           /* Relocations against the special VxWorks __GOTT_BASE__ and
7943              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
7944              room for them in .rela.dyn.  */
7945           if (is_gott_symbol (info, h))
7946             {
7947               if (sreloc == NULL)
7948                 {
7949                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
7950                   if (sreloc == NULL)
7951                     return FALSE;
7952                 }
7953               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
7954               if (MIPS_ELF_READONLY_SECTION (sec))
7955                 /* We tell the dynamic linker that there are
7956                    relocations against the text segment.  */
7957                 info->flags |= DF_TEXTREL;
7958             }
7959         }
7960       else if (call_lo16_reloc_p (r_type)
7961                || got_lo16_reloc_p (r_type)
7962                || got_disp_reloc_p (r_type)
7963                || (got16_reloc_p (r_type) && htab->is_vxworks))
7964         {
7965           /* We may need a local GOT entry for this relocation.  We
7966              don't count R_MIPS_GOT_PAGE because we can estimate the
7967              maximum number of pages needed by looking at the size of
7968              the segment.  Similar comments apply to R_MIPS*_GOT16 and
7969              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
7970              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
7971              R_MIPS_CALL_HI16 because these are always followed by an
7972              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
7973           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
7974                                                  rel->r_addend, info, r_type))
7975             return FALSE;
7976         }
7977
7978       if (h != NULL
7979           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
7980                                                   ELF_ST_IS_MIPS16 (h->other)))
7981         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
7982
7983       switch (r_type)
7984         {
7985         case R_MIPS_CALL16:
7986         case R_MIPS16_CALL16:
7987         case R_MICROMIPS_CALL16:
7988           if (h == NULL)
7989             {
7990               (*_bfd_error_handler)
7991                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
7992                  abfd, (unsigned long) rel->r_offset);
7993               bfd_set_error (bfd_error_bad_value);
7994               return FALSE;
7995             }
7996           /* Fall through.  */
7997
7998         case R_MIPS_CALL_HI16:
7999         case R_MIPS_CALL_LO16:
8000         case R_MICROMIPS_CALL_HI16:
8001         case R_MICROMIPS_CALL_LO16:
8002           if (h != NULL)
8003             {
8004               /* Make sure there is room in the regular GOT to hold the
8005                  function's address.  We may eliminate it in favour of
8006                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8007               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8008                                                       r_type))
8009                 return FALSE;
8010
8011               /* We need a stub, not a plt entry for the undefined
8012                  function.  But we record it as if it needs plt.  See
8013                  _bfd_elf_adjust_dynamic_symbol.  */
8014               h->needs_plt = 1;
8015               h->type = STT_FUNC;
8016             }
8017           break;
8018
8019         case R_MIPS_GOT_PAGE:
8020         case R_MICROMIPS_GOT_PAGE:
8021         case R_MIPS16_GOT16:
8022         case R_MIPS_GOT16:
8023         case R_MIPS_GOT_HI16:
8024         case R_MIPS_GOT_LO16:
8025         case R_MICROMIPS_GOT16:
8026         case R_MICROMIPS_GOT_HI16:
8027         case R_MICROMIPS_GOT_LO16:
8028           if (!h || got_page_reloc_p (r_type))
8029             {
8030               /* This relocation needs (or may need, if h != NULL) a
8031                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8032                  know for sure until we know whether the symbol is
8033                  preemptible.  */
8034               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8035                 {
8036                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8037                     return FALSE;
8038                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8039                   addend = mips_elf_read_rel_addend (abfd, rel,
8040                                                      howto, contents);
8041                   if (got16_reloc_p (r_type))
8042                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8043                                                   contents, &addend);
8044                   else
8045                     addend <<= howto->rightshift;
8046                 }
8047               else
8048                 addend = rel->r_addend;
8049               if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8050                                                  h, addend))
8051                 return FALSE;
8052
8053               if (h)
8054                 {
8055                   struct mips_elf_link_hash_entry *hmips =
8056                     (struct mips_elf_link_hash_entry *) h;
8057
8058                   /* This symbol is definitely not overridable.  */
8059                   if (hmips->root.def_regular
8060                       && ! (info->shared && ! info->symbolic
8061                             && ! hmips->root.forced_local))
8062                     h = NULL;
8063                 }
8064             }
8065           /* If this is a global, overridable symbol, GOT_PAGE will
8066              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8067           /* Fall through.  */
8068
8069         case R_MIPS_GOT_DISP:
8070         case R_MICROMIPS_GOT_DISP:
8071           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8072                                                        FALSE, r_type))
8073             return FALSE;
8074           break;
8075
8076         case R_MIPS_TLS_GOTTPREL:
8077         case R_MIPS16_TLS_GOTTPREL:
8078         case R_MICROMIPS_TLS_GOTTPREL:
8079           if (info->shared)
8080             info->flags |= DF_STATIC_TLS;
8081           /* Fall through */
8082
8083         case R_MIPS_TLS_LDM:
8084         case R_MIPS16_TLS_LDM:
8085         case R_MICROMIPS_TLS_LDM:
8086           if (tls_ldm_reloc_p (r_type))
8087             {
8088               r_symndx = STN_UNDEF;
8089               h = NULL;
8090             }
8091           /* Fall through */
8092
8093         case R_MIPS_TLS_GD:
8094         case R_MIPS16_TLS_GD:
8095         case R_MICROMIPS_TLS_GD:
8096           /* This symbol requires a global offset table entry, or two
8097              for TLS GD relocations.  */
8098           if (h != NULL)
8099             {
8100               if (!mips_elf_record_global_got_symbol (h, abfd, info,
8101                                                       FALSE, r_type))
8102                 return FALSE;
8103             }
8104           else
8105             {
8106               if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8107                                                      rel->r_addend,
8108                                                      info, r_type))
8109                 return FALSE;
8110             }
8111           break;
8112
8113         case R_MIPS_32:
8114         case R_MIPS_REL32:
8115         case R_MIPS_64:
8116           /* In VxWorks executables, references to external symbols
8117              are handled using copy relocs or PLT stubs, so there's
8118              no need to add a .rela.dyn entry for this relocation.  */
8119           if (can_make_dynamic_p)
8120             {
8121               if (sreloc == NULL)
8122                 {
8123                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8124                   if (sreloc == NULL)
8125                     return FALSE;
8126                 }
8127               if (info->shared && h == NULL)
8128                 {
8129                   /* When creating a shared object, we must copy these
8130                      reloc types into the output file as R_MIPS_REL32
8131                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8132                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8133                   if (MIPS_ELF_READONLY_SECTION (sec))
8134                     /* We tell the dynamic linker that there are
8135                        relocations against the text segment.  */
8136                     info->flags |= DF_TEXTREL;
8137                 }
8138               else
8139                 {
8140                   struct mips_elf_link_hash_entry *hmips;
8141
8142                   /* For a shared object, we must copy this relocation
8143                      unless the symbol turns out to be undefined and
8144                      weak with non-default visibility, in which case
8145                      it will be left as zero.
8146
8147                      We could elide R_MIPS_REL32 for locally binding symbols
8148                      in shared libraries, but do not yet do so.
8149
8150                      For an executable, we only need to copy this
8151                      reloc if the symbol is defined in a dynamic
8152                      object.  */
8153                   hmips = (struct mips_elf_link_hash_entry *) h;
8154                   ++hmips->possibly_dynamic_relocs;
8155                   if (MIPS_ELF_READONLY_SECTION (sec))
8156                     /* We need it to tell the dynamic linker if there
8157                        are relocations against the text segment.  */
8158                     hmips->readonly_reloc = TRUE;
8159                 }
8160             }
8161
8162           if (SGI_COMPAT (abfd))
8163             mips_elf_hash_table (info)->compact_rel_size +=
8164               sizeof (Elf32_External_crinfo);
8165           break;
8166
8167         case R_MIPS_26:
8168         case R_MIPS_GPREL16:
8169         case R_MIPS_LITERAL:
8170         case R_MIPS_GPREL32:
8171         case R_MICROMIPS_26_S1:
8172         case R_MICROMIPS_GPREL16:
8173         case R_MICROMIPS_LITERAL:
8174         case R_MICROMIPS_GPREL7_S2:
8175           if (SGI_COMPAT (abfd))
8176             mips_elf_hash_table (info)->compact_rel_size +=
8177               sizeof (Elf32_External_crinfo);
8178           break;
8179
8180           /* This relocation describes the C++ object vtable hierarchy.
8181              Reconstruct it for later use during GC.  */
8182         case R_MIPS_GNU_VTINHERIT:
8183           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8184             return FALSE;
8185           break;
8186
8187           /* This relocation describes which C++ vtable entries are actually
8188              used.  Record for later use during GC.  */
8189         case R_MIPS_GNU_VTENTRY:
8190           BFD_ASSERT (h != NULL);
8191           if (h != NULL
8192               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8193             return FALSE;
8194           break;
8195
8196         default:
8197           break;
8198         }
8199
8200       /* We must not create a stub for a symbol that has relocations
8201          related to taking the function's address.  This doesn't apply to
8202          VxWorks, where CALL relocs refer to a .got.plt entry instead of
8203          a normal .got entry.  */
8204       if (!htab->is_vxworks && h != NULL)
8205         switch (r_type)
8206           {
8207           default:
8208             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8209             break;
8210           case R_MIPS16_CALL16:
8211           case R_MIPS_CALL16:
8212           case R_MIPS_CALL_HI16:
8213           case R_MIPS_CALL_LO16:
8214           case R_MIPS_JALR:
8215           case R_MICROMIPS_CALL16:
8216           case R_MICROMIPS_CALL_HI16:
8217           case R_MICROMIPS_CALL_LO16:
8218           case R_MICROMIPS_JALR:
8219             break;
8220           }
8221
8222       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8223          if there is one.  We only need to handle global symbols here;
8224          we decide whether to keep or delete stubs for local symbols
8225          when processing the stub's relocations.  */
8226       if (h != NULL
8227           && !mips16_call_reloc_p (r_type)
8228           && !section_allows_mips16_refs_p (sec))
8229         {
8230           struct mips_elf_link_hash_entry *mh;
8231
8232           mh = (struct mips_elf_link_hash_entry *) h;
8233           mh->need_fn_stub = TRUE;
8234         }
8235
8236       /* Refuse some position-dependent relocations when creating a
8237          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8238          not PIC, but we can create dynamic relocations and the result
8239          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8240          combined with R_MIPS_GOT16.  */
8241       if (info->shared)
8242         {
8243           switch (r_type)
8244             {
8245             case R_MIPS16_HI16:
8246             case R_MIPS_HI16:
8247             case R_MIPS_HIGHER:
8248             case R_MIPS_HIGHEST:
8249             case R_MICROMIPS_HI16:
8250             case R_MICROMIPS_HIGHER:
8251             case R_MICROMIPS_HIGHEST:
8252               /* Don't refuse a high part relocation if it's against
8253                  no symbol (e.g. part of a compound relocation).  */
8254               if (r_symndx == STN_UNDEF)
8255                 break;
8256
8257               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8258                  and has a special meaning.  */
8259               if (!NEWABI_P (abfd) && h != NULL
8260                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8261                 break;
8262
8263               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8264               if (is_gott_symbol (info, h))
8265                 break;
8266
8267               /* FALLTHROUGH */
8268
8269             case R_MIPS16_26:
8270             case R_MIPS_26:
8271             case R_MICROMIPS_26_S1:
8272               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8273               (*_bfd_error_handler)
8274                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8275                  abfd, howto->name,
8276                  (h) ? h->root.root.string : "a local symbol");
8277               bfd_set_error (bfd_error_bad_value);
8278               return FALSE;
8279             default:
8280               break;
8281             }
8282         }
8283     }
8284
8285   return TRUE;
8286 }
8287 \f
8288 bfd_boolean
8289 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8290                          struct bfd_link_info *link_info,
8291                          bfd_boolean *again)
8292 {
8293   Elf_Internal_Rela *internal_relocs;
8294   Elf_Internal_Rela *irel, *irelend;
8295   Elf_Internal_Shdr *symtab_hdr;
8296   bfd_byte *contents = NULL;
8297   size_t extsymoff;
8298   bfd_boolean changed_contents = FALSE;
8299   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8300   Elf_Internal_Sym *isymbuf = NULL;
8301
8302   /* We are not currently changing any sizes, so only one pass.  */
8303   *again = FALSE;
8304
8305   if (link_info->relocatable)
8306     return TRUE;
8307
8308   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8309                                                link_info->keep_memory);
8310   if (internal_relocs == NULL)
8311     return TRUE;
8312
8313   irelend = internal_relocs + sec->reloc_count
8314     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8315   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8316   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8317
8318   for (irel = internal_relocs; irel < irelend; irel++)
8319     {
8320       bfd_vma symval;
8321       bfd_signed_vma sym_offset;
8322       unsigned int r_type;
8323       unsigned long r_symndx;
8324       asection *sym_sec;
8325       unsigned long instruction;
8326
8327       /* Turn jalr into bgezal, and jr into beq, if they're marked
8328          with a JALR relocation, that indicate where they jump to.
8329          This saves some pipeline bubbles.  */
8330       r_type = ELF_R_TYPE (abfd, irel->r_info);
8331       if (r_type != R_MIPS_JALR)
8332         continue;
8333
8334       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8335       /* Compute the address of the jump target.  */
8336       if (r_symndx >= extsymoff)
8337         {
8338           struct mips_elf_link_hash_entry *h
8339             = ((struct mips_elf_link_hash_entry *)
8340                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8341
8342           while (h->root.root.type == bfd_link_hash_indirect
8343                  || h->root.root.type == bfd_link_hash_warning)
8344             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8345
8346           /* If a symbol is undefined, or if it may be overridden,
8347              skip it.  */
8348           if (! ((h->root.root.type == bfd_link_hash_defined
8349                   || h->root.root.type == bfd_link_hash_defweak)
8350                  && h->root.root.u.def.section)
8351               || (link_info->shared && ! link_info->symbolic
8352                   && !h->root.forced_local))
8353             continue;
8354
8355           sym_sec = h->root.root.u.def.section;
8356           if (sym_sec->output_section)
8357             symval = (h->root.root.u.def.value
8358                       + sym_sec->output_section->vma
8359                       + sym_sec->output_offset);
8360           else
8361             symval = h->root.root.u.def.value;
8362         }
8363       else
8364         {
8365           Elf_Internal_Sym *isym;
8366
8367           /* Read this BFD's symbols if we haven't done so already.  */
8368           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8369             {
8370               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8371               if (isymbuf == NULL)
8372                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8373                                                 symtab_hdr->sh_info, 0,
8374                                                 NULL, NULL, NULL);
8375               if (isymbuf == NULL)
8376                 goto relax_return;
8377             }
8378
8379           isym = isymbuf + r_symndx;
8380           if (isym->st_shndx == SHN_UNDEF)
8381             continue;
8382           else if (isym->st_shndx == SHN_ABS)
8383             sym_sec = bfd_abs_section_ptr;
8384           else if (isym->st_shndx == SHN_COMMON)
8385             sym_sec = bfd_com_section_ptr;
8386           else
8387             sym_sec
8388               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8389           symval = isym->st_value
8390             + sym_sec->output_section->vma
8391             + sym_sec->output_offset;
8392         }
8393
8394       /* Compute branch offset, from delay slot of the jump to the
8395          branch target.  */
8396       sym_offset = (symval + irel->r_addend)
8397         - (sec_start + irel->r_offset + 4);
8398
8399       /* Branch offset must be properly aligned.  */
8400       if ((sym_offset & 3) != 0)
8401         continue;
8402
8403       sym_offset >>= 2;
8404
8405       /* Check that it's in range.  */
8406       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8407         continue;
8408
8409       /* Get the section contents if we haven't done so already.  */
8410       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8411         goto relax_return;
8412
8413       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8414
8415       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8416       if ((instruction & 0xfc1fffff) == 0x0000f809)
8417         instruction = 0x04110000;
8418       /* If it was jr <reg>, turn it into b <target>.  */
8419       else if ((instruction & 0xfc1fffff) == 0x00000008)
8420         instruction = 0x10000000;
8421       else
8422         continue;
8423
8424       instruction |= (sym_offset & 0xffff);
8425       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8426       changed_contents = TRUE;
8427     }
8428
8429   if (contents != NULL
8430       && elf_section_data (sec)->this_hdr.contents != contents)
8431     {
8432       if (!changed_contents && !link_info->keep_memory)
8433         free (contents);
8434       else
8435         {
8436           /* Cache the section contents for elf_link_input_bfd.  */
8437           elf_section_data (sec)->this_hdr.contents = contents;
8438         }
8439     }
8440   return TRUE;
8441
8442  relax_return:
8443   if (contents != NULL
8444       && elf_section_data (sec)->this_hdr.contents != contents)
8445     free (contents);
8446   return FALSE;
8447 }
8448 \f
8449 /* Allocate space for global sym dynamic relocs.  */
8450
8451 static bfd_boolean
8452 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8453 {
8454   struct bfd_link_info *info = inf;
8455   bfd *dynobj;
8456   struct mips_elf_link_hash_entry *hmips;
8457   struct mips_elf_link_hash_table *htab;
8458
8459   htab = mips_elf_hash_table (info);
8460   BFD_ASSERT (htab != NULL);
8461
8462   dynobj = elf_hash_table (info)->dynobj;
8463   hmips = (struct mips_elf_link_hash_entry *) h;
8464
8465   /* VxWorks executables are handled elsewhere; we only need to
8466      allocate relocations in shared objects.  */
8467   if (htab->is_vxworks && !info->shared)
8468     return TRUE;
8469
8470   /* Ignore indirect symbols.  All relocations against such symbols
8471      will be redirected to the target symbol.  */
8472   if (h->root.type == bfd_link_hash_indirect)
8473     return TRUE;
8474
8475   /* If this symbol is defined in a dynamic object, or we are creating
8476      a shared library, we will need to copy any R_MIPS_32 or
8477      R_MIPS_REL32 relocs against it into the output file.  */
8478   if (! info->relocatable
8479       && hmips->possibly_dynamic_relocs != 0
8480       && (h->root.type == bfd_link_hash_defweak
8481           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8482           || info->shared))
8483     {
8484       bfd_boolean do_copy = TRUE;
8485
8486       if (h->root.type == bfd_link_hash_undefweak)
8487         {
8488           /* Do not copy relocations for undefined weak symbols with
8489              non-default visibility.  */
8490           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8491             do_copy = FALSE;
8492
8493           /* Make sure undefined weak symbols are output as a dynamic
8494              symbol in PIEs.  */
8495           else if (h->dynindx == -1 && !h->forced_local)
8496             {
8497               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8498                 return FALSE;
8499             }
8500         }
8501
8502       if (do_copy)
8503         {
8504           /* Even though we don't directly need a GOT entry for this symbol,
8505              the SVR4 psABI requires it to have a dynamic symbol table
8506              index greater that DT_MIPS_GOTSYM if there are dynamic
8507              relocations against it.
8508
8509              VxWorks does not enforce the same mapping between the GOT
8510              and the symbol table, so the same requirement does not
8511              apply there.  */
8512           if (!htab->is_vxworks)
8513             {
8514               if (hmips->global_got_area > GGA_RELOC_ONLY)
8515                 hmips->global_got_area = GGA_RELOC_ONLY;
8516               hmips->got_only_for_calls = FALSE;
8517             }
8518
8519           mips_elf_allocate_dynamic_relocations
8520             (dynobj, info, hmips->possibly_dynamic_relocs);
8521           if (hmips->readonly_reloc)
8522             /* We tell the dynamic linker that there are relocations
8523                against the text segment.  */
8524             info->flags |= DF_TEXTREL;
8525         }
8526     }
8527
8528   return TRUE;
8529 }
8530
8531 /* Adjust a symbol defined by a dynamic object and referenced by a
8532    regular object.  The current definition is in some section of the
8533    dynamic object, but we're not including those sections.  We have to
8534    change the definition to something the rest of the link can
8535    understand.  */
8536
8537 bfd_boolean
8538 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8539                                      struct elf_link_hash_entry *h)
8540 {
8541   bfd *dynobj;
8542   struct mips_elf_link_hash_entry *hmips;
8543   struct mips_elf_link_hash_table *htab;
8544
8545   htab = mips_elf_hash_table (info);
8546   BFD_ASSERT (htab != NULL);
8547
8548   dynobj = elf_hash_table (info)->dynobj;
8549   hmips = (struct mips_elf_link_hash_entry *) h;
8550
8551   /* Make sure we know what is going on here.  */
8552   BFD_ASSERT (dynobj != NULL
8553               && (h->needs_plt
8554                   || h->u.weakdef != NULL
8555                   || (h->def_dynamic
8556                       && h->ref_regular
8557                       && !h->def_regular)));
8558
8559   hmips = (struct mips_elf_link_hash_entry *) h;
8560
8561   /* If there are call relocations against an externally-defined symbol,
8562      see whether we can create a MIPS lazy-binding stub for it.  We can
8563      only do this if all references to the function are through call
8564      relocations, and in that case, the traditional lazy-binding stubs
8565      are much more efficient than PLT entries.
8566
8567      Traditional stubs are only available on SVR4 psABI-based systems;
8568      VxWorks always uses PLTs instead.  */
8569   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8570     {
8571       if (! elf_hash_table (info)->dynamic_sections_created)
8572         return TRUE;
8573
8574       /* If this symbol is not defined in a regular file, then set
8575          the symbol to the stub location.  This is required to make
8576          function pointers compare as equal between the normal
8577          executable and the shared library.  */
8578       if (!h->def_regular)
8579         {
8580           hmips->needs_lazy_stub = TRUE;
8581           htab->lazy_stub_count++;
8582           return TRUE;
8583         }
8584     }
8585   /* As above, VxWorks requires PLT entries for externally-defined
8586      functions that are only accessed through call relocations.
8587
8588      Both VxWorks and non-VxWorks targets also need PLT entries if there
8589      are static-only relocations against an externally-defined function.
8590      This can technically occur for shared libraries if there are
8591      branches to the symbol, although it is unlikely that this will be
8592      used in practice due to the short ranges involved.  It can occur
8593      for any relative or absolute relocation in executables; in that
8594      case, the PLT entry becomes the function's canonical address.  */
8595   else if (((h->needs_plt && !hmips->no_fn_stub)
8596             || (h->type == STT_FUNC && hmips->has_static_relocs))
8597            && htab->use_plts_and_copy_relocs
8598            && !SYMBOL_CALLS_LOCAL (info, h)
8599            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8600                 && h->root.type == bfd_link_hash_undefweak))
8601     {
8602       /* If this is the first symbol to need a PLT entry, allocate room
8603          for the header.  */
8604       if (htab->splt->size == 0)
8605         {
8606           BFD_ASSERT (htab->sgotplt->size == 0);
8607
8608           /* If we're using the PLT additions to the psABI, each PLT
8609              entry is 16 bytes and the PLT0 entry is 32 bytes.
8610              Encourage better cache usage by aligning.  We do this
8611              lazily to avoid pessimizing traditional objects.  */
8612           if (!htab->is_vxworks
8613               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8614             return FALSE;
8615
8616           /* Make sure that .got.plt is word-aligned.  We do this lazily
8617              for the same reason as above.  */
8618           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8619                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8620             return FALSE;
8621
8622           htab->splt->size += htab->plt_header_size;
8623
8624           /* On non-VxWorks targets, the first two entries in .got.plt
8625              are reserved.  */
8626           if (!htab->is_vxworks)
8627             htab->sgotplt->size
8628               += get_elf_backend_data (dynobj)->got_header_size;
8629
8630           /* On VxWorks, also allocate room for the header's
8631              .rela.plt.unloaded entries.  */
8632           if (htab->is_vxworks && !info->shared)
8633             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8634         }
8635
8636       /* Assign the next .plt entry to this symbol.  */
8637       h->plt.offset = htab->splt->size;
8638       htab->splt->size += htab->plt_entry_size;
8639
8640       /* If the output file has no definition of the symbol, set the
8641          symbol's value to the address of the stub.  */
8642       if (!info->shared && !h->def_regular)
8643         {
8644           h->root.u.def.section = htab->splt;
8645           h->root.u.def.value = h->plt.offset;
8646           /* For VxWorks, point at the PLT load stub rather than the
8647              lazy resolution stub; this stub will become the canonical
8648              function address.  */
8649           if (htab->is_vxworks)
8650             h->root.u.def.value += 8;
8651         }
8652
8653       /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8654          relocation.  */
8655       htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8656       htab->srelplt->size += (htab->is_vxworks
8657                               ? MIPS_ELF_RELA_SIZE (dynobj)
8658                               : MIPS_ELF_REL_SIZE (dynobj));
8659
8660       /* Make room for the .rela.plt.unloaded relocations.  */
8661       if (htab->is_vxworks && !info->shared)
8662         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8663
8664       /* All relocations against this symbol that could have been made
8665          dynamic will now refer to the PLT entry instead.  */
8666       hmips->possibly_dynamic_relocs = 0;
8667
8668       return TRUE;
8669     }
8670
8671   /* If this is a weak symbol, and there is a real definition, the
8672      processor independent code will have arranged for us to see the
8673      real definition first, and we can just use the same value.  */
8674   if (h->u.weakdef != NULL)
8675     {
8676       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8677                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
8678       h->root.u.def.section = h->u.weakdef->root.u.def.section;
8679       h->root.u.def.value = h->u.weakdef->root.u.def.value;
8680       return TRUE;
8681     }
8682
8683   /* Otherwise, there is nothing further to do for symbols defined
8684      in regular objects.  */
8685   if (h->def_regular)
8686     return TRUE;
8687
8688   /* There's also nothing more to do if we'll convert all relocations
8689      against this symbol into dynamic relocations.  */
8690   if (!hmips->has_static_relocs)
8691     return TRUE;
8692
8693   /* We're now relying on copy relocations.  Complain if we have
8694      some that we can't convert.  */
8695   if (!htab->use_plts_and_copy_relocs || info->shared)
8696     {
8697       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8698                                "dynamic symbol %s"),
8699                              h->root.root.string);
8700       bfd_set_error (bfd_error_bad_value);
8701       return FALSE;
8702     }
8703
8704   /* We must allocate the symbol in our .dynbss section, which will
8705      become part of the .bss section of the executable.  There will be
8706      an entry for this symbol in the .dynsym section.  The dynamic
8707      object will contain position independent code, so all references
8708      from the dynamic object to this symbol will go through the global
8709      offset table.  The dynamic linker will use the .dynsym entry to
8710      determine the address it must put in the global offset table, so
8711      both the dynamic object and the regular object will refer to the
8712      same memory location for the variable.  */
8713
8714   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8715     {
8716       if (htab->is_vxworks)
8717         htab->srelbss->size += sizeof (Elf32_External_Rela);
8718       else
8719         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8720       h->needs_copy = 1;
8721     }
8722
8723   /* All relocations against this symbol that could have been made
8724      dynamic will now refer to the local copy instead.  */
8725   hmips->possibly_dynamic_relocs = 0;
8726
8727   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
8728 }
8729 \f
8730 /* This function is called after all the input files have been read,
8731    and the input sections have been assigned to output sections.  We
8732    check for any mips16 stub sections that we can discard.  */
8733
8734 bfd_boolean
8735 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
8736                                     struct bfd_link_info *info)
8737 {
8738   asection *ri;
8739   struct mips_elf_link_hash_table *htab;
8740   struct mips_htab_traverse_info hti;
8741
8742   htab = mips_elf_hash_table (info);
8743   BFD_ASSERT (htab != NULL);
8744
8745   /* The .reginfo section has a fixed size.  */
8746   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8747   if (ri != NULL)
8748     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
8749
8750   hti.info = info;
8751   hti.output_bfd = output_bfd;
8752   hti.error = FALSE;
8753   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8754                                mips_elf_check_symbols, &hti);
8755   if (hti.error)
8756     return FALSE;
8757
8758   return TRUE;
8759 }
8760
8761 /* If the link uses a GOT, lay it out and work out its size.  */
8762
8763 static bfd_boolean
8764 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8765 {
8766   bfd *dynobj;
8767   asection *s;
8768   struct mips_got_info *g;
8769   bfd_size_type loadable_size = 0;
8770   bfd_size_type page_gotno;
8771   bfd *ibfd;
8772   struct mips_elf_traverse_got_arg tga;
8773   struct mips_elf_link_hash_table *htab;
8774
8775   htab = mips_elf_hash_table (info);
8776   BFD_ASSERT (htab != NULL);
8777
8778   s = htab->sgot;
8779   if (s == NULL)
8780     return TRUE;
8781
8782   dynobj = elf_hash_table (info)->dynobj;
8783   g = htab->got_info;
8784
8785   /* Allocate room for the reserved entries.  VxWorks always reserves
8786      3 entries; other objects only reserve 2 entries.  */
8787   BFD_ASSERT (g->assigned_gotno == 0);
8788   if (htab->is_vxworks)
8789     htab->reserved_gotno = 3;
8790   else
8791     htab->reserved_gotno = 2;
8792   g->local_gotno += htab->reserved_gotno;
8793   g->assigned_gotno = htab->reserved_gotno;
8794
8795   /* Decide which symbols need to go in the global part of the GOT and
8796      count the number of reloc-only GOT symbols.  */
8797   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
8798
8799   if (!mips_elf_resolve_final_got_entries (info, g))
8800     return FALSE;
8801
8802   /* Calculate the total loadable size of the output.  That
8803      will give us the maximum number of GOT_PAGE entries
8804      required.  */
8805   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
8806     {
8807       asection *subsection;
8808
8809       for (subsection = ibfd->sections;
8810            subsection;
8811            subsection = subsection->next)
8812         {
8813           if ((subsection->flags & SEC_ALLOC) == 0)
8814             continue;
8815           loadable_size += ((subsection->size + 0xf)
8816                             &~ (bfd_size_type) 0xf);
8817         }
8818     }
8819
8820   if (htab->is_vxworks)
8821     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
8822        relocations against local symbols evaluate to "G", and the EABI does
8823        not include R_MIPS_GOT_PAGE.  */
8824     page_gotno = 0;
8825   else
8826     /* Assume there are two loadable segments consisting of contiguous
8827        sections.  Is 5 enough?  */
8828     page_gotno = (loadable_size >> 16) + 5;
8829
8830   /* Choose the smaller of the two page estimates; both are intended to be
8831      conservative.  */
8832   if (page_gotno > g->page_gotno)
8833     page_gotno = g->page_gotno;
8834
8835   g->local_gotno += page_gotno;
8836
8837   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8838   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8839   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8840
8841   /* VxWorks does not support multiple GOTs.  It initializes $gp to
8842      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8843      dynamic loader.  */
8844   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
8845     {
8846       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
8847         return FALSE;
8848     }
8849   else
8850     {
8851       /* Record that all bfds use G.  This also has the effect of freeing
8852          the per-bfd GOTs, which we no longer need.  */
8853       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
8854         if (mips_elf_bfd_got (ibfd, FALSE))
8855           mips_elf_replace_bfd_got (ibfd, g);
8856       mips_elf_replace_bfd_got (output_bfd, g);
8857
8858       /* Set up TLS entries.  */
8859       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8860       tga.info = info;
8861       tga.g = g;
8862       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
8863       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
8864       if (!tga.g)
8865         return FALSE;
8866       BFD_ASSERT (g->tls_assigned_gotno
8867                   == g->global_gotno + g->local_gotno + g->tls_gotno);
8868
8869       /* Each VxWorks GOT entry needs an explicit relocation.  */
8870       if (htab->is_vxworks && info->shared)
8871         g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
8872
8873       /* Allocate room for the TLS relocations.  */
8874       if (g->relocs)
8875         mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
8876     }
8877
8878   return TRUE;
8879 }
8880
8881 /* Estimate the size of the .MIPS.stubs section.  */
8882
8883 static void
8884 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
8885 {
8886   struct mips_elf_link_hash_table *htab;
8887   bfd_size_type dynsymcount;
8888
8889   htab = mips_elf_hash_table (info);
8890   BFD_ASSERT (htab != NULL);
8891
8892   if (htab->lazy_stub_count == 0)
8893     return;
8894
8895   /* IRIX rld assumes that a function stub isn't at the end of the .text
8896      section, so add a dummy entry to the end.  */
8897   htab->lazy_stub_count++;
8898
8899   /* Get a worst-case estimate of the number of dynamic symbols needed.
8900      At this point, dynsymcount does not account for section symbols
8901      and count_section_dynsyms may overestimate the number that will
8902      be needed.  */
8903   dynsymcount = (elf_hash_table (info)->dynsymcount
8904                  + count_section_dynsyms (output_bfd, info));
8905
8906   /* Determine the size of one stub entry.  */
8907   htab->function_stub_size = (dynsymcount > 0x10000
8908                               ? MIPS_FUNCTION_STUB_BIG_SIZE
8909                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
8910
8911   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
8912 }
8913
8914 /* A mips_elf_link_hash_traverse callback for which DATA points to the
8915    MIPS hash table.  If H needs a traditional MIPS lazy-binding stub,
8916    allocate an entry in the stubs section.  */
8917
8918 static bfd_boolean
8919 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data)
8920 {
8921   struct mips_elf_link_hash_table *htab;
8922
8923   htab = (struct mips_elf_link_hash_table *) data;
8924   if (h->needs_lazy_stub)
8925     {
8926       h->root.root.u.def.section = htab->sstubs;
8927       h->root.root.u.def.value = htab->sstubs->size;
8928       h->root.plt.offset = htab->sstubs->size;
8929       htab->sstubs->size += htab->function_stub_size;
8930     }
8931   return TRUE;
8932 }
8933
8934 /* Allocate offsets in the stubs section to each symbol that needs one.
8935    Set the final size of the .MIPS.stub section.  */
8936
8937 static void
8938 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
8939 {
8940   struct mips_elf_link_hash_table *htab;
8941
8942   htab = mips_elf_hash_table (info);
8943   BFD_ASSERT (htab != NULL);
8944
8945   if (htab->lazy_stub_count == 0)
8946     return;
8947
8948   htab->sstubs->size = 0;
8949   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
8950   htab->sstubs->size += htab->function_stub_size;
8951   BFD_ASSERT (htab->sstubs->size
8952               == htab->lazy_stub_count * htab->function_stub_size);
8953 }
8954
8955 /* Set the sizes of the dynamic sections.  */
8956
8957 bfd_boolean
8958 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
8959                                      struct bfd_link_info *info)
8960 {
8961   bfd *dynobj;
8962   asection *s, *sreldyn;
8963   bfd_boolean reltext;
8964   struct mips_elf_link_hash_table *htab;
8965
8966   htab = mips_elf_hash_table (info);
8967   BFD_ASSERT (htab != NULL);
8968   dynobj = elf_hash_table (info)->dynobj;
8969   BFD_ASSERT (dynobj != NULL);
8970
8971   if (elf_hash_table (info)->dynamic_sections_created)
8972     {
8973       /* Set the contents of the .interp section to the interpreter.  */
8974       if (info->executable)
8975         {
8976           s = bfd_get_linker_section (dynobj, ".interp");
8977           BFD_ASSERT (s != NULL);
8978           s->size
8979             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
8980           s->contents
8981             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
8982         }
8983
8984       /* Create a symbol for the PLT, if we know that we are using it.  */
8985       if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
8986         {
8987           struct elf_link_hash_entry *h;
8988
8989           BFD_ASSERT (htab->use_plts_and_copy_relocs);
8990
8991           h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
8992                                            "_PROCEDURE_LINKAGE_TABLE_");
8993           htab->root.hplt = h;
8994           if (h == NULL)
8995             return FALSE;
8996           h->type = STT_FUNC;
8997         }
8998     }
8999
9000   /* Allocate space for global sym dynamic relocs.  */
9001   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9002
9003   mips_elf_estimate_stub_size (output_bfd, info);
9004
9005   if (!mips_elf_lay_out_got (output_bfd, info))
9006     return FALSE;
9007
9008   mips_elf_lay_out_lazy_stubs (info);
9009
9010   /* The check_relocs and adjust_dynamic_symbol entry points have
9011      determined the sizes of the various dynamic sections.  Allocate
9012      memory for them.  */
9013   reltext = FALSE;
9014   for (s = dynobj->sections; s != NULL; s = s->next)
9015     {
9016       const char *name;
9017
9018       /* It's OK to base decisions on the section name, because none
9019          of the dynobj section names depend upon the input files.  */
9020       name = bfd_get_section_name (dynobj, s);
9021
9022       if ((s->flags & SEC_LINKER_CREATED) == 0)
9023         continue;
9024
9025       if (CONST_STRNEQ (name, ".rel"))
9026         {
9027           if (s->size != 0)
9028             {
9029               const char *outname;
9030               asection *target;
9031
9032               /* If this relocation section applies to a read only
9033                  section, then we probably need a DT_TEXTREL entry.
9034                  If the relocation section is .rel(a).dyn, we always
9035                  assert a DT_TEXTREL entry rather than testing whether
9036                  there exists a relocation to a read only section or
9037                  not.  */
9038               outname = bfd_get_section_name (output_bfd,
9039                                               s->output_section);
9040               target = bfd_get_section_by_name (output_bfd, outname + 4);
9041               if ((target != NULL
9042                    && (target->flags & SEC_READONLY) != 0
9043                    && (target->flags & SEC_ALLOC) != 0)
9044                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9045                 reltext = TRUE;
9046
9047               /* We use the reloc_count field as a counter if we need
9048                  to copy relocs into the output file.  */
9049               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9050                 s->reloc_count = 0;
9051
9052               /* If combreloc is enabled, elf_link_sort_relocs() will
9053                  sort relocations, but in a different way than we do,
9054                  and before we're done creating relocations.  Also, it
9055                  will move them around between input sections'
9056                  relocation's contents, so our sorting would be
9057                  broken, so don't let it run.  */
9058               info->combreloc = 0;
9059             }
9060         }
9061       else if (! info->shared
9062                && ! mips_elf_hash_table (info)->use_rld_obj_head
9063                && CONST_STRNEQ (name, ".rld_map"))
9064         {
9065           /* We add a room for __rld_map.  It will be filled in by the
9066              rtld to contain a pointer to the _r_debug structure.  */
9067           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9068         }
9069       else if (SGI_COMPAT (output_bfd)
9070                && CONST_STRNEQ (name, ".compact_rel"))
9071         s->size += mips_elf_hash_table (info)->compact_rel_size;
9072       else if (s == htab->splt)
9073         {
9074           /* If the last PLT entry has a branch delay slot, allocate
9075              room for an extra nop to fill the delay slot.  This is
9076              for CPUs without load interlocking.  */
9077           if (! LOAD_INTERLOCKS_P (output_bfd)
9078               && ! htab->is_vxworks && s->size > 0)
9079             s->size += 4;
9080         }
9081       else if (! CONST_STRNEQ (name, ".init")
9082                && s != htab->sgot
9083                && s != htab->sgotplt
9084                && s != htab->sstubs
9085                && s != htab->sdynbss)
9086         {
9087           /* It's not one of our sections, so don't allocate space.  */
9088           continue;
9089         }
9090
9091       if (s->size == 0)
9092         {
9093           s->flags |= SEC_EXCLUDE;
9094           continue;
9095         }
9096
9097       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9098         continue;
9099
9100       /* Allocate memory for the section contents.  */
9101       s->contents = bfd_zalloc (dynobj, s->size);
9102       if (s->contents == NULL)
9103         {
9104           bfd_set_error (bfd_error_no_memory);
9105           return FALSE;
9106         }
9107     }
9108
9109   if (elf_hash_table (info)->dynamic_sections_created)
9110     {
9111       /* Add some entries to the .dynamic section.  We fill in the
9112          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9113          must add the entries now so that we get the correct size for
9114          the .dynamic section.  */
9115
9116       /* SGI object has the equivalence of DT_DEBUG in the
9117          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9118          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9119          may only look at the first one they see.  */
9120       if (!info->shared
9121           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9122         return FALSE;
9123
9124       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9125          used by the debugger.  */
9126       if (info->executable
9127           && !SGI_COMPAT (output_bfd)
9128           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9129         return FALSE;
9130
9131       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9132         info->flags |= DF_TEXTREL;
9133
9134       if ((info->flags & DF_TEXTREL) != 0)
9135         {
9136           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9137             return FALSE;
9138
9139           /* Clear the DF_TEXTREL flag.  It will be set again if we
9140              write out an actual text relocation; we may not, because
9141              at this point we do not know whether e.g. any .eh_frame
9142              absolute relocations have been converted to PC-relative.  */
9143           info->flags &= ~DF_TEXTREL;
9144         }
9145
9146       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9147         return FALSE;
9148
9149       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9150       if (htab->is_vxworks)
9151         {
9152           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9153              use any of the DT_MIPS_* tags.  */
9154           if (sreldyn && sreldyn->size > 0)
9155             {
9156               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9157                 return FALSE;
9158
9159               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9160                 return FALSE;
9161
9162               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9163                 return FALSE;
9164             }
9165         }
9166       else
9167         {
9168           if (sreldyn && sreldyn->size > 0)
9169             {
9170               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9171                 return FALSE;
9172
9173               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9174                 return FALSE;
9175
9176               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9177                 return FALSE;
9178             }
9179
9180           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9181             return FALSE;
9182
9183           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9184             return FALSE;
9185
9186           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9187             return FALSE;
9188
9189           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9190             return FALSE;
9191
9192           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9193             return FALSE;
9194
9195           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9196             return FALSE;
9197
9198           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9199             return FALSE;
9200
9201           if (IRIX_COMPAT (dynobj) == ict_irix5
9202               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9203             return FALSE;
9204
9205           if (IRIX_COMPAT (dynobj) == ict_irix6
9206               && (bfd_get_section_by_name
9207                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9208               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9209             return FALSE;
9210         }
9211       if (htab->splt->size > 0)
9212         {
9213           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9214             return FALSE;
9215
9216           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9217             return FALSE;
9218
9219           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9220             return FALSE;
9221
9222           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9223             return FALSE;
9224         }
9225       if (htab->is_vxworks
9226           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9227         return FALSE;
9228     }
9229
9230   return TRUE;
9231 }
9232 \f
9233 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9234    Adjust its R_ADDEND field so that it is correct for the output file.
9235    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9236    and sections respectively; both use symbol indexes.  */
9237
9238 static void
9239 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9240                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9241                         asection **local_sections, Elf_Internal_Rela *rel)
9242 {
9243   unsigned int r_type, r_symndx;
9244   Elf_Internal_Sym *sym;
9245   asection *sec;
9246
9247   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9248     {
9249       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9250       if (gprel16_reloc_p (r_type)
9251           || r_type == R_MIPS_GPREL32
9252           || literal_reloc_p (r_type))
9253         {
9254           rel->r_addend += _bfd_get_gp_value (input_bfd);
9255           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9256         }
9257
9258       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9259       sym = local_syms + r_symndx;
9260
9261       /* Adjust REL's addend to account for section merging.  */
9262       if (!info->relocatable)
9263         {
9264           sec = local_sections[r_symndx];
9265           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9266         }
9267
9268       /* This would normally be done by the rela_normal code in elflink.c.  */
9269       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9270         rel->r_addend += local_sections[r_symndx]->output_offset;
9271     }
9272 }
9273
9274 /* Handle relocations against symbols from removed linkonce sections,
9275    or sections discarded by a linker script.  We use this wrapper around
9276    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9277    on 64-bit ELF targets.  In this case for any relocation handled, which
9278    always be the first in a triplet, the remaining two have to be processed
9279    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9280    index referred by the first reloc that applies to all the three and the
9281    remaining two never refer to an object symbol.  And it is the final
9282    relocation (the last non-null one) that determines the output field of
9283    the whole relocation so retrieve the corresponding howto structure for
9284    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9285
9286    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9287    and therefore requires to be pasted in a loop.  It also defines a block
9288    and does not protect any of its arguments, hence the extra brackets.  */
9289
9290 static void
9291 mips_reloc_against_discarded_section (bfd *output_bfd,
9292                                       struct bfd_link_info *info,
9293                                       bfd *input_bfd, asection *input_section,
9294                                       Elf_Internal_Rela **rel,
9295                                       const Elf_Internal_Rela **relend,
9296                                       bfd_boolean rel_reloc,
9297                                       reloc_howto_type *howto,
9298                                       bfd_byte *contents)
9299 {
9300   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9301   int count = bed->s->int_rels_per_ext_rel;
9302   unsigned int r_type;
9303   int i;
9304
9305   for (i = count - 1; i > 0; i--)
9306     {
9307       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9308       if (r_type != R_MIPS_NONE)
9309         {
9310           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9311           break;
9312         }
9313     }
9314   do
9315     {
9316        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9317                                         (*rel), count, (*relend),
9318                                         howto, i, contents);
9319     }
9320   while (0);
9321 }
9322
9323 /* Relocate a MIPS ELF section.  */
9324
9325 bfd_boolean
9326 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9327                                 bfd *input_bfd, asection *input_section,
9328                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
9329                                 Elf_Internal_Sym *local_syms,
9330                                 asection **local_sections)
9331 {
9332   Elf_Internal_Rela *rel;
9333   const Elf_Internal_Rela *relend;
9334   bfd_vma addend = 0;
9335   bfd_boolean use_saved_addend_p = FALSE;
9336   const struct elf_backend_data *bed;
9337
9338   bed = get_elf_backend_data (output_bfd);
9339   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9340   for (rel = relocs; rel < relend; ++rel)
9341     {
9342       const char *name;
9343       bfd_vma value = 0;
9344       reloc_howto_type *howto;
9345       bfd_boolean cross_mode_jump_p;
9346       /* TRUE if the relocation is a RELA relocation, rather than a
9347          REL relocation.  */
9348       bfd_boolean rela_relocation_p = TRUE;
9349       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9350       const char *msg;
9351       unsigned long r_symndx;
9352       asection *sec;
9353       Elf_Internal_Shdr *symtab_hdr;
9354       struct elf_link_hash_entry *h;
9355       bfd_boolean rel_reloc;
9356
9357       rel_reloc = (NEWABI_P (input_bfd)
9358                    && mips_elf_rel_relocation_p (input_bfd, input_section,
9359                                                  relocs, rel));
9360       /* Find the relocation howto for this relocation.  */
9361       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9362
9363       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
9364       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9365       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9366         {
9367           sec = local_sections[r_symndx];
9368           h = NULL;
9369         }
9370       else
9371         {
9372           unsigned long extsymoff;
9373
9374           extsymoff = 0;
9375           if (!elf_bad_symtab (input_bfd))
9376             extsymoff = symtab_hdr->sh_info;
9377           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9378           while (h->root.type == bfd_link_hash_indirect
9379                  || h->root.type == bfd_link_hash_warning)
9380             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9381
9382           sec = NULL;
9383           if (h->root.type == bfd_link_hash_defined
9384               || h->root.type == bfd_link_hash_defweak)
9385             sec = h->root.u.def.section;
9386         }
9387
9388       if (sec != NULL && discarded_section (sec))
9389         {
9390           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
9391                                                 input_section, &rel, &relend,
9392                                                 rel_reloc, howto, contents);
9393           continue;
9394         }
9395
9396       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
9397         {
9398           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
9399              64-bit code, but make sure all their addresses are in the
9400              lowermost or uppermost 32-bit section of the 64-bit address
9401              space.  Thus, when they use an R_MIPS_64 they mean what is
9402              usually meant by R_MIPS_32, with the exception that the
9403              stored value is sign-extended to 64 bits.  */
9404           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
9405
9406           /* On big-endian systems, we need to lie about the position
9407              of the reloc.  */
9408           if (bfd_big_endian (input_bfd))
9409             rel->r_offset += 4;
9410         }
9411
9412       if (!use_saved_addend_p)
9413         {
9414           /* If these relocations were originally of the REL variety,
9415              we must pull the addend out of the field that will be
9416              relocated.  Otherwise, we simply use the contents of the
9417              RELA relocation.  */
9418           if (mips_elf_rel_relocation_p (input_bfd, input_section,
9419                                          relocs, rel))
9420             {
9421               rela_relocation_p = FALSE;
9422               addend = mips_elf_read_rel_addend (input_bfd, rel,
9423                                                  howto, contents);
9424               if (hi16_reloc_p (r_type)
9425                   || (got16_reloc_p (r_type)
9426                       && mips_elf_local_relocation_p (input_bfd, rel,
9427                                                       local_sections)))
9428                 {
9429                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9430                                                      contents, &addend))
9431                     {
9432                       if (h)
9433                         name = h->root.root.string;
9434                       else
9435                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9436                                                  local_syms + r_symndx,
9437                                                  sec);
9438                       (*_bfd_error_handler)
9439                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9440                          input_bfd, input_section, name, howto->name,
9441                          rel->r_offset);
9442                     }
9443                 }
9444               else
9445                 addend <<= howto->rightshift;
9446             }
9447           else
9448             addend = rel->r_addend;
9449           mips_elf_adjust_addend (output_bfd, info, input_bfd,
9450                                   local_syms, local_sections, rel);
9451         }
9452
9453       if (info->relocatable)
9454         {
9455           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
9456               && bfd_big_endian (input_bfd))
9457             rel->r_offset -= 4;
9458
9459           if (!rela_relocation_p && rel->r_addend)
9460             {
9461               addend += rel->r_addend;
9462               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
9463                 addend = mips_elf_high (addend);
9464               else if (r_type == R_MIPS_HIGHER)
9465                 addend = mips_elf_higher (addend);
9466               else if (r_type == R_MIPS_HIGHEST)
9467                 addend = mips_elf_highest (addend);
9468               else
9469                 addend >>= howto->rightshift;
9470
9471               /* We use the source mask, rather than the destination
9472                  mask because the place to which we are writing will be
9473                  source of the addend in the final link.  */
9474               addend &= howto->src_mask;
9475
9476               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9477                 /* See the comment above about using R_MIPS_64 in the 32-bit
9478                    ABI.  Here, we need to update the addend.  It would be
9479                    possible to get away with just using the R_MIPS_32 reloc
9480                    but for endianness.  */
9481                 {
9482                   bfd_vma sign_bits;
9483                   bfd_vma low_bits;
9484                   bfd_vma high_bits;
9485
9486                   if (addend & ((bfd_vma) 1 << 31))
9487 #ifdef BFD64
9488                     sign_bits = ((bfd_vma) 1 << 32) - 1;
9489 #else
9490                     sign_bits = -1;
9491 #endif
9492                   else
9493                     sign_bits = 0;
9494
9495                   /* If we don't know that we have a 64-bit type,
9496                      do two separate stores.  */
9497                   if (bfd_big_endian (input_bfd))
9498                     {
9499                       /* Store the sign-bits (which are most significant)
9500                          first.  */
9501                       low_bits = sign_bits;
9502                       high_bits = addend;
9503                     }
9504                   else
9505                     {
9506                       low_bits = addend;
9507                       high_bits = sign_bits;
9508                     }
9509                   bfd_put_32 (input_bfd, low_bits,
9510                               contents + rel->r_offset);
9511                   bfd_put_32 (input_bfd, high_bits,
9512                               contents + rel->r_offset + 4);
9513                   continue;
9514                 }
9515
9516               if (! mips_elf_perform_relocation (info, howto, rel, addend,
9517                                                  input_bfd, input_section,
9518                                                  contents, FALSE))
9519                 return FALSE;
9520             }
9521
9522           /* Go on to the next relocation.  */
9523           continue;
9524         }
9525
9526       /* In the N32 and 64-bit ABIs there may be multiple consecutive
9527          relocations for the same offset.  In that case we are
9528          supposed to treat the output of each relocation as the addend
9529          for the next.  */
9530       if (rel + 1 < relend
9531           && rel->r_offset == rel[1].r_offset
9532           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
9533         use_saved_addend_p = TRUE;
9534       else
9535         use_saved_addend_p = FALSE;
9536
9537       /* Figure out what value we are supposed to relocate.  */
9538       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9539                                              input_section, info, rel,
9540                                              addend, howto, local_syms,
9541                                              local_sections, &value,
9542                                              &name, &cross_mode_jump_p,
9543                                              use_saved_addend_p))
9544         {
9545         case bfd_reloc_continue:
9546           /* There's nothing to do.  */
9547           continue;
9548
9549         case bfd_reloc_undefined:
9550           /* mips_elf_calculate_relocation already called the
9551              undefined_symbol callback.  There's no real point in
9552              trying to perform the relocation at this point, so we
9553              just skip ahead to the next relocation.  */
9554           continue;
9555
9556         case bfd_reloc_notsupported:
9557           msg = _("internal error: unsupported relocation error");
9558           info->callbacks->warning
9559             (info, msg, name, input_bfd, input_section, rel->r_offset);
9560           return FALSE;
9561
9562         case bfd_reloc_overflow:
9563           if (use_saved_addend_p)
9564             /* Ignore overflow until we reach the last relocation for
9565                a given location.  */
9566             ;
9567           else
9568             {
9569               struct mips_elf_link_hash_table *htab;
9570
9571               htab = mips_elf_hash_table (info);
9572               BFD_ASSERT (htab != NULL);
9573               BFD_ASSERT (name != NULL);
9574               if (!htab->small_data_overflow_reported
9575                   && (gprel16_reloc_p (howto->type)
9576                       || literal_reloc_p (howto->type)))
9577                 {
9578                   msg = _("small-data section exceeds 64KB;"
9579                           " lower small-data size limit (see option -G)");
9580
9581                   htab->small_data_overflow_reported = TRUE;
9582                   (*info->callbacks->einfo) ("%P: %s\n", msg);
9583                 }
9584               if (! ((*info->callbacks->reloc_overflow)
9585                      (info, NULL, name, howto->name, (bfd_vma) 0,
9586                       input_bfd, input_section, rel->r_offset)))
9587                 return FALSE;
9588             }
9589           break;
9590
9591         case bfd_reloc_ok:
9592           break;
9593
9594         case bfd_reloc_outofrange:
9595           if (jal_reloc_p (howto->type))
9596             {
9597               msg = _("JALX to a non-word-aligned address");
9598               info->callbacks->warning
9599                 (info, msg, name, input_bfd, input_section, rel->r_offset);
9600               return FALSE;
9601             }
9602           /* Fall through.  */
9603
9604         default:
9605           abort ();
9606           break;
9607         }
9608
9609       /* If we've got another relocation for the address, keep going
9610          until we reach the last one.  */
9611       if (use_saved_addend_p)
9612         {
9613           addend = value;
9614           continue;
9615         }
9616
9617       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9618         /* See the comment above about using R_MIPS_64 in the 32-bit
9619            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
9620            that calculated the right value.  Now, however, we
9621            sign-extend the 32-bit result to 64-bits, and store it as a
9622            64-bit value.  We are especially generous here in that we
9623            go to extreme lengths to support this usage on systems with
9624            only a 32-bit VMA.  */
9625         {
9626           bfd_vma sign_bits;
9627           bfd_vma low_bits;
9628           bfd_vma high_bits;
9629
9630           if (value & ((bfd_vma) 1 << 31))
9631 #ifdef BFD64
9632             sign_bits = ((bfd_vma) 1 << 32) - 1;
9633 #else
9634             sign_bits = -1;
9635 #endif
9636           else
9637             sign_bits = 0;
9638
9639           /* If we don't know that we have a 64-bit type,
9640              do two separate stores.  */
9641           if (bfd_big_endian (input_bfd))
9642             {
9643               /* Undo what we did above.  */
9644               rel->r_offset -= 4;
9645               /* Store the sign-bits (which are most significant)
9646                  first.  */
9647               low_bits = sign_bits;
9648               high_bits = value;
9649             }
9650           else
9651             {
9652               low_bits = value;
9653               high_bits = sign_bits;
9654             }
9655           bfd_put_32 (input_bfd, low_bits,
9656                       contents + rel->r_offset);
9657           bfd_put_32 (input_bfd, high_bits,
9658                       contents + rel->r_offset + 4);
9659           continue;
9660         }
9661
9662       /* Actually perform the relocation.  */
9663       if (! mips_elf_perform_relocation (info, howto, rel, value,
9664                                          input_bfd, input_section,
9665                                          contents, cross_mode_jump_p))
9666         return FALSE;
9667     }
9668
9669   return TRUE;
9670 }
9671 \f
9672 /* A function that iterates over each entry in la25_stubs and fills
9673    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
9674
9675 static int
9676 mips_elf_create_la25_stub (void **slot, void *data)
9677 {
9678   struct mips_htab_traverse_info *hti;
9679   struct mips_elf_link_hash_table *htab;
9680   struct mips_elf_la25_stub *stub;
9681   asection *s;
9682   bfd_byte *loc;
9683   bfd_vma offset, target, target_high, target_low;
9684
9685   stub = (struct mips_elf_la25_stub *) *slot;
9686   hti = (struct mips_htab_traverse_info *) data;
9687   htab = mips_elf_hash_table (hti->info);
9688   BFD_ASSERT (htab != NULL);
9689
9690   /* Create the section contents, if we haven't already.  */
9691   s = stub->stub_section;
9692   loc = s->contents;
9693   if (loc == NULL)
9694     {
9695       loc = bfd_malloc (s->size);
9696       if (loc == NULL)
9697         {
9698           hti->error = TRUE;
9699           return FALSE;
9700         }
9701       s->contents = loc;
9702     }
9703
9704   /* Work out where in the section this stub should go.  */
9705   offset = stub->offset;
9706
9707   /* Work out the target address.  */
9708   target = mips_elf_get_la25_target (stub, &s);
9709   target += s->output_section->vma + s->output_offset;
9710
9711   target_high = ((target + 0x8000) >> 16) & 0xffff;
9712   target_low = (target & 0xffff);
9713
9714   if (stub->stub_section != htab->strampoline)
9715     {
9716       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
9717          of the section and write the two instructions at the end.  */
9718       memset (loc, 0, offset);
9719       loc += offset;
9720       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9721         {
9722           bfd_put_micromips_32 (hti->output_bfd,
9723                                 LA25_LUI_MICROMIPS (target_high),
9724                                 loc);
9725           bfd_put_micromips_32 (hti->output_bfd,
9726                                 LA25_ADDIU_MICROMIPS (target_low),
9727                                 loc + 4);
9728         }
9729       else
9730         {
9731           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9732           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9733         }
9734     }
9735   else
9736     {
9737       /* This is trampoline.  */
9738       loc += offset;
9739       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9740         {
9741           bfd_put_micromips_32 (hti->output_bfd,
9742                                 LA25_LUI_MICROMIPS (target_high), loc);
9743           bfd_put_micromips_32 (hti->output_bfd,
9744                                 LA25_J_MICROMIPS (target), loc + 4);
9745           bfd_put_micromips_32 (hti->output_bfd,
9746                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
9747           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9748         }
9749       else
9750         {
9751           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9752           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9753           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9754           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9755         }
9756     }
9757   return TRUE;
9758 }
9759
9760 /* If NAME is one of the special IRIX6 symbols defined by the linker,
9761    adjust it appropriately now.  */
9762
9763 static void
9764 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9765                                       const char *name, Elf_Internal_Sym *sym)
9766 {
9767   /* The linker script takes care of providing names and values for
9768      these, but we must place them into the right sections.  */
9769   static const char* const text_section_symbols[] = {
9770     "_ftext",
9771     "_etext",
9772     "__dso_displacement",
9773     "__elf_header",
9774     "__program_header_table",
9775     NULL
9776   };
9777
9778   static const char* const data_section_symbols[] = {
9779     "_fdata",
9780     "_edata",
9781     "_end",
9782     "_fbss",
9783     NULL
9784   };
9785
9786   const char* const *p;
9787   int i;
9788
9789   for (i = 0; i < 2; ++i)
9790     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9791          *p;
9792          ++p)
9793       if (strcmp (*p, name) == 0)
9794         {
9795           /* All of these symbols are given type STT_SECTION by the
9796              IRIX6 linker.  */
9797           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9798           sym->st_other = STO_PROTECTED;
9799
9800           /* The IRIX linker puts these symbols in special sections.  */
9801           if (i == 0)
9802             sym->st_shndx = SHN_MIPS_TEXT;
9803           else
9804             sym->st_shndx = SHN_MIPS_DATA;
9805
9806           break;
9807         }
9808 }
9809
9810 /* Finish up dynamic symbol handling.  We set the contents of various
9811    dynamic sections here.  */
9812
9813 bfd_boolean
9814 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9815                                      struct bfd_link_info *info,
9816                                      struct elf_link_hash_entry *h,
9817                                      Elf_Internal_Sym *sym)
9818 {
9819   bfd *dynobj;
9820   asection *sgot;
9821   struct mips_got_info *g, *gg;
9822   const char *name;
9823   int idx;
9824   struct mips_elf_link_hash_table *htab;
9825   struct mips_elf_link_hash_entry *hmips;
9826
9827   htab = mips_elf_hash_table (info);
9828   BFD_ASSERT (htab != NULL);
9829   dynobj = elf_hash_table (info)->dynobj;
9830   hmips = (struct mips_elf_link_hash_entry *) h;
9831
9832   BFD_ASSERT (!htab->is_vxworks);
9833
9834   if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9835     {
9836       /* We've decided to create a PLT entry for this symbol.  */
9837       bfd_byte *loc;
9838       bfd_vma header_address, plt_index, got_address;
9839       bfd_vma got_address_high, got_address_low, load;
9840       const bfd_vma *plt_entry;
9841
9842       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9843       BFD_ASSERT (h->dynindx != -1);
9844       BFD_ASSERT (htab->splt != NULL);
9845       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9846       BFD_ASSERT (!h->def_regular);
9847
9848       /* Calculate the address of the PLT header.  */
9849       header_address = (htab->splt->output_section->vma
9850                         + htab->splt->output_offset);
9851
9852       /* Calculate the index of the entry.  */
9853       plt_index = ((h->plt.offset - htab->plt_header_size)
9854                    / htab->plt_entry_size);
9855
9856       /* Calculate the address of the .got.plt entry.  */
9857       got_address = (htab->sgotplt->output_section->vma
9858                      + htab->sgotplt->output_offset
9859                      + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9860       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9861       got_address_low = got_address & 0xffff;
9862
9863       /* Initially point the .got.plt entry at the PLT header.  */
9864       loc = (htab->sgotplt->contents
9865              + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9866       if (ABI_64_P (output_bfd))
9867         bfd_put_64 (output_bfd, header_address, loc);
9868       else
9869         bfd_put_32 (output_bfd, header_address, loc);
9870
9871       /* Find out where the .plt entry should go.  */
9872       loc = htab->splt->contents + h->plt.offset;
9873
9874       /* Pick the load opcode.  */
9875       load = MIPS_ELF_LOAD_WORD (output_bfd);
9876
9877       /* Fill in the PLT entry itself.  */
9878       plt_entry = mips_exec_plt_entry;
9879       bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
9880       bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
9881
9882       if (! LOAD_INTERLOCKS_P (output_bfd))
9883         {
9884           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
9885           bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9886         }
9887       else
9888         {
9889           bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
9890           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
9891         }
9892
9893       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
9894       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
9895                                           plt_index, h->dynindx,
9896                                           R_MIPS_JUMP_SLOT, got_address);
9897
9898       /* We distinguish between PLT entries and lazy-binding stubs by
9899          giving the former an st_other value of STO_MIPS_PLT.  Set the
9900          flag and leave the value if there are any relocations in the
9901          binary where pointer equality matters.  */
9902       sym->st_shndx = SHN_UNDEF;
9903       if (h->pointer_equality_needed)
9904         sym->st_other = STO_MIPS_PLT;
9905       else
9906         sym->st_value = 0;
9907     }
9908   else if (h->plt.offset != MINUS_ONE)
9909     {
9910       /* We've decided to create a lazy-binding stub.  */
9911       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
9912
9913       /* This symbol has a stub.  Set it up.  */
9914
9915       BFD_ASSERT (h->dynindx != -1);
9916
9917       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9918                   || (h->dynindx <= 0xffff));
9919
9920       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
9921          sign extension at runtime in the stub, resulting in a negative
9922          index value.  */
9923       if (h->dynindx & ~0x7fffffff)
9924         return FALSE;
9925
9926       /* Fill the stub.  */
9927       idx = 0;
9928       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
9929       idx += 4;
9930       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
9931       idx += 4;
9932       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9933         {
9934           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
9935                       stub + idx);
9936           idx += 4;
9937         }
9938       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
9939       idx += 4;
9940
9941       /* If a large stub is not required and sign extension is not a
9942          problem, then use legacy code in the stub.  */
9943       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9944         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
9945       else if (h->dynindx & ~0x7fff)
9946         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
9947       else
9948         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
9949                     stub + idx);
9950
9951       BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
9952       memcpy (htab->sstubs->contents + h->plt.offset,
9953               stub, htab->function_stub_size);
9954
9955       /* Mark the symbol as undefined.  plt.offset != -1 occurs
9956          only for the referenced symbol.  */
9957       sym->st_shndx = SHN_UNDEF;
9958
9959       /* The run-time linker uses the st_value field of the symbol
9960          to reset the global offset table entry for this external
9961          to its stub address when unlinking a shared object.  */
9962       sym->st_value = (htab->sstubs->output_section->vma
9963                        + htab->sstubs->output_offset
9964                        + h->plt.offset);
9965     }
9966
9967   /* If we have a MIPS16 function with a stub, the dynamic symbol must
9968      refer to the stub, since only the stub uses the standard calling
9969      conventions.  */
9970   if (h->dynindx != -1 && hmips->fn_stub != NULL)
9971     {
9972       BFD_ASSERT (hmips->need_fn_stub);
9973       sym->st_value = (hmips->fn_stub->output_section->vma
9974                        + hmips->fn_stub->output_offset);
9975       sym->st_size = hmips->fn_stub->size;
9976       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
9977     }
9978
9979   BFD_ASSERT (h->dynindx != -1
9980               || h->forced_local);
9981
9982   sgot = htab->sgot;
9983   g = htab->got_info;
9984   BFD_ASSERT (g != NULL);
9985
9986   /* Run through the global symbol table, creating GOT entries for all
9987      the symbols that need them.  */
9988   if (hmips->global_got_area != GGA_NONE)
9989     {
9990       bfd_vma offset;
9991       bfd_vma value;
9992
9993       value = sym->st_value;
9994       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
9995       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
9996     }
9997
9998   if (hmips->global_got_area != GGA_NONE && g->next)
9999     {
10000       struct mips_got_entry e, *p;
10001       bfd_vma entry;
10002       bfd_vma offset;
10003
10004       gg = g;
10005
10006       e.abfd = output_bfd;
10007       e.symndx = -1;
10008       e.d.h = hmips;
10009       e.tls_type = GOT_TLS_NONE;
10010
10011       for (g = g->next; g->next != gg; g = g->next)
10012         {
10013           if (g->got_entries
10014               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10015                                                            &e)))
10016             {
10017               offset = p->gotidx;
10018               BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
10019               if (info->shared
10020                   || (elf_hash_table (info)->dynamic_sections_created
10021                       && p->d.h != NULL
10022                       && p->d.h->root.def_dynamic
10023                       && !p->d.h->root.def_regular))
10024                 {
10025                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10026                      the various compatibility problems, it's easier to mock
10027                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10028                      mips_elf_create_dynamic_relocation to calculate the
10029                      appropriate addend.  */
10030                   Elf_Internal_Rela rel[3];
10031
10032                   memset (rel, 0, sizeof (rel));
10033                   if (ABI_64_P (output_bfd))
10034                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10035                   else
10036                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10037                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10038
10039                   entry = 0;
10040                   if (! (mips_elf_create_dynamic_relocation
10041                          (output_bfd, info, rel,
10042                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10043                     return FALSE;
10044                 }
10045               else
10046                 entry = sym->st_value;
10047               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10048             }
10049         }
10050     }
10051
10052   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10053   name = h->root.root.string;
10054   if (h == elf_hash_table (info)->hdynamic
10055       || h == elf_hash_table (info)->hgot)
10056     sym->st_shndx = SHN_ABS;
10057   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10058            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10059     {
10060       sym->st_shndx = SHN_ABS;
10061       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10062       sym->st_value = 1;
10063     }
10064   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10065     {
10066       sym->st_shndx = SHN_ABS;
10067       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10068       sym->st_value = elf_gp (output_bfd);
10069     }
10070   else if (SGI_COMPAT (output_bfd))
10071     {
10072       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10073           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10074         {
10075           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10076           sym->st_other = STO_PROTECTED;
10077           sym->st_value = 0;
10078           sym->st_shndx = SHN_MIPS_DATA;
10079         }
10080       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10081         {
10082           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10083           sym->st_other = STO_PROTECTED;
10084           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10085           sym->st_shndx = SHN_ABS;
10086         }
10087       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10088         {
10089           if (h->type == STT_FUNC)
10090             sym->st_shndx = SHN_MIPS_TEXT;
10091           else if (h->type == STT_OBJECT)
10092             sym->st_shndx = SHN_MIPS_DATA;
10093         }
10094     }
10095
10096   /* Emit a copy reloc, if needed.  */
10097   if (h->needs_copy)
10098     {
10099       asection *s;
10100       bfd_vma symval;
10101
10102       BFD_ASSERT (h->dynindx != -1);
10103       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10104
10105       s = mips_elf_rel_dyn_section (info, FALSE);
10106       symval = (h->root.u.def.section->output_section->vma
10107                 + h->root.u.def.section->output_offset
10108                 + h->root.u.def.value);
10109       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10110                                           h->dynindx, R_MIPS_COPY, symval);
10111     }
10112
10113   /* Handle the IRIX6-specific symbols.  */
10114   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10115     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10116
10117   /* Keep dynamic MIPS16 symbols odd.  This allows the dynamic linker to
10118      treat MIPS16 symbols like any other.  */
10119   if (ELF_ST_IS_MIPS16 (sym->st_other))
10120     {
10121       BFD_ASSERT (sym->st_value & 1);
10122       sym->st_other -= STO_MIPS16;
10123     }
10124
10125   return TRUE;
10126 }
10127
10128 /* Likewise, for VxWorks.  */
10129
10130 bfd_boolean
10131 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10132                                          struct bfd_link_info *info,
10133                                          struct elf_link_hash_entry *h,
10134                                          Elf_Internal_Sym *sym)
10135 {
10136   bfd *dynobj;
10137   asection *sgot;
10138   struct mips_got_info *g;
10139   struct mips_elf_link_hash_table *htab;
10140   struct mips_elf_link_hash_entry *hmips;
10141
10142   htab = mips_elf_hash_table (info);
10143   BFD_ASSERT (htab != NULL);
10144   dynobj = elf_hash_table (info)->dynobj;
10145   hmips = (struct mips_elf_link_hash_entry *) h;
10146
10147   if (h->plt.offset != (bfd_vma) -1)
10148     {
10149       bfd_byte *loc;
10150       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10151       Elf_Internal_Rela rel;
10152       static const bfd_vma *plt_entry;
10153
10154       BFD_ASSERT (h->dynindx != -1);
10155       BFD_ASSERT (htab->splt != NULL);
10156       BFD_ASSERT (h->plt.offset <= htab->splt->size);
10157
10158       /* Calculate the address of the .plt entry.  */
10159       plt_address = (htab->splt->output_section->vma
10160                      + htab->splt->output_offset
10161                      + h->plt.offset);
10162
10163       /* Calculate the index of the entry.  */
10164       plt_index = ((h->plt.offset - htab->plt_header_size)
10165                    / htab->plt_entry_size);
10166
10167       /* Calculate the address of the .got.plt entry.  */
10168       got_address = (htab->sgotplt->output_section->vma
10169                      + htab->sgotplt->output_offset
10170                      + plt_index * 4);
10171
10172       /* Calculate the offset of the .got.plt entry from
10173          _GLOBAL_OFFSET_TABLE_.  */
10174       got_offset = mips_elf_gotplt_index (info, h);
10175
10176       /* Calculate the offset for the branch at the start of the PLT
10177          entry.  The branch jumps to the beginning of .plt.  */
10178       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10179
10180       /* Fill in the initial value of the .got.plt entry.  */
10181       bfd_put_32 (output_bfd, plt_address,
10182                   htab->sgotplt->contents + plt_index * 4);
10183
10184       /* Find out where the .plt entry should go.  */
10185       loc = htab->splt->contents + h->plt.offset;
10186
10187       if (info->shared)
10188         {
10189           plt_entry = mips_vxworks_shared_plt_entry;
10190           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10191           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10192         }
10193       else
10194         {
10195           bfd_vma got_address_high, got_address_low;
10196
10197           plt_entry = mips_vxworks_exec_plt_entry;
10198           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10199           got_address_low = got_address & 0xffff;
10200
10201           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10202           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10203           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10204           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10205           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10206           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10207           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10208           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10209
10210           loc = (htab->srelplt2->contents
10211                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10212
10213           /* Emit a relocation for the .got.plt entry.  */
10214           rel.r_offset = got_address;
10215           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10216           rel.r_addend = h->plt.offset;
10217           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10218
10219           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
10220           loc += sizeof (Elf32_External_Rela);
10221           rel.r_offset = plt_address + 8;
10222           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10223           rel.r_addend = got_offset;
10224           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10225
10226           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
10227           loc += sizeof (Elf32_External_Rela);
10228           rel.r_offset += 4;
10229           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10230           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10231         }
10232
10233       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10234       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10235       rel.r_offset = got_address;
10236       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10237       rel.r_addend = 0;
10238       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10239
10240       if (!h->def_regular)
10241         sym->st_shndx = SHN_UNDEF;
10242     }
10243
10244   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10245
10246   sgot = htab->sgot;
10247   g = htab->got_info;
10248   BFD_ASSERT (g != NULL);
10249
10250   /* See if this symbol has an entry in the GOT.  */
10251   if (hmips->global_got_area != GGA_NONE)
10252     {
10253       bfd_vma offset;
10254       Elf_Internal_Rela outrel;
10255       bfd_byte *loc;
10256       asection *s;
10257
10258       /* Install the symbol value in the GOT.   */
10259       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
10260       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10261
10262       /* Add a dynamic relocation for it.  */
10263       s = mips_elf_rel_dyn_section (info, FALSE);
10264       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10265       outrel.r_offset = (sgot->output_section->vma
10266                          + sgot->output_offset
10267                          + offset);
10268       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10269       outrel.r_addend = 0;
10270       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10271     }
10272
10273   /* Emit a copy reloc, if needed.  */
10274   if (h->needs_copy)
10275     {
10276       Elf_Internal_Rela rel;
10277
10278       BFD_ASSERT (h->dynindx != -1);
10279
10280       rel.r_offset = (h->root.u.def.section->output_section->vma
10281                       + h->root.u.def.section->output_offset
10282                       + h->root.u.def.value);
10283       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10284       rel.r_addend = 0;
10285       bfd_elf32_swap_reloca_out (output_bfd, &rel,
10286                                  htab->srelbss->contents
10287                                  + (htab->srelbss->reloc_count
10288                                     * sizeof (Elf32_External_Rela)));
10289       ++htab->srelbss->reloc_count;
10290     }
10291
10292   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
10293   if (ELF_ST_IS_COMPRESSED (sym->st_other))
10294     sym->st_value &= ~1;
10295
10296   return TRUE;
10297 }
10298
10299 /* Write out a plt0 entry to the beginning of .plt.  */
10300
10301 static void
10302 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10303 {
10304   bfd_byte *loc;
10305   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10306   static const bfd_vma *plt_entry;
10307   struct mips_elf_link_hash_table *htab;
10308
10309   htab = mips_elf_hash_table (info);
10310   BFD_ASSERT (htab != NULL);
10311
10312   if (ABI_64_P (output_bfd))
10313     plt_entry = mips_n64_exec_plt0_entry;
10314   else if (ABI_N32_P (output_bfd))
10315     plt_entry = mips_n32_exec_plt0_entry;
10316   else
10317     plt_entry = mips_o32_exec_plt0_entry;
10318
10319   /* Calculate the value of .got.plt.  */
10320   gotplt_value = (htab->sgotplt->output_section->vma
10321                   + htab->sgotplt->output_offset);
10322   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10323   gotplt_value_low = gotplt_value & 0xffff;
10324
10325   /* The PLT sequence is not safe for N64 if .got.plt's address can
10326      not be loaded in two instructions.  */
10327   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10328               || ~(gotplt_value | 0x7fffffff) == 0);
10329
10330   /* Install the PLT header.  */
10331   loc = htab->splt->contents;
10332   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10333   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10334   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10335   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10336   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10337   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10338   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10339   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10340 }
10341
10342 /* Install the PLT header for a VxWorks executable and finalize the
10343    contents of .rela.plt.unloaded.  */
10344
10345 static void
10346 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10347 {
10348   Elf_Internal_Rela rela;
10349   bfd_byte *loc;
10350   bfd_vma got_value, got_value_high, got_value_low, plt_address;
10351   static const bfd_vma *plt_entry;
10352   struct mips_elf_link_hash_table *htab;
10353
10354   htab = mips_elf_hash_table (info);
10355   BFD_ASSERT (htab != NULL);
10356
10357   plt_entry = mips_vxworks_exec_plt0_entry;
10358
10359   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
10360   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10361                + htab->root.hgot->root.u.def.section->output_offset
10362                + htab->root.hgot->root.u.def.value);
10363
10364   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10365   got_value_low = got_value & 0xffff;
10366
10367   /* Calculate the address of the PLT header.  */
10368   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10369
10370   /* Install the PLT header.  */
10371   loc = htab->splt->contents;
10372   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10373   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10374   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10375   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10376   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10377   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10378
10379   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10380   loc = htab->srelplt2->contents;
10381   rela.r_offset = plt_address;
10382   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10383   rela.r_addend = 0;
10384   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10385   loc += sizeof (Elf32_External_Rela);
10386
10387   /* Output the relocation for the following addiu of
10388      %lo(_GLOBAL_OFFSET_TABLE_).  */
10389   rela.r_offset += 4;
10390   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10391   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10392   loc += sizeof (Elf32_External_Rela);
10393
10394   /* Fix up the remaining relocations.  They may have the wrong
10395      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10396      in which symbols were output.  */
10397   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10398     {
10399       Elf_Internal_Rela rel;
10400
10401       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10402       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10403       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10404       loc += sizeof (Elf32_External_Rela);
10405
10406       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10407       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10408       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10409       loc += sizeof (Elf32_External_Rela);
10410
10411       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10412       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10413       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10414       loc += sizeof (Elf32_External_Rela);
10415     }
10416 }
10417
10418 /* Install the PLT header for a VxWorks shared library.  */
10419
10420 static void
10421 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10422 {
10423   unsigned int i;
10424   struct mips_elf_link_hash_table *htab;
10425
10426   htab = mips_elf_hash_table (info);
10427   BFD_ASSERT (htab != NULL);
10428
10429   /* We just need to copy the entry byte-by-byte.  */
10430   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10431     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10432                 htab->splt->contents + i * 4);
10433 }
10434
10435 /* Finish up the dynamic sections.  */
10436
10437 bfd_boolean
10438 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10439                                        struct bfd_link_info *info)
10440 {
10441   bfd *dynobj;
10442   asection *sdyn;
10443   asection *sgot;
10444   struct mips_got_info *gg, *g;
10445   struct mips_elf_link_hash_table *htab;
10446
10447   htab = mips_elf_hash_table (info);
10448   BFD_ASSERT (htab != NULL);
10449
10450   dynobj = elf_hash_table (info)->dynobj;
10451
10452   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
10453
10454   sgot = htab->sgot;
10455   gg = htab->got_info;
10456
10457   if (elf_hash_table (info)->dynamic_sections_created)
10458     {
10459       bfd_byte *b;
10460       int dyn_to_skip = 0, dyn_skipped = 0;
10461
10462       BFD_ASSERT (sdyn != NULL);
10463       BFD_ASSERT (gg != NULL);
10464
10465       g = mips_elf_bfd_got (output_bfd, FALSE);
10466       BFD_ASSERT (g != NULL);
10467
10468       for (b = sdyn->contents;
10469            b < sdyn->contents + sdyn->size;
10470            b += MIPS_ELF_DYN_SIZE (dynobj))
10471         {
10472           Elf_Internal_Dyn dyn;
10473           const char *name;
10474           size_t elemsize;
10475           asection *s;
10476           bfd_boolean swap_out_p;
10477
10478           /* Read in the current dynamic entry.  */
10479           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10480
10481           /* Assume that we're going to modify it and write it out.  */
10482           swap_out_p = TRUE;
10483
10484           switch (dyn.d_tag)
10485             {
10486             case DT_RELENT:
10487               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10488               break;
10489
10490             case DT_RELAENT:
10491               BFD_ASSERT (htab->is_vxworks);
10492               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10493               break;
10494
10495             case DT_STRSZ:
10496               /* Rewrite DT_STRSZ.  */
10497               dyn.d_un.d_val =
10498                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10499               break;
10500
10501             case DT_PLTGOT:
10502               s = htab->sgot;
10503               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10504               break;
10505
10506             case DT_MIPS_PLTGOT:
10507               s = htab->sgotplt;
10508               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10509               break;
10510
10511             case DT_MIPS_RLD_VERSION:
10512               dyn.d_un.d_val = 1; /* XXX */
10513               break;
10514
10515             case DT_MIPS_FLAGS:
10516               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10517               break;
10518
10519             case DT_MIPS_TIME_STAMP:
10520               {
10521                 time_t t;
10522                 time (&t);
10523                 dyn.d_un.d_val = t;
10524               }
10525               break;
10526
10527             case DT_MIPS_ICHECKSUM:
10528               /* XXX FIXME: */
10529               swap_out_p = FALSE;
10530               break;
10531
10532             case DT_MIPS_IVERSION:
10533               /* XXX FIXME: */
10534               swap_out_p = FALSE;
10535               break;
10536
10537             case DT_MIPS_BASE_ADDRESS:
10538               s = output_bfd->sections;
10539               BFD_ASSERT (s != NULL);
10540               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10541               break;
10542
10543             case DT_MIPS_LOCAL_GOTNO:
10544               dyn.d_un.d_val = g->local_gotno;
10545               break;
10546
10547             case DT_MIPS_UNREFEXTNO:
10548               /* The index into the dynamic symbol table which is the
10549                  entry of the first external symbol that is not
10550                  referenced within the same object.  */
10551               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10552               break;
10553
10554             case DT_MIPS_GOTSYM:
10555               if (htab->global_gotsym)
10556                 {
10557                   dyn.d_un.d_val = htab->global_gotsym->dynindx;
10558                   break;
10559                 }
10560               /* In case if we don't have global got symbols we default
10561                  to setting DT_MIPS_GOTSYM to the same value as
10562                  DT_MIPS_SYMTABNO, so we just fall through.  */
10563
10564             case DT_MIPS_SYMTABNO:
10565               name = ".dynsym";
10566               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10567               s = bfd_get_section_by_name (output_bfd, name);
10568               BFD_ASSERT (s != NULL);
10569
10570               dyn.d_un.d_val = s->size / elemsize;
10571               break;
10572
10573             case DT_MIPS_HIPAGENO:
10574               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10575               break;
10576
10577             case DT_MIPS_RLD_MAP:
10578               {
10579                 struct elf_link_hash_entry *h;
10580                 h = mips_elf_hash_table (info)->rld_symbol;
10581                 if (!h)
10582                   {
10583                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10584                     swap_out_p = FALSE;
10585                     break;
10586                   }
10587                 s = h->root.u.def.section;
10588                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10589                                   + h->root.u.def.value);
10590               }
10591               break;
10592
10593             case DT_MIPS_OPTIONS:
10594               s = (bfd_get_section_by_name
10595                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10596               dyn.d_un.d_ptr = s->vma;
10597               break;
10598
10599             case DT_RELASZ:
10600               BFD_ASSERT (htab->is_vxworks);
10601               /* The count does not include the JUMP_SLOT relocations.  */
10602               if (htab->srelplt)
10603                 dyn.d_un.d_val -= htab->srelplt->size;
10604               break;
10605
10606             case DT_PLTREL:
10607               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10608               if (htab->is_vxworks)
10609                 dyn.d_un.d_val = DT_RELA;
10610               else
10611                 dyn.d_un.d_val = DT_REL;
10612               break;
10613
10614             case DT_PLTRELSZ:
10615               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10616               dyn.d_un.d_val = htab->srelplt->size;
10617               break;
10618
10619             case DT_JMPREL:
10620               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10621               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10622                                 + htab->srelplt->output_offset);
10623               break;
10624
10625             case DT_TEXTREL:
10626               /* If we didn't need any text relocations after all, delete
10627                  the dynamic tag.  */
10628               if (!(info->flags & DF_TEXTREL))
10629                 {
10630                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10631                   swap_out_p = FALSE;
10632                 }
10633               break;
10634
10635             case DT_FLAGS:
10636               /* If we didn't need any text relocations after all, clear
10637                  DF_TEXTREL from DT_FLAGS.  */
10638               if (!(info->flags & DF_TEXTREL))
10639                 dyn.d_un.d_val &= ~DF_TEXTREL;
10640               else
10641                 swap_out_p = FALSE;
10642               break;
10643
10644             default:
10645               swap_out_p = FALSE;
10646               if (htab->is_vxworks
10647                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10648                 swap_out_p = TRUE;
10649               break;
10650             }
10651
10652           if (swap_out_p || dyn_skipped)
10653             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10654               (dynobj, &dyn, b - dyn_skipped);
10655
10656           if (dyn_to_skip)
10657             {
10658               dyn_skipped += dyn_to_skip;
10659               dyn_to_skip = 0;
10660             }
10661         }
10662
10663       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10664       if (dyn_skipped > 0)
10665         memset (b - dyn_skipped, 0, dyn_skipped);
10666     }
10667
10668   if (sgot != NULL && sgot->size > 0
10669       && !bfd_is_abs_section (sgot->output_section))
10670     {
10671       if (htab->is_vxworks)
10672         {
10673           /* The first entry of the global offset table points to the
10674              ".dynamic" section.  The second is initialized by the
10675              loader and contains the shared library identifier.
10676              The third is also initialized by the loader and points
10677              to the lazy resolution stub.  */
10678           MIPS_ELF_PUT_WORD (output_bfd,
10679                              sdyn->output_offset + sdyn->output_section->vma,
10680                              sgot->contents);
10681           MIPS_ELF_PUT_WORD (output_bfd, 0,
10682                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10683           MIPS_ELF_PUT_WORD (output_bfd, 0,
10684                              sgot->contents
10685                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10686         }
10687       else
10688         {
10689           /* The first entry of the global offset table will be filled at
10690              runtime. The second entry will be used by some runtime loaders.
10691              This isn't the case of IRIX rld.  */
10692           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10693           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10694                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10695         }
10696
10697       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10698          = MIPS_ELF_GOT_SIZE (output_bfd);
10699     }
10700
10701   /* Generate dynamic relocations for the non-primary gots.  */
10702   if (gg != NULL && gg->next)
10703     {
10704       Elf_Internal_Rela rel[3];
10705       bfd_vma addend = 0;
10706
10707       memset (rel, 0, sizeof (rel));
10708       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10709
10710       for (g = gg->next; g->next != gg; g = g->next)
10711         {
10712           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10713             + g->next->tls_gotno;
10714
10715           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10716                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10717           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10718                              sgot->contents
10719                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10720
10721           if (! info->shared)
10722             continue;
10723
10724           while (got_index < g->assigned_gotno)
10725             {
10726               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10727                 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10728               if (!(mips_elf_create_dynamic_relocation
10729                     (output_bfd, info, rel, NULL,
10730                      bfd_abs_section_ptr,
10731                      0, &addend, sgot)))
10732                 return FALSE;
10733               BFD_ASSERT (addend == 0);
10734             }
10735         }
10736     }
10737
10738   /* The generation of dynamic relocations for the non-primary gots
10739      adds more dynamic relocations.  We cannot count them until
10740      here.  */
10741
10742   if (elf_hash_table (info)->dynamic_sections_created)
10743     {
10744       bfd_byte *b;
10745       bfd_boolean swap_out_p;
10746
10747       BFD_ASSERT (sdyn != NULL);
10748
10749       for (b = sdyn->contents;
10750            b < sdyn->contents + sdyn->size;
10751            b += MIPS_ELF_DYN_SIZE (dynobj))
10752         {
10753           Elf_Internal_Dyn dyn;
10754           asection *s;
10755
10756           /* Read in the current dynamic entry.  */
10757           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10758
10759           /* Assume that we're going to modify it and write it out.  */
10760           swap_out_p = TRUE;
10761
10762           switch (dyn.d_tag)
10763             {
10764             case DT_RELSZ:
10765               /* Reduce DT_RELSZ to account for any relocations we
10766                  decided not to make.  This is for the n64 irix rld,
10767                  which doesn't seem to apply any relocations if there
10768                  are trailing null entries.  */
10769               s = mips_elf_rel_dyn_section (info, FALSE);
10770               dyn.d_un.d_val = (s->reloc_count
10771                                 * (ABI_64_P (output_bfd)
10772                                    ? sizeof (Elf64_Mips_External_Rel)
10773                                    : sizeof (Elf32_External_Rel)));
10774               /* Adjust the section size too.  Tools like the prelinker
10775                  can reasonably expect the values to the same.  */
10776               elf_section_data (s->output_section)->this_hdr.sh_size
10777                 = dyn.d_un.d_val;
10778               break;
10779
10780             default:
10781               swap_out_p = FALSE;
10782               break;
10783             }
10784
10785           if (swap_out_p)
10786             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10787               (dynobj, &dyn, b);
10788         }
10789     }
10790
10791   {
10792     asection *s;
10793     Elf32_compact_rel cpt;
10794
10795     if (SGI_COMPAT (output_bfd))
10796       {
10797         /* Write .compact_rel section out.  */
10798         s = bfd_get_linker_section (dynobj, ".compact_rel");
10799         if (s != NULL)
10800           {
10801             cpt.id1 = 1;
10802             cpt.num = s->reloc_count;
10803             cpt.id2 = 2;
10804             cpt.offset = (s->output_section->filepos
10805                           + sizeof (Elf32_External_compact_rel));
10806             cpt.reserved0 = 0;
10807             cpt.reserved1 = 0;
10808             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10809                                             ((Elf32_External_compact_rel *)
10810                                              s->contents));
10811
10812             /* Clean up a dummy stub function entry in .text.  */
10813             if (htab->sstubs != NULL)
10814               {
10815                 file_ptr dummy_offset;
10816
10817                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10818                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10819                 memset (htab->sstubs->contents + dummy_offset, 0,
10820                         htab->function_stub_size);
10821               }
10822           }
10823       }
10824
10825     /* The psABI says that the dynamic relocations must be sorted in
10826        increasing order of r_symndx.  The VxWorks EABI doesn't require
10827        this, and because the code below handles REL rather than RELA
10828        relocations, using it for VxWorks would be outright harmful.  */
10829     if (!htab->is_vxworks)
10830       {
10831         s = mips_elf_rel_dyn_section (info, FALSE);
10832         if (s != NULL
10833             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10834           {
10835             reldyn_sorting_bfd = output_bfd;
10836
10837             if (ABI_64_P (output_bfd))
10838               qsort ((Elf64_External_Rel *) s->contents + 1,
10839                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10840                      sort_dynamic_relocs_64);
10841             else
10842               qsort ((Elf32_External_Rel *) s->contents + 1,
10843                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
10844                      sort_dynamic_relocs);
10845           }
10846       }
10847   }
10848
10849   if (htab->splt && htab->splt->size > 0)
10850     {
10851       if (htab->is_vxworks)
10852         {
10853           if (info->shared)
10854             mips_vxworks_finish_shared_plt (output_bfd, info);
10855           else
10856             mips_vxworks_finish_exec_plt (output_bfd, info);
10857         }
10858       else
10859         {
10860           BFD_ASSERT (!info->shared);
10861           mips_finish_exec_plt (output_bfd, info);
10862         }
10863     }
10864   return TRUE;
10865 }
10866
10867
10868 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10869
10870 static void
10871 mips_set_isa_flags (bfd *abfd)
10872 {
10873   flagword val;
10874
10875   switch (bfd_get_mach (abfd))
10876     {
10877     default:
10878     case bfd_mach_mips3000:
10879       val = E_MIPS_ARCH_1;
10880       break;
10881
10882     case bfd_mach_mips3900:
10883       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10884       break;
10885
10886     case bfd_mach_mips6000:
10887       val = E_MIPS_ARCH_2;
10888       break;
10889
10890     case bfd_mach_mips4000:
10891     case bfd_mach_mips4300:
10892     case bfd_mach_mips4400:
10893     case bfd_mach_mips4600:
10894       val = E_MIPS_ARCH_3;
10895       break;
10896
10897     case bfd_mach_mips4010:
10898       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
10899       break;
10900
10901     case bfd_mach_mips4100:
10902       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
10903       break;
10904
10905     case bfd_mach_mips4111:
10906       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
10907       break;
10908
10909     case bfd_mach_mips4120:
10910       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
10911       break;
10912
10913     case bfd_mach_mips4650:
10914       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
10915       break;
10916
10917     case bfd_mach_mips5400:
10918       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
10919       break;
10920
10921     case bfd_mach_mips5500:
10922       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
10923       break;
10924
10925     case bfd_mach_mips5900:
10926       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
10927       break;
10928
10929     case bfd_mach_mips9000:
10930       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
10931       break;
10932
10933     case bfd_mach_mips5000:
10934     case bfd_mach_mips7000:
10935     case bfd_mach_mips8000:
10936     case bfd_mach_mips10000:
10937     case bfd_mach_mips12000:
10938     case bfd_mach_mips14000:
10939     case bfd_mach_mips16000:
10940       val = E_MIPS_ARCH_4;
10941       break;
10942
10943     case bfd_mach_mips5:
10944       val = E_MIPS_ARCH_5;
10945       break;
10946
10947     case bfd_mach_mips_loongson_2e:
10948       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
10949       break;
10950
10951     case bfd_mach_mips_loongson_2f:
10952       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
10953       break;
10954
10955     case bfd_mach_mips_sb1:
10956       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
10957       break;
10958
10959     case bfd_mach_mips_loongson_3a:
10960       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
10961       break;
10962
10963     case bfd_mach_mips_octeon:
10964     case bfd_mach_mips_octeonp:
10965       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
10966       break;
10967
10968     case bfd_mach_mips_xlr:
10969       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
10970       break;
10971
10972     case bfd_mach_mips_octeon2:
10973       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
10974       break;
10975
10976     case bfd_mach_mipsisa32:
10977       val = E_MIPS_ARCH_32;
10978       break;
10979
10980     case bfd_mach_mipsisa64:
10981       val = E_MIPS_ARCH_64;
10982       break;
10983
10984     case bfd_mach_mipsisa32r2:
10985       val = E_MIPS_ARCH_32R2;
10986       break;
10987
10988     case bfd_mach_mipsisa64r2:
10989       val = E_MIPS_ARCH_64R2;
10990       break;
10991     }
10992   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
10993   elf_elfheader (abfd)->e_flags |= val;
10994
10995 }
10996
10997
10998 /* The final processing done just before writing out a MIPS ELF object
10999    file.  This gets the MIPS architecture right based on the machine
11000    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11001
11002 void
11003 _bfd_mips_elf_final_write_processing (bfd *abfd,
11004                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11005 {
11006   unsigned int i;
11007   Elf_Internal_Shdr **hdrpp;
11008   const char *name;
11009   asection *sec;
11010
11011   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11012      is nonzero.  This is for compatibility with old objects, which used
11013      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11014   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11015     mips_set_isa_flags (abfd);
11016
11017   /* Set the sh_info field for .gptab sections and other appropriate
11018      info for each special section.  */
11019   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11020        i < elf_numsections (abfd);
11021        i++, hdrpp++)
11022     {
11023       switch ((*hdrpp)->sh_type)
11024         {
11025         case SHT_MIPS_MSYM:
11026         case SHT_MIPS_LIBLIST:
11027           sec = bfd_get_section_by_name (abfd, ".dynstr");
11028           if (sec != NULL)
11029             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11030           break;
11031
11032         case SHT_MIPS_GPTAB:
11033           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11034           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11035           BFD_ASSERT (name != NULL
11036                       && CONST_STRNEQ (name, ".gptab."));
11037           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11038           BFD_ASSERT (sec != NULL);
11039           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11040           break;
11041
11042         case SHT_MIPS_CONTENT:
11043           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11044           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11045           BFD_ASSERT (name != NULL
11046                       && CONST_STRNEQ (name, ".MIPS.content"));
11047           sec = bfd_get_section_by_name (abfd,
11048                                          name + sizeof ".MIPS.content" - 1);
11049           BFD_ASSERT (sec != NULL);
11050           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11051           break;
11052
11053         case SHT_MIPS_SYMBOL_LIB:
11054           sec = bfd_get_section_by_name (abfd, ".dynsym");
11055           if (sec != NULL)
11056             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11057           sec = bfd_get_section_by_name (abfd, ".liblist");
11058           if (sec != NULL)
11059             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11060           break;
11061
11062         case SHT_MIPS_EVENTS:
11063           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11064           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11065           BFD_ASSERT (name != NULL);
11066           if (CONST_STRNEQ (name, ".MIPS.events"))
11067             sec = bfd_get_section_by_name (abfd,
11068                                            name + sizeof ".MIPS.events" - 1);
11069           else
11070             {
11071               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
11072               sec = bfd_get_section_by_name (abfd,
11073                                              (name
11074                                               + sizeof ".MIPS.post_rel" - 1));
11075             }
11076           BFD_ASSERT (sec != NULL);
11077           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11078           break;
11079
11080         }
11081     }
11082 }
11083 \f
11084 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
11085    segments.  */
11086
11087 int
11088 _bfd_mips_elf_additional_program_headers (bfd *abfd,
11089                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
11090 {
11091   asection *s;
11092   int ret = 0;
11093
11094   /* See if we need a PT_MIPS_REGINFO segment.  */
11095   s = bfd_get_section_by_name (abfd, ".reginfo");
11096   if (s && (s->flags & SEC_LOAD))
11097     ++ret;
11098
11099   /* See if we need a PT_MIPS_OPTIONS segment.  */
11100   if (IRIX_COMPAT (abfd) == ict_irix6
11101       && bfd_get_section_by_name (abfd,
11102                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11103     ++ret;
11104
11105   /* See if we need a PT_MIPS_RTPROC segment.  */
11106   if (IRIX_COMPAT (abfd) == ict_irix5
11107       && bfd_get_section_by_name (abfd, ".dynamic")
11108       && bfd_get_section_by_name (abfd, ".mdebug"))
11109     ++ret;
11110
11111   /* Allocate a PT_NULL header in dynamic objects.  See
11112      _bfd_mips_elf_modify_segment_map for details.  */
11113   if (!SGI_COMPAT (abfd)
11114       && bfd_get_section_by_name (abfd, ".dynamic"))
11115     ++ret;
11116
11117   return ret;
11118 }
11119
11120 /* Modify the segment map for an IRIX5 executable.  */
11121
11122 bfd_boolean
11123 _bfd_mips_elf_modify_segment_map (bfd *abfd,
11124                                   struct bfd_link_info *info)
11125 {
11126   asection *s;
11127   struct elf_segment_map *m, **pm;
11128   bfd_size_type amt;
11129
11130   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11131      segment.  */
11132   s = bfd_get_section_by_name (abfd, ".reginfo");
11133   if (s != NULL && (s->flags & SEC_LOAD) != 0)
11134     {
11135       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11136         if (m->p_type == PT_MIPS_REGINFO)
11137           break;
11138       if (m == NULL)
11139         {
11140           amt = sizeof *m;
11141           m = bfd_zalloc (abfd, amt);
11142           if (m == NULL)
11143             return FALSE;
11144
11145           m->p_type = PT_MIPS_REGINFO;
11146           m->count = 1;
11147           m->sections[0] = s;
11148
11149           /* We want to put it after the PHDR and INTERP segments.  */
11150           pm = &elf_tdata (abfd)->segment_map;
11151           while (*pm != NULL
11152                  && ((*pm)->p_type == PT_PHDR
11153                      || (*pm)->p_type == PT_INTERP))
11154             pm = &(*pm)->next;
11155
11156           m->next = *pm;
11157           *pm = m;
11158         }
11159     }
11160
11161   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11162      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
11163      PT_MIPS_OPTIONS segment immediately following the program header
11164      table.  */
11165   if (NEWABI_P (abfd)
11166       /* On non-IRIX6 new abi, we'll have already created a segment
11167          for this section, so don't create another.  I'm not sure this
11168          is not also the case for IRIX 6, but I can't test it right
11169          now.  */
11170       && IRIX_COMPAT (abfd) == ict_irix6)
11171     {
11172       for (s = abfd->sections; s; s = s->next)
11173         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11174           break;
11175
11176       if (s)
11177         {
11178           struct elf_segment_map *options_segment;
11179
11180           pm = &elf_tdata (abfd)->segment_map;
11181           while (*pm != NULL
11182                  && ((*pm)->p_type == PT_PHDR
11183                      || (*pm)->p_type == PT_INTERP))
11184             pm = &(*pm)->next;
11185
11186           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11187             {
11188               amt = sizeof (struct elf_segment_map);
11189               options_segment = bfd_zalloc (abfd, amt);
11190               options_segment->next = *pm;
11191               options_segment->p_type = PT_MIPS_OPTIONS;
11192               options_segment->p_flags = PF_R;
11193               options_segment->p_flags_valid = TRUE;
11194               options_segment->count = 1;
11195               options_segment->sections[0] = s;
11196               *pm = options_segment;
11197             }
11198         }
11199     }
11200   else
11201     {
11202       if (IRIX_COMPAT (abfd) == ict_irix5)
11203         {
11204           /* If there are .dynamic and .mdebug sections, we make a room
11205              for the RTPROC header.  FIXME: Rewrite without section names.  */
11206           if (bfd_get_section_by_name (abfd, ".interp") == NULL
11207               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11208               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11209             {
11210               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11211                 if (m->p_type == PT_MIPS_RTPROC)
11212                   break;
11213               if (m == NULL)
11214                 {
11215                   amt = sizeof *m;
11216                   m = bfd_zalloc (abfd, amt);
11217                   if (m == NULL)
11218                     return FALSE;
11219
11220                   m->p_type = PT_MIPS_RTPROC;
11221
11222                   s = bfd_get_section_by_name (abfd, ".rtproc");
11223                   if (s == NULL)
11224                     {
11225                       m->count = 0;
11226                       m->p_flags = 0;
11227                       m->p_flags_valid = 1;
11228                     }
11229                   else
11230                     {
11231                       m->count = 1;
11232                       m->sections[0] = s;
11233                     }
11234
11235                   /* We want to put it after the DYNAMIC segment.  */
11236                   pm = &elf_tdata (abfd)->segment_map;
11237                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11238                     pm = &(*pm)->next;
11239                   if (*pm != NULL)
11240                     pm = &(*pm)->next;
11241
11242                   m->next = *pm;
11243                   *pm = m;
11244                 }
11245             }
11246         }
11247       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
11248          .dynstr, .dynsym, and .hash sections, and everything in
11249          between.  */
11250       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
11251            pm = &(*pm)->next)
11252         if ((*pm)->p_type == PT_DYNAMIC)
11253           break;
11254       m = *pm;
11255       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11256         {
11257           /* For a normal mips executable the permissions for the PT_DYNAMIC
11258              segment are read, write and execute. We do that here since
11259              the code in elf.c sets only the read permission. This matters
11260              sometimes for the dynamic linker.  */
11261           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11262             {
11263               m->p_flags = PF_R | PF_W | PF_X;
11264               m->p_flags_valid = 1;
11265             }
11266         }
11267       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11268          glibc's dynamic linker has traditionally derived the number of
11269          tags from the p_filesz field, and sometimes allocates stack
11270          arrays of that size.  An overly-big PT_DYNAMIC segment can
11271          be actively harmful in such cases.  Making PT_DYNAMIC contain
11272          other sections can also make life hard for the prelinker,
11273          which might move one of the other sections to a different
11274          PT_LOAD segment.  */
11275       if (SGI_COMPAT (abfd)
11276           && m != NULL
11277           && m->count == 1
11278           && strcmp (m->sections[0]->name, ".dynamic") == 0)
11279         {
11280           static const char *sec_names[] =
11281           {
11282             ".dynamic", ".dynstr", ".dynsym", ".hash"
11283           };
11284           bfd_vma low, high;
11285           unsigned int i, c;
11286           struct elf_segment_map *n;
11287
11288           low = ~(bfd_vma) 0;
11289           high = 0;
11290           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11291             {
11292               s = bfd_get_section_by_name (abfd, sec_names[i]);
11293               if (s != NULL && (s->flags & SEC_LOAD) != 0)
11294                 {
11295                   bfd_size_type sz;
11296
11297                   if (low > s->vma)
11298                     low = s->vma;
11299                   sz = s->size;
11300                   if (high < s->vma + sz)
11301                     high = s->vma + sz;
11302                 }
11303             }
11304
11305           c = 0;
11306           for (s = abfd->sections; s != NULL; s = s->next)
11307             if ((s->flags & SEC_LOAD) != 0
11308                 && s->vma >= low
11309                 && s->vma + s->size <= high)
11310               ++c;
11311
11312           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
11313           n = bfd_zalloc (abfd, amt);
11314           if (n == NULL)
11315             return FALSE;
11316           *n = *m;
11317           n->count = c;
11318
11319           i = 0;
11320           for (s = abfd->sections; s != NULL; s = s->next)
11321             {
11322               if ((s->flags & SEC_LOAD) != 0
11323                   && s->vma >= low
11324                   && s->vma + s->size <= high)
11325                 {
11326                   n->sections[i] = s;
11327                   ++i;
11328                 }
11329             }
11330
11331           *pm = n;
11332         }
11333     }
11334
11335   /* Allocate a spare program header in dynamic objects so that tools
11336      like the prelinker can add an extra PT_LOAD entry.
11337
11338      If the prelinker needs to make room for a new PT_LOAD entry, its
11339      standard procedure is to move the first (read-only) sections into
11340      the new (writable) segment.  However, the MIPS ABI requires
11341      .dynamic to be in a read-only segment, and the section will often
11342      start within sizeof (ElfNN_Phdr) bytes of the last program header.
11343
11344      Although the prelinker could in principle move .dynamic to a
11345      writable segment, it seems better to allocate a spare program
11346      header instead, and avoid the need to move any sections.
11347      There is a long tradition of allocating spare dynamic tags,
11348      so allocating a spare program header seems like a natural
11349      extension.
11350
11351      If INFO is NULL, we may be copying an already prelinked binary
11352      with objcopy or strip, so do not add this header.  */
11353   if (info != NULL
11354       && !SGI_COMPAT (abfd)
11355       && bfd_get_section_by_name (abfd, ".dynamic"))
11356     {
11357       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
11358         if ((*pm)->p_type == PT_NULL)
11359           break;
11360       if (*pm == NULL)
11361         {
11362           m = bfd_zalloc (abfd, sizeof (*m));
11363           if (m == NULL)
11364             return FALSE;
11365
11366           m->p_type = PT_NULL;
11367           *pm = m;
11368         }
11369     }
11370
11371   return TRUE;
11372 }
11373 \f
11374 /* Return the section that should be marked against GC for a given
11375    relocation.  */
11376
11377 asection *
11378 _bfd_mips_elf_gc_mark_hook (asection *sec,
11379                             struct bfd_link_info *info,
11380                             Elf_Internal_Rela *rel,
11381                             struct elf_link_hash_entry *h,
11382                             Elf_Internal_Sym *sym)
11383 {
11384   /* ??? Do mips16 stub sections need to be handled special?  */
11385
11386   if (h != NULL)
11387     switch (ELF_R_TYPE (sec->owner, rel->r_info))
11388       {
11389       case R_MIPS_GNU_VTINHERIT:
11390       case R_MIPS_GNU_VTENTRY:
11391         return NULL;
11392       }
11393
11394   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11395 }
11396
11397 /* Update the got entry reference counts for the section being removed.  */
11398
11399 bfd_boolean
11400 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11401                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
11402                              asection *sec ATTRIBUTE_UNUSED,
11403                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11404 {
11405 #if 0
11406   Elf_Internal_Shdr *symtab_hdr;
11407   struct elf_link_hash_entry **sym_hashes;
11408   bfd_signed_vma *local_got_refcounts;
11409   const Elf_Internal_Rela *rel, *relend;
11410   unsigned long r_symndx;
11411   struct elf_link_hash_entry *h;
11412
11413   if (info->relocatable)
11414     return TRUE;
11415
11416   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11417   sym_hashes = elf_sym_hashes (abfd);
11418   local_got_refcounts = elf_local_got_refcounts (abfd);
11419
11420   relend = relocs + sec->reloc_count;
11421   for (rel = relocs; rel < relend; rel++)
11422     switch (ELF_R_TYPE (abfd, rel->r_info))
11423       {
11424       case R_MIPS16_GOT16:
11425       case R_MIPS16_CALL16:
11426       case R_MIPS_GOT16:
11427       case R_MIPS_CALL16:
11428       case R_MIPS_CALL_HI16:
11429       case R_MIPS_CALL_LO16:
11430       case R_MIPS_GOT_HI16:
11431       case R_MIPS_GOT_LO16:
11432       case R_MIPS_GOT_DISP:
11433       case R_MIPS_GOT_PAGE:
11434       case R_MIPS_GOT_OFST:
11435       case R_MICROMIPS_GOT16:
11436       case R_MICROMIPS_CALL16:
11437       case R_MICROMIPS_CALL_HI16:
11438       case R_MICROMIPS_CALL_LO16:
11439       case R_MICROMIPS_GOT_HI16:
11440       case R_MICROMIPS_GOT_LO16:
11441       case R_MICROMIPS_GOT_DISP:
11442       case R_MICROMIPS_GOT_PAGE:
11443       case R_MICROMIPS_GOT_OFST:
11444         /* ??? It would seem that the existing MIPS code does no sort
11445            of reference counting or whatnot on its GOT and PLT entries,
11446            so it is not possible to garbage collect them at this time.  */
11447         break;
11448
11449       default:
11450         break;
11451       }
11452 #endif
11453
11454   return TRUE;
11455 }
11456 \f
11457 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11458    hiding the old indirect symbol.  Process additional relocation
11459    information.  Also called for weakdefs, in which case we just let
11460    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11461
11462 void
11463 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11464                                     struct elf_link_hash_entry *dir,
11465                                     struct elf_link_hash_entry *ind)
11466 {
11467   struct mips_elf_link_hash_entry *dirmips, *indmips;
11468
11469   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11470
11471   dirmips = (struct mips_elf_link_hash_entry *) dir;
11472   indmips = (struct mips_elf_link_hash_entry *) ind;
11473   /* Any absolute non-dynamic relocations against an indirect or weak
11474      definition will be against the target symbol.  */
11475   if (indmips->has_static_relocs)
11476     dirmips->has_static_relocs = TRUE;
11477
11478   if (ind->root.type != bfd_link_hash_indirect)
11479     return;
11480
11481   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11482   if (indmips->readonly_reloc)
11483     dirmips->readonly_reloc = TRUE;
11484   if (indmips->no_fn_stub)
11485     dirmips->no_fn_stub = TRUE;
11486   if (indmips->fn_stub)
11487     {
11488       dirmips->fn_stub = indmips->fn_stub;
11489       indmips->fn_stub = NULL;
11490     }
11491   if (indmips->need_fn_stub)
11492     {
11493       dirmips->need_fn_stub = TRUE;
11494       indmips->need_fn_stub = FALSE;
11495     }
11496   if (indmips->call_stub)
11497     {
11498       dirmips->call_stub = indmips->call_stub;
11499       indmips->call_stub = NULL;
11500     }
11501   if (indmips->call_fp_stub)
11502     {
11503       dirmips->call_fp_stub = indmips->call_fp_stub;
11504       indmips->call_fp_stub = NULL;
11505     }
11506   if (indmips->global_got_area < dirmips->global_got_area)
11507     dirmips->global_got_area = indmips->global_got_area;
11508   if (indmips->global_got_area < GGA_NONE)
11509     indmips->global_got_area = GGA_NONE;
11510   if (indmips->has_nonpic_branches)
11511     dirmips->has_nonpic_branches = TRUE;
11512 }
11513 \f
11514 #define PDR_SIZE 32
11515
11516 bfd_boolean
11517 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11518                             struct bfd_link_info *info)
11519 {
11520   asection *o;
11521   bfd_boolean ret = FALSE;
11522   unsigned char *tdata;
11523   size_t i, skip;
11524
11525   o = bfd_get_section_by_name (abfd, ".pdr");
11526   if (! o)
11527     return FALSE;
11528   if (o->size == 0)
11529     return FALSE;
11530   if (o->size % PDR_SIZE != 0)
11531     return FALSE;
11532   if (o->output_section != NULL
11533       && bfd_is_abs_section (o->output_section))
11534     return FALSE;
11535
11536   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11537   if (! tdata)
11538     return FALSE;
11539
11540   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11541                                             info->keep_memory);
11542   if (!cookie->rels)
11543     {
11544       free (tdata);
11545       return FALSE;
11546     }
11547
11548   cookie->rel = cookie->rels;
11549   cookie->relend = cookie->rels + o->reloc_count;
11550
11551   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11552     {
11553       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11554         {
11555           tdata[i] = 1;
11556           skip ++;
11557         }
11558     }
11559
11560   if (skip != 0)
11561     {
11562       mips_elf_section_data (o)->u.tdata = tdata;
11563       o->size -= skip * PDR_SIZE;
11564       ret = TRUE;
11565     }
11566   else
11567     free (tdata);
11568
11569   if (! info->keep_memory)
11570     free (cookie->rels);
11571
11572   return ret;
11573 }
11574
11575 bfd_boolean
11576 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11577 {
11578   if (strcmp (sec->name, ".pdr") == 0)
11579     return TRUE;
11580   return FALSE;
11581 }
11582
11583 bfd_boolean
11584 _bfd_mips_elf_write_section (bfd *output_bfd,
11585                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11586                              asection *sec, bfd_byte *contents)
11587 {
11588   bfd_byte *to, *from, *end;
11589   int i;
11590
11591   if (strcmp (sec->name, ".pdr") != 0)
11592     return FALSE;
11593
11594   if (mips_elf_section_data (sec)->u.tdata == NULL)
11595     return FALSE;
11596
11597   to = contents;
11598   end = contents + sec->size;
11599   for (from = contents, i = 0;
11600        from < end;
11601        from += PDR_SIZE, i++)
11602     {
11603       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11604         continue;
11605       if (to != from)
11606         memcpy (to, from, PDR_SIZE);
11607       to += PDR_SIZE;
11608     }
11609   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11610                             sec->output_offset, sec->size);
11611   return TRUE;
11612 }
11613 \f
11614 /* microMIPS code retains local labels for linker relaxation.  Omit them
11615    from output by default for clarity.  */
11616
11617 bfd_boolean
11618 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11619 {
11620   return _bfd_elf_is_local_label_name (abfd, sym->name);
11621 }
11622
11623 /* MIPS ELF uses a special find_nearest_line routine in order the
11624    handle the ECOFF debugging information.  */
11625
11626 struct mips_elf_find_line
11627 {
11628   struct ecoff_debug_info d;
11629   struct ecoff_find_line i;
11630 };
11631
11632 bfd_boolean
11633 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11634                                  asymbol **symbols, bfd_vma offset,
11635                                  const char **filename_ptr,
11636                                  const char **functionname_ptr,
11637                                  unsigned int *line_ptr)
11638 {
11639   asection *msec;
11640
11641   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11642                                      filename_ptr, functionname_ptr,
11643                                      line_ptr))
11644     return TRUE;
11645
11646   if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11647                                      section, symbols, offset,
11648                                      filename_ptr, functionname_ptr,
11649                                      line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
11650                                      &elf_tdata (abfd)->dwarf2_find_line_info))
11651     return TRUE;
11652
11653   msec = bfd_get_section_by_name (abfd, ".mdebug");
11654   if (msec != NULL)
11655     {
11656       flagword origflags;
11657       struct mips_elf_find_line *fi;
11658       const struct ecoff_debug_swap * const swap =
11659         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11660
11661       /* If we are called during a link, mips_elf_final_link may have
11662          cleared the SEC_HAS_CONTENTS field.  We force it back on here
11663          if appropriate (which it normally will be).  */
11664       origflags = msec->flags;
11665       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11666         msec->flags |= SEC_HAS_CONTENTS;
11667
11668       fi = mips_elf_tdata (abfd)->find_line_info;
11669       if (fi == NULL)
11670         {
11671           bfd_size_type external_fdr_size;
11672           char *fraw_src;
11673           char *fraw_end;
11674           struct fdr *fdr_ptr;
11675           bfd_size_type amt = sizeof (struct mips_elf_find_line);
11676
11677           fi = bfd_zalloc (abfd, amt);
11678           if (fi == NULL)
11679             {
11680               msec->flags = origflags;
11681               return FALSE;
11682             }
11683
11684           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11685             {
11686               msec->flags = origflags;
11687               return FALSE;
11688             }
11689
11690           /* Swap in the FDR information.  */
11691           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11692           fi->d.fdr = bfd_alloc (abfd, amt);
11693           if (fi->d.fdr == NULL)
11694             {
11695               msec->flags = origflags;
11696               return FALSE;
11697             }
11698           external_fdr_size = swap->external_fdr_size;
11699           fdr_ptr = fi->d.fdr;
11700           fraw_src = (char *) fi->d.external_fdr;
11701           fraw_end = (fraw_src
11702                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
11703           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11704             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11705
11706           mips_elf_tdata (abfd)->find_line_info = fi;
11707
11708           /* Note that we don't bother to ever free this information.
11709              find_nearest_line is either called all the time, as in
11710              objdump -l, so the information should be saved, or it is
11711              rarely called, as in ld error messages, so the memory
11712              wasted is unimportant.  Still, it would probably be a
11713              good idea for free_cached_info to throw it away.  */
11714         }
11715
11716       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11717                                   &fi->i, filename_ptr, functionname_ptr,
11718                                   line_ptr))
11719         {
11720           msec->flags = origflags;
11721           return TRUE;
11722         }
11723
11724       msec->flags = origflags;
11725     }
11726
11727   /* Fall back on the generic ELF find_nearest_line routine.  */
11728
11729   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11730                                      filename_ptr, functionname_ptr,
11731                                      line_ptr);
11732 }
11733
11734 bfd_boolean
11735 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11736                                  const char **filename_ptr,
11737                                  const char **functionname_ptr,
11738                                  unsigned int *line_ptr)
11739 {
11740   bfd_boolean found;
11741   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11742                                          functionname_ptr, line_ptr,
11743                                          & elf_tdata (abfd)->dwarf2_find_line_info);
11744   return found;
11745 }
11746
11747 \f
11748 /* When are writing out the .options or .MIPS.options section,
11749    remember the bytes we are writing out, so that we can install the
11750    GP value in the section_processing routine.  */
11751
11752 bfd_boolean
11753 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11754                                     const void *location,
11755                                     file_ptr offset, bfd_size_type count)
11756 {
11757   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11758     {
11759       bfd_byte *c;
11760
11761       if (elf_section_data (section) == NULL)
11762         {
11763           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11764           section->used_by_bfd = bfd_zalloc (abfd, amt);
11765           if (elf_section_data (section) == NULL)
11766             return FALSE;
11767         }
11768       c = mips_elf_section_data (section)->u.tdata;
11769       if (c == NULL)
11770         {
11771           c = bfd_zalloc (abfd, section->size);
11772           if (c == NULL)
11773             return FALSE;
11774           mips_elf_section_data (section)->u.tdata = c;
11775         }
11776
11777       memcpy (c + offset, location, count);
11778     }
11779
11780   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11781                                         count);
11782 }
11783
11784 /* This is almost identical to bfd_generic_get_... except that some
11785    MIPS relocations need to be handled specially.  Sigh.  */
11786
11787 bfd_byte *
11788 _bfd_elf_mips_get_relocated_section_contents
11789   (bfd *abfd,
11790    struct bfd_link_info *link_info,
11791    struct bfd_link_order *link_order,
11792    bfd_byte *data,
11793    bfd_boolean relocatable,
11794    asymbol **symbols)
11795 {
11796   /* Get enough memory to hold the stuff */
11797   bfd *input_bfd = link_order->u.indirect.section->owner;
11798   asection *input_section = link_order->u.indirect.section;
11799   bfd_size_type sz;
11800
11801   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11802   arelent **reloc_vector = NULL;
11803   long reloc_count;
11804
11805   if (reloc_size < 0)
11806     goto error_return;
11807
11808   reloc_vector = bfd_malloc (reloc_size);
11809   if (reloc_vector == NULL && reloc_size != 0)
11810     goto error_return;
11811
11812   /* read in the section */
11813   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11814   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11815     goto error_return;
11816
11817   reloc_count = bfd_canonicalize_reloc (input_bfd,
11818                                         input_section,
11819                                         reloc_vector,
11820                                         symbols);
11821   if (reloc_count < 0)
11822     goto error_return;
11823
11824   if (reloc_count > 0)
11825     {
11826       arelent **parent;
11827       /* for mips */
11828       int gp_found;
11829       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
11830
11831       {
11832         struct bfd_hash_entry *h;
11833         struct bfd_link_hash_entry *lh;
11834         /* Skip all this stuff if we aren't mixing formats.  */
11835         if (abfd && input_bfd
11836             && abfd->xvec == input_bfd->xvec)
11837           lh = 0;
11838         else
11839           {
11840             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11841             lh = (struct bfd_link_hash_entry *) h;
11842           }
11843       lookup:
11844         if (lh)
11845           {
11846             switch (lh->type)
11847               {
11848               case bfd_link_hash_undefined:
11849               case bfd_link_hash_undefweak:
11850               case bfd_link_hash_common:
11851                 gp_found = 0;
11852                 break;
11853               case bfd_link_hash_defined:
11854               case bfd_link_hash_defweak:
11855                 gp_found = 1;
11856                 gp = lh->u.def.value;
11857                 break;
11858               case bfd_link_hash_indirect:
11859               case bfd_link_hash_warning:
11860                 lh = lh->u.i.link;
11861                 /* @@FIXME  ignoring warning for now */
11862                 goto lookup;
11863               case bfd_link_hash_new:
11864               default:
11865                 abort ();
11866               }
11867           }
11868         else
11869           gp_found = 0;
11870       }
11871       /* end mips */
11872       for (parent = reloc_vector; *parent != NULL; parent++)
11873         {
11874           char *error_message = NULL;
11875           bfd_reloc_status_type r;
11876
11877           /* Specific to MIPS: Deal with relocation types that require
11878              knowing the gp of the output bfd.  */
11879           asymbol *sym = *(*parent)->sym_ptr_ptr;
11880
11881           /* If we've managed to find the gp and have a special
11882              function for the relocation then go ahead, else default
11883              to the generic handling.  */
11884           if (gp_found
11885               && (*parent)->howto->special_function
11886               == _bfd_mips_elf32_gprel16_reloc)
11887             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11888                                                input_section, relocatable,
11889                                                data, gp);
11890           else
11891             r = bfd_perform_relocation (input_bfd, *parent, data,
11892                                         input_section,
11893                                         relocatable ? abfd : NULL,
11894                                         &error_message);
11895
11896           if (relocatable)
11897             {
11898               asection *os = input_section->output_section;
11899
11900               /* A partial link, so keep the relocs */
11901               os->orelocation[os->reloc_count] = *parent;
11902               os->reloc_count++;
11903             }
11904
11905           if (r != bfd_reloc_ok)
11906             {
11907               switch (r)
11908                 {
11909                 case bfd_reloc_undefined:
11910                   if (!((*link_info->callbacks->undefined_symbol)
11911                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11912                          input_bfd, input_section, (*parent)->address, TRUE)))
11913                     goto error_return;
11914                   break;
11915                 case bfd_reloc_dangerous:
11916                   BFD_ASSERT (error_message != NULL);
11917                   if (!((*link_info->callbacks->reloc_dangerous)
11918                         (link_info, error_message, input_bfd, input_section,
11919                          (*parent)->address)))
11920                     goto error_return;
11921                   break;
11922                 case bfd_reloc_overflow:
11923                   if (!((*link_info->callbacks->reloc_overflow)
11924                         (link_info, NULL,
11925                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11926                          (*parent)->howto->name, (*parent)->addend,
11927                          input_bfd, input_section, (*parent)->address)))
11928                     goto error_return;
11929                   break;
11930                 case bfd_reloc_outofrange:
11931                 default:
11932                   abort ();
11933                   break;
11934                 }
11935
11936             }
11937         }
11938     }
11939   if (reloc_vector != NULL)
11940     free (reloc_vector);
11941   return data;
11942
11943 error_return:
11944   if (reloc_vector != NULL)
11945     free (reloc_vector);
11946   return NULL;
11947 }
11948 \f
11949 static bfd_boolean
11950 mips_elf_relax_delete_bytes (bfd *abfd,
11951                              asection *sec, bfd_vma addr, int count)
11952 {
11953   Elf_Internal_Shdr *symtab_hdr;
11954   unsigned int sec_shndx;
11955   bfd_byte *contents;
11956   Elf_Internal_Rela *irel, *irelend;
11957   Elf_Internal_Sym *isym;
11958   Elf_Internal_Sym *isymend;
11959   struct elf_link_hash_entry **sym_hashes;
11960   struct elf_link_hash_entry **end_hashes;
11961   struct elf_link_hash_entry **start_hashes;
11962   unsigned int symcount;
11963
11964   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
11965   contents = elf_section_data (sec)->this_hdr.contents;
11966
11967   irel = elf_section_data (sec)->relocs;
11968   irelend = irel + sec->reloc_count;
11969
11970   /* Actually delete the bytes.  */
11971   memmove (contents + addr, contents + addr + count,
11972            (size_t) (sec->size - addr - count));
11973   sec->size -= count;
11974
11975   /* Adjust all the relocs.  */
11976   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
11977     {
11978       /* Get the new reloc address.  */
11979       if (irel->r_offset > addr)
11980         irel->r_offset -= count;
11981     }
11982
11983   BFD_ASSERT (addr % 2 == 0);
11984   BFD_ASSERT (count % 2 == 0);
11985
11986   /* Adjust the local symbols defined in this section.  */
11987   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11988   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
11989   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
11990     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
11991       isym->st_value -= count;
11992
11993   /* Now adjust the global symbols defined in this section.  */
11994   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
11995               - symtab_hdr->sh_info);
11996   sym_hashes = start_hashes = elf_sym_hashes (abfd);
11997   end_hashes = sym_hashes + symcount;
11998
11999   for (; sym_hashes < end_hashes; sym_hashes++)
12000     {
12001       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12002
12003       if ((sym_hash->root.type == bfd_link_hash_defined
12004            || sym_hash->root.type == bfd_link_hash_defweak)
12005           && sym_hash->root.u.def.section == sec)
12006         {
12007           bfd_vma value = sym_hash->root.u.def.value;
12008
12009           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12010             value &= MINUS_TWO;
12011           if (value > addr)
12012             sym_hash->root.u.def.value -= count;
12013         }
12014     }
12015
12016   return TRUE;
12017 }
12018
12019
12020 /* Opcodes needed for microMIPS relaxation as found in
12021    opcodes/micromips-opc.c.  */
12022
12023 struct opcode_descriptor {
12024   unsigned long match;
12025   unsigned long mask;
12026 };
12027
12028 /* The $ra register aka $31.  */
12029
12030 #define RA 31
12031
12032 /* 32-bit instruction format register fields.  */
12033
12034 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12035 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12036
12037 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
12038
12039 #define OP16_VALID_REG(r) \
12040   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12041
12042
12043 /* 32-bit and 16-bit branches.  */
12044
12045 static const struct opcode_descriptor b_insns_32[] = {
12046   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
12047   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12048   { 0, 0 }  /* End marker for find_match().  */
12049 };
12050
12051 static const struct opcode_descriptor bc_insn_32 =
12052   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
12053
12054 static const struct opcode_descriptor bz_insn_32 =
12055   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
12056
12057 static const struct opcode_descriptor bzal_insn_32 =
12058   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
12059
12060 static const struct opcode_descriptor beq_insn_32 =
12061   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
12062
12063 static const struct opcode_descriptor b_insn_16 =
12064   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
12065
12066 static const struct opcode_descriptor bz_insn_16 =
12067   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
12068
12069
12070 /* 32-bit and 16-bit branch EQ and NE zero.  */
12071
12072 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12073    eq and second the ne.  This convention is used when replacing a
12074    32-bit BEQ/BNE with the 16-bit version.  */
12075
12076 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12077
12078 static const struct opcode_descriptor bz_rs_insns_32[] = {
12079   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
12080   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
12081   { 0, 0 }  /* End marker for find_match().  */
12082 };
12083
12084 static const struct opcode_descriptor bz_rt_insns_32[] = {
12085   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
12086   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
12087   { 0, 0 }  /* End marker for find_match().  */
12088 };
12089
12090 static const struct opcode_descriptor bzc_insns_32[] = {
12091   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
12092   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
12093   { 0, 0 }  /* End marker for find_match().  */
12094 };
12095
12096 static const struct opcode_descriptor bz_insns_16[] = {
12097   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
12098   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
12099   { 0, 0 }  /* End marker for find_match().  */
12100 };
12101
12102 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
12103
12104 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12105 #define BZ16_REG_FIELD(r) \
12106   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12107
12108
12109 /* 32-bit instructions with a delay slot.  */
12110
12111 static const struct opcode_descriptor jal_insn_32_bd16 =
12112   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
12113
12114 static const struct opcode_descriptor jal_insn_32_bd32 =
12115   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
12116
12117 static const struct opcode_descriptor jal_x_insn_32_bd32 =
12118   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
12119
12120 static const struct opcode_descriptor j_insn_32 =
12121   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
12122
12123 static const struct opcode_descriptor jalr_insn_32 =
12124   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
12125
12126 /* This table can be compacted, because no opcode replacement is made.  */
12127
12128 static const struct opcode_descriptor ds_insns_32_bd16[] = {
12129   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
12130
12131   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
12132   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
12133
12134   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
12135   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
12136   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
12137   { 0, 0 }  /* End marker for find_match().  */
12138 };
12139
12140 /* This table can be compacted, because no opcode replacement is made.  */
12141
12142 static const struct opcode_descriptor ds_insns_32_bd32[] = {
12143   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
12144
12145   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
12146   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
12147   { 0, 0 }  /* End marker for find_match().  */
12148 };
12149
12150
12151 /* 16-bit instructions with a delay slot.  */
12152
12153 static const struct opcode_descriptor jalr_insn_16_bd16 =
12154   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
12155
12156 static const struct opcode_descriptor jalr_insn_16_bd32 =
12157   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
12158
12159 static const struct opcode_descriptor jr_insn_16 =
12160   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
12161
12162 #define JR16_REG(opcode) ((opcode) & 0x1f)
12163
12164 /* This table can be compacted, because no opcode replacement is made.  */
12165
12166 static const struct opcode_descriptor ds_insns_16_bd16[] = {
12167   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
12168
12169   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
12170   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
12171   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
12172   { 0, 0 }  /* End marker for find_match().  */
12173 };
12174
12175
12176 /* LUI instruction.  */
12177
12178 static const struct opcode_descriptor lui_insn =
12179  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
12180
12181
12182 /* ADDIU instruction.  */
12183
12184 static const struct opcode_descriptor addiu_insn =
12185   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
12186
12187 static const struct opcode_descriptor addiupc_insn =
12188   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
12189
12190 #define ADDIUPC_REG_FIELD(r) \
12191   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12192
12193
12194 /* Relaxable instructions in a JAL delay slot: MOVE.  */
12195
12196 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
12197    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
12198 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12199 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12200
12201 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12202 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
12203
12204 static const struct opcode_descriptor move_insns_32[] = {
12205   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12206   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
12207   { 0, 0 }  /* End marker for find_match().  */
12208 };
12209
12210 static const struct opcode_descriptor move_insn_16 =
12211   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
12212
12213
12214 /* NOP instructions.  */
12215
12216 static const struct opcode_descriptor nop_insn_32 =
12217   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
12218
12219 static const struct opcode_descriptor nop_insn_16 =
12220   { /* "nop",   "",             */ 0x0c00,     0xffff };
12221
12222
12223 /* Instruction match support.  */
12224
12225 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12226
12227 static int
12228 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12229 {
12230   unsigned long indx;
12231
12232   for (indx = 0; insn[indx].mask != 0; indx++)
12233     if (MATCH (opcode, insn[indx]))
12234       return indx;
12235
12236   return -1;
12237 }
12238
12239
12240 /* Branch and delay slot decoding support.  */
12241
12242 /* If PTR points to what *might* be a 16-bit branch or jump, then
12243    return the minimum length of its delay slot, otherwise return 0.
12244    Non-zero results are not definitive as we might be checking against
12245    the second half of another instruction.  */
12246
12247 static int
12248 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12249 {
12250   unsigned long opcode;
12251   int bdsize;
12252
12253   opcode = bfd_get_16 (abfd, ptr);
12254   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12255     /* 16-bit branch/jump with a 32-bit delay slot.  */
12256     bdsize = 4;
12257   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12258            || find_match (opcode, ds_insns_16_bd16) >= 0)
12259     /* 16-bit branch/jump with a 16-bit delay slot.  */
12260     bdsize = 2;
12261   else
12262     /* No delay slot.  */
12263     bdsize = 0;
12264
12265   return bdsize;
12266 }
12267
12268 /* If PTR points to what *might* be a 32-bit branch or jump, then
12269    return the minimum length of its delay slot, otherwise return 0.
12270    Non-zero results are not definitive as we might be checking against
12271    the second half of another instruction.  */
12272
12273 static int
12274 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12275 {
12276   unsigned long opcode;
12277   int bdsize;
12278
12279   opcode = bfd_get_micromips_32 (abfd, ptr);
12280   if (find_match (opcode, ds_insns_32_bd32) >= 0)
12281     /* 32-bit branch/jump with a 32-bit delay slot.  */
12282     bdsize = 4;
12283   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12284     /* 32-bit branch/jump with a 16-bit delay slot.  */
12285     bdsize = 2;
12286   else
12287     /* No delay slot.  */
12288     bdsize = 0;
12289
12290   return bdsize;
12291 }
12292
12293 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12294    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
12295
12296 static bfd_boolean
12297 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12298 {
12299   unsigned long opcode;
12300
12301   opcode = bfd_get_16 (abfd, ptr);
12302   if (MATCH (opcode, b_insn_16)
12303                                                 /* B16  */
12304       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12305                                                 /* JR16  */
12306       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12307                                                 /* BEQZ16, BNEZ16  */
12308       || (MATCH (opcode, jalr_insn_16_bd32)
12309                                                 /* JALR16  */
12310           && reg != JR16_REG (opcode) && reg != RA))
12311     return TRUE;
12312
12313   return FALSE;
12314 }
12315
12316 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12317    then return TRUE, otherwise FALSE.  */
12318
12319 static bfd_boolean
12320 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12321 {
12322   unsigned long opcode;
12323
12324   opcode = bfd_get_micromips_32 (abfd, ptr);
12325   if (MATCH (opcode, j_insn_32)
12326                                                 /* J  */
12327       || MATCH (opcode, bc_insn_32)
12328                                                 /* BC1F, BC1T, BC2F, BC2T  */
12329       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12330                                                 /* JAL, JALX  */
12331       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12332                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
12333       || (MATCH (opcode, bzal_insn_32)
12334                                                 /* BGEZAL, BLTZAL  */
12335           && reg != OP32_SREG (opcode) && reg != RA)
12336       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12337                                                 /* JALR, JALR.HB, BEQ, BNE  */
12338           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12339     return TRUE;
12340
12341   return FALSE;
12342 }
12343
12344 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12345    IRELEND) at OFFSET indicate that there must be a compact branch there,
12346    then return TRUE, otherwise FALSE.  */
12347
12348 static bfd_boolean
12349 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12350                      const Elf_Internal_Rela *internal_relocs,
12351                      const Elf_Internal_Rela *irelend)
12352 {
12353   const Elf_Internal_Rela *irel;
12354   unsigned long opcode;
12355
12356   opcode = bfd_get_micromips_32 (abfd, ptr);
12357   if (find_match (opcode, bzc_insns_32) < 0)
12358     return FALSE;
12359
12360   for (irel = internal_relocs; irel < irelend; irel++)
12361     if (irel->r_offset == offset
12362         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12363       return TRUE;
12364
12365   return FALSE;
12366 }
12367
12368 /* Bitsize checking.  */
12369 #define IS_BITSIZE(val, N)                                              \
12370   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
12371     - (1ULL << ((N) - 1))) == (val))
12372
12373 \f
12374 bfd_boolean
12375 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12376                              struct bfd_link_info *link_info,
12377                              bfd_boolean *again)
12378 {
12379   Elf_Internal_Shdr *symtab_hdr;
12380   Elf_Internal_Rela *internal_relocs;
12381   Elf_Internal_Rela *irel, *irelend;
12382   bfd_byte *contents = NULL;
12383   Elf_Internal_Sym *isymbuf = NULL;
12384
12385   /* Assume nothing changes.  */
12386   *again = FALSE;
12387
12388   /* We don't have to do anything for a relocatable link, if
12389      this section does not have relocs, or if this is not a
12390      code section.  */
12391
12392   if (link_info->relocatable
12393       || (sec->flags & SEC_RELOC) == 0
12394       || sec->reloc_count == 0
12395       || (sec->flags & SEC_CODE) == 0)
12396     return TRUE;
12397
12398   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12399
12400   /* Get a copy of the native relocations.  */
12401   internal_relocs = (_bfd_elf_link_read_relocs
12402                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
12403                       link_info->keep_memory));
12404   if (internal_relocs == NULL)
12405     goto error_return;
12406
12407   /* Walk through them looking for relaxing opportunities.  */
12408   irelend = internal_relocs + sec->reloc_count;
12409   for (irel = internal_relocs; irel < irelend; irel++)
12410     {
12411       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12412       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12413       bfd_boolean target_is_micromips_code_p;
12414       unsigned long opcode;
12415       bfd_vma symval;
12416       bfd_vma pcrval;
12417       bfd_byte *ptr;
12418       int fndopc;
12419
12420       /* The number of bytes to delete for relaxation and from where
12421          to delete these bytes starting at irel->r_offset.  */
12422       int delcnt = 0;
12423       int deloff = 0;
12424
12425       /* If this isn't something that can be relaxed, then ignore
12426          this reloc.  */
12427       if (r_type != R_MICROMIPS_HI16
12428           && r_type != R_MICROMIPS_PC16_S1
12429           && r_type != R_MICROMIPS_26_S1)
12430         continue;
12431
12432       /* Get the section contents if we haven't done so already.  */
12433       if (contents == NULL)
12434         {
12435           /* Get cached copy if it exists.  */
12436           if (elf_section_data (sec)->this_hdr.contents != NULL)
12437             contents = elf_section_data (sec)->this_hdr.contents;
12438           /* Go get them off disk.  */
12439           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12440             goto error_return;
12441         }
12442       ptr = contents + irel->r_offset;
12443
12444       /* Read this BFD's local symbols if we haven't done so already.  */
12445       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12446         {
12447           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12448           if (isymbuf == NULL)
12449             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12450                                             symtab_hdr->sh_info, 0,
12451                                             NULL, NULL, NULL);
12452           if (isymbuf == NULL)
12453             goto error_return;
12454         }
12455
12456       /* Get the value of the symbol referred to by the reloc.  */
12457       if (r_symndx < symtab_hdr->sh_info)
12458         {
12459           /* A local symbol.  */
12460           Elf_Internal_Sym *isym;
12461           asection *sym_sec;
12462
12463           isym = isymbuf + r_symndx;
12464           if (isym->st_shndx == SHN_UNDEF)
12465             sym_sec = bfd_und_section_ptr;
12466           else if (isym->st_shndx == SHN_ABS)
12467             sym_sec = bfd_abs_section_ptr;
12468           else if (isym->st_shndx == SHN_COMMON)
12469             sym_sec = bfd_com_section_ptr;
12470           else
12471             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12472           symval = (isym->st_value
12473                     + sym_sec->output_section->vma
12474                     + sym_sec->output_offset);
12475           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12476         }
12477       else
12478         {
12479           unsigned long indx;
12480           struct elf_link_hash_entry *h;
12481
12482           /* An external symbol.  */
12483           indx = r_symndx - symtab_hdr->sh_info;
12484           h = elf_sym_hashes (abfd)[indx];
12485           BFD_ASSERT (h != NULL);
12486
12487           if (h->root.type != bfd_link_hash_defined
12488               && h->root.type != bfd_link_hash_defweak)
12489             /* This appears to be a reference to an undefined
12490                symbol.  Just ignore it -- it will be caught by the
12491                regular reloc processing.  */
12492             continue;
12493
12494           symval = (h->root.u.def.value
12495                     + h->root.u.def.section->output_section->vma
12496                     + h->root.u.def.section->output_offset);
12497           target_is_micromips_code_p = (!h->needs_plt
12498                                         && ELF_ST_IS_MICROMIPS (h->other));
12499         }
12500
12501
12502       /* For simplicity of coding, we are going to modify the
12503          section contents, the section relocs, and the BFD symbol
12504          table.  We must tell the rest of the code not to free up this
12505          information.  It would be possible to instead create a table
12506          of changes which have to be made, as is done in coff-mips.c;
12507          that would be more work, but would require less memory when
12508          the linker is run.  */
12509
12510       /* Only 32-bit instructions relaxed.  */
12511       if (irel->r_offset + 4 > sec->size)
12512         continue;
12513
12514       opcode = bfd_get_micromips_32 (abfd, ptr);
12515
12516       /* This is the pc-relative distance from the instruction the
12517          relocation is applied to, to the symbol referred.  */
12518       pcrval = (symval
12519                 - (sec->output_section->vma + sec->output_offset)
12520                 - irel->r_offset);
12521
12522       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12523          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12524          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
12525
12526            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12527
12528          where pcrval has first to be adjusted to apply against the LO16
12529          location (we make the adjustment later on, when we have figured
12530          out the offset).  */
12531       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12532         {
12533           bfd_boolean bzc = FALSE;
12534           unsigned long nextopc;
12535           unsigned long reg;
12536           bfd_vma offset;
12537
12538           /* Give up if the previous reloc was a HI16 against this symbol
12539              too.  */
12540           if (irel > internal_relocs
12541               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12542               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12543             continue;
12544
12545           /* Or if the next reloc is not a LO16 against this symbol.  */
12546           if (irel + 1 >= irelend
12547               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12548               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12549             continue;
12550
12551           /* Or if the second next reloc is a LO16 against this symbol too.  */
12552           if (irel + 2 >= irelend
12553               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12554               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12555             continue;
12556
12557           /* See if the LUI instruction *might* be in a branch delay slot.
12558              We check whether what looks like a 16-bit branch or jump is
12559              actually an immediate argument to a compact branch, and let
12560              it through if so.  */
12561           if (irel->r_offset >= 2
12562               && check_br16_dslot (abfd, ptr - 2)
12563               && !(irel->r_offset >= 4
12564                    && (bzc = check_relocated_bzc (abfd,
12565                                                   ptr - 4, irel->r_offset - 4,
12566                                                   internal_relocs, irelend))))
12567             continue;
12568           if (irel->r_offset >= 4
12569               && !bzc
12570               && check_br32_dslot (abfd, ptr - 4))
12571             continue;
12572
12573           reg = OP32_SREG (opcode);
12574
12575           /* We only relax adjacent instructions or ones separated with
12576              a branch or jump that has a delay slot.  The branch or jump
12577              must not fiddle with the register used to hold the address.
12578              Subtract 4 for the LUI itself.  */
12579           offset = irel[1].r_offset - irel[0].r_offset;
12580           switch (offset - 4)
12581             {
12582             case 0:
12583               break;
12584             case 2:
12585               if (check_br16 (abfd, ptr + 4, reg))
12586                 break;
12587               continue;
12588             case 4:
12589               if (check_br32 (abfd, ptr + 4, reg))
12590                 break;
12591               continue;
12592             default:
12593               continue;
12594             }
12595
12596           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
12597
12598           /* Give up unless the same register is used with both
12599              relocations.  */
12600           if (OP32_SREG (nextopc) != reg)
12601             continue;
12602
12603           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12604              and rounding up to take masking of the two LSBs into account.  */
12605           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12606
12607           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
12608           if (IS_BITSIZE (symval, 16))
12609             {
12610               /* Fix the relocation's type.  */
12611               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12612
12613               /* Instructions using R_MICROMIPS_LO16 have the base or
12614                  source register in bits 20:16.  This register becomes $0
12615                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
12616               nextopc &= ~0x001f0000;
12617               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12618                           contents + irel[1].r_offset);
12619             }
12620
12621           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12622              We add 4 to take LUI deletion into account while checking
12623              the PC-relative distance.  */
12624           else if (symval % 4 == 0
12625                    && IS_BITSIZE (pcrval + 4, 25)
12626                    && MATCH (nextopc, addiu_insn)
12627                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12628                    && OP16_VALID_REG (OP32_TREG (nextopc)))
12629             {
12630               /* Fix the relocation's type.  */
12631               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12632
12633               /* Replace ADDIU with the ADDIUPC version.  */
12634               nextopc = (addiupc_insn.match
12635                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12636
12637               bfd_put_micromips_32 (abfd, nextopc,
12638                                     contents + irel[1].r_offset);
12639             }
12640
12641           /* Can't do anything, give up, sigh...  */
12642           else
12643             continue;
12644
12645           /* Fix the relocation's type.  */
12646           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12647
12648           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
12649           delcnt = 4;
12650           deloff = 0;
12651         }
12652
12653       /* Compact branch relaxation -- due to the multitude of macros
12654          employed by the compiler/assembler, compact branches are not
12655          always generated.  Obviously, this can/will be fixed elsewhere,
12656          but there is no drawback in double checking it here.  */
12657       else if (r_type == R_MICROMIPS_PC16_S1
12658                && irel->r_offset + 5 < sec->size
12659                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12660                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
12661                && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
12662         {
12663           unsigned long reg;
12664
12665           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12666
12667           /* Replace BEQZ/BNEZ with the compact version.  */
12668           opcode = (bzc_insns_32[fndopc].match
12669                     | BZC32_REG_FIELD (reg)
12670                     | (opcode & 0xffff));               /* Addend value.  */
12671
12672           bfd_put_micromips_32 (abfd, opcode, ptr);
12673
12674           /* Delete the 16-bit delay slot NOP: two bytes from
12675              irel->offset + 4.  */
12676           delcnt = 2;
12677           deloff = 4;
12678         }
12679
12680       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
12681          to check the distance from the next instruction, so subtract 2.  */
12682       else if (r_type == R_MICROMIPS_PC16_S1
12683                && IS_BITSIZE (pcrval - 2, 11)
12684                && find_match (opcode, b_insns_32) >= 0)
12685         {
12686           /* Fix the relocation's type.  */
12687           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12688
12689           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12690           bfd_put_16 (abfd,
12691                       (b_insn_16.match
12692                        | (opcode & 0x3ff)),             /* Addend value.  */
12693                       ptr);
12694
12695           /* Delete 2 bytes from irel->r_offset + 2.  */
12696           delcnt = 2;
12697           deloff = 2;
12698         }
12699
12700       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
12701          to check the distance from the next instruction, so subtract 2.  */
12702       else if (r_type == R_MICROMIPS_PC16_S1
12703                && IS_BITSIZE (pcrval - 2, 8)
12704                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12705                     && OP16_VALID_REG (OP32_SREG (opcode)))
12706                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12707                        && OP16_VALID_REG (OP32_TREG (opcode)))))
12708         {
12709           unsigned long reg;
12710
12711           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12712
12713           /* Fix the relocation's type.  */
12714           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12715
12716           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12717           bfd_put_16 (abfd,
12718                       (bz_insns_16[fndopc].match
12719                        | BZ16_REG_FIELD (reg)
12720                        | (opcode & 0x7f)),              /* Addend value.  */
12721                       ptr);
12722
12723           /* Delete 2 bytes from irel->r_offset + 2.  */
12724           delcnt = 2;
12725           deloff = 2;
12726         }
12727
12728       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
12729       else if (r_type == R_MICROMIPS_26_S1
12730                && target_is_micromips_code_p
12731                && irel->r_offset + 7 < sec->size
12732                && MATCH (opcode, jal_insn_32_bd32))
12733         {
12734           unsigned long n32opc;
12735           bfd_boolean relaxed = FALSE;
12736
12737           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
12738
12739           if (MATCH (n32opc, nop_insn_32))
12740             {
12741               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
12742               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
12743
12744               relaxed = TRUE;
12745             }
12746           else if (find_match (n32opc, move_insns_32) >= 0)
12747             {
12748               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
12749               bfd_put_16 (abfd,
12750                           (move_insn_16.match
12751                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12752                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
12753                           ptr + 4);
12754
12755               relaxed = TRUE;
12756             }
12757           /* Other 32-bit instructions relaxable to 16-bit
12758              instructions will be handled here later.  */
12759
12760           if (relaxed)
12761             {
12762               /* JAL with 32-bit delay slot that is changed to a JALS
12763                  with 16-bit delay slot.  */
12764               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
12765
12766               /* Delete 2 bytes from irel->r_offset + 6.  */
12767               delcnt = 2;
12768               deloff = 6;
12769             }
12770         }
12771
12772       if (delcnt != 0)
12773         {
12774           /* Note that we've changed the relocs, section contents, etc.  */
12775           elf_section_data (sec)->relocs = internal_relocs;
12776           elf_section_data (sec)->this_hdr.contents = contents;
12777           symtab_hdr->contents = (unsigned char *) isymbuf;
12778
12779           /* Delete bytes depending on the delcnt and deloff.  */
12780           if (!mips_elf_relax_delete_bytes (abfd, sec,
12781                                             irel->r_offset + deloff, delcnt))
12782             goto error_return;
12783
12784           /* That will change things, so we should relax again.
12785              Note that this is not required, and it may be slow.  */
12786           *again = TRUE;
12787         }
12788     }
12789
12790   if (isymbuf != NULL
12791       && symtab_hdr->contents != (unsigned char *) isymbuf)
12792     {
12793       if (! link_info->keep_memory)
12794         free (isymbuf);
12795       else
12796         {
12797           /* Cache the symbols for elf_link_input_bfd.  */
12798           symtab_hdr->contents = (unsigned char *) isymbuf;
12799         }
12800     }
12801
12802   if (contents != NULL
12803       && elf_section_data (sec)->this_hdr.contents != contents)
12804     {
12805       if (! link_info->keep_memory)
12806         free (contents);
12807       else
12808         {
12809           /* Cache the section contents for elf_link_input_bfd.  */
12810           elf_section_data (sec)->this_hdr.contents = contents;
12811         }
12812     }
12813
12814   if (internal_relocs != NULL
12815       && elf_section_data (sec)->relocs != internal_relocs)
12816     free (internal_relocs);
12817
12818   return TRUE;
12819
12820  error_return:
12821   if (isymbuf != NULL
12822       && symtab_hdr->contents != (unsigned char *) isymbuf)
12823     free (isymbuf);
12824   if (contents != NULL
12825       && elf_section_data (sec)->this_hdr.contents != contents)
12826     free (contents);
12827   if (internal_relocs != NULL
12828       && elf_section_data (sec)->relocs != internal_relocs)
12829     free (internal_relocs);
12830
12831   return FALSE;
12832 }
12833 \f
12834 /* Create a MIPS ELF linker hash table.  */
12835
12836 struct bfd_link_hash_table *
12837 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
12838 {
12839   struct mips_elf_link_hash_table *ret;
12840   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12841
12842   ret = bfd_zmalloc (amt);
12843   if (ret == NULL)
12844     return NULL;
12845
12846   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12847                                       mips_elf_link_hash_newfunc,
12848                                       sizeof (struct mips_elf_link_hash_entry),
12849                                       MIPS_ELF_DATA))
12850     {
12851       free (ret);
12852       return NULL;
12853     }
12854
12855   return &ret->root.root;
12856 }
12857
12858 /* Likewise, but indicate that the target is VxWorks.  */
12859
12860 struct bfd_link_hash_table *
12861 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12862 {
12863   struct bfd_link_hash_table *ret;
12864
12865   ret = _bfd_mips_elf_link_hash_table_create (abfd);
12866   if (ret)
12867     {
12868       struct mips_elf_link_hash_table *htab;
12869
12870       htab = (struct mips_elf_link_hash_table *) ret;
12871       htab->use_plts_and_copy_relocs = TRUE;
12872       htab->is_vxworks = TRUE;
12873     }
12874   return ret;
12875 }
12876
12877 /* A function that the linker calls if we are allowed to use PLTs
12878    and copy relocs.  */
12879
12880 void
12881 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
12882 {
12883   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
12884 }
12885 \f
12886 /* We need to use a special link routine to handle the .reginfo and
12887    the .mdebug sections.  We need to merge all instances of these
12888    sections together, not write them all out sequentially.  */
12889
12890 bfd_boolean
12891 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
12892 {
12893   asection *o;
12894   struct bfd_link_order *p;
12895   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
12896   asection *rtproc_sec;
12897   Elf32_RegInfo reginfo;
12898   struct ecoff_debug_info debug;
12899   struct mips_htab_traverse_info hti;
12900   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12901   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
12902   HDRR *symhdr = &debug.symbolic_header;
12903   void *mdebug_handle = NULL;
12904   asection *s;
12905   EXTR esym;
12906   unsigned int i;
12907   bfd_size_type amt;
12908   struct mips_elf_link_hash_table *htab;
12909
12910   static const char * const secname[] =
12911   {
12912     ".text", ".init", ".fini", ".data",
12913     ".rodata", ".sdata", ".sbss", ".bss"
12914   };
12915   static const int sc[] =
12916   {
12917     scText, scInit, scFini, scData,
12918     scRData, scSData, scSBss, scBss
12919   };
12920
12921   /* Sort the dynamic symbols so that those with GOT entries come after
12922      those without.  */
12923   htab = mips_elf_hash_table (info);
12924   BFD_ASSERT (htab != NULL);
12925
12926   if (!mips_elf_sort_hash_table (abfd, info))
12927     return FALSE;
12928
12929   /* Create any scheduled LA25 stubs.  */
12930   hti.info = info;
12931   hti.output_bfd = abfd;
12932   hti.error = FALSE;
12933   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
12934   if (hti.error)
12935     return FALSE;
12936
12937   /* Get a value for the GP register.  */
12938   if (elf_gp (abfd) == 0)
12939     {
12940       struct bfd_link_hash_entry *h;
12941
12942       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
12943       if (h != NULL && h->type == bfd_link_hash_defined)
12944         elf_gp (abfd) = (h->u.def.value
12945                          + h->u.def.section->output_section->vma
12946                          + h->u.def.section->output_offset);
12947       else if (htab->is_vxworks
12948                && (h = bfd_link_hash_lookup (info->hash,
12949                                              "_GLOBAL_OFFSET_TABLE_",
12950                                              FALSE, FALSE, TRUE))
12951                && h->type == bfd_link_hash_defined)
12952         elf_gp (abfd) = (h->u.def.section->output_section->vma
12953                          + h->u.def.section->output_offset
12954                          + h->u.def.value);
12955       else if (info->relocatable)
12956         {
12957           bfd_vma lo = MINUS_ONE;
12958
12959           /* Find the GP-relative section with the lowest offset.  */
12960           for (o = abfd->sections; o != NULL; o = o->next)
12961             if (o->vma < lo
12962                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
12963               lo = o->vma;
12964
12965           /* And calculate GP relative to that.  */
12966           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
12967         }
12968       else
12969         {
12970           /* If the relocate_section function needs to do a reloc
12971              involving the GP value, it should make a reloc_dangerous
12972              callback to warn that GP is not defined.  */
12973         }
12974     }
12975
12976   /* Go through the sections and collect the .reginfo and .mdebug
12977      information.  */
12978   reginfo_sec = NULL;
12979   mdebug_sec = NULL;
12980   gptab_data_sec = NULL;
12981   gptab_bss_sec = NULL;
12982   for (o = abfd->sections; o != NULL; o = o->next)
12983     {
12984       if (strcmp (o->name, ".reginfo") == 0)
12985         {
12986           memset (&reginfo, 0, sizeof reginfo);
12987
12988           /* We have found the .reginfo section in the output file.
12989              Look through all the link_orders comprising it and merge
12990              the information together.  */
12991           for (p = o->map_head.link_order; p != NULL; p = p->next)
12992             {
12993               asection *input_section;
12994               bfd *input_bfd;
12995               Elf32_External_RegInfo ext;
12996               Elf32_RegInfo sub;
12997
12998               if (p->type != bfd_indirect_link_order)
12999                 {
13000                   if (p->type == bfd_data_link_order)
13001                     continue;
13002                   abort ();
13003                 }
13004
13005               input_section = p->u.indirect.section;
13006               input_bfd = input_section->owner;
13007
13008               if (! bfd_get_section_contents (input_bfd, input_section,
13009                                               &ext, 0, sizeof ext))
13010                 return FALSE;
13011
13012               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13013
13014               reginfo.ri_gprmask |= sub.ri_gprmask;
13015               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13016               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13017               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13018               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13019
13020               /* ri_gp_value is set by the function
13021                  mips_elf32_section_processing when the section is
13022                  finally written out.  */
13023
13024               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13025                  elf_link_input_bfd ignores this section.  */
13026               input_section->flags &= ~SEC_HAS_CONTENTS;
13027             }
13028
13029           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
13030           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
13031
13032           /* Skip this section later on (I don't think this currently
13033              matters, but someday it might).  */
13034           o->map_head.link_order = NULL;
13035
13036           reginfo_sec = o;
13037         }
13038
13039       if (strcmp (o->name, ".mdebug") == 0)
13040         {
13041           struct extsym_info einfo;
13042           bfd_vma last;
13043
13044           /* We have found the .mdebug section in the output file.
13045              Look through all the link_orders comprising it and merge
13046              the information together.  */
13047           symhdr->magic = swap->sym_magic;
13048           /* FIXME: What should the version stamp be?  */
13049           symhdr->vstamp = 0;
13050           symhdr->ilineMax = 0;
13051           symhdr->cbLine = 0;
13052           symhdr->idnMax = 0;
13053           symhdr->ipdMax = 0;
13054           symhdr->isymMax = 0;
13055           symhdr->ioptMax = 0;
13056           symhdr->iauxMax = 0;
13057           symhdr->issMax = 0;
13058           symhdr->issExtMax = 0;
13059           symhdr->ifdMax = 0;
13060           symhdr->crfd = 0;
13061           symhdr->iextMax = 0;
13062
13063           /* We accumulate the debugging information itself in the
13064              debug_info structure.  */
13065           debug.line = NULL;
13066           debug.external_dnr = NULL;
13067           debug.external_pdr = NULL;
13068           debug.external_sym = NULL;
13069           debug.external_opt = NULL;
13070           debug.external_aux = NULL;
13071           debug.ss = NULL;
13072           debug.ssext = debug.ssext_end = NULL;
13073           debug.external_fdr = NULL;
13074           debug.external_rfd = NULL;
13075           debug.external_ext = debug.external_ext_end = NULL;
13076
13077           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
13078           if (mdebug_handle == NULL)
13079             return FALSE;
13080
13081           esym.jmptbl = 0;
13082           esym.cobol_main = 0;
13083           esym.weakext = 0;
13084           esym.reserved = 0;
13085           esym.ifd = ifdNil;
13086           esym.asym.iss = issNil;
13087           esym.asym.st = stLocal;
13088           esym.asym.reserved = 0;
13089           esym.asym.index = indexNil;
13090           last = 0;
13091           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13092             {
13093               esym.asym.sc = sc[i];
13094               s = bfd_get_section_by_name (abfd, secname[i]);
13095               if (s != NULL)
13096                 {
13097                   esym.asym.value = s->vma;
13098                   last = s->vma + s->size;
13099                 }
13100               else
13101                 esym.asym.value = last;
13102               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13103                                                  secname[i], &esym))
13104                 return FALSE;
13105             }
13106
13107           for (p = o->map_head.link_order; p != NULL; p = p->next)
13108             {
13109               asection *input_section;
13110               bfd *input_bfd;
13111               const struct ecoff_debug_swap *input_swap;
13112               struct ecoff_debug_info input_debug;
13113               char *eraw_src;
13114               char *eraw_end;
13115
13116               if (p->type != bfd_indirect_link_order)
13117                 {
13118                   if (p->type == bfd_data_link_order)
13119                     continue;
13120                   abort ();
13121                 }
13122
13123               input_section = p->u.indirect.section;
13124               input_bfd = input_section->owner;
13125
13126               if (!is_mips_elf (input_bfd))
13127                 {
13128                   /* I don't know what a non MIPS ELF bfd would be
13129                      doing with a .mdebug section, but I don't really
13130                      want to deal with it.  */
13131                   continue;
13132                 }
13133
13134               input_swap = (get_elf_backend_data (input_bfd)
13135                             ->elf_backend_ecoff_debug_swap);
13136
13137               BFD_ASSERT (p->size == input_section->size);
13138
13139               /* The ECOFF linking code expects that we have already
13140                  read in the debugging information and set up an
13141                  ecoff_debug_info structure, so we do that now.  */
13142               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13143                                                    &input_debug))
13144                 return FALSE;
13145
13146               if (! (bfd_ecoff_debug_accumulate
13147                      (mdebug_handle, abfd, &debug, swap, input_bfd,
13148                       &input_debug, input_swap, info)))
13149                 return FALSE;
13150
13151               /* Loop through the external symbols.  For each one with
13152                  interesting information, try to find the symbol in
13153                  the linker global hash table and save the information
13154                  for the output external symbols.  */
13155               eraw_src = input_debug.external_ext;
13156               eraw_end = (eraw_src
13157                           + (input_debug.symbolic_header.iextMax
13158                              * input_swap->external_ext_size));
13159               for (;
13160                    eraw_src < eraw_end;
13161                    eraw_src += input_swap->external_ext_size)
13162                 {
13163                   EXTR ext;
13164                   const char *name;
13165                   struct mips_elf_link_hash_entry *h;
13166
13167                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
13168                   if (ext.asym.sc == scNil
13169                       || ext.asym.sc == scUndefined
13170                       || ext.asym.sc == scSUndefined)
13171                     continue;
13172
13173                   name = input_debug.ssext + ext.asym.iss;
13174                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
13175                                                  name, FALSE, FALSE, TRUE);
13176                   if (h == NULL || h->esym.ifd != -2)
13177                     continue;
13178
13179                   if (ext.ifd != -1)
13180                     {
13181                       BFD_ASSERT (ext.ifd
13182                                   < input_debug.symbolic_header.ifdMax);
13183                       ext.ifd = input_debug.ifdmap[ext.ifd];
13184                     }
13185
13186                   h->esym = ext;
13187                 }
13188
13189               /* Free up the information we just read.  */
13190               free (input_debug.line);
13191               free (input_debug.external_dnr);
13192               free (input_debug.external_pdr);
13193               free (input_debug.external_sym);
13194               free (input_debug.external_opt);
13195               free (input_debug.external_aux);
13196               free (input_debug.ss);
13197               free (input_debug.ssext);
13198               free (input_debug.external_fdr);
13199               free (input_debug.external_rfd);
13200               free (input_debug.external_ext);
13201
13202               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13203                  elf_link_input_bfd ignores this section.  */
13204               input_section->flags &= ~SEC_HAS_CONTENTS;
13205             }
13206
13207           if (SGI_COMPAT (abfd) && info->shared)
13208             {
13209               /* Create .rtproc section.  */
13210               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
13211               if (rtproc_sec == NULL)
13212                 {
13213                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13214                                     | SEC_LINKER_CREATED | SEC_READONLY);
13215
13216                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13217                                                                    ".rtproc",
13218                                                                    flags);
13219                   if (rtproc_sec == NULL
13220                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
13221                     return FALSE;
13222                 }
13223
13224               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13225                                                      info, rtproc_sec,
13226                                                      &debug))
13227                 return FALSE;
13228             }
13229
13230           /* Build the external symbol information.  */
13231           einfo.abfd = abfd;
13232           einfo.info = info;
13233           einfo.debug = &debug;
13234           einfo.swap = swap;
13235           einfo.failed = FALSE;
13236           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
13237                                        mips_elf_output_extsym, &einfo);
13238           if (einfo.failed)
13239             return FALSE;
13240
13241           /* Set the size of the .mdebug section.  */
13242           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
13243
13244           /* Skip this section later on (I don't think this currently
13245              matters, but someday it might).  */
13246           o->map_head.link_order = NULL;
13247
13248           mdebug_sec = o;
13249         }
13250
13251       if (CONST_STRNEQ (o->name, ".gptab."))
13252         {
13253           const char *subname;
13254           unsigned int c;
13255           Elf32_gptab *tab;
13256           Elf32_External_gptab *ext_tab;
13257           unsigned int j;
13258
13259           /* The .gptab.sdata and .gptab.sbss sections hold
13260              information describing how the small data area would
13261              change depending upon the -G switch.  These sections
13262              not used in executables files.  */
13263           if (! info->relocatable)
13264             {
13265               for (p = o->map_head.link_order; p != NULL; p = p->next)
13266                 {
13267                   asection *input_section;
13268
13269                   if (p->type != bfd_indirect_link_order)
13270                     {
13271                       if (p->type == bfd_data_link_order)
13272                         continue;
13273                       abort ();
13274                     }
13275
13276                   input_section = p->u.indirect.section;
13277
13278                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
13279                      elf_link_input_bfd ignores this section.  */
13280                   input_section->flags &= ~SEC_HAS_CONTENTS;
13281                 }
13282
13283               /* Skip this section later on (I don't think this
13284                  currently matters, but someday it might).  */
13285               o->map_head.link_order = NULL;
13286
13287               /* Really remove the section.  */
13288               bfd_section_list_remove (abfd, o);
13289               --abfd->section_count;
13290
13291               continue;
13292             }
13293
13294           /* There is one gptab for initialized data, and one for
13295              uninitialized data.  */
13296           if (strcmp (o->name, ".gptab.sdata") == 0)
13297             gptab_data_sec = o;
13298           else if (strcmp (o->name, ".gptab.sbss") == 0)
13299             gptab_bss_sec = o;
13300           else
13301             {
13302               (*_bfd_error_handler)
13303                 (_("%s: illegal section name `%s'"),
13304                  bfd_get_filename (abfd), o->name);
13305               bfd_set_error (bfd_error_nonrepresentable_section);
13306               return FALSE;
13307             }
13308
13309           /* The linker script always combines .gptab.data and
13310              .gptab.sdata into .gptab.sdata, and likewise for
13311              .gptab.bss and .gptab.sbss.  It is possible that there is
13312              no .sdata or .sbss section in the output file, in which
13313              case we must change the name of the output section.  */
13314           subname = o->name + sizeof ".gptab" - 1;
13315           if (bfd_get_section_by_name (abfd, subname) == NULL)
13316             {
13317               if (o == gptab_data_sec)
13318                 o->name = ".gptab.data";
13319               else
13320                 o->name = ".gptab.bss";
13321               subname = o->name + sizeof ".gptab" - 1;
13322               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13323             }
13324
13325           /* Set up the first entry.  */
13326           c = 1;
13327           amt = c * sizeof (Elf32_gptab);
13328           tab = bfd_malloc (amt);
13329           if (tab == NULL)
13330             return FALSE;
13331           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13332           tab[0].gt_header.gt_unused = 0;
13333
13334           /* Combine the input sections.  */
13335           for (p = o->map_head.link_order; p != NULL; p = p->next)
13336             {
13337               asection *input_section;
13338               bfd *input_bfd;
13339               bfd_size_type size;
13340               unsigned long last;
13341               bfd_size_type gpentry;
13342
13343               if (p->type != bfd_indirect_link_order)
13344                 {
13345                   if (p->type == bfd_data_link_order)
13346                     continue;
13347                   abort ();
13348                 }
13349
13350               input_section = p->u.indirect.section;
13351               input_bfd = input_section->owner;
13352
13353               /* Combine the gptab entries for this input section one
13354                  by one.  We know that the input gptab entries are
13355                  sorted by ascending -G value.  */
13356               size = input_section->size;
13357               last = 0;
13358               for (gpentry = sizeof (Elf32_External_gptab);
13359                    gpentry < size;
13360                    gpentry += sizeof (Elf32_External_gptab))
13361                 {
13362                   Elf32_External_gptab ext_gptab;
13363                   Elf32_gptab int_gptab;
13364                   unsigned long val;
13365                   unsigned long add;
13366                   bfd_boolean exact;
13367                   unsigned int look;
13368
13369                   if (! (bfd_get_section_contents
13370                          (input_bfd, input_section, &ext_gptab, gpentry,
13371                           sizeof (Elf32_External_gptab))))
13372                     {
13373                       free (tab);
13374                       return FALSE;
13375                     }
13376
13377                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13378                                                 &int_gptab);
13379                   val = int_gptab.gt_entry.gt_g_value;
13380                   add = int_gptab.gt_entry.gt_bytes - last;
13381
13382                   exact = FALSE;
13383                   for (look = 1; look < c; look++)
13384                     {
13385                       if (tab[look].gt_entry.gt_g_value >= val)
13386                         tab[look].gt_entry.gt_bytes += add;
13387
13388                       if (tab[look].gt_entry.gt_g_value == val)
13389                         exact = TRUE;
13390                     }
13391
13392                   if (! exact)
13393                     {
13394                       Elf32_gptab *new_tab;
13395                       unsigned int max;
13396
13397                       /* We need a new table entry.  */
13398                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
13399                       new_tab = bfd_realloc (tab, amt);
13400                       if (new_tab == NULL)
13401                         {
13402                           free (tab);
13403                           return FALSE;
13404                         }
13405                       tab = new_tab;
13406                       tab[c].gt_entry.gt_g_value = val;
13407                       tab[c].gt_entry.gt_bytes = add;
13408
13409                       /* Merge in the size for the next smallest -G
13410                          value, since that will be implied by this new
13411                          value.  */
13412                       max = 0;
13413                       for (look = 1; look < c; look++)
13414                         {
13415                           if (tab[look].gt_entry.gt_g_value < val
13416                               && (max == 0
13417                                   || (tab[look].gt_entry.gt_g_value
13418                                       > tab[max].gt_entry.gt_g_value)))
13419                             max = look;
13420                         }
13421                       if (max != 0)
13422                         tab[c].gt_entry.gt_bytes +=
13423                           tab[max].gt_entry.gt_bytes;
13424
13425                       ++c;
13426                     }
13427
13428                   last = int_gptab.gt_entry.gt_bytes;
13429                 }
13430
13431               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13432                  elf_link_input_bfd ignores this section.  */
13433               input_section->flags &= ~SEC_HAS_CONTENTS;
13434             }
13435
13436           /* The table must be sorted by -G value.  */
13437           if (c > 2)
13438             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13439
13440           /* Swap out the table.  */
13441           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
13442           ext_tab = bfd_alloc (abfd, amt);
13443           if (ext_tab == NULL)
13444             {
13445               free (tab);
13446               return FALSE;
13447             }
13448
13449           for (j = 0; j < c; j++)
13450             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13451           free (tab);
13452
13453           o->size = c * sizeof (Elf32_External_gptab);
13454           o->contents = (bfd_byte *) ext_tab;
13455
13456           /* Skip this section later on (I don't think this currently
13457              matters, but someday it might).  */
13458           o->map_head.link_order = NULL;
13459         }
13460     }
13461
13462   /* Invoke the regular ELF backend linker to do all the work.  */
13463   if (!bfd_elf_final_link (abfd, info))
13464     return FALSE;
13465
13466   /* Now write out the computed sections.  */
13467
13468   if (reginfo_sec != NULL)
13469     {
13470       Elf32_External_RegInfo ext;
13471
13472       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
13473       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
13474         return FALSE;
13475     }
13476
13477   if (mdebug_sec != NULL)
13478     {
13479       BFD_ASSERT (abfd->output_has_begun);
13480       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13481                                                swap, info,
13482                                                mdebug_sec->filepos))
13483         return FALSE;
13484
13485       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13486     }
13487
13488   if (gptab_data_sec != NULL)
13489     {
13490       if (! bfd_set_section_contents (abfd, gptab_data_sec,
13491                                       gptab_data_sec->contents,
13492                                       0, gptab_data_sec->size))
13493         return FALSE;
13494     }
13495
13496   if (gptab_bss_sec != NULL)
13497     {
13498       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13499                                       gptab_bss_sec->contents,
13500                                       0, gptab_bss_sec->size))
13501         return FALSE;
13502     }
13503
13504   if (SGI_COMPAT (abfd))
13505     {
13506       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13507       if (rtproc_sec != NULL)
13508         {
13509           if (! bfd_set_section_contents (abfd, rtproc_sec,
13510                                           rtproc_sec->contents,
13511                                           0, rtproc_sec->size))
13512             return FALSE;
13513         }
13514     }
13515
13516   return TRUE;
13517 }
13518 \f
13519 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13520
13521 struct mips_mach_extension {
13522   unsigned long extension, base;
13523 };
13524
13525
13526 /* An array describing how BFD machines relate to one another.  The entries
13527    are ordered topologically with MIPS I extensions listed last.  */
13528
13529 static const struct mips_mach_extension mips_mach_extensions[] = {
13530   /* MIPS64r2 extensions.  */
13531   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13532   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13533   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13534
13535   /* MIPS64 extensions.  */
13536   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13537   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13538   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13539   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
13540
13541   /* MIPS V extensions.  */
13542   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13543
13544   /* R10000 extensions.  */
13545   { bfd_mach_mips12000, bfd_mach_mips10000 },
13546   { bfd_mach_mips14000, bfd_mach_mips10000 },
13547   { bfd_mach_mips16000, bfd_mach_mips10000 },
13548
13549   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13550      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13551      better to allow vr5400 and vr5500 code to be merged anyway, since
13552      many libraries will just use the core ISA.  Perhaps we could add
13553      some sort of ASE flag if this ever proves a problem.  */
13554   { bfd_mach_mips5500, bfd_mach_mips5400 },
13555   { bfd_mach_mips5400, bfd_mach_mips5000 },
13556
13557   /* MIPS IV extensions.  */
13558   { bfd_mach_mips5, bfd_mach_mips8000 },
13559   { bfd_mach_mips10000, bfd_mach_mips8000 },
13560   { bfd_mach_mips5000, bfd_mach_mips8000 },
13561   { bfd_mach_mips7000, bfd_mach_mips8000 },
13562   { bfd_mach_mips9000, bfd_mach_mips8000 },
13563
13564   /* VR4100 extensions.  */
13565   { bfd_mach_mips4120, bfd_mach_mips4100 },
13566   { bfd_mach_mips4111, bfd_mach_mips4100 },
13567
13568   /* MIPS III extensions.  */
13569   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13570   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13571   { bfd_mach_mips8000, bfd_mach_mips4000 },
13572   { bfd_mach_mips4650, bfd_mach_mips4000 },
13573   { bfd_mach_mips4600, bfd_mach_mips4000 },
13574   { bfd_mach_mips4400, bfd_mach_mips4000 },
13575   { bfd_mach_mips4300, bfd_mach_mips4000 },
13576   { bfd_mach_mips4100, bfd_mach_mips4000 },
13577   { bfd_mach_mips4010, bfd_mach_mips4000 },
13578   { bfd_mach_mips5900, bfd_mach_mips4000 },
13579
13580   /* MIPS32 extensions.  */
13581   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13582
13583   /* MIPS II extensions.  */
13584   { bfd_mach_mips4000, bfd_mach_mips6000 },
13585   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13586
13587   /* MIPS I extensions.  */
13588   { bfd_mach_mips6000, bfd_mach_mips3000 },
13589   { bfd_mach_mips3900, bfd_mach_mips3000 }
13590 };
13591
13592
13593 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
13594
13595 static bfd_boolean
13596 mips_mach_extends_p (unsigned long base, unsigned long extension)
13597 {
13598   size_t i;
13599
13600   if (extension == base)
13601     return TRUE;
13602
13603   if (base == bfd_mach_mipsisa32
13604       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13605     return TRUE;
13606
13607   if (base == bfd_mach_mipsisa32r2
13608       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13609     return TRUE;
13610
13611   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
13612     if (extension == mips_mach_extensions[i].extension)
13613       {
13614         extension = mips_mach_extensions[i].base;
13615         if (extension == base)
13616           return TRUE;
13617       }
13618
13619   return FALSE;
13620 }
13621
13622
13623 /* Return true if the given ELF header flags describe a 32-bit binary.  */
13624
13625 static bfd_boolean
13626 mips_32bit_flags_p (flagword flags)
13627 {
13628   return ((flags & EF_MIPS_32BITMODE) != 0
13629           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13630           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13631           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13632           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13633           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13634           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
13635 }
13636
13637
13638 /* Merge object attributes from IBFD into OBFD.  Raise an error if
13639    there are conflicting attributes.  */
13640 static bfd_boolean
13641 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13642 {
13643   obj_attribute *in_attr;
13644   obj_attribute *out_attr;
13645   bfd *abi_fp_bfd;
13646
13647   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
13648   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13649   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13650     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
13651
13652   if (!elf_known_obj_attributes_proc (obfd)[0].i)
13653     {
13654       /* This is the first object.  Copy the attributes.  */
13655       _bfd_elf_copy_obj_attributes (ibfd, obfd);
13656
13657       /* Use the Tag_null value to indicate the attributes have been
13658          initialized.  */
13659       elf_known_obj_attributes_proc (obfd)[0].i = 1;
13660
13661       return TRUE;
13662     }
13663
13664   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
13665      non-conflicting ones.  */
13666   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13667   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13668     {
13669       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13670       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13671         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
13672       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13673         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13674           {
13675           case 1:
13676             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13677               {
13678               case 2:
13679                 _bfd_error_handler
13680                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13681                    obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float");
13682                 break;
13683
13684               case 3:
13685                 _bfd_error_handler
13686                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13687                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13688                 break;
13689
13690               case 4:
13691                 _bfd_error_handler
13692                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13693                    obfd, abi_fp_bfd, ibfd,
13694                    "-mdouble-float", "-mips32r2 -mfp64");
13695                 break;
13696
13697               default:
13698                 _bfd_error_handler
13699                   (_("Warning: %B uses %s (set by %B), "
13700                      "%B uses unknown floating point ABI %d"),
13701                    obfd, abi_fp_bfd, ibfd,
13702                    "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13703                 break;
13704               }
13705             break;
13706
13707           case 2:
13708             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13709               {
13710               case 1:
13711                 _bfd_error_handler
13712                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13713                    obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float");
13714                 break;
13715
13716               case 3:
13717                 _bfd_error_handler
13718                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13719                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13720                 break;
13721
13722               case 4:
13723                 _bfd_error_handler
13724                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13725                    obfd, abi_fp_bfd, ibfd,
13726                    "-msingle-float", "-mips32r2 -mfp64");
13727                 break;
13728
13729               default:
13730                 _bfd_error_handler
13731                   (_("Warning: %B uses %s (set by %B), "
13732                      "%B uses unknown floating point ABI %d"),
13733                    obfd, abi_fp_bfd, ibfd,
13734                    "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13735                 break;
13736               }
13737             break;
13738
13739           case 3:
13740             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13741               {
13742               case 1:
13743               case 2:
13744               case 4:
13745                 _bfd_error_handler
13746                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13747                    obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float");
13748                 break;
13749
13750               default:
13751                 _bfd_error_handler
13752                   (_("Warning: %B uses %s (set by %B), "
13753                      "%B uses unknown floating point ABI %d"),
13754                    obfd, abi_fp_bfd, ibfd,
13755                    "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13756                 break;
13757               }
13758             break;
13759
13760           case 4:
13761             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13762               {
13763               case 1:
13764                 _bfd_error_handler
13765                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13766                    obfd, abi_fp_bfd, ibfd,
13767                    "-mips32r2 -mfp64", "-mdouble-float");
13768                 break;
13769
13770               case 2:
13771                 _bfd_error_handler
13772                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13773                    obfd, abi_fp_bfd, ibfd,
13774                    "-mips32r2 -mfp64", "-msingle-float");
13775                 break;
13776
13777               case 3:
13778                 _bfd_error_handler
13779                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13780                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13781                 break;
13782
13783               default:
13784                 _bfd_error_handler
13785                   (_("Warning: %B uses %s (set by %B), "
13786                      "%B uses unknown floating point ABI %d"),
13787                    obfd, abi_fp_bfd, ibfd,
13788                    "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13789                 break;
13790               }
13791             break;
13792
13793           default:
13794             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13795               {
13796               case 1:
13797                 _bfd_error_handler
13798                   (_("Warning: %B uses unknown floating point ABI %d "
13799                      "(set by %B), %B uses %s"),
13800                    obfd, abi_fp_bfd, ibfd,
13801                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float");
13802                 break;
13803
13804               case 2:
13805                 _bfd_error_handler
13806                   (_("Warning: %B uses unknown floating point ABI %d "
13807                      "(set by %B), %B uses %s"),
13808                    obfd, abi_fp_bfd, ibfd,
13809                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float");
13810                 break;
13811
13812               case 3:
13813                 _bfd_error_handler
13814                   (_("Warning: %B uses unknown floating point ABI %d "
13815                      "(set by %B), %B uses %s"),
13816                    obfd, abi_fp_bfd, ibfd,
13817                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float");
13818                 break;
13819
13820               case 4:
13821                 _bfd_error_handler
13822                   (_("Warning: %B uses unknown floating point ABI %d "
13823                      "(set by %B), %B uses %s"),
13824                    obfd, abi_fp_bfd, ibfd,
13825                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64");
13826                 break;
13827
13828               default:
13829                 _bfd_error_handler
13830                   (_("Warning: %B uses unknown floating point ABI %d "
13831                      "(set by %B), %B uses unknown floating point ABI %d"),
13832                    obfd, abi_fp_bfd, ibfd,
13833                    out_attr[Tag_GNU_MIPS_ABI_FP].i,
13834                    in_attr[Tag_GNU_MIPS_ABI_FP].i);
13835                 break;
13836               }
13837             break;
13838           }
13839     }
13840
13841   /* Merge Tag_compatibility attributes and any common GNU ones.  */
13842   _bfd_elf_merge_object_attributes (ibfd, obfd);
13843
13844   return TRUE;
13845 }
13846
13847 /* Merge backend specific data from an object file to the output
13848    object file when linking.  */
13849
13850 bfd_boolean
13851 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
13852 {
13853   flagword old_flags;
13854   flagword new_flags;
13855   bfd_boolean ok;
13856   bfd_boolean null_input_bfd = TRUE;
13857   asection *sec;
13858
13859   /* Check if we have the same endianness.  */
13860   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
13861     {
13862       (*_bfd_error_handler)
13863         (_("%B: endianness incompatible with that of the selected emulation"),
13864          ibfd);
13865       return FALSE;
13866     }
13867
13868   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
13869     return TRUE;
13870
13871   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
13872     {
13873       (*_bfd_error_handler)
13874         (_("%B: ABI is incompatible with that of the selected emulation"),
13875          ibfd);
13876       return FALSE;
13877     }
13878
13879   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
13880     return FALSE;
13881
13882   new_flags = elf_elfheader (ibfd)->e_flags;
13883   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
13884   old_flags = elf_elfheader (obfd)->e_flags;
13885
13886   if (! elf_flags_init (obfd))
13887     {
13888       elf_flags_init (obfd) = TRUE;
13889       elf_elfheader (obfd)->e_flags = new_flags;
13890       elf_elfheader (obfd)->e_ident[EI_CLASS]
13891         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
13892
13893       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
13894           && (bfd_get_arch_info (obfd)->the_default
13895               || mips_mach_extends_p (bfd_get_mach (obfd),
13896                                       bfd_get_mach (ibfd))))
13897         {
13898           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
13899                                    bfd_get_mach (ibfd)))
13900             return FALSE;
13901         }
13902
13903       return TRUE;
13904     }
13905
13906   /* Check flag compatibility.  */
13907
13908   new_flags &= ~EF_MIPS_NOREORDER;
13909   old_flags &= ~EF_MIPS_NOREORDER;
13910
13911   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
13912      doesn't seem to matter.  */
13913   new_flags &= ~EF_MIPS_XGOT;
13914   old_flags &= ~EF_MIPS_XGOT;
13915
13916   /* MIPSpro generates ucode info in n64 objects.  Again, we should
13917      just be able to ignore this.  */
13918   new_flags &= ~EF_MIPS_UCODE;
13919   old_flags &= ~EF_MIPS_UCODE;
13920
13921   /* DSOs should only be linked with CPIC code.  */
13922   if ((ibfd->flags & DYNAMIC) != 0)
13923     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
13924
13925   if (new_flags == old_flags)
13926     return TRUE;
13927
13928   /* Check to see if the input BFD actually contains any sections.
13929      If not, its flags may not have been initialised either, but it cannot
13930      actually cause any incompatibility.  */
13931   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
13932     {
13933       /* Ignore synthetic sections and empty .text, .data and .bss sections
13934          which are automatically generated by gas.  Also ignore fake
13935          (s)common sections, since merely defining a common symbol does
13936          not affect compatibility.  */
13937       if ((sec->flags & SEC_IS_COMMON) == 0
13938           && strcmp (sec->name, ".reginfo")
13939           && strcmp (sec->name, ".mdebug")
13940           && (sec->size != 0
13941               || (strcmp (sec->name, ".text")
13942                   && strcmp (sec->name, ".data")
13943                   && strcmp (sec->name, ".bss"))))
13944         {
13945           null_input_bfd = FALSE;
13946           break;
13947         }
13948     }
13949   if (null_input_bfd)
13950     return TRUE;
13951
13952   ok = TRUE;
13953
13954   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
13955       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
13956     {
13957       (*_bfd_error_handler)
13958         (_("%B: warning: linking abicalls files with non-abicalls files"),
13959          ibfd);
13960       ok = TRUE;
13961     }
13962
13963   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
13964     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
13965   if (! (new_flags & EF_MIPS_PIC))
13966     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
13967
13968   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
13969   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
13970
13971   /* Compare the ISAs.  */
13972   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
13973     {
13974       (*_bfd_error_handler)
13975         (_("%B: linking 32-bit code with 64-bit code"),
13976          ibfd);
13977       ok = FALSE;
13978     }
13979   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
13980     {
13981       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
13982       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
13983         {
13984           /* Copy the architecture info from IBFD to OBFD.  Also copy
13985              the 32-bit flag (if set) so that we continue to recognise
13986              OBFD as a 32-bit binary.  */
13987           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
13988           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
13989           elf_elfheader (obfd)->e_flags
13990             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
13991
13992           /* Copy across the ABI flags if OBFD doesn't use them
13993              and if that was what caused us to treat IBFD as 32-bit.  */
13994           if ((old_flags & EF_MIPS_ABI) == 0
13995               && mips_32bit_flags_p (new_flags)
13996               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
13997             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
13998         }
13999       else
14000         {
14001           /* The ISAs aren't compatible.  */
14002           (*_bfd_error_handler)
14003             (_("%B: linking %s module with previous %s modules"),
14004              ibfd,
14005              bfd_printable_name (ibfd),
14006              bfd_printable_name (obfd));
14007           ok = FALSE;
14008         }
14009     }
14010
14011   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14012   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14013
14014   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14015      does set EI_CLASS differently from any 32-bit ABI.  */
14016   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14017       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14018           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14019     {
14020       /* Only error if both are set (to different values).  */
14021       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14022           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14023               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14024         {
14025           (*_bfd_error_handler)
14026             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14027              ibfd,
14028              elf_mips_abi_name (ibfd),
14029              elf_mips_abi_name (obfd));
14030           ok = FALSE;
14031         }
14032       new_flags &= ~EF_MIPS_ABI;
14033       old_flags &= ~EF_MIPS_ABI;
14034     }
14035
14036   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
14037      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
14038   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14039     {
14040       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14041       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14042       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14043       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14044       int micro_mis = old_m16 && new_micro;
14045       int m16_mis = old_micro && new_m16;
14046
14047       if (m16_mis || micro_mis)
14048         {
14049           (*_bfd_error_handler)
14050             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14051              ibfd,
14052              m16_mis ? "MIPS16" : "microMIPS",
14053              m16_mis ? "microMIPS" : "MIPS16");
14054           ok = FALSE;
14055         }
14056
14057       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14058
14059       new_flags &= ~ EF_MIPS_ARCH_ASE;
14060       old_flags &= ~ EF_MIPS_ARCH_ASE;
14061     }
14062
14063   /* Warn about any other mismatches */
14064   if (new_flags != old_flags)
14065     {
14066       (*_bfd_error_handler)
14067         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14068          ibfd, (unsigned long) new_flags,
14069          (unsigned long) old_flags);
14070       ok = FALSE;
14071     }
14072
14073   if (! ok)
14074     {
14075       bfd_set_error (bfd_error_bad_value);
14076       return FALSE;
14077     }
14078
14079   return TRUE;
14080 }
14081
14082 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
14083
14084 bfd_boolean
14085 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
14086 {
14087   BFD_ASSERT (!elf_flags_init (abfd)
14088               || elf_elfheader (abfd)->e_flags == flags);
14089
14090   elf_elfheader (abfd)->e_flags = flags;
14091   elf_flags_init (abfd) = TRUE;
14092   return TRUE;
14093 }
14094
14095 char *
14096 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14097 {
14098   switch (dtag)
14099     {
14100     default: return "";
14101     case DT_MIPS_RLD_VERSION:
14102       return "MIPS_RLD_VERSION";
14103     case DT_MIPS_TIME_STAMP:
14104       return "MIPS_TIME_STAMP";
14105     case DT_MIPS_ICHECKSUM:
14106       return "MIPS_ICHECKSUM";
14107     case DT_MIPS_IVERSION:
14108       return "MIPS_IVERSION";
14109     case DT_MIPS_FLAGS:
14110       return "MIPS_FLAGS";
14111     case DT_MIPS_BASE_ADDRESS:
14112       return "MIPS_BASE_ADDRESS";
14113     case DT_MIPS_MSYM:
14114       return "MIPS_MSYM";
14115     case DT_MIPS_CONFLICT:
14116       return "MIPS_CONFLICT";
14117     case DT_MIPS_LIBLIST:
14118       return "MIPS_LIBLIST";
14119     case DT_MIPS_LOCAL_GOTNO:
14120       return "MIPS_LOCAL_GOTNO";
14121     case DT_MIPS_CONFLICTNO:
14122       return "MIPS_CONFLICTNO";
14123     case DT_MIPS_LIBLISTNO:
14124       return "MIPS_LIBLISTNO";
14125     case DT_MIPS_SYMTABNO:
14126       return "MIPS_SYMTABNO";
14127     case DT_MIPS_UNREFEXTNO:
14128       return "MIPS_UNREFEXTNO";
14129     case DT_MIPS_GOTSYM:
14130       return "MIPS_GOTSYM";
14131     case DT_MIPS_HIPAGENO:
14132       return "MIPS_HIPAGENO";
14133     case DT_MIPS_RLD_MAP:
14134       return "MIPS_RLD_MAP";
14135     case DT_MIPS_DELTA_CLASS:
14136       return "MIPS_DELTA_CLASS";
14137     case DT_MIPS_DELTA_CLASS_NO:
14138       return "MIPS_DELTA_CLASS_NO";
14139     case DT_MIPS_DELTA_INSTANCE:
14140       return "MIPS_DELTA_INSTANCE";
14141     case DT_MIPS_DELTA_INSTANCE_NO:
14142       return "MIPS_DELTA_INSTANCE_NO";
14143     case DT_MIPS_DELTA_RELOC:
14144       return "MIPS_DELTA_RELOC";
14145     case DT_MIPS_DELTA_RELOC_NO:
14146       return "MIPS_DELTA_RELOC_NO";
14147     case DT_MIPS_DELTA_SYM:
14148       return "MIPS_DELTA_SYM";
14149     case DT_MIPS_DELTA_SYM_NO:
14150       return "MIPS_DELTA_SYM_NO";
14151     case DT_MIPS_DELTA_CLASSSYM:
14152       return "MIPS_DELTA_CLASSSYM";
14153     case DT_MIPS_DELTA_CLASSSYM_NO:
14154       return "MIPS_DELTA_CLASSSYM_NO";
14155     case DT_MIPS_CXX_FLAGS:
14156       return "MIPS_CXX_FLAGS";
14157     case DT_MIPS_PIXIE_INIT:
14158       return "MIPS_PIXIE_INIT";
14159     case DT_MIPS_SYMBOL_LIB:
14160       return "MIPS_SYMBOL_LIB";
14161     case DT_MIPS_LOCALPAGE_GOTIDX:
14162       return "MIPS_LOCALPAGE_GOTIDX";
14163     case DT_MIPS_LOCAL_GOTIDX:
14164       return "MIPS_LOCAL_GOTIDX";
14165     case DT_MIPS_HIDDEN_GOTIDX:
14166       return "MIPS_HIDDEN_GOTIDX";
14167     case DT_MIPS_PROTECTED_GOTIDX:
14168       return "MIPS_PROTECTED_GOT_IDX";
14169     case DT_MIPS_OPTIONS:
14170       return "MIPS_OPTIONS";
14171     case DT_MIPS_INTERFACE:
14172       return "MIPS_INTERFACE";
14173     case DT_MIPS_DYNSTR_ALIGN:
14174       return "DT_MIPS_DYNSTR_ALIGN";
14175     case DT_MIPS_INTERFACE_SIZE:
14176       return "DT_MIPS_INTERFACE_SIZE";
14177     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14178       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14179     case DT_MIPS_PERF_SUFFIX:
14180       return "DT_MIPS_PERF_SUFFIX";
14181     case DT_MIPS_COMPACT_SIZE:
14182       return "DT_MIPS_COMPACT_SIZE";
14183     case DT_MIPS_GP_VALUE:
14184       return "DT_MIPS_GP_VALUE";
14185     case DT_MIPS_AUX_DYNAMIC:
14186       return "DT_MIPS_AUX_DYNAMIC";
14187     case DT_MIPS_PLTGOT:
14188       return "DT_MIPS_PLTGOT";
14189     case DT_MIPS_RWPLT:
14190       return "DT_MIPS_RWPLT";
14191     }
14192 }
14193
14194 bfd_boolean
14195 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
14196 {
14197   FILE *file = ptr;
14198
14199   BFD_ASSERT (abfd != NULL && ptr != NULL);
14200
14201   /* Print normal ELF private data.  */
14202   _bfd_elf_print_private_bfd_data (abfd, ptr);
14203
14204   /* xgettext:c-format */
14205   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14206
14207   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14208     fprintf (file, _(" [abi=O32]"));
14209   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14210     fprintf (file, _(" [abi=O64]"));
14211   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14212     fprintf (file, _(" [abi=EABI32]"));
14213   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14214     fprintf (file, _(" [abi=EABI64]"));
14215   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14216     fprintf (file, _(" [abi unknown]"));
14217   else if (ABI_N32_P (abfd))
14218     fprintf (file, _(" [abi=N32]"));
14219   else if (ABI_64_P (abfd))
14220     fprintf (file, _(" [abi=64]"));
14221   else
14222     fprintf (file, _(" [no abi set]"));
14223
14224   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
14225     fprintf (file, " [mips1]");
14226   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
14227     fprintf (file, " [mips2]");
14228   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
14229     fprintf (file, " [mips3]");
14230   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
14231     fprintf (file, " [mips4]");
14232   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
14233     fprintf (file, " [mips5]");
14234   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
14235     fprintf (file, " [mips32]");
14236   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
14237     fprintf (file, " [mips64]");
14238   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
14239     fprintf (file, " [mips32r2]");
14240   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
14241     fprintf (file, " [mips64r2]");
14242   else
14243     fprintf (file, _(" [unknown ISA]"));
14244
14245   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14246     fprintf (file, " [mdmx]");
14247
14248   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14249     fprintf (file, " [mips16]");
14250
14251   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14252     fprintf (file, " [micromips]");
14253
14254   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
14255     fprintf (file, " [32bitmode]");
14256   else
14257     fprintf (file, _(" [not 32bitmode]"));
14258
14259   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
14260     fprintf (file, " [noreorder]");
14261
14262   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
14263     fprintf (file, " [PIC]");
14264
14265   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
14266     fprintf (file, " [CPIC]");
14267
14268   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
14269     fprintf (file, " [XGOT]");
14270
14271   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
14272     fprintf (file, " [UCODE]");
14273
14274   fputc ('\n', file);
14275
14276   return TRUE;
14277 }
14278
14279 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
14280 {
14281   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14282   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14283   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14284   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14285   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14286   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
14287   { NULL,                     0,  0, 0,              0 }
14288 };
14289
14290 /* Merge non visibility st_other attributes.  Ensure that the
14291    STO_OPTIONAL flag is copied into h->other, even if this is not a
14292    definiton of the symbol.  */
14293 void
14294 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14295                                       const Elf_Internal_Sym *isym,
14296                                       bfd_boolean definition,
14297                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
14298 {
14299   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14300     {
14301       unsigned char other;
14302
14303       other = (definition ? isym->st_other : h->other);
14304       other &= ~ELF_ST_VISIBILITY (-1);
14305       h->other = other | ELF_ST_VISIBILITY (h->other);
14306     }
14307
14308   if (!definition
14309       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14310     h->other |= STO_OPTIONAL;
14311 }
14312
14313 /* Decide whether an undefined symbol is special and can be ignored.
14314    This is the case for OPTIONAL symbols on IRIX.  */
14315 bfd_boolean
14316 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14317 {
14318   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14319 }
14320
14321 bfd_boolean
14322 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14323 {
14324   return (sym->st_shndx == SHN_COMMON
14325           || sym->st_shndx == SHN_MIPS_ACOMMON
14326           || sym->st_shndx == SHN_MIPS_SCOMMON);
14327 }
14328
14329 /* Return address for Ith PLT stub in section PLT, for relocation REL
14330    or (bfd_vma) -1 if it should not be included.  */
14331
14332 bfd_vma
14333 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14334                            const arelent *rel ATTRIBUTE_UNUSED)
14335 {
14336   return (plt->vma
14337           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14338           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14339 }
14340
14341 void
14342 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14343 {
14344   struct mips_elf_link_hash_table *htab;
14345   Elf_Internal_Ehdr *i_ehdrp;
14346
14347   i_ehdrp = elf_elfheader (abfd);
14348   if (link_info)
14349     {
14350       htab = mips_elf_hash_table (link_info);
14351       BFD_ASSERT (htab != NULL);
14352
14353       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14354         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14355     }
14356 }