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