oops - spelling fixes accidentally omitted from previous delta.
[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
4    Free Software Foundation, Inc.
5
6    Most of the information added by Ian Lance Taylor, Cygnus Support,
7    <ian@cygnus.com>.
8    N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
9    <mark@codesourcery.com>
10    Traditional MIPS targets support added by Koundinya.K, Dansk Data
11    Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
12
13    This file is part of BFD, the Binary File Descriptor library.
14
15    This program is free software; you can redistribute it and/or modify
16    it under the terms of the GNU General Public License as published by
17    the Free Software Foundation; either version 3 of the License, or
18    (at your option) any later version.
19
20    This program is distributed in the hope that it will be useful,
21    but WITHOUT ANY WARRANTY; without even the implied warranty of
22    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23    GNU General Public License for more details.
24
25    You should have received a copy of the GNU General Public License
26    along with this program; if not, write to the Free Software
27    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
28    MA 02110-1301, USA.  */
29
30
31 /* This file handles functionality common to the different MIPS ABI's.  */
32
33 #include "sysdep.h"
34 #include "bfd.h"
35 #include "libbfd.h"
36 #include "libiberty.h"
37 #include "elf-bfd.h"
38 #include "elfxx-mips.h"
39 #include "elf/mips.h"
40 #include "elf-vxworks.h"
41
42 /* Get the ECOFF swapping routines.  */
43 #include "coff/sym.h"
44 #include "coff/symconst.h"
45 #include "coff/ecoff.h"
46 #include "coff/mips.h"
47
48 #include "hashtab.h"
49
50 /* This structure is used to hold information about one GOT entry.
51    There are three types of entry:
52
53       (1) absolute addresses
54             (abfd == NULL)
55       (2) SYMBOL + OFFSET addresses, where SYMBOL is local to an input bfd
56             (abfd != NULL, symndx >= 0)
57       (3) SYMBOL addresses, where SYMBOL is not local to an input bfd
58             (abfd != NULL, symndx == -1)
59
60    Type (3) entries are treated differently for different types of GOT.
61    In the "master" GOT -- i.e.  the one that describes every GOT
62    reference needed in the link -- the mips_got_entry is keyed on both
63    the symbol and the input bfd that references it.  If it turns out
64    that we need multiple GOTs, we can then use this information to
65    create separate GOTs for each input bfd.
66
67    However, we want each of these separate GOTs to have at most one
68    entry for a given symbol, so their type (3) entries are keyed only
69    on the symbol.  The input bfd given by the "abfd" field is somewhat
70    arbitrary in this case.
71
72    This means that when there are multiple GOTs, each GOT has a unique
73    mips_got_entry for every symbol within it.  We can therefore use the
74    mips_got_entry fields (tls_type and gotidx) to track the symbol's
75    GOT index.
76
77    However, if it turns out that we need only a single GOT, we continue
78    to use the master GOT to describe it.  There may therefore be several
79    mips_got_entries for the same symbol, each with a different input bfd.
80    We want to make sure that each symbol gets a unique GOT entry, so when
81    there's a single GOT, we use the symbol's hash entry, not the
82    mips_got_entry fields, to track a symbol's GOT index.  */
83 struct mips_got_entry
84 {
85   /* The input bfd in which the symbol is defined.  */
86   bfd *abfd;
87   /* The index of the symbol, as stored in the relocation r_info, if
88      we have a local symbol; -1 otherwise.  */
89   long symndx;
90   union
91   {
92     /* If abfd == NULL, an address that must be stored in the got.  */
93     bfd_vma address;
94     /* If abfd != NULL && symndx != -1, the addend of the relocation
95        that should be added to the symbol value.  */
96     bfd_vma addend;
97     /* If abfd != NULL && symndx == -1, the hash table entry
98        corresponding to symbol in the GOT.  The symbol's entry
99        is in the local area if h->global_got_area is GGA_NONE,
100        otherwise it is in the global area.  */
101     struct mips_elf_link_hash_entry *h;
102   } d;
103
104   /* The TLS types included in this GOT entry (specifically, GD and
105      IE).  The GD and IE flags can be added as we encounter new
106      relocations.  LDM can also be set; it will always be alone, not
107      combined with any GD or IE flags.  An LDM GOT entry will be
108      a local symbol entry with r_symndx == 0.  */
109   unsigned char tls_type;
110
111   /* The offset from the beginning of the .got section to the entry
112      corresponding to this symbol+addend.  If it's a global symbol
113      whose offset is yet to be decided, it's going to be -1.  */
114   long gotidx;
115 };
116
117 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
118    The structures form a non-overlapping list that is sorted by increasing
119    MIN_ADDEND.  */
120 struct mips_got_page_range
121 {
122   struct mips_got_page_range *next;
123   bfd_signed_vma min_addend;
124   bfd_signed_vma max_addend;
125 };
126
127 /* This structure describes the range of addends that are applied to page
128    relocations against a given symbol.  */
129 struct mips_got_page_entry
130 {
131   /* The input bfd in which the symbol is defined.  */
132   bfd *abfd;
133   /* The index of the symbol, as stored in the relocation r_info.  */
134   long symndx;
135   /* The ranges for this page entry.  */
136   struct mips_got_page_range *ranges;
137   /* The maximum number of page entries needed for RANGES.  */
138   bfd_vma num_pages;
139 };
140
141 /* This structure is used to hold .got information when linking.  */
142
143 struct mips_got_info
144 {
145   /* The global symbol in the GOT with the lowest index in the dynamic
146      symbol table.  */
147   struct elf_link_hash_entry *global_gotsym;
148   /* The number of global .got entries.  */
149   unsigned int global_gotno;
150   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
151   unsigned int reloc_only_gotno;
152   /* The number of .got slots used for TLS.  */
153   unsigned int tls_gotno;
154   /* The first unused TLS .got entry.  Used only during
155      mips_elf_initialize_tls_index.  */
156   unsigned int tls_assigned_gotno;
157   /* The number of local .got entries, eventually including page entries.  */
158   unsigned int local_gotno;
159   /* The maximum number of page entries needed.  */
160   unsigned int page_gotno;
161   /* The number of local .got entries we have used.  */
162   unsigned int assigned_gotno;
163   /* A hash table holding members of the got.  */
164   struct htab *got_entries;
165   /* A hash table of mips_got_page_entry structures.  */
166   struct htab *got_page_entries;
167   /* A hash table mapping input bfds to other mips_got_info.  NULL
168      unless multi-got was necessary.  */
169   struct htab *bfd2got;
170   /* In multi-got links, a pointer to the next got (err, rather, most
171      of the time, it points to the previous got).  */
172   struct mips_got_info *next;
173   /* This is the GOT index of the TLS LDM entry for the GOT, MINUS_ONE
174      for none, or MINUS_TWO for not yet assigned.  This is needed
175      because a single-GOT link may have multiple hash table entries
176      for the LDM.  It does not get initialized in multi-GOT mode.  */
177   bfd_vma tls_ldm_offset;
178 };
179
180 /* Map an input bfd to a got in a multi-got link.  */
181
182 struct mips_elf_bfd2got_hash
183 {
184   bfd *bfd;
185   struct mips_got_info *g;
186 };
187
188 /* Structure passed when traversing the bfd2got hash table, used to
189    create and merge bfd's gots.  */
190
191 struct mips_elf_got_per_bfd_arg
192 {
193   /* A hashtable that maps bfds to gots.  */
194   htab_t bfd2got;
195   /* The output bfd.  */
196   bfd *obfd;
197   /* The link information.  */
198   struct bfd_link_info *info;
199   /* A pointer to the primary got, i.e., the one that's going to get
200      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
201      DT_MIPS_GOTSYM.  */
202   struct mips_got_info *primary;
203   /* A non-primary got we're trying to merge with other input bfd's
204      gots.  */
205   struct mips_got_info *current;
206   /* The maximum number of got entries that can be addressed with a
207      16-bit offset.  */
208   unsigned int max_count;
209   /* The maximum number of page entries needed by each got.  */
210   unsigned int max_pages;
211   /* The total number of global entries which will live in the
212      primary got and be automatically relocated.  This includes
213      those not referenced by the primary GOT but included in
214      the "master" GOT.  */
215   unsigned int global_count;
216 };
217
218 /* Another structure used to pass arguments for got entries traversal.  */
219
220 struct mips_elf_set_global_got_offset_arg
221 {
222   struct mips_got_info *g;
223   int value;
224   unsigned int needed_relocs;
225   struct bfd_link_info *info;
226 };
227
228 /* A structure used to count TLS relocations or GOT entries, for GOT
229    entry or ELF symbol table traversal.  */
230
231 struct mips_elf_count_tls_arg
232 {
233   struct bfd_link_info *info;
234   unsigned int needed;
235 };
236
237 struct _mips_elf_section_data
238 {
239   struct bfd_elf_section_data elf;
240   union
241   {
242     bfd_byte *tdata;
243   } u;
244 };
245
246 #define mips_elf_section_data(sec) \
247   ((struct _mips_elf_section_data *) elf_section_data (sec))
248
249 #define is_mips_elf(bfd)                                \
250   (bfd_get_flavour (bfd) == bfd_target_elf_flavour      \
251    && elf_tdata (bfd) != NULL                           \
252    && elf_object_id (bfd) == MIPS_ELF_DATA)
253
254 /* The ABI says that every symbol used by dynamic relocations must have
255    a global GOT entry.  Among other things, this provides the dynamic
256    linker with a free, directly-indexed cache.  The GOT can therefore
257    contain symbols that are not referenced by GOT relocations themselves
258    (in other words, it may have symbols that are not referenced by things
259    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
260
261    GOT relocations are less likely to overflow if we put the associated
262    GOT entries towards the beginning.  We therefore divide the global
263    GOT entries into two areas: "normal" and "reloc-only".  Entries in
264    the first area can be used for both dynamic relocations and GP-relative
265    accesses, while those in the "reloc-only" area are for dynamic
266    relocations only.
267
268    These GGA_* ("Global GOT Area") values are organised so that lower
269    values are more general than higher values.  Also, non-GGA_NONE
270    values are ordered by the position of the area in the GOT.  */
271 #define GGA_NORMAL 0
272 #define GGA_RELOC_ONLY 1
273 #define GGA_NONE 2
274
275 /* Information about a non-PIC interface to a PIC function.  There are
276    two ways of creating these interfaces.  The first is to add:
277
278         lui     $25,%hi(func)
279         addiu   $25,$25,%lo(func)
280
281    immediately before a PIC function "func".  The second is to add:
282
283         lui     $25,%hi(func)
284         j       func
285         addiu   $25,$25,%lo(func)
286
287    to a separate trampoline section.
288
289    Stubs of the first kind go in a new section immediately before the
290    target function.  Stubs of the second kind go in a single section
291    pointed to by the hash table's "strampoline" field.  */
292 struct mips_elf_la25_stub {
293   /* The generated section that contains this stub.  */
294   asection *stub_section;
295
296   /* The offset of the stub from the start of STUB_SECTION.  */
297   bfd_vma offset;
298
299   /* One symbol for the original function.  Its location is available
300      in H->root.root.u.def.  */
301   struct mips_elf_link_hash_entry *h;
302 };
303
304 /* Macros for populating a mips_elf_la25_stub.  */
305
306 #define LA25_LUI(VAL) (0x3c190000 | (VAL))      /* lui t9,VAL */
307 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
308 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))    /* addiu t9,t9,VAL */
309
310 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
311    the dynamic symbols.  */
312
313 struct mips_elf_hash_sort_data
314 {
315   /* The symbol in the global GOT with the lowest dynamic symbol table
316      index.  */
317   struct elf_link_hash_entry *low;
318   /* The least dynamic symbol table index corresponding to a non-TLS
319      symbol with a GOT entry.  */
320   long min_got_dynindx;
321   /* The greatest dynamic symbol table index corresponding to a symbol
322      with a GOT entry that is not referenced (e.g., a dynamic symbol
323      with dynamic relocations pointing to it from non-primary GOTs).  */
324   long max_unref_got_dynindx;
325   /* The greatest dynamic symbol table index not corresponding to a
326      symbol without a GOT entry.  */
327   long max_non_got_dynindx;
328 };
329
330 /* The MIPS ELF linker needs additional information for each symbol in
331    the global hash table.  */
332
333 struct mips_elf_link_hash_entry
334 {
335   struct elf_link_hash_entry root;
336
337   /* External symbol information.  */
338   EXTR esym;
339
340   /* The la25 stub we have created for ths symbol, if any.  */
341   struct mips_elf_la25_stub *la25_stub;
342
343   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
344      this symbol.  */
345   unsigned int possibly_dynamic_relocs;
346
347   /* If there is a stub that 32 bit functions should use to call this
348      16 bit function, this points to the section containing the stub.  */
349   asection *fn_stub;
350
351   /* If there is a stub that 16 bit functions should use to call this
352      32 bit function, this points to the section containing the stub.  */
353   asection *call_stub;
354
355   /* This is like the call_stub field, but it is used if the function
356      being called returns a floating point value.  */
357   asection *call_fp_stub;
358
359 #define GOT_NORMAL      0
360 #define GOT_TLS_GD      1
361 #define GOT_TLS_LDM     2
362 #define GOT_TLS_IE      4
363 #define GOT_TLS_OFFSET_DONE    0x40
364 #define GOT_TLS_DONE    0x80
365   unsigned char tls_type;
366
367   /* This is only used in single-GOT mode; in multi-GOT mode there
368      is one mips_got_entry per GOT entry, so the offset is stored
369      there.  In single-GOT mode there may be many mips_got_entry
370      structures all referring to the same GOT slot.  It might be
371      possible to use root.got.offset instead, but that field is
372      overloaded already.  */
373   bfd_vma tls_got_offset;
374
375   /* The highest GGA_* value that satisfies all references to this symbol.  */
376   unsigned int global_got_area : 2;
377
378   /* True if all GOT relocations against this symbol are for calls.  This is
379      a looser condition than no_fn_stub below, because there may be other
380      non-call non-GOT relocations against the symbol.  */
381   unsigned int got_only_for_calls : 1;
382
383   /* True if one of the relocations described by possibly_dynamic_relocs
384      is against a readonly section.  */
385   unsigned int readonly_reloc : 1;
386
387   /* True if there is a relocation against this symbol that must be
388      resolved by the static linker (in other words, if the relocation
389      cannot possibly be made dynamic).  */
390   unsigned int has_static_relocs : 1;
391
392   /* True if we must not create a .MIPS.stubs entry for this symbol.
393      This is set, for example, if there are relocations related to
394      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
395      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
396   unsigned int no_fn_stub : 1;
397
398   /* Whether we need the fn_stub; this is true if this symbol appears
399      in any relocs other than a 16 bit call.  */
400   unsigned int need_fn_stub : 1;
401
402   /* True if this symbol is referenced by branch relocations from
403      any non-PIC input file.  This is used to determine whether an
404      la25 stub is required.  */
405   unsigned int has_nonpic_branches : 1;
406
407   /* Does this symbol need a traditional MIPS lazy-binding stub
408      (as opposed to a PLT entry)?  */
409   unsigned int needs_lazy_stub : 1;
410 };
411
412 /* MIPS ELF linker hash table.  */
413
414 struct mips_elf_link_hash_table
415 {
416   struct elf_link_hash_table root;
417 #if 0
418   /* We no longer use this.  */
419   /* String section indices for the dynamic section symbols.  */
420   bfd_size_type dynsym_sec_strindex[SIZEOF_MIPS_DYNSYM_SECNAMES];
421 #endif
422
423   /* The number of .rtproc entries.  */
424   bfd_size_type procedure_count;
425
426   /* The size of the .compact_rel section (if SGI_COMPAT).  */
427   bfd_size_type compact_rel_size;
428
429   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic
430      entry is set to the address of __rld_obj_head as in IRIX5.  */
431   bfd_boolean use_rld_obj_head;
432
433   /* This is the value of the __rld_map or __rld_obj_head symbol.  */
434   bfd_vma rld_value;
435
436   /* This is set if we see any mips16 stub sections.  */
437   bfd_boolean mips16_stubs_seen;
438
439   /* True if we can generate copy relocs and PLTs.  */
440   bfd_boolean use_plts_and_copy_relocs;
441
442   /* True if we're generating code for VxWorks.  */
443   bfd_boolean is_vxworks;
444
445   /* True if we already reported the small-data section overflow.  */
446   bfd_boolean small_data_overflow_reported;
447
448   /* Shortcuts to some dynamic sections, or NULL if they are not
449      being used.  */
450   asection *srelbss;
451   asection *sdynbss;
452   asection *srelplt;
453   asection *srelplt2;
454   asection *sgotplt;
455   asection *splt;
456   asection *sstubs;
457   asection *sgot;
458
459   /* The master GOT information.  */
460   struct mips_got_info *got_info;
461
462   /* The size of the PLT header in bytes.  */
463   bfd_vma plt_header_size;
464
465   /* The size of a PLT entry in bytes.  */
466   bfd_vma plt_entry_size;
467
468   /* The number of functions that need a lazy-binding stub.  */
469   bfd_vma lazy_stub_count;
470
471   /* The size of a function stub entry in bytes.  */
472   bfd_vma function_stub_size;
473
474   /* The number of reserved entries at the beginning of the GOT.  */
475   unsigned int reserved_gotno;
476
477   /* The section used for mips_elf_la25_stub trampolines.
478      See the comment above that structure for details.  */
479   asection *strampoline;
480
481   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
482      pairs.  */
483   htab_t la25_stubs;
484
485   /* A function FN (NAME, IS, OS) that creates a new input section
486      called NAME and links it to output section OS.  If IS is nonnull,
487      the new section should go immediately before it, otherwise it
488      should go at the (current) beginning of OS.
489
490      The function returns the new section on success, otherwise it
491      returns null.  */
492   asection *(*add_stub_section) (const char *, asection *, asection *);
493 };
494
495 /* Get the MIPS ELF linker hash table from a link_info structure.  */
496
497 #define mips_elf_hash_table(p) \
498   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
499   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
500
501 /* A structure used to communicate with htab_traverse callbacks.  */
502 struct mips_htab_traverse_info
503 {
504   /* The usual link-wide information.  */
505   struct bfd_link_info *info;
506   bfd *output_bfd;
507
508   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
509   bfd_boolean error;
510 };
511
512 #define TLS_RELOC_P(r_type) \
513   (r_type == R_MIPS_TLS_DTPMOD32                \
514    || r_type == R_MIPS_TLS_DTPMOD64             \
515    || r_type == R_MIPS_TLS_DTPREL32             \
516    || r_type == R_MIPS_TLS_DTPREL64             \
517    || r_type == R_MIPS_TLS_GD                   \
518    || r_type == R_MIPS_TLS_LDM                  \
519    || r_type == R_MIPS_TLS_DTPREL_HI16          \
520    || r_type == R_MIPS_TLS_DTPREL_LO16          \
521    || r_type == R_MIPS_TLS_GOTTPREL             \
522    || r_type == R_MIPS_TLS_TPREL32              \
523    || r_type == R_MIPS_TLS_TPREL64              \
524    || r_type == R_MIPS_TLS_TPREL_HI16           \
525    || r_type == R_MIPS_TLS_TPREL_LO16)
526
527 /* Structure used to pass information to mips_elf_output_extsym.  */
528
529 struct extsym_info
530 {
531   bfd *abfd;
532   struct bfd_link_info *info;
533   struct ecoff_debug_info *debug;
534   const struct ecoff_debug_swap *swap;
535   bfd_boolean failed;
536 };
537
538 /* The names of the runtime procedure table symbols used on IRIX5.  */
539
540 static const char * const mips_elf_dynsym_rtproc_names[] =
541 {
542   "_procedure_table",
543   "_procedure_string_table",
544   "_procedure_table_size",
545   NULL
546 };
547
548 /* These structures are used to generate the .compact_rel section on
549    IRIX5.  */
550
551 typedef struct
552 {
553   unsigned long id1;            /* Always one?  */
554   unsigned long num;            /* Number of compact relocation entries.  */
555   unsigned long id2;            /* Always two?  */
556   unsigned long offset;         /* The file offset of the first relocation.  */
557   unsigned long reserved0;      /* Zero?  */
558   unsigned long reserved1;      /* Zero?  */
559 } Elf32_compact_rel;
560
561 typedef struct
562 {
563   bfd_byte id1[4];
564   bfd_byte num[4];
565   bfd_byte id2[4];
566   bfd_byte offset[4];
567   bfd_byte reserved0[4];
568   bfd_byte reserved1[4];
569 } Elf32_External_compact_rel;
570
571 typedef struct
572 {
573   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
574   unsigned int rtype : 4;       /* Relocation types. See below.  */
575   unsigned int dist2to : 8;
576   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
577   unsigned long konst;          /* KONST field. See below.  */
578   unsigned long vaddr;          /* VADDR to be relocated.  */
579 } Elf32_crinfo;
580
581 typedef struct
582 {
583   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
584   unsigned int rtype : 4;       /* Relocation types. See below.  */
585   unsigned int dist2to : 8;
586   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
587   unsigned long konst;          /* KONST field. See below.  */
588 } Elf32_crinfo2;
589
590 typedef struct
591 {
592   bfd_byte info[4];
593   bfd_byte konst[4];
594   bfd_byte vaddr[4];
595 } Elf32_External_crinfo;
596
597 typedef struct
598 {
599   bfd_byte info[4];
600   bfd_byte konst[4];
601 } Elf32_External_crinfo2;
602
603 /* These are the constants used to swap the bitfields in a crinfo.  */
604
605 #define CRINFO_CTYPE (0x1)
606 #define CRINFO_CTYPE_SH (31)
607 #define CRINFO_RTYPE (0xf)
608 #define CRINFO_RTYPE_SH (27)
609 #define CRINFO_DIST2TO (0xff)
610 #define CRINFO_DIST2TO_SH (19)
611 #define CRINFO_RELVADDR (0x7ffff)
612 #define CRINFO_RELVADDR_SH (0)
613
614 /* A compact relocation info has long (3 words) or short (2 words)
615    formats.  A short format doesn't have VADDR field and relvaddr
616    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
617 #define CRF_MIPS_LONG                   1
618 #define CRF_MIPS_SHORT                  0
619
620 /* There are 4 types of compact relocation at least. The value KONST
621    has different meaning for each type:
622
623    (type)               (konst)
624    CT_MIPS_REL32        Address in data
625    CT_MIPS_WORD         Address in word (XXX)
626    CT_MIPS_GPHI_LO      GP - vaddr
627    CT_MIPS_JMPAD        Address to jump
628    */
629
630 #define CRT_MIPS_REL32                  0xa
631 #define CRT_MIPS_WORD                   0xb
632 #define CRT_MIPS_GPHI_LO                0xc
633 #define CRT_MIPS_JMPAD                  0xd
634
635 #define mips_elf_set_cr_format(x,format)        ((x).ctype = (format))
636 #define mips_elf_set_cr_type(x,type)            ((x).rtype = (type))
637 #define mips_elf_set_cr_dist2to(x,v)            ((x).dist2to = (v))
638 #define mips_elf_set_cr_relvaddr(x,d)           ((x).relvaddr = (d)<<2)
639 \f
640 /* The structure of the runtime procedure descriptor created by the
641    loader for use by the static exception system.  */
642
643 typedef struct runtime_pdr {
644         bfd_vma adr;            /* Memory address of start of procedure.  */
645         long    regmask;        /* Save register mask.  */
646         long    regoffset;      /* Save register offset.  */
647         long    fregmask;       /* Save floating point register mask.  */
648         long    fregoffset;     /* Save floating point register offset.  */
649         long    frameoffset;    /* Frame size.  */
650         short   framereg;       /* Frame pointer register.  */
651         short   pcreg;          /* Offset or reg of return pc.  */
652         long    irpss;          /* Index into the runtime string table.  */
653         long    reserved;
654         struct exception_info *exception_info;/* Pointer to exception array.  */
655 } RPDR, *pRPDR;
656 #define cbRPDR sizeof (RPDR)
657 #define rpdNil ((pRPDR) 0)
658 \f
659 static struct mips_got_entry *mips_elf_create_local_got_entry
660   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
661    struct mips_elf_link_hash_entry *, int);
662 static bfd_boolean mips_elf_sort_hash_table_f
663   (struct mips_elf_link_hash_entry *, void *);
664 static bfd_vma mips_elf_high
665   (bfd_vma);
666 static bfd_boolean mips_elf_create_dynamic_relocation
667   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
668    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
669    bfd_vma *, asection *);
670 static hashval_t mips_elf_got_entry_hash
671   (const void *);
672 static bfd_vma mips_elf_adjust_gp
673   (bfd *, struct mips_got_info *, bfd *);
674 static struct mips_got_info *mips_elf_got_for_ibfd
675   (struct mips_got_info *, bfd *);
676
677 /* This will be used when we sort the dynamic relocation records.  */
678 static bfd *reldyn_sorting_bfd;
679
680 /* True if ABFD is for CPUs with load interlocking that include
681    non-MIPS1 CPUs and R3900.  */
682 #define LOAD_INTERLOCKS_P(abfd) \
683   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
684    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
685
686 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
687    This should be safe for all architectures.  We enable this predicate
688    for RM9000 for now.  */
689 #define JAL_TO_BAL_P(abfd) \
690   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
691
692 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
693    This should be safe for all architectures.  We enable this predicate for
694    all CPUs.  */
695 #define JALR_TO_BAL_P(abfd) 1
696
697 /* True if ABFD is for CPUs that are faster if JR is converted to B.
698    This should be safe for all architectures.  We enable this predicate for
699    all CPUs.  */
700 #define JR_TO_B_P(abfd) 1
701
702 /* True if ABFD is a PIC object.  */
703 #define PIC_OBJECT_P(abfd) \
704   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
705
706 /* Nonzero if ABFD is using the N32 ABI.  */
707 #define ABI_N32_P(abfd) \
708   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
709
710 /* Nonzero if ABFD is using the N64 ABI.  */
711 #define ABI_64_P(abfd) \
712   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
713
714 /* Nonzero if ABFD is using NewABI conventions.  */
715 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
716
717 /* The IRIX compatibility level we are striving for.  */
718 #define IRIX_COMPAT(abfd) \
719   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
720
721 /* Whether we are trying to be compatible with IRIX at all.  */
722 #define SGI_COMPAT(abfd) \
723   (IRIX_COMPAT (abfd) != ict_none)
724
725 /* The name of the options section.  */
726 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
727   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
728
729 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
730    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
731 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
732   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
733
734 /* Whether the section is readonly.  */
735 #define MIPS_ELF_READONLY_SECTION(sec) \
736   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
737    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
738
739 /* The name of the stub section.  */
740 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
741
742 /* The size of an external REL relocation.  */
743 #define MIPS_ELF_REL_SIZE(abfd) \
744   (get_elf_backend_data (abfd)->s->sizeof_rel)
745
746 /* The size of an external RELA relocation.  */
747 #define MIPS_ELF_RELA_SIZE(abfd) \
748   (get_elf_backend_data (abfd)->s->sizeof_rela)
749
750 /* The size of an external dynamic table entry.  */
751 #define MIPS_ELF_DYN_SIZE(abfd) \
752   (get_elf_backend_data (abfd)->s->sizeof_dyn)
753
754 /* The size of a GOT entry.  */
755 #define MIPS_ELF_GOT_SIZE(abfd) \
756   (get_elf_backend_data (abfd)->s->arch_size / 8)
757
758 /* The size of a symbol-table entry.  */
759 #define MIPS_ELF_SYM_SIZE(abfd) \
760   (get_elf_backend_data (abfd)->s->sizeof_sym)
761
762 /* The default alignment for sections, as a power of two.  */
763 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
764   (get_elf_backend_data (abfd)->s->log_file_align)
765
766 /* Get word-sized data.  */
767 #define MIPS_ELF_GET_WORD(abfd, ptr) \
768   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
769
770 /* Put out word-sized data.  */
771 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
772   (ABI_64_P (abfd)                              \
773    ? bfd_put_64 (abfd, val, ptr)                \
774    : bfd_put_32 (abfd, val, ptr))
775
776 /* The opcode for word-sized loads (LW or LD).  */
777 #define MIPS_ELF_LOAD_WORD(abfd) \
778   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
779
780 /* Add a dynamic symbol table-entry.  */
781 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
782   _bfd_elf_add_dynamic_entry (info, tag, val)
783
784 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
785   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
786
787 /* The name of the dynamic relocation section.  */
788 #define MIPS_ELF_REL_DYN_NAME(INFO) \
789   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
790
791 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
792    from smaller values.  Start with zero, widen, *then* decrement.  */
793 #define MINUS_ONE       (((bfd_vma)0) - 1)
794 #define MINUS_TWO       (((bfd_vma)0) - 2)
795
796 /* The value to write into got[1] for SVR4 targets, to identify it is
797    a GNU object.  The dynamic linker can then use got[1] to store the
798    module pointer.  */
799 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
800   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
801
802 /* The offset of $gp from the beginning of the .got section.  */
803 #define ELF_MIPS_GP_OFFSET(INFO) \
804   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
805
806 /* The maximum size of the GOT for it to be addressable using 16-bit
807    offsets from $gp.  */
808 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
809
810 /* Instructions which appear in a stub.  */
811 #define STUB_LW(abfd)                                                   \
812   ((ABI_64_P (abfd)                                                     \
813     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
814     : 0x8f998010))                              /* lw t9,0x8010(gp) */
815 #define STUB_MOVE(abfd)                                                 \
816    ((ABI_64_P (abfd)                                                    \
817      ? 0x03e0782d                               /* daddu t7,ra */       \
818      : 0x03e07821))                             /* addu t7,ra */
819 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
820 #define STUB_JALR 0x0320f809                    /* jalr t9,ra */
821 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
822 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
823 #define STUB_LI16S(abfd, VAL)                                           \
824    ((ABI_64_P (abfd)                                                    \
825     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
826     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
827
828 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
829 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
830
831 /* The name of the dynamic interpreter.  This is put in the .interp
832    section.  */
833
834 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
835    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
836     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
837     : "/usr/lib/libc.so.1")
838
839 #ifdef BFD64
840 #define MNAME(bfd,pre,pos) \
841   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
842 #define ELF_R_SYM(bfd, i)                                       \
843   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
844 #define ELF_R_TYPE(bfd, i)                                      \
845   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
846 #define ELF_R_INFO(bfd, s, t)                                   \
847   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
848 #else
849 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
850 #define ELF_R_SYM(bfd, i)                                       \
851   (ELF32_R_SYM (i))
852 #define ELF_R_TYPE(bfd, i)                                      \
853   (ELF32_R_TYPE (i))
854 #define ELF_R_INFO(bfd, s, t)                                   \
855   (ELF32_R_INFO (s, t))
856 #endif
857 \f
858   /* The mips16 compiler uses a couple of special sections to handle
859      floating point arguments.
860
861      Section names that look like .mips16.fn.FNNAME contain stubs that
862      copy floating point arguments from the fp regs to the gp regs and
863      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
864      call should be redirected to the stub instead.  If no 32 bit
865      function calls FNNAME, the stub should be discarded.  We need to
866      consider any reference to the function, not just a call, because
867      if the address of the function is taken we will need the stub,
868      since the address might be passed to a 32 bit function.
869
870      Section names that look like .mips16.call.FNNAME contain stubs
871      that copy floating point arguments from the gp regs to the fp
872      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
873      then any 16 bit function that calls FNNAME should be redirected
874      to the stub instead.  If FNNAME is not a 32 bit function, the
875      stub should be discarded.
876
877      .mips16.call.fp.FNNAME sections are similar, but contain stubs
878      which call FNNAME and then copy the return value from the fp regs
879      to the gp regs.  These stubs store the return value in $18 while
880      calling FNNAME; any function which might call one of these stubs
881      must arrange to save $18 around the call.  (This case is not
882      needed for 32 bit functions that call 16 bit functions, because
883      16 bit functions always return floating point values in both
884      $f0/$f1 and $2/$3.)
885
886      Note that in all cases FNNAME might be defined statically.
887      Therefore, FNNAME is not used literally.  Instead, the relocation
888      information will indicate which symbol the section is for.
889
890      We record any stubs that we find in the symbol table.  */
891
892 #define FN_STUB ".mips16.fn."
893 #define CALL_STUB ".mips16.call."
894 #define CALL_FP_STUB ".mips16.call.fp."
895
896 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
897 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
898 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
899 \f
900 /* The format of the first PLT entry in an O32 executable.  */
901 static const bfd_vma mips_o32_exec_plt0_entry[] =
902 {
903   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
904   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
905   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
906   0x031cc023,   /* subu $24, $24, $28                                   */
907   0x03e07821,   /* move $15, $31                                        */
908   0x0018c082,   /* srl $24, $24, 2                                      */
909   0x0320f809,   /* jalr $25                                             */
910   0x2718fffe    /* subu $24, $24, 2                                     */
911 };
912
913 /* The format of the first PLT entry in an N32 executable.  Different
914    because gp ($28) is not available; we use t2 ($14) instead.  */
915 static const bfd_vma mips_n32_exec_plt0_entry[] =
916 {
917   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
918   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
919   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
920   0x030ec023,   /* subu $24, $24, $14                                   */
921   0x03e07821,   /* move $15, $31                                        */
922   0x0018c082,   /* srl $24, $24, 2                                      */
923   0x0320f809,   /* jalr $25                                             */
924   0x2718fffe    /* subu $24, $24, 2                                     */
925 };
926
927 /* The format of the first PLT entry in an N64 executable.  Different
928    from N32 because of the increased size of GOT entries.  */
929 static const bfd_vma mips_n64_exec_plt0_entry[] =
930 {
931   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
932   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
933   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
934   0x030ec023,   /* subu $24, $24, $14                                   */
935   0x03e07821,   /* move $15, $31                                        */
936   0x0018c0c2,   /* srl $24, $24, 3                                      */
937   0x0320f809,   /* jalr $25                                             */
938   0x2718fffe    /* subu $24, $24, 2                                     */
939 };
940
941 /* The format of subsequent PLT entries.  */
942 static const bfd_vma mips_exec_plt_entry[] =
943 {
944   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
945   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
946   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
947   0x03200008    /* jr $25                                       */
948 };
949
950 /* The format of the first PLT entry in a VxWorks executable.  */
951 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
952 {
953   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
954   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
955   0x8f390008,   /* lw t9, 8(t9)                                 */
956   0x00000000,   /* nop                                          */
957   0x03200008,   /* jr t9                                        */
958   0x00000000    /* nop                                          */
959 };
960
961 /* The format of subsequent PLT entries.  */
962 static const bfd_vma mips_vxworks_exec_plt_entry[] =
963 {
964   0x10000000,   /* b .PLT_resolver                      */
965   0x24180000,   /* li t8, <pltindex>                    */
966   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
967   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
968   0x8f390000,   /* lw t9, 0(t9)                         */
969   0x00000000,   /* nop                                  */
970   0x03200008,   /* jr t9                                */
971   0x00000000    /* nop                                  */
972 };
973
974 /* The format of the first PLT entry in a VxWorks shared object.  */
975 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
976 {
977   0x8f990008,   /* lw t9, 8(gp)         */
978   0x00000000,   /* nop                  */
979   0x03200008,   /* jr t9                */
980   0x00000000,   /* nop                  */
981   0x00000000,   /* nop                  */
982   0x00000000    /* nop                  */
983 };
984
985 /* The format of subsequent PLT entries.  */
986 static const bfd_vma mips_vxworks_shared_plt_entry[] =
987 {
988   0x10000000,   /* b .PLT_resolver      */
989   0x24180000    /* li t8, <pltindex>    */
990 };
991 \f
992 /* Look up an entry in a MIPS ELF linker hash table.  */
993
994 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
995   ((struct mips_elf_link_hash_entry *)                                  \
996    elf_link_hash_lookup (&(table)->root, (string), (create),            \
997                          (copy), (follow)))
998
999 /* Traverse a MIPS ELF linker hash table.  */
1000
1001 #define mips_elf_link_hash_traverse(table, func, info)                  \
1002   (elf_link_hash_traverse                                               \
1003    (&(table)->root,                                                     \
1004     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1005     (info)))
1006
1007 /* Find the base offsets for thread-local storage in this object,
1008    for GD/LD and IE/LE respectively.  */
1009
1010 #define TP_OFFSET 0x7000
1011 #define DTP_OFFSET 0x8000
1012
1013 static bfd_vma
1014 dtprel_base (struct bfd_link_info *info)
1015 {
1016   /* If tls_sec is NULL, we should have signalled an error already.  */
1017   if (elf_hash_table (info)->tls_sec == NULL)
1018     return 0;
1019   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1020 }
1021
1022 static bfd_vma
1023 tprel_base (struct bfd_link_info *info)
1024 {
1025   /* If tls_sec is NULL, we should have signalled an error already.  */
1026   if (elf_hash_table (info)->tls_sec == NULL)
1027     return 0;
1028   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1029 }
1030
1031 /* Create an entry in a MIPS ELF linker hash table.  */
1032
1033 static struct bfd_hash_entry *
1034 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1035                             struct bfd_hash_table *table, const char *string)
1036 {
1037   struct mips_elf_link_hash_entry *ret =
1038     (struct mips_elf_link_hash_entry *) entry;
1039
1040   /* Allocate the structure if it has not already been allocated by a
1041      subclass.  */
1042   if (ret == NULL)
1043     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1044   if (ret == NULL)
1045     return (struct bfd_hash_entry *) ret;
1046
1047   /* Call the allocation method of the superclass.  */
1048   ret = ((struct mips_elf_link_hash_entry *)
1049          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1050                                      table, string));
1051   if (ret != NULL)
1052     {
1053       /* Set local fields.  */
1054       memset (&ret->esym, 0, sizeof (EXTR));
1055       /* We use -2 as a marker to indicate that the information has
1056          not been set.  -1 means there is no associated ifd.  */
1057       ret->esym.ifd = -2;
1058       ret->la25_stub = 0;
1059       ret->possibly_dynamic_relocs = 0;
1060       ret->fn_stub = NULL;
1061       ret->call_stub = NULL;
1062       ret->call_fp_stub = NULL;
1063       ret->tls_type = GOT_NORMAL;
1064       ret->global_got_area = GGA_NONE;
1065       ret->got_only_for_calls = TRUE;
1066       ret->readonly_reloc = FALSE;
1067       ret->has_static_relocs = FALSE;
1068       ret->no_fn_stub = FALSE;
1069       ret->need_fn_stub = FALSE;
1070       ret->has_nonpic_branches = FALSE;
1071       ret->needs_lazy_stub = FALSE;
1072     }
1073
1074   return (struct bfd_hash_entry *) ret;
1075 }
1076
1077 bfd_boolean
1078 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1079 {
1080   if (!sec->used_by_bfd)
1081     {
1082       struct _mips_elf_section_data *sdata;
1083       bfd_size_type amt = sizeof (*sdata);
1084
1085       sdata = bfd_zalloc (abfd, amt);
1086       if (sdata == NULL)
1087         return FALSE;
1088       sec->used_by_bfd = sdata;
1089     }
1090
1091   return _bfd_elf_new_section_hook (abfd, sec);
1092 }
1093 \f
1094 /* Read ECOFF debugging information from a .mdebug section into a
1095    ecoff_debug_info structure.  */
1096
1097 bfd_boolean
1098 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1099                                struct ecoff_debug_info *debug)
1100 {
1101   HDRR *symhdr;
1102   const struct ecoff_debug_swap *swap;
1103   char *ext_hdr;
1104
1105   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1106   memset (debug, 0, sizeof (*debug));
1107
1108   ext_hdr = bfd_malloc (swap->external_hdr_size);
1109   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1110     goto error_return;
1111
1112   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1113                                   swap->external_hdr_size))
1114     goto error_return;
1115
1116   symhdr = &debug->symbolic_header;
1117   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1118
1119   /* The symbolic header contains absolute file offsets and sizes to
1120      read.  */
1121 #define READ(ptr, offset, count, size, type)                            \
1122   if (symhdr->count == 0)                                               \
1123     debug->ptr = NULL;                                                  \
1124   else                                                                  \
1125     {                                                                   \
1126       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1127       debug->ptr = bfd_malloc (amt);                                    \
1128       if (debug->ptr == NULL)                                           \
1129         goto error_return;                                              \
1130       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1131           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1132         goto error_return;                                              \
1133     }
1134
1135   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1136   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1137   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1138   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1139   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1140   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1141         union aux_ext *);
1142   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1143   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1144   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1145   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1146   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1147 #undef READ
1148
1149   debug->fdr = NULL;
1150
1151   return TRUE;
1152
1153  error_return:
1154   if (ext_hdr != NULL)
1155     free (ext_hdr);
1156   if (debug->line != NULL)
1157     free (debug->line);
1158   if (debug->external_dnr != NULL)
1159     free (debug->external_dnr);
1160   if (debug->external_pdr != NULL)
1161     free (debug->external_pdr);
1162   if (debug->external_sym != NULL)
1163     free (debug->external_sym);
1164   if (debug->external_opt != NULL)
1165     free (debug->external_opt);
1166   if (debug->external_aux != NULL)
1167     free (debug->external_aux);
1168   if (debug->ss != NULL)
1169     free (debug->ss);
1170   if (debug->ssext != NULL)
1171     free (debug->ssext);
1172   if (debug->external_fdr != NULL)
1173     free (debug->external_fdr);
1174   if (debug->external_rfd != NULL)
1175     free (debug->external_rfd);
1176   if (debug->external_ext != NULL)
1177     free (debug->external_ext);
1178   return FALSE;
1179 }
1180 \f
1181 /* Swap RPDR (runtime procedure table entry) for output.  */
1182
1183 static void
1184 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1185 {
1186   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1187   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1188   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1189   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1190   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1191   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1192
1193   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1194   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1195
1196   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1197 }
1198
1199 /* Create a runtime procedure table from the .mdebug section.  */
1200
1201 static bfd_boolean
1202 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1203                                  struct bfd_link_info *info, asection *s,
1204                                  struct ecoff_debug_info *debug)
1205 {
1206   const struct ecoff_debug_swap *swap;
1207   HDRR *hdr = &debug->symbolic_header;
1208   RPDR *rpdr, *rp;
1209   struct rpdr_ext *erp;
1210   void *rtproc;
1211   struct pdr_ext *epdr;
1212   struct sym_ext *esym;
1213   char *ss, **sv;
1214   char *str;
1215   bfd_size_type size;
1216   bfd_size_type count;
1217   unsigned long sindex;
1218   unsigned long i;
1219   PDR pdr;
1220   SYMR sym;
1221   const char *no_name_func = _("static procedure (no name)");
1222
1223   epdr = NULL;
1224   rpdr = NULL;
1225   esym = NULL;
1226   ss = NULL;
1227   sv = NULL;
1228
1229   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1230
1231   sindex = strlen (no_name_func) + 1;
1232   count = hdr->ipdMax;
1233   if (count > 0)
1234     {
1235       size = swap->external_pdr_size;
1236
1237       epdr = bfd_malloc (size * count);
1238       if (epdr == NULL)
1239         goto error_return;
1240
1241       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1242         goto error_return;
1243
1244       size = sizeof (RPDR);
1245       rp = rpdr = bfd_malloc (size * count);
1246       if (rpdr == NULL)
1247         goto error_return;
1248
1249       size = sizeof (char *);
1250       sv = bfd_malloc (size * count);
1251       if (sv == NULL)
1252         goto error_return;
1253
1254       count = hdr->isymMax;
1255       size = swap->external_sym_size;
1256       esym = bfd_malloc (size * count);
1257       if (esym == NULL)
1258         goto error_return;
1259
1260       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1261         goto error_return;
1262
1263       count = hdr->issMax;
1264       ss = bfd_malloc (count);
1265       if (ss == NULL)
1266         goto error_return;
1267       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1268         goto error_return;
1269
1270       count = hdr->ipdMax;
1271       for (i = 0; i < (unsigned long) count; i++, rp++)
1272         {
1273           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1274           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1275           rp->adr = sym.value;
1276           rp->regmask = pdr.regmask;
1277           rp->regoffset = pdr.regoffset;
1278           rp->fregmask = pdr.fregmask;
1279           rp->fregoffset = pdr.fregoffset;
1280           rp->frameoffset = pdr.frameoffset;
1281           rp->framereg = pdr.framereg;
1282           rp->pcreg = pdr.pcreg;
1283           rp->irpss = sindex;
1284           sv[i] = ss + sym.iss;
1285           sindex += strlen (sv[i]) + 1;
1286         }
1287     }
1288
1289   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1290   size = BFD_ALIGN (size, 16);
1291   rtproc = bfd_alloc (abfd, size);
1292   if (rtproc == NULL)
1293     {
1294       mips_elf_hash_table (info)->procedure_count = 0;
1295       goto error_return;
1296     }
1297
1298   mips_elf_hash_table (info)->procedure_count = count + 2;
1299
1300   erp = rtproc;
1301   memset (erp, 0, sizeof (struct rpdr_ext));
1302   erp++;
1303   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1304   strcpy (str, no_name_func);
1305   str += strlen (no_name_func) + 1;
1306   for (i = 0; i < count; i++)
1307     {
1308       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1309       strcpy (str, sv[i]);
1310       str += strlen (sv[i]) + 1;
1311     }
1312   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1313
1314   /* Set the size and contents of .rtproc section.  */
1315   s->size = size;
1316   s->contents = rtproc;
1317
1318   /* Skip this section later on (I don't think this currently
1319      matters, but someday it might).  */
1320   s->map_head.link_order = NULL;
1321
1322   if (epdr != NULL)
1323     free (epdr);
1324   if (rpdr != NULL)
1325     free (rpdr);
1326   if (esym != NULL)
1327     free (esym);
1328   if (ss != NULL)
1329     free (ss);
1330   if (sv != NULL)
1331     free (sv);
1332
1333   return TRUE;
1334
1335  error_return:
1336   if (epdr != NULL)
1337     free (epdr);
1338   if (rpdr != NULL)
1339     free (rpdr);
1340   if (esym != NULL)
1341     free (esym);
1342   if (ss != NULL)
1343     free (ss);
1344   if (sv != NULL)
1345     free (sv);
1346   return FALSE;
1347 }
1348 \f
1349 /* We're going to create a stub for H.  Create a symbol for the stub's
1350    value and size, to help make the disassembly easier to read.  */
1351
1352 static bfd_boolean
1353 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1354                              struct mips_elf_link_hash_entry *h,
1355                              const char *prefix, asection *s, bfd_vma value,
1356                              bfd_vma size)
1357 {
1358   struct bfd_link_hash_entry *bh;
1359   struct elf_link_hash_entry *elfh;
1360   const char *name;
1361
1362   /* Create a new symbol.  */
1363   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1364   bh = NULL;
1365   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1366                                          BSF_LOCAL, s, value, NULL,
1367                                          TRUE, FALSE, &bh))
1368     return FALSE;
1369
1370   /* Make it a local function.  */
1371   elfh = (struct elf_link_hash_entry *) bh;
1372   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1373   elfh->size = size;
1374   elfh->forced_local = 1;
1375   return TRUE;
1376 }
1377
1378 /* We're about to redefine H.  Create a symbol to represent H's
1379    current value and size, to help make the disassembly easier
1380    to read.  */
1381
1382 static bfd_boolean
1383 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1384                                struct mips_elf_link_hash_entry *h,
1385                                const char *prefix)
1386 {
1387   struct bfd_link_hash_entry *bh;
1388   struct elf_link_hash_entry *elfh;
1389   const char *name;
1390   asection *s;
1391   bfd_vma value;
1392
1393   /* Read the symbol's value.  */
1394   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1395               || h->root.root.type == bfd_link_hash_defweak);
1396   s = h->root.root.u.def.section;
1397   value = h->root.root.u.def.value;
1398
1399   /* Create a new symbol.  */
1400   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1401   bh = NULL;
1402   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1403                                          BSF_LOCAL, s, value, NULL,
1404                                          TRUE, FALSE, &bh))
1405     return FALSE;
1406
1407   /* Make it local and copy the other attributes from H.  */
1408   elfh = (struct elf_link_hash_entry *) bh;
1409   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1410   elfh->other = h->root.other;
1411   elfh->size = h->root.size;
1412   elfh->forced_local = 1;
1413   return TRUE;
1414 }
1415
1416 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1417    function rather than to a hard-float stub.  */
1418
1419 static bfd_boolean
1420 section_allows_mips16_refs_p (asection *section)
1421 {
1422   const char *name;
1423
1424   name = bfd_get_section_name (section->owner, section);
1425   return (FN_STUB_P (name)
1426           || CALL_STUB_P (name)
1427           || CALL_FP_STUB_P (name)
1428           || strcmp (name, ".pdr") == 0);
1429 }
1430
1431 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1432    stub section of some kind.  Return the R_SYMNDX of the target
1433    function, or 0 if we can't decide which function that is.  */
1434
1435 static unsigned long
1436 mips16_stub_symndx (asection *sec ATTRIBUTE_UNUSED,
1437                     const Elf_Internal_Rela *relocs,
1438                     const Elf_Internal_Rela *relend)
1439 {
1440   const Elf_Internal_Rela *rel;
1441
1442   /* Trust the first R_MIPS_NONE relocation, if any.  */
1443   for (rel = relocs; rel < relend; rel++)
1444     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1445       return ELF_R_SYM (sec->owner, rel->r_info);
1446
1447   /* Otherwise trust the first relocation, whatever its kind.  This is
1448      the traditional behavior.  */
1449   if (relocs < relend)
1450     return ELF_R_SYM (sec->owner, relocs->r_info);
1451
1452   return 0;
1453 }
1454
1455 /* Check the mips16 stubs for a particular symbol, and see if we can
1456    discard them.  */
1457
1458 static void
1459 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1460                              struct mips_elf_link_hash_entry *h)
1461 {
1462   /* Dynamic symbols must use the standard call interface, in case other
1463      objects try to call them.  */
1464   if (h->fn_stub != NULL
1465       && h->root.dynindx != -1)
1466     {
1467       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1468       h->need_fn_stub = TRUE;
1469     }
1470
1471   if (h->fn_stub != NULL
1472       && ! h->need_fn_stub)
1473     {
1474       /* We don't need the fn_stub; the only references to this symbol
1475          are 16 bit calls.  Clobber the size to 0 to prevent it from
1476          being included in the link.  */
1477       h->fn_stub->size = 0;
1478       h->fn_stub->flags &= ~SEC_RELOC;
1479       h->fn_stub->reloc_count = 0;
1480       h->fn_stub->flags |= SEC_EXCLUDE;
1481     }
1482
1483   if (h->call_stub != NULL
1484       && ELF_ST_IS_MIPS16 (h->root.other))
1485     {
1486       /* We don't need the call_stub; this is a 16 bit function, so
1487          calls from other 16 bit functions are OK.  Clobber the size
1488          to 0 to prevent it from being included in the link.  */
1489       h->call_stub->size = 0;
1490       h->call_stub->flags &= ~SEC_RELOC;
1491       h->call_stub->reloc_count = 0;
1492       h->call_stub->flags |= SEC_EXCLUDE;
1493     }
1494
1495   if (h->call_fp_stub != NULL
1496       && ELF_ST_IS_MIPS16 (h->root.other))
1497     {
1498       /* We don't need the call_stub; this is a 16 bit function, so
1499          calls from other 16 bit functions are OK.  Clobber the size
1500          to 0 to prevent it from being included in the link.  */
1501       h->call_fp_stub->size = 0;
1502       h->call_fp_stub->flags &= ~SEC_RELOC;
1503       h->call_fp_stub->reloc_count = 0;
1504       h->call_fp_stub->flags |= SEC_EXCLUDE;
1505     }
1506 }
1507
1508 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1509
1510 static hashval_t
1511 mips_elf_la25_stub_hash (const void *entry_)
1512 {
1513   const struct mips_elf_la25_stub *entry;
1514
1515   entry = (struct mips_elf_la25_stub *) entry_;
1516   return entry->h->root.root.u.def.section->id
1517     + entry->h->root.root.u.def.value;
1518 }
1519
1520 static int
1521 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1522 {
1523   const struct mips_elf_la25_stub *entry1, *entry2;
1524
1525   entry1 = (struct mips_elf_la25_stub *) entry1_;
1526   entry2 = (struct mips_elf_la25_stub *) entry2_;
1527   return ((entry1->h->root.root.u.def.section
1528            == entry2->h->root.root.u.def.section)
1529           && (entry1->h->root.root.u.def.value
1530               == entry2->h->root.root.u.def.value));
1531 }
1532
1533 /* Called by the linker to set up the la25 stub-creation code.  FN is
1534    the linker's implementation of add_stub_function.  Return true on
1535    success.  */
1536
1537 bfd_boolean
1538 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1539                           asection *(*fn) (const char *, asection *,
1540                                            asection *))
1541 {
1542   struct mips_elf_link_hash_table *htab;
1543
1544   htab = mips_elf_hash_table (info);
1545   if (htab == NULL)
1546     return FALSE;
1547
1548   htab->add_stub_section = fn;
1549   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1550                                       mips_elf_la25_stub_eq, NULL);
1551   if (htab->la25_stubs == NULL)
1552     return FALSE;
1553
1554   return TRUE;
1555 }
1556
1557 /* Return true if H is a locally-defined PIC function, in the sense
1558    that it might need $25 to be valid on entry.  Note that MIPS16
1559    functions never need $25 to be valid on entry; they set up $gp
1560    using PC-relative instructions instead.  */
1561
1562 static bfd_boolean
1563 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1564 {
1565   return ((h->root.root.type == bfd_link_hash_defined
1566            || h->root.root.type == bfd_link_hash_defweak)
1567           && h->root.def_regular
1568           && !bfd_is_abs_section (h->root.root.u.def.section)
1569           && !ELF_ST_IS_MIPS16 (h->root.other)
1570           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1571               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1572 }
1573
1574 /* STUB describes an la25 stub that we have decided to implement
1575    by inserting an LUI/ADDIU pair before the target function.
1576    Create the section and redirect the function symbol to it.  */
1577
1578 static bfd_boolean
1579 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1580                          struct bfd_link_info *info)
1581 {
1582   struct mips_elf_link_hash_table *htab;
1583   char *name;
1584   asection *s, *input_section;
1585   unsigned int align;
1586
1587   htab = mips_elf_hash_table (info);
1588   if (htab == NULL)
1589     return FALSE;
1590
1591   /* Create a unique name for the new section.  */
1592   name = bfd_malloc (11 + sizeof (".text.stub."));
1593   if (name == NULL)
1594     return FALSE;
1595   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1596
1597   /* Create the section.  */
1598   input_section = stub->h->root.root.u.def.section;
1599   s = htab->add_stub_section (name, input_section,
1600                               input_section->output_section);
1601   if (s == NULL)
1602     return FALSE;
1603
1604   /* Make sure that any padding goes before the stub.  */
1605   align = input_section->alignment_power;
1606   if (!bfd_set_section_alignment (s->owner, s, align))
1607     return FALSE;
1608   if (align > 3)
1609     s->size = (1 << align) - 8;
1610
1611   /* Create a symbol for the stub.  */
1612   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1613   stub->stub_section = s;
1614   stub->offset = s->size;
1615
1616   /* Allocate room for it.  */
1617   s->size += 8;
1618   return TRUE;
1619 }
1620
1621 /* STUB describes an la25 stub that we have decided to implement
1622    with a separate trampoline.  Allocate room for it and redirect
1623    the function symbol to it.  */
1624
1625 static bfd_boolean
1626 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1627                               struct bfd_link_info *info)
1628 {
1629   struct mips_elf_link_hash_table *htab;
1630   asection *s;
1631
1632   htab = mips_elf_hash_table (info);
1633   if (htab == NULL)
1634     return FALSE;
1635
1636   /* Create a trampoline section, if we haven't already.  */
1637   s = htab->strampoline;
1638   if (s == NULL)
1639     {
1640       asection *input_section = stub->h->root.root.u.def.section;
1641       s = htab->add_stub_section (".text", NULL,
1642                                   input_section->output_section);
1643       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1644         return FALSE;
1645       htab->strampoline = s;
1646     }
1647
1648   /* Create a symbol for the stub.  */
1649   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1650   stub->stub_section = s;
1651   stub->offset = s->size;
1652
1653   /* Allocate room for it.  */
1654   s->size += 16;
1655   return TRUE;
1656 }
1657
1658 /* H describes a symbol that needs an la25 stub.  Make sure that an
1659    appropriate stub exists and point H at it.  */
1660
1661 static bfd_boolean
1662 mips_elf_add_la25_stub (struct bfd_link_info *info,
1663                         struct mips_elf_link_hash_entry *h)
1664 {
1665   struct mips_elf_link_hash_table *htab;
1666   struct mips_elf_la25_stub search, *stub;
1667   bfd_boolean use_trampoline_p;
1668   asection *s;
1669   bfd_vma value;
1670   void **slot;
1671
1672   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1673      of the section and if we would need no more than 2 nops.  */
1674   s = h->root.root.u.def.section;
1675   value = h->root.root.u.def.value;
1676   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1677
1678   /* Describe the stub we want.  */
1679   search.stub_section = NULL;
1680   search.offset = 0;
1681   search.h = h;
1682
1683   /* See if we've already created an equivalent stub.  */
1684   htab = mips_elf_hash_table (info);
1685   if (htab == NULL)
1686     return FALSE;
1687
1688   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1689   if (slot == NULL)
1690     return FALSE;
1691
1692   stub = (struct mips_elf_la25_stub *) *slot;
1693   if (stub != NULL)
1694     {
1695       /* We can reuse the existing stub.  */
1696       h->la25_stub = stub;
1697       return TRUE;
1698     }
1699
1700   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1701   stub = bfd_malloc (sizeof (search));
1702   if (stub == NULL)
1703     return FALSE;
1704   *stub = search;
1705   *slot = stub;
1706
1707   h->la25_stub = stub;
1708   return (use_trampoline_p
1709           ? mips_elf_add_la25_trampoline (stub, info)
1710           : mips_elf_add_la25_intro (stub, info));
1711 }
1712
1713 /* A mips_elf_link_hash_traverse callback that is called before sizing
1714    sections.  DATA points to a mips_htab_traverse_info structure.  */
1715
1716 static bfd_boolean
1717 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1718 {
1719   struct mips_htab_traverse_info *hti;
1720
1721   hti = (struct mips_htab_traverse_info *) data;
1722   if (h->root.root.type == bfd_link_hash_warning)
1723     h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
1724
1725   if (!hti->info->relocatable)
1726     mips_elf_check_mips16_stubs (hti->info, h);
1727
1728   if (mips_elf_local_pic_function_p (h))
1729     {
1730       /* H is a function that might need $25 to be valid on entry.
1731          If we're creating a non-PIC relocatable object, mark H as
1732          being PIC.  If we're creating a non-relocatable object with
1733          non-PIC branches and jumps to H, make sure that H has an la25
1734          stub.  */
1735       if (hti->info->relocatable)
1736         {
1737           if (!PIC_OBJECT_P (hti->output_bfd))
1738             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1739         }
1740       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1741         {
1742           hti->error = TRUE;
1743           return FALSE;
1744         }
1745     }
1746   return TRUE;
1747 }
1748 \f
1749 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1750    Most mips16 instructions are 16 bits, but these instructions
1751    are 32 bits.
1752
1753    The format of these instructions is:
1754
1755    +--------------+--------------------------------+
1756    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
1757    +--------------+--------------------------------+
1758    |                Immediate  15:0                |
1759    +-----------------------------------------------+
1760
1761    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
1762    Note that the immediate value in the first word is swapped.
1763
1764    When producing a relocatable object file, R_MIPS16_26 is
1765    handled mostly like R_MIPS_26.  In particular, the addend is
1766    stored as a straight 26-bit value in a 32-bit instruction.
1767    (gas makes life simpler for itself by never adjusting a
1768    R_MIPS16_26 reloc to be against a section, so the addend is
1769    always zero).  However, the 32 bit instruction is stored as 2
1770    16-bit values, rather than a single 32-bit value.  In a
1771    big-endian file, the result is the same; in a little-endian
1772    file, the two 16-bit halves of the 32 bit value are swapped.
1773    This is so that a disassembler can recognize the jal
1774    instruction.
1775
1776    When doing a final link, R_MIPS16_26 is treated as a 32 bit
1777    instruction stored as two 16-bit values.  The addend A is the
1778    contents of the targ26 field.  The calculation is the same as
1779    R_MIPS_26.  When storing the calculated value, reorder the
1780    immediate value as shown above, and don't forget to store the
1781    value as two 16-bit values.
1782
1783    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1784    defined as
1785
1786    big-endian:
1787    +--------+----------------------+
1788    |        |                      |
1789    |        |    targ26-16         |
1790    |31    26|25                   0|
1791    +--------+----------------------+
1792
1793    little-endian:
1794    +----------+------+-------------+
1795    |          |      |             |
1796    |  sub1    |      |     sub2    |
1797    |0        9|10  15|16         31|
1798    +----------+--------------------+
1799    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1800    ((sub1 << 16) | sub2)).
1801
1802    When producing a relocatable object file, the calculation is
1803    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1804    When producing a fully linked file, the calculation is
1805    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1806    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1807
1808    The table below lists the other MIPS16 instruction relocations.
1809    Each one is calculated in the same way as the non-MIPS16 relocation
1810    given on the right, but using the extended MIPS16 layout of 16-bit
1811    immediate fields:
1812
1813         R_MIPS16_GPREL          R_MIPS_GPREL16
1814         R_MIPS16_GOT16          R_MIPS_GOT16
1815         R_MIPS16_CALL16         R_MIPS_CALL16
1816         R_MIPS16_HI16           R_MIPS_HI16
1817         R_MIPS16_LO16           R_MIPS_LO16
1818
1819    A typical instruction will have a format like this:
1820
1821    +--------------+--------------------------------+
1822    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
1823    +--------------+--------------------------------+
1824    |    Major     |   rx   |   ry   |   Imm  4:0   |
1825    +--------------+--------------------------------+
1826
1827    EXTEND is the five bit value 11110.  Major is the instruction
1828    opcode.
1829
1830    All we need to do here is shuffle the bits appropriately.
1831    As above, the two 16-bit halves must be swapped on a
1832    little-endian system.  */
1833
1834 static inline bfd_boolean
1835 mips16_reloc_p (int r_type)
1836 {
1837   switch (r_type)
1838     {
1839     case R_MIPS16_26:
1840     case R_MIPS16_GPREL:
1841     case R_MIPS16_GOT16:
1842     case R_MIPS16_CALL16:
1843     case R_MIPS16_HI16:
1844     case R_MIPS16_LO16:
1845       return TRUE;
1846
1847     default:
1848       return FALSE;
1849     }
1850 }
1851
1852 static inline bfd_boolean
1853 got16_reloc_p (int r_type)
1854 {
1855   return r_type == R_MIPS_GOT16 || r_type == R_MIPS16_GOT16;
1856 }
1857
1858 static inline bfd_boolean
1859 call16_reloc_p (int r_type)
1860 {
1861   return r_type == R_MIPS_CALL16 || r_type == R_MIPS16_CALL16;
1862 }
1863
1864 static inline bfd_boolean
1865 hi16_reloc_p (int r_type)
1866 {
1867   return r_type == R_MIPS_HI16 || r_type == R_MIPS16_HI16;
1868 }
1869
1870 static inline bfd_boolean
1871 lo16_reloc_p (int r_type)
1872 {
1873   return r_type == R_MIPS_LO16 || r_type == R_MIPS16_LO16;
1874 }
1875
1876 static inline bfd_boolean
1877 mips16_call_reloc_p (int r_type)
1878 {
1879   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
1880 }
1881
1882 static inline bfd_boolean
1883 jal_reloc_p (int r_type)
1884 {
1885   return r_type == R_MIPS_26 || r_type == R_MIPS16_26;
1886 }
1887
1888 void
1889 _bfd_mips16_elf_reloc_unshuffle (bfd *abfd, int r_type,
1890                                  bfd_boolean jal_shuffle, bfd_byte *data)
1891 {
1892   bfd_vma extend, insn, val;
1893
1894   if (!mips16_reloc_p (r_type))
1895     return;
1896
1897   /* Pick up the mips16 extend instruction and the real instruction.  */
1898   extend = bfd_get_16 (abfd, data);
1899   insn = bfd_get_16 (abfd, data + 2);
1900   if (r_type == R_MIPS16_26)
1901     {
1902       if (jal_shuffle)
1903         val = ((extend & 0xfc00) << 16) | ((extend & 0x3e0) << 11)
1904               | ((extend & 0x1f) << 21) | insn;
1905       else
1906         val = extend << 16 | insn;
1907     }
1908   else
1909     val = ((extend & 0xf800) << 16) | ((insn & 0xffe0) << 11)
1910           | ((extend & 0x1f) << 11) | (extend & 0x7e0) | (insn & 0x1f);
1911   bfd_put_32 (abfd, val, data);
1912 }
1913
1914 void
1915 _bfd_mips16_elf_reloc_shuffle (bfd *abfd, int r_type,
1916                                bfd_boolean jal_shuffle, bfd_byte *data)
1917 {
1918   bfd_vma extend, insn, val;
1919
1920   if (!mips16_reloc_p (r_type))
1921     return;
1922
1923   val = bfd_get_32 (abfd, data);
1924   if (r_type == R_MIPS16_26)
1925     {
1926       if (jal_shuffle)
1927         {
1928           insn = val & 0xffff;
1929           extend = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
1930                    | ((val >> 21) & 0x1f);
1931         }
1932       else
1933         {
1934           insn = val & 0xffff;
1935           extend = val >> 16;
1936         }
1937     }
1938   else
1939     {
1940       insn = ((val >> 11) & 0xffe0) | (val & 0x1f);
1941       extend = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
1942     }
1943   bfd_put_16 (abfd, insn, data + 2);
1944   bfd_put_16 (abfd, extend, data);
1945 }
1946
1947 bfd_reloc_status_type
1948 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
1949                                arelent *reloc_entry, asection *input_section,
1950                                bfd_boolean relocatable, void *data, bfd_vma gp)
1951 {
1952   bfd_vma relocation;
1953   bfd_signed_vma val;
1954   bfd_reloc_status_type status;
1955
1956   if (bfd_is_com_section (symbol->section))
1957     relocation = 0;
1958   else
1959     relocation = symbol->value;
1960
1961   relocation += symbol->section->output_section->vma;
1962   relocation += symbol->section->output_offset;
1963
1964   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
1965     return bfd_reloc_outofrange;
1966
1967   /* Set val to the offset into the section or symbol.  */
1968   val = reloc_entry->addend;
1969
1970   _bfd_mips_elf_sign_extend (val, 16);
1971
1972   /* Adjust val for the final section location and GP value.  If we
1973      are producing relocatable output, we don't want to do this for
1974      an external symbol.  */
1975   if (! relocatable
1976       || (symbol->flags & BSF_SECTION_SYM) != 0)
1977     val += relocation - gp;
1978
1979   if (reloc_entry->howto->partial_inplace)
1980     {
1981       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
1982                                        (bfd_byte *) data
1983                                        + reloc_entry->address);
1984       if (status != bfd_reloc_ok)
1985         return status;
1986     }
1987   else
1988     reloc_entry->addend = val;
1989
1990   if (relocatable)
1991     reloc_entry->address += input_section->output_offset;
1992
1993   return bfd_reloc_ok;
1994 }
1995
1996 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
1997    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
1998    that contains the relocation field and DATA points to the start of
1999    INPUT_SECTION.  */
2000
2001 struct mips_hi16
2002 {
2003   struct mips_hi16 *next;
2004   bfd_byte *data;
2005   asection *input_section;
2006   arelent rel;
2007 };
2008
2009 /* FIXME: This should not be a static variable.  */
2010
2011 static struct mips_hi16 *mips_hi16_list;
2012
2013 /* A howto special_function for REL *HI16 relocations.  We can only
2014    calculate the correct value once we've seen the partnering
2015    *LO16 relocation, so just save the information for later.
2016
2017    The ABI requires that the *LO16 immediately follow the *HI16.
2018    However, as a GNU extension, we permit an arbitrary number of
2019    *HI16s to be associated with a single *LO16.  This significantly
2020    simplies the relocation handling in gcc.  */
2021
2022 bfd_reloc_status_type
2023 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2024                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2025                           asection *input_section, bfd *output_bfd,
2026                           char **error_message ATTRIBUTE_UNUSED)
2027 {
2028   struct mips_hi16 *n;
2029
2030   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2031     return bfd_reloc_outofrange;
2032
2033   n = bfd_malloc (sizeof *n);
2034   if (n == NULL)
2035     return bfd_reloc_outofrange;
2036
2037   n->next = mips_hi16_list;
2038   n->data = data;
2039   n->input_section = input_section;
2040   n->rel = *reloc_entry;
2041   mips_hi16_list = n;
2042
2043   if (output_bfd != NULL)
2044     reloc_entry->address += input_section->output_offset;
2045
2046   return bfd_reloc_ok;
2047 }
2048
2049 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2050    like any other 16-bit relocation when applied to global symbols, but is
2051    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2052
2053 bfd_reloc_status_type
2054 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2055                            void *data, asection *input_section,
2056                            bfd *output_bfd, char **error_message)
2057 {
2058   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2059       || bfd_is_und_section (bfd_get_section (symbol))
2060       || bfd_is_com_section (bfd_get_section (symbol)))
2061     /* The relocation is against a global symbol.  */
2062     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2063                                         input_section, output_bfd,
2064                                         error_message);
2065
2066   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2067                                    input_section, output_bfd, error_message);
2068 }
2069
2070 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2071    is a straightforward 16 bit inplace relocation, but we must deal with
2072    any partnering high-part relocations as well.  */
2073
2074 bfd_reloc_status_type
2075 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2076                           void *data, asection *input_section,
2077                           bfd *output_bfd, char **error_message)
2078 {
2079   bfd_vma vallo;
2080   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2081
2082   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2083     return bfd_reloc_outofrange;
2084
2085   _bfd_mips16_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2086                                    location);
2087   vallo = bfd_get_32 (abfd, location);
2088   _bfd_mips16_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2089                                  location);
2090
2091   while (mips_hi16_list != NULL)
2092     {
2093       bfd_reloc_status_type ret;
2094       struct mips_hi16 *hi;
2095
2096       hi = mips_hi16_list;
2097
2098       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2099          want to install the addend in the same way as for a R_MIPS*_HI16
2100          relocation (with a rightshift of 16).  However, since GOT16
2101          relocations can also be used with global symbols, their howto
2102          has a rightshift of 0.  */
2103       if (hi->rel.howto->type == R_MIPS_GOT16)
2104         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2105       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2106         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2107
2108       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2109          carry or borrow will induce a change of +1 or -1 in the high part.  */
2110       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2111
2112       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2113                                          hi->input_section, output_bfd,
2114                                          error_message);
2115       if (ret != bfd_reloc_ok)
2116         return ret;
2117
2118       mips_hi16_list = hi->next;
2119       free (hi);
2120     }
2121
2122   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2123                                       input_section, output_bfd,
2124                                       error_message);
2125 }
2126
2127 /* A generic howto special_function.  This calculates and installs the
2128    relocation itself, thus avoiding the oft-discussed problems in
2129    bfd_perform_relocation and bfd_install_relocation.  */
2130
2131 bfd_reloc_status_type
2132 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2133                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2134                              asection *input_section, bfd *output_bfd,
2135                              char **error_message ATTRIBUTE_UNUSED)
2136 {
2137   bfd_signed_vma val;
2138   bfd_reloc_status_type status;
2139   bfd_boolean relocatable;
2140
2141   relocatable = (output_bfd != NULL);
2142
2143   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2144     return bfd_reloc_outofrange;
2145
2146   /* Build up the field adjustment in VAL.  */
2147   val = 0;
2148   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2149     {
2150       /* Either we're calculating the final field value or we have a
2151          relocation against a section symbol.  Add in the section's
2152          offset or address.  */
2153       val += symbol->section->output_section->vma;
2154       val += symbol->section->output_offset;
2155     }
2156
2157   if (!relocatable)
2158     {
2159       /* We're calculating the final field value.  Add in the symbol's value
2160          and, if pc-relative, subtract the address of the field itself.  */
2161       val += symbol->value;
2162       if (reloc_entry->howto->pc_relative)
2163         {
2164           val -= input_section->output_section->vma;
2165           val -= input_section->output_offset;
2166           val -= reloc_entry->address;
2167         }
2168     }
2169
2170   /* VAL is now the final adjustment.  If we're keeping this relocation
2171      in the output file, and if the relocation uses a separate addend,
2172      we just need to add VAL to that addend.  Otherwise we need to add
2173      VAL to the relocation field itself.  */
2174   if (relocatable && !reloc_entry->howto->partial_inplace)
2175     reloc_entry->addend += val;
2176   else
2177     {
2178       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2179
2180       /* Add in the separate addend, if any.  */
2181       val += reloc_entry->addend;
2182
2183       /* Add VAL to the relocation field.  */
2184       _bfd_mips16_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2185                                        location);
2186       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2187                                        location);
2188       _bfd_mips16_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2189                                      location);
2190
2191       if (status != bfd_reloc_ok)
2192         return status;
2193     }
2194
2195   if (relocatable)
2196     reloc_entry->address += input_section->output_offset;
2197
2198   return bfd_reloc_ok;
2199 }
2200 \f
2201 /* Swap an entry in a .gptab section.  Note that these routines rely
2202    on the equivalence of the two elements of the union.  */
2203
2204 static void
2205 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2206                               Elf32_gptab *in)
2207 {
2208   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2209   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2210 }
2211
2212 static void
2213 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2214                                Elf32_External_gptab *ex)
2215 {
2216   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2217   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2218 }
2219
2220 static void
2221 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2222                                 Elf32_External_compact_rel *ex)
2223 {
2224   H_PUT_32 (abfd, in->id1, ex->id1);
2225   H_PUT_32 (abfd, in->num, ex->num);
2226   H_PUT_32 (abfd, in->id2, ex->id2);
2227   H_PUT_32 (abfd, in->offset, ex->offset);
2228   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2229   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2230 }
2231
2232 static void
2233 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2234                            Elf32_External_crinfo *ex)
2235 {
2236   unsigned long l;
2237
2238   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2239        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2240        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2241        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2242   H_PUT_32 (abfd, l, ex->info);
2243   H_PUT_32 (abfd, in->konst, ex->konst);
2244   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2245 }
2246 \f
2247 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2248    routines swap this structure in and out.  They are used outside of
2249    BFD, so they are globally visible.  */
2250
2251 void
2252 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2253                                 Elf32_RegInfo *in)
2254 {
2255   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2256   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2257   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2258   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2259   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2260   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2261 }
2262
2263 void
2264 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2265                                  Elf32_External_RegInfo *ex)
2266 {
2267   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2268   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2269   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2270   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2271   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2272   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2273 }
2274
2275 /* In the 64 bit ABI, the .MIPS.options section holds register
2276    information in an Elf64_Reginfo structure.  These routines swap
2277    them in and out.  They are globally visible because they are used
2278    outside of BFD.  These routines are here so that gas can call them
2279    without worrying about whether the 64 bit ABI has been included.  */
2280
2281 void
2282 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2283                                 Elf64_Internal_RegInfo *in)
2284 {
2285   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2286   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2287   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2288   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2289   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2290   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2291   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2292 }
2293
2294 void
2295 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2296                                  Elf64_External_RegInfo *ex)
2297 {
2298   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2299   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2300   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2301   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2302   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2303   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2304   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2305 }
2306
2307 /* Swap in an options header.  */
2308
2309 void
2310 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2311                               Elf_Internal_Options *in)
2312 {
2313   in->kind = H_GET_8 (abfd, ex->kind);
2314   in->size = H_GET_8 (abfd, ex->size);
2315   in->section = H_GET_16 (abfd, ex->section);
2316   in->info = H_GET_32 (abfd, ex->info);
2317 }
2318
2319 /* Swap out an options header.  */
2320
2321 void
2322 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2323                                Elf_External_Options *ex)
2324 {
2325   H_PUT_8 (abfd, in->kind, ex->kind);
2326   H_PUT_8 (abfd, in->size, ex->size);
2327   H_PUT_16 (abfd, in->section, ex->section);
2328   H_PUT_32 (abfd, in->info, ex->info);
2329 }
2330 \f
2331 /* This function is called via qsort() to sort the dynamic relocation
2332    entries by increasing r_symndx value.  */
2333
2334 static int
2335 sort_dynamic_relocs (const void *arg1, const void *arg2)
2336 {
2337   Elf_Internal_Rela int_reloc1;
2338   Elf_Internal_Rela int_reloc2;
2339   int diff;
2340
2341   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2342   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2343
2344   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2345   if (diff != 0)
2346     return diff;
2347
2348   if (int_reloc1.r_offset < int_reloc2.r_offset)
2349     return -1;
2350   if (int_reloc1.r_offset > int_reloc2.r_offset)
2351     return 1;
2352   return 0;
2353 }
2354
2355 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2356
2357 static int
2358 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2359                         const void *arg2 ATTRIBUTE_UNUSED)
2360 {
2361 #ifdef BFD64
2362   Elf_Internal_Rela int_reloc1[3];
2363   Elf_Internal_Rela int_reloc2[3];
2364
2365   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2366     (reldyn_sorting_bfd, arg1, int_reloc1);
2367   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2368     (reldyn_sorting_bfd, arg2, int_reloc2);
2369
2370   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2371     return -1;
2372   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2373     return 1;
2374
2375   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2376     return -1;
2377   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2378     return 1;
2379   return 0;
2380 #else
2381   abort ();
2382 #endif
2383 }
2384
2385
2386 /* This routine is used to write out ECOFF debugging external symbol
2387    information.  It is called via mips_elf_link_hash_traverse.  The
2388    ECOFF external symbol information must match the ELF external
2389    symbol information.  Unfortunately, at this point we don't know
2390    whether a symbol is required by reloc information, so the two
2391    tables may wind up being different.  We must sort out the external
2392    symbol information before we can set the final size of the .mdebug
2393    section, and we must set the size of the .mdebug section before we
2394    can relocate any sections, and we can't know which symbols are
2395    required by relocation until we relocate the sections.
2396    Fortunately, it is relatively unlikely that any symbol will be
2397    stripped but required by a reloc.  In particular, it can not happen
2398    when generating a final executable.  */
2399
2400 static bfd_boolean
2401 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2402 {
2403   struct extsym_info *einfo = data;
2404   bfd_boolean strip;
2405   asection *sec, *output_section;
2406
2407   if (h->root.root.type == bfd_link_hash_warning)
2408     h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
2409
2410   if (h->root.indx == -2)
2411     strip = FALSE;
2412   else if ((h->root.def_dynamic
2413             || h->root.ref_dynamic
2414             || h->root.type == bfd_link_hash_new)
2415            && !h->root.def_regular
2416            && !h->root.ref_regular)
2417     strip = TRUE;
2418   else if (einfo->info->strip == strip_all
2419            || (einfo->info->strip == strip_some
2420                && bfd_hash_lookup (einfo->info->keep_hash,
2421                                    h->root.root.root.string,
2422                                    FALSE, FALSE) == NULL))
2423     strip = TRUE;
2424   else
2425     strip = FALSE;
2426
2427   if (strip)
2428     return TRUE;
2429
2430   if (h->esym.ifd == -2)
2431     {
2432       h->esym.jmptbl = 0;
2433       h->esym.cobol_main = 0;
2434       h->esym.weakext = 0;
2435       h->esym.reserved = 0;
2436       h->esym.ifd = ifdNil;
2437       h->esym.asym.value = 0;
2438       h->esym.asym.st = stGlobal;
2439
2440       if (h->root.root.type == bfd_link_hash_undefined
2441           || h->root.root.type == bfd_link_hash_undefweak)
2442         {
2443           const char *name;
2444
2445           /* Use undefined class.  Also, set class and type for some
2446              special symbols.  */
2447           name = h->root.root.root.string;
2448           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2449               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2450             {
2451               h->esym.asym.sc = scData;
2452               h->esym.asym.st = stLabel;
2453               h->esym.asym.value = 0;
2454             }
2455           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2456             {
2457               h->esym.asym.sc = scAbs;
2458               h->esym.asym.st = stLabel;
2459               h->esym.asym.value =
2460                 mips_elf_hash_table (einfo->info)->procedure_count;
2461             }
2462           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2463             {
2464               h->esym.asym.sc = scAbs;
2465               h->esym.asym.st = stLabel;
2466               h->esym.asym.value = elf_gp (einfo->abfd);
2467             }
2468           else
2469             h->esym.asym.sc = scUndefined;
2470         }
2471       else if (h->root.root.type != bfd_link_hash_defined
2472           && h->root.root.type != bfd_link_hash_defweak)
2473         h->esym.asym.sc = scAbs;
2474       else
2475         {
2476           const char *name;
2477
2478           sec = h->root.root.u.def.section;
2479           output_section = sec->output_section;
2480
2481           /* When making a shared library and symbol h is the one from
2482              the another shared library, OUTPUT_SECTION may be null.  */
2483           if (output_section == NULL)
2484             h->esym.asym.sc = scUndefined;
2485           else
2486             {
2487               name = bfd_section_name (output_section->owner, output_section);
2488
2489               if (strcmp (name, ".text") == 0)
2490                 h->esym.asym.sc = scText;
2491               else if (strcmp (name, ".data") == 0)
2492                 h->esym.asym.sc = scData;
2493               else if (strcmp (name, ".sdata") == 0)
2494                 h->esym.asym.sc = scSData;
2495               else if (strcmp (name, ".rodata") == 0
2496                        || strcmp (name, ".rdata") == 0)
2497                 h->esym.asym.sc = scRData;
2498               else if (strcmp (name, ".bss") == 0)
2499                 h->esym.asym.sc = scBss;
2500               else if (strcmp (name, ".sbss") == 0)
2501                 h->esym.asym.sc = scSBss;
2502               else if (strcmp (name, ".init") == 0)
2503                 h->esym.asym.sc = scInit;
2504               else if (strcmp (name, ".fini") == 0)
2505                 h->esym.asym.sc = scFini;
2506               else
2507                 h->esym.asym.sc = scAbs;
2508             }
2509         }
2510
2511       h->esym.asym.reserved = 0;
2512       h->esym.asym.index = indexNil;
2513     }
2514
2515   if (h->root.root.type == bfd_link_hash_common)
2516     h->esym.asym.value = h->root.root.u.c.size;
2517   else if (h->root.root.type == bfd_link_hash_defined
2518            || h->root.root.type == bfd_link_hash_defweak)
2519     {
2520       if (h->esym.asym.sc == scCommon)
2521         h->esym.asym.sc = scBss;
2522       else if (h->esym.asym.sc == scSCommon)
2523         h->esym.asym.sc = scSBss;
2524
2525       sec = h->root.root.u.def.section;
2526       output_section = sec->output_section;
2527       if (output_section != NULL)
2528         h->esym.asym.value = (h->root.root.u.def.value
2529                               + sec->output_offset
2530                               + output_section->vma);
2531       else
2532         h->esym.asym.value = 0;
2533     }
2534   else
2535     {
2536       struct mips_elf_link_hash_entry *hd = h;
2537
2538       while (hd->root.root.type == bfd_link_hash_indirect)
2539         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2540
2541       if (hd->needs_lazy_stub)
2542         {
2543           /* Set type and value for a symbol with a function stub.  */
2544           h->esym.asym.st = stProc;
2545           sec = hd->root.root.u.def.section;
2546           if (sec == NULL)
2547             h->esym.asym.value = 0;
2548           else
2549             {
2550               output_section = sec->output_section;
2551               if (output_section != NULL)
2552                 h->esym.asym.value = (hd->root.plt.offset
2553                                       + sec->output_offset
2554                                       + output_section->vma);
2555               else
2556                 h->esym.asym.value = 0;
2557             }
2558         }
2559     }
2560
2561   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2562                                       h->root.root.root.string,
2563                                       &h->esym))
2564     {
2565       einfo->failed = TRUE;
2566       return FALSE;
2567     }
2568
2569   return TRUE;
2570 }
2571
2572 /* A comparison routine used to sort .gptab entries.  */
2573
2574 static int
2575 gptab_compare (const void *p1, const void *p2)
2576 {
2577   const Elf32_gptab *a1 = p1;
2578   const Elf32_gptab *a2 = p2;
2579
2580   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2581 }
2582 \f
2583 /* Functions to manage the got entry hash table.  */
2584
2585 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2586    hash number.  */
2587
2588 static INLINE hashval_t
2589 mips_elf_hash_bfd_vma (bfd_vma addr)
2590 {
2591 #ifdef BFD64
2592   return addr + (addr >> 32);
2593 #else
2594   return addr;
2595 #endif
2596 }
2597
2598 /* got_entries only match if they're identical, except for gotidx, so
2599    use all fields to compute the hash, and compare the appropriate
2600    union members.  */
2601
2602 static hashval_t
2603 mips_elf_got_entry_hash (const void *entry_)
2604 {
2605   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2606
2607   return entry->symndx
2608     + ((entry->tls_type & GOT_TLS_LDM) << 17)
2609     + (! entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
2610        : entry->abfd->id
2611          + (entry->symndx >= 0 ? mips_elf_hash_bfd_vma (entry->d.addend)
2612             : entry->d.h->root.root.root.hash));
2613 }
2614
2615 static int
2616 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
2617 {
2618   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2619   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2620
2621   /* An LDM entry can only match another LDM entry.  */
2622   if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2623     return 0;
2624
2625   return e1->abfd == e2->abfd && e1->symndx == e2->symndx
2626     && (! e1->abfd ? e1->d.address == e2->d.address
2627         : e1->symndx >= 0 ? e1->d.addend == e2->d.addend
2628         : e1->d.h == e2->d.h);
2629 }
2630
2631 /* multi_got_entries are still a match in the case of global objects,
2632    even if the input bfd in which they're referenced differs, so the
2633    hash computation and compare functions are adjusted
2634    accordingly.  */
2635
2636 static hashval_t
2637 mips_elf_multi_got_entry_hash (const void *entry_)
2638 {
2639   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2640
2641   return entry->symndx
2642     + (! entry->abfd
2643        ? mips_elf_hash_bfd_vma (entry->d.address)
2644        : entry->symndx >= 0
2645        ? ((entry->tls_type & GOT_TLS_LDM)
2646           ? (GOT_TLS_LDM << 17)
2647           : (entry->abfd->id
2648              + mips_elf_hash_bfd_vma (entry->d.addend)))
2649        : entry->d.h->root.root.root.hash);
2650 }
2651
2652 static int
2653 mips_elf_multi_got_entry_eq (const void *entry1, const void *entry2)
2654 {
2655   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2656   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2657
2658   /* Any two LDM entries match.  */
2659   if (e1->tls_type & e2->tls_type & GOT_TLS_LDM)
2660     return 1;
2661
2662   /* Nothing else matches an LDM entry.  */
2663   if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2664     return 0;
2665
2666   return e1->symndx == e2->symndx
2667     && (e1->symndx >= 0 ? e1->abfd == e2->abfd && e1->d.addend == e2->d.addend
2668         : e1->abfd == NULL || e2->abfd == NULL
2669         ? e1->abfd == e2->abfd && e1->d.address == e2->d.address
2670         : e1->d.h == e2->d.h);
2671 }
2672
2673 static hashval_t
2674 mips_got_page_entry_hash (const void *entry_)
2675 {
2676   const struct mips_got_page_entry *entry;
2677
2678   entry = (const struct mips_got_page_entry *) entry_;
2679   return entry->abfd->id + entry->symndx;
2680 }
2681
2682 static int
2683 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
2684 {
2685   const struct mips_got_page_entry *entry1, *entry2;
2686
2687   entry1 = (const struct mips_got_page_entry *) entry1_;
2688   entry2 = (const struct mips_got_page_entry *) entry2_;
2689   return entry1->abfd == entry2->abfd && entry1->symndx == entry2->symndx;
2690 }
2691 \f
2692 /* Return the dynamic relocation section.  If it doesn't exist, try to
2693    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
2694    if creation fails.  */
2695
2696 static asection *
2697 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
2698 {
2699   const char *dname;
2700   asection *sreloc;
2701   bfd *dynobj;
2702
2703   dname = MIPS_ELF_REL_DYN_NAME (info);
2704   dynobj = elf_hash_table (info)->dynobj;
2705   sreloc = bfd_get_section_by_name (dynobj, dname);
2706   if (sreloc == NULL && create_p)
2707     {
2708       sreloc = bfd_make_section_with_flags (dynobj, dname,
2709                                             (SEC_ALLOC
2710                                              | SEC_LOAD
2711                                              | SEC_HAS_CONTENTS
2712                                              | SEC_IN_MEMORY
2713                                              | SEC_LINKER_CREATED
2714                                              | SEC_READONLY));
2715       if (sreloc == NULL
2716           || ! bfd_set_section_alignment (dynobj, sreloc,
2717                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
2718         return NULL;
2719     }
2720   return sreloc;
2721 }
2722
2723 /* Count the number of relocations needed for a TLS GOT entry, with
2724    access types from TLS_TYPE, and symbol H (or a local symbol if H
2725    is NULL).  */
2726
2727 static int
2728 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
2729                      struct elf_link_hash_entry *h)
2730 {
2731   int indx = 0;
2732   int ret = 0;
2733   bfd_boolean need_relocs = FALSE;
2734   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
2735
2736   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
2737       && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
2738     indx = h->dynindx;
2739
2740   if ((info->shared || indx != 0)
2741       && (h == NULL
2742           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2743           || h->root.type != bfd_link_hash_undefweak))
2744     need_relocs = TRUE;
2745
2746   if (!need_relocs)
2747     return FALSE;
2748
2749   if (tls_type & GOT_TLS_GD)
2750     {
2751       ret++;
2752       if (indx != 0)
2753         ret++;
2754     }
2755
2756   if (tls_type & GOT_TLS_IE)
2757     ret++;
2758
2759   if ((tls_type & GOT_TLS_LDM) && info->shared)
2760     ret++;
2761
2762   return ret;
2763 }
2764
2765 /* Count the number of TLS relocations required for the GOT entry in
2766    ARG1, if it describes a local symbol.  */
2767
2768 static int
2769 mips_elf_count_local_tls_relocs (void **arg1, void *arg2)
2770 {
2771   struct mips_got_entry *entry = * (struct mips_got_entry **) arg1;
2772   struct mips_elf_count_tls_arg *arg = arg2;
2773
2774   if (entry->abfd != NULL && entry->symndx != -1)
2775     arg->needed += mips_tls_got_relocs (arg->info, entry->tls_type, NULL);
2776
2777   return 1;
2778 }
2779
2780 /* Count the number of TLS GOT entries required for the global (or
2781    forced-local) symbol in ARG1.  */
2782
2783 static int
2784 mips_elf_count_global_tls_entries (void *arg1, void *arg2)
2785 {
2786   struct mips_elf_link_hash_entry *hm
2787     = (struct mips_elf_link_hash_entry *) arg1;
2788   struct mips_elf_count_tls_arg *arg = arg2;
2789
2790   if (hm->tls_type & GOT_TLS_GD)
2791     arg->needed += 2;
2792   if (hm->tls_type & GOT_TLS_IE)
2793     arg->needed += 1;
2794
2795   return 1;
2796 }
2797
2798 /* Count the number of TLS relocations required for the global (or
2799    forced-local) symbol in ARG1.  */
2800
2801 static int
2802 mips_elf_count_global_tls_relocs (void *arg1, void *arg2)
2803 {
2804   struct mips_elf_link_hash_entry *hm
2805     = (struct mips_elf_link_hash_entry *) arg1;
2806   struct mips_elf_count_tls_arg *arg = arg2;
2807
2808   arg->needed += mips_tls_got_relocs (arg->info, hm->tls_type, &hm->root);
2809
2810   return 1;
2811 }
2812
2813 /* Output a simple dynamic relocation into SRELOC.  */
2814
2815 static void
2816 mips_elf_output_dynamic_relocation (bfd *output_bfd,
2817                                     asection *sreloc,
2818                                     unsigned long reloc_index,
2819                                     unsigned long indx,
2820                                     int r_type,
2821                                     bfd_vma offset)
2822 {
2823   Elf_Internal_Rela rel[3];
2824
2825   memset (rel, 0, sizeof (rel));
2826
2827   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
2828   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
2829
2830   if (ABI_64_P (output_bfd))
2831     {
2832       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
2833         (output_bfd, &rel[0],
2834          (sreloc->contents
2835           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
2836     }
2837   else
2838     bfd_elf32_swap_reloc_out
2839       (output_bfd, &rel[0],
2840        (sreloc->contents
2841         + reloc_index * sizeof (Elf32_External_Rel)));
2842 }
2843
2844 /* Initialize a set of TLS GOT entries for one symbol.  */
2845
2846 static void
2847 mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset,
2848                                unsigned char *tls_type_p,
2849                                struct bfd_link_info *info,
2850                                struct mips_elf_link_hash_entry *h,
2851                                bfd_vma value)
2852 {
2853   struct mips_elf_link_hash_table *htab;
2854   int indx;
2855   asection *sreloc, *sgot;
2856   bfd_vma offset, offset2;
2857   bfd_boolean need_relocs = FALSE;
2858
2859   htab = mips_elf_hash_table (info);
2860   if (htab == NULL)
2861     return;
2862
2863   sgot = htab->sgot;
2864
2865   indx = 0;
2866   if (h != NULL)
2867     {
2868       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
2869
2870       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
2871           && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
2872         indx = h->root.dynindx;
2873     }
2874
2875   if (*tls_type_p & GOT_TLS_DONE)
2876     return;
2877
2878   if ((info->shared || indx != 0)
2879       && (h == NULL
2880           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
2881           || h->root.type != bfd_link_hash_undefweak))
2882     need_relocs = TRUE;
2883
2884   /* MINUS_ONE means the symbol is not defined in this object.  It may not
2885      be defined at all; assume that the value doesn't matter in that
2886      case.  Otherwise complain if we would use the value.  */
2887   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
2888               || h->root.root.type == bfd_link_hash_undefweak);
2889
2890   /* Emit necessary relocations.  */
2891   sreloc = mips_elf_rel_dyn_section (info, FALSE);
2892
2893   /* General Dynamic.  */
2894   if (*tls_type_p & GOT_TLS_GD)
2895     {
2896       offset = got_offset;
2897       offset2 = offset + MIPS_ELF_GOT_SIZE (abfd);
2898
2899       if (need_relocs)
2900         {
2901           mips_elf_output_dynamic_relocation
2902             (abfd, sreloc, sreloc->reloc_count++, indx,
2903              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
2904              sgot->output_offset + sgot->output_section->vma + offset);
2905
2906           if (indx)
2907             mips_elf_output_dynamic_relocation
2908               (abfd, sreloc, sreloc->reloc_count++, indx,
2909                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
2910                sgot->output_offset + sgot->output_section->vma + offset2);
2911           else
2912             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
2913                                sgot->contents + offset2);
2914         }
2915       else
2916         {
2917           MIPS_ELF_PUT_WORD (abfd, 1,
2918                              sgot->contents + offset);
2919           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
2920                              sgot->contents + offset2);
2921         }
2922
2923       got_offset += 2 * MIPS_ELF_GOT_SIZE (abfd);
2924     }
2925
2926   /* Initial Exec model.  */
2927   if (*tls_type_p & GOT_TLS_IE)
2928     {
2929       offset = got_offset;
2930
2931       if (need_relocs)
2932         {
2933           if (indx == 0)
2934             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
2935                                sgot->contents + offset);
2936           else
2937             MIPS_ELF_PUT_WORD (abfd, 0,
2938                                sgot->contents + offset);
2939
2940           mips_elf_output_dynamic_relocation
2941             (abfd, sreloc, sreloc->reloc_count++, indx,
2942              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
2943              sgot->output_offset + sgot->output_section->vma + offset);
2944         }
2945       else
2946         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
2947                            sgot->contents + offset);
2948     }
2949
2950   if (*tls_type_p & GOT_TLS_LDM)
2951     {
2952       /* The initial offset is zero, and the LD offsets will include the
2953          bias by DTP_OFFSET.  */
2954       MIPS_ELF_PUT_WORD (abfd, 0,
2955                          sgot->contents + got_offset
2956                          + MIPS_ELF_GOT_SIZE (abfd));
2957
2958       if (!info->shared)
2959         MIPS_ELF_PUT_WORD (abfd, 1,
2960                            sgot->contents + got_offset);
2961       else
2962         mips_elf_output_dynamic_relocation
2963           (abfd, sreloc, sreloc->reloc_count++, indx,
2964            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
2965            sgot->output_offset + sgot->output_section->vma + got_offset);
2966     }
2967
2968   *tls_type_p |= GOT_TLS_DONE;
2969 }
2970
2971 /* Return the GOT index to use for a relocation of type R_TYPE against
2972    a symbol accessed using TLS_TYPE models.  The GOT entries for this
2973    symbol in this GOT start at GOT_INDEX.  This function initializes the
2974    GOT entries and corresponding relocations.  */
2975
2976 static bfd_vma
2977 mips_tls_got_index (bfd *abfd, bfd_vma got_index, unsigned char *tls_type,
2978                     int r_type, struct bfd_link_info *info,
2979                     struct mips_elf_link_hash_entry *h, bfd_vma symbol)
2980 {
2981   BFD_ASSERT (r_type == R_MIPS_TLS_GOTTPREL || r_type == R_MIPS_TLS_GD
2982               || r_type == R_MIPS_TLS_LDM);
2983
2984   mips_elf_initialize_tls_slots (abfd, got_index, tls_type, info, h, symbol);
2985
2986   if (r_type == R_MIPS_TLS_GOTTPREL)
2987     {
2988       BFD_ASSERT (*tls_type & GOT_TLS_IE);
2989       if (*tls_type & GOT_TLS_GD)
2990         return got_index + 2 * MIPS_ELF_GOT_SIZE (abfd);
2991       else
2992         return got_index;
2993     }
2994
2995   if (r_type == R_MIPS_TLS_GD)
2996     {
2997       BFD_ASSERT (*tls_type & GOT_TLS_GD);
2998       return got_index;
2999     }
3000
3001   if (r_type == R_MIPS_TLS_LDM)
3002     {
3003       BFD_ASSERT (*tls_type & GOT_TLS_LDM);
3004       return got_index;
3005     }
3006
3007   return got_index;
3008 }
3009
3010 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3011    for global symbol H.  .got.plt comes before the GOT, so the offset
3012    will be negative.  */
3013
3014 static bfd_vma
3015 mips_elf_gotplt_index (struct bfd_link_info *info,
3016                        struct elf_link_hash_entry *h)
3017 {
3018   bfd_vma plt_index, got_address, got_value;
3019   struct mips_elf_link_hash_table *htab;
3020
3021   htab = mips_elf_hash_table (info);
3022   BFD_ASSERT (htab != NULL);
3023
3024   BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
3025
3026   /* This function only works for VxWorks, because a non-VxWorks .got.plt
3027      section starts with reserved entries.  */
3028   BFD_ASSERT (htab->is_vxworks);
3029
3030   /* Calculate the index of the symbol's PLT entry.  */
3031   plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
3032
3033   /* Calculate the address of the associated .got.plt entry.  */
3034   got_address = (htab->sgotplt->output_section->vma
3035                  + htab->sgotplt->output_offset
3036                  + plt_index * 4);
3037
3038   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3039   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3040                + htab->root.hgot->root.u.def.section->output_offset
3041                + htab->root.hgot->root.u.def.value);
3042
3043   return got_address - got_value;
3044 }
3045
3046 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3047    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3048    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3049    offset can be found.  */
3050
3051 static bfd_vma
3052 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3053                           bfd_vma value, unsigned long r_symndx,
3054                           struct mips_elf_link_hash_entry *h, int r_type)
3055 {
3056   struct mips_elf_link_hash_table *htab;
3057   struct mips_got_entry *entry;
3058
3059   htab = mips_elf_hash_table (info);
3060   BFD_ASSERT (htab != NULL);
3061
3062   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3063                                            r_symndx, h, r_type);
3064   if (!entry)
3065     return MINUS_ONE;
3066
3067   if (TLS_RELOC_P (r_type))
3068     {
3069       if (entry->symndx == -1 && htab->got_info->next == NULL)
3070         /* A type (3) entry in the single-GOT case.  We use the symbol's
3071            hash table entry to track the index.  */
3072         return mips_tls_got_index (abfd, h->tls_got_offset, &h->tls_type,
3073                                    r_type, info, h, value);
3074       else
3075         return mips_tls_got_index (abfd, entry->gotidx, &entry->tls_type,
3076                                    r_type, info, h, value);
3077     }
3078   else
3079     return entry->gotidx;
3080 }
3081
3082 /* Returns the GOT index for the global symbol indicated by H.  */
3083
3084 static bfd_vma
3085 mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h,
3086                            int r_type, struct bfd_link_info *info)
3087 {
3088   struct mips_elf_link_hash_table *htab;
3089   bfd_vma got_index;
3090   struct mips_got_info *g, *gg;
3091   long global_got_dynindx = 0;
3092
3093   htab = mips_elf_hash_table (info);
3094   BFD_ASSERT (htab != NULL);
3095
3096   gg = g = htab->got_info;
3097   if (g->bfd2got && ibfd)
3098     {
3099       struct mips_got_entry e, *p;
3100
3101       BFD_ASSERT (h->dynindx >= 0);
3102
3103       g = mips_elf_got_for_ibfd (g, ibfd);
3104       if (g->next != gg || TLS_RELOC_P (r_type))
3105         {
3106           e.abfd = ibfd;
3107           e.symndx = -1;
3108           e.d.h = (struct mips_elf_link_hash_entry *)h;
3109           e.tls_type = 0;
3110
3111           p = htab_find (g->got_entries, &e);
3112
3113           BFD_ASSERT (p->gotidx > 0);
3114
3115           if (TLS_RELOC_P (r_type))
3116             {
3117               bfd_vma value = MINUS_ONE;
3118               if ((h->root.type == bfd_link_hash_defined
3119                    || h->root.type == bfd_link_hash_defweak)
3120                   && h->root.u.def.section->output_section)
3121                 value = (h->root.u.def.value
3122                          + h->root.u.def.section->output_offset
3123                          + h->root.u.def.section->output_section->vma);
3124
3125               return mips_tls_got_index (abfd, p->gotidx, &p->tls_type, r_type,
3126                                          info, e.d.h, value);
3127             }
3128           else
3129             return p->gotidx;
3130         }
3131     }
3132
3133   if (gg->global_gotsym != NULL)
3134     global_got_dynindx = gg->global_gotsym->dynindx;
3135
3136   if (TLS_RELOC_P (r_type))
3137     {
3138       struct mips_elf_link_hash_entry *hm
3139         = (struct mips_elf_link_hash_entry *) h;
3140       bfd_vma value = MINUS_ONE;
3141
3142       if ((h->root.type == bfd_link_hash_defined
3143            || h->root.type == bfd_link_hash_defweak)
3144           && h->root.u.def.section->output_section)
3145         value = (h->root.u.def.value
3146                  + h->root.u.def.section->output_offset
3147                  + h->root.u.def.section->output_section->vma);
3148
3149       got_index = mips_tls_got_index (abfd, hm->tls_got_offset, &hm->tls_type,
3150                                       r_type, info, hm, value);
3151     }
3152   else
3153     {
3154       /* Once we determine the global GOT entry with the lowest dynamic
3155          symbol table index, we must put all dynamic symbols with greater
3156          indices into the GOT.  That makes it easy to calculate the GOT
3157          offset.  */
3158       BFD_ASSERT (h->dynindx >= global_got_dynindx);
3159       got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3160                    * MIPS_ELF_GOT_SIZE (abfd));
3161     }
3162   BFD_ASSERT (got_index < htab->sgot->size);
3163
3164   return got_index;
3165 }
3166
3167 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3168    entries are supposed to be placed at small offsets in the GOT, i.e.,
3169    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3170    entry could be created.  If OFFSETP is nonnull, use it to return the
3171    offset of the GOT entry from VALUE.  */
3172
3173 static bfd_vma
3174 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3175                    bfd_vma value, bfd_vma *offsetp)
3176 {
3177   bfd_vma page, got_index;
3178   struct mips_got_entry *entry;
3179
3180   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3181   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3182                                            NULL, R_MIPS_GOT_PAGE);
3183
3184   if (!entry)
3185     return MINUS_ONE;
3186
3187   got_index = entry->gotidx;
3188
3189   if (offsetp)
3190     *offsetp = value - entry->d.address;
3191
3192   return got_index;
3193 }
3194
3195 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3196    EXTERNAL is true if the relocation was originally against a global
3197    symbol that binds locally.  */
3198
3199 static bfd_vma
3200 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3201                       bfd_vma value, bfd_boolean external)
3202 {
3203   struct mips_got_entry *entry;
3204
3205   /* GOT16 relocations against local symbols are followed by a LO16
3206      relocation; those against global symbols are not.  Thus if the
3207      symbol was originally local, the GOT16 relocation should load the
3208      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3209   if (! external)
3210     value = mips_elf_high (value) << 16;
3211
3212   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3213      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3214      same in all cases.  */
3215   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3216                                            NULL, R_MIPS_GOT16);
3217   if (entry)
3218     return entry->gotidx;
3219   else
3220     return MINUS_ONE;
3221 }
3222
3223 /* Returns the offset for the entry at the INDEXth position
3224    in the GOT.  */
3225
3226 static bfd_vma
3227 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3228                                 bfd *input_bfd, bfd_vma got_index)
3229 {
3230   struct mips_elf_link_hash_table *htab;
3231   asection *sgot;
3232   bfd_vma gp;
3233
3234   htab = mips_elf_hash_table (info);
3235   BFD_ASSERT (htab != NULL);
3236
3237   sgot = htab->sgot;
3238   gp = _bfd_get_gp_value (output_bfd)
3239     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3240
3241   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3242 }
3243
3244 /* Create and return a local GOT entry for VALUE, which was calculated
3245    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3246    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3247    instead.  */
3248
3249 static struct mips_got_entry *
3250 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3251                                  bfd *ibfd, bfd_vma value,
3252                                  unsigned long r_symndx,
3253                                  struct mips_elf_link_hash_entry *h,
3254                                  int r_type)
3255 {
3256   struct mips_got_entry entry, **loc;
3257   struct mips_got_info *g;
3258   struct mips_elf_link_hash_table *htab;
3259
3260   htab = mips_elf_hash_table (info);
3261   BFD_ASSERT (htab != NULL);
3262
3263   entry.abfd = NULL;
3264   entry.symndx = -1;
3265   entry.d.address = value;
3266   entry.tls_type = 0;
3267
3268   g = mips_elf_got_for_ibfd (htab->got_info, ibfd);
3269   if (g == NULL)
3270     {
3271       g = mips_elf_got_for_ibfd (htab->got_info, abfd);
3272       BFD_ASSERT (g != NULL);
3273     }
3274
3275   /* This function shouldn't be called for symbols that live in the global
3276      area of the GOT.  */
3277   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3278   if (TLS_RELOC_P (r_type))
3279     {
3280       struct mips_got_entry *p;
3281
3282       entry.abfd = ibfd;
3283       if (r_type == R_MIPS_TLS_LDM)
3284         {
3285           entry.tls_type = GOT_TLS_LDM;
3286           entry.symndx = 0;
3287           entry.d.addend = 0;
3288         }
3289       else if (h == NULL)
3290         {
3291           entry.symndx = r_symndx;
3292           entry.d.addend = 0;
3293         }
3294       else
3295         entry.d.h = h;
3296
3297       p = (struct mips_got_entry *)
3298         htab_find (g->got_entries, &entry);
3299
3300       BFD_ASSERT (p);
3301       return p;
3302     }
3303
3304   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3305                                                    INSERT);
3306   if (*loc)
3307     return *loc;
3308
3309   entry.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
3310   entry.tls_type = 0;
3311
3312   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3313
3314   if (! *loc)
3315     return NULL;
3316
3317   memcpy (*loc, &entry, sizeof entry);
3318
3319   if (g->assigned_gotno > g->local_gotno)
3320     {
3321       (*loc)->gotidx = -1;
3322       /* We didn't allocate enough space in the GOT.  */
3323       (*_bfd_error_handler)
3324         (_("not enough GOT space for local GOT entries"));
3325       bfd_set_error (bfd_error_bad_value);
3326       return NULL;
3327     }
3328
3329   MIPS_ELF_PUT_WORD (abfd, value,
3330                      (htab->sgot->contents + entry.gotidx));
3331
3332   /* These GOT entries need a dynamic relocation on VxWorks.  */
3333   if (htab->is_vxworks)
3334     {
3335       Elf_Internal_Rela outrel;
3336       asection *s;
3337       bfd_byte *rloc;
3338       bfd_vma got_address;
3339
3340       s = mips_elf_rel_dyn_section (info, FALSE);
3341       got_address = (htab->sgot->output_section->vma
3342                      + htab->sgot->output_offset
3343                      + entry.gotidx);
3344
3345       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3346       outrel.r_offset = got_address;
3347       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3348       outrel.r_addend = value;
3349       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3350     }
3351
3352   return *loc;
3353 }
3354
3355 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3356    The number might be exact or a worst-case estimate, depending on how
3357    much information is available to elf_backend_omit_section_dynsym at
3358    the current linking stage.  */
3359
3360 static bfd_size_type
3361 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3362 {
3363   bfd_size_type count;
3364
3365   count = 0;
3366   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3367     {
3368       asection *p;
3369       const struct elf_backend_data *bed;
3370
3371       bed = get_elf_backend_data (output_bfd);
3372       for (p = output_bfd->sections; p ; p = p->next)
3373         if ((p->flags & SEC_EXCLUDE) == 0
3374             && (p->flags & SEC_ALLOC) != 0
3375             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3376           ++count;
3377     }
3378   return count;
3379 }
3380
3381 /* Sort the dynamic symbol table so that symbols that need GOT entries
3382    appear towards the end.  */
3383
3384 static bfd_boolean
3385 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3386 {
3387   struct mips_elf_link_hash_table *htab;
3388   struct mips_elf_hash_sort_data hsd;
3389   struct mips_got_info *g;
3390
3391   if (elf_hash_table (info)->dynsymcount == 0)
3392     return TRUE;
3393
3394   htab = mips_elf_hash_table (info);
3395   BFD_ASSERT (htab != NULL);
3396
3397   g = htab->got_info;
3398   if (g == NULL)
3399     return TRUE;
3400
3401   hsd.low = NULL;
3402   hsd.max_unref_got_dynindx
3403     = hsd.min_got_dynindx
3404     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3405   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3406   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3407                                 elf_hash_table (info)),
3408                                mips_elf_sort_hash_table_f,
3409                                &hsd);
3410
3411   /* There should have been enough room in the symbol table to
3412      accommodate both the GOT and non-GOT symbols.  */
3413   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3414   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3415               == elf_hash_table (info)->dynsymcount);
3416   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3417               == g->global_gotno);
3418
3419   /* Now we know which dynamic symbol has the lowest dynamic symbol
3420      table index in the GOT.  */
3421   g->global_gotsym = hsd.low;
3422
3423   return TRUE;
3424 }
3425
3426 /* If H needs a GOT entry, assign it the highest available dynamic
3427    index.  Otherwise, assign it the lowest available dynamic
3428    index.  */
3429
3430 static bfd_boolean
3431 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3432 {
3433   struct mips_elf_hash_sort_data *hsd = data;
3434
3435   if (h->root.root.type == bfd_link_hash_warning)
3436     h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3437
3438   /* Symbols without dynamic symbol table entries aren't interesting
3439      at all.  */
3440   if (h->root.dynindx == -1)
3441     return TRUE;
3442
3443   switch (h->global_got_area)
3444     {
3445     case GGA_NONE:
3446       h->root.dynindx = hsd->max_non_got_dynindx++;
3447       break;
3448
3449     case GGA_NORMAL:
3450       BFD_ASSERT (h->tls_type == GOT_NORMAL);
3451
3452       h->root.dynindx = --hsd->min_got_dynindx;
3453       hsd->low = (struct elf_link_hash_entry *) h;
3454       break;
3455
3456     case GGA_RELOC_ONLY:
3457       BFD_ASSERT (h->tls_type == GOT_NORMAL);
3458
3459       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3460         hsd->low = (struct elf_link_hash_entry *) h;
3461       h->root.dynindx = hsd->max_unref_got_dynindx++;
3462       break;
3463     }
3464
3465   return TRUE;
3466 }
3467
3468 /* If H is a symbol that needs a global GOT entry, but has a dynamic
3469    symbol table index lower than any we've seen to date, record it for
3470    posterity.  FOR_CALL is true if the caller is only interested in
3471    using the GOT entry for calls.  */
3472
3473 static bfd_boolean
3474 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3475                                    bfd *abfd, struct bfd_link_info *info,
3476                                    bfd_boolean for_call,
3477                                    unsigned char tls_flag)
3478 {
3479   struct mips_elf_link_hash_table *htab;
3480   struct mips_elf_link_hash_entry *hmips;
3481   struct mips_got_entry entry, **loc;
3482   struct mips_got_info *g;
3483
3484   htab = mips_elf_hash_table (info);
3485   BFD_ASSERT (htab != NULL);
3486
3487   hmips = (struct mips_elf_link_hash_entry *) h;
3488   if (!for_call)
3489     hmips->got_only_for_calls = FALSE;
3490
3491   /* A global symbol in the GOT must also be in the dynamic symbol
3492      table.  */
3493   if (h->dynindx == -1)
3494     {
3495       switch (ELF_ST_VISIBILITY (h->other))
3496         {
3497         case STV_INTERNAL:
3498         case STV_HIDDEN:
3499           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3500           break;
3501         }
3502       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3503         return FALSE;
3504     }
3505
3506   /* Make sure we have a GOT to put this entry into.  */
3507   g = htab->got_info;
3508   BFD_ASSERT (g != NULL);
3509
3510   entry.abfd = abfd;
3511   entry.symndx = -1;
3512   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3513   entry.tls_type = 0;
3514
3515   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3516                                                    INSERT);
3517
3518   /* If we've already marked this entry as needing GOT space, we don't
3519      need to do it again.  */
3520   if (*loc)
3521     {
3522       (*loc)->tls_type |= tls_flag;
3523       return TRUE;
3524     }
3525
3526   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3527
3528   if (! *loc)
3529     return FALSE;
3530
3531   entry.gotidx = -1;
3532   entry.tls_type = tls_flag;
3533
3534   memcpy (*loc, &entry, sizeof entry);
3535
3536   if (tls_flag == 0)
3537     hmips->global_got_area = GGA_NORMAL;
3538
3539   return TRUE;
3540 }
3541
3542 /* Reserve space in G for a GOT entry containing the value of symbol
3543    SYMNDX in input bfd ABDF, plus ADDEND.  */
3544
3545 static bfd_boolean
3546 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3547                                   struct bfd_link_info *info,
3548                                   unsigned char tls_flag)
3549 {
3550   struct mips_elf_link_hash_table *htab;
3551   struct mips_got_info *g;
3552   struct mips_got_entry entry, **loc;
3553
3554   htab = mips_elf_hash_table (info);
3555   BFD_ASSERT (htab != NULL);
3556
3557   g = htab->got_info;
3558   BFD_ASSERT (g != NULL);
3559
3560   entry.abfd = abfd;
3561   entry.symndx = symndx;
3562   entry.d.addend = addend;
3563   entry.tls_type = tls_flag;
3564   loc = (struct mips_got_entry **)
3565     htab_find_slot (g->got_entries, &entry, INSERT);
3566
3567   if (*loc)
3568     {
3569       if (tls_flag == GOT_TLS_GD && !((*loc)->tls_type & GOT_TLS_GD))
3570         {
3571           g->tls_gotno += 2;
3572           (*loc)->tls_type |= tls_flag;
3573         }
3574       else if (tls_flag == GOT_TLS_IE && !((*loc)->tls_type & GOT_TLS_IE))
3575         {
3576           g->tls_gotno += 1;
3577           (*loc)->tls_type |= tls_flag;
3578         }
3579       return TRUE;
3580     }
3581
3582   if (tls_flag != 0)
3583     {
3584       entry.gotidx = -1;
3585       entry.tls_type = tls_flag;
3586       if (tls_flag == GOT_TLS_IE)
3587         g->tls_gotno += 1;
3588       else if (tls_flag == GOT_TLS_GD)
3589         g->tls_gotno += 2;
3590       else if (g->tls_ldm_offset == MINUS_ONE)
3591         {
3592           g->tls_ldm_offset = MINUS_TWO;
3593           g->tls_gotno += 2;
3594         }
3595     }
3596   else
3597     {
3598       entry.gotidx = g->local_gotno++;
3599       entry.tls_type = 0;
3600     }
3601
3602   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3603
3604   if (! *loc)
3605     return FALSE;
3606
3607   memcpy (*loc, &entry, sizeof entry);
3608
3609   return TRUE;
3610 }
3611
3612 /* Return the maximum number of GOT page entries required for RANGE.  */
3613
3614 static bfd_vma
3615 mips_elf_pages_for_range (const struct mips_got_page_range *range)
3616 {
3617   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
3618 }
3619
3620 /* Record that ABFD has a page relocation against symbol SYMNDX and
3621    that ADDEND is the addend for that relocation.
3622
3623    This function creates an upper bound on the number of GOT slots
3624    required; no attempt is made to combine references to non-overridable
3625    global symbols across multiple input files.  */
3626
3627 static bfd_boolean
3628 mips_elf_record_got_page_entry (struct bfd_link_info *info, bfd *abfd,
3629                                 long symndx, bfd_signed_vma addend)
3630 {
3631   struct mips_elf_link_hash_table *htab;
3632   struct mips_got_info *g;
3633   struct mips_got_page_entry lookup, *entry;
3634   struct mips_got_page_range **range_ptr, *range;
3635   bfd_vma old_pages, new_pages;
3636   void **loc;
3637
3638   htab = mips_elf_hash_table (info);
3639   BFD_ASSERT (htab != NULL);
3640
3641   g = htab->got_info;
3642   BFD_ASSERT (g != NULL);
3643
3644   /* Find the mips_got_page_entry hash table entry for this symbol.  */
3645   lookup.abfd = abfd;
3646   lookup.symndx = symndx;
3647   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
3648   if (loc == NULL)
3649     return FALSE;
3650
3651   /* Create a mips_got_page_entry if this is the first time we've
3652      seen the symbol.  */
3653   entry = (struct mips_got_page_entry *) *loc;
3654   if (!entry)
3655     {
3656       entry = bfd_alloc (abfd, sizeof (*entry));
3657       if (!entry)
3658         return FALSE;
3659
3660       entry->abfd = abfd;
3661       entry->symndx = symndx;
3662       entry->ranges = NULL;
3663       entry->num_pages = 0;
3664       *loc = entry;
3665     }
3666
3667   /* Skip over ranges whose maximum extent cannot share a page entry
3668      with ADDEND.  */
3669   range_ptr = &entry->ranges;
3670   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
3671     range_ptr = &(*range_ptr)->next;
3672
3673   /* If we scanned to the end of the list, or found a range whose
3674      minimum extent cannot share a page entry with ADDEND, create
3675      a new singleton range.  */
3676   range = *range_ptr;
3677   if (!range || addend < range->min_addend - 0xffff)
3678     {
3679       range = bfd_alloc (abfd, sizeof (*range));
3680       if (!range)
3681         return FALSE;
3682
3683       range->next = *range_ptr;
3684       range->min_addend = addend;
3685       range->max_addend = addend;
3686
3687       *range_ptr = range;
3688       entry->num_pages++;
3689       g->page_gotno++;
3690       return TRUE;
3691     }
3692
3693   /* Remember how many pages the old range contributed.  */
3694   old_pages = mips_elf_pages_for_range (range);
3695
3696   /* Update the ranges.  */
3697   if (addend < range->min_addend)
3698     range->min_addend = addend;
3699   else if (addend > range->max_addend)
3700     {
3701       if (range->next && addend >= range->next->min_addend - 0xffff)
3702         {
3703           old_pages += mips_elf_pages_for_range (range->next);
3704           range->max_addend = range->next->max_addend;
3705           range->next = range->next->next;
3706         }
3707       else
3708         range->max_addend = addend;
3709     }
3710
3711   /* Record any change in the total estimate.  */
3712   new_pages = mips_elf_pages_for_range (range);
3713   if (old_pages != new_pages)
3714     {
3715       entry->num_pages += new_pages - old_pages;
3716       g->page_gotno += new_pages - old_pages;
3717     }
3718
3719   return TRUE;
3720 }
3721
3722 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
3723
3724 static void
3725 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
3726                                        unsigned int n)
3727 {
3728   asection *s;
3729   struct mips_elf_link_hash_table *htab;
3730
3731   htab = mips_elf_hash_table (info);
3732   BFD_ASSERT (htab != NULL);
3733
3734   s = mips_elf_rel_dyn_section (info, FALSE);
3735   BFD_ASSERT (s != NULL);
3736
3737   if (htab->is_vxworks)
3738     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
3739   else
3740     {
3741       if (s->size == 0)
3742         {
3743           /* Make room for a null element.  */
3744           s->size += MIPS_ELF_REL_SIZE (abfd);
3745           ++s->reloc_count;
3746         }
3747       s->size += n * MIPS_ELF_REL_SIZE (abfd);
3748     }
3749 }
3750 \f
3751 /* A htab_traverse callback for GOT entries.  Set boolean *DATA to true
3752    if the GOT entry is for an indirect or warning symbol.  */
3753
3754 static int
3755 mips_elf_check_recreate_got (void **entryp, void *data)
3756 {
3757   struct mips_got_entry *entry;
3758   bfd_boolean *must_recreate;
3759
3760   entry = (struct mips_got_entry *) *entryp;
3761   must_recreate = (bfd_boolean *) data;
3762   if (entry->abfd != NULL && entry->symndx == -1)
3763     {
3764       struct mips_elf_link_hash_entry *h;
3765
3766       h = entry->d.h;
3767       if (h->root.root.type == bfd_link_hash_indirect
3768           || h->root.root.type == bfd_link_hash_warning)
3769         {
3770           *must_recreate = TRUE;
3771           return 0;
3772         }
3773     }
3774   return 1;
3775 }
3776
3777 /* A htab_traverse callback for GOT entries.  Add all entries to
3778    hash table *DATA, converting entries for indirect and warning
3779    symbols into entries for the target symbol.  Set *DATA to null
3780    on error.  */
3781
3782 static int
3783 mips_elf_recreate_got (void **entryp, void *data)
3784 {
3785   htab_t *new_got;
3786   struct mips_got_entry *entry;
3787   void **slot;
3788
3789   new_got = (htab_t *) data;
3790   entry = (struct mips_got_entry *) *entryp;
3791   if (entry->abfd != NULL && entry->symndx == -1)
3792     {
3793       struct mips_elf_link_hash_entry *h;
3794
3795       h = entry->d.h;
3796       while (h->root.root.type == bfd_link_hash_indirect
3797              || h->root.root.type == bfd_link_hash_warning)
3798         {
3799           BFD_ASSERT (h->global_got_area == GGA_NONE);
3800           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3801         }
3802       entry->d.h = h;
3803     }
3804   slot = htab_find_slot (*new_got, entry, INSERT);
3805   if (slot == NULL)
3806     {
3807       *new_got = NULL;
3808       return 0;
3809     }
3810   if (*slot == NULL)
3811     *slot = entry;
3812   else
3813     free (entry);
3814   return 1;
3815 }
3816
3817 /* If any entries in G->got_entries are for indirect or warning symbols,
3818    replace them with entries for the target symbol.  */
3819
3820 static bfd_boolean
3821 mips_elf_resolve_final_got_entries (struct mips_got_info *g)
3822 {
3823   bfd_boolean must_recreate;
3824   htab_t new_got;
3825
3826   must_recreate = FALSE;
3827   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &must_recreate);
3828   if (must_recreate)
3829     {
3830       new_got = htab_create (htab_size (g->got_entries),
3831                              mips_elf_got_entry_hash,
3832                              mips_elf_got_entry_eq, NULL);
3833       htab_traverse (g->got_entries, mips_elf_recreate_got, &new_got);
3834       if (new_got == NULL)
3835         return FALSE;
3836
3837       /* Each entry in g->got_entries has either been copied to new_got
3838          or freed.  Now delete the hash table itself.  */
3839       htab_delete (g->got_entries);
3840       g->got_entries = new_got;
3841     }
3842   return TRUE;
3843 }
3844
3845 /* A mips_elf_link_hash_traverse callback for which DATA points
3846    to the link_info structure.  Count the number of type (3) entries
3847    in the master GOT.  */
3848
3849 static int
3850 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
3851 {
3852   struct bfd_link_info *info;
3853   struct mips_elf_link_hash_table *htab;
3854   struct mips_got_info *g;
3855
3856   info = (struct bfd_link_info *) data;
3857   htab = mips_elf_hash_table (info);
3858   g = htab->got_info;
3859   if (h->global_got_area != GGA_NONE)
3860     {
3861       /* Make a final decision about whether the symbol belongs in the
3862          local or global GOT.  Symbols that bind locally can (and in the
3863          case of forced-local symbols, must) live in the local GOT.
3864          Those that are aren't in the dynamic symbol table must also
3865          live in the local GOT.
3866
3867          Note that the former condition does not always imply the
3868          latter: symbols do not bind locally if they are completely
3869          undefined.  We'll report undefined symbols later if appropriate.  */
3870       if (h->root.dynindx == -1
3871           || (h->got_only_for_calls
3872               ? SYMBOL_CALLS_LOCAL (info, &h->root)
3873               : SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3874         {
3875           /* The symbol belongs in the local GOT.  We no longer need this
3876              entry if it was only used for relocations; those relocations
3877              will be against the null or section symbol instead of H.  */
3878           if (h->global_got_area != GGA_RELOC_ONLY)
3879             g->local_gotno++;
3880           h->global_got_area = GGA_NONE;
3881         }
3882       else if (htab->is_vxworks
3883                && h->got_only_for_calls
3884                && h->root.plt.offset != MINUS_ONE)
3885         /* On VxWorks, calls can refer directly to the .got.plt entry;
3886            they don't need entries in the regular GOT.  .got.plt entries
3887            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
3888         h->global_got_area = GGA_NONE;
3889       else
3890         {
3891           g->global_gotno++;
3892           if (h->global_got_area == GGA_RELOC_ONLY)
3893             g->reloc_only_gotno++;
3894         }
3895     }
3896   return 1;
3897 }
3898 \f
3899 /* Compute the hash value of the bfd in a bfd2got hash entry.  */
3900
3901 static hashval_t
3902 mips_elf_bfd2got_entry_hash (const void *entry_)
3903 {
3904   const struct mips_elf_bfd2got_hash *entry
3905     = (struct mips_elf_bfd2got_hash *)entry_;
3906
3907   return entry->bfd->id;
3908 }
3909
3910 /* Check whether two hash entries have the same bfd.  */
3911
3912 static int
3913 mips_elf_bfd2got_entry_eq (const void *entry1, const void *entry2)
3914 {
3915   const struct mips_elf_bfd2got_hash *e1
3916     = (const struct mips_elf_bfd2got_hash *)entry1;
3917   const struct mips_elf_bfd2got_hash *e2
3918     = (const struct mips_elf_bfd2got_hash *)entry2;
3919
3920   return e1->bfd == e2->bfd;
3921 }
3922
3923 /* In a multi-got link, determine the GOT to be used for IBFD.  G must
3924    be the master GOT data.  */
3925
3926 static struct mips_got_info *
3927 mips_elf_got_for_ibfd (struct mips_got_info *g, bfd *ibfd)
3928 {
3929   struct mips_elf_bfd2got_hash e, *p;
3930
3931   if (! g->bfd2got)
3932     return g;
3933
3934   e.bfd = ibfd;
3935   p = htab_find (g->bfd2got, &e);
3936   return p ? p->g : NULL;
3937 }
3938
3939 /* Use BFD2GOT to find ABFD's got entry, creating one if none exists.
3940    Return NULL if an error occured.  */
3941
3942 static struct mips_got_info *
3943 mips_elf_get_got_for_bfd (struct htab *bfd2got, bfd *output_bfd,
3944                           bfd *input_bfd)
3945 {
3946   struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot;
3947   struct mips_got_info *g;
3948   void **bfdgotp;
3949
3950   bfdgot_entry.bfd = input_bfd;
3951   bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT);
3952   bfdgot = (struct mips_elf_bfd2got_hash *) *bfdgotp;
3953
3954   if (bfdgot == NULL)
3955     {
3956       bfdgot = ((struct mips_elf_bfd2got_hash *)
3957                 bfd_alloc (output_bfd, sizeof (struct mips_elf_bfd2got_hash)));
3958       if (bfdgot == NULL)
3959         return NULL;
3960
3961       *bfdgotp = bfdgot;
3962
3963       g = ((struct mips_got_info *)
3964            bfd_alloc (output_bfd, sizeof (struct mips_got_info)));
3965       if (g == NULL)
3966         return NULL;
3967
3968       bfdgot->bfd = input_bfd;
3969       bfdgot->g = g;
3970
3971       g->global_gotsym = NULL;
3972       g->global_gotno = 0;
3973       g->reloc_only_gotno = 0;
3974       g->local_gotno = 0;
3975       g->page_gotno = 0;
3976       g->assigned_gotno = -1;
3977       g->tls_gotno = 0;
3978       g->tls_assigned_gotno = 0;
3979       g->tls_ldm_offset = MINUS_ONE;
3980       g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
3981                                         mips_elf_multi_got_entry_eq, NULL);
3982       if (g->got_entries == NULL)
3983         return NULL;
3984
3985       g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
3986                                              mips_got_page_entry_eq, NULL);
3987       if (g->got_page_entries == NULL)
3988         return NULL;
3989
3990       g->bfd2got = NULL;
3991       g->next = NULL;
3992     }
3993
3994   return bfdgot->g;
3995 }
3996
3997 /* A htab_traverse callback for the entries in the master got.
3998    Create one separate got for each bfd that has entries in the global
3999    got, such that we can tell how many local and global entries each
4000    bfd requires.  */
4001
4002 static int
4003 mips_elf_make_got_per_bfd (void **entryp, void *p)
4004 {
4005   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4006   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4007   struct mips_got_info *g;
4008
4009   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4010   if (g == NULL)
4011     {
4012       arg->obfd = NULL;
4013       return 0;
4014     }
4015
4016   /* Insert the GOT entry in the bfd's got entry hash table.  */
4017   entryp = htab_find_slot (g->got_entries, entry, INSERT);
4018   if (*entryp != NULL)
4019     return 1;
4020
4021   *entryp = entry;
4022
4023   if (entry->tls_type)
4024     {
4025       if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
4026         g->tls_gotno += 2;
4027       if (entry->tls_type & GOT_TLS_IE)
4028         g->tls_gotno += 1;
4029     }
4030   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
4031     ++g->local_gotno;
4032   else
4033     ++g->global_gotno;
4034
4035   return 1;
4036 }
4037
4038 /* A htab_traverse callback for the page entries in the master got.
4039    Associate each page entry with the bfd's got.  */
4040
4041 static int
4042 mips_elf_make_got_pages_per_bfd (void **entryp, void *p)
4043 {
4044   struct mips_got_page_entry *entry = (struct mips_got_page_entry *) *entryp;
4045   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *) p;
4046   struct mips_got_info *g;
4047
4048   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4049   if (g == NULL)
4050     {
4051       arg->obfd = NULL;
4052       return 0;
4053     }
4054
4055   /* Insert the GOT entry in the bfd's got entry hash table.  */
4056   entryp = htab_find_slot (g->got_page_entries, entry, INSERT);
4057   if (*entryp != NULL)
4058     return 1;
4059
4060   *entryp = entry;
4061   g->page_gotno += entry->num_pages;
4062   return 1;
4063 }
4064
4065 /* Consider merging the got described by BFD2GOT with TO, using the
4066    information given by ARG.  Return -1 if this would lead to overflow,
4067    1 if they were merged successfully, and 0 if a merge failed due to
4068    lack of memory.  (These values are chosen so that nonnegative return
4069    values can be returned by a htab_traverse callback.)  */
4070
4071 static int
4072 mips_elf_merge_got_with (struct mips_elf_bfd2got_hash *bfd2got,
4073                          struct mips_got_info *to,
4074                          struct mips_elf_got_per_bfd_arg *arg)
4075 {
4076   struct mips_got_info *from = bfd2got->g;
4077   unsigned int estimate;
4078
4079   /* Work out how many page entries we would need for the combined GOT.  */
4080   estimate = arg->max_pages;
4081   if (estimate >= from->page_gotno + to->page_gotno)
4082     estimate = from->page_gotno + to->page_gotno;
4083
4084   /* And conservatively estimate how many local and TLS entries
4085      would be needed.  */
4086   estimate += from->local_gotno + to->local_gotno;
4087   estimate += from->tls_gotno + to->tls_gotno;
4088
4089   /* If we're merging with the primary got, we will always have
4090      the full set of global entries.  Otherwise estimate those
4091      conservatively as well.  */
4092   if (to == arg->primary)
4093     estimate += arg->global_count;
4094   else
4095     estimate += from->global_gotno + to->global_gotno;
4096
4097   /* Bail out if the combined GOT might be too big.  */
4098   if (estimate > arg->max_count)
4099     return -1;
4100
4101   /* Commit to the merge.  Record that TO is now the bfd for this got.  */
4102   bfd2got->g = to;
4103
4104   /* Transfer the bfd's got information from FROM to TO.  */
4105   htab_traverse (from->got_entries, mips_elf_make_got_per_bfd, arg);
4106   if (arg->obfd == NULL)
4107     return 0;
4108
4109   htab_traverse (from->got_page_entries, mips_elf_make_got_pages_per_bfd, arg);
4110   if (arg->obfd == NULL)
4111     return 0;
4112
4113   /* We don't have to worry about releasing memory of the actual
4114      got entries, since they're all in the master got_entries hash
4115      table anyway.  */
4116   htab_delete (from->got_entries);
4117   htab_delete (from->got_page_entries);
4118   return 1;
4119 }
4120
4121 /* Attempt to merge gots of different input bfds.  Try to use as much
4122    as possible of the primary got, since it doesn't require explicit
4123    dynamic relocations, but don't use bfds that would reference global
4124    symbols out of the addressable range.  Failing the primary got,
4125    attempt to merge with the current got, or finish the current got
4126    and then make make the new got current.  */
4127
4128 static int
4129 mips_elf_merge_gots (void **bfd2got_, void *p)
4130 {
4131   struct mips_elf_bfd2got_hash *bfd2got
4132     = (struct mips_elf_bfd2got_hash *)*bfd2got_;
4133   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4134   struct mips_got_info *g;
4135   unsigned int estimate;
4136   int result;
4137
4138   g = bfd2got->g;
4139
4140   /* Work out the number of page, local and TLS entries.  */
4141   estimate = arg->max_pages;
4142   if (estimate > g->page_gotno)
4143     estimate = g->page_gotno;
4144   estimate += g->local_gotno + g->tls_gotno;
4145
4146   /* We place TLS GOT entries after both locals and globals.  The globals
4147      for the primary GOT may overflow the normal GOT size limit, so be
4148      sure not to merge a GOT which requires TLS with the primary GOT in that
4149      case.  This doesn't affect non-primary GOTs.  */
4150   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4151
4152   if (estimate <= arg->max_count)
4153     {
4154       /* If we don't have a primary GOT, use it as
4155          a starting point for the primary GOT.  */
4156       if (!arg->primary)
4157         {
4158           arg->primary = bfd2got->g;
4159           return 1;
4160         }
4161
4162       /* Try merging with the primary GOT.  */
4163       result = mips_elf_merge_got_with (bfd2got, arg->primary, arg);
4164       if (result >= 0)
4165         return result;
4166     }
4167
4168   /* If we can merge with the last-created got, do it.  */
4169   if (arg->current)
4170     {
4171       result = mips_elf_merge_got_with (bfd2got, arg->current, arg);
4172       if (result >= 0)
4173         return result;
4174     }
4175
4176   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4177      fits; if it turns out that it doesn't, we'll get relocation
4178      overflows anyway.  */
4179   g->next = arg->current;
4180   arg->current = g;
4181
4182   return 1;
4183 }
4184
4185 /* Set the TLS GOT index for the GOT entry in ENTRYP.  ENTRYP's NEXT field
4186    is null iff there is just a single GOT.  */
4187
4188 static int
4189 mips_elf_initialize_tls_index (void **entryp, void *p)
4190 {
4191   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4192   struct mips_got_info *g = p;
4193   bfd_vma next_index;
4194   unsigned char tls_type;
4195
4196   /* We're only interested in TLS symbols.  */
4197   if (entry->tls_type == 0)
4198     return 1;
4199
4200   next_index = MIPS_ELF_GOT_SIZE (entry->abfd) * (long) g->tls_assigned_gotno;
4201
4202   if (entry->symndx == -1 && g->next == NULL)
4203     {
4204       /* A type (3) got entry in the single-GOT case.  We use the symbol's
4205          hash table entry to track its index.  */
4206       if (entry->d.h->tls_type & GOT_TLS_OFFSET_DONE)
4207         return 1;
4208       entry->d.h->tls_type |= GOT_TLS_OFFSET_DONE;
4209       entry->d.h->tls_got_offset = next_index;
4210       tls_type = entry->d.h->tls_type;
4211     }
4212   else
4213     {
4214       if (entry->tls_type & GOT_TLS_LDM)
4215         {
4216           /* There are separate mips_got_entry objects for each input bfd
4217              that requires an LDM entry.  Make sure that all LDM entries in
4218              a GOT resolve to the same index.  */
4219           if (g->tls_ldm_offset != MINUS_TWO && g->tls_ldm_offset != MINUS_ONE)
4220             {
4221               entry->gotidx = g->tls_ldm_offset;
4222               return 1;
4223             }
4224           g->tls_ldm_offset = next_index;
4225         }
4226       entry->gotidx = next_index;
4227       tls_type = entry->tls_type;
4228     }
4229
4230   /* Account for the entries we've just allocated.  */
4231   if (tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
4232     g->tls_assigned_gotno += 2;
4233   if (tls_type & GOT_TLS_IE)
4234     g->tls_assigned_gotno += 1;
4235
4236   return 1;
4237 }
4238
4239 /* If passed a NULL mips_got_info in the argument, set the marker used
4240    to tell whether a global symbol needs a got entry (in the primary
4241    got) to the given VALUE.
4242
4243    If passed a pointer G to a mips_got_info in the argument (it must
4244    not be the primary GOT), compute the offset from the beginning of
4245    the (primary) GOT section to the entry in G corresponding to the
4246    global symbol.  G's assigned_gotno must contain the index of the
4247    first available global GOT entry in G.  VALUE must contain the size
4248    of a GOT entry in bytes.  For each global GOT entry that requires a
4249    dynamic relocation, NEEDED_RELOCS is incremented, and the symbol is
4250    marked as not eligible for lazy resolution through a function
4251    stub.  */
4252 static int
4253 mips_elf_set_global_got_offset (void **entryp, void *p)
4254 {
4255   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4256   struct mips_elf_set_global_got_offset_arg *arg
4257     = (struct mips_elf_set_global_got_offset_arg *)p;
4258   struct mips_got_info *g = arg->g;
4259
4260   if (g && entry->tls_type != GOT_NORMAL)
4261     arg->needed_relocs +=
4262       mips_tls_got_relocs (arg->info, entry->tls_type,
4263                            entry->symndx == -1 ? &entry->d.h->root : NULL);
4264
4265   if (entry->abfd != NULL
4266       && entry->symndx == -1
4267       && entry->d.h->global_got_area != GGA_NONE)
4268     {
4269       if (g)
4270         {
4271           BFD_ASSERT (g->global_gotsym == NULL);
4272
4273           entry->gotidx = arg->value * (long) g->assigned_gotno++;
4274           if (arg->info->shared
4275               || (elf_hash_table (arg->info)->dynamic_sections_created
4276                   && entry->d.h->root.def_dynamic
4277                   && !entry->d.h->root.def_regular))
4278             ++arg->needed_relocs;
4279         }
4280       else
4281         entry->d.h->global_got_area = arg->value;
4282     }
4283
4284   return 1;
4285 }
4286
4287 /* A htab_traverse callback for GOT entries for which DATA is the
4288    bfd_link_info.  Forbid any global symbols from having traditional
4289    lazy-binding stubs.  */
4290
4291 static int
4292 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4293 {
4294   struct bfd_link_info *info;
4295   struct mips_elf_link_hash_table *htab;
4296   struct mips_got_entry *entry;
4297
4298   entry = (struct mips_got_entry *) *entryp;
4299   info = (struct bfd_link_info *) data;
4300   htab = mips_elf_hash_table (info);
4301   BFD_ASSERT (htab != NULL);
4302
4303   if (entry->abfd != NULL
4304       && entry->symndx == -1
4305       && entry->d.h->needs_lazy_stub)
4306     {
4307       entry->d.h->needs_lazy_stub = FALSE;
4308       htab->lazy_stub_count--;
4309     }
4310
4311   return 1;
4312 }
4313
4314 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4315    the primary GOT.  */
4316 static bfd_vma
4317 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4318 {
4319   if (g->bfd2got == NULL)
4320     return 0;
4321
4322   g = mips_elf_got_for_ibfd (g, ibfd);
4323   if (! g)
4324     return 0;
4325
4326   BFD_ASSERT (g->next);
4327
4328   g = g->next;
4329
4330   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4331     * MIPS_ELF_GOT_SIZE (abfd);
4332 }
4333
4334 /* Turn a single GOT that is too big for 16-bit addressing into
4335    a sequence of GOTs, each one 16-bit addressable.  */
4336
4337 static bfd_boolean
4338 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4339                     asection *got, bfd_size_type pages)
4340 {
4341   struct mips_elf_link_hash_table *htab;
4342   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4343   struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
4344   struct mips_got_info *g, *gg;
4345   unsigned int assign, needed_relocs;
4346   bfd *dynobj;
4347
4348   dynobj = elf_hash_table (info)->dynobj;
4349   htab = mips_elf_hash_table (info);
4350   BFD_ASSERT (htab != NULL);
4351
4352   g = htab->got_info;
4353   g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash,
4354                                 mips_elf_bfd2got_entry_eq, NULL);
4355   if (g->bfd2got == NULL)
4356     return FALSE;
4357
4358   got_per_bfd_arg.bfd2got = g->bfd2got;
4359   got_per_bfd_arg.obfd = abfd;
4360   got_per_bfd_arg.info = info;
4361
4362   /* Count how many GOT entries each input bfd requires, creating a
4363      map from bfd to got info while at that.  */
4364   htab_traverse (g->got_entries, mips_elf_make_got_per_bfd, &got_per_bfd_arg);
4365   if (got_per_bfd_arg.obfd == NULL)
4366     return FALSE;
4367
4368   /* Also count how many page entries each input bfd requires.  */
4369   htab_traverse (g->got_page_entries, mips_elf_make_got_pages_per_bfd,
4370                  &got_per_bfd_arg);
4371   if (got_per_bfd_arg.obfd == NULL)
4372     return FALSE;
4373
4374   got_per_bfd_arg.current = NULL;
4375   got_per_bfd_arg.primary = NULL;
4376   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4377                                 / MIPS_ELF_GOT_SIZE (abfd))
4378                                - htab->reserved_gotno);
4379   got_per_bfd_arg.max_pages = pages;
4380   /* The number of globals that will be included in the primary GOT.
4381      See the calls to mips_elf_set_global_got_offset below for more
4382      information.  */
4383   got_per_bfd_arg.global_count = g->global_gotno;
4384
4385   /* Try to merge the GOTs of input bfds together, as long as they
4386      don't seem to exceed the maximum GOT size, choosing one of them
4387      to be the primary GOT.  */
4388   htab_traverse (g->bfd2got, mips_elf_merge_gots, &got_per_bfd_arg);
4389   if (got_per_bfd_arg.obfd == NULL)
4390     return FALSE;
4391
4392   /* If we do not find any suitable primary GOT, create an empty one.  */
4393   if (got_per_bfd_arg.primary == NULL)
4394     {
4395       g->next = (struct mips_got_info *)
4396         bfd_alloc (abfd, sizeof (struct mips_got_info));
4397       if (g->next == NULL)
4398         return FALSE;
4399
4400       g->next->global_gotsym = NULL;
4401       g->next->global_gotno = 0;
4402       g->next->reloc_only_gotno = 0;
4403       g->next->local_gotno = 0;
4404       g->next->page_gotno = 0;
4405       g->next->tls_gotno = 0;
4406       g->next->assigned_gotno = 0;
4407       g->next->tls_assigned_gotno = 0;
4408       g->next->tls_ldm_offset = MINUS_ONE;
4409       g->next->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
4410                                               mips_elf_multi_got_entry_eq,
4411                                               NULL);
4412       if (g->next->got_entries == NULL)
4413         return FALSE;
4414       g->next->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4415                                                    mips_got_page_entry_eq,
4416                                                    NULL);
4417       if (g->next->got_page_entries == NULL)
4418         return FALSE;
4419       g->next->bfd2got = NULL;
4420     }
4421   else
4422     g->next = got_per_bfd_arg.primary;
4423   g->next->next = got_per_bfd_arg.current;
4424
4425   /* GG is now the master GOT, and G is the primary GOT.  */
4426   gg = g;
4427   g = g->next;
4428
4429   /* Map the output bfd to the primary got.  That's what we're going
4430      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4431      didn't mark in check_relocs, and we want a quick way to find it.
4432      We can't just use gg->next because we're going to reverse the
4433      list.  */
4434   {
4435     struct mips_elf_bfd2got_hash *bfdgot;
4436     void **bfdgotp;
4437
4438     bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
4439       (abfd, sizeof (struct mips_elf_bfd2got_hash));
4440
4441     if (bfdgot == NULL)
4442       return FALSE;
4443
4444     bfdgot->bfd = abfd;
4445     bfdgot->g = g;
4446     bfdgotp = htab_find_slot (gg->bfd2got, bfdgot, INSERT);
4447
4448     BFD_ASSERT (*bfdgotp == NULL);
4449     *bfdgotp = bfdgot;
4450   }
4451
4452   /* Every symbol that is referenced in a dynamic relocation must be
4453      present in the primary GOT, so arrange for them to appear after
4454      those that are actually referenced.  */
4455   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4456   g->global_gotno = gg->global_gotno;
4457
4458   set_got_offset_arg.g = NULL;
4459   set_got_offset_arg.value = GGA_RELOC_ONLY;
4460   htab_traverse (gg->got_entries, mips_elf_set_global_got_offset,
4461                  &set_got_offset_arg);
4462   set_got_offset_arg.value = GGA_NORMAL;
4463   htab_traverse (g->got_entries, mips_elf_set_global_got_offset,
4464                  &set_got_offset_arg);
4465
4466   /* Now go through the GOTs assigning them offset ranges.
4467      [assigned_gotno, local_gotno[ will be set to the range of local
4468      entries in each GOT.  We can then compute the end of a GOT by
4469      adding local_gotno to global_gotno.  We reverse the list and make
4470      it circular since then we'll be able to quickly compute the
4471      beginning of a GOT, by computing the end of its predecessor.  To
4472      avoid special cases for the primary GOT, while still preserving
4473      assertions that are valid for both single- and multi-got links,
4474      we arrange for the main got struct to have the right number of
4475      global entries, but set its local_gotno such that the initial
4476      offset of the primary GOT is zero.  Remember that the primary GOT
4477      will become the last item in the circular linked list, so it
4478      points back to the master GOT.  */
4479   gg->local_gotno = -g->global_gotno;
4480   gg->global_gotno = g->global_gotno;
4481   gg->tls_gotno = 0;
4482   assign = 0;
4483   gg->next = gg;
4484
4485   do
4486     {
4487       struct mips_got_info *gn;
4488
4489       assign += htab->reserved_gotno;
4490       g->assigned_gotno = assign;
4491       g->local_gotno += assign;
4492       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4493       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4494
4495       /* Take g out of the direct list, and push it onto the reversed
4496          list that gg points to.  g->next is guaranteed to be nonnull after
4497          this operation, as required by mips_elf_initialize_tls_index. */
4498       gn = g->next;
4499       g->next = gg->next;
4500       gg->next = g;
4501
4502       /* Set up any TLS entries.  We always place the TLS entries after
4503          all non-TLS entries.  */
4504       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4505       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
4506
4507       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4508       g = gn;
4509
4510       /* Forbid global symbols in every non-primary GOT from having
4511          lazy-binding stubs.  */
4512       if (g)
4513         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4514     }
4515   while (g);
4516
4517   got->size = (gg->next->local_gotno
4518                + gg->next->global_gotno
4519                + gg->next->tls_gotno) * MIPS_ELF_GOT_SIZE (abfd);
4520
4521   needed_relocs = 0;
4522   set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (abfd);
4523   set_got_offset_arg.info = info;
4524   for (g = gg->next; g && g->next != gg; g = g->next)
4525     {
4526       unsigned int save_assign;
4527
4528       /* Assign offsets to global GOT entries.  */
4529       save_assign = g->assigned_gotno;
4530       g->assigned_gotno = g->local_gotno;
4531       set_got_offset_arg.g = g;
4532       set_got_offset_arg.needed_relocs = 0;
4533       htab_traverse (g->got_entries,
4534                      mips_elf_set_global_got_offset,
4535                      &set_got_offset_arg);
4536       needed_relocs += set_got_offset_arg.needed_relocs;
4537       BFD_ASSERT (g->assigned_gotno - g->local_gotno <= g->global_gotno);
4538
4539       g->assigned_gotno = save_assign;
4540       if (info->shared)
4541         {
4542           needed_relocs += g->local_gotno - g->assigned_gotno;
4543           BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4544                       + g->next->global_gotno
4545                       + g->next->tls_gotno
4546                       + htab->reserved_gotno);
4547         }
4548     }
4549
4550   if (needed_relocs)
4551     mips_elf_allocate_dynamic_relocations (dynobj, info,
4552                                            needed_relocs);
4553
4554   return TRUE;
4555 }
4556
4557 \f
4558 /* Returns the first relocation of type r_type found, beginning with
4559    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4560
4561 static const Elf_Internal_Rela *
4562 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4563                           const Elf_Internal_Rela *relocation,
4564                           const Elf_Internal_Rela *relend)
4565 {
4566   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4567
4568   while (relocation < relend)
4569     {
4570       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4571           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4572         return relocation;
4573
4574       ++relocation;
4575     }
4576
4577   /* We didn't find it.  */
4578   return NULL;
4579 }
4580
4581 /* Return whether an input relocation is against a local symbol.  */
4582
4583 static bfd_boolean
4584 mips_elf_local_relocation_p (bfd *input_bfd,
4585                              const Elf_Internal_Rela *relocation,
4586                              asection **local_sections)
4587 {
4588   unsigned long r_symndx;
4589   Elf_Internal_Shdr *symtab_hdr;
4590   size_t extsymoff;
4591
4592   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4593   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4594   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4595
4596   if (r_symndx < extsymoff)
4597     return TRUE;
4598   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4599     return TRUE;
4600
4601   return FALSE;
4602 }
4603 \f
4604 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4605
4606 bfd_vma
4607 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4608 {
4609   if (value & ((bfd_vma) 1 << (bits - 1)))
4610     /* VALUE is negative.  */
4611     value |= ((bfd_vma) - 1) << bits;
4612
4613   return value;
4614 }
4615
4616 /* Return non-zero if the indicated VALUE has overflowed the maximum
4617    range expressible by a signed number with the indicated number of
4618    BITS.  */
4619
4620 static bfd_boolean
4621 mips_elf_overflow_p (bfd_vma value, int bits)
4622 {
4623   bfd_signed_vma svalue = (bfd_signed_vma) value;
4624
4625   if (svalue > (1 << (bits - 1)) - 1)
4626     /* The value is too big.  */
4627     return TRUE;
4628   else if (svalue < -(1 << (bits - 1)))
4629     /* The value is too small.  */
4630     return TRUE;
4631
4632   /* All is well.  */
4633   return FALSE;
4634 }
4635
4636 /* Calculate the %high function.  */
4637
4638 static bfd_vma
4639 mips_elf_high (bfd_vma value)
4640 {
4641   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4642 }
4643
4644 /* Calculate the %higher function.  */
4645
4646 static bfd_vma
4647 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
4648 {
4649 #ifdef BFD64
4650   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4651 #else
4652   abort ();
4653   return MINUS_ONE;
4654 #endif
4655 }
4656
4657 /* Calculate the %highest function.  */
4658
4659 static bfd_vma
4660 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
4661 {
4662 #ifdef BFD64
4663   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
4664 #else
4665   abort ();
4666   return MINUS_ONE;
4667 #endif
4668 }
4669 \f
4670 /* Create the .compact_rel section.  */
4671
4672 static bfd_boolean
4673 mips_elf_create_compact_rel_section
4674   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
4675 {
4676   flagword flags;
4677   register asection *s;
4678
4679   if (bfd_get_section_by_name (abfd, ".compact_rel") == NULL)
4680     {
4681       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4682                | SEC_READONLY);
4683
4684       s = bfd_make_section_with_flags (abfd, ".compact_rel", flags);
4685       if (s == NULL
4686           || ! bfd_set_section_alignment (abfd, s,
4687                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4688         return FALSE;
4689
4690       s->size = sizeof (Elf32_External_compact_rel);
4691     }
4692
4693   return TRUE;
4694 }
4695
4696 /* Create the .got section to hold the global offset table.  */
4697
4698 static bfd_boolean
4699 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
4700 {
4701   flagword flags;
4702   register asection *s;
4703   struct elf_link_hash_entry *h;
4704   struct bfd_link_hash_entry *bh;
4705   struct mips_got_info *g;
4706   bfd_size_type amt;
4707   struct mips_elf_link_hash_table *htab;
4708
4709   htab = mips_elf_hash_table (info);
4710   BFD_ASSERT (htab != NULL);
4711
4712   /* This function may be called more than once.  */
4713   if (htab->sgot)
4714     return TRUE;
4715
4716   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4717            | SEC_LINKER_CREATED);
4718
4719   /* We have to use an alignment of 2**4 here because this is hardcoded
4720      in the function stub generation and in the linker script.  */
4721   s = bfd_make_section_with_flags (abfd, ".got", flags);
4722   if (s == NULL
4723       || ! bfd_set_section_alignment (abfd, s, 4))
4724     return FALSE;
4725   htab->sgot = s;
4726
4727   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
4728      linker script because we don't want to define the symbol if we
4729      are not creating a global offset table.  */
4730   bh = NULL;
4731   if (! (_bfd_generic_link_add_one_symbol
4732          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
4733           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
4734     return FALSE;
4735
4736   h = (struct elf_link_hash_entry *) bh;
4737   h->non_elf = 0;
4738   h->def_regular = 1;
4739   h->type = STT_OBJECT;
4740   elf_hash_table (info)->hgot = h;
4741
4742   if (info->shared
4743       && ! bfd_elf_link_record_dynamic_symbol (info, h))
4744     return FALSE;
4745
4746   amt = sizeof (struct mips_got_info);
4747   g = bfd_alloc (abfd, amt);
4748   if (g == NULL)
4749     return FALSE;
4750   g->global_gotsym = NULL;
4751   g->global_gotno = 0;
4752   g->reloc_only_gotno = 0;
4753   g->tls_gotno = 0;
4754   g->local_gotno = 0;
4755   g->page_gotno = 0;
4756   g->assigned_gotno = 0;
4757   g->bfd2got = NULL;
4758   g->next = NULL;
4759   g->tls_ldm_offset = MINUS_ONE;
4760   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
4761                                     mips_elf_got_entry_eq, NULL);
4762   if (g->got_entries == NULL)
4763     return FALSE;
4764   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4765                                          mips_got_page_entry_eq, NULL);
4766   if (g->got_page_entries == NULL)
4767     return FALSE;
4768   htab->got_info = g;
4769   mips_elf_section_data (s)->elf.this_hdr.sh_flags
4770     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4771
4772   /* We also need a .got.plt section when generating PLTs.  */
4773   s = bfd_make_section_with_flags (abfd, ".got.plt",
4774                                    SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
4775                                    | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4776   if (s == NULL)
4777     return FALSE;
4778   htab->sgotplt = s;
4779
4780   return TRUE;
4781 }
4782 \f
4783 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4784    __GOTT_INDEX__ symbols.  These symbols are only special for
4785    shared objects; they are not used in executables.  */
4786
4787 static bfd_boolean
4788 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
4789 {
4790   return (mips_elf_hash_table (info)->is_vxworks
4791           && info->shared
4792           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
4793               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
4794 }
4795
4796 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
4797    require an la25 stub.  See also mips_elf_local_pic_function_p,
4798    which determines whether the destination function ever requires a
4799    stub.  */
4800
4801 static bfd_boolean
4802 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type)
4803 {
4804   /* We specifically ignore branches and jumps from EF_PIC objects,
4805      where the onus is on the compiler or programmer to perform any
4806      necessary initialization of $25.  Sometimes such initialization
4807      is unnecessary; for example, -mno-shared functions do not use
4808      the incoming value of $25, and may therefore be called directly.  */
4809   if (PIC_OBJECT_P (input_bfd))
4810     return FALSE;
4811
4812   switch (r_type)
4813     {
4814     case R_MIPS_26:
4815     case R_MIPS_PC16:
4816     case R_MIPS16_26:
4817       return TRUE;
4818
4819     default:
4820       return FALSE;
4821     }
4822 }
4823 \f
4824 /* Calculate the value produced by the RELOCATION (which comes from
4825    the INPUT_BFD).  The ADDEND is the addend to use for this
4826    RELOCATION; RELOCATION->R_ADDEND is ignored.
4827
4828    The result of the relocation calculation is stored in VALUEP.
4829    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
4830    is a MIPS16 jump to non-MIPS16 code, or vice versa.
4831
4832    This function returns bfd_reloc_continue if the caller need take no
4833    further action regarding this relocation, bfd_reloc_notsupported if
4834    something goes dramatically wrong, bfd_reloc_overflow if an
4835    overflow occurs, and bfd_reloc_ok to indicate success.  */
4836
4837 static bfd_reloc_status_type
4838 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
4839                                asection *input_section,
4840                                struct bfd_link_info *info,
4841                                const Elf_Internal_Rela *relocation,
4842                                bfd_vma addend, reloc_howto_type *howto,
4843                                Elf_Internal_Sym *local_syms,
4844                                asection **local_sections, bfd_vma *valuep,
4845                                const char **namep,
4846                                bfd_boolean *cross_mode_jump_p,
4847                                bfd_boolean save_addend)
4848 {
4849   /* The eventual value we will return.  */
4850   bfd_vma value;
4851   /* The address of the symbol against which the relocation is
4852      occurring.  */
4853   bfd_vma symbol = 0;
4854   /* The final GP value to be used for the relocatable, executable, or
4855      shared object file being produced.  */
4856   bfd_vma gp;
4857   /* The place (section offset or address) of the storage unit being
4858      relocated.  */
4859   bfd_vma p;
4860   /* The value of GP used to create the relocatable object.  */
4861   bfd_vma gp0;
4862   /* The offset into the global offset table at which the address of
4863      the relocation entry symbol, adjusted by the addend, resides
4864      during execution.  */
4865   bfd_vma g = MINUS_ONE;
4866   /* The section in which the symbol referenced by the relocation is
4867      located.  */
4868   asection *sec = NULL;
4869   struct mips_elf_link_hash_entry *h = NULL;
4870   /* TRUE if the symbol referred to by this relocation is a local
4871      symbol.  */
4872   bfd_boolean local_p, was_local_p;
4873   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
4874   bfd_boolean gp_disp_p = FALSE;
4875   /* TRUE if the symbol referred to by this relocation is
4876      "__gnu_local_gp".  */
4877   bfd_boolean gnu_local_gp_p = FALSE;
4878   Elf_Internal_Shdr *symtab_hdr;
4879   size_t extsymoff;
4880   unsigned long r_symndx;
4881   int r_type;
4882   /* TRUE if overflow occurred during the calculation of the
4883      relocation value.  */
4884   bfd_boolean overflowed_p;
4885   /* TRUE if this relocation refers to a MIPS16 function.  */
4886   bfd_boolean target_is_16_bit_code_p = FALSE;
4887   struct mips_elf_link_hash_table *htab;
4888   bfd *dynobj;
4889
4890   dynobj = elf_hash_table (info)->dynobj;
4891   htab = mips_elf_hash_table (info);
4892   BFD_ASSERT (htab != NULL);
4893
4894   /* Parse the relocation.  */
4895   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4896   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
4897   p = (input_section->output_section->vma
4898        + input_section->output_offset
4899        + relocation->r_offset);
4900
4901   /* Assume that there will be no overflow.  */
4902   overflowed_p = FALSE;
4903
4904   /* Figure out whether or not the symbol is local, and get the offset
4905      used in the array of hash table entries.  */
4906   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4907   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
4908                                          local_sections);
4909   was_local_p = local_p;
4910   if (! elf_bad_symtab (input_bfd))
4911     extsymoff = symtab_hdr->sh_info;
4912   else
4913     {
4914       /* The symbol table does not follow the rule that local symbols
4915          must come before globals.  */
4916       extsymoff = 0;
4917     }
4918
4919   /* Figure out the value of the symbol.  */
4920   if (local_p)
4921     {
4922       Elf_Internal_Sym *sym;
4923
4924       sym = local_syms + r_symndx;
4925       sec = local_sections[r_symndx];
4926
4927       symbol = sec->output_section->vma + sec->output_offset;
4928       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
4929           || (sec->flags & SEC_MERGE))
4930         symbol += sym->st_value;
4931       if ((sec->flags & SEC_MERGE)
4932           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
4933         {
4934           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
4935           addend -= symbol;
4936           addend += sec->output_section->vma + sec->output_offset;
4937         }
4938
4939       /* MIPS16 text labels should be treated as odd.  */
4940       if (ELF_ST_IS_MIPS16 (sym->st_other))
4941         ++symbol;
4942
4943       /* Record the name of this symbol, for our caller.  */
4944       *namep = bfd_elf_string_from_elf_section (input_bfd,
4945                                                 symtab_hdr->sh_link,
4946                                                 sym->st_name);
4947       if (*namep == '\0')
4948         *namep = bfd_section_name (input_bfd, sec);
4949
4950       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
4951     }
4952   else
4953     {
4954       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
4955
4956       /* For global symbols we look up the symbol in the hash-table.  */
4957       h = ((struct mips_elf_link_hash_entry *)
4958            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
4959       /* Find the real hash-table entry for this symbol.  */
4960       while (h->root.root.type == bfd_link_hash_indirect
4961              || h->root.root.type == bfd_link_hash_warning)
4962         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4963
4964       /* Record the name of this symbol, for our caller.  */
4965       *namep = h->root.root.root.string;
4966
4967       /* See if this is the special _gp_disp symbol.  Note that such a
4968          symbol must always be a global symbol.  */
4969       if (strcmp (*namep, "_gp_disp") == 0
4970           && ! NEWABI_P (input_bfd))
4971         {
4972           /* Relocations against _gp_disp are permitted only with
4973              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
4974           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
4975             return bfd_reloc_notsupported;
4976
4977           gp_disp_p = TRUE;
4978         }
4979       /* See if this is the special _gp symbol.  Note that such a
4980          symbol must always be a global symbol.  */
4981       else if (strcmp (*namep, "__gnu_local_gp") == 0)
4982         gnu_local_gp_p = TRUE;
4983
4984
4985       /* If this symbol is defined, calculate its address.  Note that
4986          _gp_disp is a magic symbol, always implicitly defined by the
4987          linker, so it's inappropriate to check to see whether or not
4988          its defined.  */
4989       else if ((h->root.root.type == bfd_link_hash_defined
4990                 || h->root.root.type == bfd_link_hash_defweak)
4991                && h->root.root.u.def.section)
4992         {
4993           sec = h->root.root.u.def.section;
4994           if (sec->output_section)
4995             symbol = (h->root.root.u.def.value
4996                       + sec->output_section->vma
4997                       + sec->output_offset);
4998           else
4999             symbol = h->root.root.u.def.value;
5000         }
5001       else if (h->root.root.type == bfd_link_hash_undefweak)
5002         /* We allow relocations against undefined weak symbols, giving
5003            it the value zero, so that you can undefined weak functions
5004            and check to see if they exist by looking at their
5005            addresses.  */
5006         symbol = 0;
5007       else if (info->unresolved_syms_in_objects == RM_IGNORE
5008                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5009         symbol = 0;
5010       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5011                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5012         {
5013           /* If this is a dynamic link, we should have created a
5014              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5015              in in _bfd_mips_elf_create_dynamic_sections.
5016              Otherwise, we should define the symbol with a value of 0.
5017              FIXME: It should probably get into the symbol table
5018              somehow as well.  */
5019           BFD_ASSERT (! info->shared);
5020           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5021           symbol = 0;
5022         }
5023       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5024         {
5025           /* This is an optional symbol - an Irix specific extension to the
5026              ELF spec.  Ignore it for now.
5027              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5028              than simply ignoring them, but we do not handle this for now.
5029              For information see the "64-bit ELF Object File Specification"
5030              which is available from here:
5031              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5032           symbol = 0;
5033         }
5034       else if ((*info->callbacks->undefined_symbol)
5035                (info, h->root.root.root.string, input_bfd,
5036                 input_section, relocation->r_offset,
5037                 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5038                  || ELF_ST_VISIBILITY (h->root.other)))
5039         {
5040           return bfd_reloc_undefined;
5041         }
5042       else
5043         {
5044           return bfd_reloc_notsupported;
5045         }
5046
5047       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5048     }
5049
5050   /* If this is a reference to a 16-bit function with a stub, we need
5051      to redirect the relocation to the stub unless:
5052
5053      (a) the relocation is for a MIPS16 JAL;
5054
5055      (b) the relocation is for a MIPS16 PIC call, and there are no
5056          non-MIPS16 uses of the GOT slot; or
5057
5058      (c) the section allows direct references to MIPS16 functions.  */
5059   if (r_type != R_MIPS16_26
5060       && !info->relocatable
5061       && ((h != NULL
5062            && h->fn_stub != NULL
5063            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5064           || (local_p
5065               && elf_tdata (input_bfd)->local_stubs != NULL
5066               && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5067       && !section_allows_mips16_refs_p (input_section))
5068     {
5069       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5070          have already noticed that we were going to need the
5071          stub.  */
5072       if (local_p)
5073         sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
5074       else
5075         {
5076           BFD_ASSERT (h->need_fn_stub);
5077           sec = h->fn_stub;
5078         }
5079
5080       symbol = sec->output_section->vma + sec->output_offset;
5081       /* The target is 16-bit, but the stub isn't.  */
5082       target_is_16_bit_code_p = FALSE;
5083     }
5084   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
5085      need to redirect the call to the stub.  Note that we specifically
5086      exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5087      use an indirect stub instead.  */
5088   else if (r_type == R_MIPS16_26 && !info->relocatable
5089            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5090                || (local_p
5091                    && elf_tdata (input_bfd)->local_call_stubs != NULL
5092                    && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5093            && !target_is_16_bit_code_p)
5094     {
5095       if (local_p)
5096         sec = elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5097       else
5098         {
5099           /* If both call_stub and call_fp_stub are defined, we can figure
5100              out which one to use by checking which one appears in the input
5101              file.  */
5102           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5103             {
5104               asection *o;
5105               
5106               sec = NULL;
5107               for (o = input_bfd->sections; o != NULL; o = o->next)
5108                 {
5109                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5110                     {
5111                       sec = h->call_fp_stub;
5112                       break;
5113                     }
5114                 }
5115               if (sec == NULL)
5116                 sec = h->call_stub;
5117             }
5118           else if (h->call_stub != NULL)
5119             sec = h->call_stub;
5120           else
5121             sec = h->call_fp_stub;
5122         }
5123
5124       BFD_ASSERT (sec->size > 0);
5125       symbol = sec->output_section->vma + sec->output_offset;
5126     }
5127   /* If this is a direct call to a PIC function, redirect to the
5128      non-PIC stub.  */
5129   else if (h != NULL && h->la25_stub
5130            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type))
5131     symbol = (h->la25_stub->stub_section->output_section->vma
5132               + h->la25_stub->stub_section->output_offset
5133               + h->la25_stub->offset);
5134
5135   /* Calls from 16-bit code to 32-bit code and vice versa require the
5136      mode change.  */
5137   *cross_mode_jump_p = !info->relocatable
5138                        && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5139                            || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5140                                && target_is_16_bit_code_p));
5141
5142   local_p = h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->root);
5143
5144   gp0 = _bfd_get_gp_value (input_bfd);
5145   gp = _bfd_get_gp_value (abfd);
5146   if (htab->got_info)
5147     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5148
5149   if (gnu_local_gp_p)
5150     symbol = gp;
5151
5152   /* Global R_MIPS_GOT_PAGE relocations are equivalent to R_MIPS_GOT_DISP.
5153      The addend is applied by the corresponding R_MIPS_GOT_OFST.  */
5154   if (r_type == R_MIPS_GOT_PAGE && !local_p)
5155     {
5156       r_type = R_MIPS_GOT_DISP;
5157       addend = 0;
5158     }
5159
5160   /* If we haven't already determined the GOT offset, and we're going
5161      to need it, get it now.  */
5162   switch (r_type)
5163     {
5164     case R_MIPS16_CALL16:
5165     case R_MIPS16_GOT16:
5166     case R_MIPS_CALL16:
5167     case R_MIPS_GOT16:
5168     case R_MIPS_GOT_DISP:
5169     case R_MIPS_GOT_HI16:
5170     case R_MIPS_CALL_HI16:
5171     case R_MIPS_GOT_LO16:
5172     case R_MIPS_CALL_LO16:
5173     case R_MIPS_TLS_GD:
5174     case R_MIPS_TLS_GOTTPREL:
5175     case R_MIPS_TLS_LDM:
5176       /* Find the index into the GOT where this value is located.  */
5177       if (r_type == R_MIPS_TLS_LDM)
5178         {
5179           g = mips_elf_local_got_index (abfd, input_bfd, info,
5180                                         0, 0, NULL, r_type);
5181           if (g == MINUS_ONE)
5182             return bfd_reloc_outofrange;
5183         }
5184       else if (!local_p)
5185         {
5186           /* On VxWorks, CALL relocations should refer to the .got.plt
5187              entry, which is initialized to point at the PLT stub.  */
5188           if (htab->is_vxworks
5189               && (r_type == R_MIPS_CALL_HI16
5190                   || r_type == R_MIPS_CALL_LO16
5191                   || call16_reloc_p (r_type)))
5192             {
5193               BFD_ASSERT (addend == 0);
5194               BFD_ASSERT (h->root.needs_plt);
5195               g = mips_elf_gotplt_index (info, &h->root);
5196             }
5197           else
5198             {
5199               BFD_ASSERT (addend == 0);
5200               g = mips_elf_global_got_index (dynobj, input_bfd,
5201                                              &h->root, r_type, info);
5202               if (h->tls_type == GOT_NORMAL
5203                   && !elf_hash_table (info)->dynamic_sections_created)
5204                 /* This is a static link.  We must initialize the GOT entry.  */
5205                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5206             }
5207         }
5208       else if (!htab->is_vxworks
5209                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5210         /* The calculation below does not involve "g".  */
5211         break;
5212       else
5213         {
5214           g = mips_elf_local_got_index (abfd, input_bfd, info,
5215                                         symbol + addend, r_symndx, h, r_type);
5216           if (g == MINUS_ONE)
5217             return bfd_reloc_outofrange;
5218         }
5219
5220       /* Convert GOT indices to actual offsets.  */
5221       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5222       break;
5223     }
5224
5225   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5226      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5227   if (h != NULL && is_gott_symbol (info, &h->root))
5228     {
5229       Elf_Internal_Rela outrel;
5230       bfd_byte *loc;
5231       asection *s;
5232
5233       s = mips_elf_rel_dyn_section (info, FALSE);
5234       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5235
5236       outrel.r_offset = (input_section->output_section->vma
5237                          + input_section->output_offset
5238                          + relocation->r_offset);
5239       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5240       outrel.r_addend = addend;
5241       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5242
5243       /* If we've written this relocation for a readonly section,
5244          we need to set DF_TEXTREL again, so that we do not delete the
5245          DT_TEXTREL tag.  */
5246       if (MIPS_ELF_READONLY_SECTION (input_section))
5247         info->flags |= DF_TEXTREL;
5248
5249       *valuep = 0;
5250       return bfd_reloc_ok;
5251     }
5252
5253   /* Figure out what kind of relocation is being performed.  */
5254   switch (r_type)
5255     {
5256     case R_MIPS_NONE:
5257       return bfd_reloc_continue;
5258
5259     case R_MIPS_16:
5260       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
5261       overflowed_p = mips_elf_overflow_p (value, 16);
5262       break;
5263
5264     case R_MIPS_32:
5265     case R_MIPS_REL32:
5266     case R_MIPS_64:
5267       if ((info->shared
5268            || (htab->root.dynamic_sections_created
5269                && h != NULL
5270                && h->root.def_dynamic
5271                && !h->root.def_regular
5272                && !h->has_static_relocs))
5273           && r_symndx != STN_UNDEF
5274           && (h == NULL
5275               || h->root.root.type != bfd_link_hash_undefweak
5276               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5277           && (input_section->flags & SEC_ALLOC) != 0)
5278         {
5279           /* If we're creating a shared library, then we can't know
5280              where the symbol will end up.  So, we create a relocation
5281              record in the output, and leave the job up to the dynamic
5282              linker.  We must do the same for executable references to
5283              shared library symbols, unless we've decided to use copy
5284              relocs or PLTs instead.  */
5285           value = addend;
5286           if (!mips_elf_create_dynamic_relocation (abfd,
5287                                                    info,
5288                                                    relocation,
5289                                                    h,
5290                                                    sec,
5291                                                    symbol,
5292                                                    &value,
5293                                                    input_section))
5294             return bfd_reloc_undefined;
5295         }
5296       else
5297         {
5298           if (r_type != R_MIPS_REL32)
5299             value = symbol + addend;
5300           else
5301             value = addend;
5302         }
5303       value &= howto->dst_mask;
5304       break;
5305
5306     case R_MIPS_PC32:
5307       value = symbol + addend - p;
5308       value &= howto->dst_mask;
5309       break;
5310
5311     case R_MIPS16_26:
5312       /* The calculation for R_MIPS16_26 is just the same as for an
5313          R_MIPS_26.  It's only the storage of the relocated field into
5314          the output file that's different.  That's handled in
5315          mips_elf_perform_relocation.  So, we just fall through to the
5316          R_MIPS_26 case here.  */
5317     case R_MIPS_26:
5318       if (was_local_p)
5319         value = ((addend | ((p + 4) & 0xf0000000)) + symbol) >> 2;
5320       else
5321         {
5322           value = (_bfd_mips_elf_sign_extend (addend, 28) + symbol) >> 2;
5323           if (h->root.root.type != bfd_link_hash_undefweak)
5324             overflowed_p = (value >> 26) != ((p + 4) >> 28);
5325         }
5326       value &= howto->dst_mask;
5327       break;
5328
5329     case R_MIPS_TLS_DTPREL_HI16:
5330       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5331                & howto->dst_mask);
5332       break;
5333
5334     case R_MIPS_TLS_DTPREL_LO16:
5335     case R_MIPS_TLS_DTPREL32:
5336     case R_MIPS_TLS_DTPREL64:
5337       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5338       break;
5339
5340     case R_MIPS_TLS_TPREL_HI16:
5341       value = (mips_elf_high (addend + symbol - tprel_base (info))
5342                & howto->dst_mask);
5343       break;
5344
5345     case R_MIPS_TLS_TPREL_LO16:
5346       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5347       break;
5348
5349     case R_MIPS_HI16:
5350     case R_MIPS16_HI16:
5351       if (!gp_disp_p)
5352         {
5353           value = mips_elf_high (addend + symbol);
5354           value &= howto->dst_mask;
5355         }
5356       else
5357         {
5358           /* For MIPS16 ABI code we generate this sequence
5359                 0: li      $v0,%hi(_gp_disp)
5360                 4: addiupc $v1,%lo(_gp_disp)
5361                 8: sll     $v0,16
5362                12: addu    $v0,$v1
5363                14: move    $gp,$v0
5364              So the offsets of hi and lo relocs are the same, but the
5365              $pc is four higher than $t9 would be, so reduce
5366              both reloc addends by 4. */
5367           if (r_type == R_MIPS16_HI16)
5368             value = mips_elf_high (addend + gp - p - 4);
5369           else
5370             value = mips_elf_high (addend + gp - p);
5371           overflowed_p = mips_elf_overflow_p (value, 16);
5372         }
5373       break;
5374
5375     case R_MIPS_LO16:
5376     case R_MIPS16_LO16:
5377       if (!gp_disp_p)
5378         value = (symbol + addend) & howto->dst_mask;
5379       else
5380         {
5381           /* See the comment for R_MIPS16_HI16 above for the reason
5382              for this conditional.  */
5383           if (r_type == R_MIPS16_LO16)
5384             value = addend + gp - p;
5385           else
5386             value = addend + gp - p + 4;
5387           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5388              for overflow.  But, on, say, IRIX5, relocations against
5389              _gp_disp are normally generated from the .cpload
5390              pseudo-op.  It generates code that normally looks like
5391              this:
5392
5393                lui    $gp,%hi(_gp_disp)
5394                addiu  $gp,$gp,%lo(_gp_disp)
5395                addu   $gp,$gp,$t9
5396
5397              Here $t9 holds the address of the function being called,
5398              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5399              relocation can easily overflow in this situation, but the
5400              R_MIPS_HI16 relocation will handle the overflow.
5401              Therefore, we consider this a bug in the MIPS ABI, and do
5402              not check for overflow here.  */
5403         }
5404       break;
5405
5406     case R_MIPS_LITERAL:
5407       /* Because we don't merge literal sections, we can handle this
5408          just like R_MIPS_GPREL16.  In the long run, we should merge
5409          shared literals, and then we will need to additional work
5410          here.  */
5411
5412       /* Fall through.  */
5413
5414     case R_MIPS16_GPREL:
5415       /* The R_MIPS16_GPREL performs the same calculation as
5416          R_MIPS_GPREL16, but stores the relocated bits in a different
5417          order.  We don't need to do anything special here; the
5418          differences are handled in mips_elf_perform_relocation.  */
5419     case R_MIPS_GPREL16:
5420       /* Only sign-extend the addend if it was extracted from the
5421          instruction.  If the addend was separate, leave it alone,
5422          otherwise we may lose significant bits.  */
5423       if (howto->partial_inplace)
5424         addend = _bfd_mips_elf_sign_extend (addend, 16);
5425       value = symbol + addend - gp;
5426       /* If the symbol was local, any earlier relocatable links will
5427          have adjusted its addend with the gp offset, so compensate
5428          for that now.  Don't do it for symbols forced local in this
5429          link, though, since they won't have had the gp offset applied
5430          to them before.  */
5431       if (was_local_p)
5432         value += gp0;
5433       overflowed_p = mips_elf_overflow_p (value, 16);
5434       break;
5435
5436     case R_MIPS16_GOT16:
5437     case R_MIPS16_CALL16:
5438     case R_MIPS_GOT16:
5439     case R_MIPS_CALL16:
5440       /* VxWorks does not have separate local and global semantics for
5441          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5442       if (!htab->is_vxworks && local_p)
5443         {
5444           value = mips_elf_got16_entry (abfd, input_bfd, info,
5445                                         symbol + addend, !was_local_p);
5446           if (value == MINUS_ONE)
5447             return bfd_reloc_outofrange;
5448           value
5449             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5450           overflowed_p = mips_elf_overflow_p (value, 16);
5451           break;
5452         }
5453
5454       /* Fall through.  */
5455
5456     case R_MIPS_TLS_GD:
5457     case R_MIPS_TLS_GOTTPREL:
5458     case R_MIPS_TLS_LDM:
5459     case R_MIPS_GOT_DISP:
5460       value = g;
5461       overflowed_p = mips_elf_overflow_p (value, 16);
5462       break;
5463
5464     case R_MIPS_GPREL32:
5465       value = (addend + symbol + gp0 - gp);
5466       if (!save_addend)
5467         value &= howto->dst_mask;
5468       break;
5469
5470     case R_MIPS_PC16:
5471     case R_MIPS_GNU_REL16_S2:
5472       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5473       overflowed_p = mips_elf_overflow_p (value, 18);
5474       value >>= howto->rightshift;
5475       value &= howto->dst_mask;
5476       break;
5477
5478     case R_MIPS_GOT_HI16:
5479     case R_MIPS_CALL_HI16:
5480       /* We're allowed to handle these two relocations identically.
5481          The dynamic linker is allowed to handle the CALL relocations
5482          differently by creating a lazy evaluation stub.  */
5483       value = g;
5484       value = mips_elf_high (value);
5485       value &= howto->dst_mask;
5486       break;
5487
5488     case R_MIPS_GOT_LO16:
5489     case R_MIPS_CALL_LO16:
5490       value = g & howto->dst_mask;
5491       break;
5492
5493     case R_MIPS_GOT_PAGE:
5494       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
5495       if (value == MINUS_ONE)
5496         return bfd_reloc_outofrange;
5497       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5498       overflowed_p = mips_elf_overflow_p (value, 16);
5499       break;
5500
5501     case R_MIPS_GOT_OFST:
5502       if (local_p)
5503         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
5504       else
5505         value = addend;
5506       overflowed_p = mips_elf_overflow_p (value, 16);
5507       break;
5508
5509     case R_MIPS_SUB:
5510       value = symbol - addend;
5511       value &= howto->dst_mask;
5512       break;
5513
5514     case R_MIPS_HIGHER:
5515       value = mips_elf_higher (addend + symbol);
5516       value &= howto->dst_mask;
5517       break;
5518
5519     case R_MIPS_HIGHEST:
5520       value = mips_elf_highest (addend + symbol);
5521       value &= howto->dst_mask;
5522       break;
5523
5524     case R_MIPS_SCN_DISP:
5525       value = symbol + addend - sec->output_offset;
5526       value &= howto->dst_mask;
5527       break;
5528
5529     case R_MIPS_JALR:
5530       /* This relocation is only a hint.  In some cases, we optimize
5531          it into a bal instruction.  But we don't try to optimize
5532          when the symbol does not resolve locally.  */
5533       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
5534         return bfd_reloc_continue;
5535       value = symbol + addend;
5536       break;
5537
5538     case R_MIPS_PJUMP:
5539     case R_MIPS_GNU_VTINHERIT:
5540     case R_MIPS_GNU_VTENTRY:
5541       /* We don't do anything with these at present.  */
5542       return bfd_reloc_continue;
5543
5544     default:
5545       /* An unrecognized relocation type.  */
5546       return bfd_reloc_notsupported;
5547     }
5548
5549   /* Store the VALUE for our caller.  */
5550   *valuep = value;
5551   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5552 }
5553
5554 /* Obtain the field relocated by RELOCATION.  */
5555
5556 static bfd_vma
5557 mips_elf_obtain_contents (reloc_howto_type *howto,
5558                           const Elf_Internal_Rela *relocation,
5559                           bfd *input_bfd, bfd_byte *contents)
5560 {
5561   bfd_vma x;
5562   bfd_byte *location = contents + relocation->r_offset;
5563
5564   /* Obtain the bytes.  */
5565   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5566
5567   return x;
5568 }
5569
5570 /* It has been determined that the result of the RELOCATION is the
5571    VALUE.  Use HOWTO to place VALUE into the output file at the
5572    appropriate position.  The SECTION is the section to which the
5573    relocation applies.  
5574    CROSS_MODE_JUMP_P is true if the relocation field
5575    is a MIPS16 jump to non-MIPS16 code, or vice versa.
5576
5577    Returns FALSE if anything goes wrong.  */
5578
5579 static bfd_boolean
5580 mips_elf_perform_relocation (struct bfd_link_info *info,
5581                              reloc_howto_type *howto,
5582                              const Elf_Internal_Rela *relocation,
5583                              bfd_vma value, bfd *input_bfd,
5584                              asection *input_section, bfd_byte *contents,
5585                              bfd_boolean cross_mode_jump_p)
5586 {
5587   bfd_vma x;
5588   bfd_byte *location;
5589   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5590
5591   /* Figure out where the relocation is occurring.  */
5592   location = contents + relocation->r_offset;
5593
5594   _bfd_mips16_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5595
5596   /* Obtain the current value.  */
5597   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5598
5599   /* Clear the field we are setting.  */
5600   x &= ~howto->dst_mask;
5601
5602   /* Set the field.  */
5603   x |= (value & howto->dst_mask);
5604
5605   /* If required, turn JAL into JALX.  */
5606   if (cross_mode_jump_p && jal_reloc_p (r_type))
5607     {
5608       bfd_boolean ok;
5609       bfd_vma opcode = x >> 26;
5610       bfd_vma jalx_opcode;
5611
5612       /* Check to see if the opcode is already JAL or JALX.  */
5613       if (r_type == R_MIPS16_26)
5614         {
5615           ok = ((opcode == 0x6) || (opcode == 0x7));
5616           jalx_opcode = 0x7;
5617         }
5618       else
5619         {
5620           ok = ((opcode == 0x3) || (opcode == 0x1d));
5621           jalx_opcode = 0x1d;
5622         }
5623
5624       /* If the opcode is not JAL or JALX, there's a problem.  */
5625       if (!ok)
5626         {
5627           (*_bfd_error_handler)
5628             (_("%B: %A+0x%lx: Direct jumps between ISA modes are not allowed; consider recompiling with interlinking enabled."),
5629              input_bfd,
5630              input_section,
5631              (unsigned long) relocation->r_offset);
5632           bfd_set_error (bfd_error_bad_value);
5633           return FALSE;
5634         }
5635
5636       /* Make this the JALX opcode.  */
5637       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
5638     }
5639
5640   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
5641      range.  */
5642   if (!info->relocatable
5643       && !cross_mode_jump_p
5644       && ((JAL_TO_BAL_P (input_bfd)
5645            && r_type == R_MIPS_26
5646            && (x >> 26) == 0x3)         /* jal addr */
5647           || (JALR_TO_BAL_P (input_bfd)
5648               && r_type == R_MIPS_JALR
5649               && x == 0x0320f809)       /* jalr t9 */
5650           || (JR_TO_B_P (input_bfd)
5651               && r_type == R_MIPS_JALR
5652               && x == 0x03200008)))     /* jr t9 */
5653     {
5654       bfd_vma addr;
5655       bfd_vma dest;
5656       bfd_signed_vma off;
5657
5658       addr = (input_section->output_section->vma
5659               + input_section->output_offset
5660               + relocation->r_offset
5661               + 4);
5662       if (r_type == R_MIPS_26)
5663         dest = (value << 2) | ((addr >> 28) << 28);
5664       else
5665         dest = value;
5666       off = dest - addr;
5667       if (off <= 0x1ffff && off >= -0x20000)
5668         {
5669           if (x == 0x03200008)  /* jr t9 */
5670             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
5671           else
5672             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
5673         }
5674     }
5675
5676   /* Put the value into the output.  */
5677   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
5678
5679   _bfd_mips16_elf_reloc_shuffle(input_bfd, r_type, !info->relocatable,
5680                                 location);
5681
5682   return TRUE;
5683 }
5684 \f
5685 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
5686    is the original relocation, which is now being transformed into a
5687    dynamic relocation.  The ADDENDP is adjusted if necessary; the
5688    caller should store the result in place of the original addend.  */
5689
5690 static bfd_boolean
5691 mips_elf_create_dynamic_relocation (bfd *output_bfd,
5692                                     struct bfd_link_info *info,
5693                                     const Elf_Internal_Rela *rel,
5694                                     struct mips_elf_link_hash_entry *h,
5695                                     asection *sec, bfd_vma symbol,
5696                                     bfd_vma *addendp, asection *input_section)
5697 {
5698   Elf_Internal_Rela outrel[3];
5699   asection *sreloc;
5700   bfd *dynobj;
5701   int r_type;
5702   long indx;
5703   bfd_boolean defined_p;
5704   struct mips_elf_link_hash_table *htab;
5705
5706   htab = mips_elf_hash_table (info);
5707   BFD_ASSERT (htab != NULL);
5708
5709   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
5710   dynobj = elf_hash_table (info)->dynobj;
5711   sreloc = mips_elf_rel_dyn_section (info, FALSE);
5712   BFD_ASSERT (sreloc != NULL);
5713   BFD_ASSERT (sreloc->contents != NULL);
5714   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
5715               < sreloc->size);
5716
5717   outrel[0].r_offset =
5718     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
5719   if (ABI_64_P (output_bfd))
5720     {
5721       outrel[1].r_offset =
5722         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
5723       outrel[2].r_offset =
5724         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
5725     }
5726
5727   if (outrel[0].r_offset == MINUS_ONE)
5728     /* The relocation field has been deleted.  */
5729     return TRUE;
5730
5731   if (outrel[0].r_offset == MINUS_TWO)
5732     {
5733       /* The relocation field has been converted into a relative value of
5734          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
5735          the field to be fully relocated, so add in the symbol's value.  */
5736       *addendp += symbol;
5737       return TRUE;
5738     }
5739
5740   /* We must now calculate the dynamic symbol table index to use
5741      in the relocation.  */
5742   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
5743     {
5744       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
5745       indx = h->root.dynindx;
5746       if (SGI_COMPAT (output_bfd))
5747         defined_p = h->root.def_regular;
5748       else
5749         /* ??? glibc's ld.so just adds the final GOT entry to the
5750            relocation field.  It therefore treats relocs against
5751            defined symbols in the same way as relocs against
5752            undefined symbols.  */
5753         defined_p = FALSE;
5754     }
5755   else
5756     {
5757       if (sec != NULL && bfd_is_abs_section (sec))
5758         indx = 0;
5759       else if (sec == NULL || sec->owner == NULL)
5760         {
5761           bfd_set_error (bfd_error_bad_value);
5762           return FALSE;
5763         }
5764       else
5765         {
5766           indx = elf_section_data (sec->output_section)->dynindx;
5767           if (indx == 0)
5768             {
5769               asection *osec = htab->root.text_index_section;
5770               indx = elf_section_data (osec)->dynindx;
5771             }
5772           if (indx == 0)
5773             abort ();
5774         }
5775
5776       /* Instead of generating a relocation using the section
5777          symbol, we may as well make it a fully relative
5778          relocation.  We want to avoid generating relocations to
5779          local symbols because we used to generate them
5780          incorrectly, without adding the original symbol value,
5781          which is mandated by the ABI for section symbols.  In
5782          order to give dynamic loaders and applications time to
5783          phase out the incorrect use, we refrain from emitting
5784          section-relative relocations.  It's not like they're
5785          useful, after all.  This should be a bit more efficient
5786          as well.  */
5787       /* ??? Although this behavior is compatible with glibc's ld.so,
5788          the ABI says that relocations against STN_UNDEF should have
5789          a symbol value of 0.  Irix rld honors this, so relocations
5790          against STN_UNDEF have no effect.  */
5791       if (!SGI_COMPAT (output_bfd))
5792         indx = 0;
5793       defined_p = TRUE;
5794     }
5795
5796   /* If the relocation was previously an absolute relocation and
5797      this symbol will not be referred to by the relocation, we must
5798      adjust it by the value we give it in the dynamic symbol table.
5799      Otherwise leave the job up to the dynamic linker.  */
5800   if (defined_p && r_type != R_MIPS_REL32)
5801     *addendp += symbol;
5802
5803   if (htab->is_vxworks)
5804     /* VxWorks uses non-relative relocations for this.  */
5805     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
5806   else
5807     /* The relocation is always an REL32 relocation because we don't
5808        know where the shared library will wind up at load-time.  */
5809     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
5810                                    R_MIPS_REL32);
5811
5812   /* For strict adherence to the ABI specification, we should
5813      generate a R_MIPS_64 relocation record by itself before the
5814      _REL32/_64 record as well, such that the addend is read in as
5815      a 64-bit value (REL32 is a 32-bit relocation, after all).
5816      However, since none of the existing ELF64 MIPS dynamic
5817      loaders seems to care, we don't waste space with these
5818      artificial relocations.  If this turns out to not be true,
5819      mips_elf_allocate_dynamic_relocation() should be tweaked so
5820      as to make room for a pair of dynamic relocations per
5821      invocation if ABI_64_P, and here we should generate an
5822      additional relocation record with R_MIPS_64 by itself for a
5823      NULL symbol before this relocation record.  */
5824   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
5825                                  ABI_64_P (output_bfd)
5826                                  ? R_MIPS_64
5827                                  : R_MIPS_NONE);
5828   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
5829
5830   /* Adjust the output offset of the relocation to reference the
5831      correct location in the output file.  */
5832   outrel[0].r_offset += (input_section->output_section->vma
5833                          + input_section->output_offset);
5834   outrel[1].r_offset += (input_section->output_section->vma
5835                          + input_section->output_offset);
5836   outrel[2].r_offset += (input_section->output_section->vma
5837                          + input_section->output_offset);
5838
5839   /* Put the relocation back out.  We have to use the special
5840      relocation outputter in the 64-bit case since the 64-bit
5841      relocation format is non-standard.  */
5842   if (ABI_64_P (output_bfd))
5843     {
5844       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
5845         (output_bfd, &outrel[0],
5846          (sreloc->contents
5847           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
5848     }
5849   else if (htab->is_vxworks)
5850     {
5851       /* VxWorks uses RELA rather than REL dynamic relocations.  */
5852       outrel[0].r_addend = *addendp;
5853       bfd_elf32_swap_reloca_out
5854         (output_bfd, &outrel[0],
5855          (sreloc->contents
5856           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
5857     }
5858   else
5859     bfd_elf32_swap_reloc_out
5860       (output_bfd, &outrel[0],
5861        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
5862
5863   /* We've now added another relocation.  */
5864   ++sreloc->reloc_count;
5865
5866   /* Make sure the output section is writable.  The dynamic linker
5867      will be writing to it.  */
5868   elf_section_data (input_section->output_section)->this_hdr.sh_flags
5869     |= SHF_WRITE;
5870
5871   /* On IRIX5, make an entry of compact relocation info.  */
5872   if (IRIX_COMPAT (output_bfd) == ict_irix5)
5873     {
5874       asection *scpt = bfd_get_section_by_name (dynobj, ".compact_rel");
5875       bfd_byte *cr;
5876
5877       if (scpt)
5878         {
5879           Elf32_crinfo cptrel;
5880
5881           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
5882           cptrel.vaddr = (rel->r_offset
5883                           + input_section->output_section->vma
5884                           + input_section->output_offset);
5885           if (r_type == R_MIPS_REL32)
5886             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
5887           else
5888             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
5889           mips_elf_set_cr_dist2to (cptrel, 0);
5890           cptrel.konst = *addendp;
5891
5892           cr = (scpt->contents
5893                 + sizeof (Elf32_External_compact_rel));
5894           mips_elf_set_cr_relvaddr (cptrel, 0);
5895           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
5896                                      ((Elf32_External_crinfo *) cr
5897                                       + scpt->reloc_count));
5898           ++scpt->reloc_count;
5899         }
5900     }
5901
5902   /* If we've written this relocation for a readonly section,
5903      we need to set DF_TEXTREL again, so that we do not delete the
5904      DT_TEXTREL tag.  */
5905   if (MIPS_ELF_READONLY_SECTION (input_section))
5906     info->flags |= DF_TEXTREL;
5907
5908   return TRUE;
5909 }
5910 \f
5911 /* Return the MACH for a MIPS e_flags value.  */
5912
5913 unsigned long
5914 _bfd_elf_mips_mach (flagword flags)
5915 {
5916   switch (flags & EF_MIPS_MACH)
5917     {
5918     case E_MIPS_MACH_3900:
5919       return bfd_mach_mips3900;
5920
5921     case E_MIPS_MACH_4010:
5922       return bfd_mach_mips4010;
5923
5924     case E_MIPS_MACH_4100:
5925       return bfd_mach_mips4100;
5926
5927     case E_MIPS_MACH_4111:
5928       return bfd_mach_mips4111;
5929
5930     case E_MIPS_MACH_4120:
5931       return bfd_mach_mips4120;
5932
5933     case E_MIPS_MACH_4650:
5934       return bfd_mach_mips4650;
5935
5936     case E_MIPS_MACH_5400:
5937       return bfd_mach_mips5400;
5938
5939     case E_MIPS_MACH_5500:
5940       return bfd_mach_mips5500;
5941
5942     case E_MIPS_MACH_9000:
5943       return bfd_mach_mips9000;
5944
5945     case E_MIPS_MACH_SB1:
5946       return bfd_mach_mips_sb1;
5947
5948     case E_MIPS_MACH_LS2E:
5949       return bfd_mach_mips_loongson_2e;
5950
5951     case E_MIPS_MACH_LS2F:
5952       return bfd_mach_mips_loongson_2f;
5953
5954     case E_MIPS_MACH_LS3A:
5955       return bfd_mach_mips_loongson_3a;
5956
5957     case E_MIPS_MACH_OCTEON:
5958       return bfd_mach_mips_octeon;
5959
5960     case E_MIPS_MACH_XLR:
5961       return bfd_mach_mips_xlr;
5962
5963     default:
5964       switch (flags & EF_MIPS_ARCH)
5965         {
5966         default:
5967         case E_MIPS_ARCH_1:
5968           return bfd_mach_mips3000;
5969
5970         case E_MIPS_ARCH_2:
5971           return bfd_mach_mips6000;
5972
5973         case E_MIPS_ARCH_3:
5974           return bfd_mach_mips4000;
5975
5976         case E_MIPS_ARCH_4:
5977           return bfd_mach_mips8000;
5978
5979         case E_MIPS_ARCH_5:
5980           return bfd_mach_mips5;
5981
5982         case E_MIPS_ARCH_32:
5983           return bfd_mach_mipsisa32;
5984
5985         case E_MIPS_ARCH_64:
5986           return bfd_mach_mipsisa64;
5987
5988         case E_MIPS_ARCH_32R2:
5989           return bfd_mach_mipsisa32r2;
5990
5991         case E_MIPS_ARCH_64R2:
5992           return bfd_mach_mipsisa64r2;
5993         }
5994     }
5995
5996   return 0;
5997 }
5998
5999 /* Return printable name for ABI.  */
6000
6001 static INLINE char *
6002 elf_mips_abi_name (bfd *abfd)
6003 {
6004   flagword flags;
6005
6006   flags = elf_elfheader (abfd)->e_flags;
6007   switch (flags & EF_MIPS_ABI)
6008     {
6009     case 0:
6010       if (ABI_N32_P (abfd))
6011         return "N32";
6012       else if (ABI_64_P (abfd))
6013         return "64";
6014       else
6015         return "none";
6016     case E_MIPS_ABI_O32:
6017       return "O32";
6018     case E_MIPS_ABI_O64:
6019       return "O64";
6020     case E_MIPS_ABI_EABI32:
6021       return "EABI32";
6022     case E_MIPS_ABI_EABI64:
6023       return "EABI64";
6024     default:
6025       return "unknown abi";
6026     }
6027 }
6028 \f
6029 /* MIPS ELF uses two common sections.  One is the usual one, and the
6030    other is for small objects.  All the small objects are kept
6031    together, and then referenced via the gp pointer, which yields
6032    faster assembler code.  This is what we use for the small common
6033    section.  This approach is copied from ecoff.c.  */
6034 static asection mips_elf_scom_section;
6035 static asymbol mips_elf_scom_symbol;
6036 static asymbol *mips_elf_scom_symbol_ptr;
6037
6038 /* MIPS ELF also uses an acommon section, which represents an
6039    allocated common symbol which may be overridden by a
6040    definition in a shared library.  */
6041 static asection mips_elf_acom_section;
6042 static asymbol mips_elf_acom_symbol;
6043 static asymbol *mips_elf_acom_symbol_ptr;
6044
6045 /* This is used for both the 32-bit and the 64-bit ABI.  */
6046
6047 void
6048 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6049 {
6050   elf_symbol_type *elfsym;
6051
6052   /* Handle the special MIPS section numbers that a symbol may use.  */
6053   elfsym = (elf_symbol_type *) asym;
6054   switch (elfsym->internal_elf_sym.st_shndx)
6055     {
6056     case SHN_MIPS_ACOMMON:
6057       /* This section is used in a dynamically linked executable file.
6058          It is an allocated common section.  The dynamic linker can
6059          either resolve these symbols to something in a shared
6060          library, or it can just leave them here.  For our purposes,
6061          we can consider these symbols to be in a new section.  */
6062       if (mips_elf_acom_section.name == NULL)
6063         {
6064           /* Initialize the acommon section.  */
6065           mips_elf_acom_section.name = ".acommon";
6066           mips_elf_acom_section.flags = SEC_ALLOC;
6067           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6068           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6069           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6070           mips_elf_acom_symbol.name = ".acommon";
6071           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6072           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6073           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6074         }
6075       asym->section = &mips_elf_acom_section;
6076       break;
6077
6078     case SHN_COMMON:
6079       /* Common symbols less than the GP size are automatically
6080          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6081       if (asym->value > elf_gp_size (abfd)
6082           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6083           || IRIX_COMPAT (abfd) == ict_irix6)
6084         break;
6085       /* Fall through.  */
6086     case SHN_MIPS_SCOMMON:
6087       if (mips_elf_scom_section.name == NULL)
6088         {
6089           /* Initialize the small common section.  */
6090           mips_elf_scom_section.name = ".scommon";
6091           mips_elf_scom_section.flags = SEC_IS_COMMON;
6092           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6093           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6094           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6095           mips_elf_scom_symbol.name = ".scommon";
6096           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6097           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6098           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6099         }
6100       asym->section = &mips_elf_scom_section;
6101       asym->value = elfsym->internal_elf_sym.st_size;
6102       break;
6103
6104     case SHN_MIPS_SUNDEFINED:
6105       asym->section = bfd_und_section_ptr;
6106       break;
6107
6108     case SHN_MIPS_TEXT:
6109       {
6110         asection *section = bfd_get_section_by_name (abfd, ".text");
6111
6112         BFD_ASSERT (SGI_COMPAT (abfd));
6113         if (section != NULL)
6114           {
6115             asym->section = section;
6116             /* MIPS_TEXT is a bit special, the address is not an offset
6117                to the base of the .text section.  So substract the section
6118                base address to make it an offset.  */
6119             asym->value -= section->vma;
6120           }
6121       }
6122       break;
6123
6124     case SHN_MIPS_DATA:
6125       {
6126         asection *section = bfd_get_section_by_name (abfd, ".data");
6127
6128         BFD_ASSERT (SGI_COMPAT (abfd));
6129         if (section != NULL)
6130           {
6131             asym->section = section;
6132             /* MIPS_DATA is a bit special, the address is not an offset
6133                to the base of the .data section.  So substract the section
6134                base address to make it an offset.  */
6135             asym->value -= section->vma;
6136           }
6137       }
6138       break;
6139     }
6140
6141   /* If this is an odd-valued function symbol, assume it's a MIPS16 one.  */
6142   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6143       && (asym->value & 1) != 0)
6144     {
6145       asym->value--;
6146       elfsym->internal_elf_sym.st_other
6147         = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6148     }
6149 }
6150 \f
6151 /* Implement elf_backend_eh_frame_address_size.  This differs from
6152    the default in the way it handles EABI64.
6153
6154    EABI64 was originally specified as an LP64 ABI, and that is what
6155    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6156    historically accepted the combination of -mabi=eabi and -mlong32,
6157    and this ILP32 variation has become semi-official over time.
6158    Both forms use elf32 and have pointer-sized FDE addresses.
6159
6160    If an EABI object was generated by GCC 4.0 or above, it will have
6161    an empty .gcc_compiled_longXX section, where XX is the size of longs
6162    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6163    have no special marking to distinguish them from LP64 objects.
6164
6165    We don't want users of the official LP64 ABI to be punished for the
6166    existence of the ILP32 variant, but at the same time, we don't want
6167    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6168    We therefore take the following approach:
6169
6170       - If ABFD contains a .gcc_compiled_longXX section, use it to
6171         determine the pointer size.
6172
6173       - Otherwise check the type of the first relocation.  Assume that
6174         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6175
6176       - Otherwise punt.
6177
6178    The second check is enough to detect LP64 objects generated by pre-4.0
6179    compilers because, in the kind of output generated by those compilers,
6180    the first relocation will be associated with either a CIE personality
6181    routine or an FDE start address.  Furthermore, the compilers never
6182    used a special (non-pointer) encoding for this ABI.
6183
6184    Checking the relocation type should also be safe because there is no
6185    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6186    did so.  */
6187
6188 unsigned int
6189 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6190 {
6191   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6192     return 8;
6193   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6194     {
6195       bfd_boolean long32_p, long64_p;
6196
6197       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6198       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6199       if (long32_p && long64_p)
6200         return 0;
6201       if (long32_p)
6202         return 4;
6203       if (long64_p)
6204         return 8;
6205
6206       if (sec->reloc_count > 0
6207           && elf_section_data (sec)->relocs != NULL
6208           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6209               == R_MIPS_64))
6210         return 8;
6211
6212       return 0;
6213     }
6214   return 4;
6215 }
6216 \f
6217 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6218    relocations against two unnamed section symbols to resolve to the
6219    same address.  For example, if we have code like:
6220
6221         lw      $4,%got_disp(.data)($gp)
6222         lw      $25,%got_disp(.text)($gp)
6223         jalr    $25
6224
6225    then the linker will resolve both relocations to .data and the program
6226    will jump there rather than to .text.
6227
6228    We can work around this problem by giving names to local section symbols.
6229    This is also what the MIPSpro tools do.  */
6230
6231 bfd_boolean
6232 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6233 {
6234   return SGI_COMPAT (abfd);
6235 }
6236 \f
6237 /* Work over a section just before writing it out.  This routine is
6238    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6239    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6240    a better way.  */
6241
6242 bfd_boolean
6243 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6244 {
6245   if (hdr->sh_type == SHT_MIPS_REGINFO
6246       && hdr->sh_size > 0)
6247     {
6248       bfd_byte buf[4];
6249
6250       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6251       BFD_ASSERT (hdr->contents == NULL);
6252
6253       if (bfd_seek (abfd,
6254                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6255                     SEEK_SET) != 0)
6256         return FALSE;
6257       H_PUT_32 (abfd, elf_gp (abfd), buf);
6258       if (bfd_bwrite (buf, 4, abfd) != 4)
6259         return FALSE;
6260     }
6261
6262   if (hdr->sh_type == SHT_MIPS_OPTIONS
6263       && hdr->bfd_section != NULL
6264       && mips_elf_section_data (hdr->bfd_section) != NULL
6265       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6266     {
6267       bfd_byte *contents, *l, *lend;
6268
6269       /* We stored the section contents in the tdata field in the
6270          set_section_contents routine.  We save the section contents
6271          so that we don't have to read them again.
6272          At this point we know that elf_gp is set, so we can look
6273          through the section contents to see if there is an
6274          ODK_REGINFO structure.  */
6275
6276       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6277       l = contents;
6278       lend = contents + hdr->sh_size;
6279       while (l + sizeof (Elf_External_Options) <= lend)
6280         {
6281           Elf_Internal_Options intopt;
6282
6283           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6284                                         &intopt);
6285           if (intopt.size < sizeof (Elf_External_Options))
6286             {
6287               (*_bfd_error_handler)
6288                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6289                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6290               break;
6291             }
6292           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6293             {
6294               bfd_byte buf[8];
6295
6296               if (bfd_seek (abfd,
6297                             (hdr->sh_offset
6298                              + (l - contents)
6299                              + sizeof (Elf_External_Options)
6300                              + (sizeof (Elf64_External_RegInfo) - 8)),
6301                              SEEK_SET) != 0)
6302                 return FALSE;
6303               H_PUT_64 (abfd, elf_gp (abfd), buf);
6304               if (bfd_bwrite (buf, 8, abfd) != 8)
6305                 return FALSE;
6306             }
6307           else if (intopt.kind == ODK_REGINFO)
6308             {
6309               bfd_byte buf[4];
6310
6311               if (bfd_seek (abfd,
6312                             (hdr->sh_offset
6313                              + (l - contents)
6314                              + sizeof (Elf_External_Options)
6315                              + (sizeof (Elf32_External_RegInfo) - 4)),
6316                             SEEK_SET) != 0)
6317                 return FALSE;
6318               H_PUT_32 (abfd, elf_gp (abfd), buf);
6319               if (bfd_bwrite (buf, 4, abfd) != 4)
6320                 return FALSE;
6321             }
6322           l += intopt.size;
6323         }
6324     }
6325
6326   if (hdr->bfd_section != NULL)
6327     {
6328       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6329
6330       /* .sbss is not handled specially here because the GNU/Linux
6331          prelinker can convert .sbss from NOBITS to PROGBITS and
6332          changing it back to NOBITS breaks the binary.  The entry in
6333          _bfd_mips_elf_special_sections will ensure the correct flags
6334          are set on .sbss if BFD creates it without reading it from an
6335          input file, and without special handling here the flags set
6336          on it in an input file will be followed.  */
6337       if (strcmp (name, ".sdata") == 0
6338           || strcmp (name, ".lit8") == 0
6339           || strcmp (name, ".lit4") == 0)
6340         {
6341           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6342           hdr->sh_type = SHT_PROGBITS;
6343         }
6344       else if (strcmp (name, ".srdata") == 0)
6345         {
6346           hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6347           hdr->sh_type = SHT_PROGBITS;
6348         }
6349       else if (strcmp (name, ".compact_rel") == 0)
6350         {
6351           hdr->sh_flags = 0;
6352           hdr->sh_type = SHT_PROGBITS;
6353         }
6354       else if (strcmp (name, ".rtproc") == 0)
6355         {
6356           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6357             {
6358               unsigned int adjust;
6359
6360               adjust = hdr->sh_size % hdr->sh_addralign;
6361               if (adjust != 0)
6362                 hdr->sh_size += hdr->sh_addralign - adjust;
6363             }
6364         }
6365     }
6366
6367   return TRUE;
6368 }
6369
6370 /* Handle a MIPS specific section when reading an object file.  This
6371    is called when elfcode.h finds a section with an unknown type.
6372    This routine supports both the 32-bit and 64-bit ELF ABI.
6373
6374    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6375    how to.  */
6376
6377 bfd_boolean
6378 _bfd_mips_elf_section_from_shdr (bfd *abfd,
6379                                  Elf_Internal_Shdr *hdr,
6380                                  const char *name,
6381                                  int shindex)
6382 {
6383   flagword flags = 0;
6384
6385   /* There ought to be a place to keep ELF backend specific flags, but
6386      at the moment there isn't one.  We just keep track of the
6387      sections by their name, instead.  Fortunately, the ABI gives
6388      suggested names for all the MIPS specific sections, so we will
6389      probably get away with this.  */
6390   switch (hdr->sh_type)
6391     {
6392     case SHT_MIPS_LIBLIST:
6393       if (strcmp (name, ".liblist") != 0)
6394         return FALSE;
6395       break;
6396     case SHT_MIPS_MSYM:
6397       if (strcmp (name, ".msym") != 0)
6398         return FALSE;
6399       break;
6400     case SHT_MIPS_CONFLICT:
6401       if (strcmp (name, ".conflict") != 0)
6402         return FALSE;
6403       break;
6404     case SHT_MIPS_GPTAB:
6405       if (! CONST_STRNEQ (name, ".gptab."))
6406         return FALSE;
6407       break;
6408     case SHT_MIPS_UCODE:
6409       if (strcmp (name, ".ucode") != 0)
6410         return FALSE;
6411       break;
6412     case SHT_MIPS_DEBUG:
6413       if (strcmp (name, ".mdebug") != 0)
6414         return FALSE;
6415       flags = SEC_DEBUGGING;
6416       break;
6417     case SHT_MIPS_REGINFO:
6418       if (strcmp (name, ".reginfo") != 0
6419           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
6420         return FALSE;
6421       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6422       break;
6423     case SHT_MIPS_IFACE:
6424       if (strcmp (name, ".MIPS.interfaces") != 0)
6425         return FALSE;
6426       break;
6427     case SHT_MIPS_CONTENT:
6428       if (! CONST_STRNEQ (name, ".MIPS.content"))
6429         return FALSE;
6430       break;
6431     case SHT_MIPS_OPTIONS:
6432       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6433         return FALSE;
6434       break;
6435     case SHT_MIPS_DWARF:
6436       if (! CONST_STRNEQ (name, ".debug_")
6437           && ! CONST_STRNEQ (name, ".zdebug_"))
6438         return FALSE;
6439       break;
6440     case SHT_MIPS_SYMBOL_LIB:
6441       if (strcmp (name, ".MIPS.symlib") != 0)
6442         return FALSE;
6443       break;
6444     case SHT_MIPS_EVENTS:
6445       if (! CONST_STRNEQ (name, ".MIPS.events")
6446           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
6447         return FALSE;
6448       break;
6449     default:
6450       break;
6451     }
6452
6453   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
6454     return FALSE;
6455
6456   if (flags)
6457     {
6458       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6459                                    (bfd_get_section_flags (abfd,
6460                                                            hdr->bfd_section)
6461                                     | flags)))
6462         return FALSE;
6463     }
6464
6465   /* FIXME: We should record sh_info for a .gptab section.  */
6466
6467   /* For a .reginfo section, set the gp value in the tdata information
6468      from the contents of this section.  We need the gp value while
6469      processing relocs, so we just get it now.  The .reginfo section
6470      is not used in the 64-bit MIPS ELF ABI.  */
6471   if (hdr->sh_type == SHT_MIPS_REGINFO)
6472     {
6473       Elf32_External_RegInfo ext;
6474       Elf32_RegInfo s;
6475
6476       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6477                                       &ext, 0, sizeof ext))
6478         return FALSE;
6479       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6480       elf_gp (abfd) = s.ri_gp_value;
6481     }
6482
6483   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6484      set the gp value based on what we find.  We may see both
6485      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6486      they should agree.  */
6487   if (hdr->sh_type == SHT_MIPS_OPTIONS)
6488     {
6489       bfd_byte *contents, *l, *lend;
6490
6491       contents = bfd_malloc (hdr->sh_size);
6492       if (contents == NULL)
6493         return FALSE;
6494       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
6495                                       0, hdr->sh_size))
6496         {
6497           free (contents);
6498           return FALSE;
6499         }
6500       l = contents;
6501       lend = contents + hdr->sh_size;
6502       while (l + sizeof (Elf_External_Options) <= lend)
6503         {
6504           Elf_Internal_Options intopt;
6505
6506           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6507                                         &intopt);
6508           if (intopt.size < sizeof (Elf_External_Options))
6509             {
6510               (*_bfd_error_handler)
6511                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6512                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6513               break;
6514             }
6515           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6516             {
6517               Elf64_Internal_RegInfo intreg;
6518
6519               bfd_mips_elf64_swap_reginfo_in
6520                 (abfd,
6521                  ((Elf64_External_RegInfo *)
6522                   (l + sizeof (Elf_External_Options))),
6523                  &intreg);
6524               elf_gp (abfd) = intreg.ri_gp_value;
6525             }
6526           else if (intopt.kind == ODK_REGINFO)
6527             {
6528               Elf32_RegInfo intreg;
6529
6530               bfd_mips_elf32_swap_reginfo_in
6531                 (abfd,
6532                  ((Elf32_External_RegInfo *)
6533                   (l + sizeof (Elf_External_Options))),
6534                  &intreg);
6535               elf_gp (abfd) = intreg.ri_gp_value;
6536             }
6537           l += intopt.size;
6538         }
6539       free (contents);
6540     }
6541
6542   return TRUE;
6543 }
6544
6545 /* Set the correct type for a MIPS ELF section.  We do this by the
6546    section name, which is a hack, but ought to work.  This routine is
6547    used by both the 32-bit and the 64-bit ABI.  */
6548
6549 bfd_boolean
6550 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
6551 {
6552   const char *name = bfd_get_section_name (abfd, sec);
6553
6554   if (strcmp (name, ".liblist") == 0)
6555     {
6556       hdr->sh_type = SHT_MIPS_LIBLIST;
6557       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
6558       /* The sh_link field is set in final_write_processing.  */
6559     }
6560   else if (strcmp (name, ".conflict") == 0)
6561     hdr->sh_type = SHT_MIPS_CONFLICT;
6562   else if (CONST_STRNEQ (name, ".gptab."))
6563     {
6564       hdr->sh_type = SHT_MIPS_GPTAB;
6565       hdr->sh_entsize = sizeof (Elf32_External_gptab);
6566       /* The sh_info field is set in final_write_processing.  */
6567     }
6568   else if (strcmp (name, ".ucode") == 0)
6569     hdr->sh_type = SHT_MIPS_UCODE;
6570   else if (strcmp (name, ".mdebug") == 0)
6571     {
6572       hdr->sh_type = SHT_MIPS_DEBUG;
6573       /* In a shared object on IRIX 5.3, the .mdebug section has an
6574          entsize of 0.  FIXME: Does this matter?  */
6575       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6576         hdr->sh_entsize = 0;
6577       else
6578         hdr->sh_entsize = 1;
6579     }
6580   else if (strcmp (name, ".reginfo") == 0)
6581     {
6582       hdr->sh_type = SHT_MIPS_REGINFO;
6583       /* In a shared object on IRIX 5.3, the .reginfo section has an
6584          entsize of 0x18.  FIXME: Does this matter?  */
6585       if (SGI_COMPAT (abfd))
6586         {
6587           if ((abfd->flags & DYNAMIC) != 0)
6588             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6589           else
6590             hdr->sh_entsize = 1;
6591         }
6592       else
6593         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6594     }
6595   else if (SGI_COMPAT (abfd)
6596            && (strcmp (name, ".hash") == 0
6597                || strcmp (name, ".dynamic") == 0
6598                || strcmp (name, ".dynstr") == 0))
6599     {
6600       if (SGI_COMPAT (abfd))
6601         hdr->sh_entsize = 0;
6602 #if 0
6603       /* This isn't how the IRIX6 linker behaves.  */
6604       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6605 #endif
6606     }
6607   else if (strcmp (name, ".got") == 0
6608            || strcmp (name, ".srdata") == 0
6609            || strcmp (name, ".sdata") == 0
6610            || strcmp (name, ".sbss") == 0
6611            || strcmp (name, ".lit4") == 0
6612            || strcmp (name, ".lit8") == 0)
6613     hdr->sh_flags |= SHF_MIPS_GPREL;
6614   else if (strcmp (name, ".MIPS.interfaces") == 0)
6615     {
6616       hdr->sh_type = SHT_MIPS_IFACE;
6617       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6618     }
6619   else if (CONST_STRNEQ (name, ".MIPS.content"))
6620     {
6621       hdr->sh_type = SHT_MIPS_CONTENT;
6622       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6623       /* The sh_info field is set in final_write_processing.  */
6624     }
6625   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6626     {
6627       hdr->sh_type = SHT_MIPS_OPTIONS;
6628       hdr->sh_entsize = 1;
6629       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6630     }
6631   else if (CONST_STRNEQ (name, ".debug_")
6632            || CONST_STRNEQ (name, ".zdebug_"))
6633     {
6634       hdr->sh_type = SHT_MIPS_DWARF;
6635
6636       /* Irix facilities such as libexc expect a single .debug_frame
6637          per executable, the system ones have NOSTRIP set and the linker
6638          doesn't merge sections with different flags so ...  */
6639       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
6640         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6641     }
6642   else if (strcmp (name, ".MIPS.symlib") == 0)
6643     {
6644       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
6645       /* The sh_link and sh_info fields are set in
6646          final_write_processing.  */
6647     }
6648   else if (CONST_STRNEQ (name, ".MIPS.events")
6649            || CONST_STRNEQ (name, ".MIPS.post_rel"))
6650     {
6651       hdr->sh_type = SHT_MIPS_EVENTS;
6652       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6653       /* The sh_link field is set in final_write_processing.  */
6654     }
6655   else if (strcmp (name, ".msym") == 0)
6656     {
6657       hdr->sh_type = SHT_MIPS_MSYM;
6658       hdr->sh_flags |= SHF_ALLOC;
6659       hdr->sh_entsize = 8;
6660     }
6661
6662   /* The generic elf_fake_sections will set up REL_HDR using the default
6663    kind of relocations.  We used to set up a second header for the
6664    non-default kind of relocations here, but only NewABI would use
6665    these, and the IRIX ld doesn't like resulting empty RELA sections.
6666    Thus we create those header only on demand now.  */
6667
6668   return TRUE;
6669 }
6670
6671 /* Given a BFD section, try to locate the corresponding ELF section
6672    index.  This is used by both the 32-bit and the 64-bit ABI.
6673    Actually, it's not clear to me that the 64-bit ABI supports these,
6674    but for non-PIC objects we will certainly want support for at least
6675    the .scommon section.  */
6676
6677 bfd_boolean
6678 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
6679                                         asection *sec, int *retval)
6680 {
6681   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
6682     {
6683       *retval = SHN_MIPS_SCOMMON;
6684       return TRUE;
6685     }
6686   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
6687     {
6688       *retval = SHN_MIPS_ACOMMON;
6689       return TRUE;
6690     }
6691   return FALSE;
6692 }
6693 \f
6694 /* Hook called by the linker routine which adds symbols from an object
6695    file.  We must handle the special MIPS section numbers here.  */
6696
6697 bfd_boolean
6698 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
6699                                Elf_Internal_Sym *sym, const char **namep,
6700                                flagword *flagsp ATTRIBUTE_UNUSED,
6701                                asection **secp, bfd_vma *valp)
6702 {
6703   if (SGI_COMPAT (abfd)
6704       && (abfd->flags & DYNAMIC) != 0
6705       && strcmp (*namep, "_rld_new_interface") == 0)
6706     {
6707       /* Skip IRIX5 rld entry name.  */
6708       *namep = NULL;
6709       return TRUE;
6710     }
6711
6712   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
6713      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
6714      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
6715      a magic symbol resolved by the linker, we ignore this bogus definition
6716      of _gp_disp.  New ABI objects do not suffer from this problem so this
6717      is not done for them. */
6718   if (!NEWABI_P(abfd)
6719       && (sym->st_shndx == SHN_ABS)
6720       && (strcmp (*namep, "_gp_disp") == 0))
6721     {
6722       *namep = NULL;
6723       return TRUE;
6724     }
6725
6726   switch (sym->st_shndx)
6727     {
6728     case SHN_COMMON:
6729       /* Common symbols less than the GP size are automatically
6730          treated as SHN_MIPS_SCOMMON symbols.  */
6731       if (sym->st_size > elf_gp_size (abfd)
6732           || ELF_ST_TYPE (sym->st_info) == STT_TLS
6733           || IRIX_COMPAT (abfd) == ict_irix6)
6734         break;
6735       /* Fall through.  */
6736     case SHN_MIPS_SCOMMON:
6737       *secp = bfd_make_section_old_way (abfd, ".scommon");
6738       (*secp)->flags |= SEC_IS_COMMON;
6739       *valp = sym->st_size;
6740       break;
6741
6742     case SHN_MIPS_TEXT:
6743       /* This section is used in a shared object.  */
6744       if (elf_tdata (abfd)->elf_text_section == NULL)
6745         {
6746           asymbol *elf_text_symbol;
6747           asection *elf_text_section;
6748           bfd_size_type amt = sizeof (asection);
6749
6750           elf_text_section = bfd_zalloc (abfd, amt);
6751           if (elf_text_section == NULL)
6752             return FALSE;
6753
6754           amt = sizeof (asymbol);
6755           elf_text_symbol = bfd_zalloc (abfd, amt);
6756           if (elf_text_symbol == NULL)
6757             return FALSE;
6758
6759           /* Initialize the section.  */
6760
6761           elf_tdata (abfd)->elf_text_section = elf_text_section;
6762           elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
6763
6764           elf_text_section->symbol = elf_text_symbol;
6765           elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
6766
6767           elf_text_section->name = ".text";
6768           elf_text_section->flags = SEC_NO_FLAGS;
6769           elf_text_section->output_section = NULL;
6770           elf_text_section->owner = abfd;
6771           elf_text_symbol->name = ".text";
6772           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
6773           elf_text_symbol->section = elf_text_section;
6774         }
6775       /* This code used to do *secp = bfd_und_section_ptr if
6776          info->shared.  I don't know why, and that doesn't make sense,
6777          so I took it out.  */
6778       *secp = elf_tdata (abfd)->elf_text_section;
6779       break;
6780
6781     case SHN_MIPS_ACOMMON:
6782       /* Fall through. XXX Can we treat this as allocated data?  */
6783     case SHN_MIPS_DATA:
6784       /* This section is used in a shared object.  */
6785       if (elf_tdata (abfd)->elf_data_section == NULL)
6786         {
6787           asymbol *elf_data_symbol;
6788           asection *elf_data_section;
6789           bfd_size_type amt = sizeof (asection);
6790
6791           elf_data_section = bfd_zalloc (abfd, amt);
6792           if (elf_data_section == NULL)
6793             return FALSE;
6794
6795           amt = sizeof (asymbol);
6796           elf_data_symbol = bfd_zalloc (abfd, amt);
6797           if (elf_data_symbol == NULL)
6798             return FALSE;
6799
6800           /* Initialize the section.  */
6801
6802           elf_tdata (abfd)->elf_data_section = elf_data_section;
6803           elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
6804
6805           elf_data_section->symbol = elf_data_symbol;
6806           elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
6807
6808           elf_data_section->name = ".data";
6809           elf_data_section->flags = SEC_NO_FLAGS;
6810           elf_data_section->output_section = NULL;
6811           elf_data_section->owner = abfd;
6812           elf_data_symbol->name = ".data";
6813           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
6814           elf_data_symbol->section = elf_data_section;
6815         }
6816       /* This code used to do *secp = bfd_und_section_ptr if
6817          info->shared.  I don't know why, and that doesn't make sense,
6818          so I took it out.  */
6819       *secp = elf_tdata (abfd)->elf_data_section;
6820       break;
6821
6822     case SHN_MIPS_SUNDEFINED:
6823       *secp = bfd_und_section_ptr;
6824       break;
6825     }
6826
6827   if (SGI_COMPAT (abfd)
6828       && ! info->shared
6829       && info->output_bfd->xvec == abfd->xvec
6830       && strcmp (*namep, "__rld_obj_head") == 0)
6831     {
6832       struct elf_link_hash_entry *h;
6833       struct bfd_link_hash_entry *bh;
6834
6835       /* Mark __rld_obj_head as dynamic.  */
6836       bh = NULL;
6837       if (! (_bfd_generic_link_add_one_symbol
6838              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
6839               get_elf_backend_data (abfd)->collect, &bh)))
6840         return FALSE;
6841
6842       h = (struct elf_link_hash_entry *) bh;
6843       h->non_elf = 0;
6844       h->def_regular = 1;
6845       h->type = STT_OBJECT;
6846
6847       if (! bfd_elf_link_record_dynamic_symbol (info, h))
6848         return FALSE;
6849
6850       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
6851     }
6852
6853   /* If this is a mips16 text symbol, add 1 to the value to make it
6854      odd.  This will cause something like .word SYM to come up with
6855      the right value when it is loaded into the PC.  */
6856   if (ELF_ST_IS_MIPS16 (sym->st_other))
6857     ++*valp;
6858
6859   return TRUE;
6860 }
6861
6862 /* This hook function is called before the linker writes out a global
6863    symbol.  We mark symbols as small common if appropriate.  This is
6864    also where we undo the increment of the value for a mips16 symbol.  */
6865
6866 int
6867 _bfd_mips_elf_link_output_symbol_hook
6868   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
6869    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
6870    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
6871 {
6872   /* If we see a common symbol, which implies a relocatable link, then
6873      if a symbol was small common in an input file, mark it as small
6874      common in the output file.  */
6875   if (sym->st_shndx == SHN_COMMON
6876       && strcmp (input_sec->name, ".scommon") == 0)
6877     sym->st_shndx = SHN_MIPS_SCOMMON;
6878
6879   if (ELF_ST_IS_MIPS16 (sym->st_other))
6880     sym->st_value &= ~1;
6881
6882   return 1;
6883 }
6884 \f
6885 /* Functions for the dynamic linker.  */
6886
6887 /* Create dynamic sections when linking against a dynamic object.  */
6888
6889 bfd_boolean
6890 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
6891 {
6892   struct elf_link_hash_entry *h;
6893   struct bfd_link_hash_entry *bh;
6894   flagword flags;
6895   register asection *s;
6896   const char * const *namep;
6897   struct mips_elf_link_hash_table *htab;
6898
6899   htab = mips_elf_hash_table (info);
6900   BFD_ASSERT (htab != NULL);
6901
6902   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
6903            | SEC_LINKER_CREATED | SEC_READONLY);
6904
6905   /* The psABI requires a read-only .dynamic section, but the VxWorks
6906      EABI doesn't.  */
6907   if (!htab->is_vxworks)
6908     {
6909       s = bfd_get_section_by_name (abfd, ".dynamic");
6910       if (s != NULL)
6911         {
6912           if (! bfd_set_section_flags (abfd, s, flags))
6913             return FALSE;
6914         }
6915     }
6916
6917   /* We need to create .got section.  */
6918   if (!mips_elf_create_got_section (abfd, info))
6919     return FALSE;
6920
6921   if (! mips_elf_rel_dyn_section (info, TRUE))
6922     return FALSE;
6923
6924   /* Create .stub section.  */
6925   s = bfd_make_section_with_flags (abfd,
6926                                    MIPS_ELF_STUB_SECTION_NAME (abfd),
6927                                    flags | SEC_CODE);
6928   if (s == NULL
6929       || ! bfd_set_section_alignment (abfd, s,
6930                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
6931     return FALSE;
6932   htab->sstubs = s;
6933
6934   if ((IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none)
6935       && !info->shared
6936       && bfd_get_section_by_name (abfd, ".rld_map") == NULL)
6937     {
6938       s = bfd_make_section_with_flags (abfd, ".rld_map",
6939                                        flags &~ (flagword) SEC_READONLY);
6940       if (s == NULL
6941           || ! bfd_set_section_alignment (abfd, s,
6942                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
6943         return FALSE;
6944     }
6945
6946   /* On IRIX5, we adjust add some additional symbols and change the
6947      alignments of several sections.  There is no ABI documentation
6948      indicating that this is necessary on IRIX6, nor any evidence that
6949      the linker takes such action.  */
6950   if (IRIX_COMPAT (abfd) == ict_irix5)
6951     {
6952       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
6953         {
6954           bh = NULL;
6955           if (! (_bfd_generic_link_add_one_symbol
6956                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
6957                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
6958             return FALSE;
6959
6960           h = (struct elf_link_hash_entry *) bh;
6961           h->non_elf = 0;
6962           h->def_regular = 1;
6963           h->type = STT_SECTION;
6964
6965           if (! bfd_elf_link_record_dynamic_symbol (info, h))
6966             return FALSE;
6967         }
6968
6969       /* We need to create a .compact_rel section.  */
6970       if (SGI_COMPAT (abfd))
6971         {
6972           if (!mips_elf_create_compact_rel_section (abfd, info))
6973             return FALSE;
6974         }
6975
6976       /* Change alignments of some sections.  */
6977       s = bfd_get_section_by_name (abfd, ".hash");
6978       if (s != NULL)
6979         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
6980       s = bfd_get_section_by_name (abfd, ".dynsym");
6981       if (s != NULL)
6982         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
6983       s = bfd_get_section_by_name (abfd, ".dynstr");
6984       if (s != NULL)
6985         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
6986       s = bfd_get_section_by_name (abfd, ".reginfo");
6987       if (s != NULL)
6988         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
6989       s = bfd_get_section_by_name (abfd, ".dynamic");
6990       if (s != NULL)
6991         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
6992     }
6993
6994   if (!info->shared)
6995     {
6996       const char *name;
6997
6998       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
6999       bh = NULL;
7000       if (!(_bfd_generic_link_add_one_symbol
7001             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7002              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7003         return FALSE;
7004
7005       h = (struct elf_link_hash_entry *) bh;
7006       h->non_elf = 0;
7007       h->def_regular = 1;
7008       h->type = STT_SECTION;
7009
7010       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7011         return FALSE;
7012
7013       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7014         {
7015           /* __rld_map is a four byte word located in the .data section
7016              and is filled in by the rtld to contain a pointer to
7017              the _r_debug structure. Its symbol value will be set in
7018              _bfd_mips_elf_finish_dynamic_symbol.  */
7019           s = bfd_get_section_by_name (abfd, ".rld_map");
7020           BFD_ASSERT (s != NULL);
7021
7022           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7023           bh = NULL;
7024           if (!(_bfd_generic_link_add_one_symbol
7025                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7026                  get_elf_backend_data (abfd)->collect, &bh)))
7027             return FALSE;
7028
7029           h = (struct elf_link_hash_entry *) bh;
7030           h->non_elf = 0;
7031           h->def_regular = 1;
7032           h->type = STT_OBJECT;
7033
7034           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7035             return FALSE;
7036         }
7037     }
7038
7039   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7040      Also create the _PROCEDURE_LINKAGE_TABLE symbol.  */
7041   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7042     return FALSE;
7043
7044   /* Cache the sections created above.  */
7045   htab->splt = bfd_get_section_by_name (abfd, ".plt");
7046   htab->sdynbss = bfd_get_section_by_name (abfd, ".dynbss");
7047   if (htab->is_vxworks)
7048     {
7049       htab->srelbss = bfd_get_section_by_name (abfd, ".rela.bss");
7050       htab->srelplt = bfd_get_section_by_name (abfd, ".rela.plt");
7051     }
7052   else
7053     htab->srelplt = bfd_get_section_by_name (abfd, ".rel.plt");
7054   if (!htab->sdynbss
7055       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7056       || !htab->srelplt
7057       || !htab->splt)
7058     abort ();
7059
7060   if (htab->is_vxworks)
7061     {
7062       /* Do the usual VxWorks handling.  */
7063       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7064         return FALSE;
7065
7066       /* Work out the PLT sizes.  */
7067       if (info->shared)
7068         {
7069           htab->plt_header_size
7070             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7071           htab->plt_entry_size
7072             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7073         }
7074       else
7075         {
7076           htab->plt_header_size
7077             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7078           htab->plt_entry_size
7079             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7080         }
7081     }
7082   else if (!info->shared)
7083     {
7084       /* All variants of the plt0 entry are the same size.  */
7085       htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7086       htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7087     }
7088
7089   return TRUE;
7090 }
7091 \f
7092 /* Return true if relocation REL against section SEC is a REL rather than
7093    RELA relocation.  RELOCS is the first relocation in the section and
7094    ABFD is the bfd that contains SEC.  */
7095
7096 static bfd_boolean
7097 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7098                            const Elf_Internal_Rela *relocs,
7099                            const Elf_Internal_Rela *rel)
7100 {
7101   Elf_Internal_Shdr *rel_hdr;
7102   const struct elf_backend_data *bed;
7103
7104   /* To determine which flavor of relocation this is, we depend on the
7105      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7106   rel_hdr = elf_section_data (sec)->rel.hdr;
7107   if (rel_hdr == NULL)
7108     return FALSE;
7109   bed = get_elf_backend_data (abfd);
7110   return ((size_t) (rel - relocs)
7111           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7112 }
7113
7114 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7115    HOWTO is the relocation's howto and CONTENTS points to the contents
7116    of the section that REL is against.  */
7117
7118 static bfd_vma
7119 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7120                           reloc_howto_type *howto, bfd_byte *contents)
7121 {
7122   bfd_byte *location;
7123   unsigned int r_type;
7124   bfd_vma addend;
7125
7126   r_type = ELF_R_TYPE (abfd, rel->r_info);
7127   location = contents + rel->r_offset;
7128
7129   /* Get the addend, which is stored in the input file.  */
7130   _bfd_mips16_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7131   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7132   _bfd_mips16_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7133
7134   return addend & howto->src_mask;
7135 }
7136
7137 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7138    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7139    and update *ADDEND with the final addend.  Return true on success
7140    or false if the LO16 could not be found.  RELEND is the exclusive
7141    upper bound on the relocations for REL's section.  */
7142
7143 static bfd_boolean
7144 mips_elf_add_lo16_rel_addend (bfd *abfd,
7145                               const Elf_Internal_Rela *rel,
7146                               const Elf_Internal_Rela *relend,
7147                               bfd_byte *contents, bfd_vma *addend)
7148 {
7149   unsigned int r_type, lo16_type;
7150   const Elf_Internal_Rela *lo16_relocation;
7151   reloc_howto_type *lo16_howto;
7152   bfd_vma l;
7153
7154   r_type = ELF_R_TYPE (abfd, rel->r_info);
7155   if (mips16_reloc_p (r_type))
7156     lo16_type = R_MIPS16_LO16;
7157   else
7158     lo16_type = R_MIPS_LO16;
7159
7160   /* The combined value is the sum of the HI16 addend, left-shifted by
7161      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7162      code does a `lui' of the HI16 value, and then an `addiu' of the
7163      LO16 value.)
7164
7165      Scan ahead to find a matching LO16 relocation.
7166
7167      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7168      be immediately following.  However, for the IRIX6 ABI, the next
7169      relocation may be a composed relocation consisting of several
7170      relocations for the same address.  In that case, the R_MIPS_LO16
7171      relocation may occur as one of these.  We permit a similar
7172      extension in general, as that is useful for GCC.
7173
7174      In some cases GCC dead code elimination removes the LO16 but keeps
7175      the corresponding HI16.  This is strictly speaking a violation of
7176      the ABI but not immediately harmful.  */
7177   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7178   if (lo16_relocation == NULL)
7179     return FALSE;
7180
7181   /* Obtain the addend kept there.  */
7182   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7183   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7184
7185   l <<= lo16_howto->rightshift;
7186   l = _bfd_mips_elf_sign_extend (l, 16);
7187
7188   *addend <<= 16;
7189   *addend += l;
7190   return TRUE;
7191 }
7192
7193 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7194    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7195    already holds the contents if it is nonull on entry.  */
7196
7197 static bfd_boolean
7198 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7199 {
7200   if (*contents)
7201     return TRUE;
7202
7203   /* Get cached copy if it exists.  */
7204   if (elf_section_data (sec)->this_hdr.contents != NULL)
7205     {
7206       *contents = elf_section_data (sec)->this_hdr.contents;
7207       return TRUE;
7208     }
7209
7210   return bfd_malloc_and_get_section (abfd, sec, contents);
7211 }
7212
7213 /* Look through the relocs for a section during the first phase, and
7214    allocate space in the global offset table.  */
7215
7216 bfd_boolean
7217 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7218                             asection *sec, const Elf_Internal_Rela *relocs)
7219 {
7220   const char *name;
7221   bfd *dynobj;
7222   Elf_Internal_Shdr *symtab_hdr;
7223   struct elf_link_hash_entry **sym_hashes;
7224   size_t extsymoff;
7225   const Elf_Internal_Rela *rel;
7226   const Elf_Internal_Rela *rel_end;
7227   asection *sreloc;
7228   const struct elf_backend_data *bed;
7229   struct mips_elf_link_hash_table *htab;
7230   bfd_byte *contents;
7231   bfd_vma addend;
7232   reloc_howto_type *howto;
7233
7234   if (info->relocatable)
7235     return TRUE;
7236
7237   htab = mips_elf_hash_table (info);
7238   BFD_ASSERT (htab != NULL);
7239
7240   dynobj = elf_hash_table (info)->dynobj;
7241   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7242   sym_hashes = elf_sym_hashes (abfd);
7243   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7244
7245   bed = get_elf_backend_data (abfd);
7246   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7247
7248   /* Check for the mips16 stub sections.  */
7249
7250   name = bfd_get_section_name (abfd, sec);
7251   if (FN_STUB_P (name))
7252     {
7253       unsigned long r_symndx;
7254
7255       /* Look at the relocation information to figure out which symbol
7256          this is for.  */
7257
7258       r_symndx = mips16_stub_symndx (sec, relocs, rel_end);
7259       if (r_symndx == 0)
7260         {
7261           (*_bfd_error_handler)
7262             (_("%B: Warning: cannot determine the target function for"
7263                " stub section `%s'"),
7264              abfd, name);
7265           bfd_set_error (bfd_error_bad_value);
7266           return FALSE;
7267         }
7268
7269       if (r_symndx < extsymoff
7270           || sym_hashes[r_symndx - extsymoff] == NULL)
7271         {
7272           asection *o;
7273
7274           /* This stub is for a local symbol.  This stub will only be
7275              needed if there is some relocation in this BFD, other
7276              than a 16 bit function call, which refers to this symbol.  */
7277           for (o = abfd->sections; o != NULL; o = o->next)
7278             {
7279               Elf_Internal_Rela *sec_relocs;
7280               const Elf_Internal_Rela *r, *rend;
7281
7282               /* We can ignore stub sections when looking for relocs.  */
7283               if ((o->flags & SEC_RELOC) == 0
7284                   || o->reloc_count == 0
7285                   || section_allows_mips16_refs_p (o))
7286                 continue;
7287
7288               sec_relocs
7289                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7290                                              info->keep_memory);
7291               if (sec_relocs == NULL)
7292                 return FALSE;
7293
7294               rend = sec_relocs + o->reloc_count;
7295               for (r = sec_relocs; r < rend; r++)
7296                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7297                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7298                   break;
7299
7300               if (elf_section_data (o)->relocs != sec_relocs)
7301                 free (sec_relocs);
7302
7303               if (r < rend)
7304                 break;
7305             }
7306
7307           if (o == NULL)
7308             {
7309               /* There is no non-call reloc for this stub, so we do
7310                  not need it.  Since this function is called before
7311                  the linker maps input sections to output sections, we
7312                  can easily discard it by setting the SEC_EXCLUDE
7313                  flag.  */
7314               sec->flags |= SEC_EXCLUDE;
7315               return TRUE;
7316             }
7317
7318           /* Record this stub in an array of local symbol stubs for
7319              this BFD.  */
7320           if (elf_tdata (abfd)->local_stubs == NULL)
7321             {
7322               unsigned long symcount;
7323               asection **n;
7324               bfd_size_type amt;
7325
7326               if (elf_bad_symtab (abfd))
7327                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7328               else
7329                 symcount = symtab_hdr->sh_info;
7330               amt = symcount * sizeof (asection *);
7331               n = bfd_zalloc (abfd, amt);
7332               if (n == NULL)
7333                 return FALSE;
7334               elf_tdata (abfd)->local_stubs = n;
7335             }
7336
7337           sec->flags |= SEC_KEEP;
7338           elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7339
7340           /* We don't need to set mips16_stubs_seen in this case.
7341              That flag is used to see whether we need to look through
7342              the global symbol table for stubs.  We don't need to set
7343              it here, because we just have a local stub.  */
7344         }
7345       else
7346         {
7347           struct mips_elf_link_hash_entry *h;
7348
7349           h = ((struct mips_elf_link_hash_entry *)
7350                sym_hashes[r_symndx - extsymoff]);
7351
7352           while (h->root.root.type == bfd_link_hash_indirect
7353                  || h->root.root.type == bfd_link_hash_warning)
7354             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7355
7356           /* H is the symbol this stub is for.  */
7357
7358           /* If we already have an appropriate stub for this function, we
7359              don't need another one, so we can discard this one.  Since
7360              this function is called before the linker maps input sections
7361              to output sections, we can easily discard it by setting the
7362              SEC_EXCLUDE flag.  */
7363           if (h->fn_stub != NULL)
7364             {
7365               sec->flags |= SEC_EXCLUDE;
7366               return TRUE;
7367             }
7368
7369           sec->flags |= SEC_KEEP;
7370           h->fn_stub = sec;
7371           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7372         }
7373     }
7374   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
7375     {
7376       unsigned long r_symndx;
7377       struct mips_elf_link_hash_entry *h;
7378       asection **loc;
7379
7380       /* Look at the relocation information to figure out which symbol
7381          this is for.  */
7382
7383       r_symndx = mips16_stub_symndx (sec, relocs, rel_end);
7384       if (r_symndx == 0)
7385         {
7386           (*_bfd_error_handler)
7387             (_("%B: Warning: cannot determine the target function for"
7388                " stub section `%s'"),
7389              abfd, name);
7390           bfd_set_error (bfd_error_bad_value);
7391           return FALSE;
7392         }
7393
7394       if (r_symndx < extsymoff
7395           || sym_hashes[r_symndx - extsymoff] == NULL)
7396         {
7397           asection *o;
7398
7399           /* This stub is for a local symbol.  This stub will only be
7400              needed if there is some relocation (R_MIPS16_26) in this BFD
7401              that refers to this symbol.  */
7402           for (o = abfd->sections; o != NULL; o = o->next)
7403             {
7404               Elf_Internal_Rela *sec_relocs;
7405               const Elf_Internal_Rela *r, *rend;
7406
7407               /* We can ignore stub sections when looking for relocs.  */
7408               if ((o->flags & SEC_RELOC) == 0
7409                   || o->reloc_count == 0
7410                   || section_allows_mips16_refs_p (o))
7411                 continue;
7412
7413               sec_relocs
7414                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7415                                              info->keep_memory);
7416               if (sec_relocs == NULL)
7417                 return FALSE;
7418
7419               rend = sec_relocs + o->reloc_count;
7420               for (r = sec_relocs; r < rend; r++)
7421                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7422                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7423                     break;
7424
7425               if (elf_section_data (o)->relocs != sec_relocs)
7426                 free (sec_relocs);
7427
7428               if (r < rend)
7429                 break;
7430             }
7431
7432           if (o == NULL)
7433             {
7434               /* There is no non-call reloc for this stub, so we do
7435                  not need it.  Since this function is called before
7436                  the linker maps input sections to output sections, we
7437                  can easily discard it by setting the SEC_EXCLUDE
7438                  flag.  */
7439               sec->flags |= SEC_EXCLUDE;
7440               return TRUE;
7441             }
7442
7443           /* Record this stub in an array of local symbol call_stubs for
7444              this BFD.  */
7445           if (elf_tdata (abfd)->local_call_stubs == NULL)
7446             {
7447               unsigned long symcount;
7448               asection **n;
7449               bfd_size_type amt;
7450
7451               if (elf_bad_symtab (abfd))
7452                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7453               else
7454                 symcount = symtab_hdr->sh_info;
7455               amt = symcount * sizeof (asection *);
7456               n = bfd_zalloc (abfd, amt);
7457               if (n == NULL)
7458                 return FALSE;
7459               elf_tdata (abfd)->local_call_stubs = n;
7460             }
7461
7462           sec->flags |= SEC_KEEP;
7463           elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
7464
7465           /* We don't need to set mips16_stubs_seen in this case.
7466              That flag is used to see whether we need to look through
7467              the global symbol table for stubs.  We don't need to set
7468              it here, because we just have a local stub.  */
7469         }
7470       else
7471         {
7472           h = ((struct mips_elf_link_hash_entry *)
7473                sym_hashes[r_symndx - extsymoff]);
7474           
7475           /* H is the symbol this stub is for.  */
7476           
7477           if (CALL_FP_STUB_P (name))
7478             loc = &h->call_fp_stub;
7479           else
7480             loc = &h->call_stub;
7481           
7482           /* If we already have an appropriate stub for this function, we
7483              don't need another one, so we can discard this one.  Since
7484              this function is called before the linker maps input sections
7485              to output sections, we can easily discard it by setting the
7486              SEC_EXCLUDE flag.  */
7487           if (*loc != NULL)
7488             {
7489               sec->flags |= SEC_EXCLUDE;
7490               return TRUE;
7491             }
7492
7493           sec->flags |= SEC_KEEP;
7494           *loc = sec;
7495           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7496         }
7497     }
7498
7499   sreloc = NULL;
7500   contents = NULL;
7501   for (rel = relocs; rel < rel_end; ++rel)
7502     {
7503       unsigned long r_symndx;
7504       unsigned int r_type;
7505       struct elf_link_hash_entry *h;
7506       bfd_boolean can_make_dynamic_p;
7507
7508       r_symndx = ELF_R_SYM (abfd, rel->r_info);
7509       r_type = ELF_R_TYPE (abfd, rel->r_info);
7510
7511       if (r_symndx < extsymoff)
7512         h = NULL;
7513       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7514         {
7515           (*_bfd_error_handler)
7516             (_("%B: Malformed reloc detected for section %s"),
7517              abfd, name);
7518           bfd_set_error (bfd_error_bad_value);
7519           return FALSE;
7520         }
7521       else
7522         {
7523           h = sym_hashes[r_symndx - extsymoff];
7524           while (h != NULL
7525                  && (h->root.type == bfd_link_hash_indirect
7526                      || h->root.type == bfd_link_hash_warning))
7527             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7528         }
7529
7530       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7531          relocation into a dynamic one.  */
7532       can_make_dynamic_p = FALSE;
7533       switch (r_type)
7534         {
7535         case R_MIPS16_GOT16:
7536         case R_MIPS16_CALL16:
7537         case R_MIPS_GOT16:
7538         case R_MIPS_CALL16:
7539         case R_MIPS_CALL_HI16:
7540         case R_MIPS_CALL_LO16:
7541         case R_MIPS_GOT_HI16:
7542         case R_MIPS_GOT_LO16:
7543         case R_MIPS_GOT_PAGE:
7544         case R_MIPS_GOT_OFST:
7545         case R_MIPS_GOT_DISP:
7546         case R_MIPS_TLS_GOTTPREL:
7547         case R_MIPS_TLS_GD:
7548         case R_MIPS_TLS_LDM:
7549           if (dynobj == NULL)
7550             elf_hash_table (info)->dynobj = dynobj = abfd;
7551           if (!mips_elf_create_got_section (dynobj, info))
7552             return FALSE;
7553           if (htab->is_vxworks && !info->shared)
7554             {
7555               (*_bfd_error_handler)
7556                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
7557                  abfd, (unsigned long) rel->r_offset);
7558               bfd_set_error (bfd_error_bad_value);
7559               return FALSE;
7560             }
7561           break;
7562
7563           /* This is just a hint; it can safely be ignored.  Don't set
7564              has_static_relocs for the corresponding symbol.  */
7565         case R_MIPS_JALR:
7566           break;
7567
7568         case R_MIPS_32:
7569         case R_MIPS_REL32:
7570         case R_MIPS_64:
7571           /* In VxWorks executables, references to external symbols
7572              must be handled using copy relocs or PLT entries; it is not
7573              possible to convert this relocation into a dynamic one.
7574
7575              For executables that use PLTs and copy-relocs, we have a
7576              choice between converting the relocation into a dynamic
7577              one or using copy relocations or PLT entries.  It is
7578              usually better to do the former, unless the relocation is
7579              against a read-only section.  */
7580           if ((info->shared
7581                || (h != NULL
7582                    && !htab->is_vxworks
7583                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7584                    && !(!info->nocopyreloc
7585                         && !PIC_OBJECT_P (abfd)
7586                         && MIPS_ELF_READONLY_SECTION (sec))))
7587               && (sec->flags & SEC_ALLOC) != 0)
7588             {
7589               can_make_dynamic_p = TRUE;
7590               if (dynobj == NULL)
7591                 elf_hash_table (info)->dynobj = dynobj = abfd;
7592               break;
7593             }
7594           /* For sections that are not SEC_ALLOC a copy reloc would be
7595              output if possible (implying questionable semantics for
7596              read-only data objects) or otherwise the final link would
7597              fail as ld.so will not process them and could not therefore
7598              handle any outstanding dynamic relocations.
7599
7600              For such sections that are also SEC_DEBUGGING, we can avoid
7601              these problems by simply ignoring any relocs as these
7602              sections have a predefined use and we know it is safe to do
7603              so.
7604
7605              This is needed in cases such as a global symbol definition
7606              in a shared library causing a common symbol from an object
7607              file to be converted to an undefined reference.  If that
7608              happens, then all the relocations against this symbol from
7609              SEC_DEBUGGING sections in the object file will resolve to
7610              nil.  */
7611           if ((sec->flags & SEC_DEBUGGING) != 0)
7612             break;
7613           /* Fall through.  */
7614
7615         default:
7616           /* Most static relocations require pointer equality, except
7617              for branches.  */
7618           if (h)
7619             h->pointer_equality_needed = TRUE;
7620           /* Fall through.  */
7621
7622         case R_MIPS_26:
7623         case R_MIPS_PC16:
7624         case R_MIPS16_26:
7625           if (h)
7626             ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
7627           break;
7628         }
7629
7630       if (h)
7631         {
7632           /* Relocations against the special VxWorks __GOTT_BASE__ and
7633              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
7634              room for them in .rela.dyn.  */
7635           if (is_gott_symbol (info, h))
7636             {
7637               if (sreloc == NULL)
7638                 {
7639                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
7640                   if (sreloc == NULL)
7641                     return FALSE;
7642                 }
7643               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
7644               if (MIPS_ELF_READONLY_SECTION (sec))
7645                 /* We tell the dynamic linker that there are
7646                    relocations against the text segment.  */
7647                 info->flags |= DF_TEXTREL;
7648             }
7649         }
7650       else if (r_type == R_MIPS_CALL_LO16
7651                || r_type == R_MIPS_GOT_LO16
7652                || r_type == R_MIPS_GOT_DISP
7653                || (got16_reloc_p (r_type) && htab->is_vxworks))
7654         {
7655           /* We may need a local GOT entry for this relocation.  We
7656              don't count R_MIPS_GOT_PAGE because we can estimate the
7657              maximum number of pages needed by looking at the size of
7658              the segment.  Similar comments apply to R_MIPS*_GOT16 and
7659              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
7660              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
7661              R_MIPS_CALL_HI16 because these are always followed by an
7662              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
7663           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
7664                                                  rel->r_addend, info, 0))
7665             return FALSE;
7666         }
7667
7668       if (h != NULL && mips_elf_relocation_needs_la25_stub (abfd, r_type))
7669         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
7670
7671       switch (r_type)
7672         {
7673         case R_MIPS_CALL16:
7674         case R_MIPS16_CALL16:
7675           if (h == NULL)
7676             {
7677               (*_bfd_error_handler)
7678                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
7679                  abfd, (unsigned long) rel->r_offset);
7680               bfd_set_error (bfd_error_bad_value);
7681               return FALSE;
7682             }
7683           /* Fall through.  */
7684
7685         case R_MIPS_CALL_HI16:
7686         case R_MIPS_CALL_LO16:
7687           if (h != NULL)
7688             {
7689               /* Make sure there is room in the regular GOT to hold the
7690                  function's address.  We may eliminate it in favour of
7691                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
7692               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE, 0))
7693                 return FALSE;
7694
7695               /* We need a stub, not a plt entry for the undefined
7696                  function.  But we record it as if it needs plt.  See
7697                  _bfd_elf_adjust_dynamic_symbol.  */
7698               h->needs_plt = 1;
7699               h->type = STT_FUNC;
7700             }
7701           break;
7702
7703         case R_MIPS_GOT_PAGE:
7704           /* If this is a global, overridable symbol, GOT_PAGE will
7705              decay to GOT_DISP, so we'll need a GOT entry for it.  */
7706           if (h)
7707             {
7708               struct mips_elf_link_hash_entry *hmips =
7709                 (struct mips_elf_link_hash_entry *) h;
7710
7711               /* This symbol is definitely not overridable.  */
7712               if (hmips->root.def_regular
7713                   && ! (info->shared && ! info->symbolic
7714                         && ! hmips->root.forced_local))
7715                 h = NULL;
7716             }
7717           /* Fall through.  */
7718
7719         case R_MIPS16_GOT16:
7720         case R_MIPS_GOT16:
7721         case R_MIPS_GOT_HI16:
7722         case R_MIPS_GOT_LO16:
7723           if (!h || r_type == R_MIPS_GOT_PAGE)
7724             {
7725               /* This relocation needs (or may need, if h != NULL) a
7726                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
7727                  know for sure until we know whether the symbol is
7728                  preemptible.  */
7729               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
7730                 {
7731                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
7732                     return FALSE;
7733                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
7734                   addend = mips_elf_read_rel_addend (abfd, rel,
7735                                                      howto, contents);
7736                   if (got16_reloc_p (r_type))
7737                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
7738                                                   contents, &addend);
7739                   else
7740                     addend <<= howto->rightshift;
7741                 }
7742               else
7743                 addend = rel->r_addend;
7744               if (!mips_elf_record_got_page_entry (info, abfd, r_symndx,
7745                                                    addend))
7746                 return FALSE;
7747             }
7748           /* Fall through.  */
7749
7750         case R_MIPS_GOT_DISP:
7751           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
7752                                                        FALSE, 0))
7753             return FALSE;
7754           break;
7755
7756         case R_MIPS_TLS_GOTTPREL:
7757           if (info->shared)
7758             info->flags |= DF_STATIC_TLS;
7759           /* Fall through */
7760
7761         case R_MIPS_TLS_LDM:
7762           if (r_type == R_MIPS_TLS_LDM)
7763             {
7764               r_symndx = STN_UNDEF;
7765               h = NULL;
7766             }
7767           /* Fall through */
7768
7769         case R_MIPS_TLS_GD:
7770           /* This symbol requires a global offset table entry, or two
7771              for TLS GD relocations.  */
7772           {
7773             unsigned char flag = (r_type == R_MIPS_TLS_GD
7774                                   ? GOT_TLS_GD
7775                                   : r_type == R_MIPS_TLS_LDM
7776                                   ? GOT_TLS_LDM
7777                                   : GOT_TLS_IE);
7778             if (h != NULL)
7779               {
7780                 struct mips_elf_link_hash_entry *hmips =
7781                   (struct mips_elf_link_hash_entry *) h;
7782                 hmips->tls_type |= flag;
7783
7784                 if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
7785                                                              FALSE, flag))
7786                   return FALSE;
7787               }
7788             else
7789               {
7790                 BFD_ASSERT (flag == GOT_TLS_LDM || r_symndx != STN_UNDEF);
7791
7792                 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
7793                                                        rel->r_addend,
7794                                                        info, flag))
7795                   return FALSE;
7796               }
7797           }
7798           break;
7799
7800         case R_MIPS_32:
7801         case R_MIPS_REL32:
7802         case R_MIPS_64:
7803           /* In VxWorks executables, references to external symbols
7804              are handled using copy relocs or PLT stubs, so there's
7805              no need to add a .rela.dyn entry for this relocation.  */
7806           if (can_make_dynamic_p)
7807             {
7808               if (sreloc == NULL)
7809                 {
7810                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
7811                   if (sreloc == NULL)
7812                     return FALSE;
7813                 }
7814               if (info->shared && h == NULL)
7815                 {
7816                   /* When creating a shared object, we must copy these
7817                      reloc types into the output file as R_MIPS_REL32
7818                      relocs.  Make room for this reloc in .rel(a).dyn.  */
7819                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
7820                   if (MIPS_ELF_READONLY_SECTION (sec))
7821                     /* We tell the dynamic linker that there are
7822                        relocations against the text segment.  */
7823                     info->flags |= DF_TEXTREL;
7824                 }
7825               else
7826                 {
7827                   struct mips_elf_link_hash_entry *hmips;
7828
7829                   /* For a shared object, we must copy this relocation
7830                      unless the symbol turns out to be undefined and
7831                      weak with non-default visibility, in which case
7832                      it will be left as zero.
7833
7834                      We could elide R_MIPS_REL32 for locally binding symbols
7835                      in shared libraries, but do not yet do so.
7836
7837                      For an executable, we only need to copy this
7838                      reloc if the symbol is defined in a dynamic
7839                      object.  */
7840                   hmips = (struct mips_elf_link_hash_entry *) h;
7841                   ++hmips->possibly_dynamic_relocs;
7842                   if (MIPS_ELF_READONLY_SECTION (sec))
7843                     /* We need it to tell the dynamic linker if there
7844                        are relocations against the text segment.  */
7845                     hmips->readonly_reloc = TRUE;
7846                 }
7847             }
7848
7849           if (SGI_COMPAT (abfd))
7850             mips_elf_hash_table (info)->compact_rel_size +=
7851               sizeof (Elf32_External_crinfo);
7852           break;
7853
7854         case R_MIPS_26:
7855         case R_MIPS_GPREL16:
7856         case R_MIPS_LITERAL:
7857         case R_MIPS_GPREL32:
7858           if (SGI_COMPAT (abfd))
7859             mips_elf_hash_table (info)->compact_rel_size +=
7860               sizeof (Elf32_External_crinfo);
7861           break;
7862
7863           /* This relocation describes the C++ object vtable hierarchy.
7864              Reconstruct it for later use during GC.  */
7865         case R_MIPS_GNU_VTINHERIT:
7866           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
7867             return FALSE;
7868           break;
7869
7870           /* This relocation describes which C++ vtable entries are actually
7871              used.  Record for later use during GC.  */
7872         case R_MIPS_GNU_VTENTRY:
7873           BFD_ASSERT (h != NULL);
7874           if (h != NULL
7875               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
7876             return FALSE;
7877           break;
7878
7879         default:
7880           break;
7881         }
7882
7883       /* We must not create a stub for a symbol that has relocations
7884          related to taking the function's address.  This doesn't apply to
7885          VxWorks, where CALL relocs refer to a .got.plt entry instead of
7886          a normal .got entry.  */
7887       if (!htab->is_vxworks && h != NULL)
7888         switch (r_type)
7889           {
7890           default:
7891             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
7892             break;
7893           case R_MIPS16_CALL16:
7894           case R_MIPS_CALL16:
7895           case R_MIPS_CALL_HI16:
7896           case R_MIPS_CALL_LO16:
7897           case R_MIPS_JALR:
7898             break;
7899           }
7900
7901       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
7902          if there is one.  We only need to handle global symbols here;
7903          we decide whether to keep or delete stubs for local symbols
7904          when processing the stub's relocations.  */
7905       if (h != NULL
7906           && !mips16_call_reloc_p (r_type)
7907           && !section_allows_mips16_refs_p (sec))
7908         {
7909           struct mips_elf_link_hash_entry *mh;
7910
7911           mh = (struct mips_elf_link_hash_entry *) h;
7912           mh->need_fn_stub = TRUE;
7913         }
7914
7915       /* Refuse some position-dependent relocations when creating a
7916          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
7917          not PIC, but we can create dynamic relocations and the result
7918          will be fine.  Also do not refuse R_MIPS_LO16, which can be
7919          combined with R_MIPS_GOT16.  */
7920       if (info->shared)
7921         {
7922           switch (r_type)
7923             {
7924             case R_MIPS16_HI16:
7925             case R_MIPS_HI16:
7926             case R_MIPS_HIGHER:
7927             case R_MIPS_HIGHEST:
7928               /* Don't refuse a high part relocation if it's against
7929                  no symbol (e.g. part of a compound relocation).  */
7930               if (r_symndx == STN_UNDEF)
7931                 break;
7932
7933               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
7934                  and has a special meaning.  */
7935               if (!NEWABI_P (abfd) && h != NULL
7936                   && strcmp (h->root.root.string, "_gp_disp") == 0)
7937                 break;
7938
7939               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
7940               if (is_gott_symbol (info, h))
7941                 break;
7942
7943               /* FALLTHROUGH */
7944
7945             case R_MIPS16_26:
7946             case R_MIPS_26:
7947               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
7948               (*_bfd_error_handler)
7949                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
7950                  abfd, howto->name,
7951                  (h) ? h->root.root.string : "a local symbol");
7952               bfd_set_error (bfd_error_bad_value);
7953               return FALSE;
7954             default:
7955               break;
7956             }
7957         }
7958     }
7959
7960   return TRUE;
7961 }
7962 \f
7963 bfd_boolean
7964 _bfd_mips_relax_section (bfd *abfd, asection *sec,
7965                          struct bfd_link_info *link_info,
7966                          bfd_boolean *again)
7967 {
7968   Elf_Internal_Rela *internal_relocs;
7969   Elf_Internal_Rela *irel, *irelend;
7970   Elf_Internal_Shdr *symtab_hdr;
7971   bfd_byte *contents = NULL;
7972   size_t extsymoff;
7973   bfd_boolean changed_contents = FALSE;
7974   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
7975   Elf_Internal_Sym *isymbuf = NULL;
7976
7977   /* We are not currently changing any sizes, so only one pass.  */
7978   *again = FALSE;
7979
7980   if (link_info->relocatable)
7981     return TRUE;
7982
7983   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
7984                                                link_info->keep_memory);
7985   if (internal_relocs == NULL)
7986     return TRUE;
7987
7988   irelend = internal_relocs + sec->reloc_count
7989     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
7990   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7991   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7992
7993   for (irel = internal_relocs; irel < irelend; irel++)
7994     {
7995       bfd_vma symval;
7996       bfd_signed_vma sym_offset;
7997       unsigned int r_type;
7998       unsigned long r_symndx;
7999       asection *sym_sec;
8000       unsigned long instruction;
8001
8002       /* Turn jalr into bgezal, and jr into beq, if they're marked
8003          with a JALR relocation, that indicate where they jump to.
8004          This saves some pipeline bubbles.  */
8005       r_type = ELF_R_TYPE (abfd, irel->r_info);
8006       if (r_type != R_MIPS_JALR)
8007         continue;
8008
8009       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8010       /* Compute the address of the jump target.  */
8011       if (r_symndx >= extsymoff)
8012         {
8013           struct mips_elf_link_hash_entry *h
8014             = ((struct mips_elf_link_hash_entry *)
8015                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8016
8017           while (h->root.root.type == bfd_link_hash_indirect
8018                  || h->root.root.type == bfd_link_hash_warning)
8019             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8020
8021           /* If a symbol is undefined, or if it may be overridden,
8022              skip it.  */
8023           if (! ((h->root.root.type == bfd_link_hash_defined
8024                   || h->root.root.type == bfd_link_hash_defweak)
8025                  && h->root.root.u.def.section)
8026               || (link_info->shared && ! link_info->symbolic
8027                   && !h->root.forced_local))
8028             continue;
8029
8030           sym_sec = h->root.root.u.def.section;
8031           if (sym_sec->output_section)
8032             symval = (h->root.root.u.def.value
8033                       + sym_sec->output_section->vma
8034                       + sym_sec->output_offset);
8035           else
8036             symval = h->root.root.u.def.value;
8037         }
8038       else
8039         {
8040           Elf_Internal_Sym *isym;
8041
8042           /* Read this BFD's symbols if we haven't done so already.  */
8043           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8044             {
8045               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8046               if (isymbuf == NULL)
8047                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8048                                                 symtab_hdr->sh_info, 0,
8049                                                 NULL, NULL, NULL);
8050               if (isymbuf == NULL)
8051                 goto relax_return;
8052             }
8053
8054           isym = isymbuf + r_symndx;
8055           if (isym->st_shndx == SHN_UNDEF)
8056             continue;
8057           else if (isym->st_shndx == SHN_ABS)
8058             sym_sec = bfd_abs_section_ptr;
8059           else if (isym->st_shndx == SHN_COMMON)
8060             sym_sec = bfd_com_section_ptr;
8061           else
8062             sym_sec
8063               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8064           symval = isym->st_value
8065             + sym_sec->output_section->vma
8066             + sym_sec->output_offset;
8067         }
8068
8069       /* Compute branch offset, from delay slot of the jump to the
8070          branch target.  */
8071       sym_offset = (symval + irel->r_addend)
8072         - (sec_start + irel->r_offset + 4);
8073
8074       /* Branch offset must be properly aligned.  */
8075       if ((sym_offset & 3) != 0)
8076         continue;
8077
8078       sym_offset >>= 2;
8079
8080       /* Check that it's in range.  */
8081       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8082         continue;
8083
8084       /* Get the section contents if we haven't done so already.  */
8085       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8086         goto relax_return;
8087
8088       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8089
8090       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8091       if ((instruction & 0xfc1fffff) == 0x0000f809)
8092         instruction = 0x04110000;
8093       /* If it was jr <reg>, turn it into b <target>.  */
8094       else if ((instruction & 0xfc1fffff) == 0x00000008)
8095         instruction = 0x10000000;
8096       else
8097         continue;
8098
8099       instruction |= (sym_offset & 0xffff);
8100       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8101       changed_contents = TRUE;
8102     }
8103
8104   if (contents != NULL
8105       && elf_section_data (sec)->this_hdr.contents != contents)
8106     {
8107       if (!changed_contents && !link_info->keep_memory)
8108         free (contents);
8109       else
8110         {
8111           /* Cache the section contents for elf_link_input_bfd.  */
8112           elf_section_data (sec)->this_hdr.contents = contents;
8113         }
8114     }
8115   return TRUE;
8116
8117  relax_return:
8118   if (contents != NULL
8119       && elf_section_data (sec)->this_hdr.contents != contents)
8120     free (contents);
8121   return FALSE;
8122 }
8123 \f
8124 /* Allocate space for global sym dynamic relocs.  */
8125
8126 static bfd_boolean
8127 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8128 {
8129   struct bfd_link_info *info = inf;
8130   bfd *dynobj;
8131   struct mips_elf_link_hash_entry *hmips;
8132   struct mips_elf_link_hash_table *htab;
8133
8134   htab = mips_elf_hash_table (info);
8135   BFD_ASSERT (htab != NULL);
8136
8137   dynobj = elf_hash_table (info)->dynobj;
8138   hmips = (struct mips_elf_link_hash_entry *) h;
8139
8140   /* VxWorks executables are handled elsewhere; we only need to
8141      allocate relocations in shared objects.  */
8142   if (htab->is_vxworks && !info->shared)
8143     return TRUE;
8144
8145   /* Ignore indirect and warning symbols.  All relocations against
8146      such symbols will be redirected to the target symbol.  */
8147   if (h->root.type == bfd_link_hash_indirect
8148       || h->root.type == bfd_link_hash_warning)
8149     return TRUE;
8150
8151   /* If this symbol is defined in a dynamic object, or we are creating
8152      a shared library, we will need to copy any R_MIPS_32 or
8153      R_MIPS_REL32 relocs against it into the output file.  */
8154   if (! info->relocatable
8155       && hmips->possibly_dynamic_relocs != 0
8156       && (h->root.type == bfd_link_hash_defweak
8157           || !h->def_regular
8158           || info->shared))
8159     {
8160       bfd_boolean do_copy = TRUE;
8161
8162       if (h->root.type == bfd_link_hash_undefweak)
8163         {
8164           /* Do not copy relocations for undefined weak symbols with
8165              non-default visibility.  */
8166           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8167             do_copy = FALSE;
8168
8169           /* Make sure undefined weak symbols are output as a dynamic
8170              symbol in PIEs.  */
8171           else if (h->dynindx == -1 && !h->forced_local)
8172             {
8173               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8174                 return FALSE;
8175             }
8176         }
8177
8178       if (do_copy)
8179         {
8180           /* Even though we don't directly need a GOT entry for this symbol,
8181              the SVR4 psABI requires it to have a dynamic symbol table
8182              index greater that DT_MIPS_GOTSYM if there are dynamic
8183              relocations against it.
8184
8185              VxWorks does not enforce the same mapping between the GOT
8186              and the symbol table, so the same requirement does not
8187              apply there.  */
8188           if (!htab->is_vxworks)
8189             {
8190               if (hmips->global_got_area > GGA_RELOC_ONLY)
8191                 hmips->global_got_area = GGA_RELOC_ONLY;
8192               hmips->got_only_for_calls = FALSE;
8193             }
8194
8195           mips_elf_allocate_dynamic_relocations
8196             (dynobj, info, hmips->possibly_dynamic_relocs);
8197           if (hmips->readonly_reloc)
8198             /* We tell the dynamic linker that there are relocations
8199                against the text segment.  */
8200             info->flags |= DF_TEXTREL;
8201         }
8202     }
8203
8204   return TRUE;
8205 }
8206
8207 /* Adjust a symbol defined by a dynamic object and referenced by a
8208    regular object.  The current definition is in some section of the
8209    dynamic object, but we're not including those sections.  We have to
8210    change the definition to something the rest of the link can
8211    understand.  */
8212
8213 bfd_boolean
8214 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8215                                      struct elf_link_hash_entry *h)
8216 {
8217   bfd *dynobj;
8218   struct mips_elf_link_hash_entry *hmips;
8219   struct mips_elf_link_hash_table *htab;
8220
8221   htab = mips_elf_hash_table (info);
8222   BFD_ASSERT (htab != NULL);
8223
8224   dynobj = elf_hash_table (info)->dynobj;
8225   hmips = (struct mips_elf_link_hash_entry *) h;
8226
8227   /* Make sure we know what is going on here.  */
8228   BFD_ASSERT (dynobj != NULL
8229               && (h->needs_plt
8230                   || h->u.weakdef != NULL
8231                   || (h->def_dynamic
8232                       && h->ref_regular
8233                       && !h->def_regular)));
8234
8235   hmips = (struct mips_elf_link_hash_entry *) h;
8236
8237   /* If there are call relocations against an externally-defined symbol,
8238      see whether we can create a MIPS lazy-binding stub for it.  We can
8239      only do this if all references to the function are through call
8240      relocations, and in that case, the traditional lazy-binding stubs
8241      are much more efficient than PLT entries.
8242
8243      Traditional stubs are only available on SVR4 psABI-based systems;
8244      VxWorks always uses PLTs instead.  */
8245   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8246     {
8247       if (! elf_hash_table (info)->dynamic_sections_created)
8248         return TRUE;
8249
8250       /* If this symbol is not defined in a regular file, then set
8251          the symbol to the stub location.  This is required to make
8252          function pointers compare as equal between the normal
8253          executable and the shared library.  */
8254       if (!h->def_regular)
8255         {
8256           hmips->needs_lazy_stub = TRUE;
8257           htab->lazy_stub_count++;
8258           return TRUE;
8259         }
8260     }
8261   /* As above, VxWorks requires PLT entries for externally-defined
8262      functions that are only accessed through call relocations.
8263
8264      Both VxWorks and non-VxWorks targets also need PLT entries if there
8265      are static-only relocations against an externally-defined function.
8266      This can technically occur for shared libraries if there are
8267      branches to the symbol, although it is unlikely that this will be
8268      used in practice due to the short ranges involved.  It can occur
8269      for any relative or absolute relocation in executables; in that
8270      case, the PLT entry becomes the function's canonical address.  */
8271   else if (((h->needs_plt && !hmips->no_fn_stub)
8272             || (h->type == STT_FUNC && hmips->has_static_relocs))
8273            && htab->use_plts_and_copy_relocs
8274            && !SYMBOL_CALLS_LOCAL (info, h)
8275            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8276                 && h->root.type == bfd_link_hash_undefweak))
8277     {
8278       /* If this is the first symbol to need a PLT entry, allocate room
8279          for the header.  */
8280       if (htab->splt->size == 0)
8281         {
8282           BFD_ASSERT (htab->sgotplt->size == 0);
8283
8284           /* If we're using the PLT additions to the psABI, each PLT
8285              entry is 16 bytes and the PLT0 entry is 32 bytes.
8286              Encourage better cache usage by aligning.  We do this
8287              lazily to avoid pessimizing traditional objects.  */
8288           if (!htab->is_vxworks
8289               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8290             return FALSE;
8291
8292           /* Make sure that .got.plt is word-aligned.  We do this lazily
8293              for the same reason as above.  */
8294           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8295                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8296             return FALSE;
8297
8298           htab->splt->size += htab->plt_header_size;
8299
8300           /* On non-VxWorks targets, the first two entries in .got.plt
8301              are reserved.  */
8302           if (!htab->is_vxworks)
8303             htab->sgotplt->size += 2 * MIPS_ELF_GOT_SIZE (dynobj);
8304
8305           /* On VxWorks, also allocate room for the header's
8306              .rela.plt.unloaded entries.  */
8307           if (htab->is_vxworks && !info->shared)
8308             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8309         }
8310
8311       /* Assign the next .plt entry to this symbol.  */
8312       h->plt.offset = htab->splt->size;
8313       htab->splt->size += htab->plt_entry_size;
8314
8315       /* If the output file has no definition of the symbol, set the
8316          symbol's value to the address of the stub.  */
8317       if (!info->shared && !h->def_regular)
8318         {
8319           h->root.u.def.section = htab->splt;
8320           h->root.u.def.value = h->plt.offset;
8321           /* For VxWorks, point at the PLT load stub rather than the
8322              lazy resolution stub; this stub will become the canonical
8323              function address.  */
8324           if (htab->is_vxworks)
8325             h->root.u.def.value += 8;
8326         }
8327
8328       /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8329          relocation.  */
8330       htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8331       htab->srelplt->size += (htab->is_vxworks
8332                               ? MIPS_ELF_RELA_SIZE (dynobj)
8333                               : MIPS_ELF_REL_SIZE (dynobj));
8334
8335       /* Make room for the .rela.plt.unloaded relocations.  */
8336       if (htab->is_vxworks && !info->shared)
8337         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8338
8339       /* All relocations against this symbol that could have been made
8340          dynamic will now refer to the PLT entry instead.  */
8341       hmips->possibly_dynamic_relocs = 0;
8342
8343       return TRUE;
8344     }
8345
8346   /* If this is a weak symbol, and there is a real definition, the
8347      processor independent code will have arranged for us to see the
8348      real definition first, and we can just use the same value.  */
8349   if (h->u.weakdef != NULL)
8350     {
8351       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8352                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
8353       h->root.u.def.section = h->u.weakdef->root.u.def.section;
8354       h->root.u.def.value = h->u.weakdef->root.u.def.value;
8355       return TRUE;
8356     }
8357
8358   /* Otherwise, there is nothing further to do for symbols defined
8359      in regular objects.  */
8360   if (h->def_regular)
8361     return TRUE;
8362
8363   /* There's also nothing more to do if we'll convert all relocations
8364      against this symbol into dynamic relocations.  */
8365   if (!hmips->has_static_relocs)
8366     return TRUE;
8367
8368   /* We're now relying on copy relocations.  Complain if we have
8369      some that we can't convert.  */
8370   if (!htab->use_plts_and_copy_relocs || info->shared)
8371     {
8372       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8373                                "dynamic symbol %s"),
8374                              h->root.root.string);
8375       bfd_set_error (bfd_error_bad_value);
8376       return FALSE;
8377     }
8378
8379   /* We must allocate the symbol in our .dynbss section, which will
8380      become part of the .bss section of the executable.  There will be
8381      an entry for this symbol in the .dynsym section.  The dynamic
8382      object will contain position independent code, so all references
8383      from the dynamic object to this symbol will go through the global
8384      offset table.  The dynamic linker will use the .dynsym entry to
8385      determine the address it must put in the global offset table, so
8386      both the dynamic object and the regular object will refer to the
8387      same memory location for the variable.  */
8388
8389   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8390     {
8391       if (htab->is_vxworks)
8392         htab->srelbss->size += sizeof (Elf32_External_Rela);
8393       else
8394         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8395       h->needs_copy = 1;
8396     }
8397
8398   /* All relocations against this symbol that could have been made
8399      dynamic will now refer to the local copy instead.  */
8400   hmips->possibly_dynamic_relocs = 0;
8401
8402   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
8403 }
8404 \f
8405 /* This function is called after all the input files have been read,
8406    and the input sections have been assigned to output sections.  We
8407    check for any mips16 stub sections that we can discard.  */
8408
8409 bfd_boolean
8410 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
8411                                     struct bfd_link_info *info)
8412 {
8413   asection *ri;
8414   struct mips_elf_link_hash_table *htab;
8415   struct mips_htab_traverse_info hti;
8416
8417   htab = mips_elf_hash_table (info);
8418   BFD_ASSERT (htab != NULL);
8419
8420   /* The .reginfo section has a fixed size.  */
8421   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8422   if (ri != NULL)
8423     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
8424
8425   hti.info = info;
8426   hti.output_bfd = output_bfd;
8427   hti.error = FALSE;
8428   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8429                                mips_elf_check_symbols, &hti);
8430   if (hti.error)
8431     return FALSE;
8432
8433   return TRUE;
8434 }
8435
8436 /* If the link uses a GOT, lay it out and work out its size.  */
8437
8438 static bfd_boolean
8439 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8440 {
8441   bfd *dynobj;
8442   asection *s;
8443   struct mips_got_info *g;
8444   bfd_size_type loadable_size = 0;
8445   bfd_size_type page_gotno;
8446   bfd *sub;
8447   struct mips_elf_count_tls_arg count_tls_arg;
8448   struct mips_elf_link_hash_table *htab;
8449
8450   htab = mips_elf_hash_table (info);
8451   BFD_ASSERT (htab != NULL);
8452
8453   s = htab->sgot;
8454   if (s == NULL)
8455     return TRUE;
8456
8457   dynobj = elf_hash_table (info)->dynobj;
8458   g = htab->got_info;
8459
8460   /* Allocate room for the reserved entries.  VxWorks always reserves
8461      3 entries; other objects only reserve 2 entries.  */
8462   BFD_ASSERT (g->assigned_gotno == 0);
8463   if (htab->is_vxworks)
8464     htab->reserved_gotno = 3;
8465   else
8466     htab->reserved_gotno = 2;
8467   g->local_gotno += htab->reserved_gotno;
8468   g->assigned_gotno = htab->reserved_gotno;
8469
8470   /* Replace entries for indirect and warning symbols with entries for
8471      the target symbol.  */
8472   if (!mips_elf_resolve_final_got_entries (g))
8473     return FALSE;
8474
8475   /* Count the number of GOT symbols.  */
8476   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
8477
8478   /* Calculate the total loadable size of the output.  That
8479      will give us the maximum number of GOT_PAGE entries
8480      required.  */
8481   for (sub = info->input_bfds; sub; sub = sub->link_next)
8482     {
8483       asection *subsection;
8484
8485       for (subsection = sub->sections;
8486            subsection;
8487            subsection = subsection->next)
8488         {
8489           if ((subsection->flags & SEC_ALLOC) == 0)
8490             continue;
8491           loadable_size += ((subsection->size + 0xf)
8492                             &~ (bfd_size_type) 0xf);
8493         }
8494     }
8495
8496   if (htab->is_vxworks)
8497     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
8498        relocations against local symbols evaluate to "G", and the EABI does
8499        not include R_MIPS_GOT_PAGE.  */
8500     page_gotno = 0;
8501   else
8502     /* Assume there are two loadable segments consisting of contiguous
8503        sections.  Is 5 enough?  */
8504     page_gotno = (loadable_size >> 16) + 5;
8505
8506   /* Choose the smaller of the two estimates; both are intended to be
8507      conservative.  */
8508   if (page_gotno > g->page_gotno)
8509     page_gotno = g->page_gotno;
8510
8511   g->local_gotno += page_gotno;
8512   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8513   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8514
8515   /* We need to calculate tls_gotno for global symbols at this point
8516      instead of building it up earlier, to avoid doublecounting
8517      entries for one global symbol from multiple input files.  */
8518   count_tls_arg.info = info;
8519   count_tls_arg.needed = 0;
8520   elf_link_hash_traverse (elf_hash_table (info),
8521                           mips_elf_count_global_tls_entries,
8522                           &count_tls_arg);
8523   g->tls_gotno += count_tls_arg.needed;
8524   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8525
8526   /* VxWorks does not support multiple GOTs.  It initializes $gp to
8527      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8528      dynamic loader.  */
8529   if (htab->is_vxworks)
8530     {
8531       /* VxWorks executables do not need a GOT.  */
8532       if (info->shared)
8533         {
8534           /* Each VxWorks GOT entry needs an explicit relocation.  */
8535           unsigned int count;
8536
8537           count = g->global_gotno + g->local_gotno - htab->reserved_gotno;
8538           if (count)
8539             mips_elf_allocate_dynamic_relocations (dynobj, info, count);
8540         }
8541     }
8542   else if (s->size > MIPS_ELF_GOT_MAX_SIZE (info))
8543     {
8544       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
8545         return FALSE;
8546     }
8547   else
8548     {
8549       struct mips_elf_count_tls_arg arg;
8550
8551       /* Set up TLS entries.  */
8552       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8553       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
8554
8555       /* Allocate room for the TLS relocations.  */
8556       arg.info = info;
8557       arg.needed = 0;
8558       htab_traverse (g->got_entries, mips_elf_count_local_tls_relocs, &arg);
8559       elf_link_hash_traverse (elf_hash_table (info),
8560                               mips_elf_count_global_tls_relocs,
8561                               &arg);
8562       if (arg.needed)
8563         mips_elf_allocate_dynamic_relocations (dynobj, info, arg.needed);
8564     }
8565
8566   return TRUE;
8567 }
8568
8569 /* Estimate the size of the .MIPS.stubs section.  */
8570
8571 static void
8572 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
8573 {
8574   struct mips_elf_link_hash_table *htab;
8575   bfd_size_type dynsymcount;
8576
8577   htab = mips_elf_hash_table (info);
8578   BFD_ASSERT (htab != NULL);
8579
8580   if (htab->lazy_stub_count == 0)
8581     return;
8582
8583   /* IRIX rld assumes that a function stub isn't at the end of the .text
8584      section, so add a dummy entry to the end.  */
8585   htab->lazy_stub_count++;
8586
8587   /* Get a worst-case estimate of the number of dynamic symbols needed.
8588      At this point, dynsymcount does not account for section symbols
8589      and count_section_dynsyms may overestimate the number that will
8590      be needed.  */
8591   dynsymcount = (elf_hash_table (info)->dynsymcount
8592                  + count_section_dynsyms (output_bfd, info));
8593
8594   /* Determine the size of one stub entry.  */
8595   htab->function_stub_size = (dynsymcount > 0x10000
8596                               ? MIPS_FUNCTION_STUB_BIG_SIZE
8597                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
8598
8599   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
8600 }
8601
8602 /* A mips_elf_link_hash_traverse callback for which DATA points to the
8603    MIPS hash table.  If H needs a traditional MIPS lazy-binding stub,
8604    allocate an entry in the stubs section.  */
8605
8606 static bfd_boolean
8607 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data)
8608 {
8609   struct mips_elf_link_hash_table *htab;
8610
8611   htab = (struct mips_elf_link_hash_table *) data;
8612   if (h->needs_lazy_stub)
8613     {
8614       h->root.root.u.def.section = htab->sstubs;
8615       h->root.root.u.def.value = htab->sstubs->size;
8616       h->root.plt.offset = htab->sstubs->size;
8617       htab->sstubs->size += htab->function_stub_size;
8618     }
8619   return TRUE;
8620 }
8621
8622 /* Allocate offsets in the stubs section to each symbol that needs one.
8623    Set the final size of the .MIPS.stub section.  */
8624
8625 static void
8626 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
8627 {
8628   struct mips_elf_link_hash_table *htab;
8629
8630   htab = mips_elf_hash_table (info);
8631   BFD_ASSERT (htab != NULL);
8632
8633   if (htab->lazy_stub_count == 0)
8634     return;
8635
8636   htab->sstubs->size = 0;
8637   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
8638   htab->sstubs->size += htab->function_stub_size;
8639   BFD_ASSERT (htab->sstubs->size
8640               == htab->lazy_stub_count * htab->function_stub_size);
8641 }
8642
8643 /* Set the sizes of the dynamic sections.  */
8644
8645 bfd_boolean
8646 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
8647                                      struct bfd_link_info *info)
8648 {
8649   bfd *dynobj;
8650   asection *s, *sreldyn;
8651   bfd_boolean reltext;
8652   struct mips_elf_link_hash_table *htab;
8653
8654   htab = mips_elf_hash_table (info);
8655   BFD_ASSERT (htab != NULL);
8656   dynobj = elf_hash_table (info)->dynobj;
8657   BFD_ASSERT (dynobj != NULL);
8658
8659   if (elf_hash_table (info)->dynamic_sections_created)
8660     {
8661       /* Set the contents of the .interp section to the interpreter.  */
8662       if (info->executable)
8663         {
8664           s = bfd_get_section_by_name (dynobj, ".interp");
8665           BFD_ASSERT (s != NULL);
8666           s->size
8667             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
8668           s->contents
8669             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
8670         }
8671
8672       /* Create a symbol for the PLT, if we know that we are using it.  */
8673       if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
8674         {
8675           struct elf_link_hash_entry *h;
8676
8677           BFD_ASSERT (htab->use_plts_and_copy_relocs);
8678
8679           h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
8680                                            "_PROCEDURE_LINKAGE_TABLE_");
8681           htab->root.hplt = h;
8682           if (h == NULL)
8683             return FALSE;
8684           h->type = STT_FUNC;
8685         }
8686     }
8687
8688   /* Allocate space for global sym dynamic relocs.  */
8689   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, (PTR) info);
8690
8691   mips_elf_estimate_stub_size (output_bfd, info);
8692
8693   if (!mips_elf_lay_out_got (output_bfd, info))
8694     return FALSE;
8695
8696   mips_elf_lay_out_lazy_stubs (info);
8697
8698   /* The check_relocs and adjust_dynamic_symbol entry points have
8699      determined the sizes of the various dynamic sections.  Allocate
8700      memory for them.  */
8701   reltext = FALSE;
8702   for (s = dynobj->sections; s != NULL; s = s->next)
8703     {
8704       const char *name;
8705
8706       /* It's OK to base decisions on the section name, because none
8707          of the dynobj section names depend upon the input files.  */
8708       name = bfd_get_section_name (dynobj, s);
8709
8710       if ((s->flags & SEC_LINKER_CREATED) == 0)
8711         continue;
8712
8713       if (CONST_STRNEQ (name, ".rel"))
8714         {
8715           if (s->size != 0)
8716             {
8717               const char *outname;
8718               asection *target;
8719
8720               /* If this relocation section applies to a read only
8721                  section, then we probably need a DT_TEXTREL entry.
8722                  If the relocation section is .rel(a).dyn, we always
8723                  assert a DT_TEXTREL entry rather than testing whether
8724                  there exists a relocation to a read only section or
8725                  not.  */
8726               outname = bfd_get_section_name (output_bfd,
8727                                               s->output_section);
8728               target = bfd_get_section_by_name (output_bfd, outname + 4);
8729               if ((target != NULL
8730                    && (target->flags & SEC_READONLY) != 0
8731                    && (target->flags & SEC_ALLOC) != 0)
8732                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
8733                 reltext = TRUE;
8734
8735               /* We use the reloc_count field as a counter if we need
8736                  to copy relocs into the output file.  */
8737               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
8738                 s->reloc_count = 0;
8739
8740               /* If combreloc is enabled, elf_link_sort_relocs() will
8741                  sort relocations, but in a different way than we do,
8742                  and before we're done creating relocations.  Also, it
8743                  will move them around between input sections'
8744                  relocation's contents, so our sorting would be
8745                  broken, so don't let it run.  */
8746               info->combreloc = 0;
8747             }
8748         }
8749       else if (! info->shared
8750                && ! mips_elf_hash_table (info)->use_rld_obj_head
8751                && CONST_STRNEQ (name, ".rld_map"))
8752         {
8753           /* We add a room for __rld_map.  It will be filled in by the
8754              rtld to contain a pointer to the _r_debug structure.  */
8755           s->size += 4;
8756         }
8757       else if (SGI_COMPAT (output_bfd)
8758                && CONST_STRNEQ (name, ".compact_rel"))
8759         s->size += mips_elf_hash_table (info)->compact_rel_size;
8760       else if (s == htab->splt)
8761         {
8762           /* If the last PLT entry has a branch delay slot, allocate
8763              room for an extra nop to fill the delay slot.  This is
8764              for CPUs without load interlocking.  */
8765           if (! LOAD_INTERLOCKS_P (output_bfd)
8766               && ! htab->is_vxworks && s->size > 0)
8767             s->size += 4;
8768         }
8769       else if (! CONST_STRNEQ (name, ".init")
8770                && s != htab->sgot
8771                && s != htab->sgotplt
8772                && s != htab->sstubs
8773                && s != htab->sdynbss)
8774         {
8775           /* It's not one of our sections, so don't allocate space.  */
8776           continue;
8777         }
8778
8779       if (s->size == 0)
8780         {
8781           s->flags |= SEC_EXCLUDE;
8782           continue;
8783         }
8784
8785       if ((s->flags & SEC_HAS_CONTENTS) == 0)
8786         continue;
8787
8788       /* Allocate memory for the section contents.  */
8789       s->contents = bfd_zalloc (dynobj, s->size);
8790       if (s->contents == NULL)
8791         {
8792           bfd_set_error (bfd_error_no_memory);
8793           return FALSE;
8794         }
8795     }
8796
8797   if (elf_hash_table (info)->dynamic_sections_created)
8798     {
8799       /* Add some entries to the .dynamic section.  We fill in the
8800          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
8801          must add the entries now so that we get the correct size for
8802          the .dynamic section.  */
8803
8804       /* SGI object has the equivalence of DT_DEBUG in the
8805          DT_MIPS_RLD_MAP entry.  This must come first because glibc
8806          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and GDB only
8807          looks at the first one it sees.  */
8808       if (!info->shared
8809           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
8810         return FALSE;
8811
8812       /* The DT_DEBUG entry may be filled in by the dynamic linker and
8813          used by the debugger.  */
8814       if (info->executable
8815           && !SGI_COMPAT (output_bfd)
8816           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
8817         return FALSE;
8818
8819       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
8820         info->flags |= DF_TEXTREL;
8821
8822       if ((info->flags & DF_TEXTREL) != 0)
8823         {
8824           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
8825             return FALSE;
8826
8827           /* Clear the DF_TEXTREL flag.  It will be set again if we
8828              write out an actual text relocation; we may not, because
8829              at this point we do not know whether e.g. any .eh_frame
8830              absolute relocations have been converted to PC-relative.  */
8831           info->flags &= ~DF_TEXTREL;
8832         }
8833
8834       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
8835         return FALSE;
8836
8837       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
8838       if (htab->is_vxworks)
8839         {
8840           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
8841              use any of the DT_MIPS_* tags.  */
8842           if (sreldyn && sreldyn->size > 0)
8843             {
8844               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
8845                 return FALSE;
8846
8847               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
8848                 return FALSE;
8849
8850               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
8851                 return FALSE;
8852             }
8853         }
8854       else
8855         {
8856           if (sreldyn && sreldyn->size > 0)
8857             {
8858               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
8859                 return FALSE;
8860
8861               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
8862                 return FALSE;
8863
8864               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
8865                 return FALSE;
8866             }
8867
8868           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
8869             return FALSE;
8870
8871           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
8872             return FALSE;
8873
8874           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
8875             return FALSE;
8876
8877           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
8878             return FALSE;
8879
8880           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
8881             return FALSE;
8882
8883           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
8884             return FALSE;
8885
8886           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
8887             return FALSE;
8888
8889           if (IRIX_COMPAT (dynobj) == ict_irix5
8890               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
8891             return FALSE;
8892
8893           if (IRIX_COMPAT (dynobj) == ict_irix6
8894               && (bfd_get_section_by_name
8895                   (dynobj, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
8896               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
8897             return FALSE;
8898         }
8899       if (htab->splt->size > 0)
8900         {
8901           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
8902             return FALSE;
8903
8904           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
8905             return FALSE;
8906
8907           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
8908             return FALSE;
8909
8910           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
8911             return FALSE;
8912         }
8913       if (htab->is_vxworks
8914           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
8915         return FALSE;
8916     }
8917
8918   return TRUE;
8919 }
8920 \f
8921 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
8922    Adjust its R_ADDEND field so that it is correct for the output file.
8923    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
8924    and sections respectively; both use symbol indexes.  */
8925
8926 static void
8927 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
8928                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
8929                         asection **local_sections, Elf_Internal_Rela *rel)
8930 {
8931   unsigned int r_type, r_symndx;
8932   Elf_Internal_Sym *sym;
8933   asection *sec;
8934
8935   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
8936     {
8937       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
8938       if (r_type == R_MIPS16_GPREL
8939           || r_type == R_MIPS_GPREL16
8940           || r_type == R_MIPS_GPREL32
8941           || r_type == R_MIPS_LITERAL)
8942         {
8943           rel->r_addend += _bfd_get_gp_value (input_bfd);
8944           rel->r_addend -= _bfd_get_gp_value (output_bfd);
8945         }
8946
8947       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
8948       sym = local_syms + r_symndx;
8949
8950       /* Adjust REL's addend to account for section merging.  */
8951       if (!info->relocatable)
8952         {
8953           sec = local_sections[r_symndx];
8954           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
8955         }
8956
8957       /* This would normally be done by the rela_normal code in elflink.c.  */
8958       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
8959         rel->r_addend += local_sections[r_symndx]->output_offset;
8960     }
8961 }
8962
8963 /* Relocate a MIPS ELF section.  */
8964
8965 bfd_boolean
8966 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
8967                                 bfd *input_bfd, asection *input_section,
8968                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
8969                                 Elf_Internal_Sym *local_syms,
8970                                 asection **local_sections)
8971 {
8972   Elf_Internal_Rela *rel;
8973   const Elf_Internal_Rela *relend;
8974   bfd_vma addend = 0;
8975   bfd_boolean use_saved_addend_p = FALSE;
8976   const struct elf_backend_data *bed;
8977
8978   bed = get_elf_backend_data (output_bfd);
8979   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
8980   for (rel = relocs; rel < relend; ++rel)
8981     {
8982       const char *name;
8983       bfd_vma value = 0;
8984       reloc_howto_type *howto;
8985       bfd_boolean cross_mode_jump_p;
8986       /* TRUE if the relocation is a RELA relocation, rather than a
8987          REL relocation.  */
8988       bfd_boolean rela_relocation_p = TRUE;
8989       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
8990       const char *msg;
8991       unsigned long r_symndx;
8992       asection *sec;
8993       Elf_Internal_Shdr *symtab_hdr;
8994       struct elf_link_hash_entry *h;
8995       bfd_boolean rel_reloc;
8996
8997       rel_reloc = (NEWABI_P (input_bfd)
8998                    && mips_elf_rel_relocation_p (input_bfd, input_section,
8999                                                  relocs, rel));
9000       /* Find the relocation howto for this relocation.  */
9001       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9002
9003       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
9004       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9005       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9006         {
9007           sec = local_sections[r_symndx];
9008           h = NULL;
9009         }
9010       else
9011         {
9012           unsigned long extsymoff;
9013
9014           extsymoff = 0;
9015           if (!elf_bad_symtab (input_bfd))
9016             extsymoff = symtab_hdr->sh_info;
9017           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9018           while (h->root.type == bfd_link_hash_indirect
9019                  || h->root.type == bfd_link_hash_warning)
9020             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9021
9022           sec = NULL;
9023           if (h->root.type == bfd_link_hash_defined
9024               || h->root.type == bfd_link_hash_defweak)
9025             sec = h->root.u.def.section;
9026         }
9027
9028       if (sec != NULL && elf_discarded_section (sec))
9029         RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9030                                          rel, relend, howto, contents);
9031
9032       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
9033         {
9034           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
9035              64-bit code, but make sure all their addresses are in the
9036              lowermost or uppermost 32-bit section of the 64-bit address
9037              space.  Thus, when they use an R_MIPS_64 they mean what is
9038              usually meant by R_MIPS_32, with the exception that the
9039              stored value is sign-extended to 64 bits.  */
9040           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
9041
9042           /* On big-endian systems, we need to lie about the position
9043              of the reloc.  */
9044           if (bfd_big_endian (input_bfd))
9045             rel->r_offset += 4;
9046         }
9047
9048       if (!use_saved_addend_p)
9049         {
9050           /* If these relocations were originally of the REL variety,
9051              we must pull the addend out of the field that will be
9052              relocated.  Otherwise, we simply use the contents of the
9053              RELA relocation.  */
9054           if (mips_elf_rel_relocation_p (input_bfd, input_section,
9055                                          relocs, rel))
9056             {
9057               rela_relocation_p = FALSE;
9058               addend = mips_elf_read_rel_addend (input_bfd, rel,
9059                                                  howto, contents);
9060               if (hi16_reloc_p (r_type)
9061                   || (got16_reloc_p (r_type)
9062                       && mips_elf_local_relocation_p (input_bfd, rel,
9063                                                       local_sections)))
9064                 {
9065                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9066                                                      contents, &addend))
9067                     {
9068                       if (h)
9069                         name = h->root.root.string;
9070                       else
9071                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9072                                                  local_syms + r_symndx,
9073                                                  sec);
9074                       (*_bfd_error_handler)
9075                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9076                          input_bfd, input_section, name, howto->name,
9077                          rel->r_offset);
9078                     }
9079                 }
9080               else
9081                 addend <<= howto->rightshift;
9082             }
9083           else
9084             addend = rel->r_addend;
9085           mips_elf_adjust_addend (output_bfd, info, input_bfd,
9086                                   local_syms, local_sections, rel);
9087         }
9088
9089       if (info->relocatable)
9090         {
9091           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
9092               && bfd_big_endian (input_bfd))
9093             rel->r_offset -= 4;
9094
9095           if (!rela_relocation_p && rel->r_addend)
9096             {
9097               addend += rel->r_addend;
9098               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
9099                 addend = mips_elf_high (addend);
9100               else if (r_type == R_MIPS_HIGHER)
9101                 addend = mips_elf_higher (addend);
9102               else if (r_type == R_MIPS_HIGHEST)
9103                 addend = mips_elf_highest (addend);
9104               else
9105                 addend >>= howto->rightshift;
9106
9107               /* We use the source mask, rather than the destination
9108                  mask because the place to which we are writing will be
9109                  source of the addend in the final link.  */
9110               addend &= howto->src_mask;
9111
9112               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9113                 /* See the comment above about using R_MIPS_64 in the 32-bit
9114                    ABI.  Here, we need to update the addend.  It would be
9115                    possible to get away with just using the R_MIPS_32 reloc
9116                    but for endianness.  */
9117                 {
9118                   bfd_vma sign_bits;
9119                   bfd_vma low_bits;
9120                   bfd_vma high_bits;
9121
9122                   if (addend & ((bfd_vma) 1 << 31))
9123 #ifdef BFD64
9124                     sign_bits = ((bfd_vma) 1 << 32) - 1;
9125 #else
9126                     sign_bits = -1;
9127 #endif
9128                   else
9129                     sign_bits = 0;
9130
9131                   /* If we don't know that we have a 64-bit type,
9132                      do two separate stores.  */
9133                   if (bfd_big_endian (input_bfd))
9134                     {
9135                       /* Store the sign-bits (which are most significant)
9136                          first.  */
9137                       low_bits = sign_bits;
9138                       high_bits = addend;
9139                     }
9140                   else
9141                     {
9142                       low_bits = addend;
9143                       high_bits = sign_bits;
9144                     }
9145                   bfd_put_32 (input_bfd, low_bits,
9146                               contents + rel->r_offset);
9147                   bfd_put_32 (input_bfd, high_bits,
9148                               contents + rel->r_offset + 4);
9149                   continue;
9150                 }
9151
9152               if (! mips_elf_perform_relocation (info, howto, rel, addend,
9153                                                  input_bfd, input_section,
9154                                                  contents, FALSE))
9155                 return FALSE;
9156             }
9157
9158           /* Go on to the next relocation.  */
9159           continue;
9160         }
9161
9162       /* In the N32 and 64-bit ABIs there may be multiple consecutive
9163          relocations for the same offset.  In that case we are
9164          supposed to treat the output of each relocation as the addend
9165          for the next.  */
9166       if (rel + 1 < relend
9167           && rel->r_offset == rel[1].r_offset
9168           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
9169         use_saved_addend_p = TRUE;
9170       else
9171         use_saved_addend_p = FALSE;
9172
9173       /* Figure out what value we are supposed to relocate.  */
9174       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9175                                              input_section, info, rel,
9176                                              addend, howto, local_syms,
9177                                              local_sections, &value,
9178                                              &name, &cross_mode_jump_p,
9179                                              use_saved_addend_p))
9180         {
9181         case bfd_reloc_continue:
9182           /* There's nothing to do.  */
9183           continue;
9184
9185         case bfd_reloc_undefined:
9186           /* mips_elf_calculate_relocation already called the
9187              undefined_symbol callback.  There's no real point in
9188              trying to perform the relocation at this point, so we
9189              just skip ahead to the next relocation.  */
9190           continue;
9191
9192         case bfd_reloc_notsupported:
9193           msg = _("internal error: unsupported relocation error");
9194           info->callbacks->warning
9195             (info, msg, name, input_bfd, input_section, rel->r_offset);
9196           return FALSE;
9197
9198         case bfd_reloc_overflow:
9199           if (use_saved_addend_p)
9200             /* Ignore overflow until we reach the last relocation for
9201                a given location.  */
9202             ;
9203           else
9204             {
9205               struct mips_elf_link_hash_table *htab;
9206
9207               htab = mips_elf_hash_table (info);
9208               BFD_ASSERT (htab != NULL);
9209               BFD_ASSERT (name != NULL);
9210               if (!htab->small_data_overflow_reported
9211                   && (gprel16_reloc_p (howto->type)
9212                       || howto->type == R_MIPS_LITERAL))
9213                 {
9214                   msg = _("small-data section exceeds 64KB;"
9215                           " lower small-data size limit (see option -G)");
9216
9217                   htab->small_data_overflow_reported = TRUE;
9218                   (*info->callbacks->einfo) ("%P: %s\n", msg);
9219                 }
9220               if (! ((*info->callbacks->reloc_overflow)
9221                      (info, NULL, name, howto->name, (bfd_vma) 0,
9222                       input_bfd, input_section, rel->r_offset)))
9223                 return FALSE;
9224             }
9225           break;
9226
9227         case bfd_reloc_ok:
9228           break;
9229
9230         default:
9231           abort ();
9232           break;
9233         }
9234
9235       /* If we've got another relocation for the address, keep going
9236          until we reach the last one.  */
9237       if (use_saved_addend_p)
9238         {
9239           addend = value;
9240           continue;
9241         }
9242
9243       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9244         /* See the comment above about using R_MIPS_64 in the 32-bit
9245            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
9246            that calculated the right value.  Now, however, we
9247            sign-extend the 32-bit result to 64-bits, and store it as a
9248            64-bit value.  We are especially generous here in that we
9249            go to extreme lengths to support this usage on systems with
9250            only a 32-bit VMA.  */
9251         {
9252           bfd_vma sign_bits;
9253           bfd_vma low_bits;
9254           bfd_vma high_bits;
9255
9256           if (value & ((bfd_vma) 1 << 31))
9257 #ifdef BFD64
9258             sign_bits = ((bfd_vma) 1 << 32) - 1;
9259 #else
9260             sign_bits = -1;
9261 #endif
9262           else
9263             sign_bits = 0;
9264
9265           /* If we don't know that we have a 64-bit type,
9266              do two separate stores.  */
9267           if (bfd_big_endian (input_bfd))
9268             {
9269               /* Undo what we did above.  */
9270               rel->r_offset -= 4;
9271               /* Store the sign-bits (which are most significant)
9272                  first.  */
9273               low_bits = sign_bits;
9274               high_bits = value;
9275             }
9276           else
9277             {
9278               low_bits = value;
9279               high_bits = sign_bits;
9280             }
9281           bfd_put_32 (input_bfd, low_bits,
9282                       contents + rel->r_offset);
9283           bfd_put_32 (input_bfd, high_bits,
9284                       contents + rel->r_offset + 4);
9285           continue;
9286         }
9287
9288       /* Actually perform the relocation.  */
9289       if (! mips_elf_perform_relocation (info, howto, rel, value,
9290                                          input_bfd, input_section,
9291                                          contents, cross_mode_jump_p))
9292         return FALSE;
9293     }
9294
9295   return TRUE;
9296 }
9297 \f
9298 /* A function that iterates over each entry in la25_stubs and fills
9299    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
9300
9301 static int
9302 mips_elf_create_la25_stub (void **slot, void *data)
9303 {
9304   struct mips_htab_traverse_info *hti;
9305   struct mips_elf_link_hash_table *htab;
9306   struct mips_elf_la25_stub *stub;
9307   asection *s;
9308   bfd_byte *loc;
9309   bfd_vma offset, target, target_high, target_low;
9310
9311   stub = (struct mips_elf_la25_stub *) *slot;
9312   hti = (struct mips_htab_traverse_info *) data;
9313   htab = mips_elf_hash_table (hti->info);
9314   BFD_ASSERT (htab != NULL);
9315
9316   /* Create the section contents, if we haven't already.  */
9317   s = stub->stub_section;
9318   loc = s->contents;
9319   if (loc == NULL)
9320     {
9321       loc = bfd_malloc (s->size);
9322       if (loc == NULL)
9323         {
9324           hti->error = TRUE;
9325           return FALSE;
9326         }
9327       s->contents = loc;
9328     }
9329
9330   /* Work out where in the section this stub should go.  */
9331   offset = stub->offset;
9332
9333   /* Work out the target address.  */
9334   target = (stub->h->root.root.u.def.section->output_section->vma
9335             + stub->h->root.root.u.def.section->output_offset
9336             + stub->h->root.root.u.def.value);
9337   target_high = ((target + 0x8000) >> 16) & 0xffff;
9338   target_low = (target & 0xffff);
9339
9340   if (stub->stub_section != htab->strampoline)
9341     {
9342       /* This is a simple LUI/ADIDU stub.  Zero out the beginning
9343          of the section and write the two instructions at the end.  */
9344       memset (loc, 0, offset);
9345       loc += offset;
9346       bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9347       bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9348     }
9349   else
9350     {
9351       /* This is trampoline.  */
9352       loc += offset;
9353       bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9354       bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9355       bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9356       bfd_put_32 (hti->output_bfd, 0, loc + 12);
9357     }
9358   return TRUE;
9359 }
9360
9361 /* If NAME is one of the special IRIX6 symbols defined by the linker,
9362    adjust it appropriately now.  */
9363
9364 static void
9365 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9366                                       const char *name, Elf_Internal_Sym *sym)
9367 {
9368   /* The linker script takes care of providing names and values for
9369      these, but we must place them into the right sections.  */
9370   static const char* const text_section_symbols[] = {
9371     "_ftext",
9372     "_etext",
9373     "__dso_displacement",
9374     "__elf_header",
9375     "__program_header_table",
9376     NULL
9377   };
9378
9379   static const char* const data_section_symbols[] = {
9380     "_fdata",
9381     "_edata",
9382     "_end",
9383     "_fbss",
9384     NULL
9385   };
9386
9387   const char* const *p;
9388   int i;
9389
9390   for (i = 0; i < 2; ++i)
9391     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9392          *p;
9393          ++p)
9394       if (strcmp (*p, name) == 0)
9395         {
9396           /* All of these symbols are given type STT_SECTION by the
9397              IRIX6 linker.  */
9398           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9399           sym->st_other = STO_PROTECTED;
9400
9401           /* The IRIX linker puts these symbols in special sections.  */
9402           if (i == 0)
9403             sym->st_shndx = SHN_MIPS_TEXT;
9404           else
9405             sym->st_shndx = SHN_MIPS_DATA;
9406
9407           break;
9408         }
9409 }
9410
9411 /* Finish up dynamic symbol handling.  We set the contents of various
9412    dynamic sections here.  */
9413
9414 bfd_boolean
9415 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9416                                      struct bfd_link_info *info,
9417                                      struct elf_link_hash_entry *h,
9418                                      Elf_Internal_Sym *sym)
9419 {
9420   bfd *dynobj;
9421   asection *sgot;
9422   struct mips_got_info *g, *gg;
9423   const char *name;
9424   int idx;
9425   struct mips_elf_link_hash_table *htab;
9426   struct mips_elf_link_hash_entry *hmips;
9427
9428   htab = mips_elf_hash_table (info);
9429   BFD_ASSERT (htab != NULL);
9430   dynobj = elf_hash_table (info)->dynobj;
9431   hmips = (struct mips_elf_link_hash_entry *) h;
9432
9433   BFD_ASSERT (!htab->is_vxworks);
9434
9435   if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9436     {
9437       /* We've decided to create a PLT entry for this symbol.  */
9438       bfd_byte *loc;
9439       bfd_vma header_address, plt_index, got_address;
9440       bfd_vma got_address_high, got_address_low, load;
9441       const bfd_vma *plt_entry;
9442
9443       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9444       BFD_ASSERT (h->dynindx != -1);
9445       BFD_ASSERT (htab->splt != NULL);
9446       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9447       BFD_ASSERT (!h->def_regular);
9448
9449       /* Calculate the address of the PLT header.  */
9450       header_address = (htab->splt->output_section->vma
9451                         + htab->splt->output_offset);
9452
9453       /* Calculate the index of the entry.  */
9454       plt_index = ((h->plt.offset - htab->plt_header_size)
9455                    / htab->plt_entry_size);
9456
9457       /* Calculate the address of the .got.plt entry.  */
9458       got_address = (htab->sgotplt->output_section->vma
9459                      + htab->sgotplt->output_offset
9460                      + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9461       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9462       got_address_low = got_address & 0xffff;
9463
9464       /* Initially point the .got.plt entry at the PLT header.  */
9465       loc = (htab->sgotplt->contents
9466              + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9467       if (ABI_64_P (output_bfd))
9468         bfd_put_64 (output_bfd, header_address, loc);
9469       else
9470         bfd_put_32 (output_bfd, header_address, loc);
9471
9472       /* Find out where the .plt entry should go.  */
9473       loc = htab->splt->contents + h->plt.offset;
9474
9475       /* Pick the load opcode.  */
9476       load = MIPS_ELF_LOAD_WORD (output_bfd);
9477
9478       /* Fill in the PLT entry itself.  */
9479       plt_entry = mips_exec_plt_entry;
9480       bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
9481       bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
9482
9483       if (! LOAD_INTERLOCKS_P (output_bfd))
9484         {
9485           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
9486           bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9487         }
9488       else
9489         {
9490           bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
9491           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
9492         }
9493
9494       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
9495       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
9496                                           plt_index, h->dynindx,
9497                                           R_MIPS_JUMP_SLOT, got_address);
9498
9499       /* We distinguish between PLT entries and lazy-binding stubs by
9500          giving the former an st_other value of STO_MIPS_PLT.  Set the
9501          flag and leave the value if there are any relocations in the
9502          binary where pointer equality matters.  */
9503       sym->st_shndx = SHN_UNDEF;
9504       if (h->pointer_equality_needed)
9505         sym->st_other = STO_MIPS_PLT;
9506       else
9507         sym->st_value = 0;
9508     }
9509   else if (h->plt.offset != MINUS_ONE)
9510     {
9511       /* We've decided to create a lazy-binding stub.  */
9512       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
9513
9514       /* This symbol has a stub.  Set it up.  */
9515
9516       BFD_ASSERT (h->dynindx != -1);
9517
9518       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9519                   || (h->dynindx <= 0xffff));
9520
9521       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
9522          sign extension at runtime in the stub, resulting in a negative
9523          index value.  */
9524       if (h->dynindx & ~0x7fffffff)
9525         return FALSE;
9526
9527       /* Fill the stub.  */
9528       idx = 0;
9529       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
9530       idx += 4;
9531       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
9532       idx += 4;
9533       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9534         {
9535           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
9536                       stub + idx);
9537           idx += 4;
9538         }
9539       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
9540       idx += 4;
9541
9542       /* If a large stub is not required and sign extension is not a
9543          problem, then use legacy code in the stub.  */
9544       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9545         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
9546       else if (h->dynindx & ~0x7fff)
9547         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
9548       else
9549         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
9550                     stub + idx);
9551
9552       BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
9553       memcpy (htab->sstubs->contents + h->plt.offset,
9554               stub, htab->function_stub_size);
9555
9556       /* Mark the symbol as undefined.  plt.offset != -1 occurs
9557          only for the referenced symbol.  */
9558       sym->st_shndx = SHN_UNDEF;
9559
9560       /* The run-time linker uses the st_value field of the symbol
9561          to reset the global offset table entry for this external
9562          to its stub address when unlinking a shared object.  */
9563       sym->st_value = (htab->sstubs->output_section->vma
9564                        + htab->sstubs->output_offset
9565                        + h->plt.offset);
9566     }
9567
9568   /* If we have a MIPS16 function with a stub, the dynamic symbol must
9569      refer to the stub, since only the stub uses the standard calling
9570      conventions.  */
9571   if (h->dynindx != -1 && hmips->fn_stub != NULL)
9572     {
9573       BFD_ASSERT (hmips->need_fn_stub);
9574       sym->st_value = (hmips->fn_stub->output_section->vma
9575                        + hmips->fn_stub->output_offset);
9576       sym->st_size = hmips->fn_stub->size;
9577       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
9578     }
9579
9580   BFD_ASSERT (h->dynindx != -1
9581               || h->forced_local);
9582
9583   sgot = htab->sgot;
9584   g = htab->got_info;
9585   BFD_ASSERT (g != NULL);
9586
9587   /* Run through the global symbol table, creating GOT entries for all
9588      the symbols that need them.  */
9589   if (hmips->global_got_area != GGA_NONE)
9590     {
9591       bfd_vma offset;
9592       bfd_vma value;
9593
9594       value = sym->st_value;
9595       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
9596                                           R_MIPS_GOT16, info);
9597       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
9598     }
9599
9600   if (hmips->global_got_area != GGA_NONE && g->next && h->type != STT_TLS)
9601     {
9602       struct mips_got_entry e, *p;
9603       bfd_vma entry;
9604       bfd_vma offset;
9605
9606       gg = g;
9607
9608       e.abfd = output_bfd;
9609       e.symndx = -1;
9610       e.d.h = hmips;
9611       e.tls_type = 0;
9612
9613       for (g = g->next; g->next != gg; g = g->next)
9614         {
9615           if (g->got_entries
9616               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
9617                                                            &e)))
9618             {
9619               offset = p->gotidx;
9620               if (info->shared
9621                   || (elf_hash_table (info)->dynamic_sections_created
9622                       && p->d.h != NULL
9623                       && p->d.h->root.def_dynamic
9624                       && !p->d.h->root.def_regular))
9625                 {
9626                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
9627                      the various compatibility problems, it's easier to mock
9628                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
9629                      mips_elf_create_dynamic_relocation to calculate the
9630                      appropriate addend.  */
9631                   Elf_Internal_Rela rel[3];
9632
9633                   memset (rel, 0, sizeof (rel));
9634                   if (ABI_64_P (output_bfd))
9635                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
9636                   else
9637                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
9638                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
9639
9640                   entry = 0;
9641                   if (! (mips_elf_create_dynamic_relocation
9642                          (output_bfd, info, rel,
9643                           e.d.h, NULL, sym->st_value, &entry, sgot)))
9644                     return FALSE;
9645                 }
9646               else
9647                 entry = sym->st_value;
9648               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
9649             }
9650         }
9651     }
9652
9653   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
9654   name = h->root.root.string;
9655   if (strcmp (name, "_DYNAMIC") == 0
9656       || h == elf_hash_table (info)->hgot)
9657     sym->st_shndx = SHN_ABS;
9658   else if (strcmp (name, "_DYNAMIC_LINK") == 0
9659            || strcmp (name, "_DYNAMIC_LINKING") == 0)
9660     {
9661       sym->st_shndx = SHN_ABS;
9662       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9663       sym->st_value = 1;
9664     }
9665   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
9666     {
9667       sym->st_shndx = SHN_ABS;
9668       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9669       sym->st_value = elf_gp (output_bfd);
9670     }
9671   else if (SGI_COMPAT (output_bfd))
9672     {
9673       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
9674           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
9675         {
9676           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9677           sym->st_other = STO_PROTECTED;
9678           sym->st_value = 0;
9679           sym->st_shndx = SHN_MIPS_DATA;
9680         }
9681       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
9682         {
9683           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9684           sym->st_other = STO_PROTECTED;
9685           sym->st_value = mips_elf_hash_table (info)->procedure_count;
9686           sym->st_shndx = SHN_ABS;
9687         }
9688       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
9689         {
9690           if (h->type == STT_FUNC)
9691             sym->st_shndx = SHN_MIPS_TEXT;
9692           else if (h->type == STT_OBJECT)
9693             sym->st_shndx = SHN_MIPS_DATA;
9694         }
9695     }
9696
9697   /* Emit a copy reloc, if needed.  */
9698   if (h->needs_copy)
9699     {
9700       asection *s;
9701       bfd_vma symval;
9702
9703       BFD_ASSERT (h->dynindx != -1);
9704       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9705
9706       s = mips_elf_rel_dyn_section (info, FALSE);
9707       symval = (h->root.u.def.section->output_section->vma
9708                 + h->root.u.def.section->output_offset
9709                 + h->root.u.def.value);
9710       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
9711                                           h->dynindx, R_MIPS_COPY, symval);
9712     }
9713
9714   /* Handle the IRIX6-specific symbols.  */
9715   if (IRIX_COMPAT (output_bfd) == ict_irix6)
9716     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
9717
9718   if (! info->shared)
9719     {
9720       if (! mips_elf_hash_table (info)->use_rld_obj_head
9721           && (strcmp (name, "__rld_map") == 0
9722               || strcmp (name, "__RLD_MAP") == 0))
9723         {
9724           asection *s = bfd_get_section_by_name (dynobj, ".rld_map");
9725           BFD_ASSERT (s != NULL);
9726           sym->st_value = s->output_section->vma + s->output_offset;
9727           bfd_put_32 (output_bfd, 0, s->contents);
9728           if (mips_elf_hash_table (info)->rld_value == 0)
9729             mips_elf_hash_table (info)->rld_value = sym->st_value;
9730         }
9731       else if (mips_elf_hash_table (info)->use_rld_obj_head
9732                && strcmp (name, "__rld_obj_head") == 0)
9733         {
9734           /* IRIX6 does not use a .rld_map section.  */
9735           if (IRIX_COMPAT (output_bfd) == ict_irix5
9736               || IRIX_COMPAT (output_bfd) == ict_none)
9737             BFD_ASSERT (bfd_get_section_by_name (dynobj, ".rld_map")
9738                         != NULL);
9739           mips_elf_hash_table (info)->rld_value = sym->st_value;
9740         }
9741     }
9742
9743   /* Keep dynamic MIPS16 symbols odd.  This allows the dynamic linker to
9744      treat MIPS16 symbols like any other.  */
9745   if (ELF_ST_IS_MIPS16 (sym->st_other))
9746     {
9747       BFD_ASSERT (sym->st_value & 1);
9748       sym->st_other -= STO_MIPS16;
9749     }
9750
9751   return TRUE;
9752 }
9753
9754 /* Likewise, for VxWorks.  */
9755
9756 bfd_boolean
9757 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
9758                                          struct bfd_link_info *info,
9759                                          struct elf_link_hash_entry *h,
9760                                          Elf_Internal_Sym *sym)
9761 {
9762   bfd *dynobj;
9763   asection *sgot;
9764   struct mips_got_info *g;
9765   struct mips_elf_link_hash_table *htab;
9766   struct mips_elf_link_hash_entry *hmips;
9767
9768   htab = mips_elf_hash_table (info);
9769   BFD_ASSERT (htab != NULL);
9770   dynobj = elf_hash_table (info)->dynobj;
9771   hmips = (struct mips_elf_link_hash_entry *) h;
9772
9773   if (h->plt.offset != (bfd_vma) -1)
9774     {
9775       bfd_byte *loc;
9776       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
9777       Elf_Internal_Rela rel;
9778       static const bfd_vma *plt_entry;
9779
9780       BFD_ASSERT (h->dynindx != -1);
9781       BFD_ASSERT (htab->splt != NULL);
9782       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9783
9784       /* Calculate the address of the .plt entry.  */
9785       plt_address = (htab->splt->output_section->vma
9786                      + htab->splt->output_offset
9787                      + h->plt.offset);
9788
9789       /* Calculate the index of the entry.  */
9790       plt_index = ((h->plt.offset - htab->plt_header_size)
9791                    / htab->plt_entry_size);
9792
9793       /* Calculate the address of the .got.plt entry.  */
9794       got_address = (htab->sgotplt->output_section->vma
9795                      + htab->sgotplt->output_offset
9796                      + plt_index * 4);
9797
9798       /* Calculate the offset of the .got.plt entry from
9799          _GLOBAL_OFFSET_TABLE_.  */
9800       got_offset = mips_elf_gotplt_index (info, h);
9801
9802       /* Calculate the offset for the branch at the start of the PLT
9803          entry.  The branch jumps to the beginning of .plt.  */
9804       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
9805
9806       /* Fill in the initial value of the .got.plt entry.  */
9807       bfd_put_32 (output_bfd, plt_address,
9808                   htab->sgotplt->contents + plt_index * 4);
9809
9810       /* Find out where the .plt entry should go.  */
9811       loc = htab->splt->contents + h->plt.offset;
9812
9813       if (info->shared)
9814         {
9815           plt_entry = mips_vxworks_shared_plt_entry;
9816           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
9817           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
9818         }
9819       else
9820         {
9821           bfd_vma got_address_high, got_address_low;
9822
9823           plt_entry = mips_vxworks_exec_plt_entry;
9824           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9825           got_address_low = got_address & 0xffff;
9826
9827           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
9828           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
9829           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
9830           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
9831           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
9832           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
9833           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
9834           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
9835
9836           loc = (htab->srelplt2->contents
9837                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
9838
9839           /* Emit a relocation for the .got.plt entry.  */
9840           rel.r_offset = got_address;
9841           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
9842           rel.r_addend = h->plt.offset;
9843           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
9844
9845           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
9846           loc += sizeof (Elf32_External_Rela);
9847           rel.r_offset = plt_address + 8;
9848           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
9849           rel.r_addend = got_offset;
9850           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
9851
9852           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
9853           loc += sizeof (Elf32_External_Rela);
9854           rel.r_offset += 4;
9855           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
9856           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
9857         }
9858
9859       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
9860       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
9861       rel.r_offset = got_address;
9862       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
9863       rel.r_addend = 0;
9864       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
9865
9866       if (!h->def_regular)
9867         sym->st_shndx = SHN_UNDEF;
9868     }
9869
9870   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
9871
9872   sgot = htab->sgot;
9873   g = htab->got_info;
9874   BFD_ASSERT (g != NULL);
9875
9876   /* See if this symbol has an entry in the GOT.  */
9877   if (hmips->global_got_area != GGA_NONE)
9878     {
9879       bfd_vma offset;
9880       Elf_Internal_Rela outrel;
9881       bfd_byte *loc;
9882       asection *s;
9883
9884       /* Install the symbol value in the GOT.   */
9885       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
9886                                           R_MIPS_GOT16, info);
9887       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
9888
9889       /* Add a dynamic relocation for it.  */
9890       s = mips_elf_rel_dyn_section (info, FALSE);
9891       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
9892       outrel.r_offset = (sgot->output_section->vma
9893                          + sgot->output_offset
9894                          + offset);
9895       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
9896       outrel.r_addend = 0;
9897       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
9898     }
9899
9900   /* Emit a copy reloc, if needed.  */
9901   if (h->needs_copy)
9902     {
9903       Elf_Internal_Rela rel;
9904
9905       BFD_ASSERT (h->dynindx != -1);
9906
9907       rel.r_offset = (h->root.u.def.section->output_section->vma
9908                       + h->root.u.def.section->output_offset
9909                       + h->root.u.def.value);
9910       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
9911       rel.r_addend = 0;
9912       bfd_elf32_swap_reloca_out (output_bfd, &rel,
9913                                  htab->srelbss->contents
9914                                  + (htab->srelbss->reloc_count
9915                                     * sizeof (Elf32_External_Rela)));
9916       ++htab->srelbss->reloc_count;
9917     }
9918
9919   /* If this is a mips16 symbol, force the value to be even.  */
9920   if (ELF_ST_IS_MIPS16 (sym->st_other))
9921     sym->st_value &= ~1;
9922
9923   return TRUE;
9924 }
9925
9926 /* Write out a plt0 entry to the beginning of .plt.  */
9927
9928 static void
9929 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
9930 {
9931   bfd_byte *loc;
9932   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
9933   static const bfd_vma *plt_entry;
9934   struct mips_elf_link_hash_table *htab;
9935
9936   htab = mips_elf_hash_table (info);
9937   BFD_ASSERT (htab != NULL);
9938
9939   if (ABI_64_P (output_bfd))
9940     plt_entry = mips_n64_exec_plt0_entry;
9941   else if (ABI_N32_P (output_bfd))
9942     plt_entry = mips_n32_exec_plt0_entry;
9943   else
9944     plt_entry = mips_o32_exec_plt0_entry;
9945
9946   /* Calculate the value of .got.plt.  */
9947   gotplt_value = (htab->sgotplt->output_section->vma
9948                   + htab->sgotplt->output_offset);
9949   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
9950   gotplt_value_low = gotplt_value & 0xffff;
9951
9952   /* The PLT sequence is not safe for N64 if .got.plt's address can
9953      not be loaded in two instructions.  */
9954   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
9955               || ~(gotplt_value | 0x7fffffff) == 0);
9956
9957   /* Install the PLT header.  */
9958   loc = htab->splt->contents;
9959   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
9960   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
9961   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
9962   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9963   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
9964   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
9965   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
9966   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
9967 }
9968
9969 /* Install the PLT header for a VxWorks executable and finalize the
9970    contents of .rela.plt.unloaded.  */
9971
9972 static void
9973 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
9974 {
9975   Elf_Internal_Rela rela;
9976   bfd_byte *loc;
9977   bfd_vma got_value, got_value_high, got_value_low, plt_address;
9978   static const bfd_vma *plt_entry;
9979   struct mips_elf_link_hash_table *htab;
9980
9981   htab = mips_elf_hash_table (info);
9982   BFD_ASSERT (htab != NULL);
9983
9984   plt_entry = mips_vxworks_exec_plt0_entry;
9985
9986   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
9987   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
9988                + htab->root.hgot->root.u.def.section->output_offset
9989                + htab->root.hgot->root.u.def.value);
9990
9991   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
9992   got_value_low = got_value & 0xffff;
9993
9994   /* Calculate the address of the PLT header.  */
9995   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
9996
9997   /* Install the PLT header.  */
9998   loc = htab->splt->contents;
9999   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10000   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10001   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10002   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10003   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10004   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10005
10006   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10007   loc = htab->srelplt2->contents;
10008   rela.r_offset = plt_address;
10009   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10010   rela.r_addend = 0;
10011   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10012   loc += sizeof (Elf32_External_Rela);
10013
10014   /* Output the relocation for the following addiu of
10015      %lo(_GLOBAL_OFFSET_TABLE_).  */
10016   rela.r_offset += 4;
10017   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10018   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10019   loc += sizeof (Elf32_External_Rela);
10020
10021   /* Fix up the remaining relocations.  They may have the wrong
10022      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10023      in which symbols were output.  */
10024   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10025     {
10026       Elf_Internal_Rela rel;
10027
10028       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10029       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10030       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10031       loc += sizeof (Elf32_External_Rela);
10032
10033       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10034       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10035       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10036       loc += sizeof (Elf32_External_Rela);
10037
10038       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10039       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10040       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10041       loc += sizeof (Elf32_External_Rela);
10042     }
10043 }
10044
10045 /* Install the PLT header for a VxWorks shared library.  */
10046
10047 static void
10048 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10049 {
10050   unsigned int i;
10051   struct mips_elf_link_hash_table *htab;
10052
10053   htab = mips_elf_hash_table (info);
10054   BFD_ASSERT (htab != NULL);
10055
10056   /* We just need to copy the entry byte-by-byte.  */
10057   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10058     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10059                 htab->splt->contents + i * 4);
10060 }
10061
10062 /* Finish up the dynamic sections.  */
10063
10064 bfd_boolean
10065 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10066                                        struct bfd_link_info *info)
10067 {
10068   bfd *dynobj;
10069   asection *sdyn;
10070   asection *sgot;
10071   struct mips_got_info *gg, *g;
10072   struct mips_elf_link_hash_table *htab;
10073
10074   htab = mips_elf_hash_table (info);
10075   BFD_ASSERT (htab != NULL);
10076
10077   dynobj = elf_hash_table (info)->dynobj;
10078
10079   sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
10080
10081   sgot = htab->sgot;
10082   gg = htab->got_info;
10083
10084   if (elf_hash_table (info)->dynamic_sections_created)
10085     {
10086       bfd_byte *b;
10087       int dyn_to_skip = 0, dyn_skipped = 0;
10088
10089       BFD_ASSERT (sdyn != NULL);
10090       BFD_ASSERT (gg != NULL);
10091
10092       g = mips_elf_got_for_ibfd (gg, output_bfd);
10093       BFD_ASSERT (g != NULL);
10094
10095       for (b = sdyn->contents;
10096            b < sdyn->contents + sdyn->size;
10097            b += MIPS_ELF_DYN_SIZE (dynobj))
10098         {
10099           Elf_Internal_Dyn dyn;
10100           const char *name;
10101           size_t elemsize;
10102           asection *s;
10103           bfd_boolean swap_out_p;
10104
10105           /* Read in the current dynamic entry.  */
10106           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10107
10108           /* Assume that we're going to modify it and write it out.  */
10109           swap_out_p = TRUE;
10110
10111           switch (dyn.d_tag)
10112             {
10113             case DT_RELENT:
10114               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10115               break;
10116
10117             case DT_RELAENT:
10118               BFD_ASSERT (htab->is_vxworks);
10119               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10120               break;
10121
10122             case DT_STRSZ:
10123               /* Rewrite DT_STRSZ.  */
10124               dyn.d_un.d_val =
10125                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10126               break;
10127
10128             case DT_PLTGOT:
10129               s = htab->sgot;
10130               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10131               break;
10132
10133             case DT_MIPS_PLTGOT:
10134               s = htab->sgotplt;
10135               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10136               break;
10137
10138             case DT_MIPS_RLD_VERSION:
10139               dyn.d_un.d_val = 1; /* XXX */
10140               break;
10141
10142             case DT_MIPS_FLAGS:
10143               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10144               break;
10145
10146             case DT_MIPS_TIME_STAMP:
10147               {
10148                 time_t t;
10149                 time (&t);
10150                 dyn.d_un.d_val = t;
10151               }
10152               break;
10153
10154             case DT_MIPS_ICHECKSUM:
10155               /* XXX FIXME: */
10156               swap_out_p = FALSE;
10157               break;
10158
10159             case DT_MIPS_IVERSION:
10160               /* XXX FIXME: */
10161               swap_out_p = FALSE;
10162               break;
10163
10164             case DT_MIPS_BASE_ADDRESS:
10165               s = output_bfd->sections;
10166               BFD_ASSERT (s != NULL);
10167               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10168               break;
10169
10170             case DT_MIPS_LOCAL_GOTNO:
10171               dyn.d_un.d_val = g->local_gotno;
10172               break;
10173
10174             case DT_MIPS_UNREFEXTNO:
10175               /* The index into the dynamic symbol table which is the
10176                  entry of the first external symbol that is not
10177                  referenced within the same object.  */
10178               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10179               break;
10180
10181             case DT_MIPS_GOTSYM:
10182               if (gg->global_gotsym)
10183                 {
10184                   dyn.d_un.d_val = gg->global_gotsym->dynindx;
10185                   break;
10186                 }
10187               /* In case if we don't have global got symbols we default
10188                  to setting DT_MIPS_GOTSYM to the same value as
10189                  DT_MIPS_SYMTABNO, so we just fall through.  */
10190
10191             case DT_MIPS_SYMTABNO:
10192               name = ".dynsym";
10193               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10194               s = bfd_get_section_by_name (output_bfd, name);
10195               BFD_ASSERT (s != NULL);
10196
10197               dyn.d_un.d_val = s->size / elemsize;
10198               break;
10199
10200             case DT_MIPS_HIPAGENO:
10201               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10202               break;
10203
10204             case DT_MIPS_RLD_MAP:
10205               dyn.d_un.d_ptr = mips_elf_hash_table (info)->rld_value;
10206               break;
10207
10208             case DT_MIPS_OPTIONS:
10209               s = (bfd_get_section_by_name
10210                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10211               dyn.d_un.d_ptr = s->vma;
10212               break;
10213
10214             case DT_RELASZ:
10215               BFD_ASSERT (htab->is_vxworks);
10216               /* The count does not include the JUMP_SLOT relocations.  */
10217               if (htab->srelplt)
10218                 dyn.d_un.d_val -= htab->srelplt->size;
10219               break;
10220
10221             case DT_PLTREL:
10222               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10223               if (htab->is_vxworks)
10224                 dyn.d_un.d_val = DT_RELA;
10225               else
10226                 dyn.d_un.d_val = DT_REL;
10227               break;
10228
10229             case DT_PLTRELSZ:
10230               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10231               dyn.d_un.d_val = htab->srelplt->size;
10232               break;
10233
10234             case DT_JMPREL:
10235               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10236               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10237                                 + htab->srelplt->output_offset);
10238               break;
10239
10240             case DT_TEXTREL:
10241               /* If we didn't need any text relocations after all, delete
10242                  the dynamic tag.  */
10243               if (!(info->flags & DF_TEXTREL))
10244                 {
10245                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10246                   swap_out_p = FALSE;
10247                 }
10248               break;
10249
10250             case DT_FLAGS:
10251               /* If we didn't need any text relocations after all, clear
10252                  DF_TEXTREL from DT_FLAGS.  */
10253               if (!(info->flags & DF_TEXTREL))
10254                 dyn.d_un.d_val &= ~DF_TEXTREL;
10255               else
10256                 swap_out_p = FALSE;
10257               break;
10258
10259             default:
10260               swap_out_p = FALSE;
10261               if (htab->is_vxworks
10262                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10263                 swap_out_p = TRUE;
10264               break;
10265             }
10266
10267           if (swap_out_p || dyn_skipped)
10268             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10269               (dynobj, &dyn, b - dyn_skipped);
10270
10271           if (dyn_to_skip)
10272             {
10273               dyn_skipped += dyn_to_skip;
10274               dyn_to_skip = 0;
10275             }
10276         }
10277
10278       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10279       if (dyn_skipped > 0)
10280         memset (b - dyn_skipped, 0, dyn_skipped);
10281     }
10282
10283   if (sgot != NULL && sgot->size > 0
10284       && !bfd_is_abs_section (sgot->output_section))
10285     {
10286       if (htab->is_vxworks)
10287         {
10288           /* The first entry of the global offset table points to the
10289              ".dynamic" section.  The second is initialized by the
10290              loader and contains the shared library identifier.
10291              The third is also initialized by the loader and points
10292              to the lazy resolution stub.  */
10293           MIPS_ELF_PUT_WORD (output_bfd,
10294                              sdyn->output_offset + sdyn->output_section->vma,
10295                              sgot->contents);
10296           MIPS_ELF_PUT_WORD (output_bfd, 0,
10297                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10298           MIPS_ELF_PUT_WORD (output_bfd, 0,
10299                              sgot->contents
10300                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10301         }
10302       else
10303         {
10304           /* The first entry of the global offset table will be filled at
10305              runtime. The second entry will be used by some runtime loaders.
10306              This isn't the case of IRIX rld.  */
10307           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10308           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10309                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10310         }
10311
10312       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10313          = MIPS_ELF_GOT_SIZE (output_bfd);
10314     }
10315
10316   /* Generate dynamic relocations for the non-primary gots.  */
10317   if (gg != NULL && gg->next)
10318     {
10319       Elf_Internal_Rela rel[3];
10320       bfd_vma addend = 0;
10321
10322       memset (rel, 0, sizeof (rel));
10323       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10324
10325       for (g = gg->next; g->next != gg; g = g->next)
10326         {
10327           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10328             + g->next->tls_gotno;
10329
10330           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10331                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10332           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10333                              sgot->contents
10334                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10335
10336           if (! info->shared)
10337             continue;
10338
10339           while (got_index < g->assigned_gotno)
10340             {
10341               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10342                 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10343               if (!(mips_elf_create_dynamic_relocation
10344                     (output_bfd, info, rel, NULL,
10345                      bfd_abs_section_ptr,
10346                      0, &addend, sgot)))
10347                 return FALSE;
10348               BFD_ASSERT (addend == 0);
10349             }
10350         }
10351     }
10352
10353   /* The generation of dynamic relocations for the non-primary gots
10354      adds more dynamic relocations.  We cannot count them until
10355      here.  */
10356
10357   if (elf_hash_table (info)->dynamic_sections_created)
10358     {
10359       bfd_byte *b;
10360       bfd_boolean swap_out_p;
10361
10362       BFD_ASSERT (sdyn != NULL);
10363
10364       for (b = sdyn->contents;
10365            b < sdyn->contents + sdyn->size;
10366            b += MIPS_ELF_DYN_SIZE (dynobj))
10367         {
10368           Elf_Internal_Dyn dyn;
10369           asection *s;
10370
10371           /* Read in the current dynamic entry.  */
10372           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10373
10374           /* Assume that we're going to modify it and write it out.  */
10375           swap_out_p = TRUE;
10376
10377           switch (dyn.d_tag)
10378             {
10379             case DT_RELSZ:
10380               /* Reduce DT_RELSZ to account for any relocations we
10381                  decided not to make.  This is for the n64 irix rld,
10382                  which doesn't seem to apply any relocations if there
10383                  are trailing null entries.  */
10384               s = mips_elf_rel_dyn_section (info, FALSE);
10385               dyn.d_un.d_val = (s->reloc_count
10386                                 * (ABI_64_P (output_bfd)
10387                                    ? sizeof (Elf64_Mips_External_Rel)
10388                                    : sizeof (Elf32_External_Rel)));
10389               /* Adjust the section size too.  Tools like the prelinker
10390                  can reasonably expect the values to the same.  */
10391               elf_section_data (s->output_section)->this_hdr.sh_size
10392                 = dyn.d_un.d_val;
10393               break;
10394
10395             default:
10396               swap_out_p = FALSE;
10397               break;
10398             }
10399
10400           if (swap_out_p)
10401             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10402               (dynobj, &dyn, b);
10403         }
10404     }
10405
10406   {
10407     asection *s;
10408     Elf32_compact_rel cpt;
10409
10410     if (SGI_COMPAT (output_bfd))
10411       {
10412         /* Write .compact_rel section out.  */
10413         s = bfd_get_section_by_name (dynobj, ".compact_rel");
10414         if (s != NULL)
10415           {
10416             cpt.id1 = 1;
10417             cpt.num = s->reloc_count;
10418             cpt.id2 = 2;
10419             cpt.offset = (s->output_section->filepos
10420                           + sizeof (Elf32_External_compact_rel));
10421             cpt.reserved0 = 0;
10422             cpt.reserved1 = 0;
10423             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10424                                             ((Elf32_External_compact_rel *)
10425                                              s->contents));
10426
10427             /* Clean up a dummy stub function entry in .text.  */
10428             if (htab->sstubs != NULL)
10429               {
10430                 file_ptr dummy_offset;
10431
10432                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10433                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10434                 memset (htab->sstubs->contents + dummy_offset, 0,
10435                         htab->function_stub_size);
10436               }
10437           }
10438       }
10439
10440     /* The psABI says that the dynamic relocations must be sorted in
10441        increasing order of r_symndx.  The VxWorks EABI doesn't require
10442        this, and because the code below handles REL rather than RELA
10443        relocations, using it for VxWorks would be outright harmful.  */
10444     if (!htab->is_vxworks)
10445       {
10446         s = mips_elf_rel_dyn_section (info, FALSE);
10447         if (s != NULL
10448             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10449           {
10450             reldyn_sorting_bfd = output_bfd;
10451
10452             if (ABI_64_P (output_bfd))
10453               qsort ((Elf64_External_Rel *) s->contents + 1,
10454                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10455                      sort_dynamic_relocs_64);
10456             else
10457               qsort ((Elf32_External_Rel *) s->contents + 1,
10458                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
10459                      sort_dynamic_relocs);
10460           }
10461       }
10462   }
10463
10464   if (htab->splt && htab->splt->size > 0)
10465     {
10466       if (htab->is_vxworks)
10467         {
10468           if (info->shared)
10469             mips_vxworks_finish_shared_plt (output_bfd, info);
10470           else
10471             mips_vxworks_finish_exec_plt (output_bfd, info);
10472         }
10473       else
10474         {
10475           BFD_ASSERT (!info->shared);
10476           mips_finish_exec_plt (output_bfd, info);
10477         }
10478     }
10479   return TRUE;
10480 }
10481
10482
10483 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10484
10485 static void
10486 mips_set_isa_flags (bfd *abfd)
10487 {
10488   flagword val;
10489
10490   switch (bfd_get_mach (abfd))
10491     {
10492     default:
10493     case bfd_mach_mips3000:
10494       val = E_MIPS_ARCH_1;
10495       break;
10496
10497     case bfd_mach_mips3900:
10498       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10499       break;
10500
10501     case bfd_mach_mips6000:
10502       val = E_MIPS_ARCH_2;
10503       break;
10504
10505     case bfd_mach_mips4000:
10506     case bfd_mach_mips4300:
10507     case bfd_mach_mips4400:
10508     case bfd_mach_mips4600:
10509       val = E_MIPS_ARCH_3;
10510       break;
10511
10512     case bfd_mach_mips4010:
10513       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
10514       break;
10515
10516     case bfd_mach_mips4100:
10517       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
10518       break;
10519
10520     case bfd_mach_mips4111:
10521       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
10522       break;
10523
10524     case bfd_mach_mips4120:
10525       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
10526       break;
10527
10528     case bfd_mach_mips4650:
10529       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
10530       break;
10531
10532     case bfd_mach_mips5400:
10533       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
10534       break;
10535
10536     case bfd_mach_mips5500:
10537       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
10538       break;
10539
10540     case bfd_mach_mips9000:
10541       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
10542       break;
10543
10544     case bfd_mach_mips5000:
10545     case bfd_mach_mips7000:
10546     case bfd_mach_mips8000:
10547     case bfd_mach_mips10000:
10548     case bfd_mach_mips12000:
10549     case bfd_mach_mips14000:
10550     case bfd_mach_mips16000:
10551       val = E_MIPS_ARCH_4;
10552       break;
10553
10554     case bfd_mach_mips5:
10555       val = E_MIPS_ARCH_5;
10556       break;
10557
10558     case bfd_mach_mips_loongson_2e:
10559       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
10560       break;
10561
10562     case bfd_mach_mips_loongson_2f:
10563       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
10564       break;
10565
10566     case bfd_mach_mips_sb1:
10567       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
10568       break;
10569
10570     case bfd_mach_mips_loongson_3a:
10571       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
10572       break;
10573
10574     case bfd_mach_mips_octeon:
10575       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
10576       break;
10577
10578     case bfd_mach_mips_xlr:
10579       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
10580       break;
10581
10582     case bfd_mach_mipsisa32:
10583       val = E_MIPS_ARCH_32;
10584       break;
10585
10586     case bfd_mach_mipsisa64:
10587       val = E_MIPS_ARCH_64;
10588       break;
10589
10590     case bfd_mach_mipsisa32r2:
10591       val = E_MIPS_ARCH_32R2;
10592       break;
10593
10594     case bfd_mach_mipsisa64r2:
10595       val = E_MIPS_ARCH_64R2;
10596       break;
10597     }
10598   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
10599   elf_elfheader (abfd)->e_flags |= val;
10600
10601 }
10602
10603
10604 /* The final processing done just before writing out a MIPS ELF object
10605    file.  This gets the MIPS architecture right based on the machine
10606    number.  This is used by both the 32-bit and the 64-bit ABI.  */
10607
10608 void
10609 _bfd_mips_elf_final_write_processing (bfd *abfd,
10610                                       bfd_boolean linker ATTRIBUTE_UNUSED)
10611 {
10612   unsigned int i;
10613   Elf_Internal_Shdr **hdrpp;
10614   const char *name;
10615   asection *sec;
10616
10617   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
10618      is nonzero.  This is for compatibility with old objects, which used
10619      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
10620   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
10621     mips_set_isa_flags (abfd);
10622
10623   /* Set the sh_info field for .gptab sections and other appropriate
10624      info for each special section.  */
10625   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
10626        i < elf_numsections (abfd);
10627        i++, hdrpp++)
10628     {
10629       switch ((*hdrpp)->sh_type)
10630         {
10631         case SHT_MIPS_MSYM:
10632         case SHT_MIPS_LIBLIST:
10633           sec = bfd_get_section_by_name (abfd, ".dynstr");
10634           if (sec != NULL)
10635             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
10636           break;
10637
10638         case SHT_MIPS_GPTAB:
10639           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
10640           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
10641           BFD_ASSERT (name != NULL
10642                       && CONST_STRNEQ (name, ".gptab."));
10643           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
10644           BFD_ASSERT (sec != NULL);
10645           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
10646           break;
10647
10648         case SHT_MIPS_CONTENT:
10649           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
10650           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
10651           BFD_ASSERT (name != NULL
10652                       && CONST_STRNEQ (name, ".MIPS.content"));
10653           sec = bfd_get_section_by_name (abfd,
10654                                          name + sizeof ".MIPS.content" - 1);
10655           BFD_ASSERT (sec != NULL);
10656           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
10657           break;
10658
10659         case SHT_MIPS_SYMBOL_LIB:
10660           sec = bfd_get_section_by_name (abfd, ".dynsym");
10661           if (sec != NULL)
10662             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
10663           sec = bfd_get_section_by_name (abfd, ".liblist");
10664           if (sec != NULL)
10665             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
10666           break;
10667
10668         case SHT_MIPS_EVENTS:
10669           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
10670           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
10671           BFD_ASSERT (name != NULL);
10672           if (CONST_STRNEQ (name, ".MIPS.events"))
10673             sec = bfd_get_section_by_name (abfd,
10674                                            name + sizeof ".MIPS.events" - 1);
10675           else
10676             {
10677               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
10678               sec = bfd_get_section_by_name (abfd,
10679                                              (name
10680                                               + sizeof ".MIPS.post_rel" - 1));
10681             }
10682           BFD_ASSERT (sec != NULL);
10683           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
10684           break;
10685
10686         }
10687     }
10688 }
10689 \f
10690 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
10691    segments.  */
10692
10693 int
10694 _bfd_mips_elf_additional_program_headers (bfd *abfd,
10695                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
10696 {
10697   asection *s;
10698   int ret = 0;
10699
10700   /* See if we need a PT_MIPS_REGINFO segment.  */
10701   s = bfd_get_section_by_name (abfd, ".reginfo");
10702   if (s && (s->flags & SEC_LOAD))
10703     ++ret;
10704
10705   /* See if we need a PT_MIPS_OPTIONS segment.  */
10706   if (IRIX_COMPAT (abfd) == ict_irix6
10707       && bfd_get_section_by_name (abfd,
10708                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
10709     ++ret;
10710
10711   /* See if we need a PT_MIPS_RTPROC segment.  */
10712   if (IRIX_COMPAT (abfd) == ict_irix5
10713       && bfd_get_section_by_name (abfd, ".dynamic")
10714       && bfd_get_section_by_name (abfd, ".mdebug"))
10715     ++ret;
10716
10717   /* Allocate a PT_NULL header in dynamic objects.  See
10718      _bfd_mips_elf_modify_segment_map for details.  */
10719   if (!SGI_COMPAT (abfd)
10720       && bfd_get_section_by_name (abfd, ".dynamic"))
10721     ++ret;
10722
10723   return ret;
10724 }
10725
10726 /* Modify the segment map for an IRIX5 executable.  */
10727
10728 bfd_boolean
10729 _bfd_mips_elf_modify_segment_map (bfd *abfd,
10730                                   struct bfd_link_info *info)
10731 {
10732   asection *s;
10733   struct elf_segment_map *m, **pm;
10734   bfd_size_type amt;
10735
10736   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
10737      segment.  */
10738   s = bfd_get_section_by_name (abfd, ".reginfo");
10739   if (s != NULL && (s->flags & SEC_LOAD) != 0)
10740     {
10741       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
10742         if (m->p_type == PT_MIPS_REGINFO)
10743           break;
10744       if (m == NULL)
10745         {
10746           amt = sizeof *m;
10747           m = bfd_zalloc (abfd, amt);
10748           if (m == NULL)
10749             return FALSE;
10750
10751           m->p_type = PT_MIPS_REGINFO;
10752           m->count = 1;
10753           m->sections[0] = s;
10754
10755           /* We want to put it after the PHDR and INTERP segments.  */
10756           pm = &elf_tdata (abfd)->segment_map;
10757           while (*pm != NULL
10758                  && ((*pm)->p_type == PT_PHDR
10759                      || (*pm)->p_type == PT_INTERP))
10760             pm = &(*pm)->next;
10761
10762           m->next = *pm;
10763           *pm = m;
10764         }
10765     }
10766
10767   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
10768      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
10769      PT_MIPS_OPTIONS segment immediately following the program header
10770      table.  */
10771   if (NEWABI_P (abfd)
10772       /* On non-IRIX6 new abi, we'll have already created a segment
10773          for this section, so don't create another.  I'm not sure this
10774          is not also the case for IRIX 6, but I can't test it right
10775          now.  */
10776       && IRIX_COMPAT (abfd) == ict_irix6)
10777     {
10778       for (s = abfd->sections; s; s = s->next)
10779         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
10780           break;
10781
10782       if (s)
10783         {
10784           struct elf_segment_map *options_segment;
10785
10786           pm = &elf_tdata (abfd)->segment_map;
10787           while (*pm != NULL
10788                  && ((*pm)->p_type == PT_PHDR
10789                      || (*pm)->p_type == PT_INTERP))
10790             pm = &(*pm)->next;
10791
10792           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
10793             {
10794               amt = sizeof (struct elf_segment_map);
10795               options_segment = bfd_zalloc (abfd, amt);
10796               options_segment->next = *pm;
10797               options_segment->p_type = PT_MIPS_OPTIONS;
10798               options_segment->p_flags = PF_R;
10799               options_segment->p_flags_valid = TRUE;
10800               options_segment->count = 1;
10801               options_segment->sections[0] = s;
10802               *pm = options_segment;
10803             }
10804         }
10805     }
10806   else
10807     {
10808       if (IRIX_COMPAT (abfd) == ict_irix5)
10809         {
10810           /* If there are .dynamic and .mdebug sections, we make a room
10811              for the RTPROC header.  FIXME: Rewrite without section names.  */
10812           if (bfd_get_section_by_name (abfd, ".interp") == NULL
10813               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
10814               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
10815             {
10816               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
10817                 if (m->p_type == PT_MIPS_RTPROC)
10818                   break;
10819               if (m == NULL)
10820                 {
10821                   amt = sizeof *m;
10822                   m = bfd_zalloc (abfd, amt);
10823                   if (m == NULL)
10824                     return FALSE;
10825
10826                   m->p_type = PT_MIPS_RTPROC;
10827
10828                   s = bfd_get_section_by_name (abfd, ".rtproc");
10829                   if (s == NULL)
10830                     {
10831                       m->count = 0;
10832                       m->p_flags = 0;
10833                       m->p_flags_valid = 1;
10834                     }
10835                   else
10836                     {
10837                       m->count = 1;
10838                       m->sections[0] = s;
10839                     }
10840
10841                   /* We want to put it after the DYNAMIC segment.  */
10842                   pm = &elf_tdata (abfd)->segment_map;
10843                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
10844                     pm = &(*pm)->next;
10845                   if (*pm != NULL)
10846                     pm = &(*pm)->next;
10847
10848                   m->next = *pm;
10849                   *pm = m;
10850                 }
10851             }
10852         }
10853       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
10854          .dynstr, .dynsym, and .hash sections, and everything in
10855          between.  */
10856       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
10857            pm = &(*pm)->next)
10858         if ((*pm)->p_type == PT_DYNAMIC)
10859           break;
10860       m = *pm;
10861       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
10862         {
10863           /* For a normal mips executable the permissions for the PT_DYNAMIC
10864              segment are read, write and execute. We do that here since
10865              the code in elf.c sets only the read permission. This matters
10866              sometimes for the dynamic linker.  */
10867           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
10868             {
10869               m->p_flags = PF_R | PF_W | PF_X;
10870               m->p_flags_valid = 1;
10871             }
10872         }
10873       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
10874          glibc's dynamic linker has traditionally derived the number of
10875          tags from the p_filesz field, and sometimes allocates stack
10876          arrays of that size.  An overly-big PT_DYNAMIC segment can
10877          be actively harmful in such cases.  Making PT_DYNAMIC contain
10878          other sections can also make life hard for the prelinker,
10879          which might move one of the other sections to a different
10880          PT_LOAD segment.  */
10881       if (SGI_COMPAT (abfd)
10882           && m != NULL
10883           && m->count == 1
10884           && strcmp (m->sections[0]->name, ".dynamic") == 0)
10885         {
10886           static const char *sec_names[] =
10887           {
10888             ".dynamic", ".dynstr", ".dynsym", ".hash"
10889           };
10890           bfd_vma low, high;
10891           unsigned int i, c;
10892           struct elf_segment_map *n;
10893
10894           low = ~(bfd_vma) 0;
10895           high = 0;
10896           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
10897             {
10898               s = bfd_get_section_by_name (abfd, sec_names[i]);
10899               if (s != NULL && (s->flags & SEC_LOAD) != 0)
10900                 {
10901                   bfd_size_type sz;
10902
10903                   if (low > s->vma)
10904                     low = s->vma;
10905                   sz = s->size;
10906                   if (high < s->vma + sz)
10907                     high = s->vma + sz;
10908                 }
10909             }
10910
10911           c = 0;
10912           for (s = abfd->sections; s != NULL; s = s->next)
10913             if ((s->flags & SEC_LOAD) != 0
10914                 && s->vma >= low
10915                 && s->vma + s->size <= high)
10916               ++c;
10917
10918           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
10919           n = bfd_zalloc (abfd, amt);
10920           if (n == NULL)
10921             return FALSE;
10922           *n = *m;
10923           n->count = c;
10924
10925           i = 0;
10926           for (s = abfd->sections; s != NULL; s = s->next)
10927             {
10928               if ((s->flags & SEC_LOAD) != 0
10929                   && s->vma >= low
10930                   && s->vma + s->size <= high)
10931                 {
10932                   n->sections[i] = s;
10933                   ++i;
10934                 }
10935             }
10936
10937           *pm = n;
10938         }
10939     }
10940
10941   /* Allocate a spare program header in dynamic objects so that tools
10942      like the prelinker can add an extra PT_LOAD entry.
10943
10944      If the prelinker needs to make room for a new PT_LOAD entry, its
10945      standard procedure is to move the first (read-only) sections into
10946      the new (writable) segment.  However, the MIPS ABI requires
10947      .dynamic to be in a read-only segment, and the section will often
10948      start within sizeof (ElfNN_Phdr) bytes of the last program header.
10949
10950      Although the prelinker could in principle move .dynamic to a
10951      writable segment, it seems better to allocate a spare program
10952      header instead, and avoid the need to move any sections.
10953      There is a long tradition of allocating spare dynamic tags,
10954      so allocating a spare program header seems like a natural
10955      extension.
10956
10957      If INFO is NULL, we may be copying an already prelinked binary
10958      with objcopy or strip, so do not add this header.  */
10959   if (info != NULL
10960       && !SGI_COMPAT (abfd)
10961       && bfd_get_section_by_name (abfd, ".dynamic"))
10962     {
10963       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
10964         if ((*pm)->p_type == PT_NULL)
10965           break;
10966       if (*pm == NULL)
10967         {
10968           m = bfd_zalloc (abfd, sizeof (*m));
10969           if (m == NULL)
10970             return FALSE;
10971
10972           m->p_type = PT_NULL;
10973           *pm = m;
10974         }
10975     }
10976
10977   return TRUE;
10978 }
10979 \f
10980 /* Return the section that should be marked against GC for a given
10981    relocation.  */
10982
10983 asection *
10984 _bfd_mips_elf_gc_mark_hook (asection *sec,
10985                             struct bfd_link_info *info,
10986                             Elf_Internal_Rela *rel,
10987                             struct elf_link_hash_entry *h,
10988                             Elf_Internal_Sym *sym)
10989 {
10990   /* ??? Do mips16 stub sections need to be handled special?  */
10991
10992   if (h != NULL)
10993     switch (ELF_R_TYPE (sec->owner, rel->r_info))
10994       {
10995       case R_MIPS_GNU_VTINHERIT:
10996       case R_MIPS_GNU_VTENTRY:
10997         return NULL;
10998       }
10999
11000   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11001 }
11002
11003 /* Update the got entry reference counts for the section being removed.  */
11004
11005 bfd_boolean
11006 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11007                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
11008                              asection *sec ATTRIBUTE_UNUSED,
11009                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11010 {
11011 #if 0
11012   Elf_Internal_Shdr *symtab_hdr;
11013   struct elf_link_hash_entry **sym_hashes;
11014   bfd_signed_vma *local_got_refcounts;
11015   const Elf_Internal_Rela *rel, *relend;
11016   unsigned long r_symndx;
11017   struct elf_link_hash_entry *h;
11018
11019   if (info->relocatable)
11020     return TRUE;
11021
11022   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11023   sym_hashes = elf_sym_hashes (abfd);
11024   local_got_refcounts = elf_local_got_refcounts (abfd);
11025
11026   relend = relocs + sec->reloc_count;
11027   for (rel = relocs; rel < relend; rel++)
11028     switch (ELF_R_TYPE (abfd, rel->r_info))
11029       {
11030       case R_MIPS16_GOT16:
11031       case R_MIPS16_CALL16:
11032       case R_MIPS_GOT16:
11033       case R_MIPS_CALL16:
11034       case R_MIPS_CALL_HI16:
11035       case R_MIPS_CALL_LO16:
11036       case R_MIPS_GOT_HI16:
11037       case R_MIPS_GOT_LO16:
11038       case R_MIPS_GOT_DISP:
11039       case R_MIPS_GOT_PAGE:
11040       case R_MIPS_GOT_OFST:
11041         /* ??? It would seem that the existing MIPS code does no sort
11042            of reference counting or whatnot on its GOT and PLT entries,
11043            so it is not possible to garbage collect them at this time.  */
11044         break;
11045
11046       default:
11047         break;
11048       }
11049 #endif
11050
11051   return TRUE;
11052 }
11053 \f
11054 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11055    hiding the old indirect symbol.  Process additional relocation
11056    information.  Also called for weakdefs, in which case we just let
11057    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11058
11059 void
11060 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11061                                     struct elf_link_hash_entry *dir,
11062                                     struct elf_link_hash_entry *ind)
11063 {
11064   struct mips_elf_link_hash_entry *dirmips, *indmips;
11065
11066   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11067
11068   dirmips = (struct mips_elf_link_hash_entry *) dir;
11069   indmips = (struct mips_elf_link_hash_entry *) ind;
11070   /* Any absolute non-dynamic relocations against an indirect or weak
11071      definition will be against the target symbol.  */
11072   if (indmips->has_static_relocs)
11073     dirmips->has_static_relocs = TRUE;
11074
11075   if (ind->root.type != bfd_link_hash_indirect)
11076     return;
11077
11078   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11079   if (indmips->readonly_reloc)
11080     dirmips->readonly_reloc = TRUE;
11081   if (indmips->no_fn_stub)
11082     dirmips->no_fn_stub = TRUE;
11083   if (indmips->fn_stub)
11084     {
11085       dirmips->fn_stub = indmips->fn_stub;
11086       indmips->fn_stub = NULL;
11087     }
11088   if (indmips->need_fn_stub)
11089     {
11090       dirmips->need_fn_stub = TRUE;
11091       indmips->need_fn_stub = FALSE;
11092     }
11093   if (indmips->call_stub)
11094     {
11095       dirmips->call_stub = indmips->call_stub;
11096       indmips->call_stub = NULL;
11097     }
11098   if (indmips->call_fp_stub)
11099     {
11100       dirmips->call_fp_stub = indmips->call_fp_stub;
11101       indmips->call_fp_stub = NULL;
11102     }
11103   if (indmips->global_got_area < dirmips->global_got_area)
11104     dirmips->global_got_area = indmips->global_got_area;
11105   if (indmips->global_got_area < GGA_NONE)
11106     indmips->global_got_area = GGA_NONE;
11107   if (indmips->has_nonpic_branches)
11108     dirmips->has_nonpic_branches = TRUE;
11109
11110   if (dirmips->tls_type == 0)
11111     dirmips->tls_type = indmips->tls_type;
11112 }
11113 \f
11114 #define PDR_SIZE 32
11115
11116 bfd_boolean
11117 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11118                             struct bfd_link_info *info)
11119 {
11120   asection *o;
11121   bfd_boolean ret = FALSE;
11122   unsigned char *tdata;
11123   size_t i, skip;
11124
11125   o = bfd_get_section_by_name (abfd, ".pdr");
11126   if (! o)
11127     return FALSE;
11128   if (o->size == 0)
11129     return FALSE;
11130   if (o->size % PDR_SIZE != 0)
11131     return FALSE;
11132   if (o->output_section != NULL
11133       && bfd_is_abs_section (o->output_section))
11134     return FALSE;
11135
11136   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11137   if (! tdata)
11138     return FALSE;
11139
11140   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11141                                             info->keep_memory);
11142   if (!cookie->rels)
11143     {
11144       free (tdata);
11145       return FALSE;
11146     }
11147
11148   cookie->rel = cookie->rels;
11149   cookie->relend = cookie->rels + o->reloc_count;
11150
11151   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11152     {
11153       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11154         {
11155           tdata[i] = 1;
11156           skip ++;
11157         }
11158     }
11159
11160   if (skip != 0)
11161     {
11162       mips_elf_section_data (o)->u.tdata = tdata;
11163       o->size -= skip * PDR_SIZE;
11164       ret = TRUE;
11165     }
11166   else
11167     free (tdata);
11168
11169   if (! info->keep_memory)
11170     free (cookie->rels);
11171
11172   return ret;
11173 }
11174
11175 bfd_boolean
11176 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11177 {
11178   if (strcmp (sec->name, ".pdr") == 0)
11179     return TRUE;
11180   return FALSE;
11181 }
11182
11183 bfd_boolean
11184 _bfd_mips_elf_write_section (bfd *output_bfd,
11185                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11186                              asection *sec, bfd_byte *contents)
11187 {
11188   bfd_byte *to, *from, *end;
11189   int i;
11190
11191   if (strcmp (sec->name, ".pdr") != 0)
11192     return FALSE;
11193
11194   if (mips_elf_section_data (sec)->u.tdata == NULL)
11195     return FALSE;
11196
11197   to = contents;
11198   end = contents + sec->size;
11199   for (from = contents, i = 0;
11200        from < end;
11201        from += PDR_SIZE, i++)
11202     {
11203       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11204         continue;
11205       if (to != from)
11206         memcpy (to, from, PDR_SIZE);
11207       to += PDR_SIZE;
11208     }
11209   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11210                             sec->output_offset, sec->size);
11211   return TRUE;
11212 }
11213 \f
11214 /* MIPS ELF uses a special find_nearest_line routine in order the
11215    handle the ECOFF debugging information.  */
11216
11217 struct mips_elf_find_line
11218 {
11219   struct ecoff_debug_info d;
11220   struct ecoff_find_line i;
11221 };
11222
11223 bfd_boolean
11224 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11225                                  asymbol **symbols, bfd_vma offset,
11226                                  const char **filename_ptr,
11227                                  const char **functionname_ptr,
11228                                  unsigned int *line_ptr)
11229 {
11230   asection *msec;
11231
11232   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11233                                      filename_ptr, functionname_ptr,
11234                                      line_ptr))
11235     return TRUE;
11236
11237   if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
11238                                      filename_ptr, functionname_ptr,
11239                                      line_ptr, ABI_64_P (abfd) ? 8 : 0,
11240                                      &elf_tdata (abfd)->dwarf2_find_line_info))
11241     return TRUE;
11242
11243   msec = bfd_get_section_by_name (abfd, ".mdebug");
11244   if (msec != NULL)
11245     {
11246       flagword origflags;
11247       struct mips_elf_find_line *fi;
11248       const struct ecoff_debug_swap * const swap =
11249         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11250
11251       /* If we are called during a link, mips_elf_final_link may have
11252          cleared the SEC_HAS_CONTENTS field.  We force it back on here
11253          if appropriate (which it normally will be).  */
11254       origflags = msec->flags;
11255       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11256         msec->flags |= SEC_HAS_CONTENTS;
11257
11258       fi = elf_tdata (abfd)->find_line_info;
11259       if (fi == NULL)
11260         {
11261           bfd_size_type external_fdr_size;
11262           char *fraw_src;
11263           char *fraw_end;
11264           struct fdr *fdr_ptr;
11265           bfd_size_type amt = sizeof (struct mips_elf_find_line);
11266
11267           fi = bfd_zalloc (abfd, amt);
11268           if (fi == NULL)
11269             {
11270               msec->flags = origflags;
11271               return FALSE;
11272             }
11273
11274           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11275             {
11276               msec->flags = origflags;
11277               return FALSE;
11278             }
11279
11280           /* Swap in the FDR information.  */
11281           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11282           fi->d.fdr = bfd_alloc (abfd, amt);
11283           if (fi->d.fdr == NULL)
11284             {
11285               msec->flags = origflags;
11286               return FALSE;
11287             }
11288           external_fdr_size = swap->external_fdr_size;
11289           fdr_ptr = fi->d.fdr;
11290           fraw_src = (char *) fi->d.external_fdr;
11291           fraw_end = (fraw_src
11292                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
11293           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11294             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11295
11296           elf_tdata (abfd)->find_line_info = fi;
11297
11298           /* Note that we don't bother to ever free this information.
11299              find_nearest_line is either called all the time, as in
11300              objdump -l, so the information should be saved, or it is
11301              rarely called, as in ld error messages, so the memory
11302              wasted is unimportant.  Still, it would probably be a
11303              good idea for free_cached_info to throw it away.  */
11304         }
11305
11306       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11307                                   &fi->i, filename_ptr, functionname_ptr,
11308                                   line_ptr))
11309         {
11310           msec->flags = origflags;
11311           return TRUE;
11312         }
11313
11314       msec->flags = origflags;
11315     }
11316
11317   /* Fall back on the generic ELF find_nearest_line routine.  */
11318
11319   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11320                                      filename_ptr, functionname_ptr,
11321                                      line_ptr);
11322 }
11323
11324 bfd_boolean
11325 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11326                                  const char **filename_ptr,
11327                                  const char **functionname_ptr,
11328                                  unsigned int *line_ptr)
11329 {
11330   bfd_boolean found;
11331   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11332                                          functionname_ptr, line_ptr,
11333                                          & elf_tdata (abfd)->dwarf2_find_line_info);
11334   return found;
11335 }
11336
11337 \f
11338 /* When are writing out the .options or .MIPS.options section,
11339    remember the bytes we are writing out, so that we can install the
11340    GP value in the section_processing routine.  */
11341
11342 bfd_boolean
11343 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11344                                     const void *location,
11345                                     file_ptr offset, bfd_size_type count)
11346 {
11347   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11348     {
11349       bfd_byte *c;
11350
11351       if (elf_section_data (section) == NULL)
11352         {
11353           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11354           section->used_by_bfd = bfd_zalloc (abfd, amt);
11355           if (elf_section_data (section) == NULL)
11356             return FALSE;
11357         }
11358       c = mips_elf_section_data (section)->u.tdata;
11359       if (c == NULL)
11360         {
11361           c = bfd_zalloc (abfd, section->size);
11362           if (c == NULL)
11363             return FALSE;
11364           mips_elf_section_data (section)->u.tdata = c;
11365         }
11366
11367       memcpy (c + offset, location, count);
11368     }
11369
11370   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11371                                         count);
11372 }
11373
11374 /* This is almost identical to bfd_generic_get_... except that some
11375    MIPS relocations need to be handled specially.  Sigh.  */
11376
11377 bfd_byte *
11378 _bfd_elf_mips_get_relocated_section_contents
11379   (bfd *abfd,
11380    struct bfd_link_info *link_info,
11381    struct bfd_link_order *link_order,
11382    bfd_byte *data,
11383    bfd_boolean relocatable,
11384    asymbol **symbols)
11385 {
11386   /* Get enough memory to hold the stuff */
11387   bfd *input_bfd = link_order->u.indirect.section->owner;
11388   asection *input_section = link_order->u.indirect.section;
11389   bfd_size_type sz;
11390
11391   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11392   arelent **reloc_vector = NULL;
11393   long reloc_count;
11394
11395   if (reloc_size < 0)
11396     goto error_return;
11397
11398   reloc_vector = bfd_malloc (reloc_size);
11399   if (reloc_vector == NULL && reloc_size != 0)
11400     goto error_return;
11401
11402   /* read in the section */
11403   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11404   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11405     goto error_return;
11406
11407   reloc_count = bfd_canonicalize_reloc (input_bfd,
11408                                         input_section,
11409                                         reloc_vector,
11410                                         symbols);
11411   if (reloc_count < 0)
11412     goto error_return;
11413
11414   if (reloc_count > 0)
11415     {
11416       arelent **parent;
11417       /* for mips */
11418       int gp_found;
11419       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
11420
11421       {
11422         struct bfd_hash_entry *h;
11423         struct bfd_link_hash_entry *lh;
11424         /* Skip all this stuff if we aren't mixing formats.  */
11425         if (abfd && input_bfd
11426             && abfd->xvec == input_bfd->xvec)
11427           lh = 0;
11428         else
11429           {
11430             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11431             lh = (struct bfd_link_hash_entry *) h;
11432           }
11433       lookup:
11434         if (lh)
11435           {
11436             switch (lh->type)
11437               {
11438               case bfd_link_hash_undefined:
11439               case bfd_link_hash_undefweak:
11440               case bfd_link_hash_common:
11441                 gp_found = 0;
11442                 break;
11443               case bfd_link_hash_defined:
11444               case bfd_link_hash_defweak:
11445                 gp_found = 1;
11446                 gp = lh->u.def.value;
11447                 break;
11448               case bfd_link_hash_indirect:
11449               case bfd_link_hash_warning:
11450                 lh = lh->u.i.link;
11451                 /* @@FIXME  ignoring warning for now */
11452                 goto lookup;
11453               case bfd_link_hash_new:
11454               default:
11455                 abort ();
11456               }
11457           }
11458         else
11459           gp_found = 0;
11460       }
11461       /* end mips */
11462       for (parent = reloc_vector; *parent != NULL; parent++)
11463         {
11464           char *error_message = NULL;
11465           bfd_reloc_status_type r;
11466
11467           /* Specific to MIPS: Deal with relocation types that require
11468              knowing the gp of the output bfd.  */
11469           asymbol *sym = *(*parent)->sym_ptr_ptr;
11470
11471           /* If we've managed to find the gp and have a special
11472              function for the relocation then go ahead, else default
11473              to the generic handling.  */
11474           if (gp_found
11475               && (*parent)->howto->special_function
11476               == _bfd_mips_elf32_gprel16_reloc)
11477             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11478                                                input_section, relocatable,
11479                                                data, gp);
11480           else
11481             r = bfd_perform_relocation (input_bfd, *parent, data,
11482                                         input_section,
11483                                         relocatable ? abfd : NULL,
11484                                         &error_message);
11485
11486           if (relocatable)
11487             {
11488               asection *os = input_section->output_section;
11489
11490               /* A partial link, so keep the relocs */
11491               os->orelocation[os->reloc_count] = *parent;
11492               os->reloc_count++;
11493             }
11494
11495           if (r != bfd_reloc_ok)
11496             {
11497               switch (r)
11498                 {
11499                 case bfd_reloc_undefined:
11500                   if (!((*link_info->callbacks->undefined_symbol)
11501                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11502                          input_bfd, input_section, (*parent)->address, TRUE)))
11503                     goto error_return;
11504                   break;
11505                 case bfd_reloc_dangerous:
11506                   BFD_ASSERT (error_message != NULL);
11507                   if (!((*link_info->callbacks->reloc_dangerous)
11508                         (link_info, error_message, input_bfd, input_section,
11509                          (*parent)->address)))
11510                     goto error_return;
11511                   break;
11512                 case bfd_reloc_overflow:
11513                   if (!((*link_info->callbacks->reloc_overflow)
11514                         (link_info, NULL,
11515                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11516                          (*parent)->howto->name, (*parent)->addend,
11517                          input_bfd, input_section, (*parent)->address)))
11518                     goto error_return;
11519                   break;
11520                 case bfd_reloc_outofrange:
11521                 default:
11522                   abort ();
11523                   break;
11524                 }
11525
11526             }
11527         }
11528     }
11529   if (reloc_vector != NULL)
11530     free (reloc_vector);
11531   return data;
11532
11533 error_return:
11534   if (reloc_vector != NULL)
11535     free (reloc_vector);
11536   return NULL;
11537 }
11538 \f
11539 /* Create a MIPS ELF linker hash table.  */
11540
11541 struct bfd_link_hash_table *
11542 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
11543 {
11544   struct mips_elf_link_hash_table *ret;
11545   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
11546
11547   ret = bfd_malloc (amt);
11548   if (ret == NULL)
11549     return NULL;
11550
11551   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
11552                                       mips_elf_link_hash_newfunc,
11553                                       sizeof (struct mips_elf_link_hash_entry),
11554                                       MIPS_ELF_DATA))
11555     {
11556       free (ret);
11557       return NULL;
11558     }
11559
11560 #if 0
11561   /* We no longer use this.  */
11562   for (i = 0; i < SIZEOF_MIPS_DYNSYM_SECNAMES; i++)
11563     ret->dynsym_sec_strindex[i] = (bfd_size_type) -1;
11564 #endif
11565   ret->procedure_count = 0;
11566   ret->compact_rel_size = 0;
11567   ret->use_rld_obj_head = FALSE;
11568   ret->rld_value = 0;
11569   ret->mips16_stubs_seen = FALSE;
11570   ret->use_plts_and_copy_relocs = FALSE;
11571   ret->is_vxworks = FALSE;
11572   ret->small_data_overflow_reported = FALSE;
11573   ret->srelbss = NULL;
11574   ret->sdynbss = NULL;
11575   ret->srelplt = NULL;
11576   ret->srelplt2 = NULL;
11577   ret->sgotplt = NULL;
11578   ret->splt = NULL;
11579   ret->sstubs = NULL;
11580   ret->sgot = NULL;
11581   ret->got_info = NULL;
11582   ret->plt_header_size = 0;
11583   ret->plt_entry_size = 0;
11584   ret->lazy_stub_count = 0;
11585   ret->function_stub_size = 0;
11586   ret->strampoline = NULL;
11587   ret->la25_stubs = NULL;
11588   ret->add_stub_section = NULL;
11589
11590   return &ret->root.root;
11591 }
11592
11593 /* Likewise, but indicate that the target is VxWorks.  */
11594
11595 struct bfd_link_hash_table *
11596 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
11597 {
11598   struct bfd_link_hash_table *ret;
11599
11600   ret = _bfd_mips_elf_link_hash_table_create (abfd);
11601   if (ret)
11602     {
11603       struct mips_elf_link_hash_table *htab;
11604
11605       htab = (struct mips_elf_link_hash_table *) ret;
11606       htab->use_plts_and_copy_relocs = TRUE;
11607       htab->is_vxworks = TRUE;
11608     }
11609   return ret;
11610 }
11611
11612 /* A function that the linker calls if we are allowed to use PLTs
11613    and copy relocs.  */
11614
11615 void
11616 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
11617 {
11618   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
11619 }
11620 \f
11621 /* We need to use a special link routine to handle the .reginfo and
11622    the .mdebug sections.  We need to merge all instances of these
11623    sections together, not write them all out sequentially.  */
11624
11625 bfd_boolean
11626 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
11627 {
11628   asection *o;
11629   struct bfd_link_order *p;
11630   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
11631   asection *rtproc_sec;
11632   Elf32_RegInfo reginfo;
11633   struct ecoff_debug_info debug;
11634   struct mips_htab_traverse_info hti;
11635   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11636   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
11637   HDRR *symhdr = &debug.symbolic_header;
11638   void *mdebug_handle = NULL;
11639   asection *s;
11640   EXTR esym;
11641   unsigned int i;
11642   bfd_size_type amt;
11643   struct mips_elf_link_hash_table *htab;
11644
11645   static const char * const secname[] =
11646   {
11647     ".text", ".init", ".fini", ".data",
11648     ".rodata", ".sdata", ".sbss", ".bss"
11649   };
11650   static const int sc[] =
11651   {
11652     scText, scInit, scFini, scData,
11653     scRData, scSData, scSBss, scBss
11654   };
11655
11656   /* Sort the dynamic symbols so that those with GOT entries come after
11657      those without.  */
11658   htab = mips_elf_hash_table (info);
11659   BFD_ASSERT (htab != NULL);
11660
11661   if (!mips_elf_sort_hash_table (abfd, info))
11662     return FALSE;
11663
11664   /* Create any scheduled LA25 stubs.  */
11665   hti.info = info;
11666   hti.output_bfd = abfd;
11667   hti.error = FALSE;
11668   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
11669   if (hti.error)
11670     return FALSE;
11671
11672   /* Get a value for the GP register.  */
11673   if (elf_gp (abfd) == 0)
11674     {
11675       struct bfd_link_hash_entry *h;
11676
11677       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
11678       if (h != NULL && h->type == bfd_link_hash_defined)
11679         elf_gp (abfd) = (h->u.def.value
11680                          + h->u.def.section->output_section->vma
11681                          + h->u.def.section->output_offset);
11682       else if (htab->is_vxworks
11683                && (h = bfd_link_hash_lookup (info->hash,
11684                                              "_GLOBAL_OFFSET_TABLE_",
11685                                              FALSE, FALSE, TRUE))
11686                && h->type == bfd_link_hash_defined)
11687         elf_gp (abfd) = (h->u.def.section->output_section->vma
11688                          + h->u.def.section->output_offset
11689                          + h->u.def.value);
11690       else if (info->relocatable)
11691         {
11692           bfd_vma lo = MINUS_ONE;
11693
11694           /* Find the GP-relative section with the lowest offset.  */
11695           for (o = abfd->sections; o != NULL; o = o->next)
11696             if (o->vma < lo
11697                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
11698               lo = o->vma;
11699
11700           /* And calculate GP relative to that.  */
11701           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
11702         }
11703       else
11704         {
11705           /* If the relocate_section function needs to do a reloc
11706              involving the GP value, it should make a reloc_dangerous
11707              callback to warn that GP is not defined.  */
11708         }
11709     }
11710
11711   /* Go through the sections and collect the .reginfo and .mdebug
11712      information.  */
11713   reginfo_sec = NULL;
11714   mdebug_sec = NULL;
11715   gptab_data_sec = NULL;
11716   gptab_bss_sec = NULL;
11717   for (o = abfd->sections; o != NULL; o = o->next)
11718     {
11719       if (strcmp (o->name, ".reginfo") == 0)
11720         {
11721           memset (&reginfo, 0, sizeof reginfo);
11722
11723           /* We have found the .reginfo section in the output file.
11724              Look through all the link_orders comprising it and merge
11725              the information together.  */
11726           for (p = o->map_head.link_order; p != NULL; p = p->next)
11727             {
11728               asection *input_section;
11729               bfd *input_bfd;
11730               Elf32_External_RegInfo ext;
11731               Elf32_RegInfo sub;
11732
11733               if (p->type != bfd_indirect_link_order)
11734                 {
11735                   if (p->type == bfd_data_link_order)
11736                     continue;
11737                   abort ();
11738                 }
11739
11740               input_section = p->u.indirect.section;
11741               input_bfd = input_section->owner;
11742
11743               if (! bfd_get_section_contents (input_bfd, input_section,
11744                                               &ext, 0, sizeof ext))
11745                 return FALSE;
11746
11747               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
11748
11749               reginfo.ri_gprmask |= sub.ri_gprmask;
11750               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
11751               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
11752               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
11753               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
11754
11755               /* ri_gp_value is set by the function
11756                  mips_elf32_section_processing when the section is
11757                  finally written out.  */
11758
11759               /* Hack: reset the SEC_HAS_CONTENTS flag so that
11760                  elf_link_input_bfd ignores this section.  */
11761               input_section->flags &= ~SEC_HAS_CONTENTS;
11762             }
11763
11764           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
11765           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
11766
11767           /* Skip this section later on (I don't think this currently
11768              matters, but someday it might).  */
11769           o->map_head.link_order = NULL;
11770
11771           reginfo_sec = o;
11772         }
11773
11774       if (strcmp (o->name, ".mdebug") == 0)
11775         {
11776           struct extsym_info einfo;
11777           bfd_vma last;
11778
11779           /* We have found the .mdebug section in the output file.
11780              Look through all the link_orders comprising it and merge
11781              the information together.  */
11782           symhdr->magic = swap->sym_magic;
11783           /* FIXME: What should the version stamp be?  */
11784           symhdr->vstamp = 0;
11785           symhdr->ilineMax = 0;
11786           symhdr->cbLine = 0;
11787           symhdr->idnMax = 0;
11788           symhdr->ipdMax = 0;
11789           symhdr->isymMax = 0;
11790           symhdr->ioptMax = 0;
11791           symhdr->iauxMax = 0;
11792           symhdr->issMax = 0;
11793           symhdr->issExtMax = 0;
11794           symhdr->ifdMax = 0;
11795           symhdr->crfd = 0;
11796           symhdr->iextMax = 0;
11797
11798           /* We accumulate the debugging information itself in the
11799              debug_info structure.  */
11800           debug.line = NULL;
11801           debug.external_dnr = NULL;
11802           debug.external_pdr = NULL;
11803           debug.external_sym = NULL;
11804           debug.external_opt = NULL;
11805           debug.external_aux = NULL;
11806           debug.ss = NULL;
11807           debug.ssext = debug.ssext_end = NULL;
11808           debug.external_fdr = NULL;
11809           debug.external_rfd = NULL;
11810           debug.external_ext = debug.external_ext_end = NULL;
11811
11812           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
11813           if (mdebug_handle == NULL)
11814             return FALSE;
11815
11816           esym.jmptbl = 0;
11817           esym.cobol_main = 0;
11818           esym.weakext = 0;
11819           esym.reserved = 0;
11820           esym.ifd = ifdNil;
11821           esym.asym.iss = issNil;
11822           esym.asym.st = stLocal;
11823           esym.asym.reserved = 0;
11824           esym.asym.index = indexNil;
11825           last = 0;
11826           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
11827             {
11828               esym.asym.sc = sc[i];
11829               s = bfd_get_section_by_name (abfd, secname[i]);
11830               if (s != NULL)
11831                 {
11832                   esym.asym.value = s->vma;
11833                   last = s->vma + s->size;
11834                 }
11835               else
11836                 esym.asym.value = last;
11837               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
11838                                                  secname[i], &esym))
11839                 return FALSE;
11840             }
11841
11842           for (p = o->map_head.link_order; p != NULL; p = p->next)
11843             {
11844               asection *input_section;
11845               bfd *input_bfd;
11846               const struct ecoff_debug_swap *input_swap;
11847               struct ecoff_debug_info input_debug;
11848               char *eraw_src;
11849               char *eraw_end;
11850
11851               if (p->type != bfd_indirect_link_order)
11852                 {
11853                   if (p->type == bfd_data_link_order)
11854                     continue;
11855                   abort ();
11856                 }
11857
11858               input_section = p->u.indirect.section;
11859               input_bfd = input_section->owner;
11860
11861               if (!is_mips_elf (input_bfd))
11862                 {
11863                   /* I don't know what a non MIPS ELF bfd would be
11864                      doing with a .mdebug section, but I don't really
11865                      want to deal with it.  */
11866                   continue;
11867                 }
11868
11869               input_swap = (get_elf_backend_data (input_bfd)
11870                             ->elf_backend_ecoff_debug_swap);
11871
11872               BFD_ASSERT (p->size == input_section->size);
11873
11874               /* The ECOFF linking code expects that we have already
11875                  read in the debugging information and set up an
11876                  ecoff_debug_info structure, so we do that now.  */
11877               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
11878                                                    &input_debug))
11879                 return FALSE;
11880
11881               if (! (bfd_ecoff_debug_accumulate
11882                      (mdebug_handle, abfd, &debug, swap, input_bfd,
11883                       &input_debug, input_swap, info)))
11884                 return FALSE;
11885
11886               /* Loop through the external symbols.  For each one with
11887                  interesting information, try to find the symbol in
11888                  the linker global hash table and save the information
11889                  for the output external symbols.  */
11890               eraw_src = input_debug.external_ext;
11891               eraw_end = (eraw_src
11892                           + (input_debug.symbolic_header.iextMax
11893                              * input_swap->external_ext_size));
11894               for (;
11895                    eraw_src < eraw_end;
11896                    eraw_src += input_swap->external_ext_size)
11897                 {
11898                   EXTR ext;
11899                   const char *name;
11900                   struct mips_elf_link_hash_entry *h;
11901
11902                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
11903                   if (ext.asym.sc == scNil
11904                       || ext.asym.sc == scUndefined
11905                       || ext.asym.sc == scSUndefined)
11906                     continue;
11907
11908                   name = input_debug.ssext + ext.asym.iss;
11909                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
11910                                                  name, FALSE, FALSE, TRUE);
11911                   if (h == NULL || h->esym.ifd != -2)
11912                     continue;
11913
11914                   if (ext.ifd != -1)
11915                     {
11916                       BFD_ASSERT (ext.ifd
11917                                   < input_debug.symbolic_header.ifdMax);
11918                       ext.ifd = input_debug.ifdmap[ext.ifd];
11919                     }
11920
11921                   h->esym = ext;
11922                 }
11923
11924               /* Free up the information we just read.  */
11925               free (input_debug.line);
11926               free (input_debug.external_dnr);
11927               free (input_debug.external_pdr);
11928               free (input_debug.external_sym);
11929               free (input_debug.external_opt);
11930               free (input_debug.external_aux);
11931               free (input_debug.ss);
11932               free (input_debug.ssext);
11933               free (input_debug.external_fdr);
11934               free (input_debug.external_rfd);
11935               free (input_debug.external_ext);
11936
11937               /* Hack: reset the SEC_HAS_CONTENTS flag so that
11938                  elf_link_input_bfd ignores this section.  */
11939               input_section->flags &= ~SEC_HAS_CONTENTS;
11940             }
11941
11942           if (SGI_COMPAT (abfd) && info->shared)
11943             {
11944               /* Create .rtproc section.  */
11945               rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
11946               if (rtproc_sec == NULL)
11947                 {
11948                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
11949                                     | SEC_LINKER_CREATED | SEC_READONLY);
11950
11951                   rtproc_sec = bfd_make_section_with_flags (abfd,
11952                                                             ".rtproc",
11953                                                             flags);
11954                   if (rtproc_sec == NULL
11955                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
11956                     return FALSE;
11957                 }
11958
11959               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
11960                                                      info, rtproc_sec,
11961                                                      &debug))
11962                 return FALSE;
11963             }
11964
11965           /* Build the external symbol information.  */
11966           einfo.abfd = abfd;
11967           einfo.info = info;
11968           einfo.debug = &debug;
11969           einfo.swap = swap;
11970           einfo.failed = FALSE;
11971           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
11972                                        mips_elf_output_extsym, &einfo);
11973           if (einfo.failed)
11974             return FALSE;
11975
11976           /* Set the size of the .mdebug section.  */
11977           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
11978
11979           /* Skip this section later on (I don't think this currently
11980              matters, but someday it might).  */
11981           o->map_head.link_order = NULL;
11982
11983           mdebug_sec = o;
11984         }
11985
11986       if (CONST_STRNEQ (o->name, ".gptab."))
11987         {
11988           const char *subname;
11989           unsigned int c;
11990           Elf32_gptab *tab;
11991           Elf32_External_gptab *ext_tab;
11992           unsigned int j;
11993
11994           /* The .gptab.sdata and .gptab.sbss sections hold
11995              information describing how the small data area would
11996              change depending upon the -G switch.  These sections
11997              not used in executables files.  */
11998           if (! info->relocatable)
11999             {
12000               for (p = o->map_head.link_order; p != NULL; p = p->next)
12001                 {
12002                   asection *input_section;
12003
12004                   if (p->type != bfd_indirect_link_order)
12005                     {
12006                       if (p->type == bfd_data_link_order)
12007                         continue;
12008                       abort ();
12009                     }
12010
12011                   input_section = p->u.indirect.section;
12012
12013                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
12014                      elf_link_input_bfd ignores this section.  */
12015                   input_section->flags &= ~SEC_HAS_CONTENTS;
12016                 }
12017
12018               /* Skip this section later on (I don't think this
12019                  currently matters, but someday it might).  */
12020               o->map_head.link_order = NULL;
12021
12022               /* Really remove the section.  */
12023               bfd_section_list_remove (abfd, o);
12024               --abfd->section_count;
12025
12026               continue;
12027             }
12028
12029           /* There is one gptab for initialized data, and one for
12030              uninitialized data.  */
12031           if (strcmp (o->name, ".gptab.sdata") == 0)
12032             gptab_data_sec = o;
12033           else if (strcmp (o->name, ".gptab.sbss") == 0)
12034             gptab_bss_sec = o;
12035           else
12036             {
12037               (*_bfd_error_handler)
12038                 (_("%s: illegal section name `%s'"),
12039                  bfd_get_filename (abfd), o->name);
12040               bfd_set_error (bfd_error_nonrepresentable_section);
12041               return FALSE;
12042             }
12043
12044           /* The linker script always combines .gptab.data and
12045              .gptab.sdata into .gptab.sdata, and likewise for
12046              .gptab.bss and .gptab.sbss.  It is possible that there is
12047              no .sdata or .sbss section in the output file, in which
12048              case we must change the name of the output section.  */
12049           subname = o->name + sizeof ".gptab" - 1;
12050           if (bfd_get_section_by_name (abfd, subname) == NULL)
12051             {
12052               if (o == gptab_data_sec)
12053                 o->name = ".gptab.data";
12054               else
12055                 o->name = ".gptab.bss";
12056               subname = o->name + sizeof ".gptab" - 1;
12057               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
12058             }
12059
12060           /* Set up the first entry.  */
12061           c = 1;
12062           amt = c * sizeof (Elf32_gptab);
12063           tab = bfd_malloc (amt);
12064           if (tab == NULL)
12065             return FALSE;
12066           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
12067           tab[0].gt_header.gt_unused = 0;
12068
12069           /* Combine the input sections.  */
12070           for (p = o->map_head.link_order; p != NULL; p = p->next)
12071             {
12072               asection *input_section;
12073               bfd *input_bfd;
12074               bfd_size_type size;
12075               unsigned long last;
12076               bfd_size_type gpentry;
12077
12078               if (p->type != bfd_indirect_link_order)
12079                 {
12080                   if (p->type == bfd_data_link_order)
12081                     continue;
12082                   abort ();
12083                 }
12084
12085               input_section = p->u.indirect.section;
12086               input_bfd = input_section->owner;
12087
12088               /* Combine the gptab entries for this input section one
12089                  by one.  We know that the input gptab entries are
12090                  sorted by ascending -G value.  */
12091               size = input_section->size;
12092               last = 0;
12093               for (gpentry = sizeof (Elf32_External_gptab);
12094                    gpentry < size;
12095                    gpentry += sizeof (Elf32_External_gptab))
12096                 {
12097                   Elf32_External_gptab ext_gptab;
12098                   Elf32_gptab int_gptab;
12099                   unsigned long val;
12100                   unsigned long add;
12101                   bfd_boolean exact;
12102                   unsigned int look;
12103
12104                   if (! (bfd_get_section_contents
12105                          (input_bfd, input_section, &ext_gptab, gpentry,
12106                           sizeof (Elf32_External_gptab))))
12107                     {
12108                       free (tab);
12109                       return FALSE;
12110                     }
12111
12112                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
12113                                                 &int_gptab);
12114                   val = int_gptab.gt_entry.gt_g_value;
12115                   add = int_gptab.gt_entry.gt_bytes - last;
12116
12117                   exact = FALSE;
12118                   for (look = 1; look < c; look++)
12119                     {
12120                       if (tab[look].gt_entry.gt_g_value >= val)
12121                         tab[look].gt_entry.gt_bytes += add;
12122
12123                       if (tab[look].gt_entry.gt_g_value == val)
12124                         exact = TRUE;
12125                     }
12126
12127                   if (! exact)
12128                     {
12129                       Elf32_gptab *new_tab;
12130                       unsigned int max;
12131
12132                       /* We need a new table entry.  */
12133                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
12134                       new_tab = bfd_realloc (tab, amt);
12135                       if (new_tab == NULL)
12136                         {
12137                           free (tab);
12138                           return FALSE;
12139                         }
12140                       tab = new_tab;
12141                       tab[c].gt_entry.gt_g_value = val;
12142                       tab[c].gt_entry.gt_bytes = add;
12143
12144                       /* Merge in the size for the next smallest -G
12145                          value, since that will be implied by this new
12146                          value.  */
12147                       max = 0;
12148                       for (look = 1; look < c; look++)
12149                         {
12150                           if (tab[look].gt_entry.gt_g_value < val
12151                               && (max == 0
12152                                   || (tab[look].gt_entry.gt_g_value
12153                                       > tab[max].gt_entry.gt_g_value)))
12154                             max = look;
12155                         }
12156                       if (max != 0)
12157                         tab[c].gt_entry.gt_bytes +=
12158                           tab[max].gt_entry.gt_bytes;
12159
12160                       ++c;
12161                     }
12162
12163                   last = int_gptab.gt_entry.gt_bytes;
12164                 }
12165
12166               /* Hack: reset the SEC_HAS_CONTENTS flag so that
12167                  elf_link_input_bfd ignores this section.  */
12168               input_section->flags &= ~SEC_HAS_CONTENTS;
12169             }
12170
12171           /* The table must be sorted by -G value.  */
12172           if (c > 2)
12173             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
12174
12175           /* Swap out the table.  */
12176           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
12177           ext_tab = bfd_alloc (abfd, amt);
12178           if (ext_tab == NULL)
12179             {
12180               free (tab);
12181               return FALSE;
12182             }
12183
12184           for (j = 0; j < c; j++)
12185             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
12186           free (tab);
12187
12188           o->size = c * sizeof (Elf32_External_gptab);
12189           o->contents = (bfd_byte *) ext_tab;
12190
12191           /* Skip this section later on (I don't think this currently
12192              matters, but someday it might).  */
12193           o->map_head.link_order = NULL;
12194         }
12195     }
12196
12197   /* Invoke the regular ELF backend linker to do all the work.  */
12198   if (!bfd_elf_final_link (abfd, info))
12199     return FALSE;
12200
12201   /* Now write out the computed sections.  */
12202
12203   if (reginfo_sec != NULL)
12204     {
12205       Elf32_External_RegInfo ext;
12206
12207       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
12208       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
12209         return FALSE;
12210     }
12211
12212   if (mdebug_sec != NULL)
12213     {
12214       BFD_ASSERT (abfd->output_has_begun);
12215       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
12216                                                swap, info,
12217                                                mdebug_sec->filepos))
12218         return FALSE;
12219
12220       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
12221     }
12222
12223   if (gptab_data_sec != NULL)
12224     {
12225       if (! bfd_set_section_contents (abfd, gptab_data_sec,
12226                                       gptab_data_sec->contents,
12227                                       0, gptab_data_sec->size))
12228         return FALSE;
12229     }
12230
12231   if (gptab_bss_sec != NULL)
12232     {
12233       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
12234                                       gptab_bss_sec->contents,
12235                                       0, gptab_bss_sec->size))
12236         return FALSE;
12237     }
12238
12239   if (SGI_COMPAT (abfd))
12240     {
12241       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
12242       if (rtproc_sec != NULL)
12243         {
12244           if (! bfd_set_section_contents (abfd, rtproc_sec,
12245                                           rtproc_sec->contents,
12246                                           0, rtproc_sec->size))
12247             return FALSE;
12248         }
12249     }
12250
12251   return TRUE;
12252 }
12253 \f
12254 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
12255
12256 struct mips_mach_extension {
12257   unsigned long extension, base;
12258 };
12259
12260
12261 /* An array describing how BFD machines relate to one another.  The entries
12262    are ordered topologically with MIPS I extensions listed last.  */
12263
12264 static const struct mips_mach_extension mips_mach_extensions[] = {
12265   /* MIPS64r2 extensions.  */
12266   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
12267
12268   /* MIPS64 extensions.  */
12269   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
12270   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
12271   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
12272   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
12273
12274   /* MIPS V extensions.  */
12275   { bfd_mach_mipsisa64, bfd_mach_mips5 },
12276
12277   /* R10000 extensions.  */
12278   { bfd_mach_mips12000, bfd_mach_mips10000 },
12279   { bfd_mach_mips14000, bfd_mach_mips10000 },
12280   { bfd_mach_mips16000, bfd_mach_mips10000 },
12281
12282   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
12283      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
12284      better to allow vr5400 and vr5500 code to be merged anyway, since
12285      many libraries will just use the core ISA.  Perhaps we could add
12286      some sort of ASE flag if this ever proves a problem.  */
12287   { bfd_mach_mips5500, bfd_mach_mips5400 },
12288   { bfd_mach_mips5400, bfd_mach_mips5000 },
12289
12290   /* MIPS IV extensions.  */
12291   { bfd_mach_mips5, bfd_mach_mips8000 },
12292   { bfd_mach_mips10000, bfd_mach_mips8000 },
12293   { bfd_mach_mips5000, bfd_mach_mips8000 },
12294   { bfd_mach_mips7000, bfd_mach_mips8000 },
12295   { bfd_mach_mips9000, bfd_mach_mips8000 },
12296
12297   /* VR4100 extensions.  */
12298   { bfd_mach_mips4120, bfd_mach_mips4100 },
12299   { bfd_mach_mips4111, bfd_mach_mips4100 },
12300
12301   /* MIPS III extensions.  */
12302   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
12303   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
12304   { bfd_mach_mips8000, bfd_mach_mips4000 },
12305   { bfd_mach_mips4650, bfd_mach_mips4000 },
12306   { bfd_mach_mips4600, bfd_mach_mips4000 },
12307   { bfd_mach_mips4400, bfd_mach_mips4000 },
12308   { bfd_mach_mips4300, bfd_mach_mips4000 },
12309   { bfd_mach_mips4100, bfd_mach_mips4000 },
12310   { bfd_mach_mips4010, bfd_mach_mips4000 },
12311
12312   /* MIPS32 extensions.  */
12313   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
12314
12315   /* MIPS II extensions.  */
12316   { bfd_mach_mips4000, bfd_mach_mips6000 },
12317   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
12318
12319   /* MIPS I extensions.  */
12320   { bfd_mach_mips6000, bfd_mach_mips3000 },
12321   { bfd_mach_mips3900, bfd_mach_mips3000 }
12322 };
12323
12324
12325 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
12326
12327 static bfd_boolean
12328 mips_mach_extends_p (unsigned long base, unsigned long extension)
12329 {
12330   size_t i;
12331
12332   if (extension == base)
12333     return TRUE;
12334
12335   if (base == bfd_mach_mipsisa32
12336       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
12337     return TRUE;
12338
12339   if (base == bfd_mach_mipsisa32r2
12340       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
12341     return TRUE;
12342
12343   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
12344     if (extension == mips_mach_extensions[i].extension)
12345       {
12346         extension = mips_mach_extensions[i].base;
12347         if (extension == base)
12348           return TRUE;
12349       }
12350
12351   return FALSE;
12352 }
12353
12354
12355 /* Return true if the given ELF header flags describe a 32-bit binary.  */
12356
12357 static bfd_boolean
12358 mips_32bit_flags_p (flagword flags)
12359 {
12360   return ((flags & EF_MIPS_32BITMODE) != 0
12361           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
12362           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
12363           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
12364           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
12365           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
12366           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
12367 }
12368
12369
12370 /* Merge object attributes from IBFD into OBFD.  Raise an error if
12371    there are conflicting attributes.  */
12372 static bfd_boolean
12373 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
12374 {
12375   obj_attribute *in_attr;
12376   obj_attribute *out_attr;
12377
12378   if (!elf_known_obj_attributes_proc (obfd)[0].i)
12379     {
12380       /* This is the first object.  Copy the attributes.  */
12381       _bfd_elf_copy_obj_attributes (ibfd, obfd);
12382
12383       /* Use the Tag_null value to indicate the attributes have been
12384          initialized.  */
12385       elf_known_obj_attributes_proc (obfd)[0].i = 1;
12386
12387       return TRUE;
12388     }
12389
12390   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
12391      non-conflicting ones.  */
12392   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
12393   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
12394   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
12395     {
12396       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
12397       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
12398         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
12399       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
12400         ;
12401       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i > 4)
12402         _bfd_error_handler
12403           (_("Warning: %B uses unknown floating point ABI %d"), ibfd,
12404            in_attr[Tag_GNU_MIPS_ABI_FP].i);
12405       else if (out_attr[Tag_GNU_MIPS_ABI_FP].i > 4)
12406         _bfd_error_handler
12407           (_("Warning: %B uses unknown floating point ABI %d"), obfd,
12408            out_attr[Tag_GNU_MIPS_ABI_FP].i);
12409       else
12410         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
12411           {
12412           case 1:
12413             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
12414               {
12415               case 2:
12416                 _bfd_error_handler
12417                   (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
12418                    obfd, ibfd);
12419                 break;
12420
12421               case 3:
12422                 _bfd_error_handler
12423                   (_("Warning: %B uses hard float, %B uses soft float"),
12424                    obfd, ibfd);
12425                 break;
12426
12427               case 4:
12428                 _bfd_error_handler
12429                   (_("Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64"),
12430                    obfd, ibfd);
12431                 break;
12432
12433               default:
12434                 abort ();
12435               }
12436             break;
12437
12438           case 2:
12439             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
12440               {
12441               case 1:
12442                 _bfd_error_handler
12443                   (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
12444                    ibfd, obfd);
12445                 break;
12446
12447               case 3:
12448                 _bfd_error_handler
12449                   (_("Warning: %B uses hard float, %B uses soft float"),
12450                    obfd, ibfd);
12451                 break;
12452
12453               case 4:
12454                 _bfd_error_handler
12455                   (_("Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64"),
12456                    obfd, ibfd);
12457                 break;
12458
12459               default:
12460                 abort ();
12461               }
12462             break;
12463
12464           case 3:
12465             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
12466               {
12467               case 1:
12468               case 2:
12469               case 4:
12470                 _bfd_error_handler
12471                   (_("Warning: %B uses hard float, %B uses soft float"),
12472                    ibfd, obfd);
12473                 break;
12474
12475               default:
12476                 abort ();
12477               }
12478             break;
12479
12480           case 4:
12481             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
12482               {
12483               case 1:
12484                 _bfd_error_handler
12485                   (_("Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64"),
12486                    ibfd, obfd);
12487                 break;
12488
12489               case 2:
12490                 _bfd_error_handler
12491                   (_("Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64"),
12492                    ibfd, obfd);
12493                 break;
12494
12495               case 3:
12496                 _bfd_error_handler
12497                   (_("Warning: %B uses hard float, %B uses soft float"),
12498                    obfd, ibfd);
12499                 break;
12500
12501               default:
12502                 abort ();
12503               }
12504             break;
12505
12506           default:
12507             abort ();
12508           }
12509     }
12510
12511   /* Merge Tag_compatibility attributes and any common GNU ones.  */
12512   _bfd_elf_merge_object_attributes (ibfd, obfd);
12513
12514   return TRUE;
12515 }
12516
12517 /* Merge backend specific data from an object file to the output
12518    object file when linking.  */
12519
12520 bfd_boolean
12521 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
12522 {
12523   flagword old_flags;
12524   flagword new_flags;
12525   bfd_boolean ok;
12526   bfd_boolean null_input_bfd = TRUE;
12527   asection *sec;
12528
12529   /* Check if we have the same endianness.  */
12530   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
12531     {
12532       (*_bfd_error_handler)
12533         (_("%B: endianness incompatible with that of the selected emulation"),
12534          ibfd);
12535       return FALSE;
12536     }
12537
12538   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
12539     return TRUE;
12540
12541   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
12542     {
12543       (*_bfd_error_handler)
12544         (_("%B: ABI is incompatible with that of the selected emulation"),
12545          ibfd);
12546       return FALSE;
12547     }
12548
12549   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
12550     return FALSE;
12551
12552   new_flags = elf_elfheader (ibfd)->e_flags;
12553   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
12554   old_flags = elf_elfheader (obfd)->e_flags;
12555
12556   if (! elf_flags_init (obfd))
12557     {
12558       elf_flags_init (obfd) = TRUE;
12559       elf_elfheader (obfd)->e_flags = new_flags;
12560       elf_elfheader (obfd)->e_ident[EI_CLASS]
12561         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
12562
12563       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
12564           && (bfd_get_arch_info (obfd)->the_default
12565               || mips_mach_extends_p (bfd_get_mach (obfd), 
12566                                       bfd_get_mach (ibfd))))
12567         {
12568           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
12569                                    bfd_get_mach (ibfd)))
12570             return FALSE;
12571         }
12572
12573       return TRUE;
12574     }
12575
12576   /* Check flag compatibility.  */
12577
12578   new_flags &= ~EF_MIPS_NOREORDER;
12579   old_flags &= ~EF_MIPS_NOREORDER;
12580
12581   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
12582      doesn't seem to matter.  */
12583   new_flags &= ~EF_MIPS_XGOT;
12584   old_flags &= ~EF_MIPS_XGOT;
12585
12586   /* MIPSpro generates ucode info in n64 objects.  Again, we should
12587      just be able to ignore this.  */
12588   new_flags &= ~EF_MIPS_UCODE;
12589   old_flags &= ~EF_MIPS_UCODE;
12590
12591   /* DSOs should only be linked with CPIC code.  */
12592   if ((ibfd->flags & DYNAMIC) != 0)
12593     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
12594
12595   if (new_flags == old_flags)
12596     return TRUE;
12597
12598   /* Check to see if the input BFD actually contains any sections.
12599      If not, its flags may not have been initialised either, but it cannot
12600      actually cause any incompatibility.  */
12601   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
12602     {
12603       /* Ignore synthetic sections and empty .text, .data and .bss sections
12604          which are automatically generated by gas.  Also ignore fake
12605          (s)common sections, since merely defining a common symbol does
12606          not affect compatibility.  */
12607       if ((sec->flags & SEC_IS_COMMON) == 0
12608           && strcmp (sec->name, ".reginfo")
12609           && strcmp (sec->name, ".mdebug")
12610           && (sec->size != 0
12611               || (strcmp (sec->name, ".text")
12612                   && strcmp (sec->name, ".data")
12613                   && strcmp (sec->name, ".bss"))))
12614         {
12615           null_input_bfd = FALSE;
12616           break;
12617         }
12618     }
12619   if (null_input_bfd)
12620     return TRUE;
12621
12622   ok = TRUE;
12623
12624   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
12625       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
12626     {
12627       (*_bfd_error_handler)
12628         (_("%B: warning: linking abicalls files with non-abicalls files"),
12629          ibfd);
12630       ok = TRUE;
12631     }
12632
12633   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
12634     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
12635   if (! (new_flags & EF_MIPS_PIC))
12636     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
12637
12638   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
12639   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
12640
12641   /* Compare the ISAs.  */
12642   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
12643     {
12644       (*_bfd_error_handler)
12645         (_("%B: linking 32-bit code with 64-bit code"),
12646          ibfd);
12647       ok = FALSE;
12648     }
12649   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
12650     {
12651       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
12652       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
12653         {
12654           /* Copy the architecture info from IBFD to OBFD.  Also copy
12655              the 32-bit flag (if set) so that we continue to recognise
12656              OBFD as a 32-bit binary.  */
12657           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
12658           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
12659           elf_elfheader (obfd)->e_flags
12660             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
12661
12662           /* Copy across the ABI flags if OBFD doesn't use them
12663              and if that was what caused us to treat IBFD as 32-bit.  */
12664           if ((old_flags & EF_MIPS_ABI) == 0
12665               && mips_32bit_flags_p (new_flags)
12666               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
12667             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
12668         }
12669       else
12670         {
12671           /* The ISAs aren't compatible.  */
12672           (*_bfd_error_handler)
12673             (_("%B: linking %s module with previous %s modules"),
12674              ibfd,
12675              bfd_printable_name (ibfd),
12676              bfd_printable_name (obfd));
12677           ok = FALSE;
12678         }
12679     }
12680
12681   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
12682   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
12683
12684   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
12685      does set EI_CLASS differently from any 32-bit ABI.  */
12686   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
12687       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
12688           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
12689     {
12690       /* Only error if both are set (to different values).  */
12691       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
12692           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
12693               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
12694         {
12695           (*_bfd_error_handler)
12696             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
12697              ibfd,
12698              elf_mips_abi_name (ibfd),
12699              elf_mips_abi_name (obfd));
12700           ok = FALSE;
12701         }
12702       new_flags &= ~EF_MIPS_ABI;
12703       old_flags &= ~EF_MIPS_ABI;
12704     }
12705
12706   /* For now, allow arbitrary mixing of ASEs (retain the union).  */
12707   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
12708     {
12709       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
12710
12711       new_flags &= ~ EF_MIPS_ARCH_ASE;
12712       old_flags &= ~ EF_MIPS_ARCH_ASE;
12713     }
12714
12715   /* Warn about any other mismatches */
12716   if (new_flags != old_flags)
12717     {
12718       (*_bfd_error_handler)
12719         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
12720          ibfd, (unsigned long) new_flags,
12721          (unsigned long) old_flags);
12722       ok = FALSE;
12723     }
12724
12725   if (! ok)
12726     {
12727       bfd_set_error (bfd_error_bad_value);
12728       return FALSE;
12729     }
12730
12731   return TRUE;
12732 }
12733
12734 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
12735
12736 bfd_boolean
12737 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
12738 {
12739   BFD_ASSERT (!elf_flags_init (abfd)
12740               || elf_elfheader (abfd)->e_flags == flags);
12741
12742   elf_elfheader (abfd)->e_flags = flags;
12743   elf_flags_init (abfd) = TRUE;
12744   return TRUE;
12745 }
12746
12747 char *
12748 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
12749 {
12750   switch (dtag)
12751     {
12752     default: return "";
12753     case DT_MIPS_RLD_VERSION:
12754       return "MIPS_RLD_VERSION";
12755     case DT_MIPS_TIME_STAMP:
12756       return "MIPS_TIME_STAMP";
12757     case DT_MIPS_ICHECKSUM:
12758       return "MIPS_ICHECKSUM";
12759     case DT_MIPS_IVERSION:
12760       return "MIPS_IVERSION";
12761     case DT_MIPS_FLAGS:
12762       return "MIPS_FLAGS";
12763     case DT_MIPS_BASE_ADDRESS:
12764       return "MIPS_BASE_ADDRESS";
12765     case DT_MIPS_MSYM:
12766       return "MIPS_MSYM";
12767     case DT_MIPS_CONFLICT:
12768       return "MIPS_CONFLICT";
12769     case DT_MIPS_LIBLIST:
12770       return "MIPS_LIBLIST";
12771     case DT_MIPS_LOCAL_GOTNO:
12772       return "MIPS_LOCAL_GOTNO";
12773     case DT_MIPS_CONFLICTNO:
12774       return "MIPS_CONFLICTNO";
12775     case DT_MIPS_LIBLISTNO:
12776       return "MIPS_LIBLISTNO";
12777     case DT_MIPS_SYMTABNO:
12778       return "MIPS_SYMTABNO";
12779     case DT_MIPS_UNREFEXTNO:
12780       return "MIPS_UNREFEXTNO";
12781     case DT_MIPS_GOTSYM:
12782       return "MIPS_GOTSYM";
12783     case DT_MIPS_HIPAGENO:
12784       return "MIPS_HIPAGENO";
12785     case DT_MIPS_RLD_MAP:
12786       return "MIPS_RLD_MAP";
12787     case DT_MIPS_DELTA_CLASS:
12788       return "MIPS_DELTA_CLASS";
12789     case DT_MIPS_DELTA_CLASS_NO:
12790       return "MIPS_DELTA_CLASS_NO";
12791     case DT_MIPS_DELTA_INSTANCE:
12792       return "MIPS_DELTA_INSTANCE";
12793     case DT_MIPS_DELTA_INSTANCE_NO:
12794       return "MIPS_DELTA_INSTANCE_NO";
12795     case DT_MIPS_DELTA_RELOC:
12796       return "MIPS_DELTA_RELOC";
12797     case DT_MIPS_DELTA_RELOC_NO:
12798       return "MIPS_DELTA_RELOC_NO";
12799     case DT_MIPS_DELTA_SYM:
12800       return "MIPS_DELTA_SYM";
12801     case DT_MIPS_DELTA_SYM_NO:
12802       return "MIPS_DELTA_SYM_NO";
12803     case DT_MIPS_DELTA_CLASSSYM:
12804       return "MIPS_DELTA_CLASSSYM";
12805     case DT_MIPS_DELTA_CLASSSYM_NO:
12806       return "MIPS_DELTA_CLASSSYM_NO";
12807     case DT_MIPS_CXX_FLAGS:
12808       return "MIPS_CXX_FLAGS";
12809     case DT_MIPS_PIXIE_INIT:
12810       return "MIPS_PIXIE_INIT";
12811     case DT_MIPS_SYMBOL_LIB:
12812       return "MIPS_SYMBOL_LIB";
12813     case DT_MIPS_LOCALPAGE_GOTIDX:
12814       return "MIPS_LOCALPAGE_GOTIDX";
12815     case DT_MIPS_LOCAL_GOTIDX:
12816       return "MIPS_LOCAL_GOTIDX";
12817     case DT_MIPS_HIDDEN_GOTIDX:
12818       return "MIPS_HIDDEN_GOTIDX";
12819     case DT_MIPS_PROTECTED_GOTIDX:
12820       return "MIPS_PROTECTED_GOT_IDX";
12821     case DT_MIPS_OPTIONS:
12822       return "MIPS_OPTIONS";
12823     case DT_MIPS_INTERFACE:
12824       return "MIPS_INTERFACE";
12825     case DT_MIPS_DYNSTR_ALIGN:
12826       return "DT_MIPS_DYNSTR_ALIGN";
12827     case DT_MIPS_INTERFACE_SIZE:
12828       return "DT_MIPS_INTERFACE_SIZE";
12829     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
12830       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
12831     case DT_MIPS_PERF_SUFFIX:
12832       return "DT_MIPS_PERF_SUFFIX";
12833     case DT_MIPS_COMPACT_SIZE:
12834       return "DT_MIPS_COMPACT_SIZE";
12835     case DT_MIPS_GP_VALUE:
12836       return "DT_MIPS_GP_VALUE";
12837     case DT_MIPS_AUX_DYNAMIC:
12838       return "DT_MIPS_AUX_DYNAMIC";
12839     case DT_MIPS_PLTGOT:
12840       return "DT_MIPS_PLTGOT";
12841     case DT_MIPS_RWPLT:
12842       return "DT_MIPS_RWPLT";
12843     }
12844 }
12845
12846 bfd_boolean
12847 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
12848 {
12849   FILE *file = ptr;
12850
12851   BFD_ASSERT (abfd != NULL && ptr != NULL);
12852
12853   /* Print normal ELF private data.  */
12854   _bfd_elf_print_private_bfd_data (abfd, ptr);
12855
12856   /* xgettext:c-format */
12857   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
12858
12859   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
12860     fprintf (file, _(" [abi=O32]"));
12861   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
12862     fprintf (file, _(" [abi=O64]"));
12863   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
12864     fprintf (file, _(" [abi=EABI32]"));
12865   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
12866     fprintf (file, _(" [abi=EABI64]"));
12867   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
12868     fprintf (file, _(" [abi unknown]"));
12869   else if (ABI_N32_P (abfd))
12870     fprintf (file, _(" [abi=N32]"));
12871   else if (ABI_64_P (abfd))
12872     fprintf (file, _(" [abi=64]"));
12873   else
12874     fprintf (file, _(" [no abi set]"));
12875
12876   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
12877     fprintf (file, " [mips1]");
12878   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
12879     fprintf (file, " [mips2]");
12880   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
12881     fprintf (file, " [mips3]");
12882   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
12883     fprintf (file, " [mips4]");
12884   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
12885     fprintf (file, " [mips5]");
12886   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
12887     fprintf (file, " [mips32]");
12888   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
12889     fprintf (file, " [mips64]");
12890   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
12891     fprintf (file, " [mips32r2]");
12892   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
12893     fprintf (file, " [mips64r2]");
12894   else
12895     fprintf (file, _(" [unknown ISA]"));
12896
12897   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
12898     fprintf (file, " [mdmx]");
12899
12900   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
12901     fprintf (file, " [mips16]");
12902
12903   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
12904     fprintf (file, " [32bitmode]");
12905   else
12906     fprintf (file, _(" [not 32bitmode]"));
12907
12908   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
12909     fprintf (file, " [noreorder]");
12910
12911   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
12912     fprintf (file, " [PIC]");
12913
12914   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
12915     fprintf (file, " [CPIC]");
12916
12917   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
12918     fprintf (file, " [XGOT]");
12919
12920   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
12921     fprintf (file, " [UCODE]");
12922
12923   fputc ('\n', file);
12924
12925   return TRUE;
12926 }
12927
12928 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
12929 {
12930   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
12931   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
12932   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
12933   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
12934   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
12935   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
12936   { NULL,                     0,  0, 0,              0 }
12937 };
12938
12939 /* Merge non visibility st_other attributes.  Ensure that the
12940    STO_OPTIONAL flag is copied into h->other, even if this is not a
12941    definiton of the symbol.  */
12942 void
12943 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
12944                                       const Elf_Internal_Sym *isym,
12945                                       bfd_boolean definition,
12946                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
12947 {
12948   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
12949     {
12950       unsigned char other;
12951
12952       other = (definition ? isym->st_other : h->other);
12953       other &= ~ELF_ST_VISIBILITY (-1);
12954       h->other = other | ELF_ST_VISIBILITY (h->other);
12955     }
12956
12957   if (!definition
12958       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
12959     h->other |= STO_OPTIONAL;
12960 }
12961
12962 /* Decide whether an undefined symbol is special and can be ignored.
12963    This is the case for OPTIONAL symbols on IRIX.  */
12964 bfd_boolean
12965 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
12966 {
12967   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
12968 }
12969
12970 bfd_boolean
12971 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
12972 {
12973   return (sym->st_shndx == SHN_COMMON
12974           || sym->st_shndx == SHN_MIPS_ACOMMON
12975           || sym->st_shndx == SHN_MIPS_SCOMMON);
12976 }
12977
12978 /* Return address for Ith PLT stub in section PLT, for relocation REL
12979    or (bfd_vma) -1 if it should not be included.  */
12980
12981 bfd_vma
12982 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
12983                            const arelent *rel ATTRIBUTE_UNUSED)
12984 {
12985   return (plt->vma
12986           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
12987           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
12988 }
12989
12990 void
12991 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
12992 {
12993   struct mips_elf_link_hash_table *htab;
12994   Elf_Internal_Ehdr *i_ehdrp;
12995
12996   i_ehdrp = elf_elfheader (abfd);
12997   if (link_info)
12998     {
12999       htab = mips_elf_hash_table (link_info);
13000       BFD_ASSERT (htab != NULL);
13001
13002       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
13003         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
13004     }
13005 }