* elfxx-mips.c (_bfd_mips_elf_finish_dynamic_symbol): Also clear
[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 /* Nonzero if ABFD has microMIPS code.  */
741 #define MICROMIPS_P(abfd) \
742   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0)
743
744 /* The IRIX compatibility level we are striving for.  */
745 #define IRIX_COMPAT(abfd) \
746   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
747
748 /* Whether we are trying to be compatible with IRIX at all.  */
749 #define SGI_COMPAT(abfd) \
750   (IRIX_COMPAT (abfd) != ict_none)
751
752 /* The name of the options section.  */
753 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
754   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
755
756 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
757    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
758 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
759   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
760
761 /* Whether the section is readonly.  */
762 #define MIPS_ELF_READONLY_SECTION(sec) \
763   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
764    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
765
766 /* The name of the stub section.  */
767 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
768
769 /* The size of an external REL relocation.  */
770 #define MIPS_ELF_REL_SIZE(abfd) \
771   (get_elf_backend_data (abfd)->s->sizeof_rel)
772
773 /* The size of an external RELA relocation.  */
774 #define MIPS_ELF_RELA_SIZE(abfd) \
775   (get_elf_backend_data (abfd)->s->sizeof_rela)
776
777 /* The size of an external dynamic table entry.  */
778 #define MIPS_ELF_DYN_SIZE(abfd) \
779   (get_elf_backend_data (abfd)->s->sizeof_dyn)
780
781 /* The size of a GOT entry.  */
782 #define MIPS_ELF_GOT_SIZE(abfd) \
783   (get_elf_backend_data (abfd)->s->arch_size / 8)
784
785 /* The size of the .rld_map section. */
786 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
787   (get_elf_backend_data (abfd)->s->arch_size / 8)
788
789 /* The size of a symbol-table entry.  */
790 #define MIPS_ELF_SYM_SIZE(abfd) \
791   (get_elf_backend_data (abfd)->s->sizeof_sym)
792
793 /* The default alignment for sections, as a power of two.  */
794 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
795   (get_elf_backend_data (abfd)->s->log_file_align)
796
797 /* Get word-sized data.  */
798 #define MIPS_ELF_GET_WORD(abfd, ptr) \
799   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
800
801 /* Put out word-sized data.  */
802 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
803   (ABI_64_P (abfd)                              \
804    ? bfd_put_64 (abfd, val, ptr)                \
805    : bfd_put_32 (abfd, val, ptr))
806
807 /* The opcode for word-sized loads (LW or LD).  */
808 #define MIPS_ELF_LOAD_WORD(abfd) \
809   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
810
811 /* Add a dynamic symbol table-entry.  */
812 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
813   _bfd_elf_add_dynamic_entry (info, tag, val)
814
815 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
816   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
817
818 /* The name of the dynamic relocation section.  */
819 #define MIPS_ELF_REL_DYN_NAME(INFO) \
820   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
821
822 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
823    from smaller values.  Start with zero, widen, *then* decrement.  */
824 #define MINUS_ONE       (((bfd_vma)0) - 1)
825 #define MINUS_TWO       (((bfd_vma)0) - 2)
826
827 /* The value to write into got[1] for SVR4 targets, to identify it is
828    a GNU object.  The dynamic linker can then use got[1] to store the
829    module pointer.  */
830 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
831   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
832
833 /* The offset of $gp from the beginning of the .got section.  */
834 #define ELF_MIPS_GP_OFFSET(INFO) \
835   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
836
837 /* The maximum size of the GOT for it to be addressable using 16-bit
838    offsets from $gp.  */
839 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
840
841 /* Instructions which appear in a stub.  */
842 #define STUB_LW(abfd)                                                   \
843   ((ABI_64_P (abfd)                                                     \
844     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
845     : 0x8f998010))                              /* lw t9,0x8010(gp) */
846 #define STUB_MOVE(abfd)                                                 \
847    ((ABI_64_P (abfd)                                                    \
848      ? 0x03e0782d                               /* daddu t7,ra */       \
849      : 0x03e07821))                             /* addu t7,ra */
850 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
851 #define STUB_JALR 0x0320f809                    /* jalr t9,ra */
852 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
853 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
854 #define STUB_LI16S(abfd, VAL)                                           \
855    ((ABI_64_P (abfd)                                                    \
856     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
857     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
858
859 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
860 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
861
862 /* The name of the dynamic interpreter.  This is put in the .interp
863    section.  */
864
865 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
866    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
867     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
868     : "/usr/lib/libc.so.1")
869
870 #ifdef BFD64
871 #define MNAME(bfd,pre,pos) \
872   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
873 #define ELF_R_SYM(bfd, i)                                       \
874   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
875 #define ELF_R_TYPE(bfd, i)                                      \
876   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
877 #define ELF_R_INFO(bfd, s, t)                                   \
878   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
879 #else
880 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
881 #define ELF_R_SYM(bfd, i)                                       \
882   (ELF32_R_SYM (i))
883 #define ELF_R_TYPE(bfd, i)                                      \
884   (ELF32_R_TYPE (i))
885 #define ELF_R_INFO(bfd, s, t)                                   \
886   (ELF32_R_INFO (s, t))
887 #endif
888 \f
889   /* The mips16 compiler uses a couple of special sections to handle
890      floating point arguments.
891
892      Section names that look like .mips16.fn.FNNAME contain stubs that
893      copy floating point arguments from the fp regs to the gp regs and
894      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
895      call should be redirected to the stub instead.  If no 32 bit
896      function calls FNNAME, the stub should be discarded.  We need to
897      consider any reference to the function, not just a call, because
898      if the address of the function is taken we will need the stub,
899      since the address might be passed to a 32 bit function.
900
901      Section names that look like .mips16.call.FNNAME contain stubs
902      that copy floating point arguments from the gp regs to the fp
903      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
904      then any 16 bit function that calls FNNAME should be redirected
905      to the stub instead.  If FNNAME is not a 32 bit function, the
906      stub should be discarded.
907
908      .mips16.call.fp.FNNAME sections are similar, but contain stubs
909      which call FNNAME and then copy the return value from the fp regs
910      to the gp regs.  These stubs store the return value in $18 while
911      calling FNNAME; any function which might call one of these stubs
912      must arrange to save $18 around the call.  (This case is not
913      needed for 32 bit functions that call 16 bit functions, because
914      16 bit functions always return floating point values in both
915      $f0/$f1 and $2/$3.)
916
917      Note that in all cases FNNAME might be defined statically.
918      Therefore, FNNAME is not used literally.  Instead, the relocation
919      information will indicate which symbol the section is for.
920
921      We record any stubs that we find in the symbol table.  */
922
923 #define FN_STUB ".mips16.fn."
924 #define CALL_STUB ".mips16.call."
925 #define CALL_FP_STUB ".mips16.call.fp."
926
927 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
928 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
929 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
930 \f
931 /* The format of the first PLT entry in an O32 executable.  */
932 static const bfd_vma mips_o32_exec_plt0_entry[] =
933 {
934   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
935   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
936   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
937   0x031cc023,   /* subu $24, $24, $28                                   */
938   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
939   0x0018c082,   /* srl $24, $24, 2                                      */
940   0x0320f809,   /* jalr $25                                             */
941   0x2718fffe    /* subu $24, $24, 2                                     */
942 };
943
944 /* The format of the first PLT entry in an N32 executable.  Different
945    because gp ($28) is not available; we use t2 ($14) instead.  */
946 static const bfd_vma mips_n32_exec_plt0_entry[] =
947 {
948   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
949   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
950   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
951   0x030ec023,   /* subu $24, $24, $14                                   */
952   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
953   0x0018c082,   /* srl $24, $24, 2                                      */
954   0x0320f809,   /* jalr $25                                             */
955   0x2718fffe    /* subu $24, $24, 2                                     */
956 };
957
958 /* The format of the first PLT entry in an N64 executable.  Different
959    from N32 because of the increased size of GOT entries.  */
960 static const bfd_vma mips_n64_exec_plt0_entry[] =
961 {
962   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
963   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
964   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
965   0x030ec023,   /* subu $24, $24, $14                                   */
966   0x03e0782d,   /* move $15, $31        # 64-bit move (daddu)           */
967   0x0018c0c2,   /* srl $24, $24, 3                                      */
968   0x0320f809,   /* jalr $25                                             */
969   0x2718fffe    /* subu $24, $24, 2                                     */
970 };
971
972 /* The format of subsequent PLT entries.  */
973 static const bfd_vma mips_exec_plt_entry[] =
974 {
975   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
976   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
977   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
978   0x03200008    /* jr $25                                       */
979 };
980
981 /* The format of the first PLT entry in a VxWorks executable.  */
982 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
983 {
984   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
985   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
986   0x8f390008,   /* lw t9, 8(t9)                                 */
987   0x00000000,   /* nop                                          */
988   0x03200008,   /* jr t9                                        */
989   0x00000000    /* nop                                          */
990 };
991
992 /* The format of subsequent PLT entries.  */
993 static const bfd_vma mips_vxworks_exec_plt_entry[] =
994 {
995   0x10000000,   /* b .PLT_resolver                      */
996   0x24180000,   /* li t8, <pltindex>                    */
997   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
998   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
999   0x8f390000,   /* lw t9, 0(t9)                         */
1000   0x00000000,   /* nop                                  */
1001   0x03200008,   /* jr t9                                */
1002   0x00000000    /* nop                                  */
1003 };
1004
1005 /* The format of the first PLT entry in a VxWorks shared object.  */
1006 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1007 {
1008   0x8f990008,   /* lw t9, 8(gp)         */
1009   0x00000000,   /* nop                  */
1010   0x03200008,   /* jr t9                */
1011   0x00000000,   /* nop                  */
1012   0x00000000,   /* nop                  */
1013   0x00000000    /* nop                  */
1014 };
1015
1016 /* The format of subsequent PLT entries.  */
1017 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1018 {
1019   0x10000000,   /* b .PLT_resolver      */
1020   0x24180000    /* li t8, <pltindex>    */
1021 };
1022 \f
1023 /* microMIPS 32-bit opcode helper installer.  */
1024
1025 static void
1026 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1027 {
1028   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1029   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1030 }
1031
1032 /* microMIPS 32-bit opcode helper retriever.  */
1033
1034 static bfd_vma
1035 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1036 {
1037   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1038 }
1039 \f
1040 /* Look up an entry in a MIPS ELF linker hash table.  */
1041
1042 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
1043   ((struct mips_elf_link_hash_entry *)                                  \
1044    elf_link_hash_lookup (&(table)->root, (string), (create),            \
1045                          (copy), (follow)))
1046
1047 /* Traverse a MIPS ELF linker hash table.  */
1048
1049 #define mips_elf_link_hash_traverse(table, func, info)                  \
1050   (elf_link_hash_traverse                                               \
1051    (&(table)->root,                                                     \
1052     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1053     (info)))
1054
1055 /* Find the base offsets for thread-local storage in this object,
1056    for GD/LD and IE/LE respectively.  */
1057
1058 #define TP_OFFSET 0x7000
1059 #define DTP_OFFSET 0x8000
1060
1061 static bfd_vma
1062 dtprel_base (struct bfd_link_info *info)
1063 {
1064   /* If tls_sec is NULL, we should have signalled an error already.  */
1065   if (elf_hash_table (info)->tls_sec == NULL)
1066     return 0;
1067   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1068 }
1069
1070 static bfd_vma
1071 tprel_base (struct bfd_link_info *info)
1072 {
1073   /* If tls_sec is NULL, we should have signalled an error already.  */
1074   if (elf_hash_table (info)->tls_sec == NULL)
1075     return 0;
1076   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1077 }
1078
1079 /* Create an entry in a MIPS ELF linker hash table.  */
1080
1081 static struct bfd_hash_entry *
1082 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1083                             struct bfd_hash_table *table, const char *string)
1084 {
1085   struct mips_elf_link_hash_entry *ret =
1086     (struct mips_elf_link_hash_entry *) entry;
1087
1088   /* Allocate the structure if it has not already been allocated by a
1089      subclass.  */
1090   if (ret == NULL)
1091     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1092   if (ret == NULL)
1093     return (struct bfd_hash_entry *) ret;
1094
1095   /* Call the allocation method of the superclass.  */
1096   ret = ((struct mips_elf_link_hash_entry *)
1097          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1098                                      table, string));
1099   if (ret != NULL)
1100     {
1101       /* Set local fields.  */
1102       memset (&ret->esym, 0, sizeof (EXTR));
1103       /* We use -2 as a marker to indicate that the information has
1104          not been set.  -1 means there is no associated ifd.  */
1105       ret->esym.ifd = -2;
1106       ret->la25_stub = 0;
1107       ret->possibly_dynamic_relocs = 0;
1108       ret->fn_stub = NULL;
1109       ret->call_stub = NULL;
1110       ret->call_fp_stub = NULL;
1111       ret->global_got_area = GGA_NONE;
1112       ret->got_only_for_calls = TRUE;
1113       ret->readonly_reloc = FALSE;
1114       ret->has_static_relocs = FALSE;
1115       ret->no_fn_stub = FALSE;
1116       ret->need_fn_stub = FALSE;
1117       ret->has_nonpic_branches = FALSE;
1118       ret->needs_lazy_stub = FALSE;
1119     }
1120
1121   return (struct bfd_hash_entry *) ret;
1122 }
1123
1124 /* Allocate MIPS ELF private object data.  */
1125
1126 bfd_boolean
1127 _bfd_mips_elf_mkobject (bfd *abfd)
1128 {
1129   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1130                                   MIPS_ELF_DATA);
1131 }
1132
1133 bfd_boolean
1134 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1135 {
1136   if (!sec->used_by_bfd)
1137     {
1138       struct _mips_elf_section_data *sdata;
1139       bfd_size_type amt = sizeof (*sdata);
1140
1141       sdata = bfd_zalloc (abfd, amt);
1142       if (sdata == NULL)
1143         return FALSE;
1144       sec->used_by_bfd = sdata;
1145     }
1146
1147   return _bfd_elf_new_section_hook (abfd, sec);
1148 }
1149 \f
1150 /* Read ECOFF debugging information from a .mdebug section into a
1151    ecoff_debug_info structure.  */
1152
1153 bfd_boolean
1154 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1155                                struct ecoff_debug_info *debug)
1156 {
1157   HDRR *symhdr;
1158   const struct ecoff_debug_swap *swap;
1159   char *ext_hdr;
1160
1161   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1162   memset (debug, 0, sizeof (*debug));
1163
1164   ext_hdr = bfd_malloc (swap->external_hdr_size);
1165   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1166     goto error_return;
1167
1168   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1169                                   swap->external_hdr_size))
1170     goto error_return;
1171
1172   symhdr = &debug->symbolic_header;
1173   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1174
1175   /* The symbolic header contains absolute file offsets and sizes to
1176      read.  */
1177 #define READ(ptr, offset, count, size, type)                            \
1178   if (symhdr->count == 0)                                               \
1179     debug->ptr = NULL;                                                  \
1180   else                                                                  \
1181     {                                                                   \
1182       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1183       debug->ptr = bfd_malloc (amt);                                    \
1184       if (debug->ptr == NULL)                                           \
1185         goto error_return;                                              \
1186       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1187           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1188         goto error_return;                                              \
1189     }
1190
1191   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1192   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1193   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1194   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1195   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1196   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1197         union aux_ext *);
1198   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1199   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1200   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1201   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1202   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1203 #undef READ
1204
1205   debug->fdr = NULL;
1206
1207   return TRUE;
1208
1209  error_return:
1210   if (ext_hdr != NULL)
1211     free (ext_hdr);
1212   if (debug->line != NULL)
1213     free (debug->line);
1214   if (debug->external_dnr != NULL)
1215     free (debug->external_dnr);
1216   if (debug->external_pdr != NULL)
1217     free (debug->external_pdr);
1218   if (debug->external_sym != NULL)
1219     free (debug->external_sym);
1220   if (debug->external_opt != NULL)
1221     free (debug->external_opt);
1222   if (debug->external_aux != NULL)
1223     free (debug->external_aux);
1224   if (debug->ss != NULL)
1225     free (debug->ss);
1226   if (debug->ssext != NULL)
1227     free (debug->ssext);
1228   if (debug->external_fdr != NULL)
1229     free (debug->external_fdr);
1230   if (debug->external_rfd != NULL)
1231     free (debug->external_rfd);
1232   if (debug->external_ext != NULL)
1233     free (debug->external_ext);
1234   return FALSE;
1235 }
1236 \f
1237 /* Swap RPDR (runtime procedure table entry) for output.  */
1238
1239 static void
1240 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1241 {
1242   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1243   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1244   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1245   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1246   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1247   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1248
1249   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1250   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1251
1252   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1253 }
1254
1255 /* Create a runtime procedure table from the .mdebug section.  */
1256
1257 static bfd_boolean
1258 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1259                                  struct bfd_link_info *info, asection *s,
1260                                  struct ecoff_debug_info *debug)
1261 {
1262   const struct ecoff_debug_swap *swap;
1263   HDRR *hdr = &debug->symbolic_header;
1264   RPDR *rpdr, *rp;
1265   struct rpdr_ext *erp;
1266   void *rtproc;
1267   struct pdr_ext *epdr;
1268   struct sym_ext *esym;
1269   char *ss, **sv;
1270   char *str;
1271   bfd_size_type size;
1272   bfd_size_type count;
1273   unsigned long sindex;
1274   unsigned long i;
1275   PDR pdr;
1276   SYMR sym;
1277   const char *no_name_func = _("static procedure (no name)");
1278
1279   epdr = NULL;
1280   rpdr = NULL;
1281   esym = NULL;
1282   ss = NULL;
1283   sv = NULL;
1284
1285   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1286
1287   sindex = strlen (no_name_func) + 1;
1288   count = hdr->ipdMax;
1289   if (count > 0)
1290     {
1291       size = swap->external_pdr_size;
1292
1293       epdr = bfd_malloc (size * count);
1294       if (epdr == NULL)
1295         goto error_return;
1296
1297       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1298         goto error_return;
1299
1300       size = sizeof (RPDR);
1301       rp = rpdr = bfd_malloc (size * count);
1302       if (rpdr == NULL)
1303         goto error_return;
1304
1305       size = sizeof (char *);
1306       sv = bfd_malloc (size * count);
1307       if (sv == NULL)
1308         goto error_return;
1309
1310       count = hdr->isymMax;
1311       size = swap->external_sym_size;
1312       esym = bfd_malloc (size * count);
1313       if (esym == NULL)
1314         goto error_return;
1315
1316       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1317         goto error_return;
1318
1319       count = hdr->issMax;
1320       ss = bfd_malloc (count);
1321       if (ss == NULL)
1322         goto error_return;
1323       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1324         goto error_return;
1325
1326       count = hdr->ipdMax;
1327       for (i = 0; i < (unsigned long) count; i++, rp++)
1328         {
1329           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1330           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1331           rp->adr = sym.value;
1332           rp->regmask = pdr.regmask;
1333           rp->regoffset = pdr.regoffset;
1334           rp->fregmask = pdr.fregmask;
1335           rp->fregoffset = pdr.fregoffset;
1336           rp->frameoffset = pdr.frameoffset;
1337           rp->framereg = pdr.framereg;
1338           rp->pcreg = pdr.pcreg;
1339           rp->irpss = sindex;
1340           sv[i] = ss + sym.iss;
1341           sindex += strlen (sv[i]) + 1;
1342         }
1343     }
1344
1345   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1346   size = BFD_ALIGN (size, 16);
1347   rtproc = bfd_alloc (abfd, size);
1348   if (rtproc == NULL)
1349     {
1350       mips_elf_hash_table (info)->procedure_count = 0;
1351       goto error_return;
1352     }
1353
1354   mips_elf_hash_table (info)->procedure_count = count + 2;
1355
1356   erp = rtproc;
1357   memset (erp, 0, sizeof (struct rpdr_ext));
1358   erp++;
1359   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1360   strcpy (str, no_name_func);
1361   str += strlen (no_name_func) + 1;
1362   for (i = 0; i < count; i++)
1363     {
1364       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1365       strcpy (str, sv[i]);
1366       str += strlen (sv[i]) + 1;
1367     }
1368   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1369
1370   /* Set the size and contents of .rtproc section.  */
1371   s->size = size;
1372   s->contents = rtproc;
1373
1374   /* Skip this section later on (I don't think this currently
1375      matters, but someday it might).  */
1376   s->map_head.link_order = NULL;
1377
1378   if (epdr != NULL)
1379     free (epdr);
1380   if (rpdr != NULL)
1381     free (rpdr);
1382   if (esym != NULL)
1383     free (esym);
1384   if (ss != NULL)
1385     free (ss);
1386   if (sv != NULL)
1387     free (sv);
1388
1389   return TRUE;
1390
1391  error_return:
1392   if (epdr != NULL)
1393     free (epdr);
1394   if (rpdr != NULL)
1395     free (rpdr);
1396   if (esym != NULL)
1397     free (esym);
1398   if (ss != NULL)
1399     free (ss);
1400   if (sv != NULL)
1401     free (sv);
1402   return FALSE;
1403 }
1404 \f
1405 /* We're going to create a stub for H.  Create a symbol for the stub's
1406    value and size, to help make the disassembly easier to read.  */
1407
1408 static bfd_boolean
1409 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1410                              struct mips_elf_link_hash_entry *h,
1411                              const char *prefix, asection *s, bfd_vma value,
1412                              bfd_vma size)
1413 {
1414   struct bfd_link_hash_entry *bh;
1415   struct elf_link_hash_entry *elfh;
1416   const char *name;
1417
1418   if (ELF_ST_IS_MICROMIPS (h->root.other))
1419     value |= 1;
1420
1421   /* Create a new symbol.  */
1422   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1423   bh = NULL;
1424   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1425                                          BSF_LOCAL, s, value, NULL,
1426                                          TRUE, FALSE, &bh))
1427     return FALSE;
1428
1429   /* Make it a local function.  */
1430   elfh = (struct elf_link_hash_entry *) bh;
1431   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1432   elfh->size = size;
1433   elfh->forced_local = 1;
1434   return TRUE;
1435 }
1436
1437 /* We're about to redefine H.  Create a symbol to represent H's
1438    current value and size, to help make the disassembly easier
1439    to read.  */
1440
1441 static bfd_boolean
1442 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1443                                struct mips_elf_link_hash_entry *h,
1444                                const char *prefix)
1445 {
1446   struct bfd_link_hash_entry *bh;
1447   struct elf_link_hash_entry *elfh;
1448   const char *name;
1449   asection *s;
1450   bfd_vma value;
1451
1452   /* Read the symbol's value.  */
1453   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1454               || h->root.root.type == bfd_link_hash_defweak);
1455   s = h->root.root.u.def.section;
1456   value = h->root.root.u.def.value;
1457
1458   /* Create a new symbol.  */
1459   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1460   bh = NULL;
1461   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1462                                          BSF_LOCAL, s, value, NULL,
1463                                          TRUE, FALSE, &bh))
1464     return FALSE;
1465
1466   /* Make it local and copy the other attributes from H.  */
1467   elfh = (struct elf_link_hash_entry *) bh;
1468   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1469   elfh->other = h->root.other;
1470   elfh->size = h->root.size;
1471   elfh->forced_local = 1;
1472   return TRUE;
1473 }
1474
1475 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1476    function rather than to a hard-float stub.  */
1477
1478 static bfd_boolean
1479 section_allows_mips16_refs_p (asection *section)
1480 {
1481   const char *name;
1482
1483   name = bfd_get_section_name (section->owner, section);
1484   return (FN_STUB_P (name)
1485           || CALL_STUB_P (name)
1486           || CALL_FP_STUB_P (name)
1487           || strcmp (name, ".pdr") == 0);
1488 }
1489
1490 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1491    stub section of some kind.  Return the R_SYMNDX of the target
1492    function, or 0 if we can't decide which function that is.  */
1493
1494 static unsigned long
1495 mips16_stub_symndx (const struct elf_backend_data *bed,
1496                     asection *sec ATTRIBUTE_UNUSED,
1497                     const Elf_Internal_Rela *relocs,
1498                     const Elf_Internal_Rela *relend)
1499 {
1500   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1501   const Elf_Internal_Rela *rel;
1502
1503   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1504      one in a compound relocation.  */
1505   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1506     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1507       return ELF_R_SYM (sec->owner, rel->r_info);
1508
1509   /* Otherwise trust the first relocation, whatever its kind.  This is
1510      the traditional behavior.  */
1511   if (relocs < relend)
1512     return ELF_R_SYM (sec->owner, relocs->r_info);
1513
1514   return 0;
1515 }
1516
1517 /* Check the mips16 stubs for a particular symbol, and see if we can
1518    discard them.  */
1519
1520 static void
1521 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1522                              struct mips_elf_link_hash_entry *h)
1523 {
1524   /* Dynamic symbols must use the standard call interface, in case other
1525      objects try to call them.  */
1526   if (h->fn_stub != NULL
1527       && h->root.dynindx != -1)
1528     {
1529       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1530       h->need_fn_stub = TRUE;
1531     }
1532
1533   if (h->fn_stub != NULL
1534       && ! h->need_fn_stub)
1535     {
1536       /* We don't need the fn_stub; the only references to this symbol
1537          are 16 bit calls.  Clobber the size to 0 to prevent it from
1538          being included in the link.  */
1539       h->fn_stub->size = 0;
1540       h->fn_stub->flags &= ~SEC_RELOC;
1541       h->fn_stub->reloc_count = 0;
1542       h->fn_stub->flags |= SEC_EXCLUDE;
1543     }
1544
1545   if (h->call_stub != NULL
1546       && ELF_ST_IS_MIPS16 (h->root.other))
1547     {
1548       /* We don't need the call_stub; this is a 16 bit function, so
1549          calls from other 16 bit functions are OK.  Clobber the size
1550          to 0 to prevent it from being included in the link.  */
1551       h->call_stub->size = 0;
1552       h->call_stub->flags &= ~SEC_RELOC;
1553       h->call_stub->reloc_count = 0;
1554       h->call_stub->flags |= SEC_EXCLUDE;
1555     }
1556
1557   if (h->call_fp_stub != NULL
1558       && ELF_ST_IS_MIPS16 (h->root.other))
1559     {
1560       /* We don't need the call_stub; this is a 16 bit function, so
1561          calls from other 16 bit functions are OK.  Clobber the size
1562          to 0 to prevent it from being included in the link.  */
1563       h->call_fp_stub->size = 0;
1564       h->call_fp_stub->flags &= ~SEC_RELOC;
1565       h->call_fp_stub->reloc_count = 0;
1566       h->call_fp_stub->flags |= SEC_EXCLUDE;
1567     }
1568 }
1569
1570 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1571
1572 static hashval_t
1573 mips_elf_la25_stub_hash (const void *entry_)
1574 {
1575   const struct mips_elf_la25_stub *entry;
1576
1577   entry = (struct mips_elf_la25_stub *) entry_;
1578   return entry->h->root.root.u.def.section->id
1579     + entry->h->root.root.u.def.value;
1580 }
1581
1582 static int
1583 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1584 {
1585   const struct mips_elf_la25_stub *entry1, *entry2;
1586
1587   entry1 = (struct mips_elf_la25_stub *) entry1_;
1588   entry2 = (struct mips_elf_la25_stub *) entry2_;
1589   return ((entry1->h->root.root.u.def.section
1590            == entry2->h->root.root.u.def.section)
1591           && (entry1->h->root.root.u.def.value
1592               == entry2->h->root.root.u.def.value));
1593 }
1594
1595 /* Called by the linker to set up the la25 stub-creation code.  FN is
1596    the linker's implementation of add_stub_function.  Return true on
1597    success.  */
1598
1599 bfd_boolean
1600 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1601                           asection *(*fn) (const char *, asection *,
1602                                            asection *))
1603 {
1604   struct mips_elf_link_hash_table *htab;
1605
1606   htab = mips_elf_hash_table (info);
1607   if (htab == NULL)
1608     return FALSE;
1609
1610   htab->add_stub_section = fn;
1611   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1612                                       mips_elf_la25_stub_eq, NULL);
1613   if (htab->la25_stubs == NULL)
1614     return FALSE;
1615
1616   return TRUE;
1617 }
1618
1619 /* Return true if H is a locally-defined PIC function, in the sense
1620    that it or its fn_stub might need $25 to be valid on entry.
1621    Note that MIPS16 functions set up $gp using PC-relative instructions,
1622    so they themselves never need $25 to be valid.  Only non-MIPS16
1623    entry points are of interest here.  */
1624
1625 static bfd_boolean
1626 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1627 {
1628   return ((h->root.root.type == bfd_link_hash_defined
1629            || h->root.root.type == bfd_link_hash_defweak)
1630           && h->root.def_regular
1631           && !bfd_is_abs_section (h->root.root.u.def.section)
1632           && (!ELF_ST_IS_MIPS16 (h->root.other)
1633               || (h->fn_stub && h->need_fn_stub))
1634           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1635               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1636 }
1637
1638 /* Set *SEC to the input section that contains the target of STUB.
1639    Return the offset of the target from the start of that section.  */
1640
1641 static bfd_vma
1642 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1643                           asection **sec)
1644 {
1645   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1646     {
1647       BFD_ASSERT (stub->h->need_fn_stub);
1648       *sec = stub->h->fn_stub;
1649       return 0;
1650     }
1651   else
1652     {
1653       *sec = stub->h->root.root.u.def.section;
1654       return stub->h->root.root.u.def.value;
1655     }
1656 }
1657
1658 /* STUB describes an la25 stub that we have decided to implement
1659    by inserting an LUI/ADDIU pair before the target function.
1660    Create the section and redirect the function symbol to it.  */
1661
1662 static bfd_boolean
1663 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1664                          struct bfd_link_info *info)
1665 {
1666   struct mips_elf_link_hash_table *htab;
1667   char *name;
1668   asection *s, *input_section;
1669   unsigned int align;
1670
1671   htab = mips_elf_hash_table (info);
1672   if (htab == NULL)
1673     return FALSE;
1674
1675   /* Create a unique name for the new section.  */
1676   name = bfd_malloc (11 + sizeof (".text.stub."));
1677   if (name == NULL)
1678     return FALSE;
1679   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1680
1681   /* Create the section.  */
1682   mips_elf_get_la25_target (stub, &input_section);
1683   s = htab->add_stub_section (name, input_section,
1684                               input_section->output_section);
1685   if (s == NULL)
1686     return FALSE;
1687
1688   /* Make sure that any padding goes before the stub.  */
1689   align = input_section->alignment_power;
1690   if (!bfd_set_section_alignment (s->owner, s, align))
1691     return FALSE;
1692   if (align > 3)
1693     s->size = (1 << align) - 8;
1694
1695   /* Create a symbol for the stub.  */
1696   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1697   stub->stub_section = s;
1698   stub->offset = s->size;
1699
1700   /* Allocate room for it.  */
1701   s->size += 8;
1702   return TRUE;
1703 }
1704
1705 /* STUB describes an la25 stub that we have decided to implement
1706    with a separate trampoline.  Allocate room for it and redirect
1707    the function symbol to it.  */
1708
1709 static bfd_boolean
1710 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1711                               struct bfd_link_info *info)
1712 {
1713   struct mips_elf_link_hash_table *htab;
1714   asection *s;
1715
1716   htab = mips_elf_hash_table (info);
1717   if (htab == NULL)
1718     return FALSE;
1719
1720   /* Create a trampoline section, if we haven't already.  */
1721   s = htab->strampoline;
1722   if (s == NULL)
1723     {
1724       asection *input_section = stub->h->root.root.u.def.section;
1725       s = htab->add_stub_section (".text", NULL,
1726                                   input_section->output_section);
1727       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1728         return FALSE;
1729       htab->strampoline = s;
1730     }
1731
1732   /* Create a symbol for the stub.  */
1733   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1734   stub->stub_section = s;
1735   stub->offset = s->size;
1736
1737   /* Allocate room for it.  */
1738   s->size += 16;
1739   return TRUE;
1740 }
1741
1742 /* H describes a symbol that needs an la25 stub.  Make sure that an
1743    appropriate stub exists and point H at it.  */
1744
1745 static bfd_boolean
1746 mips_elf_add_la25_stub (struct bfd_link_info *info,
1747                         struct mips_elf_link_hash_entry *h)
1748 {
1749   struct mips_elf_link_hash_table *htab;
1750   struct mips_elf_la25_stub search, *stub;
1751   bfd_boolean use_trampoline_p;
1752   asection *s;
1753   bfd_vma value;
1754   void **slot;
1755
1756   /* Describe the stub we want.  */
1757   search.stub_section = NULL;
1758   search.offset = 0;
1759   search.h = h;
1760
1761   /* See if we've already created an equivalent stub.  */
1762   htab = mips_elf_hash_table (info);
1763   if (htab == NULL)
1764     return FALSE;
1765
1766   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1767   if (slot == NULL)
1768     return FALSE;
1769
1770   stub = (struct mips_elf_la25_stub *) *slot;
1771   if (stub != NULL)
1772     {
1773       /* We can reuse the existing stub.  */
1774       h->la25_stub = stub;
1775       return TRUE;
1776     }
1777
1778   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1779   stub = bfd_malloc (sizeof (search));
1780   if (stub == NULL)
1781     return FALSE;
1782   *stub = search;
1783   *slot = stub;
1784
1785   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1786      of the section and if we would need no more than 2 nops.  */
1787   value = mips_elf_get_la25_target (stub, &s);
1788   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1789
1790   h->la25_stub = stub;
1791   return (use_trampoline_p
1792           ? mips_elf_add_la25_trampoline (stub, info)
1793           : mips_elf_add_la25_intro (stub, info));
1794 }
1795
1796 /* A mips_elf_link_hash_traverse callback that is called before sizing
1797    sections.  DATA points to a mips_htab_traverse_info structure.  */
1798
1799 static bfd_boolean
1800 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1801 {
1802   struct mips_htab_traverse_info *hti;
1803
1804   hti = (struct mips_htab_traverse_info *) data;
1805   if (!hti->info->relocatable)
1806     mips_elf_check_mips16_stubs (hti->info, h);
1807
1808   if (mips_elf_local_pic_function_p (h))
1809     {
1810       /* PR 12845: If H is in a section that has been garbage
1811          collected it will have its output section set to *ABS*.  */
1812       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1813         return TRUE;
1814
1815       /* H is a function that might need $25 to be valid on entry.
1816          If we're creating a non-PIC relocatable object, mark H as
1817          being PIC.  If we're creating a non-relocatable object with
1818          non-PIC branches and jumps to H, make sure that H has an la25
1819          stub.  */
1820       if (hti->info->relocatable)
1821         {
1822           if (!PIC_OBJECT_P (hti->output_bfd))
1823             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1824         }
1825       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1826         {
1827           hti->error = TRUE;
1828           return FALSE;
1829         }
1830     }
1831   return TRUE;
1832 }
1833 \f
1834 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1835    Most mips16 instructions are 16 bits, but these instructions
1836    are 32 bits.
1837
1838    The format of these instructions is:
1839
1840    +--------------+--------------------------------+
1841    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
1842    +--------------+--------------------------------+
1843    |                Immediate  15:0                |
1844    +-----------------------------------------------+
1845
1846    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
1847    Note that the immediate value in the first word is swapped.
1848
1849    When producing a relocatable object file, R_MIPS16_26 is
1850    handled mostly like R_MIPS_26.  In particular, the addend is
1851    stored as a straight 26-bit value in a 32-bit instruction.
1852    (gas makes life simpler for itself by never adjusting a
1853    R_MIPS16_26 reloc to be against a section, so the addend is
1854    always zero).  However, the 32 bit instruction is stored as 2
1855    16-bit values, rather than a single 32-bit value.  In a
1856    big-endian file, the result is the same; in a little-endian
1857    file, the two 16-bit halves of the 32 bit value are swapped.
1858    This is so that a disassembler can recognize the jal
1859    instruction.
1860
1861    When doing a final link, R_MIPS16_26 is treated as a 32 bit
1862    instruction stored as two 16-bit values.  The addend A is the
1863    contents of the targ26 field.  The calculation is the same as
1864    R_MIPS_26.  When storing the calculated value, reorder the
1865    immediate value as shown above, and don't forget to store the
1866    value as two 16-bit values.
1867
1868    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1869    defined as
1870
1871    big-endian:
1872    +--------+----------------------+
1873    |        |                      |
1874    |        |    targ26-16         |
1875    |31    26|25                   0|
1876    +--------+----------------------+
1877
1878    little-endian:
1879    +----------+------+-------------+
1880    |          |      |             |
1881    |  sub1    |      |     sub2    |
1882    |0        9|10  15|16         31|
1883    +----------+--------------------+
1884    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1885    ((sub1 << 16) | sub2)).
1886
1887    When producing a relocatable object file, the calculation is
1888    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1889    When producing a fully linked file, the calculation is
1890    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1891    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1892
1893    The table below lists the other MIPS16 instruction relocations.
1894    Each one is calculated in the same way as the non-MIPS16 relocation
1895    given on the right, but using the extended MIPS16 layout of 16-bit
1896    immediate fields:
1897
1898         R_MIPS16_GPREL          R_MIPS_GPREL16
1899         R_MIPS16_GOT16          R_MIPS_GOT16
1900         R_MIPS16_CALL16         R_MIPS_CALL16
1901         R_MIPS16_HI16           R_MIPS_HI16
1902         R_MIPS16_LO16           R_MIPS_LO16
1903
1904    A typical instruction will have a format like this:
1905
1906    +--------------+--------------------------------+
1907    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
1908    +--------------+--------------------------------+
1909    |    Major     |   rx   |   ry   |   Imm  4:0   |
1910    +--------------+--------------------------------+
1911
1912    EXTEND is the five bit value 11110.  Major is the instruction
1913    opcode.
1914
1915    All we need to do here is shuffle the bits appropriately.
1916    As above, the two 16-bit halves must be swapped on a
1917    little-endian system.  */
1918
1919 static inline bfd_boolean
1920 mips16_reloc_p (int r_type)
1921 {
1922   switch (r_type)
1923     {
1924     case R_MIPS16_26:
1925     case R_MIPS16_GPREL:
1926     case R_MIPS16_GOT16:
1927     case R_MIPS16_CALL16:
1928     case R_MIPS16_HI16:
1929     case R_MIPS16_LO16:
1930     case R_MIPS16_TLS_GD:
1931     case R_MIPS16_TLS_LDM:
1932     case R_MIPS16_TLS_DTPREL_HI16:
1933     case R_MIPS16_TLS_DTPREL_LO16:
1934     case R_MIPS16_TLS_GOTTPREL:
1935     case R_MIPS16_TLS_TPREL_HI16:
1936     case R_MIPS16_TLS_TPREL_LO16:
1937       return TRUE;
1938
1939     default:
1940       return FALSE;
1941     }
1942 }
1943
1944 /* Check if a microMIPS reloc.  */
1945
1946 static inline bfd_boolean
1947 micromips_reloc_p (unsigned int r_type)
1948 {
1949   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
1950 }
1951
1952 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
1953    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
1954    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
1955
1956 static inline bfd_boolean
1957 micromips_reloc_shuffle_p (unsigned int r_type)
1958 {
1959   return (micromips_reloc_p (r_type)
1960           && r_type != R_MICROMIPS_PC7_S1
1961           && r_type != R_MICROMIPS_PC10_S1);
1962 }
1963
1964 static inline bfd_boolean
1965 got16_reloc_p (int r_type)
1966 {
1967   return (r_type == R_MIPS_GOT16
1968           || r_type == R_MIPS16_GOT16
1969           || r_type == R_MICROMIPS_GOT16);
1970 }
1971
1972 static inline bfd_boolean
1973 call16_reloc_p (int r_type)
1974 {
1975   return (r_type == R_MIPS_CALL16
1976           || r_type == R_MIPS16_CALL16
1977           || r_type == R_MICROMIPS_CALL16);
1978 }
1979
1980 static inline bfd_boolean
1981 got_disp_reloc_p (unsigned int r_type)
1982 {
1983   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
1984 }
1985
1986 static inline bfd_boolean
1987 got_page_reloc_p (unsigned int r_type)
1988 {
1989   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
1990 }
1991
1992 static inline bfd_boolean
1993 got_ofst_reloc_p (unsigned int r_type)
1994 {
1995   return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
1996 }
1997
1998 static inline bfd_boolean
1999 got_hi16_reloc_p (unsigned int r_type)
2000 {
2001   return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
2002 }
2003
2004 static inline bfd_boolean
2005 got_lo16_reloc_p (unsigned int r_type)
2006 {
2007   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2008 }
2009
2010 static inline bfd_boolean
2011 call_hi16_reloc_p (unsigned int r_type)
2012 {
2013   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2014 }
2015
2016 static inline bfd_boolean
2017 call_lo16_reloc_p (unsigned int r_type)
2018 {
2019   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2020 }
2021
2022 static inline bfd_boolean
2023 hi16_reloc_p (int r_type)
2024 {
2025   return (r_type == R_MIPS_HI16
2026           || r_type == R_MIPS16_HI16
2027           || r_type == R_MICROMIPS_HI16);
2028 }
2029
2030 static inline bfd_boolean
2031 lo16_reloc_p (int r_type)
2032 {
2033   return (r_type == R_MIPS_LO16
2034           || r_type == R_MIPS16_LO16
2035           || r_type == R_MICROMIPS_LO16);
2036 }
2037
2038 static inline bfd_boolean
2039 mips16_call_reloc_p (int r_type)
2040 {
2041   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2042 }
2043
2044 static inline bfd_boolean
2045 jal_reloc_p (int r_type)
2046 {
2047   return (r_type == R_MIPS_26
2048           || r_type == R_MIPS16_26
2049           || r_type == R_MICROMIPS_26_S1);
2050 }
2051
2052 static inline bfd_boolean
2053 micromips_branch_reloc_p (int r_type)
2054 {
2055   return (r_type == R_MICROMIPS_26_S1
2056           || r_type == R_MICROMIPS_PC16_S1
2057           || r_type == R_MICROMIPS_PC10_S1
2058           || r_type == R_MICROMIPS_PC7_S1);
2059 }
2060
2061 static inline bfd_boolean
2062 tls_gd_reloc_p (unsigned int r_type)
2063 {
2064   return (r_type == R_MIPS_TLS_GD
2065           || r_type == R_MIPS16_TLS_GD
2066           || r_type == R_MICROMIPS_TLS_GD);
2067 }
2068
2069 static inline bfd_boolean
2070 tls_ldm_reloc_p (unsigned int r_type)
2071 {
2072   return (r_type == R_MIPS_TLS_LDM
2073           || r_type == R_MIPS16_TLS_LDM
2074           || r_type == R_MICROMIPS_TLS_LDM);
2075 }
2076
2077 static inline bfd_boolean
2078 tls_gottprel_reloc_p (unsigned int r_type)
2079 {
2080   return (r_type == R_MIPS_TLS_GOTTPREL
2081           || r_type == R_MIPS16_TLS_GOTTPREL
2082           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2083 }
2084
2085 void
2086 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2087                                bfd_boolean jal_shuffle, bfd_byte *data)
2088 {
2089   bfd_vma first, second, val;
2090
2091   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2092     return;
2093
2094   /* Pick up the first and second halfwords of the instruction.  */
2095   first = bfd_get_16 (abfd, data);
2096   second = bfd_get_16 (abfd, data + 2);
2097   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2098     val = first << 16 | second;
2099   else if (r_type != R_MIPS16_26)
2100     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2101            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2102   else
2103     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2104            | ((first & 0x1f) << 21) | second);
2105   bfd_put_32 (abfd, val, data);
2106 }
2107
2108 void
2109 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2110                              bfd_boolean jal_shuffle, bfd_byte *data)
2111 {
2112   bfd_vma first, second, val;
2113
2114   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2115     return;
2116
2117   val = bfd_get_32 (abfd, data);
2118   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2119     {
2120       second = val & 0xffff;
2121       first = val >> 16;
2122     }
2123   else if (r_type != R_MIPS16_26)
2124     {
2125       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2126       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2127     }
2128   else
2129     {
2130       second = val & 0xffff;
2131       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2132                | ((val >> 21) & 0x1f);
2133     }
2134   bfd_put_16 (abfd, second, data + 2);
2135   bfd_put_16 (abfd, first, data);
2136 }
2137
2138 bfd_reloc_status_type
2139 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2140                                arelent *reloc_entry, asection *input_section,
2141                                bfd_boolean relocatable, void *data, bfd_vma gp)
2142 {
2143   bfd_vma relocation;
2144   bfd_signed_vma val;
2145   bfd_reloc_status_type status;
2146
2147   if (bfd_is_com_section (symbol->section))
2148     relocation = 0;
2149   else
2150     relocation = symbol->value;
2151
2152   relocation += symbol->section->output_section->vma;
2153   relocation += symbol->section->output_offset;
2154
2155   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2156     return bfd_reloc_outofrange;
2157
2158   /* Set val to the offset into the section or symbol.  */
2159   val = reloc_entry->addend;
2160
2161   _bfd_mips_elf_sign_extend (val, 16);
2162
2163   /* Adjust val for the final section location and GP value.  If we
2164      are producing relocatable output, we don't want to do this for
2165      an external symbol.  */
2166   if (! relocatable
2167       || (symbol->flags & BSF_SECTION_SYM) != 0)
2168     val += relocation - gp;
2169
2170   if (reloc_entry->howto->partial_inplace)
2171     {
2172       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2173                                        (bfd_byte *) data
2174                                        + reloc_entry->address);
2175       if (status != bfd_reloc_ok)
2176         return status;
2177     }
2178   else
2179     reloc_entry->addend = val;
2180
2181   if (relocatable)
2182     reloc_entry->address += input_section->output_offset;
2183
2184   return bfd_reloc_ok;
2185 }
2186
2187 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2188    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2189    that contains the relocation field and DATA points to the start of
2190    INPUT_SECTION.  */
2191
2192 struct mips_hi16
2193 {
2194   struct mips_hi16 *next;
2195   bfd_byte *data;
2196   asection *input_section;
2197   arelent rel;
2198 };
2199
2200 /* FIXME: This should not be a static variable.  */
2201
2202 static struct mips_hi16 *mips_hi16_list;
2203
2204 /* A howto special_function for REL *HI16 relocations.  We can only
2205    calculate the correct value once we've seen the partnering
2206    *LO16 relocation, so just save the information for later.
2207
2208    The ABI requires that the *LO16 immediately follow the *HI16.
2209    However, as a GNU extension, we permit an arbitrary number of
2210    *HI16s to be associated with a single *LO16.  This significantly
2211    simplies the relocation handling in gcc.  */
2212
2213 bfd_reloc_status_type
2214 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2215                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2216                           asection *input_section, bfd *output_bfd,
2217                           char **error_message ATTRIBUTE_UNUSED)
2218 {
2219   struct mips_hi16 *n;
2220
2221   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2222     return bfd_reloc_outofrange;
2223
2224   n = bfd_malloc (sizeof *n);
2225   if (n == NULL)
2226     return bfd_reloc_outofrange;
2227
2228   n->next = mips_hi16_list;
2229   n->data = data;
2230   n->input_section = input_section;
2231   n->rel = *reloc_entry;
2232   mips_hi16_list = n;
2233
2234   if (output_bfd != NULL)
2235     reloc_entry->address += input_section->output_offset;
2236
2237   return bfd_reloc_ok;
2238 }
2239
2240 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2241    like any other 16-bit relocation when applied to global symbols, but is
2242    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2243
2244 bfd_reloc_status_type
2245 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2246                            void *data, asection *input_section,
2247                            bfd *output_bfd, char **error_message)
2248 {
2249   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2250       || bfd_is_und_section (bfd_get_section (symbol))
2251       || bfd_is_com_section (bfd_get_section (symbol)))
2252     /* The relocation is against a global symbol.  */
2253     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2254                                         input_section, output_bfd,
2255                                         error_message);
2256
2257   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2258                                    input_section, output_bfd, error_message);
2259 }
2260
2261 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2262    is a straightforward 16 bit inplace relocation, but we must deal with
2263    any partnering high-part relocations as well.  */
2264
2265 bfd_reloc_status_type
2266 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2267                           void *data, asection *input_section,
2268                           bfd *output_bfd, char **error_message)
2269 {
2270   bfd_vma vallo;
2271   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2272
2273   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2274     return bfd_reloc_outofrange;
2275
2276   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2277                                  location);
2278   vallo = bfd_get_32 (abfd, location);
2279   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2280                                location);
2281
2282   while (mips_hi16_list != NULL)
2283     {
2284       bfd_reloc_status_type ret;
2285       struct mips_hi16 *hi;
2286
2287       hi = mips_hi16_list;
2288
2289       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2290          want to install the addend in the same way as for a R_MIPS*_HI16
2291          relocation (with a rightshift of 16).  However, since GOT16
2292          relocations can also be used with global symbols, their howto
2293          has a rightshift of 0.  */
2294       if (hi->rel.howto->type == R_MIPS_GOT16)
2295         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2296       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2297         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2298       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2299         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2300
2301       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2302          carry or borrow will induce a change of +1 or -1 in the high part.  */
2303       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2304
2305       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2306                                          hi->input_section, output_bfd,
2307                                          error_message);
2308       if (ret != bfd_reloc_ok)
2309         return ret;
2310
2311       mips_hi16_list = hi->next;
2312       free (hi);
2313     }
2314
2315   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2316                                       input_section, output_bfd,
2317                                       error_message);
2318 }
2319
2320 /* A generic howto special_function.  This calculates and installs the
2321    relocation itself, thus avoiding the oft-discussed problems in
2322    bfd_perform_relocation and bfd_install_relocation.  */
2323
2324 bfd_reloc_status_type
2325 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2326                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2327                              asection *input_section, bfd *output_bfd,
2328                              char **error_message ATTRIBUTE_UNUSED)
2329 {
2330   bfd_signed_vma val;
2331   bfd_reloc_status_type status;
2332   bfd_boolean relocatable;
2333
2334   relocatable = (output_bfd != NULL);
2335
2336   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2337     return bfd_reloc_outofrange;
2338
2339   /* Build up the field adjustment in VAL.  */
2340   val = 0;
2341   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2342     {
2343       /* Either we're calculating the final field value or we have a
2344          relocation against a section symbol.  Add in the section's
2345          offset or address.  */
2346       val += symbol->section->output_section->vma;
2347       val += symbol->section->output_offset;
2348     }
2349
2350   if (!relocatable)
2351     {
2352       /* We're calculating the final field value.  Add in the symbol's value
2353          and, if pc-relative, subtract the address of the field itself.  */
2354       val += symbol->value;
2355       if (reloc_entry->howto->pc_relative)
2356         {
2357           val -= input_section->output_section->vma;
2358           val -= input_section->output_offset;
2359           val -= reloc_entry->address;
2360         }
2361     }
2362
2363   /* VAL is now the final adjustment.  If we're keeping this relocation
2364      in the output file, and if the relocation uses a separate addend,
2365      we just need to add VAL to that addend.  Otherwise we need to add
2366      VAL to the relocation field itself.  */
2367   if (relocatable && !reloc_entry->howto->partial_inplace)
2368     reloc_entry->addend += val;
2369   else
2370     {
2371       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2372
2373       /* Add in the separate addend, if any.  */
2374       val += reloc_entry->addend;
2375
2376       /* Add VAL to the relocation field.  */
2377       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2378                                      location);
2379       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2380                                        location);
2381       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2382                                    location);
2383
2384       if (status != bfd_reloc_ok)
2385         return status;
2386     }
2387
2388   if (relocatable)
2389     reloc_entry->address += input_section->output_offset;
2390
2391   return bfd_reloc_ok;
2392 }
2393 \f
2394 /* Swap an entry in a .gptab section.  Note that these routines rely
2395    on the equivalence of the two elements of the union.  */
2396
2397 static void
2398 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2399                               Elf32_gptab *in)
2400 {
2401   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2402   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2403 }
2404
2405 static void
2406 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2407                                Elf32_External_gptab *ex)
2408 {
2409   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2410   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2411 }
2412
2413 static void
2414 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2415                                 Elf32_External_compact_rel *ex)
2416 {
2417   H_PUT_32 (abfd, in->id1, ex->id1);
2418   H_PUT_32 (abfd, in->num, ex->num);
2419   H_PUT_32 (abfd, in->id2, ex->id2);
2420   H_PUT_32 (abfd, in->offset, ex->offset);
2421   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2422   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2423 }
2424
2425 static void
2426 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2427                            Elf32_External_crinfo *ex)
2428 {
2429   unsigned long l;
2430
2431   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2432        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2433        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2434        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2435   H_PUT_32 (abfd, l, ex->info);
2436   H_PUT_32 (abfd, in->konst, ex->konst);
2437   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2438 }
2439 \f
2440 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2441    routines swap this structure in and out.  They are used outside of
2442    BFD, so they are globally visible.  */
2443
2444 void
2445 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2446                                 Elf32_RegInfo *in)
2447 {
2448   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2449   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2450   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2451   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2452   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2453   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2454 }
2455
2456 void
2457 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2458                                  Elf32_External_RegInfo *ex)
2459 {
2460   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2461   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2462   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2463   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2464   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2465   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2466 }
2467
2468 /* In the 64 bit ABI, the .MIPS.options section holds register
2469    information in an Elf64_Reginfo structure.  These routines swap
2470    them in and out.  They are globally visible because they are used
2471    outside of BFD.  These routines are here so that gas can call them
2472    without worrying about whether the 64 bit ABI has been included.  */
2473
2474 void
2475 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2476                                 Elf64_Internal_RegInfo *in)
2477 {
2478   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2479   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2480   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2481   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2482   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2483   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2484   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2485 }
2486
2487 void
2488 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2489                                  Elf64_External_RegInfo *ex)
2490 {
2491   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2492   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2493   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2494   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2495   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2496   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2497   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2498 }
2499
2500 /* Swap in an options header.  */
2501
2502 void
2503 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2504                               Elf_Internal_Options *in)
2505 {
2506   in->kind = H_GET_8 (abfd, ex->kind);
2507   in->size = H_GET_8 (abfd, ex->size);
2508   in->section = H_GET_16 (abfd, ex->section);
2509   in->info = H_GET_32 (abfd, ex->info);
2510 }
2511
2512 /* Swap out an options header.  */
2513
2514 void
2515 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2516                                Elf_External_Options *ex)
2517 {
2518   H_PUT_8 (abfd, in->kind, ex->kind);
2519   H_PUT_8 (abfd, in->size, ex->size);
2520   H_PUT_16 (abfd, in->section, ex->section);
2521   H_PUT_32 (abfd, in->info, ex->info);
2522 }
2523 \f
2524 /* This function is called via qsort() to sort the dynamic relocation
2525    entries by increasing r_symndx value.  */
2526
2527 static int
2528 sort_dynamic_relocs (const void *arg1, const void *arg2)
2529 {
2530   Elf_Internal_Rela int_reloc1;
2531   Elf_Internal_Rela int_reloc2;
2532   int diff;
2533
2534   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2535   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2536
2537   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2538   if (diff != 0)
2539     return diff;
2540
2541   if (int_reloc1.r_offset < int_reloc2.r_offset)
2542     return -1;
2543   if (int_reloc1.r_offset > int_reloc2.r_offset)
2544     return 1;
2545   return 0;
2546 }
2547
2548 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2549
2550 static int
2551 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2552                         const void *arg2 ATTRIBUTE_UNUSED)
2553 {
2554 #ifdef BFD64
2555   Elf_Internal_Rela int_reloc1[3];
2556   Elf_Internal_Rela int_reloc2[3];
2557
2558   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2559     (reldyn_sorting_bfd, arg1, int_reloc1);
2560   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2561     (reldyn_sorting_bfd, arg2, int_reloc2);
2562
2563   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2564     return -1;
2565   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2566     return 1;
2567
2568   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2569     return -1;
2570   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2571     return 1;
2572   return 0;
2573 #else
2574   abort ();
2575 #endif
2576 }
2577
2578
2579 /* This routine is used to write out ECOFF debugging external symbol
2580    information.  It is called via mips_elf_link_hash_traverse.  The
2581    ECOFF external symbol information must match the ELF external
2582    symbol information.  Unfortunately, at this point we don't know
2583    whether a symbol is required by reloc information, so the two
2584    tables may wind up being different.  We must sort out the external
2585    symbol information before we can set the final size of the .mdebug
2586    section, and we must set the size of the .mdebug section before we
2587    can relocate any sections, and we can't know which symbols are
2588    required by relocation until we relocate the sections.
2589    Fortunately, it is relatively unlikely that any symbol will be
2590    stripped but required by a reloc.  In particular, it can not happen
2591    when generating a final executable.  */
2592
2593 static bfd_boolean
2594 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2595 {
2596   struct extsym_info *einfo = data;
2597   bfd_boolean strip;
2598   asection *sec, *output_section;
2599
2600   if (h->root.indx == -2)
2601     strip = FALSE;
2602   else if ((h->root.def_dynamic
2603             || h->root.ref_dynamic
2604             || h->root.type == bfd_link_hash_new)
2605            && !h->root.def_regular
2606            && !h->root.ref_regular)
2607     strip = TRUE;
2608   else if (einfo->info->strip == strip_all
2609            || (einfo->info->strip == strip_some
2610                && bfd_hash_lookup (einfo->info->keep_hash,
2611                                    h->root.root.root.string,
2612                                    FALSE, FALSE) == NULL))
2613     strip = TRUE;
2614   else
2615     strip = FALSE;
2616
2617   if (strip)
2618     return TRUE;
2619
2620   if (h->esym.ifd == -2)
2621     {
2622       h->esym.jmptbl = 0;
2623       h->esym.cobol_main = 0;
2624       h->esym.weakext = 0;
2625       h->esym.reserved = 0;
2626       h->esym.ifd = ifdNil;
2627       h->esym.asym.value = 0;
2628       h->esym.asym.st = stGlobal;
2629
2630       if (h->root.root.type == bfd_link_hash_undefined
2631           || h->root.root.type == bfd_link_hash_undefweak)
2632         {
2633           const char *name;
2634
2635           /* Use undefined class.  Also, set class and type for some
2636              special symbols.  */
2637           name = h->root.root.root.string;
2638           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2639               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2640             {
2641               h->esym.asym.sc = scData;
2642               h->esym.asym.st = stLabel;
2643               h->esym.asym.value = 0;
2644             }
2645           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2646             {
2647               h->esym.asym.sc = scAbs;
2648               h->esym.asym.st = stLabel;
2649               h->esym.asym.value =
2650                 mips_elf_hash_table (einfo->info)->procedure_count;
2651             }
2652           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2653             {
2654               h->esym.asym.sc = scAbs;
2655               h->esym.asym.st = stLabel;
2656               h->esym.asym.value = elf_gp (einfo->abfd);
2657             }
2658           else
2659             h->esym.asym.sc = scUndefined;
2660         }
2661       else if (h->root.root.type != bfd_link_hash_defined
2662           && h->root.root.type != bfd_link_hash_defweak)
2663         h->esym.asym.sc = scAbs;
2664       else
2665         {
2666           const char *name;
2667
2668           sec = h->root.root.u.def.section;
2669           output_section = sec->output_section;
2670
2671           /* When making a shared library and symbol h is the one from
2672              the another shared library, OUTPUT_SECTION may be null.  */
2673           if (output_section == NULL)
2674             h->esym.asym.sc = scUndefined;
2675           else
2676             {
2677               name = bfd_section_name (output_section->owner, output_section);
2678
2679               if (strcmp (name, ".text") == 0)
2680                 h->esym.asym.sc = scText;
2681               else if (strcmp (name, ".data") == 0)
2682                 h->esym.asym.sc = scData;
2683               else if (strcmp (name, ".sdata") == 0)
2684                 h->esym.asym.sc = scSData;
2685               else if (strcmp (name, ".rodata") == 0
2686                        || strcmp (name, ".rdata") == 0)
2687                 h->esym.asym.sc = scRData;
2688               else if (strcmp (name, ".bss") == 0)
2689                 h->esym.asym.sc = scBss;
2690               else if (strcmp (name, ".sbss") == 0)
2691                 h->esym.asym.sc = scSBss;
2692               else if (strcmp (name, ".init") == 0)
2693                 h->esym.asym.sc = scInit;
2694               else if (strcmp (name, ".fini") == 0)
2695                 h->esym.asym.sc = scFini;
2696               else
2697                 h->esym.asym.sc = scAbs;
2698             }
2699         }
2700
2701       h->esym.asym.reserved = 0;
2702       h->esym.asym.index = indexNil;
2703     }
2704
2705   if (h->root.root.type == bfd_link_hash_common)
2706     h->esym.asym.value = h->root.root.u.c.size;
2707   else if (h->root.root.type == bfd_link_hash_defined
2708            || h->root.root.type == bfd_link_hash_defweak)
2709     {
2710       if (h->esym.asym.sc == scCommon)
2711         h->esym.asym.sc = scBss;
2712       else if (h->esym.asym.sc == scSCommon)
2713         h->esym.asym.sc = scSBss;
2714
2715       sec = h->root.root.u.def.section;
2716       output_section = sec->output_section;
2717       if (output_section != NULL)
2718         h->esym.asym.value = (h->root.root.u.def.value
2719                               + sec->output_offset
2720                               + output_section->vma);
2721       else
2722         h->esym.asym.value = 0;
2723     }
2724   else
2725     {
2726       struct mips_elf_link_hash_entry *hd = h;
2727
2728       while (hd->root.root.type == bfd_link_hash_indirect)
2729         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2730
2731       if (hd->needs_lazy_stub)
2732         {
2733           /* Set type and value for a symbol with a function stub.  */
2734           h->esym.asym.st = stProc;
2735           sec = hd->root.root.u.def.section;
2736           if (sec == NULL)
2737             h->esym.asym.value = 0;
2738           else
2739             {
2740               output_section = sec->output_section;
2741               if (output_section != NULL)
2742                 h->esym.asym.value = (hd->root.plt.offset
2743                                       + sec->output_offset
2744                                       + output_section->vma);
2745               else
2746                 h->esym.asym.value = 0;
2747             }
2748         }
2749     }
2750
2751   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2752                                       h->root.root.root.string,
2753                                       &h->esym))
2754     {
2755       einfo->failed = TRUE;
2756       return FALSE;
2757     }
2758
2759   return TRUE;
2760 }
2761
2762 /* A comparison routine used to sort .gptab entries.  */
2763
2764 static int
2765 gptab_compare (const void *p1, const void *p2)
2766 {
2767   const Elf32_gptab *a1 = p1;
2768   const Elf32_gptab *a2 = p2;
2769
2770   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2771 }
2772 \f
2773 /* Functions to manage the got entry hash table.  */
2774
2775 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2776    hash number.  */
2777
2778 static INLINE hashval_t
2779 mips_elf_hash_bfd_vma (bfd_vma addr)
2780 {
2781 #ifdef BFD64
2782   return addr + (addr >> 32);
2783 #else
2784   return addr;
2785 #endif
2786 }
2787
2788 static hashval_t
2789 mips_elf_got_entry_hash (const void *entry_)
2790 {
2791   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2792
2793   return (entry->symndx
2794           + ((entry->tls_type == GOT_TLS_LDM) << 18)
2795           + (entry->tls_type == GOT_TLS_LDM ? 0
2796              : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
2797              : entry->symndx >= 0 ? (entry->abfd->id
2798                                      + mips_elf_hash_bfd_vma (entry->d.addend))
2799              : entry->d.h->root.root.root.hash));
2800 }
2801
2802 static int
2803 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
2804 {
2805   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2806   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2807
2808   return (e1->symndx == e2->symndx
2809           && e1->tls_type == e2->tls_type
2810           && (e1->tls_type == GOT_TLS_LDM ? TRUE
2811               : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
2812               : e1->symndx >= 0 ? (e1->abfd == e2->abfd
2813                                    && e1->d.addend == e2->d.addend)
2814               : e2->abfd && e1->d.h == e2->d.h));
2815 }
2816
2817 static hashval_t
2818 mips_got_page_ref_hash (const void *ref_)
2819 {
2820   const struct mips_got_page_ref *ref;
2821
2822   ref = (const struct mips_got_page_ref *) ref_;
2823   return ((ref->symndx >= 0
2824            ? (hashval_t) (ref->u.abfd->id + ref->symndx)
2825            : ref->u.h->root.root.root.hash)
2826           + mips_elf_hash_bfd_vma (ref->addend));
2827 }
2828
2829 static int
2830 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
2831 {
2832   const struct mips_got_page_ref *ref1, *ref2;
2833
2834   ref1 = (const struct mips_got_page_ref *) ref1_;
2835   ref2 = (const struct mips_got_page_ref *) ref2_;
2836   return (ref1->symndx == ref2->symndx
2837           && (ref1->symndx < 0
2838               ? ref1->u.h == ref2->u.h
2839               : ref1->u.abfd == ref2->u.abfd)
2840           && ref1->addend == ref2->addend);
2841 }
2842
2843 static hashval_t
2844 mips_got_page_entry_hash (const void *entry_)
2845 {
2846   const struct mips_got_page_entry *entry;
2847
2848   entry = (const struct mips_got_page_entry *) entry_;
2849   return entry->sec->id;
2850 }
2851
2852 static int
2853 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
2854 {
2855   const struct mips_got_page_entry *entry1, *entry2;
2856
2857   entry1 = (const struct mips_got_page_entry *) entry1_;
2858   entry2 = (const struct mips_got_page_entry *) entry2_;
2859   return entry1->sec == entry2->sec;
2860 }
2861 \f
2862 /* Create and return a new mips_got_info structure.  */
2863
2864 static struct mips_got_info *
2865 mips_elf_create_got_info (bfd *abfd)
2866 {
2867   struct mips_got_info *g;
2868
2869   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
2870   if (g == NULL)
2871     return NULL;
2872
2873   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
2874                                     mips_elf_got_entry_eq, NULL);
2875   if (g->got_entries == NULL)
2876     return NULL;
2877
2878   g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
2879                                       mips_got_page_ref_eq, NULL);
2880   if (g->got_page_refs == NULL)
2881     return NULL;
2882
2883   return g;
2884 }
2885
2886 /* Return the GOT info for input bfd ABFD, trying to create a new one if
2887    CREATE_P and if ABFD doesn't already have a GOT.  */
2888
2889 static struct mips_got_info *
2890 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
2891 {
2892   struct mips_elf_obj_tdata *tdata;
2893
2894   if (!is_mips_elf (abfd))
2895     return NULL;
2896
2897   tdata = mips_elf_tdata (abfd);
2898   if (!tdata->got && create_p)
2899     tdata->got = mips_elf_create_got_info (abfd);
2900   return tdata->got;
2901 }
2902
2903 /* Record that ABFD should use output GOT G.  */
2904
2905 static void
2906 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
2907 {
2908   struct mips_elf_obj_tdata *tdata;
2909
2910   BFD_ASSERT (is_mips_elf (abfd));
2911   tdata = mips_elf_tdata (abfd);
2912   if (tdata->got)
2913     {
2914       /* The GOT structure itself and the hash table entries are
2915          allocated to a bfd, but the hash tables aren't.  */
2916       htab_delete (tdata->got->got_entries);
2917       htab_delete (tdata->got->got_page_refs);
2918       if (tdata->got->got_page_entries)
2919         htab_delete (tdata->got->got_page_entries);
2920     }
2921   tdata->got = g;
2922 }
2923
2924 /* Return the dynamic relocation section.  If it doesn't exist, try to
2925    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
2926    if creation fails.  */
2927
2928 static asection *
2929 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
2930 {
2931   const char *dname;
2932   asection *sreloc;
2933   bfd *dynobj;
2934
2935   dname = MIPS_ELF_REL_DYN_NAME (info);
2936   dynobj = elf_hash_table (info)->dynobj;
2937   sreloc = bfd_get_linker_section (dynobj, dname);
2938   if (sreloc == NULL && create_p)
2939     {
2940       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
2941                                                    (SEC_ALLOC
2942                                                     | SEC_LOAD
2943                                                     | SEC_HAS_CONTENTS
2944                                                     | SEC_IN_MEMORY
2945                                                     | SEC_LINKER_CREATED
2946                                                     | SEC_READONLY));
2947       if (sreloc == NULL
2948           || ! bfd_set_section_alignment (dynobj, sreloc,
2949                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
2950         return NULL;
2951     }
2952   return sreloc;
2953 }
2954
2955 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
2956
2957 static int
2958 mips_elf_reloc_tls_type (unsigned int r_type)
2959 {
2960   if (tls_gd_reloc_p (r_type))
2961     return GOT_TLS_GD;
2962
2963   if (tls_ldm_reloc_p (r_type))
2964     return GOT_TLS_LDM;
2965
2966   if (tls_gottprel_reloc_p (r_type))
2967     return GOT_TLS_IE;
2968
2969   return GOT_TLS_NONE;
2970 }
2971
2972 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
2973
2974 static int
2975 mips_tls_got_entries (unsigned int type)
2976 {
2977   switch (type)
2978     {
2979     case GOT_TLS_GD:
2980     case GOT_TLS_LDM:
2981       return 2;
2982
2983     case GOT_TLS_IE:
2984       return 1;
2985
2986     case GOT_TLS_NONE:
2987       return 0;
2988     }
2989   abort ();
2990 }
2991
2992 /* Count the number of relocations needed for a TLS GOT entry, with
2993    access types from TLS_TYPE, and symbol H (or a local symbol if H
2994    is NULL).  */
2995
2996 static int
2997 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
2998                      struct elf_link_hash_entry *h)
2999 {
3000   int indx = 0;
3001   bfd_boolean need_relocs = FALSE;
3002   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3003
3004   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
3005       && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
3006     indx = h->dynindx;
3007
3008   if ((info->shared || indx != 0)
3009       && (h == NULL
3010           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3011           || h->root.type != bfd_link_hash_undefweak))
3012     need_relocs = TRUE;
3013
3014   if (!need_relocs)
3015     return 0;
3016
3017   switch (tls_type)
3018     {
3019     case GOT_TLS_GD:
3020       return indx != 0 ? 2 : 1;
3021
3022     case GOT_TLS_IE:
3023       return 1;
3024
3025     case GOT_TLS_LDM:
3026       return info->shared ? 1 : 0;
3027
3028     default:
3029       return 0;
3030     }
3031 }
3032
3033 /* Add the number of GOT entries and TLS relocations required by ENTRY
3034    to G.  */
3035
3036 static void
3037 mips_elf_count_got_entry (struct bfd_link_info *info,
3038                           struct mips_got_info *g,
3039                           struct mips_got_entry *entry)
3040 {
3041   if (entry->tls_type)
3042     {
3043       g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3044       g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3045                                         entry->symndx < 0
3046                                         ? &entry->d.h->root : NULL);
3047     }
3048   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3049     g->local_gotno += 1;
3050   else
3051     g->global_gotno += 1;
3052 }
3053
3054 /* Output a simple dynamic relocation into SRELOC.  */
3055
3056 static void
3057 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3058                                     asection *sreloc,
3059                                     unsigned long reloc_index,
3060                                     unsigned long indx,
3061                                     int r_type,
3062                                     bfd_vma offset)
3063 {
3064   Elf_Internal_Rela rel[3];
3065
3066   memset (rel, 0, sizeof (rel));
3067
3068   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3069   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3070
3071   if (ABI_64_P (output_bfd))
3072     {
3073       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3074         (output_bfd, &rel[0],
3075          (sreloc->contents
3076           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3077     }
3078   else
3079     bfd_elf32_swap_reloc_out
3080       (output_bfd, &rel[0],
3081        (sreloc->contents
3082         + reloc_index * sizeof (Elf32_External_Rel)));
3083 }
3084
3085 /* Initialize a set of TLS GOT entries for one symbol.  */
3086
3087 static void
3088 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3089                                struct mips_got_entry *entry,
3090                                struct mips_elf_link_hash_entry *h,
3091                                bfd_vma value)
3092 {
3093   struct mips_elf_link_hash_table *htab;
3094   int indx;
3095   asection *sreloc, *sgot;
3096   bfd_vma got_offset, got_offset2;
3097   bfd_boolean need_relocs = FALSE;
3098
3099   htab = mips_elf_hash_table (info);
3100   if (htab == NULL)
3101     return;
3102
3103   sgot = htab->sgot;
3104
3105   indx = 0;
3106   if (h != NULL)
3107     {
3108       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3109
3110       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
3111           && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3112         indx = h->root.dynindx;
3113     }
3114
3115   if (entry->tls_initialized)
3116     return;
3117
3118   if ((info->shared || indx != 0)
3119       && (h == NULL
3120           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3121           || h->root.type != bfd_link_hash_undefweak))
3122     need_relocs = TRUE;
3123
3124   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3125      be defined at all; assume that the value doesn't matter in that
3126      case.  Otherwise complain if we would use the value.  */
3127   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3128               || h->root.root.type == bfd_link_hash_undefweak);
3129
3130   /* Emit necessary relocations.  */
3131   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3132   got_offset = entry->gotidx;
3133
3134   switch (entry->tls_type)
3135     {
3136     case GOT_TLS_GD:
3137       /* General Dynamic.  */
3138       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3139
3140       if (need_relocs)
3141         {
3142           mips_elf_output_dynamic_relocation
3143             (abfd, sreloc, sreloc->reloc_count++, indx,
3144              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3145              sgot->output_offset + sgot->output_section->vma + got_offset);
3146
3147           if (indx)
3148             mips_elf_output_dynamic_relocation
3149               (abfd, sreloc, sreloc->reloc_count++, indx,
3150                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3151                sgot->output_offset + sgot->output_section->vma + got_offset2);
3152           else
3153             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3154                                sgot->contents + got_offset2);
3155         }
3156       else
3157         {
3158           MIPS_ELF_PUT_WORD (abfd, 1,
3159                              sgot->contents + got_offset);
3160           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3161                              sgot->contents + got_offset2);
3162         }
3163       break;
3164
3165     case GOT_TLS_IE:
3166       /* Initial Exec model.  */
3167       if (need_relocs)
3168         {
3169           if (indx == 0)
3170             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3171                                sgot->contents + got_offset);
3172           else
3173             MIPS_ELF_PUT_WORD (abfd, 0,
3174                                sgot->contents + got_offset);
3175
3176           mips_elf_output_dynamic_relocation
3177             (abfd, sreloc, sreloc->reloc_count++, indx,
3178              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3179              sgot->output_offset + sgot->output_section->vma + got_offset);
3180         }
3181       else
3182         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3183                            sgot->contents + got_offset);
3184       break;
3185
3186     case GOT_TLS_LDM:
3187       /* The initial offset is zero, and the LD offsets will include the
3188          bias by DTP_OFFSET.  */
3189       MIPS_ELF_PUT_WORD (abfd, 0,
3190                          sgot->contents + got_offset
3191                          + MIPS_ELF_GOT_SIZE (abfd));
3192
3193       if (!info->shared)
3194         MIPS_ELF_PUT_WORD (abfd, 1,
3195                            sgot->contents + got_offset);
3196       else
3197         mips_elf_output_dynamic_relocation
3198           (abfd, sreloc, sreloc->reloc_count++, indx,
3199            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3200            sgot->output_offset + sgot->output_section->vma + got_offset);
3201       break;
3202
3203     default:
3204       abort ();
3205     }
3206
3207   entry->tls_initialized = TRUE;
3208 }
3209
3210 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3211    for global symbol H.  .got.plt comes before the GOT, so the offset
3212    will be negative.  */
3213
3214 static bfd_vma
3215 mips_elf_gotplt_index (struct bfd_link_info *info,
3216                        struct elf_link_hash_entry *h)
3217 {
3218   bfd_vma plt_index, got_address, got_value;
3219   struct mips_elf_link_hash_table *htab;
3220
3221   htab = mips_elf_hash_table (info);
3222   BFD_ASSERT (htab != NULL);
3223
3224   BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
3225
3226   /* This function only works for VxWorks, because a non-VxWorks .got.plt
3227      section starts with reserved entries.  */
3228   BFD_ASSERT (htab->is_vxworks);
3229
3230   /* Calculate the index of the symbol's PLT entry.  */
3231   plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
3232
3233   /* Calculate the address of the associated .got.plt entry.  */
3234   got_address = (htab->sgotplt->output_section->vma
3235                  + htab->sgotplt->output_offset
3236                  + plt_index * 4);
3237
3238   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3239   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3240                + htab->root.hgot->root.u.def.section->output_offset
3241                + htab->root.hgot->root.u.def.value);
3242
3243   return got_address - got_value;
3244 }
3245
3246 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3247    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3248    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3249    offset can be found.  */
3250
3251 static bfd_vma
3252 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3253                           bfd_vma value, unsigned long r_symndx,
3254                           struct mips_elf_link_hash_entry *h, int r_type)
3255 {
3256   struct mips_elf_link_hash_table *htab;
3257   struct mips_got_entry *entry;
3258
3259   htab = mips_elf_hash_table (info);
3260   BFD_ASSERT (htab != NULL);
3261
3262   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3263                                            r_symndx, h, r_type);
3264   if (!entry)
3265     return MINUS_ONE;
3266
3267   if (entry->tls_type)
3268     mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3269   return entry->gotidx;
3270 }
3271
3272 /* Return the GOT index of global symbol H in the primary GOT.  */
3273
3274 static bfd_vma
3275 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3276                                    struct elf_link_hash_entry *h)
3277 {
3278   struct mips_elf_link_hash_table *htab;
3279   long global_got_dynindx;
3280   struct mips_got_info *g;
3281   bfd_vma got_index;
3282
3283   htab = mips_elf_hash_table (info);
3284   BFD_ASSERT (htab != NULL);
3285
3286   global_got_dynindx = 0;
3287   if (htab->global_gotsym != NULL)
3288     global_got_dynindx = htab->global_gotsym->dynindx;
3289
3290   /* Once we determine the global GOT entry with the lowest dynamic
3291      symbol table index, we must put all dynamic symbols with greater
3292      indices into the primary GOT.  That makes it easy to calculate the
3293      GOT offset.  */
3294   BFD_ASSERT (h->dynindx >= global_got_dynindx);
3295   g = mips_elf_bfd_got (obfd, FALSE);
3296   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3297                * MIPS_ELF_GOT_SIZE (obfd));
3298   BFD_ASSERT (got_index < htab->sgot->size);
3299
3300   return got_index;
3301 }
3302
3303 /* Return the GOT index for the global symbol indicated by H, which is
3304    referenced by a relocation of type R_TYPE in IBFD.  */
3305
3306 static bfd_vma
3307 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3308                            struct elf_link_hash_entry *h, int r_type)
3309 {
3310   struct mips_elf_link_hash_table *htab;
3311   struct mips_got_info *g;
3312   struct mips_got_entry lookup, *entry;
3313   bfd_vma gotidx;
3314
3315   htab = mips_elf_hash_table (info);
3316   BFD_ASSERT (htab != NULL);
3317
3318   g = mips_elf_bfd_got (ibfd, FALSE);
3319   BFD_ASSERT (g);
3320
3321   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3322   if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3323     return mips_elf_primary_global_got_index (obfd, info, h);
3324
3325   lookup.abfd = ibfd;
3326   lookup.symndx = -1;
3327   lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3328   entry = htab_find (g->got_entries, &lookup);
3329   BFD_ASSERT (entry);
3330
3331   gotidx = entry->gotidx;
3332   BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3333
3334   if (lookup.tls_type)
3335     {
3336       bfd_vma value = MINUS_ONE;
3337
3338       if ((h->root.type == bfd_link_hash_defined
3339            || h->root.type == bfd_link_hash_defweak)
3340           && h->root.u.def.section->output_section)
3341         value = (h->root.u.def.value
3342                  + h->root.u.def.section->output_offset
3343                  + h->root.u.def.section->output_section->vma);
3344
3345       mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3346     }
3347   return gotidx;
3348 }
3349
3350 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3351    entries are supposed to be placed at small offsets in the GOT, i.e.,
3352    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3353    entry could be created.  If OFFSETP is nonnull, use it to return the
3354    offset of the GOT entry from VALUE.  */
3355
3356 static bfd_vma
3357 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3358                    bfd_vma value, bfd_vma *offsetp)
3359 {
3360   bfd_vma page, got_index;
3361   struct mips_got_entry *entry;
3362
3363   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3364   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3365                                            NULL, R_MIPS_GOT_PAGE);
3366
3367   if (!entry)
3368     return MINUS_ONE;
3369
3370   got_index = entry->gotidx;
3371
3372   if (offsetp)
3373     *offsetp = value - entry->d.address;
3374
3375   return got_index;
3376 }
3377
3378 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3379    EXTERNAL is true if the relocation was originally against a global
3380    symbol that binds locally.  */
3381
3382 static bfd_vma
3383 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3384                       bfd_vma value, bfd_boolean external)
3385 {
3386   struct mips_got_entry *entry;
3387
3388   /* GOT16 relocations against local symbols are followed by a LO16
3389      relocation; those against global symbols are not.  Thus if the
3390      symbol was originally local, the GOT16 relocation should load the
3391      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3392   if (! external)
3393     value = mips_elf_high (value) << 16;
3394
3395   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3396      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3397      same in all cases.  */
3398   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3399                                            NULL, R_MIPS_GOT16);
3400   if (entry)
3401     return entry->gotidx;
3402   else
3403     return MINUS_ONE;
3404 }
3405
3406 /* Returns the offset for the entry at the INDEXth position
3407    in the GOT.  */
3408
3409 static bfd_vma
3410 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3411                                 bfd *input_bfd, bfd_vma got_index)
3412 {
3413   struct mips_elf_link_hash_table *htab;
3414   asection *sgot;
3415   bfd_vma gp;
3416
3417   htab = mips_elf_hash_table (info);
3418   BFD_ASSERT (htab != NULL);
3419
3420   sgot = htab->sgot;
3421   gp = _bfd_get_gp_value (output_bfd)
3422     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3423
3424   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3425 }
3426
3427 /* Create and return a local GOT entry for VALUE, which was calculated
3428    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3429    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3430    instead.  */
3431
3432 static struct mips_got_entry *
3433 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3434                                  bfd *ibfd, bfd_vma value,
3435                                  unsigned long r_symndx,
3436                                  struct mips_elf_link_hash_entry *h,
3437                                  int r_type)
3438 {
3439   struct mips_got_entry lookup, *entry;
3440   void **loc;
3441   struct mips_got_info *g;
3442   struct mips_elf_link_hash_table *htab;
3443   bfd_vma gotidx;
3444
3445   htab = mips_elf_hash_table (info);
3446   BFD_ASSERT (htab != NULL);
3447
3448   g = mips_elf_bfd_got (ibfd, FALSE);
3449   if (g == NULL)
3450     {
3451       g = mips_elf_bfd_got (abfd, FALSE);
3452       BFD_ASSERT (g != NULL);
3453     }
3454
3455   /* This function shouldn't be called for symbols that live in the global
3456      area of the GOT.  */
3457   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3458
3459   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3460   if (lookup.tls_type)
3461     {
3462       lookup.abfd = ibfd;
3463       if (tls_ldm_reloc_p (r_type))
3464         {
3465           lookup.symndx = 0;
3466           lookup.d.addend = 0;
3467         }
3468       else if (h == NULL)
3469         {
3470           lookup.symndx = r_symndx;
3471           lookup.d.addend = 0;
3472         }
3473       else
3474         {
3475           lookup.symndx = -1;
3476           lookup.d.h = h;
3477         }
3478
3479       entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3480       BFD_ASSERT (entry);
3481
3482       gotidx = entry->gotidx;
3483       BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3484
3485       return entry;
3486     }
3487
3488   lookup.abfd = NULL;
3489   lookup.symndx = -1;
3490   lookup.d.address = value;
3491   loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3492   if (!loc)
3493     return NULL;
3494
3495   entry = (struct mips_got_entry *) *loc;
3496   if (entry)
3497     return entry;
3498
3499   if (g->assigned_gotno >= g->local_gotno)
3500     {
3501       /* We didn't allocate enough space in the GOT.  */
3502       (*_bfd_error_handler)
3503         (_("not enough GOT space for local GOT entries"));
3504       bfd_set_error (bfd_error_bad_value);
3505       return NULL;
3506     }
3507
3508   entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3509   if (!entry)
3510     return NULL;
3511
3512   lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
3513   *entry = lookup;
3514   *loc = entry;
3515
3516   MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx);
3517
3518   /* These GOT entries need a dynamic relocation on VxWorks.  */
3519   if (htab->is_vxworks)
3520     {
3521       Elf_Internal_Rela outrel;
3522       asection *s;
3523       bfd_byte *rloc;
3524       bfd_vma got_address;
3525
3526       s = mips_elf_rel_dyn_section (info, FALSE);
3527       got_address = (htab->sgot->output_section->vma
3528                      + htab->sgot->output_offset
3529                      + entry->gotidx);
3530
3531       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3532       outrel.r_offset = got_address;
3533       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3534       outrel.r_addend = value;
3535       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3536     }
3537
3538   return entry;
3539 }
3540
3541 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3542    The number might be exact or a worst-case estimate, depending on how
3543    much information is available to elf_backend_omit_section_dynsym at
3544    the current linking stage.  */
3545
3546 static bfd_size_type
3547 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3548 {
3549   bfd_size_type count;
3550
3551   count = 0;
3552   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3553     {
3554       asection *p;
3555       const struct elf_backend_data *bed;
3556
3557       bed = get_elf_backend_data (output_bfd);
3558       for (p = output_bfd->sections; p ; p = p->next)
3559         if ((p->flags & SEC_EXCLUDE) == 0
3560             && (p->flags & SEC_ALLOC) != 0
3561             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3562           ++count;
3563     }
3564   return count;
3565 }
3566
3567 /* Sort the dynamic symbol table so that symbols that need GOT entries
3568    appear towards the end.  */
3569
3570 static bfd_boolean
3571 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3572 {
3573   struct mips_elf_link_hash_table *htab;
3574   struct mips_elf_hash_sort_data hsd;
3575   struct mips_got_info *g;
3576
3577   if (elf_hash_table (info)->dynsymcount == 0)
3578     return TRUE;
3579
3580   htab = mips_elf_hash_table (info);
3581   BFD_ASSERT (htab != NULL);
3582
3583   g = htab->got_info;
3584   if (g == NULL)
3585     return TRUE;
3586
3587   hsd.low = NULL;
3588   hsd.max_unref_got_dynindx
3589     = hsd.min_got_dynindx
3590     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3591   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3592   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3593                                 elf_hash_table (info)),
3594                                mips_elf_sort_hash_table_f,
3595                                &hsd);
3596
3597   /* There should have been enough room in the symbol table to
3598      accommodate both the GOT and non-GOT symbols.  */
3599   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3600   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3601               == elf_hash_table (info)->dynsymcount);
3602   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3603               == g->global_gotno);
3604
3605   /* Now we know which dynamic symbol has the lowest dynamic symbol
3606      table index in the GOT.  */
3607   htab->global_gotsym = hsd.low;
3608
3609   return TRUE;
3610 }
3611
3612 /* If H needs a GOT entry, assign it the highest available dynamic
3613    index.  Otherwise, assign it the lowest available dynamic
3614    index.  */
3615
3616 static bfd_boolean
3617 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3618 {
3619   struct mips_elf_hash_sort_data *hsd = data;
3620
3621   /* Symbols without dynamic symbol table entries aren't interesting
3622      at all.  */
3623   if (h->root.dynindx == -1)
3624     return TRUE;
3625
3626   switch (h->global_got_area)
3627     {
3628     case GGA_NONE:
3629       h->root.dynindx = hsd->max_non_got_dynindx++;
3630       break;
3631
3632     case GGA_NORMAL:
3633       h->root.dynindx = --hsd->min_got_dynindx;
3634       hsd->low = (struct elf_link_hash_entry *) h;
3635       break;
3636
3637     case GGA_RELOC_ONLY:
3638       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3639         hsd->low = (struct elf_link_hash_entry *) h;
3640       h->root.dynindx = hsd->max_unref_got_dynindx++;
3641       break;
3642     }
3643
3644   return TRUE;
3645 }
3646
3647 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3648    (which is owned by the caller and shouldn't be added to the
3649    hash table directly).  */
3650
3651 static bfd_boolean
3652 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3653                            struct mips_got_entry *lookup)
3654 {
3655   struct mips_elf_link_hash_table *htab;
3656   struct mips_got_entry *entry;
3657   struct mips_got_info *g;
3658   void **loc, **bfd_loc;
3659
3660   /* Make sure there's a slot for this entry in the master GOT.  */
3661   htab = mips_elf_hash_table (info);
3662   g = htab->got_info;
3663   loc = htab_find_slot (g->got_entries, lookup, INSERT);
3664   if (!loc)
3665     return FALSE;
3666
3667   /* Populate the entry if it isn't already.  */
3668   entry = (struct mips_got_entry *) *loc;
3669   if (!entry)
3670     {
3671       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3672       if (!entry)
3673         return FALSE;
3674
3675       lookup->tls_initialized = FALSE;
3676       lookup->gotidx = -1;
3677       *entry = *lookup;
3678       *loc = entry;
3679     }
3680
3681   /* Reuse the same GOT entry for the BFD's GOT.  */
3682   g = mips_elf_bfd_got (abfd, TRUE);
3683   if (!g)
3684     return FALSE;
3685
3686   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3687   if (!bfd_loc)
3688     return FALSE;
3689
3690   if (!*bfd_loc)
3691     *bfd_loc = entry;
3692   return TRUE;
3693 }
3694
3695 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
3696    entry for it.  FOR_CALL is true if the caller is only interested in
3697    using the GOT entry for calls.  */
3698
3699 static bfd_boolean
3700 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3701                                    bfd *abfd, struct bfd_link_info *info,
3702                                    bfd_boolean for_call, int r_type)
3703 {
3704   struct mips_elf_link_hash_table *htab;
3705   struct mips_elf_link_hash_entry *hmips;
3706   struct mips_got_entry entry;
3707   unsigned char tls_type;
3708
3709   htab = mips_elf_hash_table (info);
3710   BFD_ASSERT (htab != NULL);
3711
3712   hmips = (struct mips_elf_link_hash_entry *) h;
3713   if (!for_call)
3714     hmips->got_only_for_calls = FALSE;
3715
3716   /* A global symbol in the GOT must also be in the dynamic symbol
3717      table.  */
3718   if (h->dynindx == -1)
3719     {
3720       switch (ELF_ST_VISIBILITY (h->other))
3721         {
3722         case STV_INTERNAL:
3723         case STV_HIDDEN:
3724           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3725           break;
3726         }
3727       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3728         return FALSE;
3729     }
3730
3731   tls_type = mips_elf_reloc_tls_type (r_type);
3732   if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
3733     hmips->global_got_area = GGA_NORMAL;
3734
3735   entry.abfd = abfd;
3736   entry.symndx = -1;
3737   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3738   entry.tls_type = tls_type;
3739   return mips_elf_record_got_entry (info, abfd, &entry);
3740 }
3741
3742 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
3743    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
3744
3745 static bfd_boolean
3746 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3747                                   struct bfd_link_info *info, int r_type)
3748 {
3749   struct mips_elf_link_hash_table *htab;
3750   struct mips_got_info *g;
3751   struct mips_got_entry entry;
3752
3753   htab = mips_elf_hash_table (info);
3754   BFD_ASSERT (htab != NULL);
3755
3756   g = htab->got_info;
3757   BFD_ASSERT (g != NULL);
3758
3759   entry.abfd = abfd;
3760   entry.symndx = symndx;
3761   entry.d.addend = addend;
3762   entry.tls_type = mips_elf_reloc_tls_type (r_type);
3763   return mips_elf_record_got_entry (info, abfd, &entry);
3764 }
3765
3766 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
3767    H is the symbol's hash table entry, or null if SYMNDX is local
3768    to ABFD.  */
3769
3770 static bfd_boolean
3771 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
3772                               long symndx, struct elf_link_hash_entry *h,
3773                               bfd_signed_vma addend)
3774 {
3775   struct mips_elf_link_hash_table *htab;
3776   struct mips_got_info *g1, *g2;
3777   struct mips_got_page_ref lookup, *entry;
3778   void **loc, **bfd_loc;
3779
3780   htab = mips_elf_hash_table (info);
3781   BFD_ASSERT (htab != NULL);
3782
3783   g1 = htab->got_info;
3784   BFD_ASSERT (g1 != NULL);
3785
3786   if (h)
3787     {
3788       lookup.symndx = -1;
3789       lookup.u.h = (struct mips_elf_link_hash_entry *) h;
3790     }
3791   else
3792     {
3793       lookup.symndx = symndx;
3794       lookup.u.abfd = abfd;
3795     }
3796   lookup.addend = addend;
3797   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
3798   if (loc == NULL)
3799     return FALSE;
3800
3801   entry = (struct mips_got_page_ref *) *loc;
3802   if (!entry)
3803     {
3804       entry = bfd_alloc (abfd, sizeof (*entry));
3805       if (!entry)
3806         return FALSE;
3807
3808       *entry = lookup;
3809       *loc = entry;
3810     }
3811
3812   /* Add the same entry to the BFD's GOT.  */
3813   g2 = mips_elf_bfd_got (abfd, TRUE);
3814   if (!g2)
3815     return FALSE;
3816
3817   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
3818   if (!bfd_loc)
3819     return FALSE;
3820
3821   if (!*bfd_loc)
3822     *bfd_loc = entry;
3823
3824   return TRUE;
3825 }
3826
3827 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
3828
3829 static void
3830 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
3831                                        unsigned int n)
3832 {
3833   asection *s;
3834   struct mips_elf_link_hash_table *htab;
3835
3836   htab = mips_elf_hash_table (info);
3837   BFD_ASSERT (htab != NULL);
3838
3839   s = mips_elf_rel_dyn_section (info, FALSE);
3840   BFD_ASSERT (s != NULL);
3841
3842   if (htab->is_vxworks)
3843     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
3844   else
3845     {
3846       if (s->size == 0)
3847         {
3848           /* Make room for a null element.  */
3849           s->size += MIPS_ELF_REL_SIZE (abfd);
3850           ++s->reloc_count;
3851         }
3852       s->size += n * MIPS_ELF_REL_SIZE (abfd);
3853     }
3854 }
3855 \f
3856 /* A htab_traverse callback for GOT entries, with DATA pointing to a
3857    mips_elf_traverse_got_arg structure.  Count the number of GOT
3858    entries and TLS relocs.  Set DATA->value to true if we need
3859    to resolve indirect or warning symbols and then recreate the GOT.  */
3860
3861 static int
3862 mips_elf_check_recreate_got (void **entryp, void *data)
3863 {
3864   struct mips_got_entry *entry;
3865   struct mips_elf_traverse_got_arg *arg;
3866
3867   entry = (struct mips_got_entry *) *entryp;
3868   arg = (struct mips_elf_traverse_got_arg *) data;
3869   if (entry->abfd != NULL && entry->symndx == -1)
3870     {
3871       struct mips_elf_link_hash_entry *h;
3872
3873       h = entry->d.h;
3874       if (h->root.root.type == bfd_link_hash_indirect
3875           || h->root.root.type == bfd_link_hash_warning)
3876         {
3877           arg->value = TRUE;
3878           return 0;
3879         }
3880     }
3881   mips_elf_count_got_entry (arg->info, arg->g, entry);
3882   return 1;
3883 }
3884
3885 /* A htab_traverse callback for GOT entries, with DATA pointing to a
3886    mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
3887    converting entries for indirect and warning symbols into entries
3888    for the target symbol.  Set DATA->g to null on error.  */
3889
3890 static int
3891 mips_elf_recreate_got (void **entryp, void *data)
3892 {
3893   struct mips_got_entry new_entry, *entry;
3894   struct mips_elf_traverse_got_arg *arg;
3895   void **slot;
3896
3897   entry = (struct mips_got_entry *) *entryp;
3898   arg = (struct mips_elf_traverse_got_arg *) data;
3899   if (entry->abfd != NULL
3900       && entry->symndx == -1
3901       && (entry->d.h->root.root.type == bfd_link_hash_indirect
3902           || entry->d.h->root.root.type == bfd_link_hash_warning))
3903     {
3904       struct mips_elf_link_hash_entry *h;
3905
3906       new_entry = *entry;
3907       entry = &new_entry;
3908       h = entry->d.h;
3909       do
3910         {
3911           BFD_ASSERT (h->global_got_area == GGA_NONE);
3912           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3913         }
3914       while (h->root.root.type == bfd_link_hash_indirect
3915              || h->root.root.type == bfd_link_hash_warning);
3916       entry->d.h = h;
3917     }
3918   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
3919   if (slot == NULL)
3920     {
3921       arg->g = NULL;
3922       return 0;
3923     }
3924   if (*slot == NULL)
3925     {
3926       if (entry == &new_entry)
3927         {
3928           entry = bfd_alloc (entry->abfd, sizeof (*entry));
3929           if (!entry)
3930             {
3931               arg->g = NULL;
3932               return 0;
3933             }
3934           *entry = new_entry;
3935         }
3936       *slot = entry;
3937       mips_elf_count_got_entry (arg->info, arg->g, entry);
3938     }
3939   return 1;
3940 }
3941
3942 /* Return the maximum number of GOT page entries required for RANGE.  */
3943
3944 static bfd_vma
3945 mips_elf_pages_for_range (const struct mips_got_page_range *range)
3946 {
3947   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
3948 }
3949
3950 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
3951
3952 static bfd_boolean
3953 mips_elf_record_got_page_entry (struct mips_got_info *g,
3954                                 asection *sec, bfd_signed_vma addend)
3955 {
3956   struct mips_got_page_entry lookup, *entry;
3957   struct mips_got_page_range **range_ptr, *range;
3958   bfd_vma old_pages, new_pages;
3959   void **loc;
3960
3961   /* Find the mips_got_page_entry hash table entry for this section.  */
3962   lookup.sec = sec;
3963   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
3964   if (loc == NULL)
3965     return FALSE;
3966
3967   /* Create a mips_got_page_entry if this is the first time we've
3968      seen the section.  */
3969   entry = (struct mips_got_page_entry *) *loc;
3970   if (!entry)
3971     {
3972       entry = bfd_zalloc (sec->owner, sizeof (*entry));
3973       if (!entry)
3974         return FALSE;
3975
3976       entry->sec = sec;
3977       *loc = entry;
3978     }
3979
3980   /* Skip over ranges whose maximum extent cannot share a page entry
3981      with ADDEND.  */
3982   range_ptr = &entry->ranges;
3983   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
3984     range_ptr = &(*range_ptr)->next;
3985
3986   /* If we scanned to the end of the list, or found a range whose
3987      minimum extent cannot share a page entry with ADDEND, create
3988      a new singleton range.  */
3989   range = *range_ptr;
3990   if (!range || addend < range->min_addend - 0xffff)
3991     {
3992       range = bfd_zalloc (sec->owner, sizeof (*range));
3993       if (!range)
3994         return FALSE;
3995
3996       range->next = *range_ptr;
3997       range->min_addend = addend;
3998       range->max_addend = addend;
3999
4000       *range_ptr = range;
4001       entry->num_pages++;
4002       g->page_gotno++;
4003       return TRUE;
4004     }
4005
4006   /* Remember how many pages the old range contributed.  */
4007   old_pages = mips_elf_pages_for_range (range);
4008
4009   /* Update the ranges.  */
4010   if (addend < range->min_addend)
4011     range->min_addend = addend;
4012   else if (addend > range->max_addend)
4013     {
4014       if (range->next && addend >= range->next->min_addend - 0xffff)
4015         {
4016           old_pages += mips_elf_pages_for_range (range->next);
4017           range->max_addend = range->next->max_addend;
4018           range->next = range->next->next;
4019         }
4020       else
4021         range->max_addend = addend;
4022     }
4023
4024   /* Record any change in the total estimate.  */
4025   new_pages = mips_elf_pages_for_range (range);
4026   if (old_pages != new_pages)
4027     {
4028       entry->num_pages += new_pages - old_pages;
4029       g->page_gotno += new_pages - old_pages;
4030     }
4031
4032   return TRUE;
4033 }
4034
4035 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4036    and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4037    whether the page reference described by *REFP needs a GOT page entry,
4038    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4039
4040 static bfd_boolean
4041 mips_elf_resolve_got_page_ref (void **refp, void *data)
4042 {
4043   struct mips_got_page_ref *ref;
4044   struct mips_elf_traverse_got_arg *arg;
4045   struct mips_elf_link_hash_table *htab;
4046   asection *sec;
4047   bfd_vma addend;
4048
4049   ref = (struct mips_got_page_ref *) *refp;
4050   arg = (struct mips_elf_traverse_got_arg *) data;
4051   htab = mips_elf_hash_table (arg->info);
4052
4053   if (ref->symndx < 0)
4054     {
4055       struct mips_elf_link_hash_entry *h;
4056
4057       /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4058       h = ref->u.h;
4059       if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4060         return 1;
4061
4062       /* Ignore undefined symbols; we'll issue an error later if
4063          appropriate.  */
4064       if (!((h->root.root.type == bfd_link_hash_defined
4065              || h->root.root.type == bfd_link_hash_defweak)
4066             && h->root.root.u.def.section))
4067         return 1;
4068
4069       sec = h->root.root.u.def.section;
4070       addend = h->root.root.u.def.value + ref->addend;
4071     }
4072   else
4073     {
4074       Elf_Internal_Sym *isym;
4075
4076       /* Read in the symbol.  */
4077       isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4078                                     ref->symndx);
4079       if (isym == NULL)
4080         {
4081           arg->g = NULL;
4082           return 0;
4083         }
4084
4085       /* Get the associated input section.  */
4086       sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4087       if (sec == NULL)
4088         {
4089           arg->g = NULL;
4090           return 0;
4091         }
4092
4093       /* If this is a mergable section, work out the section and offset
4094          of the merged data.  For section symbols, the addend specifies
4095          of the offset _of_ the first byte in the data, otherwise it
4096          specifies the offset _from_ the first byte.  */
4097       if (sec->flags & SEC_MERGE)
4098         {
4099           void *secinfo;
4100
4101           secinfo = elf_section_data (sec)->sec_info;
4102           if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4103             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4104                                                  isym->st_value + ref->addend);
4105           else
4106             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4107                                                  isym->st_value) + ref->addend;
4108         }
4109       else
4110         addend = isym->st_value + ref->addend;
4111     }
4112   if (!mips_elf_record_got_page_entry (arg->g, sec, addend))
4113     {
4114       arg->g = NULL;
4115       return 0;
4116     }
4117   return 1;
4118 }
4119
4120 /* If any entries in G->got_entries are for indirect or warning symbols,
4121    replace them with entries for the target symbol.  Convert g->got_page_refs
4122    into got_page_entry structures and estimate the number of page entries
4123    that they require.  */
4124
4125 static bfd_boolean
4126 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4127                                     struct mips_got_info *g)
4128 {
4129   struct mips_elf_traverse_got_arg tga;
4130   struct mips_got_info oldg;
4131
4132   oldg = *g;
4133
4134   tga.info = info;
4135   tga.g = g;
4136   tga.value = FALSE;
4137   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4138   if (tga.value)
4139     {
4140       *g = oldg;
4141       g->got_entries = htab_create (htab_size (oldg.got_entries),
4142                                     mips_elf_got_entry_hash,
4143                                     mips_elf_got_entry_eq, NULL);
4144       if (!g->got_entries)
4145         return FALSE;
4146
4147       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4148       if (!tga.g)
4149         return FALSE;
4150
4151       htab_delete (oldg.got_entries);
4152     }
4153
4154   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4155                                          mips_got_page_entry_eq, NULL);
4156   if (g->got_page_entries == NULL)
4157     return FALSE;
4158
4159   tga.info = info;
4160   tga.g = g;
4161   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4162
4163   return TRUE;
4164 }
4165
4166 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4167    link_info structure.  Decide whether the hash entry needs an entry in
4168    the global part of the primary GOT, setting global_got_area accordingly.
4169    Count the number of global symbols that are in the primary GOT only
4170    because they have relocations against them (reloc_only_gotno).  */
4171
4172 static int
4173 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4174 {
4175   struct bfd_link_info *info;
4176   struct mips_elf_link_hash_table *htab;
4177   struct mips_got_info *g;
4178
4179   info = (struct bfd_link_info *) data;
4180   htab = mips_elf_hash_table (info);
4181   g = htab->got_info;
4182   if (h->global_got_area != GGA_NONE)
4183     {
4184       /* Make a final decision about whether the symbol belongs in the
4185          local or global GOT.  Symbols that bind locally can (and in the
4186          case of forced-local symbols, must) live in the local GOT.
4187          Those that are aren't in the dynamic symbol table must also
4188          live in the local GOT.
4189
4190          Note that the former condition does not always imply the
4191          latter: symbols do not bind locally if they are completely
4192          undefined.  We'll report undefined symbols later if appropriate.  */
4193       if (h->root.dynindx == -1
4194           || (h->got_only_for_calls
4195               ? SYMBOL_CALLS_LOCAL (info, &h->root)
4196               : SYMBOL_REFERENCES_LOCAL (info, &h->root)))
4197         /* The symbol belongs in the local GOT.  We no longer need this
4198            entry if it was only used for relocations; those relocations
4199            will be against the null or section symbol instead of H.  */
4200         h->global_got_area = GGA_NONE;
4201       else if (htab->is_vxworks
4202                && h->got_only_for_calls
4203                && h->root.plt.offset != MINUS_ONE)
4204         /* On VxWorks, calls can refer directly to the .got.plt entry;
4205            they don't need entries in the regular GOT.  .got.plt entries
4206            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4207         h->global_got_area = GGA_NONE;
4208       else if (h->global_got_area == GGA_RELOC_ONLY)
4209         {
4210           g->reloc_only_gotno++;
4211           g->global_gotno++;
4212         }
4213     }
4214   return 1;
4215 }
4216 \f
4217 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4218    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4219
4220 static int
4221 mips_elf_add_got_entry (void **entryp, void *data)
4222 {
4223   struct mips_got_entry *entry;
4224   struct mips_elf_traverse_got_arg *arg;
4225   void **slot;
4226
4227   entry = (struct mips_got_entry *) *entryp;
4228   arg = (struct mips_elf_traverse_got_arg *) data;
4229   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4230   if (!slot)
4231     {
4232       arg->g = NULL;
4233       return 0;
4234     }
4235   if (!*slot)
4236     {
4237       *slot = entry;
4238       mips_elf_count_got_entry (arg->info, arg->g, entry);
4239     }
4240   return 1;
4241 }
4242
4243 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4244    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4245
4246 static int
4247 mips_elf_add_got_page_entry (void **entryp, void *data)
4248 {
4249   struct mips_got_page_entry *entry;
4250   struct mips_elf_traverse_got_arg *arg;
4251   void **slot;
4252
4253   entry = (struct mips_got_page_entry *) *entryp;
4254   arg = (struct mips_elf_traverse_got_arg *) data;
4255   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4256   if (!slot)
4257     {
4258       arg->g = NULL;
4259       return 0;
4260     }
4261   if (!*slot)
4262     {
4263       *slot = entry;
4264       arg->g->page_gotno += entry->num_pages;
4265     }
4266   return 1;
4267 }
4268
4269 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4270    this would lead to overflow, 1 if they were merged successfully,
4271    and 0 if a merge failed due to lack of memory.  (These values are chosen
4272    so that nonnegative return values can be returned by a htab_traverse
4273    callback.)  */
4274
4275 static int
4276 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4277                          struct mips_got_info *to,
4278                          struct mips_elf_got_per_bfd_arg *arg)
4279 {
4280   struct mips_elf_traverse_got_arg tga;
4281   unsigned int estimate;
4282
4283   /* Work out how many page entries we would need for the combined GOT.  */
4284   estimate = arg->max_pages;
4285   if (estimate >= from->page_gotno + to->page_gotno)
4286     estimate = from->page_gotno + to->page_gotno;
4287
4288   /* And conservatively estimate how many local and TLS entries
4289      would be needed.  */
4290   estimate += from->local_gotno + to->local_gotno;
4291   estimate += from->tls_gotno + to->tls_gotno;
4292
4293   /* If we're merging with the primary got, any TLS relocations will
4294      come after the full set of global entries.  Otherwise estimate those
4295      conservatively as well.  */
4296   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4297     estimate += arg->global_count;
4298   else
4299     estimate += from->global_gotno + to->global_gotno;
4300
4301   /* Bail out if the combined GOT might be too big.  */
4302   if (estimate > arg->max_count)
4303     return -1;
4304
4305   /* Transfer the bfd's got information from FROM to TO.  */
4306   tga.info = arg->info;
4307   tga.g = to;
4308   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4309   if (!tga.g)
4310     return 0;
4311
4312   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4313   if (!tga.g)
4314     return 0;
4315
4316   mips_elf_replace_bfd_got (abfd, to);
4317   return 1;
4318 }
4319
4320 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4321    as possible of the primary got, since it doesn't require explicit
4322    dynamic relocations, but don't use bfds that would reference global
4323    symbols out of the addressable range.  Failing the primary got,
4324    attempt to merge with the current got, or finish the current got
4325    and then make make the new got current.  */
4326
4327 static bfd_boolean
4328 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4329                     struct mips_elf_got_per_bfd_arg *arg)
4330 {
4331   unsigned int estimate;
4332   int result;
4333
4334   if (!mips_elf_resolve_final_got_entries (arg->info, g))
4335     return FALSE;
4336
4337   /* Work out the number of page, local and TLS entries.  */
4338   estimate = arg->max_pages;
4339   if (estimate > g->page_gotno)
4340     estimate = g->page_gotno;
4341   estimate += g->local_gotno + g->tls_gotno;
4342
4343   /* We place TLS GOT entries after both locals and globals.  The globals
4344      for the primary GOT may overflow the normal GOT size limit, so be
4345      sure not to merge a GOT which requires TLS with the primary GOT in that
4346      case.  This doesn't affect non-primary GOTs.  */
4347   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4348
4349   if (estimate <= arg->max_count)
4350     {
4351       /* If we don't have a primary GOT, use it as
4352          a starting point for the primary GOT.  */
4353       if (!arg->primary)
4354         {
4355           arg->primary = g;
4356           return TRUE;
4357         }
4358
4359       /* Try merging with the primary GOT.  */
4360       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4361       if (result >= 0)
4362         return result;
4363     }
4364
4365   /* If we can merge with the last-created got, do it.  */
4366   if (arg->current)
4367     {
4368       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4369       if (result >= 0)
4370         return result;
4371     }
4372
4373   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4374      fits; if it turns out that it doesn't, we'll get relocation
4375      overflows anyway.  */
4376   g->next = arg->current;
4377   arg->current = g;
4378
4379   return TRUE;
4380 }
4381
4382 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4383    to GOTIDX, duplicating the entry if it has already been assigned
4384    an index in a different GOT.  */
4385
4386 static bfd_boolean
4387 mips_elf_set_gotidx (void **entryp, long gotidx)
4388 {
4389   struct mips_got_entry *entry;
4390
4391   entry = (struct mips_got_entry *) *entryp;
4392   if (entry->gotidx > 0)
4393     {
4394       struct mips_got_entry *new_entry;
4395
4396       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4397       if (!new_entry)
4398         return FALSE;
4399
4400       *new_entry = *entry;
4401       *entryp = new_entry;
4402       entry = new_entry;
4403     }
4404   entry->gotidx = gotidx;
4405   return TRUE;
4406 }
4407
4408 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4409    mips_elf_traverse_got_arg in which DATA->value is the size of one
4410    GOT entry.  Set DATA->g to null on failure.  */
4411
4412 static int
4413 mips_elf_initialize_tls_index (void **entryp, void *data)
4414 {
4415   struct mips_got_entry *entry;
4416   struct mips_elf_traverse_got_arg *arg;
4417
4418   /* We're only interested in TLS symbols.  */
4419   entry = (struct mips_got_entry *) *entryp;
4420   if (entry->tls_type == GOT_TLS_NONE)
4421     return 1;
4422
4423   arg = (struct mips_elf_traverse_got_arg *) data;
4424   if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4425     {
4426       arg->g = NULL;
4427       return 0;
4428     }
4429
4430   /* Account for the entries we've just allocated.  */
4431   arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4432   return 1;
4433 }
4434
4435 /* A htab_traverse callback for GOT entries, where DATA points to a
4436    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4437    symbol to DATA->value.  */
4438
4439 static int
4440 mips_elf_set_global_got_area (void **entryp, void *data)
4441 {
4442   struct mips_got_entry *entry;
4443   struct mips_elf_traverse_got_arg *arg;
4444
4445   entry = (struct mips_got_entry *) *entryp;
4446   arg = (struct mips_elf_traverse_got_arg *) data;
4447   if (entry->abfd != NULL
4448       && entry->symndx == -1
4449       && entry->d.h->global_got_area != GGA_NONE)
4450     entry->d.h->global_got_area = arg->value;
4451   return 1;
4452 }
4453
4454 /* A htab_traverse callback for secondary GOT entries, where DATA points
4455    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4456    and record the number of relocations they require.  DATA->value is
4457    the size of one GOT entry.  Set DATA->g to null on failure.  */
4458
4459 static int
4460 mips_elf_set_global_gotidx (void **entryp, void *data)
4461 {
4462   struct mips_got_entry *entry;
4463   struct mips_elf_traverse_got_arg *arg;
4464
4465   entry = (struct mips_got_entry *) *entryp;
4466   arg = (struct mips_elf_traverse_got_arg *) data;
4467   if (entry->abfd != NULL
4468       && entry->symndx == -1
4469       && entry->d.h->global_got_area != GGA_NONE)
4470     {
4471       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_gotno))
4472         {
4473           arg->g = NULL;
4474           return 0;
4475         }
4476       arg->g->assigned_gotno += 1;
4477
4478       if (arg->info->shared
4479           || (elf_hash_table (arg->info)->dynamic_sections_created
4480               && entry->d.h->root.def_dynamic
4481               && !entry->d.h->root.def_regular))
4482         arg->g->relocs += 1;
4483     }
4484
4485   return 1;
4486 }
4487
4488 /* A htab_traverse callback for GOT entries for which DATA is the
4489    bfd_link_info.  Forbid any global symbols from having traditional
4490    lazy-binding stubs.  */
4491
4492 static int
4493 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4494 {
4495   struct bfd_link_info *info;
4496   struct mips_elf_link_hash_table *htab;
4497   struct mips_got_entry *entry;
4498
4499   entry = (struct mips_got_entry *) *entryp;
4500   info = (struct bfd_link_info *) data;
4501   htab = mips_elf_hash_table (info);
4502   BFD_ASSERT (htab != NULL);
4503
4504   if (entry->abfd != NULL
4505       && entry->symndx == -1
4506       && entry->d.h->needs_lazy_stub)
4507     {
4508       entry->d.h->needs_lazy_stub = FALSE;
4509       htab->lazy_stub_count--;
4510     }
4511
4512   return 1;
4513 }
4514
4515 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4516    the primary GOT.  */
4517 static bfd_vma
4518 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4519 {
4520   if (!g->next)
4521     return 0;
4522
4523   g = mips_elf_bfd_got (ibfd, FALSE);
4524   if (! g)
4525     return 0;
4526
4527   BFD_ASSERT (g->next);
4528
4529   g = g->next;
4530
4531   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4532     * MIPS_ELF_GOT_SIZE (abfd);
4533 }
4534
4535 /* Turn a single GOT that is too big for 16-bit addressing into
4536    a sequence of GOTs, each one 16-bit addressable.  */
4537
4538 static bfd_boolean
4539 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4540                     asection *got, bfd_size_type pages)
4541 {
4542   struct mips_elf_link_hash_table *htab;
4543   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4544   struct mips_elf_traverse_got_arg tga;
4545   struct mips_got_info *g, *gg;
4546   unsigned int assign, needed_relocs;
4547   bfd *dynobj, *ibfd;
4548
4549   dynobj = elf_hash_table (info)->dynobj;
4550   htab = mips_elf_hash_table (info);
4551   BFD_ASSERT (htab != NULL);
4552
4553   g = htab->got_info;
4554
4555   got_per_bfd_arg.obfd = abfd;
4556   got_per_bfd_arg.info = info;
4557   got_per_bfd_arg.current = NULL;
4558   got_per_bfd_arg.primary = NULL;
4559   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4560                                 / MIPS_ELF_GOT_SIZE (abfd))
4561                                - htab->reserved_gotno);
4562   got_per_bfd_arg.max_pages = pages;
4563   /* The number of globals that will be included in the primary GOT.
4564      See the calls to mips_elf_set_global_got_area below for more
4565      information.  */
4566   got_per_bfd_arg.global_count = g->global_gotno;
4567
4568   /* Try to merge the GOTs of input bfds together, as long as they
4569      don't seem to exceed the maximum GOT size, choosing one of them
4570      to be the primary GOT.  */
4571   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
4572     {
4573       gg = mips_elf_bfd_got (ibfd, FALSE);
4574       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4575         return FALSE;
4576     }
4577
4578   /* If we do not find any suitable primary GOT, create an empty one.  */
4579   if (got_per_bfd_arg.primary == NULL)
4580     g->next = mips_elf_create_got_info (abfd);
4581   else
4582     g->next = got_per_bfd_arg.primary;
4583   g->next->next = got_per_bfd_arg.current;
4584
4585   /* GG is now the master GOT, and G is the primary GOT.  */
4586   gg = g;
4587   g = g->next;
4588
4589   /* Map the output bfd to the primary got.  That's what we're going
4590      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4591      didn't mark in check_relocs, and we want a quick way to find it.
4592      We can't just use gg->next because we're going to reverse the
4593      list.  */
4594   mips_elf_replace_bfd_got (abfd, g);
4595
4596   /* Every symbol that is referenced in a dynamic relocation must be
4597      present in the primary GOT, so arrange for them to appear after
4598      those that are actually referenced.  */
4599   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4600   g->global_gotno = gg->global_gotno;
4601
4602   tga.info = info;
4603   tga.value = GGA_RELOC_ONLY;
4604   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4605   tga.value = GGA_NORMAL;
4606   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4607
4608   /* Now go through the GOTs assigning them offset ranges.
4609      [assigned_gotno, local_gotno[ will be set to the range of local
4610      entries in each GOT.  We can then compute the end of a GOT by
4611      adding local_gotno to global_gotno.  We reverse the list and make
4612      it circular since then we'll be able to quickly compute the
4613      beginning of a GOT, by computing the end of its predecessor.  To
4614      avoid special cases for the primary GOT, while still preserving
4615      assertions that are valid for both single- and multi-got links,
4616      we arrange for the main got struct to have the right number of
4617      global entries, but set its local_gotno such that the initial
4618      offset of the primary GOT is zero.  Remember that the primary GOT
4619      will become the last item in the circular linked list, so it
4620      points back to the master GOT.  */
4621   gg->local_gotno = -g->global_gotno;
4622   gg->global_gotno = g->global_gotno;
4623   gg->tls_gotno = 0;
4624   assign = 0;
4625   gg->next = gg;
4626
4627   do
4628     {
4629       struct mips_got_info *gn;
4630
4631       assign += htab->reserved_gotno;
4632       g->assigned_gotno = assign;
4633       g->local_gotno += assign;
4634       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4635       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4636
4637       /* Take g out of the direct list, and push it onto the reversed
4638          list that gg points to.  g->next is guaranteed to be nonnull after
4639          this operation, as required by mips_elf_initialize_tls_index. */
4640       gn = g->next;
4641       g->next = gg->next;
4642       gg->next = g;
4643
4644       /* Set up any TLS entries.  We always place the TLS entries after
4645          all non-TLS entries.  */
4646       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4647       tga.g = g;
4648       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4649       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4650       if (!tga.g)
4651         return FALSE;
4652       BFD_ASSERT (g->tls_assigned_gotno == assign);
4653
4654       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4655       g = gn;
4656
4657       /* Forbid global symbols in every non-primary GOT from having
4658          lazy-binding stubs.  */
4659       if (g)
4660         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4661     }
4662   while (g);
4663
4664   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4665
4666   needed_relocs = 0;
4667   for (g = gg->next; g && g->next != gg; g = g->next)
4668     {
4669       unsigned int save_assign;
4670
4671       /* Assign offsets to global GOT entries and count how many
4672          relocations they need.  */
4673       save_assign = g->assigned_gotno;
4674       g->assigned_gotno = g->local_gotno;
4675       tga.info = info;
4676       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4677       tga.g = g;
4678       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4679       if (!tga.g)
4680         return FALSE;
4681       BFD_ASSERT (g->assigned_gotno == g->local_gotno + g->global_gotno);
4682       g->assigned_gotno = save_assign;
4683
4684       if (info->shared)
4685         {
4686           g->relocs += g->local_gotno - g->assigned_gotno;
4687           BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4688                       + g->next->global_gotno
4689                       + g->next->tls_gotno
4690                       + htab->reserved_gotno);
4691         }
4692       needed_relocs += g->relocs;
4693     }
4694   needed_relocs += g->relocs;
4695
4696   if (needed_relocs)
4697     mips_elf_allocate_dynamic_relocations (dynobj, info,
4698                                            needed_relocs);
4699
4700   return TRUE;
4701 }
4702
4703 \f
4704 /* Returns the first relocation of type r_type found, beginning with
4705    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4706
4707 static const Elf_Internal_Rela *
4708 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4709                           const Elf_Internal_Rela *relocation,
4710                           const Elf_Internal_Rela *relend)
4711 {
4712   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4713
4714   while (relocation < relend)
4715     {
4716       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4717           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4718         return relocation;
4719
4720       ++relocation;
4721     }
4722
4723   /* We didn't find it.  */
4724   return NULL;
4725 }
4726
4727 /* Return whether an input relocation is against a local symbol.  */
4728
4729 static bfd_boolean
4730 mips_elf_local_relocation_p (bfd *input_bfd,
4731                              const Elf_Internal_Rela *relocation,
4732                              asection **local_sections)
4733 {
4734   unsigned long r_symndx;
4735   Elf_Internal_Shdr *symtab_hdr;
4736   size_t extsymoff;
4737
4738   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4739   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4740   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4741
4742   if (r_symndx < extsymoff)
4743     return TRUE;
4744   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4745     return TRUE;
4746
4747   return FALSE;
4748 }
4749 \f
4750 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4751
4752 bfd_vma
4753 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4754 {
4755   if (value & ((bfd_vma) 1 << (bits - 1)))
4756     /* VALUE is negative.  */
4757     value |= ((bfd_vma) - 1) << bits;
4758
4759   return value;
4760 }
4761
4762 /* Return non-zero if the indicated VALUE has overflowed the maximum
4763    range expressible by a signed number with the indicated number of
4764    BITS.  */
4765
4766 static bfd_boolean
4767 mips_elf_overflow_p (bfd_vma value, int bits)
4768 {
4769   bfd_signed_vma svalue = (bfd_signed_vma) value;
4770
4771   if (svalue > (1 << (bits - 1)) - 1)
4772     /* The value is too big.  */
4773     return TRUE;
4774   else if (svalue < -(1 << (bits - 1)))
4775     /* The value is too small.  */
4776     return TRUE;
4777
4778   /* All is well.  */
4779   return FALSE;
4780 }
4781
4782 /* Calculate the %high function.  */
4783
4784 static bfd_vma
4785 mips_elf_high (bfd_vma value)
4786 {
4787   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4788 }
4789
4790 /* Calculate the %higher function.  */
4791
4792 static bfd_vma
4793 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
4794 {
4795 #ifdef BFD64
4796   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4797 #else
4798   abort ();
4799   return MINUS_ONE;
4800 #endif
4801 }
4802
4803 /* Calculate the %highest function.  */
4804
4805 static bfd_vma
4806 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
4807 {
4808 #ifdef BFD64
4809   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
4810 #else
4811   abort ();
4812   return MINUS_ONE;
4813 #endif
4814 }
4815 \f
4816 /* Create the .compact_rel section.  */
4817
4818 static bfd_boolean
4819 mips_elf_create_compact_rel_section
4820   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
4821 {
4822   flagword flags;
4823   register asection *s;
4824
4825   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
4826     {
4827       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4828                | SEC_READONLY);
4829
4830       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
4831       if (s == NULL
4832           || ! bfd_set_section_alignment (abfd, s,
4833                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4834         return FALSE;
4835
4836       s->size = sizeof (Elf32_External_compact_rel);
4837     }
4838
4839   return TRUE;
4840 }
4841
4842 /* Create the .got section to hold the global offset table.  */
4843
4844 static bfd_boolean
4845 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
4846 {
4847   flagword flags;
4848   register asection *s;
4849   struct elf_link_hash_entry *h;
4850   struct bfd_link_hash_entry *bh;
4851   struct mips_elf_link_hash_table *htab;
4852
4853   htab = mips_elf_hash_table (info);
4854   BFD_ASSERT (htab != NULL);
4855
4856   /* This function may be called more than once.  */
4857   if (htab->sgot)
4858     return TRUE;
4859
4860   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4861            | SEC_LINKER_CREATED);
4862
4863   /* We have to use an alignment of 2**4 here because this is hardcoded
4864      in the function stub generation and in the linker script.  */
4865   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4866   if (s == NULL
4867       || ! bfd_set_section_alignment (abfd, s, 4))
4868     return FALSE;
4869   htab->sgot = s;
4870
4871   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
4872      linker script because we don't want to define the symbol if we
4873      are not creating a global offset table.  */
4874   bh = NULL;
4875   if (! (_bfd_generic_link_add_one_symbol
4876          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
4877           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
4878     return FALSE;
4879
4880   h = (struct elf_link_hash_entry *) bh;
4881   h->non_elf = 0;
4882   h->def_regular = 1;
4883   h->type = STT_OBJECT;
4884   elf_hash_table (info)->hgot = h;
4885
4886   if (info->shared
4887       && ! bfd_elf_link_record_dynamic_symbol (info, h))
4888     return FALSE;
4889
4890   htab->got_info = mips_elf_create_got_info (abfd);
4891   mips_elf_section_data (s)->elf.this_hdr.sh_flags
4892     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4893
4894   /* We also need a .got.plt section when generating PLTs.  */
4895   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
4896                                           SEC_ALLOC | SEC_LOAD
4897                                           | SEC_HAS_CONTENTS
4898                                           | SEC_IN_MEMORY
4899                                           | SEC_LINKER_CREATED);
4900   if (s == NULL)
4901     return FALSE;
4902   htab->sgotplt = s;
4903
4904   return TRUE;
4905 }
4906 \f
4907 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4908    __GOTT_INDEX__ symbols.  These symbols are only special for
4909    shared objects; they are not used in executables.  */
4910
4911 static bfd_boolean
4912 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
4913 {
4914   return (mips_elf_hash_table (info)->is_vxworks
4915           && info->shared
4916           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
4917               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
4918 }
4919
4920 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
4921    require an la25 stub.  See also mips_elf_local_pic_function_p,
4922    which determines whether the destination function ever requires a
4923    stub.  */
4924
4925 static bfd_boolean
4926 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
4927                                      bfd_boolean target_is_16_bit_code_p)
4928 {
4929   /* We specifically ignore branches and jumps from EF_PIC objects,
4930      where the onus is on the compiler or programmer to perform any
4931      necessary initialization of $25.  Sometimes such initialization
4932      is unnecessary; for example, -mno-shared functions do not use
4933      the incoming value of $25, and may therefore be called directly.  */
4934   if (PIC_OBJECT_P (input_bfd))
4935     return FALSE;
4936
4937   switch (r_type)
4938     {
4939     case R_MIPS_26:
4940     case R_MIPS_PC16:
4941     case R_MICROMIPS_26_S1:
4942     case R_MICROMIPS_PC7_S1:
4943     case R_MICROMIPS_PC10_S1:
4944     case R_MICROMIPS_PC16_S1:
4945     case R_MICROMIPS_PC23_S2:
4946       return TRUE;
4947
4948     case R_MIPS16_26:
4949       return !target_is_16_bit_code_p;
4950
4951     default:
4952       return FALSE;
4953     }
4954 }
4955 \f
4956 /* Calculate the value produced by the RELOCATION (which comes from
4957    the INPUT_BFD).  The ADDEND is the addend to use for this
4958    RELOCATION; RELOCATION->R_ADDEND is ignored.
4959
4960    The result of the relocation calculation is stored in VALUEP.
4961    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
4962    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
4963
4964    This function returns bfd_reloc_continue if the caller need take no
4965    further action regarding this relocation, bfd_reloc_notsupported if
4966    something goes dramatically wrong, bfd_reloc_overflow if an
4967    overflow occurs, and bfd_reloc_ok to indicate success.  */
4968
4969 static bfd_reloc_status_type
4970 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
4971                                asection *input_section,
4972                                struct bfd_link_info *info,
4973                                const Elf_Internal_Rela *relocation,
4974                                bfd_vma addend, reloc_howto_type *howto,
4975                                Elf_Internal_Sym *local_syms,
4976                                asection **local_sections, bfd_vma *valuep,
4977                                const char **namep,
4978                                bfd_boolean *cross_mode_jump_p,
4979                                bfd_boolean save_addend)
4980 {
4981   /* The eventual value we will return.  */
4982   bfd_vma value;
4983   /* The address of the symbol against which the relocation is
4984      occurring.  */
4985   bfd_vma symbol = 0;
4986   /* The final GP value to be used for the relocatable, executable, or
4987      shared object file being produced.  */
4988   bfd_vma gp;
4989   /* The place (section offset or address) of the storage unit being
4990      relocated.  */
4991   bfd_vma p;
4992   /* The value of GP used to create the relocatable object.  */
4993   bfd_vma gp0;
4994   /* The offset into the global offset table at which the address of
4995      the relocation entry symbol, adjusted by the addend, resides
4996      during execution.  */
4997   bfd_vma g = MINUS_ONE;
4998   /* The section in which the symbol referenced by the relocation is
4999      located.  */
5000   asection *sec = NULL;
5001   struct mips_elf_link_hash_entry *h = NULL;
5002   /* TRUE if the symbol referred to by this relocation is a local
5003      symbol.  */
5004   bfd_boolean local_p, was_local_p;
5005   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5006   bfd_boolean gp_disp_p = FALSE;
5007   /* TRUE if the symbol referred to by this relocation is
5008      "__gnu_local_gp".  */
5009   bfd_boolean gnu_local_gp_p = FALSE;
5010   Elf_Internal_Shdr *symtab_hdr;
5011   size_t extsymoff;
5012   unsigned long r_symndx;
5013   int r_type;
5014   /* TRUE if overflow occurred during the calculation of the
5015      relocation value.  */
5016   bfd_boolean overflowed_p;
5017   /* TRUE if this relocation refers to a MIPS16 function.  */
5018   bfd_boolean target_is_16_bit_code_p = FALSE;
5019   bfd_boolean target_is_micromips_code_p = FALSE;
5020   struct mips_elf_link_hash_table *htab;
5021   bfd *dynobj;
5022
5023   dynobj = elf_hash_table (info)->dynobj;
5024   htab = mips_elf_hash_table (info);
5025   BFD_ASSERT (htab != NULL);
5026
5027   /* Parse the relocation.  */
5028   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5029   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5030   p = (input_section->output_section->vma
5031        + input_section->output_offset
5032        + relocation->r_offset);
5033
5034   /* Assume that there will be no overflow.  */
5035   overflowed_p = FALSE;
5036
5037   /* Figure out whether or not the symbol is local, and get the offset
5038      used in the array of hash table entries.  */
5039   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5040   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5041                                          local_sections);
5042   was_local_p = local_p;
5043   if (! elf_bad_symtab (input_bfd))
5044     extsymoff = symtab_hdr->sh_info;
5045   else
5046     {
5047       /* The symbol table does not follow the rule that local symbols
5048          must come before globals.  */
5049       extsymoff = 0;
5050     }
5051
5052   /* Figure out the value of the symbol.  */
5053   if (local_p)
5054     {
5055       Elf_Internal_Sym *sym;
5056
5057       sym = local_syms + r_symndx;
5058       sec = local_sections[r_symndx];
5059
5060       symbol = sec->output_section->vma + sec->output_offset;
5061       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5062           || (sec->flags & SEC_MERGE))
5063         symbol += sym->st_value;
5064       if ((sec->flags & SEC_MERGE)
5065           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5066         {
5067           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5068           addend -= symbol;
5069           addend += sec->output_section->vma + sec->output_offset;
5070         }
5071
5072       /* MIPS16/microMIPS text labels should be treated as odd.  */
5073       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5074         ++symbol;
5075
5076       /* Record the name of this symbol, for our caller.  */
5077       *namep = bfd_elf_string_from_elf_section (input_bfd,
5078                                                 symtab_hdr->sh_link,
5079                                                 sym->st_name);
5080       if (*namep == '\0')
5081         *namep = bfd_section_name (input_bfd, sec);
5082
5083       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5084       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5085     }
5086   else
5087     {
5088       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5089
5090       /* For global symbols we look up the symbol in the hash-table.  */
5091       h = ((struct mips_elf_link_hash_entry *)
5092            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5093       /* Find the real hash-table entry for this symbol.  */
5094       while (h->root.root.type == bfd_link_hash_indirect
5095              || h->root.root.type == bfd_link_hash_warning)
5096         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5097
5098       /* Record the name of this symbol, for our caller.  */
5099       *namep = h->root.root.root.string;
5100
5101       /* See if this is the special _gp_disp symbol.  Note that such a
5102          symbol must always be a global symbol.  */
5103       if (strcmp (*namep, "_gp_disp") == 0
5104           && ! NEWABI_P (input_bfd))
5105         {
5106           /* Relocations against _gp_disp are permitted only with
5107              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5108           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5109             return bfd_reloc_notsupported;
5110
5111           gp_disp_p = TRUE;
5112         }
5113       /* See if this is the special _gp symbol.  Note that such a
5114          symbol must always be a global symbol.  */
5115       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5116         gnu_local_gp_p = TRUE;
5117
5118
5119       /* If this symbol is defined, calculate its address.  Note that
5120          _gp_disp is a magic symbol, always implicitly defined by the
5121          linker, so it's inappropriate to check to see whether or not
5122          its defined.  */
5123       else if ((h->root.root.type == bfd_link_hash_defined
5124                 || h->root.root.type == bfd_link_hash_defweak)
5125                && h->root.root.u.def.section)
5126         {
5127           sec = h->root.root.u.def.section;
5128           if (sec->output_section)
5129             symbol = (h->root.root.u.def.value
5130                       + sec->output_section->vma
5131                       + sec->output_offset);
5132           else
5133             symbol = h->root.root.u.def.value;
5134         }
5135       else if (h->root.root.type == bfd_link_hash_undefweak)
5136         /* We allow relocations against undefined weak symbols, giving
5137            it the value zero, so that you can undefined weak functions
5138            and check to see if they exist by looking at their
5139            addresses.  */
5140         symbol = 0;
5141       else if (info->unresolved_syms_in_objects == RM_IGNORE
5142                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5143         symbol = 0;
5144       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5145                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5146         {
5147           /* If this is a dynamic link, we should have created a
5148              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5149              in in _bfd_mips_elf_create_dynamic_sections.
5150              Otherwise, we should define the symbol with a value of 0.
5151              FIXME: It should probably get into the symbol table
5152              somehow as well.  */
5153           BFD_ASSERT (! info->shared);
5154           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5155           symbol = 0;
5156         }
5157       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5158         {
5159           /* This is an optional symbol - an Irix specific extension to the
5160              ELF spec.  Ignore it for now.
5161              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5162              than simply ignoring them, but we do not handle this for now.
5163              For information see the "64-bit ELF Object File Specification"
5164              which is available from here:
5165              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5166           symbol = 0;
5167         }
5168       else if ((*info->callbacks->undefined_symbol)
5169                (info, h->root.root.root.string, input_bfd,
5170                 input_section, relocation->r_offset,
5171                 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5172                  || ELF_ST_VISIBILITY (h->root.other)))
5173         {
5174           return bfd_reloc_undefined;
5175         }
5176       else
5177         {
5178           return bfd_reloc_notsupported;
5179         }
5180
5181       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5182       /* If the output section is the PLT section,
5183          then the target is not microMIPS.  */
5184       target_is_micromips_code_p = (htab->splt != sec
5185                                     && ELF_ST_IS_MICROMIPS (h->root.other));
5186     }
5187
5188   /* If this is a reference to a 16-bit function with a stub, we need
5189      to redirect the relocation to the stub unless:
5190
5191      (a) the relocation is for a MIPS16 JAL;
5192
5193      (b) the relocation is for a MIPS16 PIC call, and there are no
5194          non-MIPS16 uses of the GOT slot; or
5195
5196      (c) the section allows direct references to MIPS16 functions.  */
5197   if (r_type != R_MIPS16_26
5198       && !info->relocatable
5199       && ((h != NULL
5200            && h->fn_stub != NULL
5201            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5202           || (local_p
5203               && mips_elf_tdata (input_bfd)->local_stubs != NULL
5204               && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5205       && !section_allows_mips16_refs_p (input_section))
5206     {
5207       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5208          have already noticed that we were going to need the
5209          stub.  */
5210       if (local_p)
5211         {
5212           sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5213           value = 0;
5214         }
5215       else
5216         {
5217           BFD_ASSERT (h->need_fn_stub);
5218           if (h->la25_stub)
5219             {
5220               /* If a LA25 header for the stub itself exists, point to the
5221                  prepended LUI/ADDIU sequence.  */
5222               sec = h->la25_stub->stub_section;
5223               value = h->la25_stub->offset;
5224             }
5225           else
5226             {
5227               sec = h->fn_stub;
5228               value = 0;
5229             }
5230         }
5231
5232       symbol = sec->output_section->vma + sec->output_offset + value;
5233       /* The target is 16-bit, but the stub isn't.  */
5234       target_is_16_bit_code_p = FALSE;
5235     }
5236   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
5237      need to redirect the call to the stub.  Note that we specifically
5238      exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5239      use an indirect stub instead.  */
5240   else if (r_type == R_MIPS16_26 && !info->relocatable
5241            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5242                || (local_p
5243                    && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5244                    && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5245            && !target_is_16_bit_code_p)
5246     {
5247       if (local_p)
5248         sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5249       else
5250         {
5251           /* If both call_stub and call_fp_stub are defined, we can figure
5252              out which one to use by checking which one appears in the input
5253              file.  */
5254           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5255             {
5256               asection *o;
5257
5258               sec = NULL;
5259               for (o = input_bfd->sections; o != NULL; o = o->next)
5260                 {
5261                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5262                     {
5263                       sec = h->call_fp_stub;
5264                       break;
5265                     }
5266                 }
5267               if (sec == NULL)
5268                 sec = h->call_stub;
5269             }
5270           else if (h->call_stub != NULL)
5271             sec = h->call_stub;
5272           else
5273             sec = h->call_fp_stub;
5274         }
5275
5276       BFD_ASSERT (sec->size > 0);
5277       symbol = sec->output_section->vma + sec->output_offset;
5278     }
5279   /* If this is a direct call to a PIC function, redirect to the
5280      non-PIC stub.  */
5281   else if (h != NULL && h->la25_stub
5282            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5283                                                    target_is_16_bit_code_p))
5284     symbol = (h->la25_stub->stub_section->output_section->vma
5285               + h->la25_stub->stub_section->output_offset
5286               + h->la25_stub->offset);
5287
5288   /* Make sure MIPS16 and microMIPS are not used together.  */
5289   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5290       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5291    {
5292       (*_bfd_error_handler)
5293         (_("MIPS16 and microMIPS functions cannot call each other"));
5294       return bfd_reloc_notsupported;
5295    }
5296
5297   /* Calls from 16-bit code to 32-bit code and vice versa require the
5298      mode change.  However, we can ignore calls to undefined weak symbols,
5299      which should never be executed at runtime.  This exception is important
5300      because the assembly writer may have "known" that any definition of the
5301      symbol would be 16-bit code, and that direct jumps were therefore
5302      acceptable.  */
5303   *cross_mode_jump_p = (!info->relocatable
5304                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5305                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5306                             || (r_type == R_MICROMIPS_26_S1
5307                                 && !target_is_micromips_code_p)
5308                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5309                                 && (target_is_16_bit_code_p
5310                                     || target_is_micromips_code_p))));
5311
5312   local_p = (h == NULL
5313              || (h->got_only_for_calls
5314                  ? SYMBOL_CALLS_LOCAL (info, &h->root)
5315                  : SYMBOL_REFERENCES_LOCAL (info, &h->root)));
5316
5317   gp0 = _bfd_get_gp_value (input_bfd);
5318   gp = _bfd_get_gp_value (abfd);
5319   if (htab->got_info)
5320     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5321
5322   if (gnu_local_gp_p)
5323     symbol = gp;
5324
5325   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5326      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5327      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5328   if (got_page_reloc_p (r_type) && !local_p)
5329     {
5330       r_type = (micromips_reloc_p (r_type)
5331                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5332       addend = 0;
5333     }
5334
5335   /* If we haven't already determined the GOT offset, and we're going
5336      to need it, get it now.  */
5337   switch (r_type)
5338     {
5339     case R_MIPS16_CALL16:
5340     case R_MIPS16_GOT16:
5341     case R_MIPS_CALL16:
5342     case R_MIPS_GOT16:
5343     case R_MIPS_GOT_DISP:
5344     case R_MIPS_GOT_HI16:
5345     case R_MIPS_CALL_HI16:
5346     case R_MIPS_GOT_LO16:
5347     case R_MIPS_CALL_LO16:
5348     case R_MICROMIPS_CALL16:
5349     case R_MICROMIPS_GOT16:
5350     case R_MICROMIPS_GOT_DISP:
5351     case R_MICROMIPS_GOT_HI16:
5352     case R_MICROMIPS_CALL_HI16:
5353     case R_MICROMIPS_GOT_LO16:
5354     case R_MICROMIPS_CALL_LO16:
5355     case R_MIPS_TLS_GD:
5356     case R_MIPS_TLS_GOTTPREL:
5357     case R_MIPS_TLS_LDM:
5358     case R_MIPS16_TLS_GD:
5359     case R_MIPS16_TLS_GOTTPREL:
5360     case R_MIPS16_TLS_LDM:
5361     case R_MICROMIPS_TLS_GD:
5362     case R_MICROMIPS_TLS_GOTTPREL:
5363     case R_MICROMIPS_TLS_LDM:
5364       /* Find the index into the GOT where this value is located.  */
5365       if (tls_ldm_reloc_p (r_type))
5366         {
5367           g = mips_elf_local_got_index (abfd, input_bfd, info,
5368                                         0, 0, NULL, r_type);
5369           if (g == MINUS_ONE)
5370             return bfd_reloc_outofrange;
5371         }
5372       else if (!local_p)
5373         {
5374           /* On VxWorks, CALL relocations should refer to the .got.plt
5375              entry, which is initialized to point at the PLT stub.  */
5376           if (htab->is_vxworks
5377               && (call_hi16_reloc_p (r_type)
5378                   || call_lo16_reloc_p (r_type)
5379                   || call16_reloc_p (r_type)))
5380             {
5381               BFD_ASSERT (addend == 0);
5382               BFD_ASSERT (h->root.needs_plt);
5383               g = mips_elf_gotplt_index (info, &h->root);
5384             }
5385           else
5386             {
5387               BFD_ASSERT (addend == 0);
5388               g = mips_elf_global_got_index (abfd, info, input_bfd,
5389                                              &h->root, r_type);
5390               if (!TLS_RELOC_P (r_type)
5391                   && !elf_hash_table (info)->dynamic_sections_created)
5392                 /* This is a static link.  We must initialize the GOT entry.  */
5393                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5394             }
5395         }
5396       else if (!htab->is_vxworks
5397                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5398         /* The calculation below does not involve "g".  */
5399         break;
5400       else
5401         {
5402           g = mips_elf_local_got_index (abfd, input_bfd, info,
5403                                         symbol + addend, r_symndx, h, r_type);
5404           if (g == MINUS_ONE)
5405             return bfd_reloc_outofrange;
5406         }
5407
5408       /* Convert GOT indices to actual offsets.  */
5409       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5410       break;
5411     }
5412
5413   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5414      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5415   if (h != NULL && is_gott_symbol (info, &h->root))
5416     {
5417       Elf_Internal_Rela outrel;
5418       bfd_byte *loc;
5419       asection *s;
5420
5421       s = mips_elf_rel_dyn_section (info, FALSE);
5422       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5423
5424       outrel.r_offset = (input_section->output_section->vma
5425                          + input_section->output_offset
5426                          + relocation->r_offset);
5427       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5428       outrel.r_addend = addend;
5429       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5430
5431       /* If we've written this relocation for a readonly section,
5432          we need to set DF_TEXTREL again, so that we do not delete the
5433          DT_TEXTREL tag.  */
5434       if (MIPS_ELF_READONLY_SECTION (input_section))
5435         info->flags |= DF_TEXTREL;
5436
5437       *valuep = 0;
5438       return bfd_reloc_ok;
5439     }
5440
5441   /* Figure out what kind of relocation is being performed.  */
5442   switch (r_type)
5443     {
5444     case R_MIPS_NONE:
5445       return bfd_reloc_continue;
5446
5447     case R_MIPS_16:
5448       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
5449       overflowed_p = mips_elf_overflow_p (value, 16);
5450       break;
5451
5452     case R_MIPS_32:
5453     case R_MIPS_REL32:
5454     case R_MIPS_64:
5455       if ((info->shared
5456            || (htab->root.dynamic_sections_created
5457                && h != NULL
5458                && h->root.def_dynamic
5459                && !h->root.def_regular
5460                && !h->has_static_relocs))
5461           && r_symndx != STN_UNDEF
5462           && (h == NULL
5463               || h->root.root.type != bfd_link_hash_undefweak
5464               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5465           && (input_section->flags & SEC_ALLOC) != 0)
5466         {
5467           /* If we're creating a shared library, then we can't know
5468              where the symbol will end up.  So, we create a relocation
5469              record in the output, and leave the job up to the dynamic
5470              linker.  We must do the same for executable references to
5471              shared library symbols, unless we've decided to use copy
5472              relocs or PLTs instead.  */
5473           value = addend;
5474           if (!mips_elf_create_dynamic_relocation (abfd,
5475                                                    info,
5476                                                    relocation,
5477                                                    h,
5478                                                    sec,
5479                                                    symbol,
5480                                                    &value,
5481                                                    input_section))
5482             return bfd_reloc_undefined;
5483         }
5484       else
5485         {
5486           if (r_type != R_MIPS_REL32)
5487             value = symbol + addend;
5488           else
5489             value = addend;
5490         }
5491       value &= howto->dst_mask;
5492       break;
5493
5494     case R_MIPS_PC32:
5495       value = symbol + addend - p;
5496       value &= howto->dst_mask;
5497       break;
5498
5499     case R_MIPS16_26:
5500       /* The calculation for R_MIPS16_26 is just the same as for an
5501          R_MIPS_26.  It's only the storage of the relocated field into
5502          the output file that's different.  That's handled in
5503          mips_elf_perform_relocation.  So, we just fall through to the
5504          R_MIPS_26 case here.  */
5505     case R_MIPS_26:
5506     case R_MICROMIPS_26_S1:
5507       {
5508         unsigned int shift;
5509
5510         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5511            the correct ISA mode selector and bit 1 must be 0.  */
5512         if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5513           return bfd_reloc_outofrange;
5514
5515         /* Shift is 2, unusually, for microMIPS JALX.  */
5516         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5517
5518         if (was_local_p)
5519           value = addend | ((p + 4) & (0xfc000000 << shift));
5520         else
5521           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5522         value = (value + symbol) >> shift;
5523         if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5524           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5525         value &= howto->dst_mask;
5526       }
5527       break;
5528
5529     case R_MIPS_TLS_DTPREL_HI16:
5530     case R_MIPS16_TLS_DTPREL_HI16:
5531     case R_MICROMIPS_TLS_DTPREL_HI16:
5532       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5533                & howto->dst_mask);
5534       break;
5535
5536     case R_MIPS_TLS_DTPREL_LO16:
5537     case R_MIPS_TLS_DTPREL32:
5538     case R_MIPS_TLS_DTPREL64:
5539     case R_MIPS16_TLS_DTPREL_LO16:
5540     case R_MICROMIPS_TLS_DTPREL_LO16:
5541       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5542       break;
5543
5544     case R_MIPS_TLS_TPREL_HI16:
5545     case R_MIPS16_TLS_TPREL_HI16:
5546     case R_MICROMIPS_TLS_TPREL_HI16:
5547       value = (mips_elf_high (addend + symbol - tprel_base (info))
5548                & howto->dst_mask);
5549       break;
5550
5551     case R_MIPS_TLS_TPREL_LO16:
5552     case R_MIPS_TLS_TPREL32:
5553     case R_MIPS_TLS_TPREL64:
5554     case R_MIPS16_TLS_TPREL_LO16:
5555     case R_MICROMIPS_TLS_TPREL_LO16:
5556       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5557       break;
5558
5559     case R_MIPS_HI16:
5560     case R_MIPS16_HI16:
5561     case R_MICROMIPS_HI16:
5562       if (!gp_disp_p)
5563         {
5564           value = mips_elf_high (addend + symbol);
5565           value &= howto->dst_mask;
5566         }
5567       else
5568         {
5569           /* For MIPS16 ABI code we generate this sequence
5570                 0: li      $v0,%hi(_gp_disp)
5571                 4: addiupc $v1,%lo(_gp_disp)
5572                 8: sll     $v0,16
5573                12: addu    $v0,$v1
5574                14: move    $gp,$v0
5575              So the offsets of hi and lo relocs are the same, but the
5576              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5577              ADDIUPC clears the low two bits of the instruction address,
5578              so the base is ($t9 + 4) & ~3.  */
5579           if (r_type == R_MIPS16_HI16)
5580             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5581           /* The microMIPS .cpload sequence uses the same assembly
5582              instructions as the traditional psABI version, but the
5583              incoming $t9 has the low bit set.  */
5584           else if (r_type == R_MICROMIPS_HI16)
5585             value = mips_elf_high (addend + gp - p - 1);
5586           else
5587             value = mips_elf_high (addend + gp - p);
5588           overflowed_p = mips_elf_overflow_p (value, 16);
5589         }
5590       break;
5591
5592     case R_MIPS_LO16:
5593     case R_MIPS16_LO16:
5594     case R_MICROMIPS_LO16:
5595     case R_MICROMIPS_HI0_LO16:
5596       if (!gp_disp_p)
5597         value = (symbol + addend) & howto->dst_mask;
5598       else
5599         {
5600           /* See the comment for R_MIPS16_HI16 above for the reason
5601              for this conditional.  */
5602           if (r_type == R_MIPS16_LO16)
5603             value = addend + gp - (p & ~(bfd_vma) 0x3);
5604           else if (r_type == R_MICROMIPS_LO16
5605                    || r_type == R_MICROMIPS_HI0_LO16)
5606             value = addend + gp - p + 3;
5607           else
5608             value = addend + gp - p + 4;
5609           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5610              for overflow.  But, on, say, IRIX5, relocations against
5611              _gp_disp are normally generated from the .cpload
5612              pseudo-op.  It generates code that normally looks like
5613              this:
5614
5615                lui    $gp,%hi(_gp_disp)
5616                addiu  $gp,$gp,%lo(_gp_disp)
5617                addu   $gp,$gp,$t9
5618
5619              Here $t9 holds the address of the function being called,
5620              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5621              relocation can easily overflow in this situation, but the
5622              R_MIPS_HI16 relocation will handle the overflow.
5623              Therefore, we consider this a bug in the MIPS ABI, and do
5624              not check for overflow here.  */
5625         }
5626       break;
5627
5628     case R_MIPS_LITERAL:
5629     case R_MICROMIPS_LITERAL:
5630       /* Because we don't merge literal sections, we can handle this
5631          just like R_MIPS_GPREL16.  In the long run, we should merge
5632          shared literals, and then we will need to additional work
5633          here.  */
5634
5635       /* Fall through.  */
5636
5637     case R_MIPS16_GPREL:
5638       /* The R_MIPS16_GPREL performs the same calculation as
5639          R_MIPS_GPREL16, but stores the relocated bits in a different
5640          order.  We don't need to do anything special here; the
5641          differences are handled in mips_elf_perform_relocation.  */
5642     case R_MIPS_GPREL16:
5643     case R_MICROMIPS_GPREL7_S2:
5644     case R_MICROMIPS_GPREL16:
5645       /* Only sign-extend the addend if it was extracted from the
5646          instruction.  If the addend was separate, leave it alone,
5647          otherwise we may lose significant bits.  */
5648       if (howto->partial_inplace)
5649         addend = _bfd_mips_elf_sign_extend (addend, 16);
5650       value = symbol + addend - gp;
5651       /* If the symbol was local, any earlier relocatable links will
5652          have adjusted its addend with the gp offset, so compensate
5653          for that now.  Don't do it for symbols forced local in this
5654          link, though, since they won't have had the gp offset applied
5655          to them before.  */
5656       if (was_local_p)
5657         value += gp0;
5658       overflowed_p = mips_elf_overflow_p (value, 16);
5659       break;
5660
5661     case R_MIPS16_GOT16:
5662     case R_MIPS16_CALL16:
5663     case R_MIPS_GOT16:
5664     case R_MIPS_CALL16:
5665     case R_MICROMIPS_GOT16:
5666     case R_MICROMIPS_CALL16:
5667       /* VxWorks does not have separate local and global semantics for
5668          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5669       if (!htab->is_vxworks && local_p)
5670         {
5671           value = mips_elf_got16_entry (abfd, input_bfd, info,
5672                                         symbol + addend, !was_local_p);
5673           if (value == MINUS_ONE)
5674             return bfd_reloc_outofrange;
5675           value
5676             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5677           overflowed_p = mips_elf_overflow_p (value, 16);
5678           break;
5679         }
5680
5681       /* Fall through.  */
5682
5683     case R_MIPS_TLS_GD:
5684     case R_MIPS_TLS_GOTTPREL:
5685     case R_MIPS_TLS_LDM:
5686     case R_MIPS_GOT_DISP:
5687     case R_MIPS16_TLS_GD:
5688     case R_MIPS16_TLS_GOTTPREL:
5689     case R_MIPS16_TLS_LDM:
5690     case R_MICROMIPS_TLS_GD:
5691     case R_MICROMIPS_TLS_GOTTPREL:
5692     case R_MICROMIPS_TLS_LDM:
5693     case R_MICROMIPS_GOT_DISP:
5694       value = g;
5695       overflowed_p = mips_elf_overflow_p (value, 16);
5696       break;
5697
5698     case R_MIPS_GPREL32:
5699       value = (addend + symbol + gp0 - gp);
5700       if (!save_addend)
5701         value &= howto->dst_mask;
5702       break;
5703
5704     case R_MIPS_PC16:
5705     case R_MIPS_GNU_REL16_S2:
5706       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5707       overflowed_p = mips_elf_overflow_p (value, 18);
5708       value >>= howto->rightshift;
5709       value &= howto->dst_mask;
5710       break;
5711
5712     case R_MICROMIPS_PC7_S1:
5713       value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p;
5714       overflowed_p = mips_elf_overflow_p (value, 8);
5715       value >>= howto->rightshift;
5716       value &= howto->dst_mask;
5717       break;
5718
5719     case R_MICROMIPS_PC10_S1:
5720       value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p;
5721       overflowed_p = mips_elf_overflow_p (value, 11);
5722       value >>= howto->rightshift;
5723       value &= howto->dst_mask;
5724       break;
5725
5726     case R_MICROMIPS_PC16_S1:
5727       value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p;
5728       overflowed_p = mips_elf_overflow_p (value, 17);
5729       value >>= howto->rightshift;
5730       value &= howto->dst_mask;
5731       break;
5732
5733     case R_MICROMIPS_PC23_S2:
5734       value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3);
5735       overflowed_p = mips_elf_overflow_p (value, 25);
5736       value >>= howto->rightshift;
5737       value &= howto->dst_mask;
5738       break;
5739
5740     case R_MIPS_GOT_HI16:
5741     case R_MIPS_CALL_HI16:
5742     case R_MICROMIPS_GOT_HI16:
5743     case R_MICROMIPS_CALL_HI16:
5744       /* We're allowed to handle these two relocations identically.
5745          The dynamic linker is allowed to handle the CALL relocations
5746          differently by creating a lazy evaluation stub.  */
5747       value = g;
5748       value = mips_elf_high (value);
5749       value &= howto->dst_mask;
5750       break;
5751
5752     case R_MIPS_GOT_LO16:
5753     case R_MIPS_CALL_LO16:
5754     case R_MICROMIPS_GOT_LO16:
5755     case R_MICROMIPS_CALL_LO16:
5756       value = g & howto->dst_mask;
5757       break;
5758
5759     case R_MIPS_GOT_PAGE:
5760     case R_MICROMIPS_GOT_PAGE:
5761       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
5762       if (value == MINUS_ONE)
5763         return bfd_reloc_outofrange;
5764       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5765       overflowed_p = mips_elf_overflow_p (value, 16);
5766       break;
5767
5768     case R_MIPS_GOT_OFST:
5769     case R_MICROMIPS_GOT_OFST:
5770       if (local_p)
5771         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
5772       else
5773         value = addend;
5774       overflowed_p = mips_elf_overflow_p (value, 16);
5775       break;
5776
5777     case R_MIPS_SUB:
5778     case R_MICROMIPS_SUB:
5779       value = symbol - addend;
5780       value &= howto->dst_mask;
5781       break;
5782
5783     case R_MIPS_HIGHER:
5784     case R_MICROMIPS_HIGHER:
5785       value = mips_elf_higher (addend + symbol);
5786       value &= howto->dst_mask;
5787       break;
5788
5789     case R_MIPS_HIGHEST:
5790     case R_MICROMIPS_HIGHEST:
5791       value = mips_elf_highest (addend + symbol);
5792       value &= howto->dst_mask;
5793       break;
5794
5795     case R_MIPS_SCN_DISP:
5796     case R_MICROMIPS_SCN_DISP:
5797       value = symbol + addend - sec->output_offset;
5798       value &= howto->dst_mask;
5799       break;
5800
5801     case R_MIPS_JALR:
5802     case R_MICROMIPS_JALR:
5803       /* This relocation is only a hint.  In some cases, we optimize
5804          it into a bal instruction.  But we don't try to optimize
5805          when the symbol does not resolve locally.  */
5806       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
5807         return bfd_reloc_continue;
5808       value = symbol + addend;
5809       break;
5810
5811     case R_MIPS_PJUMP:
5812     case R_MIPS_GNU_VTINHERIT:
5813     case R_MIPS_GNU_VTENTRY:
5814       /* We don't do anything with these at present.  */
5815       return bfd_reloc_continue;
5816
5817     default:
5818       /* An unrecognized relocation type.  */
5819       return bfd_reloc_notsupported;
5820     }
5821
5822   /* Store the VALUE for our caller.  */
5823   *valuep = value;
5824   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5825 }
5826
5827 /* Obtain the field relocated by RELOCATION.  */
5828
5829 static bfd_vma
5830 mips_elf_obtain_contents (reloc_howto_type *howto,
5831                           const Elf_Internal_Rela *relocation,
5832                           bfd *input_bfd, bfd_byte *contents)
5833 {
5834   bfd_vma x;
5835   bfd_byte *location = contents + relocation->r_offset;
5836
5837   /* Obtain the bytes.  */
5838   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5839
5840   return x;
5841 }
5842
5843 /* It has been determined that the result of the RELOCATION is the
5844    VALUE.  Use HOWTO to place VALUE into the output file at the
5845    appropriate position.  The SECTION is the section to which the
5846    relocation applies.
5847    CROSS_MODE_JUMP_P is true if the relocation field
5848    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5849
5850    Returns FALSE if anything goes wrong.  */
5851
5852 static bfd_boolean
5853 mips_elf_perform_relocation (struct bfd_link_info *info,
5854                              reloc_howto_type *howto,
5855                              const Elf_Internal_Rela *relocation,
5856                              bfd_vma value, bfd *input_bfd,
5857                              asection *input_section, bfd_byte *contents,
5858                              bfd_boolean cross_mode_jump_p)
5859 {
5860   bfd_vma x;
5861   bfd_byte *location;
5862   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5863
5864   /* Figure out where the relocation is occurring.  */
5865   location = contents + relocation->r_offset;
5866
5867   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5868
5869   /* Obtain the current value.  */
5870   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5871
5872   /* Clear the field we are setting.  */
5873   x &= ~howto->dst_mask;
5874
5875   /* Set the field.  */
5876   x |= (value & howto->dst_mask);
5877
5878   /* If required, turn JAL into JALX.  */
5879   if (cross_mode_jump_p && jal_reloc_p (r_type))
5880     {
5881       bfd_boolean ok;
5882       bfd_vma opcode = x >> 26;
5883       bfd_vma jalx_opcode;
5884
5885       /* Check to see if the opcode is already JAL or JALX.  */
5886       if (r_type == R_MIPS16_26)
5887         {
5888           ok = ((opcode == 0x6) || (opcode == 0x7));
5889           jalx_opcode = 0x7;
5890         }
5891       else if (r_type == R_MICROMIPS_26_S1)
5892         {
5893           ok = ((opcode == 0x3d) || (opcode == 0x3c));
5894           jalx_opcode = 0x3c;
5895         }
5896       else
5897         {
5898           ok = ((opcode == 0x3) || (opcode == 0x1d));
5899           jalx_opcode = 0x1d;
5900         }
5901
5902       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
5903          convert J or JALS to JALX.  */
5904       if (!ok)
5905         {
5906           (*_bfd_error_handler)
5907             (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
5908              input_bfd,
5909              input_section,
5910              (unsigned long) relocation->r_offset);
5911           bfd_set_error (bfd_error_bad_value);
5912           return FALSE;
5913         }
5914
5915       /* Make this the JALX opcode.  */
5916       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
5917     }
5918
5919   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
5920      range.  */
5921   if (!info->relocatable
5922       && !cross_mode_jump_p
5923       && ((JAL_TO_BAL_P (input_bfd)
5924            && r_type == R_MIPS_26
5925            && (x >> 26) == 0x3)         /* jal addr */
5926           || (JALR_TO_BAL_P (input_bfd)
5927               && r_type == R_MIPS_JALR
5928               && x == 0x0320f809)       /* jalr t9 */
5929           || (JR_TO_B_P (input_bfd)
5930               && r_type == R_MIPS_JALR
5931               && x == 0x03200008)))     /* jr t9 */
5932     {
5933       bfd_vma addr;
5934       bfd_vma dest;
5935       bfd_signed_vma off;
5936
5937       addr = (input_section->output_section->vma
5938               + input_section->output_offset
5939               + relocation->r_offset
5940               + 4);
5941       if (r_type == R_MIPS_26)
5942         dest = (value << 2) | ((addr >> 28) << 28);
5943       else
5944         dest = value;
5945       off = dest - addr;
5946       if (off <= 0x1ffff && off >= -0x20000)
5947         {
5948           if (x == 0x03200008)  /* jr t9 */
5949             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
5950           else
5951             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
5952         }
5953     }
5954
5955   /* Put the value into the output.  */
5956   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
5957
5958   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
5959                                location);
5960
5961   return TRUE;
5962 }
5963 \f
5964 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
5965    is the original relocation, which is now being transformed into a
5966    dynamic relocation.  The ADDENDP is adjusted if necessary; the
5967    caller should store the result in place of the original addend.  */
5968
5969 static bfd_boolean
5970 mips_elf_create_dynamic_relocation (bfd *output_bfd,
5971                                     struct bfd_link_info *info,
5972                                     const Elf_Internal_Rela *rel,
5973                                     struct mips_elf_link_hash_entry *h,
5974                                     asection *sec, bfd_vma symbol,
5975                                     bfd_vma *addendp, asection *input_section)
5976 {
5977   Elf_Internal_Rela outrel[3];
5978   asection *sreloc;
5979   bfd *dynobj;
5980   int r_type;
5981   long indx;
5982   bfd_boolean defined_p;
5983   struct mips_elf_link_hash_table *htab;
5984
5985   htab = mips_elf_hash_table (info);
5986   BFD_ASSERT (htab != NULL);
5987
5988   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
5989   dynobj = elf_hash_table (info)->dynobj;
5990   sreloc = mips_elf_rel_dyn_section (info, FALSE);
5991   BFD_ASSERT (sreloc != NULL);
5992   BFD_ASSERT (sreloc->contents != NULL);
5993   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
5994               < sreloc->size);
5995
5996   outrel[0].r_offset =
5997     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
5998   if (ABI_64_P (output_bfd))
5999     {
6000       outrel[1].r_offset =
6001         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6002       outrel[2].r_offset =
6003         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6004     }
6005
6006   if (outrel[0].r_offset == MINUS_ONE)
6007     /* The relocation field has been deleted.  */
6008     return TRUE;
6009
6010   if (outrel[0].r_offset == MINUS_TWO)
6011     {
6012       /* The relocation field has been converted into a relative value of
6013          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6014          the field to be fully relocated, so add in the symbol's value.  */
6015       *addendp += symbol;
6016       return TRUE;
6017     }
6018
6019   /* We must now calculate the dynamic symbol table index to use
6020      in the relocation.  */
6021   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6022     {
6023       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6024       indx = h->root.dynindx;
6025       if (SGI_COMPAT (output_bfd))
6026         defined_p = h->root.def_regular;
6027       else
6028         /* ??? glibc's ld.so just adds the final GOT entry to the
6029            relocation field.  It therefore treats relocs against
6030            defined symbols in the same way as relocs against
6031            undefined symbols.  */
6032         defined_p = FALSE;
6033     }
6034   else
6035     {
6036       if (sec != NULL && bfd_is_abs_section (sec))
6037         indx = 0;
6038       else if (sec == NULL || sec->owner == NULL)
6039         {
6040           bfd_set_error (bfd_error_bad_value);
6041           return FALSE;
6042         }
6043       else
6044         {
6045           indx = elf_section_data (sec->output_section)->dynindx;
6046           if (indx == 0)
6047             {
6048               asection *osec = htab->root.text_index_section;
6049               indx = elf_section_data (osec)->dynindx;
6050             }
6051           if (indx == 0)
6052             abort ();
6053         }
6054
6055       /* Instead of generating a relocation using the section
6056          symbol, we may as well make it a fully relative
6057          relocation.  We want to avoid generating relocations to
6058          local symbols because we used to generate them
6059          incorrectly, without adding the original symbol value,
6060          which is mandated by the ABI for section symbols.  In
6061          order to give dynamic loaders and applications time to
6062          phase out the incorrect use, we refrain from emitting
6063          section-relative relocations.  It's not like they're
6064          useful, after all.  This should be a bit more efficient
6065          as well.  */
6066       /* ??? Although this behavior is compatible with glibc's ld.so,
6067          the ABI says that relocations against STN_UNDEF should have
6068          a symbol value of 0.  Irix rld honors this, so relocations
6069          against STN_UNDEF have no effect.  */
6070       if (!SGI_COMPAT (output_bfd))
6071         indx = 0;
6072       defined_p = TRUE;
6073     }
6074
6075   /* If the relocation was previously an absolute relocation and
6076      this symbol will not be referred to by the relocation, we must
6077      adjust it by the value we give it in the dynamic symbol table.
6078      Otherwise leave the job up to the dynamic linker.  */
6079   if (defined_p && r_type != R_MIPS_REL32)
6080     *addendp += symbol;
6081
6082   if (htab->is_vxworks)
6083     /* VxWorks uses non-relative relocations for this.  */
6084     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6085   else
6086     /* The relocation is always an REL32 relocation because we don't
6087        know where the shared library will wind up at load-time.  */
6088     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6089                                    R_MIPS_REL32);
6090
6091   /* For strict adherence to the ABI specification, we should
6092      generate a R_MIPS_64 relocation record by itself before the
6093      _REL32/_64 record as well, such that the addend is read in as
6094      a 64-bit value (REL32 is a 32-bit relocation, after all).
6095      However, since none of the existing ELF64 MIPS dynamic
6096      loaders seems to care, we don't waste space with these
6097      artificial relocations.  If this turns out to not be true,
6098      mips_elf_allocate_dynamic_relocation() should be tweaked so
6099      as to make room for a pair of dynamic relocations per
6100      invocation if ABI_64_P, and here we should generate an
6101      additional relocation record with R_MIPS_64 by itself for a
6102      NULL symbol before this relocation record.  */
6103   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6104                                  ABI_64_P (output_bfd)
6105                                  ? R_MIPS_64
6106                                  : R_MIPS_NONE);
6107   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6108
6109   /* Adjust the output offset of the relocation to reference the
6110      correct location in the output file.  */
6111   outrel[0].r_offset += (input_section->output_section->vma
6112                          + input_section->output_offset);
6113   outrel[1].r_offset += (input_section->output_section->vma
6114                          + input_section->output_offset);
6115   outrel[2].r_offset += (input_section->output_section->vma
6116                          + input_section->output_offset);
6117
6118   /* Put the relocation back out.  We have to use the special
6119      relocation outputter in the 64-bit case since the 64-bit
6120      relocation format is non-standard.  */
6121   if (ABI_64_P (output_bfd))
6122     {
6123       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6124         (output_bfd, &outrel[0],
6125          (sreloc->contents
6126           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6127     }
6128   else if (htab->is_vxworks)
6129     {
6130       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6131       outrel[0].r_addend = *addendp;
6132       bfd_elf32_swap_reloca_out
6133         (output_bfd, &outrel[0],
6134          (sreloc->contents
6135           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6136     }
6137   else
6138     bfd_elf32_swap_reloc_out
6139       (output_bfd, &outrel[0],
6140        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6141
6142   /* We've now added another relocation.  */
6143   ++sreloc->reloc_count;
6144
6145   /* Make sure the output section is writable.  The dynamic linker
6146      will be writing to it.  */
6147   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6148     |= SHF_WRITE;
6149
6150   /* On IRIX5, make an entry of compact relocation info.  */
6151   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6152     {
6153       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6154       bfd_byte *cr;
6155
6156       if (scpt)
6157         {
6158           Elf32_crinfo cptrel;
6159
6160           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6161           cptrel.vaddr = (rel->r_offset
6162                           + input_section->output_section->vma
6163                           + input_section->output_offset);
6164           if (r_type == R_MIPS_REL32)
6165             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6166           else
6167             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6168           mips_elf_set_cr_dist2to (cptrel, 0);
6169           cptrel.konst = *addendp;
6170
6171           cr = (scpt->contents
6172                 + sizeof (Elf32_External_compact_rel));
6173           mips_elf_set_cr_relvaddr (cptrel, 0);
6174           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6175                                      ((Elf32_External_crinfo *) cr
6176                                       + scpt->reloc_count));
6177           ++scpt->reloc_count;
6178         }
6179     }
6180
6181   /* If we've written this relocation for a readonly section,
6182      we need to set DF_TEXTREL again, so that we do not delete the
6183      DT_TEXTREL tag.  */
6184   if (MIPS_ELF_READONLY_SECTION (input_section))
6185     info->flags |= DF_TEXTREL;
6186
6187   return TRUE;
6188 }
6189 \f
6190 /* Return the MACH for a MIPS e_flags value.  */
6191
6192 unsigned long
6193 _bfd_elf_mips_mach (flagword flags)
6194 {
6195   switch (flags & EF_MIPS_MACH)
6196     {
6197     case E_MIPS_MACH_3900:
6198       return bfd_mach_mips3900;
6199
6200     case E_MIPS_MACH_4010:
6201       return bfd_mach_mips4010;
6202
6203     case E_MIPS_MACH_4100:
6204       return bfd_mach_mips4100;
6205
6206     case E_MIPS_MACH_4111:
6207       return bfd_mach_mips4111;
6208
6209     case E_MIPS_MACH_4120:
6210       return bfd_mach_mips4120;
6211
6212     case E_MIPS_MACH_4650:
6213       return bfd_mach_mips4650;
6214
6215     case E_MIPS_MACH_5400:
6216       return bfd_mach_mips5400;
6217
6218     case E_MIPS_MACH_5500:
6219       return bfd_mach_mips5500;
6220
6221     case E_MIPS_MACH_5900:
6222       return bfd_mach_mips5900;
6223
6224     case E_MIPS_MACH_9000:
6225       return bfd_mach_mips9000;
6226
6227     case E_MIPS_MACH_SB1:
6228       return bfd_mach_mips_sb1;
6229
6230     case E_MIPS_MACH_LS2E:
6231       return bfd_mach_mips_loongson_2e;
6232
6233     case E_MIPS_MACH_LS2F:
6234       return bfd_mach_mips_loongson_2f;
6235
6236     case E_MIPS_MACH_LS3A:
6237       return bfd_mach_mips_loongson_3a;
6238
6239     case E_MIPS_MACH_OCTEON2:
6240       return bfd_mach_mips_octeon2;
6241
6242     case E_MIPS_MACH_OCTEON:
6243       return bfd_mach_mips_octeon;
6244
6245     case E_MIPS_MACH_XLR:
6246       return bfd_mach_mips_xlr;
6247
6248     default:
6249       switch (flags & EF_MIPS_ARCH)
6250         {
6251         default:
6252         case E_MIPS_ARCH_1:
6253           return bfd_mach_mips3000;
6254
6255         case E_MIPS_ARCH_2:
6256           return bfd_mach_mips6000;
6257
6258         case E_MIPS_ARCH_3:
6259           return bfd_mach_mips4000;
6260
6261         case E_MIPS_ARCH_4:
6262           return bfd_mach_mips8000;
6263
6264         case E_MIPS_ARCH_5:
6265           return bfd_mach_mips5;
6266
6267         case E_MIPS_ARCH_32:
6268           return bfd_mach_mipsisa32;
6269
6270         case E_MIPS_ARCH_64:
6271           return bfd_mach_mipsisa64;
6272
6273         case E_MIPS_ARCH_32R2:
6274           return bfd_mach_mipsisa32r2;
6275
6276         case E_MIPS_ARCH_64R2:
6277           return bfd_mach_mipsisa64r2;
6278         }
6279     }
6280
6281   return 0;
6282 }
6283
6284 /* Return printable name for ABI.  */
6285
6286 static INLINE char *
6287 elf_mips_abi_name (bfd *abfd)
6288 {
6289   flagword flags;
6290
6291   flags = elf_elfheader (abfd)->e_flags;
6292   switch (flags & EF_MIPS_ABI)
6293     {
6294     case 0:
6295       if (ABI_N32_P (abfd))
6296         return "N32";
6297       else if (ABI_64_P (abfd))
6298         return "64";
6299       else
6300         return "none";
6301     case E_MIPS_ABI_O32:
6302       return "O32";
6303     case E_MIPS_ABI_O64:
6304       return "O64";
6305     case E_MIPS_ABI_EABI32:
6306       return "EABI32";
6307     case E_MIPS_ABI_EABI64:
6308       return "EABI64";
6309     default:
6310       return "unknown abi";
6311     }
6312 }
6313 \f
6314 /* MIPS ELF uses two common sections.  One is the usual one, and the
6315    other is for small objects.  All the small objects are kept
6316    together, and then referenced via the gp pointer, which yields
6317    faster assembler code.  This is what we use for the small common
6318    section.  This approach is copied from ecoff.c.  */
6319 static asection mips_elf_scom_section;
6320 static asymbol mips_elf_scom_symbol;
6321 static asymbol *mips_elf_scom_symbol_ptr;
6322
6323 /* MIPS ELF also uses an acommon section, which represents an
6324    allocated common symbol which may be overridden by a
6325    definition in a shared library.  */
6326 static asection mips_elf_acom_section;
6327 static asymbol mips_elf_acom_symbol;
6328 static asymbol *mips_elf_acom_symbol_ptr;
6329
6330 /* This is used for both the 32-bit and the 64-bit ABI.  */
6331
6332 void
6333 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6334 {
6335   elf_symbol_type *elfsym;
6336
6337   /* Handle the special MIPS section numbers that a symbol may use.  */
6338   elfsym = (elf_symbol_type *) asym;
6339   switch (elfsym->internal_elf_sym.st_shndx)
6340     {
6341     case SHN_MIPS_ACOMMON:
6342       /* This section is used in a dynamically linked executable file.
6343          It is an allocated common section.  The dynamic linker can
6344          either resolve these symbols to something in a shared
6345          library, or it can just leave them here.  For our purposes,
6346          we can consider these symbols to be in a new section.  */
6347       if (mips_elf_acom_section.name == NULL)
6348         {
6349           /* Initialize the acommon section.  */
6350           mips_elf_acom_section.name = ".acommon";
6351           mips_elf_acom_section.flags = SEC_ALLOC;
6352           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6353           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6354           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6355           mips_elf_acom_symbol.name = ".acommon";
6356           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6357           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6358           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6359         }
6360       asym->section = &mips_elf_acom_section;
6361       break;
6362
6363     case SHN_COMMON:
6364       /* Common symbols less than the GP size are automatically
6365          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6366       if (asym->value > elf_gp_size (abfd)
6367           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6368           || IRIX_COMPAT (abfd) == ict_irix6)
6369         break;
6370       /* Fall through.  */
6371     case SHN_MIPS_SCOMMON:
6372       if (mips_elf_scom_section.name == NULL)
6373         {
6374           /* Initialize the small common section.  */
6375           mips_elf_scom_section.name = ".scommon";
6376           mips_elf_scom_section.flags = SEC_IS_COMMON;
6377           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6378           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6379           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6380           mips_elf_scom_symbol.name = ".scommon";
6381           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6382           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6383           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6384         }
6385       asym->section = &mips_elf_scom_section;
6386       asym->value = elfsym->internal_elf_sym.st_size;
6387       break;
6388
6389     case SHN_MIPS_SUNDEFINED:
6390       asym->section = bfd_und_section_ptr;
6391       break;
6392
6393     case SHN_MIPS_TEXT:
6394       {
6395         asection *section = bfd_get_section_by_name (abfd, ".text");
6396
6397         if (section != NULL)
6398           {
6399             asym->section = section;
6400             /* MIPS_TEXT is a bit special, the address is not an offset
6401                to the base of the .text section.  So substract the section
6402                base address to make it an offset.  */
6403             asym->value -= section->vma;
6404           }
6405       }
6406       break;
6407
6408     case SHN_MIPS_DATA:
6409       {
6410         asection *section = bfd_get_section_by_name (abfd, ".data");
6411
6412         if (section != NULL)
6413           {
6414             asym->section = section;
6415             /* MIPS_DATA is a bit special, the address is not an offset
6416                to the base of the .data section.  So substract the section
6417                base address to make it an offset.  */
6418             asym->value -= section->vma;
6419           }
6420       }
6421       break;
6422     }
6423
6424   /* If this is an odd-valued function symbol, assume it's a MIPS16
6425      or microMIPS one.  */
6426   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6427       && (asym->value & 1) != 0)
6428     {
6429       asym->value--;
6430       if (MICROMIPS_P (abfd))
6431         elfsym->internal_elf_sym.st_other
6432           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6433       else
6434         elfsym->internal_elf_sym.st_other
6435           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6436     }
6437 }
6438 \f
6439 /* Implement elf_backend_eh_frame_address_size.  This differs from
6440    the default in the way it handles EABI64.
6441
6442    EABI64 was originally specified as an LP64 ABI, and that is what
6443    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6444    historically accepted the combination of -mabi=eabi and -mlong32,
6445    and this ILP32 variation has become semi-official over time.
6446    Both forms use elf32 and have pointer-sized FDE addresses.
6447
6448    If an EABI object was generated by GCC 4.0 or above, it will have
6449    an empty .gcc_compiled_longXX section, where XX is the size of longs
6450    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6451    have no special marking to distinguish them from LP64 objects.
6452
6453    We don't want users of the official LP64 ABI to be punished for the
6454    existence of the ILP32 variant, but at the same time, we don't want
6455    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6456    We therefore take the following approach:
6457
6458       - If ABFD contains a .gcc_compiled_longXX section, use it to
6459         determine the pointer size.
6460
6461       - Otherwise check the type of the first relocation.  Assume that
6462         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6463
6464       - Otherwise punt.
6465
6466    The second check is enough to detect LP64 objects generated by pre-4.0
6467    compilers because, in the kind of output generated by those compilers,
6468    the first relocation will be associated with either a CIE personality
6469    routine or an FDE start address.  Furthermore, the compilers never
6470    used a special (non-pointer) encoding for this ABI.
6471
6472    Checking the relocation type should also be safe because there is no
6473    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6474    did so.  */
6475
6476 unsigned int
6477 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6478 {
6479   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6480     return 8;
6481   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6482     {
6483       bfd_boolean long32_p, long64_p;
6484
6485       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6486       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6487       if (long32_p && long64_p)
6488         return 0;
6489       if (long32_p)
6490         return 4;
6491       if (long64_p)
6492         return 8;
6493
6494       if (sec->reloc_count > 0
6495           && elf_section_data (sec)->relocs != NULL
6496           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6497               == R_MIPS_64))
6498         return 8;
6499
6500       return 0;
6501     }
6502   return 4;
6503 }
6504 \f
6505 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6506    relocations against two unnamed section symbols to resolve to the
6507    same address.  For example, if we have code like:
6508
6509         lw      $4,%got_disp(.data)($gp)
6510         lw      $25,%got_disp(.text)($gp)
6511         jalr    $25
6512
6513    then the linker will resolve both relocations to .data and the program
6514    will jump there rather than to .text.
6515
6516    We can work around this problem by giving names to local section symbols.
6517    This is also what the MIPSpro tools do.  */
6518
6519 bfd_boolean
6520 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6521 {
6522   return SGI_COMPAT (abfd);
6523 }
6524 \f
6525 /* Work over a section just before writing it out.  This routine is
6526    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6527    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6528    a better way.  */
6529
6530 bfd_boolean
6531 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6532 {
6533   if (hdr->sh_type == SHT_MIPS_REGINFO
6534       && hdr->sh_size > 0)
6535     {
6536       bfd_byte buf[4];
6537
6538       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6539       BFD_ASSERT (hdr->contents == NULL);
6540
6541       if (bfd_seek (abfd,
6542                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6543                     SEEK_SET) != 0)
6544         return FALSE;
6545       H_PUT_32 (abfd, elf_gp (abfd), buf);
6546       if (bfd_bwrite (buf, 4, abfd) != 4)
6547         return FALSE;
6548     }
6549
6550   if (hdr->sh_type == SHT_MIPS_OPTIONS
6551       && hdr->bfd_section != NULL
6552       && mips_elf_section_data (hdr->bfd_section) != NULL
6553       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6554     {
6555       bfd_byte *contents, *l, *lend;
6556
6557       /* We stored the section contents in the tdata field in the
6558          set_section_contents routine.  We save the section contents
6559          so that we don't have to read them again.
6560          At this point we know that elf_gp is set, so we can look
6561          through the section contents to see if there is an
6562          ODK_REGINFO structure.  */
6563
6564       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6565       l = contents;
6566       lend = contents + hdr->sh_size;
6567       while (l + sizeof (Elf_External_Options) <= lend)
6568         {
6569           Elf_Internal_Options intopt;
6570
6571           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6572                                         &intopt);
6573           if (intopt.size < sizeof (Elf_External_Options))
6574             {
6575               (*_bfd_error_handler)
6576                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6577                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6578               break;
6579             }
6580           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6581             {
6582               bfd_byte buf[8];
6583
6584               if (bfd_seek (abfd,
6585                             (hdr->sh_offset
6586                              + (l - contents)
6587                              + sizeof (Elf_External_Options)
6588                              + (sizeof (Elf64_External_RegInfo) - 8)),
6589                              SEEK_SET) != 0)
6590                 return FALSE;
6591               H_PUT_64 (abfd, elf_gp (abfd), buf);
6592               if (bfd_bwrite (buf, 8, abfd) != 8)
6593                 return FALSE;
6594             }
6595           else if (intopt.kind == ODK_REGINFO)
6596             {
6597               bfd_byte buf[4];
6598
6599               if (bfd_seek (abfd,
6600                             (hdr->sh_offset
6601                              + (l - contents)
6602                              + sizeof (Elf_External_Options)
6603                              + (sizeof (Elf32_External_RegInfo) - 4)),
6604                             SEEK_SET) != 0)
6605                 return FALSE;
6606               H_PUT_32 (abfd, elf_gp (abfd), buf);
6607               if (bfd_bwrite (buf, 4, abfd) != 4)
6608                 return FALSE;
6609             }
6610           l += intopt.size;
6611         }
6612     }
6613
6614   if (hdr->bfd_section != NULL)
6615     {
6616       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6617
6618       /* .sbss is not handled specially here because the GNU/Linux
6619          prelinker can convert .sbss from NOBITS to PROGBITS and
6620          changing it back to NOBITS breaks the binary.  The entry in
6621          _bfd_mips_elf_special_sections will ensure the correct flags
6622          are set on .sbss if BFD creates it without reading it from an
6623          input file, and without special handling here the flags set
6624          on it in an input file will be followed.  */
6625       if (strcmp (name, ".sdata") == 0
6626           || strcmp (name, ".lit8") == 0
6627           || strcmp (name, ".lit4") == 0)
6628         {
6629           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6630           hdr->sh_type = SHT_PROGBITS;
6631         }
6632       else if (strcmp (name, ".srdata") == 0)
6633         {
6634           hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6635           hdr->sh_type = SHT_PROGBITS;
6636         }
6637       else if (strcmp (name, ".compact_rel") == 0)
6638         {
6639           hdr->sh_flags = 0;
6640           hdr->sh_type = SHT_PROGBITS;
6641         }
6642       else if (strcmp (name, ".rtproc") == 0)
6643         {
6644           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6645             {
6646               unsigned int adjust;
6647
6648               adjust = hdr->sh_size % hdr->sh_addralign;
6649               if (adjust != 0)
6650                 hdr->sh_size += hdr->sh_addralign - adjust;
6651             }
6652         }
6653     }
6654
6655   return TRUE;
6656 }
6657
6658 /* Handle a MIPS specific section when reading an object file.  This
6659    is called when elfcode.h finds a section with an unknown type.
6660    This routine supports both the 32-bit and 64-bit ELF ABI.
6661
6662    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6663    how to.  */
6664
6665 bfd_boolean
6666 _bfd_mips_elf_section_from_shdr (bfd *abfd,
6667                                  Elf_Internal_Shdr *hdr,
6668                                  const char *name,
6669                                  int shindex)
6670 {
6671   flagword flags = 0;
6672
6673   /* There ought to be a place to keep ELF backend specific flags, but
6674      at the moment there isn't one.  We just keep track of the
6675      sections by their name, instead.  Fortunately, the ABI gives
6676      suggested names for all the MIPS specific sections, so we will
6677      probably get away with this.  */
6678   switch (hdr->sh_type)
6679     {
6680     case SHT_MIPS_LIBLIST:
6681       if (strcmp (name, ".liblist") != 0)
6682         return FALSE;
6683       break;
6684     case SHT_MIPS_MSYM:
6685       if (strcmp (name, ".msym") != 0)
6686         return FALSE;
6687       break;
6688     case SHT_MIPS_CONFLICT:
6689       if (strcmp (name, ".conflict") != 0)
6690         return FALSE;
6691       break;
6692     case SHT_MIPS_GPTAB:
6693       if (! CONST_STRNEQ (name, ".gptab."))
6694         return FALSE;
6695       break;
6696     case SHT_MIPS_UCODE:
6697       if (strcmp (name, ".ucode") != 0)
6698         return FALSE;
6699       break;
6700     case SHT_MIPS_DEBUG:
6701       if (strcmp (name, ".mdebug") != 0)
6702         return FALSE;
6703       flags = SEC_DEBUGGING;
6704       break;
6705     case SHT_MIPS_REGINFO:
6706       if (strcmp (name, ".reginfo") != 0
6707           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
6708         return FALSE;
6709       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6710       break;
6711     case SHT_MIPS_IFACE:
6712       if (strcmp (name, ".MIPS.interfaces") != 0)
6713         return FALSE;
6714       break;
6715     case SHT_MIPS_CONTENT:
6716       if (! CONST_STRNEQ (name, ".MIPS.content"))
6717         return FALSE;
6718       break;
6719     case SHT_MIPS_OPTIONS:
6720       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6721         return FALSE;
6722       break;
6723     case SHT_MIPS_DWARF:
6724       if (! CONST_STRNEQ (name, ".debug_")
6725           && ! CONST_STRNEQ (name, ".zdebug_"))
6726         return FALSE;
6727       break;
6728     case SHT_MIPS_SYMBOL_LIB:
6729       if (strcmp (name, ".MIPS.symlib") != 0)
6730         return FALSE;
6731       break;
6732     case SHT_MIPS_EVENTS:
6733       if (! CONST_STRNEQ (name, ".MIPS.events")
6734           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
6735         return FALSE;
6736       break;
6737     default:
6738       break;
6739     }
6740
6741   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
6742     return FALSE;
6743
6744   if (flags)
6745     {
6746       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6747                                    (bfd_get_section_flags (abfd,
6748                                                            hdr->bfd_section)
6749                                     | flags)))
6750         return FALSE;
6751     }
6752
6753   /* FIXME: We should record sh_info for a .gptab section.  */
6754
6755   /* For a .reginfo section, set the gp value in the tdata information
6756      from the contents of this section.  We need the gp value while
6757      processing relocs, so we just get it now.  The .reginfo section
6758      is not used in the 64-bit MIPS ELF ABI.  */
6759   if (hdr->sh_type == SHT_MIPS_REGINFO)
6760     {
6761       Elf32_External_RegInfo ext;
6762       Elf32_RegInfo s;
6763
6764       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6765                                       &ext, 0, sizeof ext))
6766         return FALSE;
6767       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6768       elf_gp (abfd) = s.ri_gp_value;
6769     }
6770
6771   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6772      set the gp value based on what we find.  We may see both
6773      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6774      they should agree.  */
6775   if (hdr->sh_type == SHT_MIPS_OPTIONS)
6776     {
6777       bfd_byte *contents, *l, *lend;
6778
6779       contents = bfd_malloc (hdr->sh_size);
6780       if (contents == NULL)
6781         return FALSE;
6782       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
6783                                       0, hdr->sh_size))
6784         {
6785           free (contents);
6786           return FALSE;
6787         }
6788       l = contents;
6789       lend = contents + hdr->sh_size;
6790       while (l + sizeof (Elf_External_Options) <= lend)
6791         {
6792           Elf_Internal_Options intopt;
6793
6794           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6795                                         &intopt);
6796           if (intopt.size < sizeof (Elf_External_Options))
6797             {
6798               (*_bfd_error_handler)
6799                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6800                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6801               break;
6802             }
6803           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6804             {
6805               Elf64_Internal_RegInfo intreg;
6806
6807               bfd_mips_elf64_swap_reginfo_in
6808                 (abfd,
6809                  ((Elf64_External_RegInfo *)
6810                   (l + sizeof (Elf_External_Options))),
6811                  &intreg);
6812               elf_gp (abfd) = intreg.ri_gp_value;
6813             }
6814           else if (intopt.kind == ODK_REGINFO)
6815             {
6816               Elf32_RegInfo intreg;
6817
6818               bfd_mips_elf32_swap_reginfo_in
6819                 (abfd,
6820                  ((Elf32_External_RegInfo *)
6821                   (l + sizeof (Elf_External_Options))),
6822                  &intreg);
6823               elf_gp (abfd) = intreg.ri_gp_value;
6824             }
6825           l += intopt.size;
6826         }
6827       free (contents);
6828     }
6829
6830   return TRUE;
6831 }
6832
6833 /* Set the correct type for a MIPS ELF section.  We do this by the
6834    section name, which is a hack, but ought to work.  This routine is
6835    used by both the 32-bit and the 64-bit ABI.  */
6836
6837 bfd_boolean
6838 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
6839 {
6840   const char *name = bfd_get_section_name (abfd, sec);
6841
6842   if (strcmp (name, ".liblist") == 0)
6843     {
6844       hdr->sh_type = SHT_MIPS_LIBLIST;
6845       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
6846       /* The sh_link field is set in final_write_processing.  */
6847     }
6848   else if (strcmp (name, ".conflict") == 0)
6849     hdr->sh_type = SHT_MIPS_CONFLICT;
6850   else if (CONST_STRNEQ (name, ".gptab."))
6851     {
6852       hdr->sh_type = SHT_MIPS_GPTAB;
6853       hdr->sh_entsize = sizeof (Elf32_External_gptab);
6854       /* The sh_info field is set in final_write_processing.  */
6855     }
6856   else if (strcmp (name, ".ucode") == 0)
6857     hdr->sh_type = SHT_MIPS_UCODE;
6858   else if (strcmp (name, ".mdebug") == 0)
6859     {
6860       hdr->sh_type = SHT_MIPS_DEBUG;
6861       /* In a shared object on IRIX 5.3, the .mdebug section has an
6862          entsize of 0.  FIXME: Does this matter?  */
6863       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6864         hdr->sh_entsize = 0;
6865       else
6866         hdr->sh_entsize = 1;
6867     }
6868   else if (strcmp (name, ".reginfo") == 0)
6869     {
6870       hdr->sh_type = SHT_MIPS_REGINFO;
6871       /* In a shared object on IRIX 5.3, the .reginfo section has an
6872          entsize of 0x18.  FIXME: Does this matter?  */
6873       if (SGI_COMPAT (abfd))
6874         {
6875           if ((abfd->flags & DYNAMIC) != 0)
6876             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6877           else
6878             hdr->sh_entsize = 1;
6879         }
6880       else
6881         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6882     }
6883   else if (SGI_COMPAT (abfd)
6884            && (strcmp (name, ".hash") == 0
6885                || strcmp (name, ".dynamic") == 0
6886                || strcmp (name, ".dynstr") == 0))
6887     {
6888       if (SGI_COMPAT (abfd))
6889         hdr->sh_entsize = 0;
6890 #if 0
6891       /* This isn't how the IRIX6 linker behaves.  */
6892       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6893 #endif
6894     }
6895   else if (strcmp (name, ".got") == 0
6896            || strcmp (name, ".srdata") == 0
6897            || strcmp (name, ".sdata") == 0
6898            || strcmp (name, ".sbss") == 0
6899            || strcmp (name, ".lit4") == 0
6900            || strcmp (name, ".lit8") == 0)
6901     hdr->sh_flags |= SHF_MIPS_GPREL;
6902   else if (strcmp (name, ".MIPS.interfaces") == 0)
6903     {
6904       hdr->sh_type = SHT_MIPS_IFACE;
6905       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6906     }
6907   else if (CONST_STRNEQ (name, ".MIPS.content"))
6908     {
6909       hdr->sh_type = SHT_MIPS_CONTENT;
6910       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6911       /* The sh_info field is set in final_write_processing.  */
6912     }
6913   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6914     {
6915       hdr->sh_type = SHT_MIPS_OPTIONS;
6916       hdr->sh_entsize = 1;
6917       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6918     }
6919   else if (CONST_STRNEQ (name, ".debug_")
6920            || CONST_STRNEQ (name, ".zdebug_"))
6921     {
6922       hdr->sh_type = SHT_MIPS_DWARF;
6923
6924       /* Irix facilities such as libexc expect a single .debug_frame
6925          per executable, the system ones have NOSTRIP set and the linker
6926          doesn't merge sections with different flags so ...  */
6927       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
6928         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6929     }
6930   else if (strcmp (name, ".MIPS.symlib") == 0)
6931     {
6932       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
6933       /* The sh_link and sh_info fields are set in
6934          final_write_processing.  */
6935     }
6936   else if (CONST_STRNEQ (name, ".MIPS.events")
6937            || CONST_STRNEQ (name, ".MIPS.post_rel"))
6938     {
6939       hdr->sh_type = SHT_MIPS_EVENTS;
6940       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6941       /* The sh_link field is set in final_write_processing.  */
6942     }
6943   else if (strcmp (name, ".msym") == 0)
6944     {
6945       hdr->sh_type = SHT_MIPS_MSYM;
6946       hdr->sh_flags |= SHF_ALLOC;
6947       hdr->sh_entsize = 8;
6948     }
6949
6950   /* The generic elf_fake_sections will set up REL_HDR using the default
6951    kind of relocations.  We used to set up a second header for the
6952    non-default kind of relocations here, but only NewABI would use
6953    these, and the IRIX ld doesn't like resulting empty RELA sections.
6954    Thus we create those header only on demand now.  */
6955
6956   return TRUE;
6957 }
6958
6959 /* Given a BFD section, try to locate the corresponding ELF section
6960    index.  This is used by both the 32-bit and the 64-bit ABI.
6961    Actually, it's not clear to me that the 64-bit ABI supports these,
6962    but for non-PIC objects we will certainly want support for at least
6963    the .scommon section.  */
6964
6965 bfd_boolean
6966 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
6967                                         asection *sec, int *retval)
6968 {
6969   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
6970     {
6971       *retval = SHN_MIPS_SCOMMON;
6972       return TRUE;
6973     }
6974   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
6975     {
6976       *retval = SHN_MIPS_ACOMMON;
6977       return TRUE;
6978     }
6979   return FALSE;
6980 }
6981 \f
6982 /* Hook called by the linker routine which adds symbols from an object
6983    file.  We must handle the special MIPS section numbers here.  */
6984
6985 bfd_boolean
6986 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
6987                                Elf_Internal_Sym *sym, const char **namep,
6988                                flagword *flagsp ATTRIBUTE_UNUSED,
6989                                asection **secp, bfd_vma *valp)
6990 {
6991   if (SGI_COMPAT (abfd)
6992       && (abfd->flags & DYNAMIC) != 0
6993       && strcmp (*namep, "_rld_new_interface") == 0)
6994     {
6995       /* Skip IRIX5 rld entry name.  */
6996       *namep = NULL;
6997       return TRUE;
6998     }
6999
7000   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7001      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7002      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7003      a magic symbol resolved by the linker, we ignore this bogus definition
7004      of _gp_disp.  New ABI objects do not suffer from this problem so this
7005      is not done for them. */
7006   if (!NEWABI_P(abfd)
7007       && (sym->st_shndx == SHN_ABS)
7008       && (strcmp (*namep, "_gp_disp") == 0))
7009     {
7010       *namep = NULL;
7011       return TRUE;
7012     }
7013
7014   switch (sym->st_shndx)
7015     {
7016     case SHN_COMMON:
7017       /* Common symbols less than the GP size are automatically
7018          treated as SHN_MIPS_SCOMMON symbols.  */
7019       if (sym->st_size > elf_gp_size (abfd)
7020           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7021           || IRIX_COMPAT (abfd) == ict_irix6)
7022         break;
7023       /* Fall through.  */
7024     case SHN_MIPS_SCOMMON:
7025       *secp = bfd_make_section_old_way (abfd, ".scommon");
7026       (*secp)->flags |= SEC_IS_COMMON;
7027       *valp = sym->st_size;
7028       break;
7029
7030     case SHN_MIPS_TEXT:
7031       /* This section is used in a shared object.  */
7032       if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7033         {
7034           asymbol *elf_text_symbol;
7035           asection *elf_text_section;
7036           bfd_size_type amt = sizeof (asection);
7037
7038           elf_text_section = bfd_zalloc (abfd, amt);
7039           if (elf_text_section == NULL)
7040             return FALSE;
7041
7042           amt = sizeof (asymbol);
7043           elf_text_symbol = bfd_zalloc (abfd, amt);
7044           if (elf_text_symbol == NULL)
7045             return FALSE;
7046
7047           /* Initialize the section.  */
7048
7049           mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7050           mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7051
7052           elf_text_section->symbol = elf_text_symbol;
7053           elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7054
7055           elf_text_section->name = ".text";
7056           elf_text_section->flags = SEC_NO_FLAGS;
7057           elf_text_section->output_section = NULL;
7058           elf_text_section->owner = abfd;
7059           elf_text_symbol->name = ".text";
7060           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7061           elf_text_symbol->section = elf_text_section;
7062         }
7063       /* This code used to do *secp = bfd_und_section_ptr if
7064          info->shared.  I don't know why, and that doesn't make sense,
7065          so I took it out.  */
7066       *secp = mips_elf_tdata (abfd)->elf_text_section;
7067       break;
7068
7069     case SHN_MIPS_ACOMMON:
7070       /* Fall through. XXX Can we treat this as allocated data?  */
7071     case SHN_MIPS_DATA:
7072       /* This section is used in a shared object.  */
7073       if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7074         {
7075           asymbol *elf_data_symbol;
7076           asection *elf_data_section;
7077           bfd_size_type amt = sizeof (asection);
7078
7079           elf_data_section = bfd_zalloc (abfd, amt);
7080           if (elf_data_section == NULL)
7081             return FALSE;
7082
7083           amt = sizeof (asymbol);
7084           elf_data_symbol = bfd_zalloc (abfd, amt);
7085           if (elf_data_symbol == NULL)
7086             return FALSE;
7087
7088           /* Initialize the section.  */
7089
7090           mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7091           mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7092
7093           elf_data_section->symbol = elf_data_symbol;
7094           elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7095
7096           elf_data_section->name = ".data";
7097           elf_data_section->flags = SEC_NO_FLAGS;
7098           elf_data_section->output_section = NULL;
7099           elf_data_section->owner = abfd;
7100           elf_data_symbol->name = ".data";
7101           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7102           elf_data_symbol->section = elf_data_section;
7103         }
7104       /* This code used to do *secp = bfd_und_section_ptr if
7105          info->shared.  I don't know why, and that doesn't make sense,
7106          so I took it out.  */
7107       *secp = mips_elf_tdata (abfd)->elf_data_section;
7108       break;
7109
7110     case SHN_MIPS_SUNDEFINED:
7111       *secp = bfd_und_section_ptr;
7112       break;
7113     }
7114
7115   if (SGI_COMPAT (abfd)
7116       && ! info->shared
7117       && info->output_bfd->xvec == abfd->xvec
7118       && strcmp (*namep, "__rld_obj_head") == 0)
7119     {
7120       struct elf_link_hash_entry *h;
7121       struct bfd_link_hash_entry *bh;
7122
7123       /* Mark __rld_obj_head as dynamic.  */
7124       bh = NULL;
7125       if (! (_bfd_generic_link_add_one_symbol
7126              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7127               get_elf_backend_data (abfd)->collect, &bh)))
7128         return FALSE;
7129
7130       h = (struct elf_link_hash_entry *) bh;
7131       h->non_elf = 0;
7132       h->def_regular = 1;
7133       h->type = STT_OBJECT;
7134
7135       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7136         return FALSE;
7137
7138       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7139       mips_elf_hash_table (info)->rld_symbol = h;
7140     }
7141
7142   /* If this is a mips16 text symbol, add 1 to the value to make it
7143      odd.  This will cause something like .word SYM to come up with
7144      the right value when it is loaded into the PC.  */
7145   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7146     ++*valp;
7147
7148   return TRUE;
7149 }
7150
7151 /* This hook function is called before the linker writes out a global
7152    symbol.  We mark symbols as small common if appropriate.  This is
7153    also where we undo the increment of the value for a mips16 symbol.  */
7154
7155 int
7156 _bfd_mips_elf_link_output_symbol_hook
7157   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7158    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7159    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7160 {
7161   /* If we see a common symbol, which implies a relocatable link, then
7162      if a symbol was small common in an input file, mark it as small
7163      common in the output file.  */
7164   if (sym->st_shndx == SHN_COMMON
7165       && strcmp (input_sec->name, ".scommon") == 0)
7166     sym->st_shndx = SHN_MIPS_SCOMMON;
7167
7168   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7169     sym->st_value &= ~1;
7170
7171   return 1;
7172 }
7173 \f
7174 /* Functions for the dynamic linker.  */
7175
7176 /* Create dynamic sections when linking against a dynamic object.  */
7177
7178 bfd_boolean
7179 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7180 {
7181   struct elf_link_hash_entry *h;
7182   struct bfd_link_hash_entry *bh;
7183   flagword flags;
7184   register asection *s;
7185   const char * const *namep;
7186   struct mips_elf_link_hash_table *htab;
7187
7188   htab = mips_elf_hash_table (info);
7189   BFD_ASSERT (htab != NULL);
7190
7191   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7192            | SEC_LINKER_CREATED | SEC_READONLY);
7193
7194   /* The psABI requires a read-only .dynamic section, but the VxWorks
7195      EABI doesn't.  */
7196   if (!htab->is_vxworks)
7197     {
7198       s = bfd_get_linker_section (abfd, ".dynamic");
7199       if (s != NULL)
7200         {
7201           if (! bfd_set_section_flags (abfd, s, flags))
7202             return FALSE;
7203         }
7204     }
7205
7206   /* We need to create .got section.  */
7207   if (!mips_elf_create_got_section (abfd, info))
7208     return FALSE;
7209
7210   if (! mips_elf_rel_dyn_section (info, TRUE))
7211     return FALSE;
7212
7213   /* Create .stub section.  */
7214   s = bfd_make_section_anyway_with_flags (abfd,
7215                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7216                                           flags | SEC_CODE);
7217   if (s == NULL
7218       || ! bfd_set_section_alignment (abfd, s,
7219                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7220     return FALSE;
7221   htab->sstubs = s;
7222
7223   if (!mips_elf_hash_table (info)->use_rld_obj_head
7224       && !info->shared
7225       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7226     {
7227       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7228                                               flags &~ (flagword) SEC_READONLY);
7229       if (s == NULL
7230           || ! bfd_set_section_alignment (abfd, s,
7231                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7232         return FALSE;
7233     }
7234
7235   /* On IRIX5, we adjust add some additional symbols and change the
7236      alignments of several sections.  There is no ABI documentation
7237      indicating that this is necessary on IRIX6, nor any evidence that
7238      the linker takes such action.  */
7239   if (IRIX_COMPAT (abfd) == ict_irix5)
7240     {
7241       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7242         {
7243           bh = NULL;
7244           if (! (_bfd_generic_link_add_one_symbol
7245                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7246                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7247             return FALSE;
7248
7249           h = (struct elf_link_hash_entry *) bh;
7250           h->non_elf = 0;
7251           h->def_regular = 1;
7252           h->type = STT_SECTION;
7253
7254           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7255             return FALSE;
7256         }
7257
7258       /* We need to create a .compact_rel section.  */
7259       if (SGI_COMPAT (abfd))
7260         {
7261           if (!mips_elf_create_compact_rel_section (abfd, info))
7262             return FALSE;
7263         }
7264
7265       /* Change alignments of some sections.  */
7266       s = bfd_get_linker_section (abfd, ".hash");
7267       if (s != NULL)
7268         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7269       s = bfd_get_linker_section (abfd, ".dynsym");
7270       if (s != NULL)
7271         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7272       s = bfd_get_linker_section (abfd, ".dynstr");
7273       if (s != NULL)
7274         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7275       /* ??? */
7276       s = bfd_get_section_by_name (abfd, ".reginfo");
7277       if (s != NULL)
7278         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7279       s = bfd_get_linker_section (abfd, ".dynamic");
7280       if (s != NULL)
7281         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7282     }
7283
7284   if (!info->shared)
7285     {
7286       const char *name;
7287
7288       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7289       bh = NULL;
7290       if (!(_bfd_generic_link_add_one_symbol
7291             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7292              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7293         return FALSE;
7294
7295       h = (struct elf_link_hash_entry *) bh;
7296       h->non_elf = 0;
7297       h->def_regular = 1;
7298       h->type = STT_SECTION;
7299
7300       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7301         return FALSE;
7302
7303       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7304         {
7305           /* __rld_map is a four byte word located in the .data section
7306              and is filled in by the rtld to contain a pointer to
7307              the _r_debug structure. Its symbol value will be set in
7308              _bfd_mips_elf_finish_dynamic_symbol.  */
7309           s = bfd_get_linker_section (abfd, ".rld_map");
7310           BFD_ASSERT (s != NULL);
7311
7312           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7313           bh = NULL;
7314           if (!(_bfd_generic_link_add_one_symbol
7315                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7316                  get_elf_backend_data (abfd)->collect, &bh)))
7317             return FALSE;
7318
7319           h = (struct elf_link_hash_entry *) bh;
7320           h->non_elf = 0;
7321           h->def_regular = 1;
7322           h->type = STT_OBJECT;
7323
7324           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7325             return FALSE;
7326           mips_elf_hash_table (info)->rld_symbol = h;
7327         }
7328     }
7329
7330   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7331      Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
7332   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7333     return FALSE;
7334
7335   /* Cache the sections created above.  */
7336   htab->splt = bfd_get_linker_section (abfd, ".plt");
7337   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7338   if (htab->is_vxworks)
7339     {
7340       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7341       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7342     }
7343   else
7344     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7345   if (!htab->sdynbss
7346       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7347       || !htab->srelplt
7348       || !htab->splt)
7349     abort ();
7350
7351   if (htab->is_vxworks)
7352     {
7353       /* Do the usual VxWorks handling.  */
7354       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7355         return FALSE;
7356
7357       /* Work out the PLT sizes.  */
7358       if (info->shared)
7359         {
7360           htab->plt_header_size
7361             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7362           htab->plt_entry_size
7363             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7364         }
7365       else
7366         {
7367           htab->plt_header_size
7368             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7369           htab->plt_entry_size
7370             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7371         }
7372     }
7373   else if (!info->shared)
7374     {
7375       /* All variants of the plt0 entry are the same size.  */
7376       htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7377       htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7378     }
7379
7380   return TRUE;
7381 }
7382 \f
7383 /* Return true if relocation REL against section SEC is a REL rather than
7384    RELA relocation.  RELOCS is the first relocation in the section and
7385    ABFD is the bfd that contains SEC.  */
7386
7387 static bfd_boolean
7388 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7389                            const Elf_Internal_Rela *relocs,
7390                            const Elf_Internal_Rela *rel)
7391 {
7392   Elf_Internal_Shdr *rel_hdr;
7393   const struct elf_backend_data *bed;
7394
7395   /* To determine which flavor of relocation this is, we depend on the
7396      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7397   rel_hdr = elf_section_data (sec)->rel.hdr;
7398   if (rel_hdr == NULL)
7399     return FALSE;
7400   bed = get_elf_backend_data (abfd);
7401   return ((size_t) (rel - relocs)
7402           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7403 }
7404
7405 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7406    HOWTO is the relocation's howto and CONTENTS points to the contents
7407    of the section that REL is against.  */
7408
7409 static bfd_vma
7410 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7411                           reloc_howto_type *howto, bfd_byte *contents)
7412 {
7413   bfd_byte *location;
7414   unsigned int r_type;
7415   bfd_vma addend;
7416
7417   r_type = ELF_R_TYPE (abfd, rel->r_info);
7418   location = contents + rel->r_offset;
7419
7420   /* Get the addend, which is stored in the input file.  */
7421   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7422   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7423   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7424
7425   return addend & howto->src_mask;
7426 }
7427
7428 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7429    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7430    and update *ADDEND with the final addend.  Return true on success
7431    or false if the LO16 could not be found.  RELEND is the exclusive
7432    upper bound on the relocations for REL's section.  */
7433
7434 static bfd_boolean
7435 mips_elf_add_lo16_rel_addend (bfd *abfd,
7436                               const Elf_Internal_Rela *rel,
7437                               const Elf_Internal_Rela *relend,
7438                               bfd_byte *contents, bfd_vma *addend)
7439 {
7440   unsigned int r_type, lo16_type;
7441   const Elf_Internal_Rela *lo16_relocation;
7442   reloc_howto_type *lo16_howto;
7443   bfd_vma l;
7444
7445   r_type = ELF_R_TYPE (abfd, rel->r_info);
7446   if (mips16_reloc_p (r_type))
7447     lo16_type = R_MIPS16_LO16;
7448   else if (micromips_reloc_p (r_type))
7449     lo16_type = R_MICROMIPS_LO16;
7450   else
7451     lo16_type = R_MIPS_LO16;
7452
7453   /* The combined value is the sum of the HI16 addend, left-shifted by
7454      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7455      code does a `lui' of the HI16 value, and then an `addiu' of the
7456      LO16 value.)
7457
7458      Scan ahead to find a matching LO16 relocation.
7459
7460      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7461      be immediately following.  However, for the IRIX6 ABI, the next
7462      relocation may be a composed relocation consisting of several
7463      relocations for the same address.  In that case, the R_MIPS_LO16
7464      relocation may occur as one of these.  We permit a similar
7465      extension in general, as that is useful for GCC.
7466
7467      In some cases GCC dead code elimination removes the LO16 but keeps
7468      the corresponding HI16.  This is strictly speaking a violation of
7469      the ABI but not immediately harmful.  */
7470   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7471   if (lo16_relocation == NULL)
7472     return FALSE;
7473
7474   /* Obtain the addend kept there.  */
7475   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7476   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7477
7478   l <<= lo16_howto->rightshift;
7479   l = _bfd_mips_elf_sign_extend (l, 16);
7480
7481   *addend <<= 16;
7482   *addend += l;
7483   return TRUE;
7484 }
7485
7486 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7487    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7488    already holds the contents if it is nonull on entry.  */
7489
7490 static bfd_boolean
7491 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7492 {
7493   if (*contents)
7494     return TRUE;
7495
7496   /* Get cached copy if it exists.  */
7497   if (elf_section_data (sec)->this_hdr.contents != NULL)
7498     {
7499       *contents = elf_section_data (sec)->this_hdr.contents;
7500       return TRUE;
7501     }
7502
7503   return bfd_malloc_and_get_section (abfd, sec, contents);
7504 }
7505
7506 /* Look through the relocs for a section during the first phase, and
7507    allocate space in the global offset table.  */
7508
7509 bfd_boolean
7510 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7511                             asection *sec, const Elf_Internal_Rela *relocs)
7512 {
7513   const char *name;
7514   bfd *dynobj;
7515   Elf_Internal_Shdr *symtab_hdr;
7516   struct elf_link_hash_entry **sym_hashes;
7517   size_t extsymoff;
7518   const Elf_Internal_Rela *rel;
7519   const Elf_Internal_Rela *rel_end;
7520   asection *sreloc;
7521   const struct elf_backend_data *bed;
7522   struct mips_elf_link_hash_table *htab;
7523   bfd_byte *contents;
7524   bfd_vma addend;
7525   reloc_howto_type *howto;
7526
7527   if (info->relocatable)
7528     return TRUE;
7529
7530   htab = mips_elf_hash_table (info);
7531   BFD_ASSERT (htab != NULL);
7532
7533   dynobj = elf_hash_table (info)->dynobj;
7534   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7535   sym_hashes = elf_sym_hashes (abfd);
7536   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7537
7538   bed = get_elf_backend_data (abfd);
7539   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7540
7541   /* Check for the mips16 stub sections.  */
7542
7543   name = bfd_get_section_name (abfd, sec);
7544   if (FN_STUB_P (name))
7545     {
7546       unsigned long r_symndx;
7547
7548       /* Look at the relocation information to figure out which symbol
7549          this is for.  */
7550
7551       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7552       if (r_symndx == 0)
7553         {
7554           (*_bfd_error_handler)
7555             (_("%B: Warning: cannot determine the target function for"
7556                " stub section `%s'"),
7557              abfd, name);
7558           bfd_set_error (bfd_error_bad_value);
7559           return FALSE;
7560         }
7561
7562       if (r_symndx < extsymoff
7563           || sym_hashes[r_symndx - extsymoff] == NULL)
7564         {
7565           asection *o;
7566
7567           /* This stub is for a local symbol.  This stub will only be
7568              needed if there is some relocation in this BFD, other
7569              than a 16 bit function call, which refers to this symbol.  */
7570           for (o = abfd->sections; o != NULL; o = o->next)
7571             {
7572               Elf_Internal_Rela *sec_relocs;
7573               const Elf_Internal_Rela *r, *rend;
7574
7575               /* We can ignore stub sections when looking for relocs.  */
7576               if ((o->flags & SEC_RELOC) == 0
7577                   || o->reloc_count == 0
7578                   || section_allows_mips16_refs_p (o))
7579                 continue;
7580
7581               sec_relocs
7582                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7583                                              info->keep_memory);
7584               if (sec_relocs == NULL)
7585                 return FALSE;
7586
7587               rend = sec_relocs + o->reloc_count;
7588               for (r = sec_relocs; r < rend; r++)
7589                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7590                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7591                   break;
7592
7593               if (elf_section_data (o)->relocs != sec_relocs)
7594                 free (sec_relocs);
7595
7596               if (r < rend)
7597                 break;
7598             }
7599
7600           if (o == NULL)
7601             {
7602               /* There is no non-call reloc for this stub, so we do
7603                  not need it.  Since this function is called before
7604                  the linker maps input sections to output sections, we
7605                  can easily discard it by setting the SEC_EXCLUDE
7606                  flag.  */
7607               sec->flags |= SEC_EXCLUDE;
7608               return TRUE;
7609             }
7610
7611           /* Record this stub in an array of local symbol stubs for
7612              this BFD.  */
7613           if (mips_elf_tdata (abfd)->local_stubs == NULL)
7614             {
7615               unsigned long symcount;
7616               asection **n;
7617               bfd_size_type amt;
7618
7619               if (elf_bad_symtab (abfd))
7620                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7621               else
7622                 symcount = symtab_hdr->sh_info;
7623               amt = symcount * sizeof (asection *);
7624               n = bfd_zalloc (abfd, amt);
7625               if (n == NULL)
7626                 return FALSE;
7627               mips_elf_tdata (abfd)->local_stubs = n;
7628             }
7629
7630           sec->flags |= SEC_KEEP;
7631           mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7632
7633           /* We don't need to set mips16_stubs_seen in this case.
7634              That flag is used to see whether we need to look through
7635              the global symbol table for stubs.  We don't need to set
7636              it here, because we just have a local stub.  */
7637         }
7638       else
7639         {
7640           struct mips_elf_link_hash_entry *h;
7641
7642           h = ((struct mips_elf_link_hash_entry *)
7643                sym_hashes[r_symndx - extsymoff]);
7644
7645           while (h->root.root.type == bfd_link_hash_indirect
7646                  || h->root.root.type == bfd_link_hash_warning)
7647             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7648
7649           /* H is the symbol this stub is for.  */
7650
7651           /* If we already have an appropriate stub for this function, we
7652              don't need another one, so we can discard this one.  Since
7653              this function is called before the linker maps input sections
7654              to output sections, we can easily discard it by setting the
7655              SEC_EXCLUDE flag.  */
7656           if (h->fn_stub != NULL)
7657             {
7658               sec->flags |= SEC_EXCLUDE;
7659               return TRUE;
7660             }
7661
7662           sec->flags |= SEC_KEEP;
7663           h->fn_stub = sec;
7664           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7665         }
7666     }
7667   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
7668     {
7669       unsigned long r_symndx;
7670       struct mips_elf_link_hash_entry *h;
7671       asection **loc;
7672
7673       /* Look at the relocation information to figure out which symbol
7674          this is for.  */
7675
7676       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7677       if (r_symndx == 0)
7678         {
7679           (*_bfd_error_handler)
7680             (_("%B: Warning: cannot determine the target function for"
7681                " stub section `%s'"),
7682              abfd, name);
7683           bfd_set_error (bfd_error_bad_value);
7684           return FALSE;
7685         }
7686
7687       if (r_symndx < extsymoff
7688           || sym_hashes[r_symndx - extsymoff] == NULL)
7689         {
7690           asection *o;
7691
7692           /* This stub is for a local symbol.  This stub will only be
7693              needed if there is some relocation (R_MIPS16_26) in this BFD
7694              that refers to this symbol.  */
7695           for (o = abfd->sections; o != NULL; o = o->next)
7696             {
7697               Elf_Internal_Rela *sec_relocs;
7698               const Elf_Internal_Rela *r, *rend;
7699
7700               /* We can ignore stub sections when looking for relocs.  */
7701               if ((o->flags & SEC_RELOC) == 0
7702                   || o->reloc_count == 0
7703                   || section_allows_mips16_refs_p (o))
7704                 continue;
7705
7706               sec_relocs
7707                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7708                                              info->keep_memory);
7709               if (sec_relocs == NULL)
7710                 return FALSE;
7711
7712               rend = sec_relocs + o->reloc_count;
7713               for (r = sec_relocs; r < rend; r++)
7714                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7715                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7716                     break;
7717
7718               if (elf_section_data (o)->relocs != sec_relocs)
7719                 free (sec_relocs);
7720
7721               if (r < rend)
7722                 break;
7723             }
7724
7725           if (o == NULL)
7726             {
7727               /* There is no non-call reloc for this stub, so we do
7728                  not need it.  Since this function is called before
7729                  the linker maps input sections to output sections, we
7730                  can easily discard it by setting the SEC_EXCLUDE
7731                  flag.  */
7732               sec->flags |= SEC_EXCLUDE;
7733               return TRUE;
7734             }
7735
7736           /* Record this stub in an array of local symbol call_stubs for
7737              this BFD.  */
7738           if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
7739             {
7740               unsigned long symcount;
7741               asection **n;
7742               bfd_size_type amt;
7743
7744               if (elf_bad_symtab (abfd))
7745                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7746               else
7747                 symcount = symtab_hdr->sh_info;
7748               amt = symcount * sizeof (asection *);
7749               n = bfd_zalloc (abfd, amt);
7750               if (n == NULL)
7751                 return FALSE;
7752               mips_elf_tdata (abfd)->local_call_stubs = n;
7753             }
7754
7755           sec->flags |= SEC_KEEP;
7756           mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
7757
7758           /* We don't need to set mips16_stubs_seen in this case.
7759              That flag is used to see whether we need to look through
7760              the global symbol table for stubs.  We don't need to set
7761              it here, because we just have a local stub.  */
7762         }
7763       else
7764         {
7765           h = ((struct mips_elf_link_hash_entry *)
7766                sym_hashes[r_symndx - extsymoff]);
7767
7768           /* H is the symbol this stub is for.  */
7769
7770           if (CALL_FP_STUB_P (name))
7771             loc = &h->call_fp_stub;
7772           else
7773             loc = &h->call_stub;
7774
7775           /* If we already have an appropriate stub for this function, we
7776              don't need another one, so we can discard this one.  Since
7777              this function is called before the linker maps input sections
7778              to output sections, we can easily discard it by setting the
7779              SEC_EXCLUDE flag.  */
7780           if (*loc != NULL)
7781             {
7782               sec->flags |= SEC_EXCLUDE;
7783               return TRUE;
7784             }
7785
7786           sec->flags |= SEC_KEEP;
7787           *loc = sec;
7788           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7789         }
7790     }
7791
7792   sreloc = NULL;
7793   contents = NULL;
7794   for (rel = relocs; rel < rel_end; ++rel)
7795     {
7796       unsigned long r_symndx;
7797       unsigned int r_type;
7798       struct elf_link_hash_entry *h;
7799       bfd_boolean can_make_dynamic_p;
7800
7801       r_symndx = ELF_R_SYM (abfd, rel->r_info);
7802       r_type = ELF_R_TYPE (abfd, rel->r_info);
7803
7804       if (r_symndx < extsymoff)
7805         h = NULL;
7806       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7807         {
7808           (*_bfd_error_handler)
7809             (_("%B: Malformed reloc detected for section %s"),
7810              abfd, name);
7811           bfd_set_error (bfd_error_bad_value);
7812           return FALSE;
7813         }
7814       else
7815         {
7816           h = sym_hashes[r_symndx - extsymoff];
7817           while (h != NULL
7818                  && (h->root.type == bfd_link_hash_indirect
7819                      || h->root.type == bfd_link_hash_warning))
7820             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7821         }
7822
7823       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7824          relocation into a dynamic one.  */
7825       can_make_dynamic_p = FALSE;
7826       switch (r_type)
7827         {
7828         case R_MIPS_GOT16:
7829         case R_MIPS_CALL16:
7830         case R_MIPS_CALL_HI16:
7831         case R_MIPS_CALL_LO16:
7832         case R_MIPS_GOT_HI16:
7833         case R_MIPS_GOT_LO16:
7834         case R_MIPS_GOT_PAGE:
7835         case R_MIPS_GOT_OFST:
7836         case R_MIPS_GOT_DISP:
7837         case R_MIPS_TLS_GOTTPREL:
7838         case R_MIPS_TLS_GD:
7839         case R_MIPS_TLS_LDM:
7840         case R_MIPS16_GOT16:
7841         case R_MIPS16_CALL16:
7842         case R_MIPS16_TLS_GOTTPREL:
7843         case R_MIPS16_TLS_GD:
7844         case R_MIPS16_TLS_LDM:
7845         case R_MICROMIPS_GOT16:
7846         case R_MICROMIPS_CALL16:
7847         case R_MICROMIPS_CALL_HI16:
7848         case R_MICROMIPS_CALL_LO16:
7849         case R_MICROMIPS_GOT_HI16:
7850         case R_MICROMIPS_GOT_LO16:
7851         case R_MICROMIPS_GOT_PAGE:
7852         case R_MICROMIPS_GOT_OFST:
7853         case R_MICROMIPS_GOT_DISP:
7854         case R_MICROMIPS_TLS_GOTTPREL:
7855         case R_MICROMIPS_TLS_GD:
7856         case R_MICROMIPS_TLS_LDM:
7857           if (dynobj == NULL)
7858             elf_hash_table (info)->dynobj = dynobj = abfd;
7859           if (!mips_elf_create_got_section (dynobj, info))
7860             return FALSE;
7861           if (htab->is_vxworks && !info->shared)
7862             {
7863               (*_bfd_error_handler)
7864                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
7865                  abfd, (unsigned long) rel->r_offset);
7866               bfd_set_error (bfd_error_bad_value);
7867               return FALSE;
7868             }
7869           break;
7870
7871           /* This is just a hint; it can safely be ignored.  Don't set
7872              has_static_relocs for the corresponding symbol.  */
7873         case R_MIPS_JALR:
7874         case R_MICROMIPS_JALR:
7875           break;
7876
7877         case R_MIPS_32:
7878         case R_MIPS_REL32:
7879         case R_MIPS_64:
7880           /* In VxWorks executables, references to external symbols
7881              must be handled using copy relocs or PLT entries; it is not
7882              possible to convert this relocation into a dynamic one.
7883
7884              For executables that use PLTs and copy-relocs, we have a
7885              choice between converting the relocation into a dynamic
7886              one or using copy relocations or PLT entries.  It is
7887              usually better to do the former, unless the relocation is
7888              against a read-only section.  */
7889           if ((info->shared
7890                || (h != NULL
7891                    && !htab->is_vxworks
7892                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7893                    && !(!info->nocopyreloc
7894                         && !PIC_OBJECT_P (abfd)
7895                         && MIPS_ELF_READONLY_SECTION (sec))))
7896               && (sec->flags & SEC_ALLOC) != 0)
7897             {
7898               can_make_dynamic_p = TRUE;
7899               if (dynobj == NULL)
7900                 elf_hash_table (info)->dynobj = dynobj = abfd;
7901               break;
7902             }
7903           /* For sections that are not SEC_ALLOC a copy reloc would be
7904              output if possible (implying questionable semantics for
7905              read-only data objects) or otherwise the final link would
7906              fail as ld.so will not process them and could not therefore
7907              handle any outstanding dynamic relocations.
7908
7909              For such sections that are also SEC_DEBUGGING, we can avoid
7910              these problems by simply ignoring any relocs as these
7911              sections have a predefined use and we know it is safe to do
7912              so.
7913
7914              This is needed in cases such as a global symbol definition
7915              in a shared library causing a common symbol from an object
7916              file to be converted to an undefined reference.  If that
7917              happens, then all the relocations against this symbol from
7918              SEC_DEBUGGING sections in the object file will resolve to
7919              nil.  */
7920           if ((sec->flags & SEC_DEBUGGING) != 0)
7921             break;
7922           /* Fall through.  */
7923
7924         default:
7925           /* Most static relocations require pointer equality, except
7926              for branches.  */
7927           if (h)
7928             h->pointer_equality_needed = TRUE;
7929           /* Fall through.  */
7930
7931         case R_MIPS_26:
7932         case R_MIPS_PC16:
7933         case R_MIPS16_26:
7934         case R_MICROMIPS_26_S1:
7935         case R_MICROMIPS_PC7_S1:
7936         case R_MICROMIPS_PC10_S1:
7937         case R_MICROMIPS_PC16_S1:
7938         case R_MICROMIPS_PC23_S2:
7939           if (h)
7940             ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
7941           break;
7942         }
7943
7944       if (h)
7945         {
7946           /* Relocations against the special VxWorks __GOTT_BASE__ and
7947              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
7948              room for them in .rela.dyn.  */
7949           if (is_gott_symbol (info, h))
7950             {
7951               if (sreloc == NULL)
7952                 {
7953                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
7954                   if (sreloc == NULL)
7955                     return FALSE;
7956                 }
7957               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
7958               if (MIPS_ELF_READONLY_SECTION (sec))
7959                 /* We tell the dynamic linker that there are
7960                    relocations against the text segment.  */
7961                 info->flags |= DF_TEXTREL;
7962             }
7963         }
7964       else if (call_lo16_reloc_p (r_type)
7965                || got_lo16_reloc_p (r_type)
7966                || got_disp_reloc_p (r_type)
7967                || (got16_reloc_p (r_type) && htab->is_vxworks))
7968         {
7969           /* We may need a local GOT entry for this relocation.  We
7970              don't count R_MIPS_GOT_PAGE because we can estimate the
7971              maximum number of pages needed by looking at the size of
7972              the segment.  Similar comments apply to R_MIPS*_GOT16 and
7973              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
7974              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
7975              R_MIPS_CALL_HI16 because these are always followed by an
7976              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
7977           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
7978                                                  rel->r_addend, info, r_type))
7979             return FALSE;
7980         }
7981
7982       if (h != NULL
7983           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
7984                                                   ELF_ST_IS_MIPS16 (h->other)))
7985         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
7986
7987       switch (r_type)
7988         {
7989         case R_MIPS_CALL16:
7990         case R_MIPS16_CALL16:
7991         case R_MICROMIPS_CALL16:
7992           if (h == NULL)
7993             {
7994               (*_bfd_error_handler)
7995                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
7996                  abfd, (unsigned long) rel->r_offset);
7997               bfd_set_error (bfd_error_bad_value);
7998               return FALSE;
7999             }
8000           /* Fall through.  */
8001
8002         case R_MIPS_CALL_HI16:
8003         case R_MIPS_CALL_LO16:
8004         case R_MICROMIPS_CALL_HI16:
8005         case R_MICROMIPS_CALL_LO16:
8006           if (h != NULL)
8007             {
8008               /* Make sure there is room in the regular GOT to hold the
8009                  function's address.  We may eliminate it in favour of
8010                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8011               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8012                                                       r_type))
8013                 return FALSE;
8014
8015               /* We need a stub, not a plt entry for the undefined
8016                  function.  But we record it as if it needs plt.  See
8017                  _bfd_elf_adjust_dynamic_symbol.  */
8018               h->needs_plt = 1;
8019               h->type = STT_FUNC;
8020             }
8021           break;
8022
8023         case R_MIPS_GOT_PAGE:
8024         case R_MICROMIPS_GOT_PAGE:
8025         case R_MIPS16_GOT16:
8026         case R_MIPS_GOT16:
8027         case R_MIPS_GOT_HI16:
8028         case R_MIPS_GOT_LO16:
8029         case R_MICROMIPS_GOT16:
8030         case R_MICROMIPS_GOT_HI16:
8031         case R_MICROMIPS_GOT_LO16:
8032           if (!h || got_page_reloc_p (r_type))
8033             {
8034               /* This relocation needs (or may need, if h != NULL) a
8035                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8036                  know for sure until we know whether the symbol is
8037                  preemptible.  */
8038               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8039                 {
8040                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8041                     return FALSE;
8042                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8043                   addend = mips_elf_read_rel_addend (abfd, rel,
8044                                                      howto, contents);
8045                   if (got16_reloc_p (r_type))
8046                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8047                                                   contents, &addend);
8048                   else
8049                     addend <<= howto->rightshift;
8050                 }
8051               else
8052                 addend = rel->r_addend;
8053               if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8054                                                  h, addend))
8055                 return FALSE;
8056
8057               if (h)
8058                 {
8059                   struct mips_elf_link_hash_entry *hmips =
8060                     (struct mips_elf_link_hash_entry *) h;
8061
8062                   /* This symbol is definitely not overridable.  */
8063                   if (hmips->root.def_regular
8064                       && ! (info->shared && ! info->symbolic
8065                             && ! hmips->root.forced_local))
8066                     h = NULL;
8067                 }
8068             }
8069           /* If this is a global, overridable symbol, GOT_PAGE will
8070              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8071           /* Fall through.  */
8072
8073         case R_MIPS_GOT_DISP:
8074         case R_MICROMIPS_GOT_DISP:
8075           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8076                                                        FALSE, r_type))
8077             return FALSE;
8078           break;
8079
8080         case R_MIPS_TLS_GOTTPREL:
8081         case R_MIPS16_TLS_GOTTPREL:
8082         case R_MICROMIPS_TLS_GOTTPREL:
8083           if (info->shared)
8084             info->flags |= DF_STATIC_TLS;
8085           /* Fall through */
8086
8087         case R_MIPS_TLS_LDM:
8088         case R_MIPS16_TLS_LDM:
8089         case R_MICROMIPS_TLS_LDM:
8090           if (tls_ldm_reloc_p (r_type))
8091             {
8092               r_symndx = STN_UNDEF;
8093               h = NULL;
8094             }
8095           /* Fall through */
8096
8097         case R_MIPS_TLS_GD:
8098         case R_MIPS16_TLS_GD:
8099         case R_MICROMIPS_TLS_GD:
8100           /* This symbol requires a global offset table entry, or two
8101              for TLS GD relocations.  */
8102           if (h != NULL)
8103             {
8104               if (!mips_elf_record_global_got_symbol (h, abfd, info,
8105                                                       FALSE, r_type))
8106                 return FALSE;
8107             }
8108           else
8109             {
8110               if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8111                                                      rel->r_addend,
8112                                                      info, r_type))
8113                 return FALSE;
8114             }
8115           break;
8116
8117         case R_MIPS_32:
8118         case R_MIPS_REL32:
8119         case R_MIPS_64:
8120           /* In VxWorks executables, references to external symbols
8121              are handled using copy relocs or PLT stubs, so there's
8122              no need to add a .rela.dyn entry for this relocation.  */
8123           if (can_make_dynamic_p)
8124             {
8125               if (sreloc == NULL)
8126                 {
8127                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8128                   if (sreloc == NULL)
8129                     return FALSE;
8130                 }
8131               if (info->shared && h == NULL)
8132                 {
8133                   /* When creating a shared object, we must copy these
8134                      reloc types into the output file as R_MIPS_REL32
8135                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8136                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8137                   if (MIPS_ELF_READONLY_SECTION (sec))
8138                     /* We tell the dynamic linker that there are
8139                        relocations against the text segment.  */
8140                     info->flags |= DF_TEXTREL;
8141                 }
8142               else
8143                 {
8144                   struct mips_elf_link_hash_entry *hmips;
8145
8146                   /* For a shared object, we must copy this relocation
8147                      unless the symbol turns out to be undefined and
8148                      weak with non-default visibility, in which case
8149                      it will be left as zero.
8150
8151                      We could elide R_MIPS_REL32 for locally binding symbols
8152                      in shared libraries, but do not yet do so.
8153
8154                      For an executable, we only need to copy this
8155                      reloc if the symbol is defined in a dynamic
8156                      object.  */
8157                   hmips = (struct mips_elf_link_hash_entry *) h;
8158                   ++hmips->possibly_dynamic_relocs;
8159                   if (MIPS_ELF_READONLY_SECTION (sec))
8160                     /* We need it to tell the dynamic linker if there
8161                        are relocations against the text segment.  */
8162                     hmips->readonly_reloc = TRUE;
8163                 }
8164             }
8165
8166           if (SGI_COMPAT (abfd))
8167             mips_elf_hash_table (info)->compact_rel_size +=
8168               sizeof (Elf32_External_crinfo);
8169           break;
8170
8171         case R_MIPS_26:
8172         case R_MIPS_GPREL16:
8173         case R_MIPS_LITERAL:
8174         case R_MIPS_GPREL32:
8175         case R_MICROMIPS_26_S1:
8176         case R_MICROMIPS_GPREL16:
8177         case R_MICROMIPS_LITERAL:
8178         case R_MICROMIPS_GPREL7_S2:
8179           if (SGI_COMPAT (abfd))
8180             mips_elf_hash_table (info)->compact_rel_size +=
8181               sizeof (Elf32_External_crinfo);
8182           break;
8183
8184           /* This relocation describes the C++ object vtable hierarchy.
8185              Reconstruct it for later use during GC.  */
8186         case R_MIPS_GNU_VTINHERIT:
8187           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8188             return FALSE;
8189           break;
8190
8191           /* This relocation describes which C++ vtable entries are actually
8192              used.  Record for later use during GC.  */
8193         case R_MIPS_GNU_VTENTRY:
8194           BFD_ASSERT (h != NULL);
8195           if (h != NULL
8196               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8197             return FALSE;
8198           break;
8199
8200         default:
8201           break;
8202         }
8203
8204       /* We must not create a stub for a symbol that has relocations
8205          related to taking the function's address.  This doesn't apply to
8206          VxWorks, where CALL relocs refer to a .got.plt entry instead of
8207          a normal .got entry.  */
8208       if (!htab->is_vxworks && h != NULL)
8209         switch (r_type)
8210           {
8211           default:
8212             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8213             break;
8214           case R_MIPS16_CALL16:
8215           case R_MIPS_CALL16:
8216           case R_MIPS_CALL_HI16:
8217           case R_MIPS_CALL_LO16:
8218           case R_MIPS_JALR:
8219           case R_MICROMIPS_CALL16:
8220           case R_MICROMIPS_CALL_HI16:
8221           case R_MICROMIPS_CALL_LO16:
8222           case R_MICROMIPS_JALR:
8223             break;
8224           }
8225
8226       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8227          if there is one.  We only need to handle global symbols here;
8228          we decide whether to keep or delete stubs for local symbols
8229          when processing the stub's relocations.  */
8230       if (h != NULL
8231           && !mips16_call_reloc_p (r_type)
8232           && !section_allows_mips16_refs_p (sec))
8233         {
8234           struct mips_elf_link_hash_entry *mh;
8235
8236           mh = (struct mips_elf_link_hash_entry *) h;
8237           mh->need_fn_stub = TRUE;
8238         }
8239
8240       /* Refuse some position-dependent relocations when creating a
8241          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8242          not PIC, but we can create dynamic relocations and the result
8243          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8244          combined with R_MIPS_GOT16.  */
8245       if (info->shared)
8246         {
8247           switch (r_type)
8248             {
8249             case R_MIPS16_HI16:
8250             case R_MIPS_HI16:
8251             case R_MIPS_HIGHER:
8252             case R_MIPS_HIGHEST:
8253             case R_MICROMIPS_HI16:
8254             case R_MICROMIPS_HIGHER:
8255             case R_MICROMIPS_HIGHEST:
8256               /* Don't refuse a high part relocation if it's against
8257                  no symbol (e.g. part of a compound relocation).  */
8258               if (r_symndx == STN_UNDEF)
8259                 break;
8260
8261               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8262                  and has a special meaning.  */
8263               if (!NEWABI_P (abfd) && h != NULL
8264                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8265                 break;
8266
8267               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8268               if (is_gott_symbol (info, h))
8269                 break;
8270
8271               /* FALLTHROUGH */
8272
8273             case R_MIPS16_26:
8274             case R_MIPS_26:
8275             case R_MICROMIPS_26_S1:
8276               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8277               (*_bfd_error_handler)
8278                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8279                  abfd, howto->name,
8280                  (h) ? h->root.root.string : "a local symbol");
8281               bfd_set_error (bfd_error_bad_value);
8282               return FALSE;
8283             default:
8284               break;
8285             }
8286         }
8287     }
8288
8289   return TRUE;
8290 }
8291 \f
8292 bfd_boolean
8293 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8294                          struct bfd_link_info *link_info,
8295                          bfd_boolean *again)
8296 {
8297   Elf_Internal_Rela *internal_relocs;
8298   Elf_Internal_Rela *irel, *irelend;
8299   Elf_Internal_Shdr *symtab_hdr;
8300   bfd_byte *contents = NULL;
8301   size_t extsymoff;
8302   bfd_boolean changed_contents = FALSE;
8303   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8304   Elf_Internal_Sym *isymbuf = NULL;
8305
8306   /* We are not currently changing any sizes, so only one pass.  */
8307   *again = FALSE;
8308
8309   if (link_info->relocatable)
8310     return TRUE;
8311
8312   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8313                                                link_info->keep_memory);
8314   if (internal_relocs == NULL)
8315     return TRUE;
8316
8317   irelend = internal_relocs + sec->reloc_count
8318     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8319   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8320   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8321
8322   for (irel = internal_relocs; irel < irelend; irel++)
8323     {
8324       bfd_vma symval;
8325       bfd_signed_vma sym_offset;
8326       unsigned int r_type;
8327       unsigned long r_symndx;
8328       asection *sym_sec;
8329       unsigned long instruction;
8330
8331       /* Turn jalr into bgezal, and jr into beq, if they're marked
8332          with a JALR relocation, that indicate where they jump to.
8333          This saves some pipeline bubbles.  */
8334       r_type = ELF_R_TYPE (abfd, irel->r_info);
8335       if (r_type != R_MIPS_JALR)
8336         continue;
8337
8338       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8339       /* Compute the address of the jump target.  */
8340       if (r_symndx >= extsymoff)
8341         {
8342           struct mips_elf_link_hash_entry *h
8343             = ((struct mips_elf_link_hash_entry *)
8344                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8345
8346           while (h->root.root.type == bfd_link_hash_indirect
8347                  || h->root.root.type == bfd_link_hash_warning)
8348             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8349
8350           /* If a symbol is undefined, or if it may be overridden,
8351              skip it.  */
8352           if (! ((h->root.root.type == bfd_link_hash_defined
8353                   || h->root.root.type == bfd_link_hash_defweak)
8354                  && h->root.root.u.def.section)
8355               || (link_info->shared && ! link_info->symbolic
8356                   && !h->root.forced_local))
8357             continue;
8358
8359           sym_sec = h->root.root.u.def.section;
8360           if (sym_sec->output_section)
8361             symval = (h->root.root.u.def.value
8362                       + sym_sec->output_section->vma
8363                       + sym_sec->output_offset);
8364           else
8365             symval = h->root.root.u.def.value;
8366         }
8367       else
8368         {
8369           Elf_Internal_Sym *isym;
8370
8371           /* Read this BFD's symbols if we haven't done so already.  */
8372           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8373             {
8374               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8375               if (isymbuf == NULL)
8376                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8377                                                 symtab_hdr->sh_info, 0,
8378                                                 NULL, NULL, NULL);
8379               if (isymbuf == NULL)
8380                 goto relax_return;
8381             }
8382
8383           isym = isymbuf + r_symndx;
8384           if (isym->st_shndx == SHN_UNDEF)
8385             continue;
8386           else if (isym->st_shndx == SHN_ABS)
8387             sym_sec = bfd_abs_section_ptr;
8388           else if (isym->st_shndx == SHN_COMMON)
8389             sym_sec = bfd_com_section_ptr;
8390           else
8391             sym_sec
8392               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8393           symval = isym->st_value
8394             + sym_sec->output_section->vma
8395             + sym_sec->output_offset;
8396         }
8397
8398       /* Compute branch offset, from delay slot of the jump to the
8399          branch target.  */
8400       sym_offset = (symval + irel->r_addend)
8401         - (sec_start + irel->r_offset + 4);
8402
8403       /* Branch offset must be properly aligned.  */
8404       if ((sym_offset & 3) != 0)
8405         continue;
8406
8407       sym_offset >>= 2;
8408
8409       /* Check that it's in range.  */
8410       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8411         continue;
8412
8413       /* Get the section contents if we haven't done so already.  */
8414       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8415         goto relax_return;
8416
8417       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8418
8419       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8420       if ((instruction & 0xfc1fffff) == 0x0000f809)
8421         instruction = 0x04110000;
8422       /* If it was jr <reg>, turn it into b <target>.  */
8423       else if ((instruction & 0xfc1fffff) == 0x00000008)
8424         instruction = 0x10000000;
8425       else
8426         continue;
8427
8428       instruction |= (sym_offset & 0xffff);
8429       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8430       changed_contents = TRUE;
8431     }
8432
8433   if (contents != NULL
8434       && elf_section_data (sec)->this_hdr.contents != contents)
8435     {
8436       if (!changed_contents && !link_info->keep_memory)
8437         free (contents);
8438       else
8439         {
8440           /* Cache the section contents for elf_link_input_bfd.  */
8441           elf_section_data (sec)->this_hdr.contents = contents;
8442         }
8443     }
8444   return TRUE;
8445
8446  relax_return:
8447   if (contents != NULL
8448       && elf_section_data (sec)->this_hdr.contents != contents)
8449     free (contents);
8450   return FALSE;
8451 }
8452 \f
8453 /* Allocate space for global sym dynamic relocs.  */
8454
8455 static bfd_boolean
8456 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8457 {
8458   struct bfd_link_info *info = inf;
8459   bfd *dynobj;
8460   struct mips_elf_link_hash_entry *hmips;
8461   struct mips_elf_link_hash_table *htab;
8462
8463   htab = mips_elf_hash_table (info);
8464   BFD_ASSERT (htab != NULL);
8465
8466   dynobj = elf_hash_table (info)->dynobj;
8467   hmips = (struct mips_elf_link_hash_entry *) h;
8468
8469   /* VxWorks executables are handled elsewhere; we only need to
8470      allocate relocations in shared objects.  */
8471   if (htab->is_vxworks && !info->shared)
8472     return TRUE;
8473
8474   /* Ignore indirect symbols.  All relocations against such symbols
8475      will be redirected to the target symbol.  */
8476   if (h->root.type == bfd_link_hash_indirect)
8477     return TRUE;
8478
8479   /* If this symbol is defined in a dynamic object, or we are creating
8480      a shared library, we will need to copy any R_MIPS_32 or
8481      R_MIPS_REL32 relocs against it into the output file.  */
8482   if (! info->relocatable
8483       && hmips->possibly_dynamic_relocs != 0
8484       && (h->root.type == bfd_link_hash_defweak
8485           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8486           || info->shared))
8487     {
8488       bfd_boolean do_copy = TRUE;
8489
8490       if (h->root.type == bfd_link_hash_undefweak)
8491         {
8492           /* Do not copy relocations for undefined weak symbols with
8493              non-default visibility.  */
8494           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8495             do_copy = FALSE;
8496
8497           /* Make sure undefined weak symbols are output as a dynamic
8498              symbol in PIEs.  */
8499           else if (h->dynindx == -1 && !h->forced_local)
8500             {
8501               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8502                 return FALSE;
8503             }
8504         }
8505
8506       if (do_copy)
8507         {
8508           /* Even though we don't directly need a GOT entry for this symbol,
8509              the SVR4 psABI requires it to have a dynamic symbol table
8510              index greater that DT_MIPS_GOTSYM if there are dynamic
8511              relocations against it.
8512
8513              VxWorks does not enforce the same mapping between the GOT
8514              and the symbol table, so the same requirement does not
8515              apply there.  */
8516           if (!htab->is_vxworks)
8517             {
8518               if (hmips->global_got_area > GGA_RELOC_ONLY)
8519                 hmips->global_got_area = GGA_RELOC_ONLY;
8520               hmips->got_only_for_calls = FALSE;
8521             }
8522
8523           mips_elf_allocate_dynamic_relocations
8524             (dynobj, info, hmips->possibly_dynamic_relocs);
8525           if (hmips->readonly_reloc)
8526             /* We tell the dynamic linker that there are relocations
8527                against the text segment.  */
8528             info->flags |= DF_TEXTREL;
8529         }
8530     }
8531
8532   return TRUE;
8533 }
8534
8535 /* Adjust a symbol defined by a dynamic object and referenced by a
8536    regular object.  The current definition is in some section of the
8537    dynamic object, but we're not including those sections.  We have to
8538    change the definition to something the rest of the link can
8539    understand.  */
8540
8541 bfd_boolean
8542 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8543                                      struct elf_link_hash_entry *h)
8544 {
8545   bfd *dynobj;
8546   struct mips_elf_link_hash_entry *hmips;
8547   struct mips_elf_link_hash_table *htab;
8548
8549   htab = mips_elf_hash_table (info);
8550   BFD_ASSERT (htab != NULL);
8551
8552   dynobj = elf_hash_table (info)->dynobj;
8553   hmips = (struct mips_elf_link_hash_entry *) h;
8554
8555   /* Make sure we know what is going on here.  */
8556   BFD_ASSERT (dynobj != NULL
8557               && (h->needs_plt
8558                   || h->u.weakdef != NULL
8559                   || (h->def_dynamic
8560                       && h->ref_regular
8561                       && !h->def_regular)));
8562
8563   hmips = (struct mips_elf_link_hash_entry *) h;
8564
8565   /* If there are call relocations against an externally-defined symbol,
8566      see whether we can create a MIPS lazy-binding stub for it.  We can
8567      only do this if all references to the function are through call
8568      relocations, and in that case, the traditional lazy-binding stubs
8569      are much more efficient than PLT entries.
8570
8571      Traditional stubs are only available on SVR4 psABI-based systems;
8572      VxWorks always uses PLTs instead.  */
8573   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8574     {
8575       if (! elf_hash_table (info)->dynamic_sections_created)
8576         return TRUE;
8577
8578       /* If this symbol is not defined in a regular file, then set
8579          the symbol to the stub location.  This is required to make
8580          function pointers compare as equal between the normal
8581          executable and the shared library.  */
8582       if (!h->def_regular)
8583         {
8584           hmips->needs_lazy_stub = TRUE;
8585           htab->lazy_stub_count++;
8586           return TRUE;
8587         }
8588     }
8589   /* As above, VxWorks requires PLT entries for externally-defined
8590      functions that are only accessed through call relocations.
8591
8592      Both VxWorks and non-VxWorks targets also need PLT entries if there
8593      are static-only relocations against an externally-defined function.
8594      This can technically occur for shared libraries if there are
8595      branches to the symbol, although it is unlikely that this will be
8596      used in practice due to the short ranges involved.  It can occur
8597      for any relative or absolute relocation in executables; in that
8598      case, the PLT entry becomes the function's canonical address.  */
8599   else if (((h->needs_plt && !hmips->no_fn_stub)
8600             || (h->type == STT_FUNC && hmips->has_static_relocs))
8601            && htab->use_plts_and_copy_relocs
8602            && !SYMBOL_CALLS_LOCAL (info, h)
8603            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8604                 && h->root.type == bfd_link_hash_undefweak))
8605     {
8606       /* If this is the first symbol to need a PLT entry, allocate room
8607          for the header.  */
8608       if (htab->splt->size == 0)
8609         {
8610           BFD_ASSERT (htab->sgotplt->size == 0);
8611
8612           /* If we're using the PLT additions to the psABI, each PLT
8613              entry is 16 bytes and the PLT0 entry is 32 bytes.
8614              Encourage better cache usage by aligning.  We do this
8615              lazily to avoid pessimizing traditional objects.  */
8616           if (!htab->is_vxworks
8617               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8618             return FALSE;
8619
8620           /* Make sure that .got.plt is word-aligned.  We do this lazily
8621              for the same reason as above.  */
8622           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8623                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8624             return FALSE;
8625
8626           htab->splt->size += htab->plt_header_size;
8627
8628           /* On non-VxWorks targets, the first two entries in .got.plt
8629              are reserved.  */
8630           if (!htab->is_vxworks)
8631             htab->sgotplt->size
8632               += get_elf_backend_data (dynobj)->got_header_size;
8633
8634           /* On VxWorks, also allocate room for the header's
8635              .rela.plt.unloaded entries.  */
8636           if (htab->is_vxworks && !info->shared)
8637             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8638         }
8639
8640       /* Assign the next .plt entry to this symbol.  */
8641       h->plt.offset = htab->splt->size;
8642       htab->splt->size += htab->plt_entry_size;
8643
8644       /* If the output file has no definition of the symbol, set the
8645          symbol's value to the address of the stub.  */
8646       if (!info->shared && !h->def_regular)
8647         {
8648           h->root.u.def.section = htab->splt;
8649           h->root.u.def.value = h->plt.offset;
8650           /* For VxWorks, point at the PLT load stub rather than the
8651              lazy resolution stub; this stub will become the canonical
8652              function address.  */
8653           if (htab->is_vxworks)
8654             h->root.u.def.value += 8;
8655         }
8656
8657       /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8658          relocation.  */
8659       htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8660       htab->srelplt->size += (htab->is_vxworks
8661                               ? MIPS_ELF_RELA_SIZE (dynobj)
8662                               : MIPS_ELF_REL_SIZE (dynobj));
8663
8664       /* Make room for the .rela.plt.unloaded relocations.  */
8665       if (htab->is_vxworks && !info->shared)
8666         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8667
8668       /* All relocations against this symbol that could have been made
8669          dynamic will now refer to the PLT entry instead.  */
8670       hmips->possibly_dynamic_relocs = 0;
8671
8672       return TRUE;
8673     }
8674
8675   /* If this is a weak symbol, and there is a real definition, the
8676      processor independent code will have arranged for us to see the
8677      real definition first, and we can just use the same value.  */
8678   if (h->u.weakdef != NULL)
8679     {
8680       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8681                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
8682       h->root.u.def.section = h->u.weakdef->root.u.def.section;
8683       h->root.u.def.value = h->u.weakdef->root.u.def.value;
8684       return TRUE;
8685     }
8686
8687   /* Otherwise, there is nothing further to do for symbols defined
8688      in regular objects.  */
8689   if (h->def_regular)
8690     return TRUE;
8691
8692   /* There's also nothing more to do if we'll convert all relocations
8693      against this symbol into dynamic relocations.  */
8694   if (!hmips->has_static_relocs)
8695     return TRUE;
8696
8697   /* We're now relying on copy relocations.  Complain if we have
8698      some that we can't convert.  */
8699   if (!htab->use_plts_and_copy_relocs || info->shared)
8700     {
8701       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8702                                "dynamic symbol %s"),
8703                              h->root.root.string);
8704       bfd_set_error (bfd_error_bad_value);
8705       return FALSE;
8706     }
8707
8708   /* We must allocate the symbol in our .dynbss section, which will
8709      become part of the .bss section of the executable.  There will be
8710      an entry for this symbol in the .dynsym section.  The dynamic
8711      object will contain position independent code, so all references
8712      from the dynamic object to this symbol will go through the global
8713      offset table.  The dynamic linker will use the .dynsym entry to
8714      determine the address it must put in the global offset table, so
8715      both the dynamic object and the regular object will refer to the
8716      same memory location for the variable.  */
8717
8718   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8719     {
8720       if (htab->is_vxworks)
8721         htab->srelbss->size += sizeof (Elf32_External_Rela);
8722       else
8723         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8724       h->needs_copy = 1;
8725     }
8726
8727   /* All relocations against this symbol that could have been made
8728      dynamic will now refer to the local copy instead.  */
8729   hmips->possibly_dynamic_relocs = 0;
8730
8731   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
8732 }
8733 \f
8734 /* This function is called after all the input files have been read,
8735    and the input sections have been assigned to output sections.  We
8736    check for any mips16 stub sections that we can discard.  */
8737
8738 bfd_boolean
8739 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
8740                                     struct bfd_link_info *info)
8741 {
8742   asection *ri;
8743   struct mips_elf_link_hash_table *htab;
8744   struct mips_htab_traverse_info hti;
8745
8746   htab = mips_elf_hash_table (info);
8747   BFD_ASSERT (htab != NULL);
8748
8749   /* The .reginfo section has a fixed size.  */
8750   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8751   if (ri != NULL)
8752     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
8753
8754   hti.info = info;
8755   hti.output_bfd = output_bfd;
8756   hti.error = FALSE;
8757   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8758                                mips_elf_check_symbols, &hti);
8759   if (hti.error)
8760     return FALSE;
8761
8762   return TRUE;
8763 }
8764
8765 /* If the link uses a GOT, lay it out and work out its size.  */
8766
8767 static bfd_boolean
8768 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8769 {
8770   bfd *dynobj;
8771   asection *s;
8772   struct mips_got_info *g;
8773   bfd_size_type loadable_size = 0;
8774   bfd_size_type page_gotno;
8775   bfd *ibfd;
8776   struct mips_elf_traverse_got_arg tga;
8777   struct mips_elf_link_hash_table *htab;
8778
8779   htab = mips_elf_hash_table (info);
8780   BFD_ASSERT (htab != NULL);
8781
8782   s = htab->sgot;
8783   if (s == NULL)
8784     return TRUE;
8785
8786   dynobj = elf_hash_table (info)->dynobj;
8787   g = htab->got_info;
8788
8789   /* Allocate room for the reserved entries.  VxWorks always reserves
8790      3 entries; other objects only reserve 2 entries.  */
8791   BFD_ASSERT (g->assigned_gotno == 0);
8792   if (htab->is_vxworks)
8793     htab->reserved_gotno = 3;
8794   else
8795     htab->reserved_gotno = 2;
8796   g->local_gotno += htab->reserved_gotno;
8797   g->assigned_gotno = htab->reserved_gotno;
8798
8799   /* Decide which symbols need to go in the global part of the GOT and
8800      count the number of reloc-only GOT symbols.  */
8801   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
8802
8803   if (!mips_elf_resolve_final_got_entries (info, g))
8804     return FALSE;
8805
8806   /* Calculate the total loadable size of the output.  That
8807      will give us the maximum number of GOT_PAGE entries
8808      required.  */
8809   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
8810     {
8811       asection *subsection;
8812
8813       for (subsection = ibfd->sections;
8814            subsection;
8815            subsection = subsection->next)
8816         {
8817           if ((subsection->flags & SEC_ALLOC) == 0)
8818             continue;
8819           loadable_size += ((subsection->size + 0xf)
8820                             &~ (bfd_size_type) 0xf);
8821         }
8822     }
8823
8824   if (htab->is_vxworks)
8825     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
8826        relocations against local symbols evaluate to "G", and the EABI does
8827        not include R_MIPS_GOT_PAGE.  */
8828     page_gotno = 0;
8829   else
8830     /* Assume there are two loadable segments consisting of contiguous
8831        sections.  Is 5 enough?  */
8832     page_gotno = (loadable_size >> 16) + 5;
8833
8834   /* Choose the smaller of the two page estimates; both are intended to be
8835      conservative.  */
8836   if (page_gotno > g->page_gotno)
8837     page_gotno = g->page_gotno;
8838
8839   g->local_gotno += page_gotno;
8840
8841   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8842   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8843   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8844
8845   /* VxWorks does not support multiple GOTs.  It initializes $gp to
8846      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8847      dynamic loader.  */
8848   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
8849     {
8850       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
8851         return FALSE;
8852     }
8853   else
8854     {
8855       /* Record that all bfds use G.  This also has the effect of freeing
8856          the per-bfd GOTs, which we no longer need.  */
8857       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
8858         if (mips_elf_bfd_got (ibfd, FALSE))
8859           mips_elf_replace_bfd_got (ibfd, g);
8860       mips_elf_replace_bfd_got (output_bfd, g);
8861
8862       /* Set up TLS entries.  */
8863       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8864       tga.info = info;
8865       tga.g = g;
8866       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
8867       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
8868       if (!tga.g)
8869         return FALSE;
8870       BFD_ASSERT (g->tls_assigned_gotno
8871                   == g->global_gotno + g->local_gotno + g->tls_gotno);
8872
8873       /* Each VxWorks GOT entry needs an explicit relocation.  */
8874       if (htab->is_vxworks && info->shared)
8875         g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
8876
8877       /* Allocate room for the TLS relocations.  */
8878       if (g->relocs)
8879         mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
8880     }
8881
8882   return TRUE;
8883 }
8884
8885 /* Estimate the size of the .MIPS.stubs section.  */
8886
8887 static void
8888 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
8889 {
8890   struct mips_elf_link_hash_table *htab;
8891   bfd_size_type dynsymcount;
8892
8893   htab = mips_elf_hash_table (info);
8894   BFD_ASSERT (htab != NULL);
8895
8896   if (htab->lazy_stub_count == 0)
8897     return;
8898
8899   /* IRIX rld assumes that a function stub isn't at the end of the .text
8900      section, so add a dummy entry to the end.  */
8901   htab->lazy_stub_count++;
8902
8903   /* Get a worst-case estimate of the number of dynamic symbols needed.
8904      At this point, dynsymcount does not account for section symbols
8905      and count_section_dynsyms may overestimate the number that will
8906      be needed.  */
8907   dynsymcount = (elf_hash_table (info)->dynsymcount
8908                  + count_section_dynsyms (output_bfd, info));
8909
8910   /* Determine the size of one stub entry.  */
8911   htab->function_stub_size = (dynsymcount > 0x10000
8912                               ? MIPS_FUNCTION_STUB_BIG_SIZE
8913                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
8914
8915   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
8916 }
8917
8918 /* A mips_elf_link_hash_traverse callback for which DATA points to the
8919    MIPS hash table.  If H needs a traditional MIPS lazy-binding stub,
8920    allocate an entry in the stubs section.  */
8921
8922 static bfd_boolean
8923 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data)
8924 {
8925   struct mips_elf_link_hash_table *htab;
8926
8927   htab = (struct mips_elf_link_hash_table *) data;
8928   if (h->needs_lazy_stub)
8929     {
8930       h->root.root.u.def.section = htab->sstubs;
8931       h->root.root.u.def.value = htab->sstubs->size;
8932       h->root.plt.offset = htab->sstubs->size;
8933       htab->sstubs->size += htab->function_stub_size;
8934     }
8935   return TRUE;
8936 }
8937
8938 /* Allocate offsets in the stubs section to each symbol that needs one.
8939    Set the final size of the .MIPS.stub section.  */
8940
8941 static void
8942 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
8943 {
8944   struct mips_elf_link_hash_table *htab;
8945
8946   htab = mips_elf_hash_table (info);
8947   BFD_ASSERT (htab != NULL);
8948
8949   if (htab->lazy_stub_count == 0)
8950     return;
8951
8952   htab->sstubs->size = 0;
8953   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
8954   htab->sstubs->size += htab->function_stub_size;
8955   BFD_ASSERT (htab->sstubs->size
8956               == htab->lazy_stub_count * htab->function_stub_size);
8957 }
8958
8959 /* Set the sizes of the dynamic sections.  */
8960
8961 bfd_boolean
8962 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
8963                                      struct bfd_link_info *info)
8964 {
8965   bfd *dynobj;
8966   asection *s, *sreldyn;
8967   bfd_boolean reltext;
8968   struct mips_elf_link_hash_table *htab;
8969
8970   htab = mips_elf_hash_table (info);
8971   BFD_ASSERT (htab != NULL);
8972   dynobj = elf_hash_table (info)->dynobj;
8973   BFD_ASSERT (dynobj != NULL);
8974
8975   if (elf_hash_table (info)->dynamic_sections_created)
8976     {
8977       /* Set the contents of the .interp section to the interpreter.  */
8978       if (info->executable)
8979         {
8980           s = bfd_get_linker_section (dynobj, ".interp");
8981           BFD_ASSERT (s != NULL);
8982           s->size
8983             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
8984           s->contents
8985             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
8986         }
8987
8988       /* Create a symbol for the PLT, if we know that we are using it.  */
8989       if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
8990         {
8991           struct elf_link_hash_entry *h;
8992
8993           BFD_ASSERT (htab->use_plts_and_copy_relocs);
8994
8995           h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
8996                                            "_PROCEDURE_LINKAGE_TABLE_");
8997           htab->root.hplt = h;
8998           if (h == NULL)
8999             return FALSE;
9000           h->type = STT_FUNC;
9001         }
9002     }
9003
9004   /* Allocate space for global sym dynamic relocs.  */
9005   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9006
9007   mips_elf_estimate_stub_size (output_bfd, info);
9008
9009   if (!mips_elf_lay_out_got (output_bfd, info))
9010     return FALSE;
9011
9012   mips_elf_lay_out_lazy_stubs (info);
9013
9014   /* The check_relocs and adjust_dynamic_symbol entry points have
9015      determined the sizes of the various dynamic sections.  Allocate
9016      memory for them.  */
9017   reltext = FALSE;
9018   for (s = dynobj->sections; s != NULL; s = s->next)
9019     {
9020       const char *name;
9021
9022       /* It's OK to base decisions on the section name, because none
9023          of the dynobj section names depend upon the input files.  */
9024       name = bfd_get_section_name (dynobj, s);
9025
9026       if ((s->flags & SEC_LINKER_CREATED) == 0)
9027         continue;
9028
9029       if (CONST_STRNEQ (name, ".rel"))
9030         {
9031           if (s->size != 0)
9032             {
9033               const char *outname;
9034               asection *target;
9035
9036               /* If this relocation section applies to a read only
9037                  section, then we probably need a DT_TEXTREL entry.
9038                  If the relocation section is .rel(a).dyn, we always
9039                  assert a DT_TEXTREL entry rather than testing whether
9040                  there exists a relocation to a read only section or
9041                  not.  */
9042               outname = bfd_get_section_name (output_bfd,
9043                                               s->output_section);
9044               target = bfd_get_section_by_name (output_bfd, outname + 4);
9045               if ((target != NULL
9046                    && (target->flags & SEC_READONLY) != 0
9047                    && (target->flags & SEC_ALLOC) != 0)
9048                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9049                 reltext = TRUE;
9050
9051               /* We use the reloc_count field as a counter if we need
9052                  to copy relocs into the output file.  */
9053               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9054                 s->reloc_count = 0;
9055
9056               /* If combreloc is enabled, elf_link_sort_relocs() will
9057                  sort relocations, but in a different way than we do,
9058                  and before we're done creating relocations.  Also, it
9059                  will move them around between input sections'
9060                  relocation's contents, so our sorting would be
9061                  broken, so don't let it run.  */
9062               info->combreloc = 0;
9063             }
9064         }
9065       else if (! info->shared
9066                && ! mips_elf_hash_table (info)->use_rld_obj_head
9067                && CONST_STRNEQ (name, ".rld_map"))
9068         {
9069           /* We add a room for __rld_map.  It will be filled in by the
9070              rtld to contain a pointer to the _r_debug structure.  */
9071           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9072         }
9073       else if (SGI_COMPAT (output_bfd)
9074                && CONST_STRNEQ (name, ".compact_rel"))
9075         s->size += mips_elf_hash_table (info)->compact_rel_size;
9076       else if (s == htab->splt)
9077         {
9078           /* If the last PLT entry has a branch delay slot, allocate
9079              room for an extra nop to fill the delay slot.  This is
9080              for CPUs without load interlocking.  */
9081           if (! LOAD_INTERLOCKS_P (output_bfd)
9082               && ! htab->is_vxworks && s->size > 0)
9083             s->size += 4;
9084         }
9085       else if (! CONST_STRNEQ (name, ".init")
9086                && s != htab->sgot
9087                && s != htab->sgotplt
9088                && s != htab->sstubs
9089                && s != htab->sdynbss)
9090         {
9091           /* It's not one of our sections, so don't allocate space.  */
9092           continue;
9093         }
9094
9095       if (s->size == 0)
9096         {
9097           s->flags |= SEC_EXCLUDE;
9098           continue;
9099         }
9100
9101       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9102         continue;
9103
9104       /* Allocate memory for the section contents.  */
9105       s->contents = bfd_zalloc (dynobj, s->size);
9106       if (s->contents == NULL)
9107         {
9108           bfd_set_error (bfd_error_no_memory);
9109           return FALSE;
9110         }
9111     }
9112
9113   if (elf_hash_table (info)->dynamic_sections_created)
9114     {
9115       /* Add some entries to the .dynamic section.  We fill in the
9116          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9117          must add the entries now so that we get the correct size for
9118          the .dynamic section.  */
9119
9120       /* SGI object has the equivalence of DT_DEBUG in the
9121          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9122          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9123          may only look at the first one they see.  */
9124       if (!info->shared
9125           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9126         return FALSE;
9127
9128       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9129          used by the debugger.  */
9130       if (info->executable
9131           && !SGI_COMPAT (output_bfd)
9132           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9133         return FALSE;
9134
9135       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9136         info->flags |= DF_TEXTREL;
9137
9138       if ((info->flags & DF_TEXTREL) != 0)
9139         {
9140           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9141             return FALSE;
9142
9143           /* Clear the DF_TEXTREL flag.  It will be set again if we
9144              write out an actual text relocation; we may not, because
9145              at this point we do not know whether e.g. any .eh_frame
9146              absolute relocations have been converted to PC-relative.  */
9147           info->flags &= ~DF_TEXTREL;
9148         }
9149
9150       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9151         return FALSE;
9152
9153       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9154       if (htab->is_vxworks)
9155         {
9156           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9157              use any of the DT_MIPS_* tags.  */
9158           if (sreldyn && sreldyn->size > 0)
9159             {
9160               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9161                 return FALSE;
9162
9163               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9164                 return FALSE;
9165
9166               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9167                 return FALSE;
9168             }
9169         }
9170       else
9171         {
9172           if (sreldyn && sreldyn->size > 0)
9173             {
9174               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9175                 return FALSE;
9176
9177               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9178                 return FALSE;
9179
9180               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9181                 return FALSE;
9182             }
9183
9184           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9185             return FALSE;
9186
9187           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9188             return FALSE;
9189
9190           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9191             return FALSE;
9192
9193           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9194             return FALSE;
9195
9196           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9197             return FALSE;
9198
9199           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9200             return FALSE;
9201
9202           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9203             return FALSE;
9204
9205           if (IRIX_COMPAT (dynobj) == ict_irix5
9206               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9207             return FALSE;
9208
9209           if (IRIX_COMPAT (dynobj) == ict_irix6
9210               && (bfd_get_section_by_name
9211                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9212               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9213             return FALSE;
9214         }
9215       if (htab->splt->size > 0)
9216         {
9217           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9218             return FALSE;
9219
9220           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9221             return FALSE;
9222
9223           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9224             return FALSE;
9225
9226           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9227             return FALSE;
9228         }
9229       if (htab->is_vxworks
9230           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9231         return FALSE;
9232     }
9233
9234   return TRUE;
9235 }
9236 \f
9237 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9238    Adjust its R_ADDEND field so that it is correct for the output file.
9239    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9240    and sections respectively; both use symbol indexes.  */
9241
9242 static void
9243 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9244                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9245                         asection **local_sections, Elf_Internal_Rela *rel)
9246 {
9247   unsigned int r_type, r_symndx;
9248   Elf_Internal_Sym *sym;
9249   asection *sec;
9250
9251   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9252     {
9253       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9254       if (gprel16_reloc_p (r_type)
9255           || r_type == R_MIPS_GPREL32
9256           || literal_reloc_p (r_type))
9257         {
9258           rel->r_addend += _bfd_get_gp_value (input_bfd);
9259           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9260         }
9261
9262       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9263       sym = local_syms + r_symndx;
9264
9265       /* Adjust REL's addend to account for section merging.  */
9266       if (!info->relocatable)
9267         {
9268           sec = local_sections[r_symndx];
9269           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9270         }
9271
9272       /* This would normally be done by the rela_normal code in elflink.c.  */
9273       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9274         rel->r_addend += local_sections[r_symndx]->output_offset;
9275     }
9276 }
9277
9278 /* Handle relocations against symbols from removed linkonce sections,
9279    or sections discarded by a linker script.  We use this wrapper around
9280    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9281    on 64-bit ELF targets.  In this case for any relocation handled, which
9282    always be the first in a triplet, the remaining two have to be processed
9283    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9284    index referred by the first reloc that applies to all the three and the
9285    remaining two never refer to an object symbol.  And it is the final
9286    relocation (the last non-null one) that determines the output field of
9287    the whole relocation so retrieve the corresponding howto structure for
9288    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9289
9290    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9291    and therefore requires to be pasted in a loop.  It also defines a block
9292    and does not protect any of its arguments, hence the extra brackets.  */
9293
9294 static void
9295 mips_reloc_against_discarded_section (bfd *output_bfd,
9296                                       struct bfd_link_info *info,
9297                                       bfd *input_bfd, asection *input_section,
9298                                       Elf_Internal_Rela **rel,
9299                                       const Elf_Internal_Rela **relend,
9300                                       bfd_boolean rel_reloc,
9301                                       reloc_howto_type *howto,
9302                                       bfd_byte *contents)
9303 {
9304   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9305   int count = bed->s->int_rels_per_ext_rel;
9306   unsigned int r_type;
9307   int i;
9308
9309   for (i = count - 1; i > 0; i--)
9310     {
9311       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9312       if (r_type != R_MIPS_NONE)
9313         {
9314           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9315           break;
9316         }
9317     }
9318   do
9319     {
9320        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9321                                         (*rel), count, (*relend),
9322                                         howto, i, contents);
9323     }
9324   while (0);
9325 }
9326
9327 /* Relocate a MIPS ELF section.  */
9328
9329 bfd_boolean
9330 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9331                                 bfd *input_bfd, asection *input_section,
9332                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
9333                                 Elf_Internal_Sym *local_syms,
9334                                 asection **local_sections)
9335 {
9336   Elf_Internal_Rela *rel;
9337   const Elf_Internal_Rela *relend;
9338   bfd_vma addend = 0;
9339   bfd_boolean use_saved_addend_p = FALSE;
9340   const struct elf_backend_data *bed;
9341
9342   bed = get_elf_backend_data (output_bfd);
9343   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9344   for (rel = relocs; rel < relend; ++rel)
9345     {
9346       const char *name;
9347       bfd_vma value = 0;
9348       reloc_howto_type *howto;
9349       bfd_boolean cross_mode_jump_p;
9350       /* TRUE if the relocation is a RELA relocation, rather than a
9351          REL relocation.  */
9352       bfd_boolean rela_relocation_p = TRUE;
9353       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9354       const char *msg;
9355       unsigned long r_symndx;
9356       asection *sec;
9357       Elf_Internal_Shdr *symtab_hdr;
9358       struct elf_link_hash_entry *h;
9359       bfd_boolean rel_reloc;
9360
9361       rel_reloc = (NEWABI_P (input_bfd)
9362                    && mips_elf_rel_relocation_p (input_bfd, input_section,
9363                                                  relocs, rel));
9364       /* Find the relocation howto for this relocation.  */
9365       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9366
9367       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
9368       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9369       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9370         {
9371           sec = local_sections[r_symndx];
9372           h = NULL;
9373         }
9374       else
9375         {
9376           unsigned long extsymoff;
9377
9378           extsymoff = 0;
9379           if (!elf_bad_symtab (input_bfd))
9380             extsymoff = symtab_hdr->sh_info;
9381           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9382           while (h->root.type == bfd_link_hash_indirect
9383                  || h->root.type == bfd_link_hash_warning)
9384             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9385
9386           sec = NULL;
9387           if (h->root.type == bfd_link_hash_defined
9388               || h->root.type == bfd_link_hash_defweak)
9389             sec = h->root.u.def.section;
9390         }
9391
9392       if (sec != NULL && discarded_section (sec))
9393         {
9394           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
9395                                                 input_section, &rel, &relend,
9396                                                 rel_reloc, howto, contents);
9397           continue;
9398         }
9399
9400       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
9401         {
9402           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
9403              64-bit code, but make sure all their addresses are in the
9404              lowermost or uppermost 32-bit section of the 64-bit address
9405              space.  Thus, when they use an R_MIPS_64 they mean what is
9406              usually meant by R_MIPS_32, with the exception that the
9407              stored value is sign-extended to 64 bits.  */
9408           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
9409
9410           /* On big-endian systems, we need to lie about the position
9411              of the reloc.  */
9412           if (bfd_big_endian (input_bfd))
9413             rel->r_offset += 4;
9414         }
9415
9416       if (!use_saved_addend_p)
9417         {
9418           /* If these relocations were originally of the REL variety,
9419              we must pull the addend out of the field that will be
9420              relocated.  Otherwise, we simply use the contents of the
9421              RELA relocation.  */
9422           if (mips_elf_rel_relocation_p (input_bfd, input_section,
9423                                          relocs, rel))
9424             {
9425               rela_relocation_p = FALSE;
9426               addend = mips_elf_read_rel_addend (input_bfd, rel,
9427                                                  howto, contents);
9428               if (hi16_reloc_p (r_type)
9429                   || (got16_reloc_p (r_type)
9430                       && mips_elf_local_relocation_p (input_bfd, rel,
9431                                                       local_sections)))
9432                 {
9433                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9434                                                      contents, &addend))
9435                     {
9436                       if (h)
9437                         name = h->root.root.string;
9438                       else
9439                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9440                                                  local_syms + r_symndx,
9441                                                  sec);
9442                       (*_bfd_error_handler)
9443                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9444                          input_bfd, input_section, name, howto->name,
9445                          rel->r_offset);
9446                     }
9447                 }
9448               else
9449                 addend <<= howto->rightshift;
9450             }
9451           else
9452             addend = rel->r_addend;
9453           mips_elf_adjust_addend (output_bfd, info, input_bfd,
9454                                   local_syms, local_sections, rel);
9455         }
9456
9457       if (info->relocatable)
9458         {
9459           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
9460               && bfd_big_endian (input_bfd))
9461             rel->r_offset -= 4;
9462
9463           if (!rela_relocation_p && rel->r_addend)
9464             {
9465               addend += rel->r_addend;
9466               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
9467                 addend = mips_elf_high (addend);
9468               else if (r_type == R_MIPS_HIGHER)
9469                 addend = mips_elf_higher (addend);
9470               else if (r_type == R_MIPS_HIGHEST)
9471                 addend = mips_elf_highest (addend);
9472               else
9473                 addend >>= howto->rightshift;
9474
9475               /* We use the source mask, rather than the destination
9476                  mask because the place to which we are writing will be
9477                  source of the addend in the final link.  */
9478               addend &= howto->src_mask;
9479
9480               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9481                 /* See the comment above about using R_MIPS_64 in the 32-bit
9482                    ABI.  Here, we need to update the addend.  It would be
9483                    possible to get away with just using the R_MIPS_32 reloc
9484                    but for endianness.  */
9485                 {
9486                   bfd_vma sign_bits;
9487                   bfd_vma low_bits;
9488                   bfd_vma high_bits;
9489
9490                   if (addend & ((bfd_vma) 1 << 31))
9491 #ifdef BFD64
9492                     sign_bits = ((bfd_vma) 1 << 32) - 1;
9493 #else
9494                     sign_bits = -1;
9495 #endif
9496                   else
9497                     sign_bits = 0;
9498
9499                   /* If we don't know that we have a 64-bit type,
9500                      do two separate stores.  */
9501                   if (bfd_big_endian (input_bfd))
9502                     {
9503                       /* Store the sign-bits (which are most significant)
9504                          first.  */
9505                       low_bits = sign_bits;
9506                       high_bits = addend;
9507                     }
9508                   else
9509                     {
9510                       low_bits = addend;
9511                       high_bits = sign_bits;
9512                     }
9513                   bfd_put_32 (input_bfd, low_bits,
9514                               contents + rel->r_offset);
9515                   bfd_put_32 (input_bfd, high_bits,
9516                               contents + rel->r_offset + 4);
9517                   continue;
9518                 }
9519
9520               if (! mips_elf_perform_relocation (info, howto, rel, addend,
9521                                                  input_bfd, input_section,
9522                                                  contents, FALSE))
9523                 return FALSE;
9524             }
9525
9526           /* Go on to the next relocation.  */
9527           continue;
9528         }
9529
9530       /* In the N32 and 64-bit ABIs there may be multiple consecutive
9531          relocations for the same offset.  In that case we are
9532          supposed to treat the output of each relocation as the addend
9533          for the next.  */
9534       if (rel + 1 < relend
9535           && rel->r_offset == rel[1].r_offset
9536           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
9537         use_saved_addend_p = TRUE;
9538       else
9539         use_saved_addend_p = FALSE;
9540
9541       /* Figure out what value we are supposed to relocate.  */
9542       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9543                                              input_section, info, rel,
9544                                              addend, howto, local_syms,
9545                                              local_sections, &value,
9546                                              &name, &cross_mode_jump_p,
9547                                              use_saved_addend_p))
9548         {
9549         case bfd_reloc_continue:
9550           /* There's nothing to do.  */
9551           continue;
9552
9553         case bfd_reloc_undefined:
9554           /* mips_elf_calculate_relocation already called the
9555              undefined_symbol callback.  There's no real point in
9556              trying to perform the relocation at this point, so we
9557              just skip ahead to the next relocation.  */
9558           continue;
9559
9560         case bfd_reloc_notsupported:
9561           msg = _("internal error: unsupported relocation error");
9562           info->callbacks->warning
9563             (info, msg, name, input_bfd, input_section, rel->r_offset);
9564           return FALSE;
9565
9566         case bfd_reloc_overflow:
9567           if (use_saved_addend_p)
9568             /* Ignore overflow until we reach the last relocation for
9569                a given location.  */
9570             ;
9571           else
9572             {
9573               struct mips_elf_link_hash_table *htab;
9574
9575               htab = mips_elf_hash_table (info);
9576               BFD_ASSERT (htab != NULL);
9577               BFD_ASSERT (name != NULL);
9578               if (!htab->small_data_overflow_reported
9579                   && (gprel16_reloc_p (howto->type)
9580                       || literal_reloc_p (howto->type)))
9581                 {
9582                   msg = _("small-data section exceeds 64KB;"
9583                           " lower small-data size limit (see option -G)");
9584
9585                   htab->small_data_overflow_reported = TRUE;
9586                   (*info->callbacks->einfo) ("%P: %s\n", msg);
9587                 }
9588               if (! ((*info->callbacks->reloc_overflow)
9589                      (info, NULL, name, howto->name, (bfd_vma) 0,
9590                       input_bfd, input_section, rel->r_offset)))
9591                 return FALSE;
9592             }
9593           break;
9594
9595         case bfd_reloc_ok:
9596           break;
9597
9598         case bfd_reloc_outofrange:
9599           if (jal_reloc_p (howto->type))
9600             {
9601               msg = _("JALX to a non-word-aligned address");
9602               info->callbacks->warning
9603                 (info, msg, name, input_bfd, input_section, rel->r_offset);
9604               return FALSE;
9605             }
9606           /* Fall through.  */
9607
9608         default:
9609           abort ();
9610           break;
9611         }
9612
9613       /* If we've got another relocation for the address, keep going
9614          until we reach the last one.  */
9615       if (use_saved_addend_p)
9616         {
9617           addend = value;
9618           continue;
9619         }
9620
9621       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9622         /* See the comment above about using R_MIPS_64 in the 32-bit
9623            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
9624            that calculated the right value.  Now, however, we
9625            sign-extend the 32-bit result to 64-bits, and store it as a
9626            64-bit value.  We are especially generous here in that we
9627            go to extreme lengths to support this usage on systems with
9628            only a 32-bit VMA.  */
9629         {
9630           bfd_vma sign_bits;
9631           bfd_vma low_bits;
9632           bfd_vma high_bits;
9633
9634           if (value & ((bfd_vma) 1 << 31))
9635 #ifdef BFD64
9636             sign_bits = ((bfd_vma) 1 << 32) - 1;
9637 #else
9638             sign_bits = -1;
9639 #endif
9640           else
9641             sign_bits = 0;
9642
9643           /* If we don't know that we have a 64-bit type,
9644              do two separate stores.  */
9645           if (bfd_big_endian (input_bfd))
9646             {
9647               /* Undo what we did above.  */
9648               rel->r_offset -= 4;
9649               /* Store the sign-bits (which are most significant)
9650                  first.  */
9651               low_bits = sign_bits;
9652               high_bits = value;
9653             }
9654           else
9655             {
9656               low_bits = value;
9657               high_bits = sign_bits;
9658             }
9659           bfd_put_32 (input_bfd, low_bits,
9660                       contents + rel->r_offset);
9661           bfd_put_32 (input_bfd, high_bits,
9662                       contents + rel->r_offset + 4);
9663           continue;
9664         }
9665
9666       /* Actually perform the relocation.  */
9667       if (! mips_elf_perform_relocation (info, howto, rel, value,
9668                                          input_bfd, input_section,
9669                                          contents, cross_mode_jump_p))
9670         return FALSE;
9671     }
9672
9673   return TRUE;
9674 }
9675 \f
9676 /* A function that iterates over each entry in la25_stubs and fills
9677    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
9678
9679 static int
9680 mips_elf_create_la25_stub (void **slot, void *data)
9681 {
9682   struct mips_htab_traverse_info *hti;
9683   struct mips_elf_link_hash_table *htab;
9684   struct mips_elf_la25_stub *stub;
9685   asection *s;
9686   bfd_byte *loc;
9687   bfd_vma offset, target, target_high, target_low;
9688
9689   stub = (struct mips_elf_la25_stub *) *slot;
9690   hti = (struct mips_htab_traverse_info *) data;
9691   htab = mips_elf_hash_table (hti->info);
9692   BFD_ASSERT (htab != NULL);
9693
9694   /* Create the section contents, if we haven't already.  */
9695   s = stub->stub_section;
9696   loc = s->contents;
9697   if (loc == NULL)
9698     {
9699       loc = bfd_malloc (s->size);
9700       if (loc == NULL)
9701         {
9702           hti->error = TRUE;
9703           return FALSE;
9704         }
9705       s->contents = loc;
9706     }
9707
9708   /* Work out where in the section this stub should go.  */
9709   offset = stub->offset;
9710
9711   /* Work out the target address.  */
9712   target = mips_elf_get_la25_target (stub, &s);
9713   target += s->output_section->vma + s->output_offset;
9714
9715   target_high = ((target + 0x8000) >> 16) & 0xffff;
9716   target_low = (target & 0xffff);
9717
9718   if (stub->stub_section != htab->strampoline)
9719     {
9720       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
9721          of the section and write the two instructions at the end.  */
9722       memset (loc, 0, offset);
9723       loc += offset;
9724       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9725         {
9726           bfd_put_micromips_32 (hti->output_bfd,
9727                                 LA25_LUI_MICROMIPS (target_high),
9728                                 loc);
9729           bfd_put_micromips_32 (hti->output_bfd,
9730                                 LA25_ADDIU_MICROMIPS (target_low),
9731                                 loc + 4);
9732         }
9733       else
9734         {
9735           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9736           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9737         }
9738     }
9739   else
9740     {
9741       /* This is trampoline.  */
9742       loc += offset;
9743       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9744         {
9745           bfd_put_micromips_32 (hti->output_bfd,
9746                                 LA25_LUI_MICROMIPS (target_high), loc);
9747           bfd_put_micromips_32 (hti->output_bfd,
9748                                 LA25_J_MICROMIPS (target), loc + 4);
9749           bfd_put_micromips_32 (hti->output_bfd,
9750                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
9751           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9752         }
9753       else
9754         {
9755           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9756           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9757           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9758           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9759         }
9760     }
9761   return TRUE;
9762 }
9763
9764 /* If NAME is one of the special IRIX6 symbols defined by the linker,
9765    adjust it appropriately now.  */
9766
9767 static void
9768 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9769                                       const char *name, Elf_Internal_Sym *sym)
9770 {
9771   /* The linker script takes care of providing names and values for
9772      these, but we must place them into the right sections.  */
9773   static const char* const text_section_symbols[] = {
9774     "_ftext",
9775     "_etext",
9776     "__dso_displacement",
9777     "__elf_header",
9778     "__program_header_table",
9779     NULL
9780   };
9781
9782   static const char* const data_section_symbols[] = {
9783     "_fdata",
9784     "_edata",
9785     "_end",
9786     "_fbss",
9787     NULL
9788   };
9789
9790   const char* const *p;
9791   int i;
9792
9793   for (i = 0; i < 2; ++i)
9794     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9795          *p;
9796          ++p)
9797       if (strcmp (*p, name) == 0)
9798         {
9799           /* All of these symbols are given type STT_SECTION by the
9800              IRIX6 linker.  */
9801           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9802           sym->st_other = STO_PROTECTED;
9803
9804           /* The IRIX linker puts these symbols in special sections.  */
9805           if (i == 0)
9806             sym->st_shndx = SHN_MIPS_TEXT;
9807           else
9808             sym->st_shndx = SHN_MIPS_DATA;
9809
9810           break;
9811         }
9812 }
9813
9814 /* Finish up dynamic symbol handling.  We set the contents of various
9815    dynamic sections here.  */
9816
9817 bfd_boolean
9818 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9819                                      struct bfd_link_info *info,
9820                                      struct elf_link_hash_entry *h,
9821                                      Elf_Internal_Sym *sym)
9822 {
9823   bfd *dynobj;
9824   asection *sgot;
9825   struct mips_got_info *g, *gg;
9826   const char *name;
9827   int idx;
9828   struct mips_elf_link_hash_table *htab;
9829   struct mips_elf_link_hash_entry *hmips;
9830
9831   htab = mips_elf_hash_table (info);
9832   BFD_ASSERT (htab != NULL);
9833   dynobj = elf_hash_table (info)->dynobj;
9834   hmips = (struct mips_elf_link_hash_entry *) h;
9835
9836   BFD_ASSERT (!htab->is_vxworks);
9837
9838   if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9839     {
9840       /* We've decided to create a PLT entry for this symbol.  */
9841       bfd_byte *loc;
9842       bfd_vma header_address, plt_index, got_address;
9843       bfd_vma got_address_high, got_address_low, load;
9844       const bfd_vma *plt_entry;
9845
9846       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9847       BFD_ASSERT (h->dynindx != -1);
9848       BFD_ASSERT (htab->splt != NULL);
9849       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9850       BFD_ASSERT (!h->def_regular);
9851
9852       /* Calculate the address of the PLT header.  */
9853       header_address = (htab->splt->output_section->vma
9854                         + htab->splt->output_offset);
9855
9856       /* Calculate the index of the entry.  */
9857       plt_index = ((h->plt.offset - htab->plt_header_size)
9858                    / htab->plt_entry_size);
9859
9860       /* Calculate the address of the .got.plt entry.  */
9861       got_address = (htab->sgotplt->output_section->vma
9862                      + htab->sgotplt->output_offset
9863                      + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9864       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9865       got_address_low = got_address & 0xffff;
9866
9867       /* Initially point the .got.plt entry at the PLT header.  */
9868       loc = (htab->sgotplt->contents
9869              + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9870       if (ABI_64_P (output_bfd))
9871         bfd_put_64 (output_bfd, header_address, loc);
9872       else
9873         bfd_put_32 (output_bfd, header_address, loc);
9874
9875       /* Find out where the .plt entry should go.  */
9876       loc = htab->splt->contents + h->plt.offset;
9877
9878       /* Pick the load opcode.  */
9879       load = MIPS_ELF_LOAD_WORD (output_bfd);
9880
9881       /* Fill in the PLT entry itself.  */
9882       plt_entry = mips_exec_plt_entry;
9883       bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
9884       bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
9885
9886       if (! LOAD_INTERLOCKS_P (output_bfd))
9887         {
9888           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
9889           bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9890         }
9891       else
9892         {
9893           bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
9894           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
9895         }
9896
9897       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
9898       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
9899                                           plt_index, h->dynindx,
9900                                           R_MIPS_JUMP_SLOT, got_address);
9901
9902       /* We distinguish between PLT entries and lazy-binding stubs by
9903          giving the former an st_other value of STO_MIPS_PLT.  Set the
9904          flag and leave the value if there are any relocations in the
9905          binary where pointer equality matters.  */
9906       sym->st_shndx = SHN_UNDEF;
9907       if (h->pointer_equality_needed)
9908         sym->st_other = STO_MIPS_PLT;
9909       else
9910         sym->st_value = 0;
9911     }
9912   else if (h->plt.offset != MINUS_ONE)
9913     {
9914       /* We've decided to create a lazy-binding stub.  */
9915       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
9916
9917       /* This symbol has a stub.  Set it up.  */
9918
9919       BFD_ASSERT (h->dynindx != -1);
9920
9921       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9922                   || (h->dynindx <= 0xffff));
9923
9924       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
9925          sign extension at runtime in the stub, resulting in a negative
9926          index value.  */
9927       if (h->dynindx & ~0x7fffffff)
9928         return FALSE;
9929
9930       /* Fill the stub.  */
9931       idx = 0;
9932       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
9933       idx += 4;
9934       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
9935       idx += 4;
9936       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9937         {
9938           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
9939                       stub + idx);
9940           idx += 4;
9941         }
9942       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
9943       idx += 4;
9944
9945       /* If a large stub is not required and sign extension is not a
9946          problem, then use legacy code in the stub.  */
9947       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9948         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
9949       else if (h->dynindx & ~0x7fff)
9950         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
9951       else
9952         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
9953                     stub + idx);
9954
9955       BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
9956       memcpy (htab->sstubs->contents + h->plt.offset,
9957               stub, htab->function_stub_size);
9958
9959       /* Mark the symbol as undefined.  plt.offset != -1 occurs
9960          only for the referenced symbol.  */
9961       sym->st_shndx = SHN_UNDEF;
9962
9963       /* The run-time linker uses the st_value field of the symbol
9964          to reset the global offset table entry for this external
9965          to its stub address when unlinking a shared object.  */
9966       sym->st_value = (htab->sstubs->output_section->vma
9967                        + htab->sstubs->output_offset
9968                        + h->plt.offset);
9969     }
9970
9971   /* If we have a MIPS16 function with a stub, the dynamic symbol must
9972      refer to the stub, since only the stub uses the standard calling
9973      conventions.  */
9974   if (h->dynindx != -1 && hmips->fn_stub != NULL)
9975     {
9976       BFD_ASSERT (hmips->need_fn_stub);
9977       sym->st_value = (hmips->fn_stub->output_section->vma
9978                        + hmips->fn_stub->output_offset);
9979       sym->st_size = hmips->fn_stub->size;
9980       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
9981     }
9982
9983   BFD_ASSERT (h->dynindx != -1
9984               || h->forced_local);
9985
9986   sgot = htab->sgot;
9987   g = htab->got_info;
9988   BFD_ASSERT (g != NULL);
9989
9990   /* Run through the global symbol table, creating GOT entries for all
9991      the symbols that need them.  */
9992   if (hmips->global_got_area != GGA_NONE)
9993     {
9994       bfd_vma offset;
9995       bfd_vma value;
9996
9997       value = sym->st_value;
9998       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
9999       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10000     }
10001
10002   if (hmips->global_got_area != GGA_NONE && g->next)
10003     {
10004       struct mips_got_entry e, *p;
10005       bfd_vma entry;
10006       bfd_vma offset;
10007
10008       gg = g;
10009
10010       e.abfd = output_bfd;
10011       e.symndx = -1;
10012       e.d.h = hmips;
10013       e.tls_type = GOT_TLS_NONE;
10014
10015       for (g = g->next; g->next != gg; g = g->next)
10016         {
10017           if (g->got_entries
10018               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10019                                                            &e)))
10020             {
10021               offset = p->gotidx;
10022               BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
10023               if (info->shared
10024                   || (elf_hash_table (info)->dynamic_sections_created
10025                       && p->d.h != NULL
10026                       && p->d.h->root.def_dynamic
10027                       && !p->d.h->root.def_regular))
10028                 {
10029                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10030                      the various compatibility problems, it's easier to mock
10031                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10032                      mips_elf_create_dynamic_relocation to calculate the
10033                      appropriate addend.  */
10034                   Elf_Internal_Rela rel[3];
10035
10036                   memset (rel, 0, sizeof (rel));
10037                   if (ABI_64_P (output_bfd))
10038                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10039                   else
10040                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10041                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10042
10043                   entry = 0;
10044                   if (! (mips_elf_create_dynamic_relocation
10045                          (output_bfd, info, rel,
10046                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10047                     return FALSE;
10048                 }
10049               else
10050                 entry = sym->st_value;
10051               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10052             }
10053         }
10054     }
10055
10056   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10057   name = h->root.root.string;
10058   if (h == elf_hash_table (info)->hdynamic
10059       || h == elf_hash_table (info)->hgot)
10060     sym->st_shndx = SHN_ABS;
10061   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10062            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10063     {
10064       sym->st_shndx = SHN_ABS;
10065       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10066       sym->st_value = 1;
10067     }
10068   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10069     {
10070       sym->st_shndx = SHN_ABS;
10071       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10072       sym->st_value = elf_gp (output_bfd);
10073     }
10074   else if (SGI_COMPAT (output_bfd))
10075     {
10076       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10077           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10078         {
10079           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10080           sym->st_other = STO_PROTECTED;
10081           sym->st_value = 0;
10082           sym->st_shndx = SHN_MIPS_DATA;
10083         }
10084       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10085         {
10086           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10087           sym->st_other = STO_PROTECTED;
10088           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10089           sym->st_shndx = SHN_ABS;
10090         }
10091       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10092         {
10093           if (h->type == STT_FUNC)
10094             sym->st_shndx = SHN_MIPS_TEXT;
10095           else if (h->type == STT_OBJECT)
10096             sym->st_shndx = SHN_MIPS_DATA;
10097         }
10098     }
10099
10100   /* Emit a copy reloc, if needed.  */
10101   if (h->needs_copy)
10102     {
10103       asection *s;
10104       bfd_vma symval;
10105
10106       BFD_ASSERT (h->dynindx != -1);
10107       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10108
10109       s = mips_elf_rel_dyn_section (info, FALSE);
10110       symval = (h->root.u.def.section->output_section->vma
10111                 + h->root.u.def.section->output_offset
10112                 + h->root.u.def.value);
10113       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10114                                           h->dynindx, R_MIPS_COPY, symval);
10115     }
10116
10117   /* Handle the IRIX6-specific symbols.  */
10118   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10119     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10120
10121   /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
10122      to treat compressed symbols like any other.  */
10123   if (ELF_ST_IS_MIPS16 (sym->st_other))
10124     {
10125       BFD_ASSERT (sym->st_value & 1);
10126       sym->st_other -= STO_MIPS16;
10127     }
10128   else if (ELF_ST_IS_MICROMIPS (sym->st_other))
10129     {
10130       BFD_ASSERT (sym->st_value & 1);
10131       sym->st_other -= STO_MICROMIPS;
10132     }
10133
10134   return TRUE;
10135 }
10136
10137 /* Likewise, for VxWorks.  */
10138
10139 bfd_boolean
10140 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10141                                          struct bfd_link_info *info,
10142                                          struct elf_link_hash_entry *h,
10143                                          Elf_Internal_Sym *sym)
10144 {
10145   bfd *dynobj;
10146   asection *sgot;
10147   struct mips_got_info *g;
10148   struct mips_elf_link_hash_table *htab;
10149   struct mips_elf_link_hash_entry *hmips;
10150
10151   htab = mips_elf_hash_table (info);
10152   BFD_ASSERT (htab != NULL);
10153   dynobj = elf_hash_table (info)->dynobj;
10154   hmips = (struct mips_elf_link_hash_entry *) h;
10155
10156   if (h->plt.offset != (bfd_vma) -1)
10157     {
10158       bfd_byte *loc;
10159       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10160       Elf_Internal_Rela rel;
10161       static const bfd_vma *plt_entry;
10162
10163       BFD_ASSERT (h->dynindx != -1);
10164       BFD_ASSERT (htab->splt != NULL);
10165       BFD_ASSERT (h->plt.offset <= htab->splt->size);
10166
10167       /* Calculate the address of the .plt entry.  */
10168       plt_address = (htab->splt->output_section->vma
10169                      + htab->splt->output_offset
10170                      + h->plt.offset);
10171
10172       /* Calculate the index of the entry.  */
10173       plt_index = ((h->plt.offset - htab->plt_header_size)
10174                    / htab->plt_entry_size);
10175
10176       /* Calculate the address of the .got.plt entry.  */
10177       got_address = (htab->sgotplt->output_section->vma
10178                      + htab->sgotplt->output_offset
10179                      + plt_index * 4);
10180
10181       /* Calculate the offset of the .got.plt entry from
10182          _GLOBAL_OFFSET_TABLE_.  */
10183       got_offset = mips_elf_gotplt_index (info, h);
10184
10185       /* Calculate the offset for the branch at the start of the PLT
10186          entry.  The branch jumps to the beginning of .plt.  */
10187       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10188
10189       /* Fill in the initial value of the .got.plt entry.  */
10190       bfd_put_32 (output_bfd, plt_address,
10191                   htab->sgotplt->contents + plt_index * 4);
10192
10193       /* Find out where the .plt entry should go.  */
10194       loc = htab->splt->contents + h->plt.offset;
10195
10196       if (info->shared)
10197         {
10198           plt_entry = mips_vxworks_shared_plt_entry;
10199           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10200           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10201         }
10202       else
10203         {
10204           bfd_vma got_address_high, got_address_low;
10205
10206           plt_entry = mips_vxworks_exec_plt_entry;
10207           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10208           got_address_low = got_address & 0xffff;
10209
10210           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10211           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10212           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10213           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10214           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10215           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10216           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10217           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10218
10219           loc = (htab->srelplt2->contents
10220                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10221
10222           /* Emit a relocation for the .got.plt entry.  */
10223           rel.r_offset = got_address;
10224           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10225           rel.r_addend = h->plt.offset;
10226           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10227
10228           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
10229           loc += sizeof (Elf32_External_Rela);
10230           rel.r_offset = plt_address + 8;
10231           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10232           rel.r_addend = got_offset;
10233           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10234
10235           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
10236           loc += sizeof (Elf32_External_Rela);
10237           rel.r_offset += 4;
10238           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10239           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10240         }
10241
10242       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10243       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10244       rel.r_offset = got_address;
10245       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10246       rel.r_addend = 0;
10247       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10248
10249       if (!h->def_regular)
10250         sym->st_shndx = SHN_UNDEF;
10251     }
10252
10253   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10254
10255   sgot = htab->sgot;
10256   g = htab->got_info;
10257   BFD_ASSERT (g != NULL);
10258
10259   /* See if this symbol has an entry in the GOT.  */
10260   if (hmips->global_got_area != GGA_NONE)
10261     {
10262       bfd_vma offset;
10263       Elf_Internal_Rela outrel;
10264       bfd_byte *loc;
10265       asection *s;
10266
10267       /* Install the symbol value in the GOT.   */
10268       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
10269       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10270
10271       /* Add a dynamic relocation for it.  */
10272       s = mips_elf_rel_dyn_section (info, FALSE);
10273       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10274       outrel.r_offset = (sgot->output_section->vma
10275                          + sgot->output_offset
10276                          + offset);
10277       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10278       outrel.r_addend = 0;
10279       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10280     }
10281
10282   /* Emit a copy reloc, if needed.  */
10283   if (h->needs_copy)
10284     {
10285       Elf_Internal_Rela rel;
10286
10287       BFD_ASSERT (h->dynindx != -1);
10288
10289       rel.r_offset = (h->root.u.def.section->output_section->vma
10290                       + h->root.u.def.section->output_offset
10291                       + h->root.u.def.value);
10292       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10293       rel.r_addend = 0;
10294       bfd_elf32_swap_reloca_out (output_bfd, &rel,
10295                                  htab->srelbss->contents
10296                                  + (htab->srelbss->reloc_count
10297                                     * sizeof (Elf32_External_Rela)));
10298       ++htab->srelbss->reloc_count;
10299     }
10300
10301   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
10302   if (ELF_ST_IS_COMPRESSED (sym->st_other))
10303     sym->st_value &= ~1;
10304
10305   return TRUE;
10306 }
10307
10308 /* Write out a plt0 entry to the beginning of .plt.  */
10309
10310 static void
10311 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10312 {
10313   bfd_byte *loc;
10314   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10315   static const bfd_vma *plt_entry;
10316   struct mips_elf_link_hash_table *htab;
10317
10318   htab = mips_elf_hash_table (info);
10319   BFD_ASSERT (htab != NULL);
10320
10321   if (ABI_64_P (output_bfd))
10322     plt_entry = mips_n64_exec_plt0_entry;
10323   else if (ABI_N32_P (output_bfd))
10324     plt_entry = mips_n32_exec_plt0_entry;
10325   else
10326     plt_entry = mips_o32_exec_plt0_entry;
10327
10328   /* Calculate the value of .got.plt.  */
10329   gotplt_value = (htab->sgotplt->output_section->vma
10330                   + htab->sgotplt->output_offset);
10331   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10332   gotplt_value_low = gotplt_value & 0xffff;
10333
10334   /* The PLT sequence is not safe for N64 if .got.plt's address can
10335      not be loaded in two instructions.  */
10336   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10337               || ~(gotplt_value | 0x7fffffff) == 0);
10338
10339   /* Install the PLT header.  */
10340   loc = htab->splt->contents;
10341   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10342   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10343   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10344   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10345   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10346   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10347   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10348   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10349 }
10350
10351 /* Install the PLT header for a VxWorks executable and finalize the
10352    contents of .rela.plt.unloaded.  */
10353
10354 static void
10355 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10356 {
10357   Elf_Internal_Rela rela;
10358   bfd_byte *loc;
10359   bfd_vma got_value, got_value_high, got_value_low, plt_address;
10360   static const bfd_vma *plt_entry;
10361   struct mips_elf_link_hash_table *htab;
10362
10363   htab = mips_elf_hash_table (info);
10364   BFD_ASSERT (htab != NULL);
10365
10366   plt_entry = mips_vxworks_exec_plt0_entry;
10367
10368   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
10369   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10370                + htab->root.hgot->root.u.def.section->output_offset
10371                + htab->root.hgot->root.u.def.value);
10372
10373   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10374   got_value_low = got_value & 0xffff;
10375
10376   /* Calculate the address of the PLT header.  */
10377   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10378
10379   /* Install the PLT header.  */
10380   loc = htab->splt->contents;
10381   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10382   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10383   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10384   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10385   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10386   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10387
10388   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10389   loc = htab->srelplt2->contents;
10390   rela.r_offset = plt_address;
10391   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10392   rela.r_addend = 0;
10393   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10394   loc += sizeof (Elf32_External_Rela);
10395
10396   /* Output the relocation for the following addiu of
10397      %lo(_GLOBAL_OFFSET_TABLE_).  */
10398   rela.r_offset += 4;
10399   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10400   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10401   loc += sizeof (Elf32_External_Rela);
10402
10403   /* Fix up the remaining relocations.  They may have the wrong
10404      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10405      in which symbols were output.  */
10406   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10407     {
10408       Elf_Internal_Rela rel;
10409
10410       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10411       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10412       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10413       loc += sizeof (Elf32_External_Rela);
10414
10415       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10416       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10417       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10418       loc += sizeof (Elf32_External_Rela);
10419
10420       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10421       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10422       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10423       loc += sizeof (Elf32_External_Rela);
10424     }
10425 }
10426
10427 /* Install the PLT header for a VxWorks shared library.  */
10428
10429 static void
10430 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10431 {
10432   unsigned int i;
10433   struct mips_elf_link_hash_table *htab;
10434
10435   htab = mips_elf_hash_table (info);
10436   BFD_ASSERT (htab != NULL);
10437
10438   /* We just need to copy the entry byte-by-byte.  */
10439   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10440     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10441                 htab->splt->contents + i * 4);
10442 }
10443
10444 /* Finish up the dynamic sections.  */
10445
10446 bfd_boolean
10447 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10448                                        struct bfd_link_info *info)
10449 {
10450   bfd *dynobj;
10451   asection *sdyn;
10452   asection *sgot;
10453   struct mips_got_info *gg, *g;
10454   struct mips_elf_link_hash_table *htab;
10455
10456   htab = mips_elf_hash_table (info);
10457   BFD_ASSERT (htab != NULL);
10458
10459   dynobj = elf_hash_table (info)->dynobj;
10460
10461   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
10462
10463   sgot = htab->sgot;
10464   gg = htab->got_info;
10465
10466   if (elf_hash_table (info)->dynamic_sections_created)
10467     {
10468       bfd_byte *b;
10469       int dyn_to_skip = 0, dyn_skipped = 0;
10470
10471       BFD_ASSERT (sdyn != NULL);
10472       BFD_ASSERT (gg != NULL);
10473
10474       g = mips_elf_bfd_got (output_bfd, FALSE);
10475       BFD_ASSERT (g != NULL);
10476
10477       for (b = sdyn->contents;
10478            b < sdyn->contents + sdyn->size;
10479            b += MIPS_ELF_DYN_SIZE (dynobj))
10480         {
10481           Elf_Internal_Dyn dyn;
10482           const char *name;
10483           size_t elemsize;
10484           asection *s;
10485           bfd_boolean swap_out_p;
10486
10487           /* Read in the current dynamic entry.  */
10488           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10489
10490           /* Assume that we're going to modify it and write it out.  */
10491           swap_out_p = TRUE;
10492
10493           switch (dyn.d_tag)
10494             {
10495             case DT_RELENT:
10496               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10497               break;
10498
10499             case DT_RELAENT:
10500               BFD_ASSERT (htab->is_vxworks);
10501               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10502               break;
10503
10504             case DT_STRSZ:
10505               /* Rewrite DT_STRSZ.  */
10506               dyn.d_un.d_val =
10507                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10508               break;
10509
10510             case DT_PLTGOT:
10511               s = htab->sgot;
10512               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10513               break;
10514
10515             case DT_MIPS_PLTGOT:
10516               s = htab->sgotplt;
10517               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10518               break;
10519
10520             case DT_MIPS_RLD_VERSION:
10521               dyn.d_un.d_val = 1; /* XXX */
10522               break;
10523
10524             case DT_MIPS_FLAGS:
10525               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10526               break;
10527
10528             case DT_MIPS_TIME_STAMP:
10529               {
10530                 time_t t;
10531                 time (&t);
10532                 dyn.d_un.d_val = t;
10533               }
10534               break;
10535
10536             case DT_MIPS_ICHECKSUM:
10537               /* XXX FIXME: */
10538               swap_out_p = FALSE;
10539               break;
10540
10541             case DT_MIPS_IVERSION:
10542               /* XXX FIXME: */
10543               swap_out_p = FALSE;
10544               break;
10545
10546             case DT_MIPS_BASE_ADDRESS:
10547               s = output_bfd->sections;
10548               BFD_ASSERT (s != NULL);
10549               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10550               break;
10551
10552             case DT_MIPS_LOCAL_GOTNO:
10553               dyn.d_un.d_val = g->local_gotno;
10554               break;
10555
10556             case DT_MIPS_UNREFEXTNO:
10557               /* The index into the dynamic symbol table which is the
10558                  entry of the first external symbol that is not
10559                  referenced within the same object.  */
10560               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10561               break;
10562
10563             case DT_MIPS_GOTSYM:
10564               if (htab->global_gotsym)
10565                 {
10566                   dyn.d_un.d_val = htab->global_gotsym->dynindx;
10567                   break;
10568                 }
10569               /* In case if we don't have global got symbols we default
10570                  to setting DT_MIPS_GOTSYM to the same value as
10571                  DT_MIPS_SYMTABNO, so we just fall through.  */
10572
10573             case DT_MIPS_SYMTABNO:
10574               name = ".dynsym";
10575               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10576               s = bfd_get_section_by_name (output_bfd, name);
10577               BFD_ASSERT (s != NULL);
10578
10579               dyn.d_un.d_val = s->size / elemsize;
10580               break;
10581
10582             case DT_MIPS_HIPAGENO:
10583               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10584               break;
10585
10586             case DT_MIPS_RLD_MAP:
10587               {
10588                 struct elf_link_hash_entry *h;
10589                 h = mips_elf_hash_table (info)->rld_symbol;
10590                 if (!h)
10591                   {
10592                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10593                     swap_out_p = FALSE;
10594                     break;
10595                   }
10596                 s = h->root.u.def.section;
10597                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10598                                   + h->root.u.def.value);
10599               }
10600               break;
10601
10602             case DT_MIPS_OPTIONS:
10603               s = (bfd_get_section_by_name
10604                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10605               dyn.d_un.d_ptr = s->vma;
10606               break;
10607
10608             case DT_RELASZ:
10609               BFD_ASSERT (htab->is_vxworks);
10610               /* The count does not include the JUMP_SLOT relocations.  */
10611               if (htab->srelplt)
10612                 dyn.d_un.d_val -= htab->srelplt->size;
10613               break;
10614
10615             case DT_PLTREL:
10616               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10617               if (htab->is_vxworks)
10618                 dyn.d_un.d_val = DT_RELA;
10619               else
10620                 dyn.d_un.d_val = DT_REL;
10621               break;
10622
10623             case DT_PLTRELSZ:
10624               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10625               dyn.d_un.d_val = htab->srelplt->size;
10626               break;
10627
10628             case DT_JMPREL:
10629               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10630               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10631                                 + htab->srelplt->output_offset);
10632               break;
10633
10634             case DT_TEXTREL:
10635               /* If we didn't need any text relocations after all, delete
10636                  the dynamic tag.  */
10637               if (!(info->flags & DF_TEXTREL))
10638                 {
10639                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10640                   swap_out_p = FALSE;
10641                 }
10642               break;
10643
10644             case DT_FLAGS:
10645               /* If we didn't need any text relocations after all, clear
10646                  DF_TEXTREL from DT_FLAGS.  */
10647               if (!(info->flags & DF_TEXTREL))
10648                 dyn.d_un.d_val &= ~DF_TEXTREL;
10649               else
10650                 swap_out_p = FALSE;
10651               break;
10652
10653             default:
10654               swap_out_p = FALSE;
10655               if (htab->is_vxworks
10656                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10657                 swap_out_p = TRUE;
10658               break;
10659             }
10660
10661           if (swap_out_p || dyn_skipped)
10662             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10663               (dynobj, &dyn, b - dyn_skipped);
10664
10665           if (dyn_to_skip)
10666             {
10667               dyn_skipped += dyn_to_skip;
10668               dyn_to_skip = 0;
10669             }
10670         }
10671
10672       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10673       if (dyn_skipped > 0)
10674         memset (b - dyn_skipped, 0, dyn_skipped);
10675     }
10676
10677   if (sgot != NULL && sgot->size > 0
10678       && !bfd_is_abs_section (sgot->output_section))
10679     {
10680       if (htab->is_vxworks)
10681         {
10682           /* The first entry of the global offset table points to the
10683              ".dynamic" section.  The second is initialized by the
10684              loader and contains the shared library identifier.
10685              The third is also initialized by the loader and points
10686              to the lazy resolution stub.  */
10687           MIPS_ELF_PUT_WORD (output_bfd,
10688                              sdyn->output_offset + sdyn->output_section->vma,
10689                              sgot->contents);
10690           MIPS_ELF_PUT_WORD (output_bfd, 0,
10691                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10692           MIPS_ELF_PUT_WORD (output_bfd, 0,
10693                              sgot->contents
10694                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10695         }
10696       else
10697         {
10698           /* The first entry of the global offset table will be filled at
10699              runtime. The second entry will be used by some runtime loaders.
10700              This isn't the case of IRIX rld.  */
10701           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10702           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10703                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10704         }
10705
10706       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10707          = MIPS_ELF_GOT_SIZE (output_bfd);
10708     }
10709
10710   /* Generate dynamic relocations for the non-primary gots.  */
10711   if (gg != NULL && gg->next)
10712     {
10713       Elf_Internal_Rela rel[3];
10714       bfd_vma addend = 0;
10715
10716       memset (rel, 0, sizeof (rel));
10717       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10718
10719       for (g = gg->next; g->next != gg; g = g->next)
10720         {
10721           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10722             + g->next->tls_gotno;
10723
10724           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10725                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10726           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10727                              sgot->contents
10728                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10729
10730           if (! info->shared)
10731             continue;
10732
10733           while (got_index < g->assigned_gotno)
10734             {
10735               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10736                 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10737               if (!(mips_elf_create_dynamic_relocation
10738                     (output_bfd, info, rel, NULL,
10739                      bfd_abs_section_ptr,
10740                      0, &addend, sgot)))
10741                 return FALSE;
10742               BFD_ASSERT (addend == 0);
10743             }
10744         }
10745     }
10746
10747   /* The generation of dynamic relocations for the non-primary gots
10748      adds more dynamic relocations.  We cannot count them until
10749      here.  */
10750
10751   if (elf_hash_table (info)->dynamic_sections_created)
10752     {
10753       bfd_byte *b;
10754       bfd_boolean swap_out_p;
10755
10756       BFD_ASSERT (sdyn != NULL);
10757
10758       for (b = sdyn->contents;
10759            b < sdyn->contents + sdyn->size;
10760            b += MIPS_ELF_DYN_SIZE (dynobj))
10761         {
10762           Elf_Internal_Dyn dyn;
10763           asection *s;
10764
10765           /* Read in the current dynamic entry.  */
10766           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10767
10768           /* Assume that we're going to modify it and write it out.  */
10769           swap_out_p = TRUE;
10770
10771           switch (dyn.d_tag)
10772             {
10773             case DT_RELSZ:
10774               /* Reduce DT_RELSZ to account for any relocations we
10775                  decided not to make.  This is for the n64 irix rld,
10776                  which doesn't seem to apply any relocations if there
10777                  are trailing null entries.  */
10778               s = mips_elf_rel_dyn_section (info, FALSE);
10779               dyn.d_un.d_val = (s->reloc_count
10780                                 * (ABI_64_P (output_bfd)
10781                                    ? sizeof (Elf64_Mips_External_Rel)
10782                                    : sizeof (Elf32_External_Rel)));
10783               /* Adjust the section size too.  Tools like the prelinker
10784                  can reasonably expect the values to the same.  */
10785               elf_section_data (s->output_section)->this_hdr.sh_size
10786                 = dyn.d_un.d_val;
10787               break;
10788
10789             default:
10790               swap_out_p = FALSE;
10791               break;
10792             }
10793
10794           if (swap_out_p)
10795             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10796               (dynobj, &dyn, b);
10797         }
10798     }
10799
10800   {
10801     asection *s;
10802     Elf32_compact_rel cpt;
10803
10804     if (SGI_COMPAT (output_bfd))
10805       {
10806         /* Write .compact_rel section out.  */
10807         s = bfd_get_linker_section (dynobj, ".compact_rel");
10808         if (s != NULL)
10809           {
10810             cpt.id1 = 1;
10811             cpt.num = s->reloc_count;
10812             cpt.id2 = 2;
10813             cpt.offset = (s->output_section->filepos
10814                           + sizeof (Elf32_External_compact_rel));
10815             cpt.reserved0 = 0;
10816             cpt.reserved1 = 0;
10817             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10818                                             ((Elf32_External_compact_rel *)
10819                                              s->contents));
10820
10821             /* Clean up a dummy stub function entry in .text.  */
10822             if (htab->sstubs != NULL)
10823               {
10824                 file_ptr dummy_offset;
10825
10826                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10827                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10828                 memset (htab->sstubs->contents + dummy_offset, 0,
10829                         htab->function_stub_size);
10830               }
10831           }
10832       }
10833
10834     /* The psABI says that the dynamic relocations must be sorted in
10835        increasing order of r_symndx.  The VxWorks EABI doesn't require
10836        this, and because the code below handles REL rather than RELA
10837        relocations, using it for VxWorks would be outright harmful.  */
10838     if (!htab->is_vxworks)
10839       {
10840         s = mips_elf_rel_dyn_section (info, FALSE);
10841         if (s != NULL
10842             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10843           {
10844             reldyn_sorting_bfd = output_bfd;
10845
10846             if (ABI_64_P (output_bfd))
10847               qsort ((Elf64_External_Rel *) s->contents + 1,
10848                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10849                      sort_dynamic_relocs_64);
10850             else
10851               qsort ((Elf32_External_Rel *) s->contents + 1,
10852                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
10853                      sort_dynamic_relocs);
10854           }
10855       }
10856   }
10857
10858   if (htab->splt && htab->splt->size > 0)
10859     {
10860       if (htab->is_vxworks)
10861         {
10862           if (info->shared)
10863             mips_vxworks_finish_shared_plt (output_bfd, info);
10864           else
10865             mips_vxworks_finish_exec_plt (output_bfd, info);
10866         }
10867       else
10868         {
10869           BFD_ASSERT (!info->shared);
10870           mips_finish_exec_plt (output_bfd, info);
10871         }
10872     }
10873   return TRUE;
10874 }
10875
10876
10877 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10878
10879 static void
10880 mips_set_isa_flags (bfd *abfd)
10881 {
10882   flagword val;
10883
10884   switch (bfd_get_mach (abfd))
10885     {
10886     default:
10887     case bfd_mach_mips3000:
10888       val = E_MIPS_ARCH_1;
10889       break;
10890
10891     case bfd_mach_mips3900:
10892       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10893       break;
10894
10895     case bfd_mach_mips6000:
10896       val = E_MIPS_ARCH_2;
10897       break;
10898
10899     case bfd_mach_mips4000:
10900     case bfd_mach_mips4300:
10901     case bfd_mach_mips4400:
10902     case bfd_mach_mips4600:
10903       val = E_MIPS_ARCH_3;
10904       break;
10905
10906     case bfd_mach_mips4010:
10907       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
10908       break;
10909
10910     case bfd_mach_mips4100:
10911       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
10912       break;
10913
10914     case bfd_mach_mips4111:
10915       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
10916       break;
10917
10918     case bfd_mach_mips4120:
10919       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
10920       break;
10921
10922     case bfd_mach_mips4650:
10923       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
10924       break;
10925
10926     case bfd_mach_mips5400:
10927       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
10928       break;
10929
10930     case bfd_mach_mips5500:
10931       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
10932       break;
10933
10934     case bfd_mach_mips5900:
10935       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
10936       break;
10937
10938     case bfd_mach_mips9000:
10939       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
10940       break;
10941
10942     case bfd_mach_mips5000:
10943     case bfd_mach_mips7000:
10944     case bfd_mach_mips8000:
10945     case bfd_mach_mips10000:
10946     case bfd_mach_mips12000:
10947     case bfd_mach_mips14000:
10948     case bfd_mach_mips16000:
10949       val = E_MIPS_ARCH_4;
10950       break;
10951
10952     case bfd_mach_mips5:
10953       val = E_MIPS_ARCH_5;
10954       break;
10955
10956     case bfd_mach_mips_loongson_2e:
10957       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
10958       break;
10959
10960     case bfd_mach_mips_loongson_2f:
10961       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
10962       break;
10963
10964     case bfd_mach_mips_sb1:
10965       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
10966       break;
10967
10968     case bfd_mach_mips_loongson_3a:
10969       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
10970       break;
10971
10972     case bfd_mach_mips_octeon:
10973     case bfd_mach_mips_octeonp:
10974       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
10975       break;
10976
10977     case bfd_mach_mips_xlr:
10978       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
10979       break;
10980
10981     case bfd_mach_mips_octeon2:
10982       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
10983       break;
10984
10985     case bfd_mach_mipsisa32:
10986       val = E_MIPS_ARCH_32;
10987       break;
10988
10989     case bfd_mach_mipsisa64:
10990       val = E_MIPS_ARCH_64;
10991       break;
10992
10993     case bfd_mach_mipsisa32r2:
10994       val = E_MIPS_ARCH_32R2;
10995       break;
10996
10997     case bfd_mach_mipsisa64r2:
10998       val = E_MIPS_ARCH_64R2;
10999       break;
11000     }
11001   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11002   elf_elfheader (abfd)->e_flags |= val;
11003
11004 }
11005
11006
11007 /* The final processing done just before writing out a MIPS ELF object
11008    file.  This gets the MIPS architecture right based on the machine
11009    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11010
11011 void
11012 _bfd_mips_elf_final_write_processing (bfd *abfd,
11013                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11014 {
11015   unsigned int i;
11016   Elf_Internal_Shdr **hdrpp;
11017   const char *name;
11018   asection *sec;
11019
11020   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11021      is nonzero.  This is for compatibility with old objects, which used
11022      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11023   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11024     mips_set_isa_flags (abfd);
11025
11026   /* Set the sh_info field for .gptab sections and other appropriate
11027      info for each special section.  */
11028   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11029        i < elf_numsections (abfd);
11030        i++, hdrpp++)
11031     {
11032       switch ((*hdrpp)->sh_type)
11033         {
11034         case SHT_MIPS_MSYM:
11035         case SHT_MIPS_LIBLIST:
11036           sec = bfd_get_section_by_name (abfd, ".dynstr");
11037           if (sec != NULL)
11038             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11039           break;
11040
11041         case SHT_MIPS_GPTAB:
11042           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11043           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11044           BFD_ASSERT (name != NULL
11045                       && CONST_STRNEQ (name, ".gptab."));
11046           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11047           BFD_ASSERT (sec != NULL);
11048           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11049           break;
11050
11051         case SHT_MIPS_CONTENT:
11052           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11053           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11054           BFD_ASSERT (name != NULL
11055                       && CONST_STRNEQ (name, ".MIPS.content"));
11056           sec = bfd_get_section_by_name (abfd,
11057                                          name + sizeof ".MIPS.content" - 1);
11058           BFD_ASSERT (sec != NULL);
11059           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11060           break;
11061
11062         case SHT_MIPS_SYMBOL_LIB:
11063           sec = bfd_get_section_by_name (abfd, ".dynsym");
11064           if (sec != NULL)
11065             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11066           sec = bfd_get_section_by_name (abfd, ".liblist");
11067           if (sec != NULL)
11068             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11069           break;
11070
11071         case SHT_MIPS_EVENTS:
11072           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11073           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11074           BFD_ASSERT (name != NULL);
11075           if (CONST_STRNEQ (name, ".MIPS.events"))
11076             sec = bfd_get_section_by_name (abfd,
11077                                            name + sizeof ".MIPS.events" - 1);
11078           else
11079             {
11080               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
11081               sec = bfd_get_section_by_name (abfd,
11082                                              (name
11083                                               + sizeof ".MIPS.post_rel" - 1));
11084             }
11085           BFD_ASSERT (sec != NULL);
11086           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11087           break;
11088
11089         }
11090     }
11091 }
11092 \f
11093 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
11094    segments.  */
11095
11096 int
11097 _bfd_mips_elf_additional_program_headers (bfd *abfd,
11098                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
11099 {
11100   asection *s;
11101   int ret = 0;
11102
11103   /* See if we need a PT_MIPS_REGINFO segment.  */
11104   s = bfd_get_section_by_name (abfd, ".reginfo");
11105   if (s && (s->flags & SEC_LOAD))
11106     ++ret;
11107
11108   /* See if we need a PT_MIPS_OPTIONS segment.  */
11109   if (IRIX_COMPAT (abfd) == ict_irix6
11110       && bfd_get_section_by_name (abfd,
11111                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11112     ++ret;
11113
11114   /* See if we need a PT_MIPS_RTPROC segment.  */
11115   if (IRIX_COMPAT (abfd) == ict_irix5
11116       && bfd_get_section_by_name (abfd, ".dynamic")
11117       && bfd_get_section_by_name (abfd, ".mdebug"))
11118     ++ret;
11119
11120   /* Allocate a PT_NULL header in dynamic objects.  See
11121      _bfd_mips_elf_modify_segment_map for details.  */
11122   if (!SGI_COMPAT (abfd)
11123       && bfd_get_section_by_name (abfd, ".dynamic"))
11124     ++ret;
11125
11126   return ret;
11127 }
11128
11129 /* Modify the segment map for an IRIX5 executable.  */
11130
11131 bfd_boolean
11132 _bfd_mips_elf_modify_segment_map (bfd *abfd,
11133                                   struct bfd_link_info *info)
11134 {
11135   asection *s;
11136   struct elf_segment_map *m, **pm;
11137   bfd_size_type amt;
11138
11139   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11140      segment.  */
11141   s = bfd_get_section_by_name (abfd, ".reginfo");
11142   if (s != NULL && (s->flags & SEC_LOAD) != 0)
11143     {
11144       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11145         if (m->p_type == PT_MIPS_REGINFO)
11146           break;
11147       if (m == NULL)
11148         {
11149           amt = sizeof *m;
11150           m = bfd_zalloc (abfd, amt);
11151           if (m == NULL)
11152             return FALSE;
11153
11154           m->p_type = PT_MIPS_REGINFO;
11155           m->count = 1;
11156           m->sections[0] = s;
11157
11158           /* We want to put it after the PHDR and INTERP segments.  */
11159           pm = &elf_tdata (abfd)->segment_map;
11160           while (*pm != NULL
11161                  && ((*pm)->p_type == PT_PHDR
11162                      || (*pm)->p_type == PT_INTERP))
11163             pm = &(*pm)->next;
11164
11165           m->next = *pm;
11166           *pm = m;
11167         }
11168     }
11169
11170   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11171      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
11172      PT_MIPS_OPTIONS segment immediately following the program header
11173      table.  */
11174   if (NEWABI_P (abfd)
11175       /* On non-IRIX6 new abi, we'll have already created a segment
11176          for this section, so don't create another.  I'm not sure this
11177          is not also the case for IRIX 6, but I can't test it right
11178          now.  */
11179       && IRIX_COMPAT (abfd) == ict_irix6)
11180     {
11181       for (s = abfd->sections; s; s = s->next)
11182         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11183           break;
11184
11185       if (s)
11186         {
11187           struct elf_segment_map *options_segment;
11188
11189           pm = &elf_tdata (abfd)->segment_map;
11190           while (*pm != NULL
11191                  && ((*pm)->p_type == PT_PHDR
11192                      || (*pm)->p_type == PT_INTERP))
11193             pm = &(*pm)->next;
11194
11195           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11196             {
11197               amt = sizeof (struct elf_segment_map);
11198               options_segment = bfd_zalloc (abfd, amt);
11199               options_segment->next = *pm;
11200               options_segment->p_type = PT_MIPS_OPTIONS;
11201               options_segment->p_flags = PF_R;
11202               options_segment->p_flags_valid = TRUE;
11203               options_segment->count = 1;
11204               options_segment->sections[0] = s;
11205               *pm = options_segment;
11206             }
11207         }
11208     }
11209   else
11210     {
11211       if (IRIX_COMPAT (abfd) == ict_irix5)
11212         {
11213           /* If there are .dynamic and .mdebug sections, we make a room
11214              for the RTPROC header.  FIXME: Rewrite without section names.  */
11215           if (bfd_get_section_by_name (abfd, ".interp") == NULL
11216               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11217               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11218             {
11219               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11220                 if (m->p_type == PT_MIPS_RTPROC)
11221                   break;
11222               if (m == NULL)
11223                 {
11224                   amt = sizeof *m;
11225                   m = bfd_zalloc (abfd, amt);
11226                   if (m == NULL)
11227                     return FALSE;
11228
11229                   m->p_type = PT_MIPS_RTPROC;
11230
11231                   s = bfd_get_section_by_name (abfd, ".rtproc");
11232                   if (s == NULL)
11233                     {
11234                       m->count = 0;
11235                       m->p_flags = 0;
11236                       m->p_flags_valid = 1;
11237                     }
11238                   else
11239                     {
11240                       m->count = 1;
11241                       m->sections[0] = s;
11242                     }
11243
11244                   /* We want to put it after the DYNAMIC segment.  */
11245                   pm = &elf_tdata (abfd)->segment_map;
11246                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11247                     pm = &(*pm)->next;
11248                   if (*pm != NULL)
11249                     pm = &(*pm)->next;
11250
11251                   m->next = *pm;
11252                   *pm = m;
11253                 }
11254             }
11255         }
11256       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
11257          .dynstr, .dynsym, and .hash sections, and everything in
11258          between.  */
11259       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
11260            pm = &(*pm)->next)
11261         if ((*pm)->p_type == PT_DYNAMIC)
11262           break;
11263       m = *pm;
11264       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11265         {
11266           /* For a normal mips executable the permissions for the PT_DYNAMIC
11267              segment are read, write and execute. We do that here since
11268              the code in elf.c sets only the read permission. This matters
11269              sometimes for the dynamic linker.  */
11270           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11271             {
11272               m->p_flags = PF_R | PF_W | PF_X;
11273               m->p_flags_valid = 1;
11274             }
11275         }
11276       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11277          glibc's dynamic linker has traditionally derived the number of
11278          tags from the p_filesz field, and sometimes allocates stack
11279          arrays of that size.  An overly-big PT_DYNAMIC segment can
11280          be actively harmful in such cases.  Making PT_DYNAMIC contain
11281          other sections can also make life hard for the prelinker,
11282          which might move one of the other sections to a different
11283          PT_LOAD segment.  */
11284       if (SGI_COMPAT (abfd)
11285           && m != NULL
11286           && m->count == 1
11287           && strcmp (m->sections[0]->name, ".dynamic") == 0)
11288         {
11289           static const char *sec_names[] =
11290           {
11291             ".dynamic", ".dynstr", ".dynsym", ".hash"
11292           };
11293           bfd_vma low, high;
11294           unsigned int i, c;
11295           struct elf_segment_map *n;
11296
11297           low = ~(bfd_vma) 0;
11298           high = 0;
11299           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11300             {
11301               s = bfd_get_section_by_name (abfd, sec_names[i]);
11302               if (s != NULL && (s->flags & SEC_LOAD) != 0)
11303                 {
11304                   bfd_size_type sz;
11305
11306                   if (low > s->vma)
11307                     low = s->vma;
11308                   sz = s->size;
11309                   if (high < s->vma + sz)
11310                     high = s->vma + sz;
11311                 }
11312             }
11313
11314           c = 0;
11315           for (s = abfd->sections; s != NULL; s = s->next)
11316             if ((s->flags & SEC_LOAD) != 0
11317                 && s->vma >= low
11318                 && s->vma + s->size <= high)
11319               ++c;
11320
11321           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
11322           n = bfd_zalloc (abfd, amt);
11323           if (n == NULL)
11324             return FALSE;
11325           *n = *m;
11326           n->count = c;
11327
11328           i = 0;
11329           for (s = abfd->sections; s != NULL; s = s->next)
11330             {
11331               if ((s->flags & SEC_LOAD) != 0
11332                   && s->vma >= low
11333                   && s->vma + s->size <= high)
11334                 {
11335                   n->sections[i] = s;
11336                   ++i;
11337                 }
11338             }
11339
11340           *pm = n;
11341         }
11342     }
11343
11344   /* Allocate a spare program header in dynamic objects so that tools
11345      like the prelinker can add an extra PT_LOAD entry.
11346
11347      If the prelinker needs to make room for a new PT_LOAD entry, its
11348      standard procedure is to move the first (read-only) sections into
11349      the new (writable) segment.  However, the MIPS ABI requires
11350      .dynamic to be in a read-only segment, and the section will often
11351      start within sizeof (ElfNN_Phdr) bytes of the last program header.
11352
11353      Although the prelinker could in principle move .dynamic to a
11354      writable segment, it seems better to allocate a spare program
11355      header instead, and avoid the need to move any sections.
11356      There is a long tradition of allocating spare dynamic tags,
11357      so allocating a spare program header seems like a natural
11358      extension.
11359
11360      If INFO is NULL, we may be copying an already prelinked binary
11361      with objcopy or strip, so do not add this header.  */
11362   if (info != NULL
11363       && !SGI_COMPAT (abfd)
11364       && bfd_get_section_by_name (abfd, ".dynamic"))
11365     {
11366       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
11367         if ((*pm)->p_type == PT_NULL)
11368           break;
11369       if (*pm == NULL)
11370         {
11371           m = bfd_zalloc (abfd, sizeof (*m));
11372           if (m == NULL)
11373             return FALSE;
11374
11375           m->p_type = PT_NULL;
11376           *pm = m;
11377         }
11378     }
11379
11380   return TRUE;
11381 }
11382 \f
11383 /* Return the section that should be marked against GC for a given
11384    relocation.  */
11385
11386 asection *
11387 _bfd_mips_elf_gc_mark_hook (asection *sec,
11388                             struct bfd_link_info *info,
11389                             Elf_Internal_Rela *rel,
11390                             struct elf_link_hash_entry *h,
11391                             Elf_Internal_Sym *sym)
11392 {
11393   /* ??? Do mips16 stub sections need to be handled special?  */
11394
11395   if (h != NULL)
11396     switch (ELF_R_TYPE (sec->owner, rel->r_info))
11397       {
11398       case R_MIPS_GNU_VTINHERIT:
11399       case R_MIPS_GNU_VTENTRY:
11400         return NULL;
11401       }
11402
11403   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11404 }
11405
11406 /* Update the got entry reference counts for the section being removed.  */
11407
11408 bfd_boolean
11409 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11410                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
11411                              asection *sec ATTRIBUTE_UNUSED,
11412                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11413 {
11414 #if 0
11415   Elf_Internal_Shdr *symtab_hdr;
11416   struct elf_link_hash_entry **sym_hashes;
11417   bfd_signed_vma *local_got_refcounts;
11418   const Elf_Internal_Rela *rel, *relend;
11419   unsigned long r_symndx;
11420   struct elf_link_hash_entry *h;
11421
11422   if (info->relocatable)
11423     return TRUE;
11424
11425   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11426   sym_hashes = elf_sym_hashes (abfd);
11427   local_got_refcounts = elf_local_got_refcounts (abfd);
11428
11429   relend = relocs + sec->reloc_count;
11430   for (rel = relocs; rel < relend; rel++)
11431     switch (ELF_R_TYPE (abfd, rel->r_info))
11432       {
11433       case R_MIPS16_GOT16:
11434       case R_MIPS16_CALL16:
11435       case R_MIPS_GOT16:
11436       case R_MIPS_CALL16:
11437       case R_MIPS_CALL_HI16:
11438       case R_MIPS_CALL_LO16:
11439       case R_MIPS_GOT_HI16:
11440       case R_MIPS_GOT_LO16:
11441       case R_MIPS_GOT_DISP:
11442       case R_MIPS_GOT_PAGE:
11443       case R_MIPS_GOT_OFST:
11444       case R_MICROMIPS_GOT16:
11445       case R_MICROMIPS_CALL16:
11446       case R_MICROMIPS_CALL_HI16:
11447       case R_MICROMIPS_CALL_LO16:
11448       case R_MICROMIPS_GOT_HI16:
11449       case R_MICROMIPS_GOT_LO16:
11450       case R_MICROMIPS_GOT_DISP:
11451       case R_MICROMIPS_GOT_PAGE:
11452       case R_MICROMIPS_GOT_OFST:
11453         /* ??? It would seem that the existing MIPS code does no sort
11454            of reference counting or whatnot on its GOT and PLT entries,
11455            so it is not possible to garbage collect them at this time.  */
11456         break;
11457
11458       default:
11459         break;
11460       }
11461 #endif
11462
11463   return TRUE;
11464 }
11465 \f
11466 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11467    hiding the old indirect symbol.  Process additional relocation
11468    information.  Also called for weakdefs, in which case we just let
11469    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11470
11471 void
11472 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11473                                     struct elf_link_hash_entry *dir,
11474                                     struct elf_link_hash_entry *ind)
11475 {
11476   struct mips_elf_link_hash_entry *dirmips, *indmips;
11477
11478   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11479
11480   dirmips = (struct mips_elf_link_hash_entry *) dir;
11481   indmips = (struct mips_elf_link_hash_entry *) ind;
11482   /* Any absolute non-dynamic relocations against an indirect or weak
11483      definition will be against the target symbol.  */
11484   if (indmips->has_static_relocs)
11485     dirmips->has_static_relocs = TRUE;
11486
11487   if (ind->root.type != bfd_link_hash_indirect)
11488     return;
11489
11490   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11491   if (indmips->readonly_reloc)
11492     dirmips->readonly_reloc = TRUE;
11493   if (indmips->no_fn_stub)
11494     dirmips->no_fn_stub = TRUE;
11495   if (indmips->fn_stub)
11496     {
11497       dirmips->fn_stub = indmips->fn_stub;
11498       indmips->fn_stub = NULL;
11499     }
11500   if (indmips->need_fn_stub)
11501     {
11502       dirmips->need_fn_stub = TRUE;
11503       indmips->need_fn_stub = FALSE;
11504     }
11505   if (indmips->call_stub)
11506     {
11507       dirmips->call_stub = indmips->call_stub;
11508       indmips->call_stub = NULL;
11509     }
11510   if (indmips->call_fp_stub)
11511     {
11512       dirmips->call_fp_stub = indmips->call_fp_stub;
11513       indmips->call_fp_stub = NULL;
11514     }
11515   if (indmips->global_got_area < dirmips->global_got_area)
11516     dirmips->global_got_area = indmips->global_got_area;
11517   if (indmips->global_got_area < GGA_NONE)
11518     indmips->global_got_area = GGA_NONE;
11519   if (indmips->has_nonpic_branches)
11520     dirmips->has_nonpic_branches = TRUE;
11521 }
11522 \f
11523 #define PDR_SIZE 32
11524
11525 bfd_boolean
11526 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11527                             struct bfd_link_info *info)
11528 {
11529   asection *o;
11530   bfd_boolean ret = FALSE;
11531   unsigned char *tdata;
11532   size_t i, skip;
11533
11534   o = bfd_get_section_by_name (abfd, ".pdr");
11535   if (! o)
11536     return FALSE;
11537   if (o->size == 0)
11538     return FALSE;
11539   if (o->size % PDR_SIZE != 0)
11540     return FALSE;
11541   if (o->output_section != NULL
11542       && bfd_is_abs_section (o->output_section))
11543     return FALSE;
11544
11545   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11546   if (! tdata)
11547     return FALSE;
11548
11549   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11550                                             info->keep_memory);
11551   if (!cookie->rels)
11552     {
11553       free (tdata);
11554       return FALSE;
11555     }
11556
11557   cookie->rel = cookie->rels;
11558   cookie->relend = cookie->rels + o->reloc_count;
11559
11560   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11561     {
11562       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11563         {
11564           tdata[i] = 1;
11565           skip ++;
11566         }
11567     }
11568
11569   if (skip != 0)
11570     {
11571       mips_elf_section_data (o)->u.tdata = tdata;
11572       o->size -= skip * PDR_SIZE;
11573       ret = TRUE;
11574     }
11575   else
11576     free (tdata);
11577
11578   if (! info->keep_memory)
11579     free (cookie->rels);
11580
11581   return ret;
11582 }
11583
11584 bfd_boolean
11585 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11586 {
11587   if (strcmp (sec->name, ".pdr") == 0)
11588     return TRUE;
11589   return FALSE;
11590 }
11591
11592 bfd_boolean
11593 _bfd_mips_elf_write_section (bfd *output_bfd,
11594                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11595                              asection *sec, bfd_byte *contents)
11596 {
11597   bfd_byte *to, *from, *end;
11598   int i;
11599
11600   if (strcmp (sec->name, ".pdr") != 0)
11601     return FALSE;
11602
11603   if (mips_elf_section_data (sec)->u.tdata == NULL)
11604     return FALSE;
11605
11606   to = contents;
11607   end = contents + sec->size;
11608   for (from = contents, i = 0;
11609        from < end;
11610        from += PDR_SIZE, i++)
11611     {
11612       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11613         continue;
11614       if (to != from)
11615         memcpy (to, from, PDR_SIZE);
11616       to += PDR_SIZE;
11617     }
11618   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11619                             sec->output_offset, sec->size);
11620   return TRUE;
11621 }
11622 \f
11623 /* microMIPS code retains local labels for linker relaxation.  Omit them
11624    from output by default for clarity.  */
11625
11626 bfd_boolean
11627 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11628 {
11629   return _bfd_elf_is_local_label_name (abfd, sym->name);
11630 }
11631
11632 /* MIPS ELF uses a special find_nearest_line routine in order the
11633    handle the ECOFF debugging information.  */
11634
11635 struct mips_elf_find_line
11636 {
11637   struct ecoff_debug_info d;
11638   struct ecoff_find_line i;
11639 };
11640
11641 bfd_boolean
11642 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11643                                  asymbol **symbols, bfd_vma offset,
11644                                  const char **filename_ptr,
11645                                  const char **functionname_ptr,
11646                                  unsigned int *line_ptr)
11647 {
11648   asection *msec;
11649
11650   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11651                                      filename_ptr, functionname_ptr,
11652                                      line_ptr))
11653     return TRUE;
11654
11655   if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11656                                      section, symbols, offset,
11657                                      filename_ptr, functionname_ptr,
11658                                      line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
11659                                      &elf_tdata (abfd)->dwarf2_find_line_info))
11660     return TRUE;
11661
11662   msec = bfd_get_section_by_name (abfd, ".mdebug");
11663   if (msec != NULL)
11664     {
11665       flagword origflags;
11666       struct mips_elf_find_line *fi;
11667       const struct ecoff_debug_swap * const swap =
11668         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11669
11670       /* If we are called during a link, mips_elf_final_link may have
11671          cleared the SEC_HAS_CONTENTS field.  We force it back on here
11672          if appropriate (which it normally will be).  */
11673       origflags = msec->flags;
11674       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11675         msec->flags |= SEC_HAS_CONTENTS;
11676
11677       fi = mips_elf_tdata (abfd)->find_line_info;
11678       if (fi == NULL)
11679         {
11680           bfd_size_type external_fdr_size;
11681           char *fraw_src;
11682           char *fraw_end;
11683           struct fdr *fdr_ptr;
11684           bfd_size_type amt = sizeof (struct mips_elf_find_line);
11685
11686           fi = bfd_zalloc (abfd, amt);
11687           if (fi == NULL)
11688             {
11689               msec->flags = origflags;
11690               return FALSE;
11691             }
11692
11693           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11694             {
11695               msec->flags = origflags;
11696               return FALSE;
11697             }
11698
11699           /* Swap in the FDR information.  */
11700           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11701           fi->d.fdr = bfd_alloc (abfd, amt);
11702           if (fi->d.fdr == NULL)
11703             {
11704               msec->flags = origflags;
11705               return FALSE;
11706             }
11707           external_fdr_size = swap->external_fdr_size;
11708           fdr_ptr = fi->d.fdr;
11709           fraw_src = (char *) fi->d.external_fdr;
11710           fraw_end = (fraw_src
11711                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
11712           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11713             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11714
11715           mips_elf_tdata (abfd)->find_line_info = fi;
11716
11717           /* Note that we don't bother to ever free this information.
11718              find_nearest_line is either called all the time, as in
11719              objdump -l, so the information should be saved, or it is
11720              rarely called, as in ld error messages, so the memory
11721              wasted is unimportant.  Still, it would probably be a
11722              good idea for free_cached_info to throw it away.  */
11723         }
11724
11725       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11726                                   &fi->i, filename_ptr, functionname_ptr,
11727                                   line_ptr))
11728         {
11729           msec->flags = origflags;
11730           return TRUE;
11731         }
11732
11733       msec->flags = origflags;
11734     }
11735
11736   /* Fall back on the generic ELF find_nearest_line routine.  */
11737
11738   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11739                                      filename_ptr, functionname_ptr,
11740                                      line_ptr);
11741 }
11742
11743 bfd_boolean
11744 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11745                                  const char **filename_ptr,
11746                                  const char **functionname_ptr,
11747                                  unsigned int *line_ptr)
11748 {
11749   bfd_boolean found;
11750   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11751                                          functionname_ptr, line_ptr,
11752                                          & elf_tdata (abfd)->dwarf2_find_line_info);
11753   return found;
11754 }
11755
11756 \f
11757 /* When are writing out the .options or .MIPS.options section,
11758    remember the bytes we are writing out, so that we can install the
11759    GP value in the section_processing routine.  */
11760
11761 bfd_boolean
11762 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11763                                     const void *location,
11764                                     file_ptr offset, bfd_size_type count)
11765 {
11766   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11767     {
11768       bfd_byte *c;
11769
11770       if (elf_section_data (section) == NULL)
11771         {
11772           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11773           section->used_by_bfd = bfd_zalloc (abfd, amt);
11774           if (elf_section_data (section) == NULL)
11775             return FALSE;
11776         }
11777       c = mips_elf_section_data (section)->u.tdata;
11778       if (c == NULL)
11779         {
11780           c = bfd_zalloc (abfd, section->size);
11781           if (c == NULL)
11782             return FALSE;
11783           mips_elf_section_data (section)->u.tdata = c;
11784         }
11785
11786       memcpy (c + offset, location, count);
11787     }
11788
11789   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11790                                         count);
11791 }
11792
11793 /* This is almost identical to bfd_generic_get_... except that some
11794    MIPS relocations need to be handled specially.  Sigh.  */
11795
11796 bfd_byte *
11797 _bfd_elf_mips_get_relocated_section_contents
11798   (bfd *abfd,
11799    struct bfd_link_info *link_info,
11800    struct bfd_link_order *link_order,
11801    bfd_byte *data,
11802    bfd_boolean relocatable,
11803    asymbol **symbols)
11804 {
11805   /* Get enough memory to hold the stuff */
11806   bfd *input_bfd = link_order->u.indirect.section->owner;
11807   asection *input_section = link_order->u.indirect.section;
11808   bfd_size_type sz;
11809
11810   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11811   arelent **reloc_vector = NULL;
11812   long reloc_count;
11813
11814   if (reloc_size < 0)
11815     goto error_return;
11816
11817   reloc_vector = bfd_malloc (reloc_size);
11818   if (reloc_vector == NULL && reloc_size != 0)
11819     goto error_return;
11820
11821   /* read in the section */
11822   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11823   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11824     goto error_return;
11825
11826   reloc_count = bfd_canonicalize_reloc (input_bfd,
11827                                         input_section,
11828                                         reloc_vector,
11829                                         symbols);
11830   if (reloc_count < 0)
11831     goto error_return;
11832
11833   if (reloc_count > 0)
11834     {
11835       arelent **parent;
11836       /* for mips */
11837       int gp_found;
11838       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
11839
11840       {
11841         struct bfd_hash_entry *h;
11842         struct bfd_link_hash_entry *lh;
11843         /* Skip all this stuff if we aren't mixing formats.  */
11844         if (abfd && input_bfd
11845             && abfd->xvec == input_bfd->xvec)
11846           lh = 0;
11847         else
11848           {
11849             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11850             lh = (struct bfd_link_hash_entry *) h;
11851           }
11852       lookup:
11853         if (lh)
11854           {
11855             switch (lh->type)
11856               {
11857               case bfd_link_hash_undefined:
11858               case bfd_link_hash_undefweak:
11859               case bfd_link_hash_common:
11860                 gp_found = 0;
11861                 break;
11862               case bfd_link_hash_defined:
11863               case bfd_link_hash_defweak:
11864                 gp_found = 1;
11865                 gp = lh->u.def.value;
11866                 break;
11867               case bfd_link_hash_indirect:
11868               case bfd_link_hash_warning:
11869                 lh = lh->u.i.link;
11870                 /* @@FIXME  ignoring warning for now */
11871                 goto lookup;
11872               case bfd_link_hash_new:
11873               default:
11874                 abort ();
11875               }
11876           }
11877         else
11878           gp_found = 0;
11879       }
11880       /* end mips */
11881       for (parent = reloc_vector; *parent != NULL; parent++)
11882         {
11883           char *error_message = NULL;
11884           bfd_reloc_status_type r;
11885
11886           /* Specific to MIPS: Deal with relocation types that require
11887              knowing the gp of the output bfd.  */
11888           asymbol *sym = *(*parent)->sym_ptr_ptr;
11889
11890           /* If we've managed to find the gp and have a special
11891              function for the relocation then go ahead, else default
11892              to the generic handling.  */
11893           if (gp_found
11894               && (*parent)->howto->special_function
11895               == _bfd_mips_elf32_gprel16_reloc)
11896             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11897                                                input_section, relocatable,
11898                                                data, gp);
11899           else
11900             r = bfd_perform_relocation (input_bfd, *parent, data,
11901                                         input_section,
11902                                         relocatable ? abfd : NULL,
11903                                         &error_message);
11904
11905           if (relocatable)
11906             {
11907               asection *os = input_section->output_section;
11908
11909               /* A partial link, so keep the relocs */
11910               os->orelocation[os->reloc_count] = *parent;
11911               os->reloc_count++;
11912             }
11913
11914           if (r != bfd_reloc_ok)
11915             {
11916               switch (r)
11917                 {
11918                 case bfd_reloc_undefined:
11919                   if (!((*link_info->callbacks->undefined_symbol)
11920                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11921                          input_bfd, input_section, (*parent)->address, TRUE)))
11922                     goto error_return;
11923                   break;
11924                 case bfd_reloc_dangerous:
11925                   BFD_ASSERT (error_message != NULL);
11926                   if (!((*link_info->callbacks->reloc_dangerous)
11927                         (link_info, error_message, input_bfd, input_section,
11928                          (*parent)->address)))
11929                     goto error_return;
11930                   break;
11931                 case bfd_reloc_overflow:
11932                   if (!((*link_info->callbacks->reloc_overflow)
11933                         (link_info, NULL,
11934                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11935                          (*parent)->howto->name, (*parent)->addend,
11936                          input_bfd, input_section, (*parent)->address)))
11937                     goto error_return;
11938                   break;
11939                 case bfd_reloc_outofrange:
11940                 default:
11941                   abort ();
11942                   break;
11943                 }
11944
11945             }
11946         }
11947     }
11948   if (reloc_vector != NULL)
11949     free (reloc_vector);
11950   return data;
11951
11952 error_return:
11953   if (reloc_vector != NULL)
11954     free (reloc_vector);
11955   return NULL;
11956 }
11957 \f
11958 static bfd_boolean
11959 mips_elf_relax_delete_bytes (bfd *abfd,
11960                              asection *sec, bfd_vma addr, int count)
11961 {
11962   Elf_Internal_Shdr *symtab_hdr;
11963   unsigned int sec_shndx;
11964   bfd_byte *contents;
11965   Elf_Internal_Rela *irel, *irelend;
11966   Elf_Internal_Sym *isym;
11967   Elf_Internal_Sym *isymend;
11968   struct elf_link_hash_entry **sym_hashes;
11969   struct elf_link_hash_entry **end_hashes;
11970   struct elf_link_hash_entry **start_hashes;
11971   unsigned int symcount;
11972
11973   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
11974   contents = elf_section_data (sec)->this_hdr.contents;
11975
11976   irel = elf_section_data (sec)->relocs;
11977   irelend = irel + sec->reloc_count;
11978
11979   /* Actually delete the bytes.  */
11980   memmove (contents + addr, contents + addr + count,
11981            (size_t) (sec->size - addr - count));
11982   sec->size -= count;
11983
11984   /* Adjust all the relocs.  */
11985   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
11986     {
11987       /* Get the new reloc address.  */
11988       if (irel->r_offset > addr)
11989         irel->r_offset -= count;
11990     }
11991
11992   BFD_ASSERT (addr % 2 == 0);
11993   BFD_ASSERT (count % 2 == 0);
11994
11995   /* Adjust the local symbols defined in this section.  */
11996   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11997   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
11998   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
11999     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
12000       isym->st_value -= count;
12001
12002   /* Now adjust the global symbols defined in this section.  */
12003   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
12004               - symtab_hdr->sh_info);
12005   sym_hashes = start_hashes = elf_sym_hashes (abfd);
12006   end_hashes = sym_hashes + symcount;
12007
12008   for (; sym_hashes < end_hashes; sym_hashes++)
12009     {
12010       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12011
12012       if ((sym_hash->root.type == bfd_link_hash_defined
12013            || sym_hash->root.type == bfd_link_hash_defweak)
12014           && sym_hash->root.u.def.section == sec)
12015         {
12016           bfd_vma value = sym_hash->root.u.def.value;
12017
12018           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12019             value &= MINUS_TWO;
12020           if (value > addr)
12021             sym_hash->root.u.def.value -= count;
12022         }
12023     }
12024
12025   return TRUE;
12026 }
12027
12028
12029 /* Opcodes needed for microMIPS relaxation as found in
12030    opcodes/micromips-opc.c.  */
12031
12032 struct opcode_descriptor {
12033   unsigned long match;
12034   unsigned long mask;
12035 };
12036
12037 /* The $ra register aka $31.  */
12038
12039 #define RA 31
12040
12041 /* 32-bit instruction format register fields.  */
12042
12043 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12044 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12045
12046 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
12047
12048 #define OP16_VALID_REG(r) \
12049   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12050
12051
12052 /* 32-bit and 16-bit branches.  */
12053
12054 static const struct opcode_descriptor b_insns_32[] = {
12055   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
12056   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12057   { 0, 0 }  /* End marker for find_match().  */
12058 };
12059
12060 static const struct opcode_descriptor bc_insn_32 =
12061   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
12062
12063 static const struct opcode_descriptor bz_insn_32 =
12064   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
12065
12066 static const struct opcode_descriptor bzal_insn_32 =
12067   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
12068
12069 static const struct opcode_descriptor beq_insn_32 =
12070   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
12071
12072 static const struct opcode_descriptor b_insn_16 =
12073   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
12074
12075 static const struct opcode_descriptor bz_insn_16 =
12076   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
12077
12078
12079 /* 32-bit and 16-bit branch EQ and NE zero.  */
12080
12081 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12082    eq and second the ne.  This convention is used when replacing a
12083    32-bit BEQ/BNE with the 16-bit version.  */
12084
12085 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12086
12087 static const struct opcode_descriptor bz_rs_insns_32[] = {
12088   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
12089   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
12090   { 0, 0 }  /* End marker for find_match().  */
12091 };
12092
12093 static const struct opcode_descriptor bz_rt_insns_32[] = {
12094   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
12095   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
12096   { 0, 0 }  /* End marker for find_match().  */
12097 };
12098
12099 static const struct opcode_descriptor bzc_insns_32[] = {
12100   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
12101   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
12102   { 0, 0 }  /* End marker for find_match().  */
12103 };
12104
12105 static const struct opcode_descriptor bz_insns_16[] = {
12106   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
12107   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
12108   { 0, 0 }  /* End marker for find_match().  */
12109 };
12110
12111 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
12112
12113 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12114 #define BZ16_REG_FIELD(r) \
12115   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12116
12117
12118 /* 32-bit instructions with a delay slot.  */
12119
12120 static const struct opcode_descriptor jal_insn_32_bd16 =
12121   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
12122
12123 static const struct opcode_descriptor jal_insn_32_bd32 =
12124   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
12125
12126 static const struct opcode_descriptor jal_x_insn_32_bd32 =
12127   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
12128
12129 static const struct opcode_descriptor j_insn_32 =
12130   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
12131
12132 static const struct opcode_descriptor jalr_insn_32 =
12133   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
12134
12135 /* This table can be compacted, because no opcode replacement is made.  */
12136
12137 static const struct opcode_descriptor ds_insns_32_bd16[] = {
12138   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
12139
12140   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
12141   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
12142
12143   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
12144   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
12145   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
12146   { 0, 0 }  /* End marker for find_match().  */
12147 };
12148
12149 /* This table can be compacted, because no opcode replacement is made.  */
12150
12151 static const struct opcode_descriptor ds_insns_32_bd32[] = {
12152   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
12153
12154   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
12155   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
12156   { 0, 0 }  /* End marker for find_match().  */
12157 };
12158
12159
12160 /* 16-bit instructions with a delay slot.  */
12161
12162 static const struct opcode_descriptor jalr_insn_16_bd16 =
12163   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
12164
12165 static const struct opcode_descriptor jalr_insn_16_bd32 =
12166   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
12167
12168 static const struct opcode_descriptor jr_insn_16 =
12169   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
12170
12171 #define JR16_REG(opcode) ((opcode) & 0x1f)
12172
12173 /* This table can be compacted, because no opcode replacement is made.  */
12174
12175 static const struct opcode_descriptor ds_insns_16_bd16[] = {
12176   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
12177
12178   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
12179   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
12180   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
12181   { 0, 0 }  /* End marker for find_match().  */
12182 };
12183
12184
12185 /* LUI instruction.  */
12186
12187 static const struct opcode_descriptor lui_insn =
12188  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
12189
12190
12191 /* ADDIU instruction.  */
12192
12193 static const struct opcode_descriptor addiu_insn =
12194   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
12195
12196 static const struct opcode_descriptor addiupc_insn =
12197   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
12198
12199 #define ADDIUPC_REG_FIELD(r) \
12200   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12201
12202
12203 /* Relaxable instructions in a JAL delay slot: MOVE.  */
12204
12205 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
12206    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
12207 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12208 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12209
12210 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12211 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
12212
12213 static const struct opcode_descriptor move_insns_32[] = {
12214   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12215   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
12216   { 0, 0 }  /* End marker for find_match().  */
12217 };
12218
12219 static const struct opcode_descriptor move_insn_16 =
12220   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
12221
12222
12223 /* NOP instructions.  */
12224
12225 static const struct opcode_descriptor nop_insn_32 =
12226   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
12227
12228 static const struct opcode_descriptor nop_insn_16 =
12229   { /* "nop",   "",             */ 0x0c00,     0xffff };
12230
12231
12232 /* Instruction match support.  */
12233
12234 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12235
12236 static int
12237 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12238 {
12239   unsigned long indx;
12240
12241   for (indx = 0; insn[indx].mask != 0; indx++)
12242     if (MATCH (opcode, insn[indx]))
12243       return indx;
12244
12245   return -1;
12246 }
12247
12248
12249 /* Branch and delay slot decoding support.  */
12250
12251 /* If PTR points to what *might* be a 16-bit branch or jump, then
12252    return the minimum length of its delay slot, otherwise return 0.
12253    Non-zero results are not definitive as we might be checking against
12254    the second half of another instruction.  */
12255
12256 static int
12257 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12258 {
12259   unsigned long opcode;
12260   int bdsize;
12261
12262   opcode = bfd_get_16 (abfd, ptr);
12263   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12264     /* 16-bit branch/jump with a 32-bit delay slot.  */
12265     bdsize = 4;
12266   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12267            || find_match (opcode, ds_insns_16_bd16) >= 0)
12268     /* 16-bit branch/jump with a 16-bit delay slot.  */
12269     bdsize = 2;
12270   else
12271     /* No delay slot.  */
12272     bdsize = 0;
12273
12274   return bdsize;
12275 }
12276
12277 /* If PTR points to what *might* be a 32-bit branch or jump, then
12278    return the minimum length of its delay slot, otherwise return 0.
12279    Non-zero results are not definitive as we might be checking against
12280    the second half of another instruction.  */
12281
12282 static int
12283 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12284 {
12285   unsigned long opcode;
12286   int bdsize;
12287
12288   opcode = bfd_get_micromips_32 (abfd, ptr);
12289   if (find_match (opcode, ds_insns_32_bd32) >= 0)
12290     /* 32-bit branch/jump with a 32-bit delay slot.  */
12291     bdsize = 4;
12292   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12293     /* 32-bit branch/jump with a 16-bit delay slot.  */
12294     bdsize = 2;
12295   else
12296     /* No delay slot.  */
12297     bdsize = 0;
12298
12299   return bdsize;
12300 }
12301
12302 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12303    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
12304
12305 static bfd_boolean
12306 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12307 {
12308   unsigned long opcode;
12309
12310   opcode = bfd_get_16 (abfd, ptr);
12311   if (MATCH (opcode, b_insn_16)
12312                                                 /* B16  */
12313       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12314                                                 /* JR16  */
12315       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12316                                                 /* BEQZ16, BNEZ16  */
12317       || (MATCH (opcode, jalr_insn_16_bd32)
12318                                                 /* JALR16  */
12319           && reg != JR16_REG (opcode) && reg != RA))
12320     return TRUE;
12321
12322   return FALSE;
12323 }
12324
12325 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12326    then return TRUE, otherwise FALSE.  */
12327
12328 static bfd_boolean
12329 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12330 {
12331   unsigned long opcode;
12332
12333   opcode = bfd_get_micromips_32 (abfd, ptr);
12334   if (MATCH (opcode, j_insn_32)
12335                                                 /* J  */
12336       || MATCH (opcode, bc_insn_32)
12337                                                 /* BC1F, BC1T, BC2F, BC2T  */
12338       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12339                                                 /* JAL, JALX  */
12340       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12341                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
12342       || (MATCH (opcode, bzal_insn_32)
12343                                                 /* BGEZAL, BLTZAL  */
12344           && reg != OP32_SREG (opcode) && reg != RA)
12345       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12346                                                 /* JALR, JALR.HB, BEQ, BNE  */
12347           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12348     return TRUE;
12349
12350   return FALSE;
12351 }
12352
12353 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12354    IRELEND) at OFFSET indicate that there must be a compact branch there,
12355    then return TRUE, otherwise FALSE.  */
12356
12357 static bfd_boolean
12358 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12359                      const Elf_Internal_Rela *internal_relocs,
12360                      const Elf_Internal_Rela *irelend)
12361 {
12362   const Elf_Internal_Rela *irel;
12363   unsigned long opcode;
12364
12365   opcode = bfd_get_micromips_32 (abfd, ptr);
12366   if (find_match (opcode, bzc_insns_32) < 0)
12367     return FALSE;
12368
12369   for (irel = internal_relocs; irel < irelend; irel++)
12370     if (irel->r_offset == offset
12371         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12372       return TRUE;
12373
12374   return FALSE;
12375 }
12376
12377 /* Bitsize checking.  */
12378 #define IS_BITSIZE(val, N)                                              \
12379   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
12380     - (1ULL << ((N) - 1))) == (val))
12381
12382 \f
12383 bfd_boolean
12384 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12385                              struct bfd_link_info *link_info,
12386                              bfd_boolean *again)
12387 {
12388   Elf_Internal_Shdr *symtab_hdr;
12389   Elf_Internal_Rela *internal_relocs;
12390   Elf_Internal_Rela *irel, *irelend;
12391   bfd_byte *contents = NULL;
12392   Elf_Internal_Sym *isymbuf = NULL;
12393
12394   /* Assume nothing changes.  */
12395   *again = FALSE;
12396
12397   /* We don't have to do anything for a relocatable link, if
12398      this section does not have relocs, or if this is not a
12399      code section.  */
12400
12401   if (link_info->relocatable
12402       || (sec->flags & SEC_RELOC) == 0
12403       || sec->reloc_count == 0
12404       || (sec->flags & SEC_CODE) == 0)
12405     return TRUE;
12406
12407   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12408
12409   /* Get a copy of the native relocations.  */
12410   internal_relocs = (_bfd_elf_link_read_relocs
12411                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
12412                       link_info->keep_memory));
12413   if (internal_relocs == NULL)
12414     goto error_return;
12415
12416   /* Walk through them looking for relaxing opportunities.  */
12417   irelend = internal_relocs + sec->reloc_count;
12418   for (irel = internal_relocs; irel < irelend; irel++)
12419     {
12420       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12421       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12422       bfd_boolean target_is_micromips_code_p;
12423       unsigned long opcode;
12424       bfd_vma symval;
12425       bfd_vma pcrval;
12426       bfd_byte *ptr;
12427       int fndopc;
12428
12429       /* The number of bytes to delete for relaxation and from where
12430          to delete these bytes starting at irel->r_offset.  */
12431       int delcnt = 0;
12432       int deloff = 0;
12433
12434       /* If this isn't something that can be relaxed, then ignore
12435          this reloc.  */
12436       if (r_type != R_MICROMIPS_HI16
12437           && r_type != R_MICROMIPS_PC16_S1
12438           && r_type != R_MICROMIPS_26_S1)
12439         continue;
12440
12441       /* Get the section contents if we haven't done so already.  */
12442       if (contents == NULL)
12443         {
12444           /* Get cached copy if it exists.  */
12445           if (elf_section_data (sec)->this_hdr.contents != NULL)
12446             contents = elf_section_data (sec)->this_hdr.contents;
12447           /* Go get them off disk.  */
12448           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12449             goto error_return;
12450         }
12451       ptr = contents + irel->r_offset;
12452
12453       /* Read this BFD's local symbols if we haven't done so already.  */
12454       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12455         {
12456           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12457           if (isymbuf == NULL)
12458             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12459                                             symtab_hdr->sh_info, 0,
12460                                             NULL, NULL, NULL);
12461           if (isymbuf == NULL)
12462             goto error_return;
12463         }
12464
12465       /* Get the value of the symbol referred to by the reloc.  */
12466       if (r_symndx < symtab_hdr->sh_info)
12467         {
12468           /* A local symbol.  */
12469           Elf_Internal_Sym *isym;
12470           asection *sym_sec;
12471
12472           isym = isymbuf + r_symndx;
12473           if (isym->st_shndx == SHN_UNDEF)
12474             sym_sec = bfd_und_section_ptr;
12475           else if (isym->st_shndx == SHN_ABS)
12476             sym_sec = bfd_abs_section_ptr;
12477           else if (isym->st_shndx == SHN_COMMON)
12478             sym_sec = bfd_com_section_ptr;
12479           else
12480             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12481           symval = (isym->st_value
12482                     + sym_sec->output_section->vma
12483                     + sym_sec->output_offset);
12484           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12485         }
12486       else
12487         {
12488           unsigned long indx;
12489           struct elf_link_hash_entry *h;
12490
12491           /* An external symbol.  */
12492           indx = r_symndx - symtab_hdr->sh_info;
12493           h = elf_sym_hashes (abfd)[indx];
12494           BFD_ASSERT (h != NULL);
12495
12496           if (h->root.type != bfd_link_hash_defined
12497               && h->root.type != bfd_link_hash_defweak)
12498             /* This appears to be a reference to an undefined
12499                symbol.  Just ignore it -- it will be caught by the
12500                regular reloc processing.  */
12501             continue;
12502
12503           symval = (h->root.u.def.value
12504                     + h->root.u.def.section->output_section->vma
12505                     + h->root.u.def.section->output_offset);
12506           target_is_micromips_code_p = (!h->needs_plt
12507                                         && ELF_ST_IS_MICROMIPS (h->other));
12508         }
12509
12510
12511       /* For simplicity of coding, we are going to modify the
12512          section contents, the section relocs, and the BFD symbol
12513          table.  We must tell the rest of the code not to free up this
12514          information.  It would be possible to instead create a table
12515          of changes which have to be made, as is done in coff-mips.c;
12516          that would be more work, but would require less memory when
12517          the linker is run.  */
12518
12519       /* Only 32-bit instructions relaxed.  */
12520       if (irel->r_offset + 4 > sec->size)
12521         continue;
12522
12523       opcode = bfd_get_micromips_32 (abfd, ptr);
12524
12525       /* This is the pc-relative distance from the instruction the
12526          relocation is applied to, to the symbol referred.  */
12527       pcrval = (symval
12528                 - (sec->output_section->vma + sec->output_offset)
12529                 - irel->r_offset);
12530
12531       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12532          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12533          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
12534
12535            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12536
12537          where pcrval has first to be adjusted to apply against the LO16
12538          location (we make the adjustment later on, when we have figured
12539          out the offset).  */
12540       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12541         {
12542           bfd_boolean bzc = FALSE;
12543           unsigned long nextopc;
12544           unsigned long reg;
12545           bfd_vma offset;
12546
12547           /* Give up if the previous reloc was a HI16 against this symbol
12548              too.  */
12549           if (irel > internal_relocs
12550               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12551               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12552             continue;
12553
12554           /* Or if the next reloc is not a LO16 against this symbol.  */
12555           if (irel + 1 >= irelend
12556               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12557               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12558             continue;
12559
12560           /* Or if the second next reloc is a LO16 against this symbol too.  */
12561           if (irel + 2 >= irelend
12562               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12563               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12564             continue;
12565
12566           /* See if the LUI instruction *might* be in a branch delay slot.
12567              We check whether what looks like a 16-bit branch or jump is
12568              actually an immediate argument to a compact branch, and let
12569              it through if so.  */
12570           if (irel->r_offset >= 2
12571               && check_br16_dslot (abfd, ptr - 2)
12572               && !(irel->r_offset >= 4
12573                    && (bzc = check_relocated_bzc (abfd,
12574                                                   ptr - 4, irel->r_offset - 4,
12575                                                   internal_relocs, irelend))))
12576             continue;
12577           if (irel->r_offset >= 4
12578               && !bzc
12579               && check_br32_dslot (abfd, ptr - 4))
12580             continue;
12581
12582           reg = OP32_SREG (opcode);
12583
12584           /* We only relax adjacent instructions or ones separated with
12585              a branch or jump that has a delay slot.  The branch or jump
12586              must not fiddle with the register used to hold the address.
12587              Subtract 4 for the LUI itself.  */
12588           offset = irel[1].r_offset - irel[0].r_offset;
12589           switch (offset - 4)
12590             {
12591             case 0:
12592               break;
12593             case 2:
12594               if (check_br16 (abfd, ptr + 4, reg))
12595                 break;
12596               continue;
12597             case 4:
12598               if (check_br32 (abfd, ptr + 4, reg))
12599                 break;
12600               continue;
12601             default:
12602               continue;
12603             }
12604
12605           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
12606
12607           /* Give up unless the same register is used with both
12608              relocations.  */
12609           if (OP32_SREG (nextopc) != reg)
12610             continue;
12611
12612           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12613              and rounding up to take masking of the two LSBs into account.  */
12614           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12615
12616           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
12617           if (IS_BITSIZE (symval, 16))
12618             {
12619               /* Fix the relocation's type.  */
12620               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12621
12622               /* Instructions using R_MICROMIPS_LO16 have the base or
12623                  source register in bits 20:16.  This register becomes $0
12624                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
12625               nextopc &= ~0x001f0000;
12626               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12627                           contents + irel[1].r_offset);
12628             }
12629
12630           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12631              We add 4 to take LUI deletion into account while checking
12632              the PC-relative distance.  */
12633           else if (symval % 4 == 0
12634                    && IS_BITSIZE (pcrval + 4, 25)
12635                    && MATCH (nextopc, addiu_insn)
12636                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12637                    && OP16_VALID_REG (OP32_TREG (nextopc)))
12638             {
12639               /* Fix the relocation's type.  */
12640               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12641
12642               /* Replace ADDIU with the ADDIUPC version.  */
12643               nextopc = (addiupc_insn.match
12644                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12645
12646               bfd_put_micromips_32 (abfd, nextopc,
12647                                     contents + irel[1].r_offset);
12648             }
12649
12650           /* Can't do anything, give up, sigh...  */
12651           else
12652             continue;
12653
12654           /* Fix the relocation's type.  */
12655           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12656
12657           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
12658           delcnt = 4;
12659           deloff = 0;
12660         }
12661
12662       /* Compact branch relaxation -- due to the multitude of macros
12663          employed by the compiler/assembler, compact branches are not
12664          always generated.  Obviously, this can/will be fixed elsewhere,
12665          but there is no drawback in double checking it here.  */
12666       else if (r_type == R_MICROMIPS_PC16_S1
12667                && irel->r_offset + 5 < sec->size
12668                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12669                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
12670                && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
12671         {
12672           unsigned long reg;
12673
12674           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12675
12676           /* Replace BEQZ/BNEZ with the compact version.  */
12677           opcode = (bzc_insns_32[fndopc].match
12678                     | BZC32_REG_FIELD (reg)
12679                     | (opcode & 0xffff));               /* Addend value.  */
12680
12681           bfd_put_micromips_32 (abfd, opcode, ptr);
12682
12683           /* Delete the 16-bit delay slot NOP: two bytes from
12684              irel->offset + 4.  */
12685           delcnt = 2;
12686           deloff = 4;
12687         }
12688
12689       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
12690          to check the distance from the next instruction, so subtract 2.  */
12691       else if (r_type == R_MICROMIPS_PC16_S1
12692                && IS_BITSIZE (pcrval - 2, 11)
12693                && find_match (opcode, b_insns_32) >= 0)
12694         {
12695           /* Fix the relocation's type.  */
12696           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12697
12698           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12699           bfd_put_16 (abfd,
12700                       (b_insn_16.match
12701                        | (opcode & 0x3ff)),             /* Addend value.  */
12702                       ptr);
12703
12704           /* Delete 2 bytes from irel->r_offset + 2.  */
12705           delcnt = 2;
12706           deloff = 2;
12707         }
12708
12709       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
12710          to check the distance from the next instruction, so subtract 2.  */
12711       else if (r_type == R_MICROMIPS_PC16_S1
12712                && IS_BITSIZE (pcrval - 2, 8)
12713                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12714                     && OP16_VALID_REG (OP32_SREG (opcode)))
12715                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12716                        && OP16_VALID_REG (OP32_TREG (opcode)))))
12717         {
12718           unsigned long reg;
12719
12720           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12721
12722           /* Fix the relocation's type.  */
12723           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12724
12725           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12726           bfd_put_16 (abfd,
12727                       (bz_insns_16[fndopc].match
12728                        | BZ16_REG_FIELD (reg)
12729                        | (opcode & 0x7f)),              /* Addend value.  */
12730                       ptr);
12731
12732           /* Delete 2 bytes from irel->r_offset + 2.  */
12733           delcnt = 2;
12734           deloff = 2;
12735         }
12736
12737       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
12738       else if (r_type == R_MICROMIPS_26_S1
12739                && target_is_micromips_code_p
12740                && irel->r_offset + 7 < sec->size
12741                && MATCH (opcode, jal_insn_32_bd32))
12742         {
12743           unsigned long n32opc;
12744           bfd_boolean relaxed = FALSE;
12745
12746           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
12747
12748           if (MATCH (n32opc, nop_insn_32))
12749             {
12750               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
12751               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
12752
12753               relaxed = TRUE;
12754             }
12755           else if (find_match (n32opc, move_insns_32) >= 0)
12756             {
12757               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
12758               bfd_put_16 (abfd,
12759                           (move_insn_16.match
12760                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12761                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
12762                           ptr + 4);
12763
12764               relaxed = TRUE;
12765             }
12766           /* Other 32-bit instructions relaxable to 16-bit
12767              instructions will be handled here later.  */
12768
12769           if (relaxed)
12770             {
12771               /* JAL with 32-bit delay slot that is changed to a JALS
12772                  with 16-bit delay slot.  */
12773               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
12774
12775               /* Delete 2 bytes from irel->r_offset + 6.  */
12776               delcnt = 2;
12777               deloff = 6;
12778             }
12779         }
12780
12781       if (delcnt != 0)
12782         {
12783           /* Note that we've changed the relocs, section contents, etc.  */
12784           elf_section_data (sec)->relocs = internal_relocs;
12785           elf_section_data (sec)->this_hdr.contents = contents;
12786           symtab_hdr->contents = (unsigned char *) isymbuf;
12787
12788           /* Delete bytes depending on the delcnt and deloff.  */
12789           if (!mips_elf_relax_delete_bytes (abfd, sec,
12790                                             irel->r_offset + deloff, delcnt))
12791             goto error_return;
12792
12793           /* That will change things, so we should relax again.
12794              Note that this is not required, and it may be slow.  */
12795           *again = TRUE;
12796         }
12797     }
12798
12799   if (isymbuf != NULL
12800       && symtab_hdr->contents != (unsigned char *) isymbuf)
12801     {
12802       if (! link_info->keep_memory)
12803         free (isymbuf);
12804       else
12805         {
12806           /* Cache the symbols for elf_link_input_bfd.  */
12807           symtab_hdr->contents = (unsigned char *) isymbuf;
12808         }
12809     }
12810
12811   if (contents != NULL
12812       && elf_section_data (sec)->this_hdr.contents != contents)
12813     {
12814       if (! link_info->keep_memory)
12815         free (contents);
12816       else
12817         {
12818           /* Cache the section contents for elf_link_input_bfd.  */
12819           elf_section_data (sec)->this_hdr.contents = contents;
12820         }
12821     }
12822
12823   if (internal_relocs != NULL
12824       && elf_section_data (sec)->relocs != internal_relocs)
12825     free (internal_relocs);
12826
12827   return TRUE;
12828
12829  error_return:
12830   if (isymbuf != NULL
12831       && symtab_hdr->contents != (unsigned char *) isymbuf)
12832     free (isymbuf);
12833   if (contents != NULL
12834       && elf_section_data (sec)->this_hdr.contents != contents)
12835     free (contents);
12836   if (internal_relocs != NULL
12837       && elf_section_data (sec)->relocs != internal_relocs)
12838     free (internal_relocs);
12839
12840   return FALSE;
12841 }
12842 \f
12843 /* Create a MIPS ELF linker hash table.  */
12844
12845 struct bfd_link_hash_table *
12846 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
12847 {
12848   struct mips_elf_link_hash_table *ret;
12849   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12850
12851   ret = bfd_zmalloc (amt);
12852   if (ret == NULL)
12853     return NULL;
12854
12855   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12856                                       mips_elf_link_hash_newfunc,
12857                                       sizeof (struct mips_elf_link_hash_entry),
12858                                       MIPS_ELF_DATA))
12859     {
12860       free (ret);
12861       return NULL;
12862     }
12863
12864   return &ret->root.root;
12865 }
12866
12867 /* Likewise, but indicate that the target is VxWorks.  */
12868
12869 struct bfd_link_hash_table *
12870 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12871 {
12872   struct bfd_link_hash_table *ret;
12873
12874   ret = _bfd_mips_elf_link_hash_table_create (abfd);
12875   if (ret)
12876     {
12877       struct mips_elf_link_hash_table *htab;
12878
12879       htab = (struct mips_elf_link_hash_table *) ret;
12880       htab->use_plts_and_copy_relocs = TRUE;
12881       htab->is_vxworks = TRUE;
12882     }
12883   return ret;
12884 }
12885
12886 /* A function that the linker calls if we are allowed to use PLTs
12887    and copy relocs.  */
12888
12889 void
12890 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
12891 {
12892   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
12893 }
12894 \f
12895 /* We need to use a special link routine to handle the .reginfo and
12896    the .mdebug sections.  We need to merge all instances of these
12897    sections together, not write them all out sequentially.  */
12898
12899 bfd_boolean
12900 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
12901 {
12902   asection *o;
12903   struct bfd_link_order *p;
12904   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
12905   asection *rtproc_sec;
12906   Elf32_RegInfo reginfo;
12907   struct ecoff_debug_info debug;
12908   struct mips_htab_traverse_info hti;
12909   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12910   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
12911   HDRR *symhdr = &debug.symbolic_header;
12912   void *mdebug_handle = NULL;
12913   asection *s;
12914   EXTR esym;
12915   unsigned int i;
12916   bfd_size_type amt;
12917   struct mips_elf_link_hash_table *htab;
12918
12919   static const char * const secname[] =
12920   {
12921     ".text", ".init", ".fini", ".data",
12922     ".rodata", ".sdata", ".sbss", ".bss"
12923   };
12924   static const int sc[] =
12925   {
12926     scText, scInit, scFini, scData,
12927     scRData, scSData, scSBss, scBss
12928   };
12929
12930   /* Sort the dynamic symbols so that those with GOT entries come after
12931      those without.  */
12932   htab = mips_elf_hash_table (info);
12933   BFD_ASSERT (htab != NULL);
12934
12935   if (!mips_elf_sort_hash_table (abfd, info))
12936     return FALSE;
12937
12938   /* Create any scheduled LA25 stubs.  */
12939   hti.info = info;
12940   hti.output_bfd = abfd;
12941   hti.error = FALSE;
12942   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
12943   if (hti.error)
12944     return FALSE;
12945
12946   /* Get a value for the GP register.  */
12947   if (elf_gp (abfd) == 0)
12948     {
12949       struct bfd_link_hash_entry *h;
12950
12951       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
12952       if (h != NULL && h->type == bfd_link_hash_defined)
12953         elf_gp (abfd) = (h->u.def.value
12954                          + h->u.def.section->output_section->vma
12955                          + h->u.def.section->output_offset);
12956       else if (htab->is_vxworks
12957                && (h = bfd_link_hash_lookup (info->hash,
12958                                              "_GLOBAL_OFFSET_TABLE_",
12959                                              FALSE, FALSE, TRUE))
12960                && h->type == bfd_link_hash_defined)
12961         elf_gp (abfd) = (h->u.def.section->output_section->vma
12962                          + h->u.def.section->output_offset
12963                          + h->u.def.value);
12964       else if (info->relocatable)
12965         {
12966           bfd_vma lo = MINUS_ONE;
12967
12968           /* Find the GP-relative section with the lowest offset.  */
12969           for (o = abfd->sections; o != NULL; o = o->next)
12970             if (o->vma < lo
12971                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
12972               lo = o->vma;
12973
12974           /* And calculate GP relative to that.  */
12975           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
12976         }
12977       else
12978         {
12979           /* If the relocate_section function needs to do a reloc
12980              involving the GP value, it should make a reloc_dangerous
12981              callback to warn that GP is not defined.  */
12982         }
12983     }
12984
12985   /* Go through the sections and collect the .reginfo and .mdebug
12986      information.  */
12987   reginfo_sec = NULL;
12988   mdebug_sec = NULL;
12989   gptab_data_sec = NULL;
12990   gptab_bss_sec = NULL;
12991   for (o = abfd->sections; o != NULL; o = o->next)
12992     {
12993       if (strcmp (o->name, ".reginfo") == 0)
12994         {
12995           memset (&reginfo, 0, sizeof reginfo);
12996
12997           /* We have found the .reginfo section in the output file.
12998              Look through all the link_orders comprising it and merge
12999              the information together.  */
13000           for (p = o->map_head.link_order; p != NULL; p = p->next)
13001             {
13002               asection *input_section;
13003               bfd *input_bfd;
13004               Elf32_External_RegInfo ext;
13005               Elf32_RegInfo sub;
13006
13007               if (p->type != bfd_indirect_link_order)
13008                 {
13009                   if (p->type == bfd_data_link_order)
13010                     continue;
13011                   abort ();
13012                 }
13013
13014               input_section = p->u.indirect.section;
13015               input_bfd = input_section->owner;
13016
13017               if (! bfd_get_section_contents (input_bfd, input_section,
13018                                               &ext, 0, sizeof ext))
13019                 return FALSE;
13020
13021               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13022
13023               reginfo.ri_gprmask |= sub.ri_gprmask;
13024               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13025               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13026               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13027               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13028
13029               /* ri_gp_value is set by the function
13030                  mips_elf32_section_processing when the section is
13031                  finally written out.  */
13032
13033               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13034                  elf_link_input_bfd ignores this section.  */
13035               input_section->flags &= ~SEC_HAS_CONTENTS;
13036             }
13037
13038           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
13039           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
13040
13041           /* Skip this section later on (I don't think this currently
13042              matters, but someday it might).  */
13043           o->map_head.link_order = NULL;
13044
13045           reginfo_sec = o;
13046         }
13047
13048       if (strcmp (o->name, ".mdebug") == 0)
13049         {
13050           struct extsym_info einfo;
13051           bfd_vma last;
13052
13053           /* We have found the .mdebug section in the output file.
13054              Look through all the link_orders comprising it and merge
13055              the information together.  */
13056           symhdr->magic = swap->sym_magic;
13057           /* FIXME: What should the version stamp be?  */
13058           symhdr->vstamp = 0;
13059           symhdr->ilineMax = 0;
13060           symhdr->cbLine = 0;
13061           symhdr->idnMax = 0;
13062           symhdr->ipdMax = 0;
13063           symhdr->isymMax = 0;
13064           symhdr->ioptMax = 0;
13065           symhdr->iauxMax = 0;
13066           symhdr->issMax = 0;
13067           symhdr->issExtMax = 0;
13068           symhdr->ifdMax = 0;
13069           symhdr->crfd = 0;
13070           symhdr->iextMax = 0;
13071
13072           /* We accumulate the debugging information itself in the
13073              debug_info structure.  */
13074           debug.line = NULL;
13075           debug.external_dnr = NULL;
13076           debug.external_pdr = NULL;
13077           debug.external_sym = NULL;
13078           debug.external_opt = NULL;
13079           debug.external_aux = NULL;
13080           debug.ss = NULL;
13081           debug.ssext = debug.ssext_end = NULL;
13082           debug.external_fdr = NULL;
13083           debug.external_rfd = NULL;
13084           debug.external_ext = debug.external_ext_end = NULL;
13085
13086           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
13087           if (mdebug_handle == NULL)
13088             return FALSE;
13089
13090           esym.jmptbl = 0;
13091           esym.cobol_main = 0;
13092           esym.weakext = 0;
13093           esym.reserved = 0;
13094           esym.ifd = ifdNil;
13095           esym.asym.iss = issNil;
13096           esym.asym.st = stLocal;
13097           esym.asym.reserved = 0;
13098           esym.asym.index = indexNil;
13099           last = 0;
13100           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13101             {
13102               esym.asym.sc = sc[i];
13103               s = bfd_get_section_by_name (abfd, secname[i]);
13104               if (s != NULL)
13105                 {
13106                   esym.asym.value = s->vma;
13107                   last = s->vma + s->size;
13108                 }
13109               else
13110                 esym.asym.value = last;
13111               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13112                                                  secname[i], &esym))
13113                 return FALSE;
13114             }
13115
13116           for (p = o->map_head.link_order; p != NULL; p = p->next)
13117             {
13118               asection *input_section;
13119               bfd *input_bfd;
13120               const struct ecoff_debug_swap *input_swap;
13121               struct ecoff_debug_info input_debug;
13122               char *eraw_src;
13123               char *eraw_end;
13124
13125               if (p->type != bfd_indirect_link_order)
13126                 {
13127                   if (p->type == bfd_data_link_order)
13128                     continue;
13129                   abort ();
13130                 }
13131
13132               input_section = p->u.indirect.section;
13133               input_bfd = input_section->owner;
13134
13135               if (!is_mips_elf (input_bfd))
13136                 {
13137                   /* I don't know what a non MIPS ELF bfd would be
13138                      doing with a .mdebug section, but I don't really
13139                      want to deal with it.  */
13140                   continue;
13141                 }
13142
13143               input_swap = (get_elf_backend_data (input_bfd)
13144                             ->elf_backend_ecoff_debug_swap);
13145
13146               BFD_ASSERT (p->size == input_section->size);
13147
13148               /* The ECOFF linking code expects that we have already
13149                  read in the debugging information and set up an
13150                  ecoff_debug_info structure, so we do that now.  */
13151               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13152                                                    &input_debug))
13153                 return FALSE;
13154
13155               if (! (bfd_ecoff_debug_accumulate
13156                      (mdebug_handle, abfd, &debug, swap, input_bfd,
13157                       &input_debug, input_swap, info)))
13158                 return FALSE;
13159
13160               /* Loop through the external symbols.  For each one with
13161                  interesting information, try to find the symbol in
13162                  the linker global hash table and save the information
13163                  for the output external symbols.  */
13164               eraw_src = input_debug.external_ext;
13165               eraw_end = (eraw_src
13166                           + (input_debug.symbolic_header.iextMax
13167                              * input_swap->external_ext_size));
13168               for (;
13169                    eraw_src < eraw_end;
13170                    eraw_src += input_swap->external_ext_size)
13171                 {
13172                   EXTR ext;
13173                   const char *name;
13174                   struct mips_elf_link_hash_entry *h;
13175
13176                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
13177                   if (ext.asym.sc == scNil
13178                       || ext.asym.sc == scUndefined
13179                       || ext.asym.sc == scSUndefined)
13180                     continue;
13181
13182                   name = input_debug.ssext + ext.asym.iss;
13183                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
13184                                                  name, FALSE, FALSE, TRUE);
13185                   if (h == NULL || h->esym.ifd != -2)
13186                     continue;
13187
13188                   if (ext.ifd != -1)
13189                     {
13190                       BFD_ASSERT (ext.ifd
13191                                   < input_debug.symbolic_header.ifdMax);
13192                       ext.ifd = input_debug.ifdmap[ext.ifd];
13193                     }
13194
13195                   h->esym = ext;
13196                 }
13197
13198               /* Free up the information we just read.  */
13199               free (input_debug.line);
13200               free (input_debug.external_dnr);
13201               free (input_debug.external_pdr);
13202               free (input_debug.external_sym);
13203               free (input_debug.external_opt);
13204               free (input_debug.external_aux);
13205               free (input_debug.ss);
13206               free (input_debug.ssext);
13207               free (input_debug.external_fdr);
13208               free (input_debug.external_rfd);
13209               free (input_debug.external_ext);
13210
13211               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13212                  elf_link_input_bfd ignores this section.  */
13213               input_section->flags &= ~SEC_HAS_CONTENTS;
13214             }
13215
13216           if (SGI_COMPAT (abfd) && info->shared)
13217             {
13218               /* Create .rtproc section.  */
13219               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
13220               if (rtproc_sec == NULL)
13221                 {
13222                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13223                                     | SEC_LINKER_CREATED | SEC_READONLY);
13224
13225                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13226                                                                    ".rtproc",
13227                                                                    flags);
13228                   if (rtproc_sec == NULL
13229                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
13230                     return FALSE;
13231                 }
13232
13233               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13234                                                      info, rtproc_sec,
13235                                                      &debug))
13236                 return FALSE;
13237             }
13238
13239           /* Build the external symbol information.  */
13240           einfo.abfd = abfd;
13241           einfo.info = info;
13242           einfo.debug = &debug;
13243           einfo.swap = swap;
13244           einfo.failed = FALSE;
13245           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
13246                                        mips_elf_output_extsym, &einfo);
13247           if (einfo.failed)
13248             return FALSE;
13249
13250           /* Set the size of the .mdebug section.  */
13251           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
13252
13253           /* Skip this section later on (I don't think this currently
13254              matters, but someday it might).  */
13255           o->map_head.link_order = NULL;
13256
13257           mdebug_sec = o;
13258         }
13259
13260       if (CONST_STRNEQ (o->name, ".gptab."))
13261         {
13262           const char *subname;
13263           unsigned int c;
13264           Elf32_gptab *tab;
13265           Elf32_External_gptab *ext_tab;
13266           unsigned int j;
13267
13268           /* The .gptab.sdata and .gptab.sbss sections hold
13269              information describing how the small data area would
13270              change depending upon the -G switch.  These sections
13271              not used in executables files.  */
13272           if (! info->relocatable)
13273             {
13274               for (p = o->map_head.link_order; p != NULL; p = p->next)
13275                 {
13276                   asection *input_section;
13277
13278                   if (p->type != bfd_indirect_link_order)
13279                     {
13280                       if (p->type == bfd_data_link_order)
13281                         continue;
13282                       abort ();
13283                     }
13284
13285                   input_section = p->u.indirect.section;
13286
13287                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
13288                      elf_link_input_bfd ignores this section.  */
13289                   input_section->flags &= ~SEC_HAS_CONTENTS;
13290                 }
13291
13292               /* Skip this section later on (I don't think this
13293                  currently matters, but someday it might).  */
13294               o->map_head.link_order = NULL;
13295
13296               /* Really remove the section.  */
13297               bfd_section_list_remove (abfd, o);
13298               --abfd->section_count;
13299
13300               continue;
13301             }
13302
13303           /* There is one gptab for initialized data, and one for
13304              uninitialized data.  */
13305           if (strcmp (o->name, ".gptab.sdata") == 0)
13306             gptab_data_sec = o;
13307           else if (strcmp (o->name, ".gptab.sbss") == 0)
13308             gptab_bss_sec = o;
13309           else
13310             {
13311               (*_bfd_error_handler)
13312                 (_("%s: illegal section name `%s'"),
13313                  bfd_get_filename (abfd), o->name);
13314               bfd_set_error (bfd_error_nonrepresentable_section);
13315               return FALSE;
13316             }
13317
13318           /* The linker script always combines .gptab.data and
13319              .gptab.sdata into .gptab.sdata, and likewise for
13320              .gptab.bss and .gptab.sbss.  It is possible that there is
13321              no .sdata or .sbss section in the output file, in which
13322              case we must change the name of the output section.  */
13323           subname = o->name + sizeof ".gptab" - 1;
13324           if (bfd_get_section_by_name (abfd, subname) == NULL)
13325             {
13326               if (o == gptab_data_sec)
13327                 o->name = ".gptab.data";
13328               else
13329                 o->name = ".gptab.bss";
13330               subname = o->name + sizeof ".gptab" - 1;
13331               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13332             }
13333
13334           /* Set up the first entry.  */
13335           c = 1;
13336           amt = c * sizeof (Elf32_gptab);
13337           tab = bfd_malloc (amt);
13338           if (tab == NULL)
13339             return FALSE;
13340           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13341           tab[0].gt_header.gt_unused = 0;
13342
13343           /* Combine the input sections.  */
13344           for (p = o->map_head.link_order; p != NULL; p = p->next)
13345             {
13346               asection *input_section;
13347               bfd *input_bfd;
13348               bfd_size_type size;
13349               unsigned long last;
13350               bfd_size_type gpentry;
13351
13352               if (p->type != bfd_indirect_link_order)
13353                 {
13354                   if (p->type == bfd_data_link_order)
13355                     continue;
13356                   abort ();
13357                 }
13358
13359               input_section = p->u.indirect.section;
13360               input_bfd = input_section->owner;
13361
13362               /* Combine the gptab entries for this input section one
13363                  by one.  We know that the input gptab entries are
13364                  sorted by ascending -G value.  */
13365               size = input_section->size;
13366               last = 0;
13367               for (gpentry = sizeof (Elf32_External_gptab);
13368                    gpentry < size;
13369                    gpentry += sizeof (Elf32_External_gptab))
13370                 {
13371                   Elf32_External_gptab ext_gptab;
13372                   Elf32_gptab int_gptab;
13373                   unsigned long val;
13374                   unsigned long add;
13375                   bfd_boolean exact;
13376                   unsigned int look;
13377
13378                   if (! (bfd_get_section_contents
13379                          (input_bfd, input_section, &ext_gptab, gpentry,
13380                           sizeof (Elf32_External_gptab))))
13381                     {
13382                       free (tab);
13383                       return FALSE;
13384                     }
13385
13386                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13387                                                 &int_gptab);
13388                   val = int_gptab.gt_entry.gt_g_value;
13389                   add = int_gptab.gt_entry.gt_bytes - last;
13390
13391                   exact = FALSE;
13392                   for (look = 1; look < c; look++)
13393                     {
13394                       if (tab[look].gt_entry.gt_g_value >= val)
13395                         tab[look].gt_entry.gt_bytes += add;
13396
13397                       if (tab[look].gt_entry.gt_g_value == val)
13398                         exact = TRUE;
13399                     }
13400
13401                   if (! exact)
13402                     {
13403                       Elf32_gptab *new_tab;
13404                       unsigned int max;
13405
13406                       /* We need a new table entry.  */
13407                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
13408                       new_tab = bfd_realloc (tab, amt);
13409                       if (new_tab == NULL)
13410                         {
13411                           free (tab);
13412                           return FALSE;
13413                         }
13414                       tab = new_tab;
13415                       tab[c].gt_entry.gt_g_value = val;
13416                       tab[c].gt_entry.gt_bytes = add;
13417
13418                       /* Merge in the size for the next smallest -G
13419                          value, since that will be implied by this new
13420                          value.  */
13421                       max = 0;
13422                       for (look = 1; look < c; look++)
13423                         {
13424                           if (tab[look].gt_entry.gt_g_value < val
13425                               && (max == 0
13426                                   || (tab[look].gt_entry.gt_g_value
13427                                       > tab[max].gt_entry.gt_g_value)))
13428                             max = look;
13429                         }
13430                       if (max != 0)
13431                         tab[c].gt_entry.gt_bytes +=
13432                           tab[max].gt_entry.gt_bytes;
13433
13434                       ++c;
13435                     }
13436
13437                   last = int_gptab.gt_entry.gt_bytes;
13438                 }
13439
13440               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13441                  elf_link_input_bfd ignores this section.  */
13442               input_section->flags &= ~SEC_HAS_CONTENTS;
13443             }
13444
13445           /* The table must be sorted by -G value.  */
13446           if (c > 2)
13447             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13448
13449           /* Swap out the table.  */
13450           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
13451           ext_tab = bfd_alloc (abfd, amt);
13452           if (ext_tab == NULL)
13453             {
13454               free (tab);
13455               return FALSE;
13456             }
13457
13458           for (j = 0; j < c; j++)
13459             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13460           free (tab);
13461
13462           o->size = c * sizeof (Elf32_External_gptab);
13463           o->contents = (bfd_byte *) ext_tab;
13464
13465           /* Skip this section later on (I don't think this currently
13466              matters, but someday it might).  */
13467           o->map_head.link_order = NULL;
13468         }
13469     }
13470
13471   /* Invoke the regular ELF backend linker to do all the work.  */
13472   if (!bfd_elf_final_link (abfd, info))
13473     return FALSE;
13474
13475   /* Now write out the computed sections.  */
13476
13477   if (reginfo_sec != NULL)
13478     {
13479       Elf32_External_RegInfo ext;
13480
13481       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
13482       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
13483         return FALSE;
13484     }
13485
13486   if (mdebug_sec != NULL)
13487     {
13488       BFD_ASSERT (abfd->output_has_begun);
13489       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13490                                                swap, info,
13491                                                mdebug_sec->filepos))
13492         return FALSE;
13493
13494       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13495     }
13496
13497   if (gptab_data_sec != NULL)
13498     {
13499       if (! bfd_set_section_contents (abfd, gptab_data_sec,
13500                                       gptab_data_sec->contents,
13501                                       0, gptab_data_sec->size))
13502         return FALSE;
13503     }
13504
13505   if (gptab_bss_sec != NULL)
13506     {
13507       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13508                                       gptab_bss_sec->contents,
13509                                       0, gptab_bss_sec->size))
13510         return FALSE;
13511     }
13512
13513   if (SGI_COMPAT (abfd))
13514     {
13515       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13516       if (rtproc_sec != NULL)
13517         {
13518           if (! bfd_set_section_contents (abfd, rtproc_sec,
13519                                           rtproc_sec->contents,
13520                                           0, rtproc_sec->size))
13521             return FALSE;
13522         }
13523     }
13524
13525   return TRUE;
13526 }
13527 \f
13528 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13529
13530 struct mips_mach_extension {
13531   unsigned long extension, base;
13532 };
13533
13534
13535 /* An array describing how BFD machines relate to one another.  The entries
13536    are ordered topologically with MIPS I extensions listed last.  */
13537
13538 static const struct mips_mach_extension mips_mach_extensions[] = {
13539   /* MIPS64r2 extensions.  */
13540   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13541   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13542   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13543
13544   /* MIPS64 extensions.  */
13545   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13546   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13547   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13548   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
13549
13550   /* MIPS V extensions.  */
13551   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13552
13553   /* R10000 extensions.  */
13554   { bfd_mach_mips12000, bfd_mach_mips10000 },
13555   { bfd_mach_mips14000, bfd_mach_mips10000 },
13556   { bfd_mach_mips16000, bfd_mach_mips10000 },
13557
13558   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13559      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13560      better to allow vr5400 and vr5500 code to be merged anyway, since
13561      many libraries will just use the core ISA.  Perhaps we could add
13562      some sort of ASE flag if this ever proves a problem.  */
13563   { bfd_mach_mips5500, bfd_mach_mips5400 },
13564   { bfd_mach_mips5400, bfd_mach_mips5000 },
13565
13566   /* MIPS IV extensions.  */
13567   { bfd_mach_mips5, bfd_mach_mips8000 },
13568   { bfd_mach_mips10000, bfd_mach_mips8000 },
13569   { bfd_mach_mips5000, bfd_mach_mips8000 },
13570   { bfd_mach_mips7000, bfd_mach_mips8000 },
13571   { bfd_mach_mips9000, bfd_mach_mips8000 },
13572
13573   /* VR4100 extensions.  */
13574   { bfd_mach_mips4120, bfd_mach_mips4100 },
13575   { bfd_mach_mips4111, bfd_mach_mips4100 },
13576
13577   /* MIPS III extensions.  */
13578   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13579   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13580   { bfd_mach_mips8000, bfd_mach_mips4000 },
13581   { bfd_mach_mips4650, bfd_mach_mips4000 },
13582   { bfd_mach_mips4600, bfd_mach_mips4000 },
13583   { bfd_mach_mips4400, bfd_mach_mips4000 },
13584   { bfd_mach_mips4300, bfd_mach_mips4000 },
13585   { bfd_mach_mips4100, bfd_mach_mips4000 },
13586   { bfd_mach_mips4010, bfd_mach_mips4000 },
13587   { bfd_mach_mips5900, bfd_mach_mips4000 },
13588
13589   /* MIPS32 extensions.  */
13590   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13591
13592   /* MIPS II extensions.  */
13593   { bfd_mach_mips4000, bfd_mach_mips6000 },
13594   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13595
13596   /* MIPS I extensions.  */
13597   { bfd_mach_mips6000, bfd_mach_mips3000 },
13598   { bfd_mach_mips3900, bfd_mach_mips3000 }
13599 };
13600
13601
13602 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
13603
13604 static bfd_boolean
13605 mips_mach_extends_p (unsigned long base, unsigned long extension)
13606 {
13607   size_t i;
13608
13609   if (extension == base)
13610     return TRUE;
13611
13612   if (base == bfd_mach_mipsisa32
13613       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13614     return TRUE;
13615
13616   if (base == bfd_mach_mipsisa32r2
13617       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13618     return TRUE;
13619
13620   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
13621     if (extension == mips_mach_extensions[i].extension)
13622       {
13623         extension = mips_mach_extensions[i].base;
13624         if (extension == base)
13625           return TRUE;
13626       }
13627
13628   return FALSE;
13629 }
13630
13631
13632 /* Return true if the given ELF header flags describe a 32-bit binary.  */
13633
13634 static bfd_boolean
13635 mips_32bit_flags_p (flagword flags)
13636 {
13637   return ((flags & EF_MIPS_32BITMODE) != 0
13638           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13639           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13640           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13641           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13642           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13643           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
13644 }
13645
13646
13647 /* Merge object attributes from IBFD into OBFD.  Raise an error if
13648    there are conflicting attributes.  */
13649 static bfd_boolean
13650 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13651 {
13652   obj_attribute *in_attr;
13653   obj_attribute *out_attr;
13654   bfd *abi_fp_bfd;
13655
13656   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
13657   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13658   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13659     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
13660
13661   if (!elf_known_obj_attributes_proc (obfd)[0].i)
13662     {
13663       /* This is the first object.  Copy the attributes.  */
13664       _bfd_elf_copy_obj_attributes (ibfd, obfd);
13665
13666       /* Use the Tag_null value to indicate the attributes have been
13667          initialized.  */
13668       elf_known_obj_attributes_proc (obfd)[0].i = 1;
13669
13670       return TRUE;
13671     }
13672
13673   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
13674      non-conflicting ones.  */
13675   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13676   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13677     {
13678       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13679       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13680         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
13681       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13682         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13683           {
13684           case 1:
13685             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13686               {
13687               case 2:
13688                 _bfd_error_handler
13689                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13690                    obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float");
13691                 break;
13692
13693               case 3:
13694                 _bfd_error_handler
13695                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13696                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13697                 break;
13698
13699               case 4:
13700                 _bfd_error_handler
13701                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13702                    obfd, abi_fp_bfd, ibfd,
13703                    "-mdouble-float", "-mips32r2 -mfp64");
13704                 break;
13705
13706               default:
13707                 _bfd_error_handler
13708                   (_("Warning: %B uses %s (set by %B), "
13709                      "%B uses unknown floating point ABI %d"),
13710                    obfd, abi_fp_bfd, ibfd,
13711                    "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13712                 break;
13713               }
13714             break;
13715
13716           case 2:
13717             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13718               {
13719               case 1:
13720                 _bfd_error_handler
13721                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13722                    obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float");
13723                 break;
13724
13725               case 3:
13726                 _bfd_error_handler
13727                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13728                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13729                 break;
13730
13731               case 4:
13732                 _bfd_error_handler
13733                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13734                    obfd, abi_fp_bfd, ibfd,
13735                    "-msingle-float", "-mips32r2 -mfp64");
13736                 break;
13737
13738               default:
13739                 _bfd_error_handler
13740                   (_("Warning: %B uses %s (set by %B), "
13741                      "%B uses unknown floating point ABI %d"),
13742                    obfd, abi_fp_bfd, ibfd,
13743                    "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13744                 break;
13745               }
13746             break;
13747
13748           case 3:
13749             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13750               {
13751               case 1:
13752               case 2:
13753               case 4:
13754                 _bfd_error_handler
13755                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13756                    obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float");
13757                 break;
13758
13759               default:
13760                 _bfd_error_handler
13761                   (_("Warning: %B uses %s (set by %B), "
13762                      "%B uses unknown floating point ABI %d"),
13763                    obfd, abi_fp_bfd, ibfd,
13764                    "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13765                 break;
13766               }
13767             break;
13768
13769           case 4:
13770             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13771               {
13772               case 1:
13773                 _bfd_error_handler
13774                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13775                    obfd, abi_fp_bfd, ibfd,
13776                    "-mips32r2 -mfp64", "-mdouble-float");
13777                 break;
13778
13779               case 2:
13780                 _bfd_error_handler
13781                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13782                    obfd, abi_fp_bfd, ibfd,
13783                    "-mips32r2 -mfp64", "-msingle-float");
13784                 break;
13785
13786               case 3:
13787                 _bfd_error_handler
13788                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13789                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13790                 break;
13791
13792               default:
13793                 _bfd_error_handler
13794                   (_("Warning: %B uses %s (set by %B), "
13795                      "%B uses unknown floating point ABI %d"),
13796                    obfd, abi_fp_bfd, ibfd,
13797                    "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13798                 break;
13799               }
13800             break;
13801
13802           default:
13803             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13804               {
13805               case 1:
13806                 _bfd_error_handler
13807                   (_("Warning: %B uses unknown floating point ABI %d "
13808                      "(set by %B), %B uses %s"),
13809                    obfd, abi_fp_bfd, ibfd,
13810                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float");
13811                 break;
13812
13813               case 2:
13814                 _bfd_error_handler
13815                   (_("Warning: %B uses unknown floating point ABI %d "
13816                      "(set by %B), %B uses %s"),
13817                    obfd, abi_fp_bfd, ibfd,
13818                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float");
13819                 break;
13820
13821               case 3:
13822                 _bfd_error_handler
13823                   (_("Warning: %B uses unknown floating point ABI %d "
13824                      "(set by %B), %B uses %s"),
13825                    obfd, abi_fp_bfd, ibfd,
13826                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float");
13827                 break;
13828
13829               case 4:
13830                 _bfd_error_handler
13831                   (_("Warning: %B uses unknown floating point ABI %d "
13832                      "(set by %B), %B uses %s"),
13833                    obfd, abi_fp_bfd, ibfd,
13834                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64");
13835                 break;
13836
13837               default:
13838                 _bfd_error_handler
13839                   (_("Warning: %B uses unknown floating point ABI %d "
13840                      "(set by %B), %B uses unknown floating point ABI %d"),
13841                    obfd, abi_fp_bfd, ibfd,
13842                    out_attr[Tag_GNU_MIPS_ABI_FP].i,
13843                    in_attr[Tag_GNU_MIPS_ABI_FP].i);
13844                 break;
13845               }
13846             break;
13847           }
13848     }
13849
13850   /* Merge Tag_compatibility attributes and any common GNU ones.  */
13851   _bfd_elf_merge_object_attributes (ibfd, obfd);
13852
13853   return TRUE;
13854 }
13855
13856 /* Merge backend specific data from an object file to the output
13857    object file when linking.  */
13858
13859 bfd_boolean
13860 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
13861 {
13862   flagword old_flags;
13863   flagword new_flags;
13864   bfd_boolean ok;
13865   bfd_boolean null_input_bfd = TRUE;
13866   asection *sec;
13867
13868   /* Check if we have the same endianness.  */
13869   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
13870     {
13871       (*_bfd_error_handler)
13872         (_("%B: endianness incompatible with that of the selected emulation"),
13873          ibfd);
13874       return FALSE;
13875     }
13876
13877   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
13878     return TRUE;
13879
13880   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
13881     {
13882       (*_bfd_error_handler)
13883         (_("%B: ABI is incompatible with that of the selected emulation"),
13884          ibfd);
13885       return FALSE;
13886     }
13887
13888   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
13889     return FALSE;
13890
13891   new_flags = elf_elfheader (ibfd)->e_flags;
13892   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
13893   old_flags = elf_elfheader (obfd)->e_flags;
13894
13895   if (! elf_flags_init (obfd))
13896     {
13897       elf_flags_init (obfd) = TRUE;
13898       elf_elfheader (obfd)->e_flags = new_flags;
13899       elf_elfheader (obfd)->e_ident[EI_CLASS]
13900         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
13901
13902       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
13903           && (bfd_get_arch_info (obfd)->the_default
13904               || mips_mach_extends_p (bfd_get_mach (obfd),
13905                                       bfd_get_mach (ibfd))))
13906         {
13907           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
13908                                    bfd_get_mach (ibfd)))
13909             return FALSE;
13910         }
13911
13912       return TRUE;
13913     }
13914
13915   /* Check flag compatibility.  */
13916
13917   new_flags &= ~EF_MIPS_NOREORDER;
13918   old_flags &= ~EF_MIPS_NOREORDER;
13919
13920   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
13921      doesn't seem to matter.  */
13922   new_flags &= ~EF_MIPS_XGOT;
13923   old_flags &= ~EF_MIPS_XGOT;
13924
13925   /* MIPSpro generates ucode info in n64 objects.  Again, we should
13926      just be able to ignore this.  */
13927   new_flags &= ~EF_MIPS_UCODE;
13928   old_flags &= ~EF_MIPS_UCODE;
13929
13930   /* DSOs should only be linked with CPIC code.  */
13931   if ((ibfd->flags & DYNAMIC) != 0)
13932     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
13933
13934   if (new_flags == old_flags)
13935     return TRUE;
13936
13937   /* Check to see if the input BFD actually contains any sections.
13938      If not, its flags may not have been initialised either, but it cannot
13939      actually cause any incompatibility.  */
13940   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
13941     {
13942       /* Ignore synthetic sections and empty .text, .data and .bss sections
13943          which are automatically generated by gas.  Also ignore fake
13944          (s)common sections, since merely defining a common symbol does
13945          not affect compatibility.  */
13946       if ((sec->flags & SEC_IS_COMMON) == 0
13947           && strcmp (sec->name, ".reginfo")
13948           && strcmp (sec->name, ".mdebug")
13949           && (sec->size != 0
13950               || (strcmp (sec->name, ".text")
13951                   && strcmp (sec->name, ".data")
13952                   && strcmp (sec->name, ".bss"))))
13953         {
13954           null_input_bfd = FALSE;
13955           break;
13956         }
13957     }
13958   if (null_input_bfd)
13959     return TRUE;
13960
13961   ok = TRUE;
13962
13963   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
13964       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
13965     {
13966       (*_bfd_error_handler)
13967         (_("%B: warning: linking abicalls files with non-abicalls files"),
13968          ibfd);
13969       ok = TRUE;
13970     }
13971
13972   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
13973     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
13974   if (! (new_flags & EF_MIPS_PIC))
13975     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
13976
13977   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
13978   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
13979
13980   /* Compare the ISAs.  */
13981   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
13982     {
13983       (*_bfd_error_handler)
13984         (_("%B: linking 32-bit code with 64-bit code"),
13985          ibfd);
13986       ok = FALSE;
13987     }
13988   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
13989     {
13990       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
13991       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
13992         {
13993           /* Copy the architecture info from IBFD to OBFD.  Also copy
13994              the 32-bit flag (if set) so that we continue to recognise
13995              OBFD as a 32-bit binary.  */
13996           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
13997           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
13998           elf_elfheader (obfd)->e_flags
13999             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14000
14001           /* Copy across the ABI flags if OBFD doesn't use them
14002              and if that was what caused us to treat IBFD as 32-bit.  */
14003           if ((old_flags & EF_MIPS_ABI) == 0
14004               && mips_32bit_flags_p (new_flags)
14005               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14006             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14007         }
14008       else
14009         {
14010           /* The ISAs aren't compatible.  */
14011           (*_bfd_error_handler)
14012             (_("%B: linking %s module with previous %s modules"),
14013              ibfd,
14014              bfd_printable_name (ibfd),
14015              bfd_printable_name (obfd));
14016           ok = FALSE;
14017         }
14018     }
14019
14020   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14021   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14022
14023   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14024      does set EI_CLASS differently from any 32-bit ABI.  */
14025   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14026       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14027           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14028     {
14029       /* Only error if both are set (to different values).  */
14030       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14031           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14032               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14033         {
14034           (*_bfd_error_handler)
14035             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14036              ibfd,
14037              elf_mips_abi_name (ibfd),
14038              elf_mips_abi_name (obfd));
14039           ok = FALSE;
14040         }
14041       new_flags &= ~EF_MIPS_ABI;
14042       old_flags &= ~EF_MIPS_ABI;
14043     }
14044
14045   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
14046      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
14047   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14048     {
14049       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14050       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14051       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14052       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14053       int micro_mis = old_m16 && new_micro;
14054       int m16_mis = old_micro && new_m16;
14055
14056       if (m16_mis || micro_mis)
14057         {
14058           (*_bfd_error_handler)
14059             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14060              ibfd,
14061              m16_mis ? "MIPS16" : "microMIPS",
14062              m16_mis ? "microMIPS" : "MIPS16");
14063           ok = FALSE;
14064         }
14065
14066       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14067
14068       new_flags &= ~ EF_MIPS_ARCH_ASE;
14069       old_flags &= ~ EF_MIPS_ARCH_ASE;
14070     }
14071
14072   /* Warn about any other mismatches */
14073   if (new_flags != old_flags)
14074     {
14075       (*_bfd_error_handler)
14076         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14077          ibfd, (unsigned long) new_flags,
14078          (unsigned long) old_flags);
14079       ok = FALSE;
14080     }
14081
14082   if (! ok)
14083     {
14084       bfd_set_error (bfd_error_bad_value);
14085       return FALSE;
14086     }
14087
14088   return TRUE;
14089 }
14090
14091 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
14092
14093 bfd_boolean
14094 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
14095 {
14096   BFD_ASSERT (!elf_flags_init (abfd)
14097               || elf_elfheader (abfd)->e_flags == flags);
14098
14099   elf_elfheader (abfd)->e_flags = flags;
14100   elf_flags_init (abfd) = TRUE;
14101   return TRUE;
14102 }
14103
14104 char *
14105 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14106 {
14107   switch (dtag)
14108     {
14109     default: return "";
14110     case DT_MIPS_RLD_VERSION:
14111       return "MIPS_RLD_VERSION";
14112     case DT_MIPS_TIME_STAMP:
14113       return "MIPS_TIME_STAMP";
14114     case DT_MIPS_ICHECKSUM:
14115       return "MIPS_ICHECKSUM";
14116     case DT_MIPS_IVERSION:
14117       return "MIPS_IVERSION";
14118     case DT_MIPS_FLAGS:
14119       return "MIPS_FLAGS";
14120     case DT_MIPS_BASE_ADDRESS:
14121       return "MIPS_BASE_ADDRESS";
14122     case DT_MIPS_MSYM:
14123       return "MIPS_MSYM";
14124     case DT_MIPS_CONFLICT:
14125       return "MIPS_CONFLICT";
14126     case DT_MIPS_LIBLIST:
14127       return "MIPS_LIBLIST";
14128     case DT_MIPS_LOCAL_GOTNO:
14129       return "MIPS_LOCAL_GOTNO";
14130     case DT_MIPS_CONFLICTNO:
14131       return "MIPS_CONFLICTNO";
14132     case DT_MIPS_LIBLISTNO:
14133       return "MIPS_LIBLISTNO";
14134     case DT_MIPS_SYMTABNO:
14135       return "MIPS_SYMTABNO";
14136     case DT_MIPS_UNREFEXTNO:
14137       return "MIPS_UNREFEXTNO";
14138     case DT_MIPS_GOTSYM:
14139       return "MIPS_GOTSYM";
14140     case DT_MIPS_HIPAGENO:
14141       return "MIPS_HIPAGENO";
14142     case DT_MIPS_RLD_MAP:
14143       return "MIPS_RLD_MAP";
14144     case DT_MIPS_DELTA_CLASS:
14145       return "MIPS_DELTA_CLASS";
14146     case DT_MIPS_DELTA_CLASS_NO:
14147       return "MIPS_DELTA_CLASS_NO";
14148     case DT_MIPS_DELTA_INSTANCE:
14149       return "MIPS_DELTA_INSTANCE";
14150     case DT_MIPS_DELTA_INSTANCE_NO:
14151       return "MIPS_DELTA_INSTANCE_NO";
14152     case DT_MIPS_DELTA_RELOC:
14153       return "MIPS_DELTA_RELOC";
14154     case DT_MIPS_DELTA_RELOC_NO:
14155       return "MIPS_DELTA_RELOC_NO";
14156     case DT_MIPS_DELTA_SYM:
14157       return "MIPS_DELTA_SYM";
14158     case DT_MIPS_DELTA_SYM_NO:
14159       return "MIPS_DELTA_SYM_NO";
14160     case DT_MIPS_DELTA_CLASSSYM:
14161       return "MIPS_DELTA_CLASSSYM";
14162     case DT_MIPS_DELTA_CLASSSYM_NO:
14163       return "MIPS_DELTA_CLASSSYM_NO";
14164     case DT_MIPS_CXX_FLAGS:
14165       return "MIPS_CXX_FLAGS";
14166     case DT_MIPS_PIXIE_INIT:
14167       return "MIPS_PIXIE_INIT";
14168     case DT_MIPS_SYMBOL_LIB:
14169       return "MIPS_SYMBOL_LIB";
14170     case DT_MIPS_LOCALPAGE_GOTIDX:
14171       return "MIPS_LOCALPAGE_GOTIDX";
14172     case DT_MIPS_LOCAL_GOTIDX:
14173       return "MIPS_LOCAL_GOTIDX";
14174     case DT_MIPS_HIDDEN_GOTIDX:
14175       return "MIPS_HIDDEN_GOTIDX";
14176     case DT_MIPS_PROTECTED_GOTIDX:
14177       return "MIPS_PROTECTED_GOT_IDX";
14178     case DT_MIPS_OPTIONS:
14179       return "MIPS_OPTIONS";
14180     case DT_MIPS_INTERFACE:
14181       return "MIPS_INTERFACE";
14182     case DT_MIPS_DYNSTR_ALIGN:
14183       return "DT_MIPS_DYNSTR_ALIGN";
14184     case DT_MIPS_INTERFACE_SIZE:
14185       return "DT_MIPS_INTERFACE_SIZE";
14186     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14187       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14188     case DT_MIPS_PERF_SUFFIX:
14189       return "DT_MIPS_PERF_SUFFIX";
14190     case DT_MIPS_COMPACT_SIZE:
14191       return "DT_MIPS_COMPACT_SIZE";
14192     case DT_MIPS_GP_VALUE:
14193       return "DT_MIPS_GP_VALUE";
14194     case DT_MIPS_AUX_DYNAMIC:
14195       return "DT_MIPS_AUX_DYNAMIC";
14196     case DT_MIPS_PLTGOT:
14197       return "DT_MIPS_PLTGOT";
14198     case DT_MIPS_RWPLT:
14199       return "DT_MIPS_RWPLT";
14200     }
14201 }
14202
14203 bfd_boolean
14204 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
14205 {
14206   FILE *file = ptr;
14207
14208   BFD_ASSERT (abfd != NULL && ptr != NULL);
14209
14210   /* Print normal ELF private data.  */
14211   _bfd_elf_print_private_bfd_data (abfd, ptr);
14212
14213   /* xgettext:c-format */
14214   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14215
14216   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14217     fprintf (file, _(" [abi=O32]"));
14218   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14219     fprintf (file, _(" [abi=O64]"));
14220   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14221     fprintf (file, _(" [abi=EABI32]"));
14222   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14223     fprintf (file, _(" [abi=EABI64]"));
14224   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14225     fprintf (file, _(" [abi unknown]"));
14226   else if (ABI_N32_P (abfd))
14227     fprintf (file, _(" [abi=N32]"));
14228   else if (ABI_64_P (abfd))
14229     fprintf (file, _(" [abi=64]"));
14230   else
14231     fprintf (file, _(" [no abi set]"));
14232
14233   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
14234     fprintf (file, " [mips1]");
14235   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
14236     fprintf (file, " [mips2]");
14237   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
14238     fprintf (file, " [mips3]");
14239   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
14240     fprintf (file, " [mips4]");
14241   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
14242     fprintf (file, " [mips5]");
14243   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
14244     fprintf (file, " [mips32]");
14245   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
14246     fprintf (file, " [mips64]");
14247   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
14248     fprintf (file, " [mips32r2]");
14249   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
14250     fprintf (file, " [mips64r2]");
14251   else
14252     fprintf (file, _(" [unknown ISA]"));
14253
14254   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14255     fprintf (file, " [mdmx]");
14256
14257   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14258     fprintf (file, " [mips16]");
14259
14260   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14261     fprintf (file, " [micromips]");
14262
14263   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
14264     fprintf (file, " [32bitmode]");
14265   else
14266     fprintf (file, _(" [not 32bitmode]"));
14267
14268   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
14269     fprintf (file, " [noreorder]");
14270
14271   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
14272     fprintf (file, " [PIC]");
14273
14274   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
14275     fprintf (file, " [CPIC]");
14276
14277   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
14278     fprintf (file, " [XGOT]");
14279
14280   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
14281     fprintf (file, " [UCODE]");
14282
14283   fputc ('\n', file);
14284
14285   return TRUE;
14286 }
14287
14288 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
14289 {
14290   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14291   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14292   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14293   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14294   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14295   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
14296   { NULL,                     0,  0, 0,              0 }
14297 };
14298
14299 /* Merge non visibility st_other attributes.  Ensure that the
14300    STO_OPTIONAL flag is copied into h->other, even if this is not a
14301    definiton of the symbol.  */
14302 void
14303 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14304                                       const Elf_Internal_Sym *isym,
14305                                       bfd_boolean definition,
14306                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
14307 {
14308   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14309     {
14310       unsigned char other;
14311
14312       other = (definition ? isym->st_other : h->other);
14313       other &= ~ELF_ST_VISIBILITY (-1);
14314       h->other = other | ELF_ST_VISIBILITY (h->other);
14315     }
14316
14317   if (!definition
14318       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14319     h->other |= STO_OPTIONAL;
14320 }
14321
14322 /* Decide whether an undefined symbol is special and can be ignored.
14323    This is the case for OPTIONAL symbols on IRIX.  */
14324 bfd_boolean
14325 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14326 {
14327   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14328 }
14329
14330 bfd_boolean
14331 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14332 {
14333   return (sym->st_shndx == SHN_COMMON
14334           || sym->st_shndx == SHN_MIPS_ACOMMON
14335           || sym->st_shndx == SHN_MIPS_SCOMMON);
14336 }
14337
14338 /* Return address for Ith PLT stub in section PLT, for relocation REL
14339    or (bfd_vma) -1 if it should not be included.  */
14340
14341 bfd_vma
14342 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14343                            const arelent *rel ATTRIBUTE_UNUSED)
14344 {
14345   return (plt->vma
14346           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14347           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14348 }
14349
14350 void
14351 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14352 {
14353   struct mips_elf_link_hash_table *htab;
14354   Elf_Internal_Ehdr *i_ehdrp;
14355
14356   i_ehdrp = elf_elfheader (abfd);
14357   if (link_info)
14358     {
14359       htab = mips_elf_hash_table (link_info);
14360       BFD_ASSERT (htab != NULL);
14361
14362       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14363         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14364     }
14365 }