bfd/
[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.  */
2801   if (h->root.got.offset == 2)
2802     {
2803       BFD_ASSERT (h->tls_type == GOT_NORMAL);
2804
2805       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
2806         hsd->low = (struct elf_link_hash_entry *) h;
2807       h->root.dynindx = hsd->max_unref_got_dynindx++;
2808     }
2809   else if (h->root.got.offset != 1)
2810     h->root.dynindx = hsd->max_non_got_dynindx++;
2811   else
2812     {
2813       BFD_ASSERT (h->tls_type == GOT_NORMAL);
2814
2815       h->root.dynindx = --hsd->min_got_dynindx;
2816       hsd->low = (struct elf_link_hash_entry *) h;
2817     }
2818
2819   return TRUE;
2820 }
2821
2822 /* If H is a symbol that needs a global GOT entry, but has a dynamic
2823    symbol table index lower than any we've seen to date, record it for
2824    posterity.  */
2825
2826 static bfd_boolean
2827 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
2828                                    bfd *abfd, struct bfd_link_info *info,
2829                                    struct mips_got_info *g,
2830                                    unsigned char tls_flag)
2831 {
2832   struct mips_got_entry entry, **loc;
2833
2834   /* A global symbol in the GOT must also be in the dynamic symbol
2835      table.  */
2836   if (h->dynindx == -1)
2837     {
2838       switch (ELF_ST_VISIBILITY (h->other))
2839         {
2840         case STV_INTERNAL:
2841         case STV_HIDDEN:
2842           _bfd_mips_elf_hide_symbol (info, h, TRUE);
2843           break;
2844         }
2845       if (!bfd_elf_link_record_dynamic_symbol (info, h))
2846         return FALSE;
2847     }
2848
2849   /* Make sure we have a GOT to put this entry into.  */
2850   BFD_ASSERT (g != NULL);
2851
2852   entry.abfd = abfd;
2853   entry.symndx = -1;
2854   entry.d.h = (struct mips_elf_link_hash_entry *) h;
2855   entry.tls_type = 0;
2856
2857   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
2858                                                    INSERT);
2859
2860   /* If we've already marked this entry as needing GOT space, we don't
2861      need to do it again.  */
2862   if (*loc)
2863     {
2864       (*loc)->tls_type |= tls_flag;
2865       return TRUE;
2866     }
2867
2868   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
2869
2870   if (! *loc)
2871     return FALSE;
2872
2873   entry.gotidx = -1;
2874   entry.tls_type = tls_flag;
2875
2876   memcpy (*loc, &entry, sizeof entry);
2877
2878   if (h->got.offset != MINUS_ONE)
2879     return TRUE;
2880
2881   if (tls_flag == 0)
2882     {
2883       /* By setting this to a value other than -1, we are indicating that
2884          there needs to be a GOT entry for H.  Avoid using zero, as the
2885          generic ELF copy_indirect_symbol tests for <= 0.  */
2886       h->got.offset = 1;
2887       if (h->forced_local)
2888         g->local_gotno++;
2889     }
2890
2891   return TRUE;
2892 }
2893
2894 /* Reserve space in G for a GOT entry containing the value of symbol
2895    SYMNDX in input bfd ABDF, plus ADDEND.  */
2896
2897 static bfd_boolean
2898 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
2899                                   struct mips_got_info *g,
2900                                   unsigned char tls_flag)
2901 {
2902   struct mips_got_entry entry, **loc;
2903
2904   entry.abfd = abfd;
2905   entry.symndx = symndx;
2906   entry.d.addend = addend;
2907   entry.tls_type = tls_flag;
2908   loc = (struct mips_got_entry **)
2909     htab_find_slot (g->got_entries, &entry, INSERT);
2910
2911   if (*loc)
2912     {
2913       if (tls_flag == GOT_TLS_GD && !((*loc)->tls_type & GOT_TLS_GD))
2914         {
2915           g->tls_gotno += 2;
2916           (*loc)->tls_type |= tls_flag;
2917         }
2918       else if (tls_flag == GOT_TLS_IE && !((*loc)->tls_type & GOT_TLS_IE))
2919         {
2920           g->tls_gotno += 1;
2921           (*loc)->tls_type |= tls_flag;
2922         }
2923       return TRUE;
2924     }
2925
2926   if (tls_flag != 0)
2927     {
2928       entry.gotidx = -1;
2929       entry.tls_type = tls_flag;
2930       if (tls_flag == GOT_TLS_IE)
2931         g->tls_gotno += 1;
2932       else if (tls_flag == GOT_TLS_GD)
2933         g->tls_gotno += 2;
2934       else if (g->tls_ldm_offset == MINUS_ONE)
2935         {
2936           g->tls_ldm_offset = MINUS_TWO;
2937           g->tls_gotno += 2;
2938         }
2939     }
2940   else
2941     {
2942       entry.gotidx = g->local_gotno++;
2943       entry.tls_type = 0;
2944     }
2945
2946   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
2947
2948   if (! *loc)
2949     return FALSE;
2950
2951   memcpy (*loc, &entry, sizeof entry);
2952
2953   return TRUE;
2954 }
2955 \f
2956 /* Compute the hash value of the bfd in a bfd2got hash entry.  */
2957
2958 static hashval_t
2959 mips_elf_bfd2got_entry_hash (const void *entry_)
2960 {
2961   const struct mips_elf_bfd2got_hash *entry
2962     = (struct mips_elf_bfd2got_hash *)entry_;
2963
2964   return entry->bfd->id;
2965 }
2966
2967 /* Check whether two hash entries have the same bfd.  */
2968
2969 static int
2970 mips_elf_bfd2got_entry_eq (const void *entry1, const void *entry2)
2971 {
2972   const struct mips_elf_bfd2got_hash *e1
2973     = (const struct mips_elf_bfd2got_hash *)entry1;
2974   const struct mips_elf_bfd2got_hash *e2
2975     = (const struct mips_elf_bfd2got_hash *)entry2;
2976
2977   return e1->bfd == e2->bfd;
2978 }
2979
2980 /* In a multi-got link, determine the GOT to be used for IBFD.  G must
2981    be the master GOT data.  */
2982
2983 static struct mips_got_info *
2984 mips_elf_got_for_ibfd (struct mips_got_info *g, bfd *ibfd)
2985 {
2986   struct mips_elf_bfd2got_hash e, *p;
2987
2988   if (! g->bfd2got)
2989     return g;
2990
2991   e.bfd = ibfd;
2992   p = htab_find (g->bfd2got, &e);
2993   return p ? p->g : NULL;
2994 }
2995
2996 /* Create one separate got for each bfd that has entries in the global
2997    got, such that we can tell how many local and global entries each
2998    bfd requires.  */
2999
3000 static int
3001 mips_elf_make_got_per_bfd (void **entryp, void *p)
3002 {
3003   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
3004   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
3005   htab_t bfd2got = arg->bfd2got;
3006   struct mips_got_info *g;
3007   struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot;
3008   void **bfdgotp;
3009
3010   /* Find the got_info for this GOT entry's input bfd.  Create one if
3011      none exists.  */
3012   bfdgot_entry.bfd = entry->abfd;
3013   bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT);
3014   bfdgot = (struct mips_elf_bfd2got_hash *)*bfdgotp;
3015
3016   if (bfdgot != NULL)
3017     g = bfdgot->g;
3018   else
3019     {
3020       bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
3021         (arg->obfd, sizeof (struct mips_elf_bfd2got_hash));
3022
3023       if (bfdgot == NULL)
3024         {
3025           arg->obfd = 0;
3026           return 0;
3027         }
3028
3029       *bfdgotp = bfdgot;
3030
3031       bfdgot->bfd = entry->abfd;
3032       bfdgot->g = g = (struct mips_got_info *)
3033         bfd_alloc (arg->obfd, sizeof (struct mips_got_info));
3034       if (g == NULL)
3035         {
3036           arg->obfd = 0;
3037           return 0;
3038         }
3039
3040       g->global_gotsym = NULL;
3041       g->global_gotno = 0;
3042       g->local_gotno = 0;
3043       g->assigned_gotno = -1;
3044       g->tls_gotno = 0;
3045       g->tls_assigned_gotno = 0;
3046       g->tls_ldm_offset = MINUS_ONE;
3047       g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
3048                                         mips_elf_multi_got_entry_eq, NULL);
3049       if (g->got_entries == NULL)
3050         {
3051           arg->obfd = 0;
3052           return 0;
3053         }
3054
3055       g->bfd2got = NULL;
3056       g->next = NULL;
3057     }
3058
3059   /* Insert the GOT entry in the bfd's got entry hash table.  */
3060   entryp = htab_find_slot (g->got_entries, entry, INSERT);
3061   if (*entryp != NULL)
3062     return 1;
3063
3064   *entryp = entry;
3065
3066   if (entry->tls_type)
3067     {
3068       if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
3069         g->tls_gotno += 2;
3070       if (entry->tls_type & GOT_TLS_IE)
3071         g->tls_gotno += 1;
3072     }
3073   else if (entry->symndx >= 0 || entry->d.h->forced_local)
3074     ++g->local_gotno;
3075   else
3076     ++g->global_gotno;
3077
3078   return 1;
3079 }
3080
3081 /* Attempt to merge gots of different input bfds.  Try to use as much
3082    as possible of the primary got, since it doesn't require explicit
3083    dynamic relocations, but don't use bfds that would reference global
3084    symbols out of the addressable range.  Failing the primary got,
3085    attempt to merge with the current got, or finish the current got
3086    and then make make the new got current.  */
3087
3088 static int
3089 mips_elf_merge_gots (void **bfd2got_, void *p)
3090 {
3091   struct mips_elf_bfd2got_hash *bfd2got
3092     = (struct mips_elf_bfd2got_hash *)*bfd2got_;
3093   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
3094   unsigned int lcount = bfd2got->g->local_gotno;
3095   unsigned int gcount = bfd2got->g->global_gotno;
3096   unsigned int tcount = bfd2got->g->tls_gotno;
3097   unsigned int maxcnt = arg->max_count;
3098   bfd_boolean too_many_for_tls = FALSE;
3099
3100   /* We place TLS GOT entries after both locals and globals.  The globals
3101      for the primary GOT may overflow the normal GOT size limit, so be
3102      sure not to merge a GOT which requires TLS with the primary GOT in that
3103      case.  This doesn't affect non-primary GOTs.  */
3104   if (tcount > 0)
3105     {
3106       unsigned int primary_total = lcount + tcount + arg->global_count;
3107       if (primary_total > maxcnt)
3108         too_many_for_tls = TRUE;
3109     }
3110
3111   /* If we don't have a primary GOT and this is not too big, use it as
3112      a starting point for the primary GOT.  */
3113   if (! arg->primary && lcount + gcount + tcount <= maxcnt
3114       && ! too_many_for_tls)
3115     {
3116       arg->primary = bfd2got->g;
3117       arg->primary_count = lcount + gcount;
3118     }
3119   /* If it looks like we can merge this bfd's entries with those of
3120      the primary, merge them.  The heuristics is conservative, but we
3121      don't have to squeeze it too hard.  */
3122   else if (arg->primary && ! too_many_for_tls
3123            && (arg->primary_count + lcount + gcount + tcount) <= maxcnt)
3124     {
3125       struct mips_got_info *g = bfd2got->g;
3126       int old_lcount = arg->primary->local_gotno;
3127       int old_gcount = arg->primary->global_gotno;
3128       int old_tcount = arg->primary->tls_gotno;
3129
3130       bfd2got->g = arg->primary;
3131
3132       htab_traverse (g->got_entries,
3133                      mips_elf_make_got_per_bfd,
3134                      arg);
3135       if (arg->obfd == NULL)
3136         return 0;
3137
3138       htab_delete (g->got_entries);
3139       /* We don't have to worry about releasing memory of the actual
3140          got entries, since they're all in the master got_entries hash
3141          table anyway.  */
3142
3143       BFD_ASSERT (old_lcount + lcount >= arg->primary->local_gotno);
3144       BFD_ASSERT (old_gcount + gcount >= arg->primary->global_gotno);
3145       BFD_ASSERT (old_tcount + tcount >= arg->primary->tls_gotno);
3146
3147       arg->primary_count = arg->primary->local_gotno
3148         + arg->primary->global_gotno + arg->primary->tls_gotno;
3149     }
3150   /* If we can merge with the last-created got, do it.  */
3151   else if (arg->current
3152            && arg->current_count + lcount + gcount + tcount <= maxcnt)
3153     {
3154       struct mips_got_info *g = bfd2got->g;
3155       int old_lcount = arg->current->local_gotno;
3156       int old_gcount = arg->current->global_gotno;
3157       int old_tcount = arg->current->tls_gotno;
3158
3159       bfd2got->g = arg->current;
3160
3161       htab_traverse (g->got_entries,
3162                      mips_elf_make_got_per_bfd,
3163                      arg);
3164       if (arg->obfd == NULL)
3165         return 0;
3166
3167       htab_delete (g->got_entries);
3168
3169       BFD_ASSERT (old_lcount + lcount >= arg->current->local_gotno);
3170       BFD_ASSERT (old_gcount + gcount >= arg->current->global_gotno);
3171       BFD_ASSERT (old_tcount + tcount >= arg->current->tls_gotno);
3172
3173       arg->current_count = arg->current->local_gotno
3174         + arg->current->global_gotno + arg->current->tls_gotno;
3175     }
3176   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
3177      fits; if it turns out that it doesn't, we'll get relocation
3178      overflows anyway.  */
3179   else
3180     {
3181       bfd2got->g->next = arg->current;
3182       arg->current = bfd2got->g;
3183
3184       arg->current_count = lcount + gcount + 2 * tcount;
3185     }
3186
3187   return 1;
3188 }
3189
3190 /* Set the TLS GOT index for the GOT entry in ENTRYP.  ENTRYP's NEXT field
3191    is null iff there is just a single GOT.  */
3192
3193 static int
3194 mips_elf_initialize_tls_index (void **entryp, void *p)
3195 {
3196   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
3197   struct mips_got_info *g = p;
3198   bfd_vma next_index;
3199   unsigned char tls_type;
3200
3201   /* We're only interested in TLS symbols.  */
3202   if (entry->tls_type == 0)
3203     return 1;
3204
3205   next_index = MIPS_ELF_GOT_SIZE (entry->abfd) * (long) g->tls_assigned_gotno;
3206
3207   if (entry->symndx == -1 && g->next == NULL)
3208     {
3209       /* A type (3) got entry in the single-GOT case.  We use the symbol's
3210          hash table entry to track its index.  */
3211       if (entry->d.h->tls_type & GOT_TLS_OFFSET_DONE)
3212         return 1;
3213       entry->d.h->tls_type |= GOT_TLS_OFFSET_DONE;
3214       entry->d.h->tls_got_offset = next_index;
3215       tls_type = entry->d.h->tls_type;
3216     }
3217   else
3218     {
3219       if (entry->tls_type & GOT_TLS_LDM)
3220         {
3221           /* There are separate mips_got_entry objects for each input bfd
3222              that requires an LDM entry.  Make sure that all LDM entries in
3223              a GOT resolve to the same index.  */
3224           if (g->tls_ldm_offset != MINUS_TWO && g->tls_ldm_offset != MINUS_ONE)
3225             {
3226               entry->gotidx = g->tls_ldm_offset;
3227               return 1;
3228             }
3229           g->tls_ldm_offset = next_index;
3230         }
3231       entry->gotidx = next_index;
3232       tls_type = entry->tls_type;
3233     }
3234
3235   /* Account for the entries we've just allocated.  */
3236   if (tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
3237     g->tls_assigned_gotno += 2;
3238   if (tls_type & GOT_TLS_IE)
3239     g->tls_assigned_gotno += 1;
3240
3241   return 1;
3242 }
3243
3244 /* If passed a NULL mips_got_info in the argument, set the marker used
3245    to tell whether a global symbol needs a got entry (in the primary
3246    got) to the given VALUE.
3247
3248    If passed a pointer G to a mips_got_info in the argument (it must
3249    not be the primary GOT), compute the offset from the beginning of
3250    the (primary) GOT section to the entry in G corresponding to the
3251    global symbol.  G's assigned_gotno must contain the index of the
3252    first available global GOT entry in G.  VALUE must contain the size
3253    of a GOT entry in bytes.  For each global GOT entry that requires a
3254    dynamic relocation, NEEDED_RELOCS is incremented, and the symbol is
3255    marked as not eligible for lazy resolution through a function
3256    stub.  */
3257 static int
3258 mips_elf_set_global_got_offset (void **entryp, void *p)
3259 {
3260   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
3261   struct mips_elf_set_global_got_offset_arg *arg
3262     = (struct mips_elf_set_global_got_offset_arg *)p;
3263   struct mips_got_info *g = arg->g;
3264
3265   if (g && entry->tls_type != GOT_NORMAL)
3266     arg->needed_relocs +=
3267       mips_tls_got_relocs (arg->info, entry->tls_type,
3268                            entry->symndx == -1 ? &entry->d.h->root : NULL);
3269
3270   if (entry->abfd != NULL && entry->symndx == -1
3271       && entry->d.h->root.dynindx != -1
3272       && entry->d.h->tls_type == GOT_NORMAL)
3273     {
3274       if (g)
3275         {
3276           BFD_ASSERT (g->global_gotsym == NULL);
3277
3278           entry->gotidx = arg->value * (long) g->assigned_gotno++;
3279           if (arg->info->shared
3280               || (elf_hash_table (arg->info)->dynamic_sections_created
3281                   && entry->d.h->root.def_dynamic
3282                   && !entry->d.h->root.def_regular))
3283             ++arg->needed_relocs;
3284         }
3285       else
3286         entry->d.h->root.got.offset = arg->value;
3287     }
3288
3289   return 1;
3290 }
3291
3292 /* Mark any global symbols referenced in the GOT we are iterating over
3293    as inelligible for lazy resolution stubs.  */
3294 static int
3295 mips_elf_set_no_stub (void **entryp, void *p ATTRIBUTE_UNUSED)
3296 {
3297   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
3298
3299   if (entry->abfd != NULL
3300       && entry->symndx == -1
3301       && entry->d.h->root.dynindx != -1)
3302     entry->d.h->no_fn_stub = TRUE;
3303
3304   return 1;
3305 }
3306
3307 /* Follow indirect and warning hash entries so that each got entry
3308    points to the final symbol definition.  P must point to a pointer
3309    to the hash table we're traversing.  Since this traversal may
3310    modify the hash table, we set this pointer to NULL to indicate
3311    we've made a potentially-destructive change to the hash table, so
3312    the traversal must be restarted.  */
3313 static int
3314 mips_elf_resolve_final_got_entry (void **entryp, void *p)
3315 {
3316   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
3317   htab_t got_entries = *(htab_t *)p;
3318
3319   if (entry->abfd != NULL && entry->symndx == -1)
3320     {
3321       struct mips_elf_link_hash_entry *h = entry->d.h;
3322
3323       while (h->root.root.type == bfd_link_hash_indirect
3324              || h->root.root.type == bfd_link_hash_warning)
3325         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3326
3327       if (entry->d.h == h)
3328         return 1;
3329
3330       entry->d.h = h;
3331
3332       /* If we can't find this entry with the new bfd hash, re-insert
3333          it, and get the traversal restarted.  */
3334       if (! htab_find (got_entries, entry))
3335         {
3336           htab_clear_slot (got_entries, entryp);
3337           entryp = htab_find_slot (got_entries, entry, INSERT);
3338           if (! *entryp)
3339             *entryp = entry;
3340           /* Abort the traversal, since the whole table may have
3341              moved, and leave it up to the parent to restart the
3342              process.  */
3343           *(htab_t *)p = NULL;
3344           return 0;
3345         }
3346       /* We might want to decrement the global_gotno count, but it's
3347          either too early or too late for that at this point.  */
3348     }
3349
3350   return 1;
3351 }
3352
3353 /* Turn indirect got entries in a got_entries table into their final
3354    locations.  */
3355 static void
3356 mips_elf_resolve_final_got_entries (struct mips_got_info *g)
3357 {
3358   htab_t got_entries;
3359
3360   do
3361     {
3362       got_entries = g->got_entries;
3363
3364       htab_traverse (got_entries,
3365                      mips_elf_resolve_final_got_entry,
3366                      &got_entries);
3367     }
3368   while (got_entries == NULL);
3369 }
3370
3371 /* Return the offset of an input bfd IBFD's GOT from the beginning of
3372    the primary GOT.  */
3373 static bfd_vma
3374 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
3375 {
3376   if (g->bfd2got == NULL)
3377     return 0;
3378
3379   g = mips_elf_got_for_ibfd (g, ibfd);
3380   if (! g)
3381     return 0;
3382
3383   BFD_ASSERT (g->next);
3384
3385   g = g->next;
3386
3387   return (g->local_gotno + g->global_gotno + g->tls_gotno)
3388     * MIPS_ELF_GOT_SIZE (abfd);
3389 }
3390
3391 /* Turn a single GOT that is too big for 16-bit addressing into
3392    a sequence of GOTs, each one 16-bit addressable.  */
3393
3394 static bfd_boolean
3395 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
3396                     struct mips_got_info *g, asection *got,
3397                     bfd_size_type pages)
3398 {
3399   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
3400   struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
3401   struct mips_got_info *gg;
3402   unsigned int assign;
3403
3404   g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash,
3405                                 mips_elf_bfd2got_entry_eq, NULL);
3406   if (g->bfd2got == NULL)
3407     return FALSE;
3408
3409   got_per_bfd_arg.bfd2got = g->bfd2got;
3410   got_per_bfd_arg.obfd = abfd;
3411   got_per_bfd_arg.info = info;
3412
3413   /* Count how many GOT entries each input bfd requires, creating a
3414      map from bfd to got info while at that.  */
3415   htab_traverse (g->got_entries, mips_elf_make_got_per_bfd, &got_per_bfd_arg);
3416   if (got_per_bfd_arg.obfd == NULL)
3417     return FALSE;
3418
3419   got_per_bfd_arg.current = NULL;
3420   got_per_bfd_arg.primary = NULL;
3421   /* Taking out PAGES entries is a worst-case estimate.  We could
3422      compute the maximum number of pages that each separate input bfd
3423      uses, but it's probably not worth it.  */
3424   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
3425                                 / MIPS_ELF_GOT_SIZE (abfd))
3426                                - MIPS_RESERVED_GOTNO (info) - pages);
3427   /* The number of globals that will be included in the primary GOT.
3428      See the calls to mips_elf_set_global_got_offset below for more
3429      information.  */
3430   got_per_bfd_arg.global_count = g->global_gotno;
3431
3432   /* Try to merge the GOTs of input bfds together, as long as they
3433      don't seem to exceed the maximum GOT size, choosing one of them
3434      to be the primary GOT.  */
3435   htab_traverse (g->bfd2got, mips_elf_merge_gots, &got_per_bfd_arg);
3436   if (got_per_bfd_arg.obfd == NULL)
3437     return FALSE;
3438
3439   /* If we do not find any suitable primary GOT, create an empty one.  */
3440   if (got_per_bfd_arg.primary == NULL)
3441     {
3442       g->next = (struct mips_got_info *)
3443         bfd_alloc (abfd, sizeof (struct mips_got_info));
3444       if (g->next == NULL)
3445         return FALSE;
3446
3447       g->next->global_gotsym = NULL;
3448       g->next->global_gotno = 0;
3449       g->next->local_gotno = 0;
3450       g->next->tls_gotno = 0;
3451       g->next->assigned_gotno = 0;
3452       g->next->tls_assigned_gotno = 0;
3453       g->next->tls_ldm_offset = MINUS_ONE;
3454       g->next->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
3455                                               mips_elf_multi_got_entry_eq,
3456                                               NULL);
3457       if (g->next->got_entries == NULL)
3458         return FALSE;
3459       g->next->bfd2got = NULL;
3460     }
3461   else
3462     g->next = got_per_bfd_arg.primary;
3463   g->next->next = got_per_bfd_arg.current;
3464
3465   /* GG is now the master GOT, and G is the primary GOT.  */
3466   gg = g;
3467   g = g->next;
3468
3469   /* Map the output bfd to the primary got.  That's what we're going
3470      to use for bfds that use GOT16 or GOT_PAGE relocations that we
3471      didn't mark in check_relocs, and we want a quick way to find it.
3472      We can't just use gg->next because we're going to reverse the
3473      list.  */
3474   {
3475     struct mips_elf_bfd2got_hash *bfdgot;
3476     void **bfdgotp;
3477
3478     bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
3479       (abfd, sizeof (struct mips_elf_bfd2got_hash));
3480
3481     if (bfdgot == NULL)
3482       return FALSE;
3483
3484     bfdgot->bfd = abfd;
3485     bfdgot->g = g;
3486     bfdgotp = htab_find_slot (gg->bfd2got, bfdgot, INSERT);
3487
3488     BFD_ASSERT (*bfdgotp == NULL);
3489     *bfdgotp = bfdgot;
3490   }
3491
3492   /* The IRIX dynamic linker requires every symbol that is referenced
3493      in a dynamic relocation to be present in the primary GOT, so
3494      arrange for them to appear after those that are actually
3495      referenced.
3496
3497      GNU/Linux could very well do without it, but it would slow down
3498      the dynamic linker, since it would have to resolve every dynamic
3499      symbol referenced in other GOTs more than once, without help from
3500      the cache.  Also, knowing that every external symbol has a GOT
3501      helps speed up the resolution of local symbols too, so GNU/Linux
3502      follows IRIX's practice.
3503
3504      The number 2 is used by mips_elf_sort_hash_table_f to count
3505      global GOT symbols that are unreferenced in the primary GOT, with
3506      an initial dynamic index computed from gg->assigned_gotno, where
3507      the number of unreferenced global entries in the primary GOT is
3508      preserved.  */
3509   if (1)
3510     {
3511       gg->assigned_gotno = gg->global_gotno - g->global_gotno;
3512       g->global_gotno = gg->global_gotno;
3513       set_got_offset_arg.value = 2;
3514     }
3515   else
3516     {
3517       /* This could be used for dynamic linkers that don't optimize
3518          symbol resolution while applying relocations so as to use
3519          primary GOT entries or assuming the symbol is locally-defined.
3520          With this code, we assign lower dynamic indices to global
3521          symbols that are not referenced in the primary GOT, so that
3522          their entries can be omitted.  */
3523       gg->assigned_gotno = 0;
3524       set_got_offset_arg.value = -1;
3525     }
3526
3527   /* Reorder dynamic symbols as described above (which behavior
3528      depends on the setting of VALUE).  */
3529   set_got_offset_arg.g = NULL;
3530   htab_traverse (gg->got_entries, mips_elf_set_global_got_offset,
3531                  &set_got_offset_arg);
3532   set_got_offset_arg.value = 1;
3533   htab_traverse (g->got_entries, mips_elf_set_global_got_offset,
3534                  &set_got_offset_arg);
3535   if (! mips_elf_sort_hash_table (info, 1))
3536     return FALSE;
3537
3538   /* Now go through the GOTs assigning them offset ranges.
3539      [assigned_gotno, local_gotno[ will be set to the range of local
3540      entries in each GOT.  We can then compute the end of a GOT by
3541      adding local_gotno to global_gotno.  We reverse the list and make
3542      it circular since then we'll be able to quickly compute the
3543      beginning of a GOT, by computing the end of its predecessor.  To
3544      avoid special cases for the primary GOT, while still preserving
3545      assertions that are valid for both single- and multi-got links,
3546      we arrange for the main got struct to have the right number of
3547      global entries, but set its local_gotno such that the initial
3548      offset of the primary GOT is zero.  Remember that the primary GOT
3549      will become the last item in the circular linked list, so it
3550      points back to the master GOT.  */
3551   gg->local_gotno = -g->global_gotno;
3552   gg->global_gotno = g->global_gotno;
3553   gg->tls_gotno = 0;
3554   assign = 0;
3555   gg->next = gg;
3556
3557   do
3558     {
3559       struct mips_got_info *gn;
3560
3561       assign += MIPS_RESERVED_GOTNO (info);
3562       g->assigned_gotno = assign;
3563       g->local_gotno += assign + pages;
3564       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
3565
3566       /* Take g out of the direct list, and push it onto the reversed
3567          list that gg points to.  g->next is guaranteed to be nonnull after
3568          this operation, as required by mips_elf_initialize_tls_index. */
3569       gn = g->next;
3570       g->next = gg->next;
3571       gg->next = g;
3572
3573       /* Set up any TLS entries.  We always place the TLS entries after
3574          all non-TLS entries.  */
3575       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
3576       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
3577
3578       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
3579       g = gn;
3580
3581       /* Mark global symbols in every non-primary GOT as ineligible for
3582          stubs.  */
3583       if (g)
3584         htab_traverse (g->got_entries, mips_elf_set_no_stub, NULL);
3585     }
3586   while (g);
3587
3588   got->size = (gg->next->local_gotno
3589                     + gg->next->global_gotno
3590                     + gg->next->tls_gotno) * MIPS_ELF_GOT_SIZE (abfd);
3591
3592   return TRUE;
3593 }
3594
3595 \f
3596 /* Returns the first relocation of type r_type found, beginning with
3597    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
3598
3599 static const Elf_Internal_Rela *
3600 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
3601                           const Elf_Internal_Rela *relocation,
3602                           const Elf_Internal_Rela *relend)
3603 {
3604   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
3605
3606   while (relocation < relend)
3607     {
3608       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
3609           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
3610         return relocation;
3611
3612       ++relocation;
3613     }
3614
3615   /* We didn't find it.  */
3616   return NULL;
3617 }
3618
3619 /* Return whether a relocation is against a local symbol.  */
3620
3621 static bfd_boolean
3622 mips_elf_local_relocation_p (bfd *input_bfd,
3623                              const Elf_Internal_Rela *relocation,
3624                              asection **local_sections,
3625                              bfd_boolean check_forced)
3626 {
3627   unsigned long r_symndx;
3628   Elf_Internal_Shdr *symtab_hdr;
3629   struct mips_elf_link_hash_entry *h;
3630   size_t extsymoff;
3631
3632   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
3633   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
3634   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
3635
3636   if (r_symndx < extsymoff)
3637     return TRUE;
3638   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
3639     return TRUE;
3640
3641   if (check_forced)
3642     {
3643       /* Look up the hash table to check whether the symbol
3644          was forced local.  */
3645       h = (struct mips_elf_link_hash_entry *)
3646         elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
3647       /* Find the real hash-table entry for this symbol.  */
3648       while (h->root.root.type == bfd_link_hash_indirect
3649              || h->root.root.type == bfd_link_hash_warning)
3650         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3651       if (h->root.forced_local)
3652         return TRUE;
3653     }
3654
3655   return FALSE;
3656 }
3657 \f
3658 /* Sign-extend VALUE, which has the indicated number of BITS.  */
3659
3660 bfd_vma
3661 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
3662 {
3663   if (value & ((bfd_vma) 1 << (bits - 1)))
3664     /* VALUE is negative.  */
3665     value |= ((bfd_vma) - 1) << bits;
3666
3667   return value;
3668 }
3669
3670 /* Return non-zero if the indicated VALUE has overflowed the maximum
3671    range expressible by a signed number with the indicated number of
3672    BITS.  */
3673
3674 static bfd_boolean
3675 mips_elf_overflow_p (bfd_vma value, int bits)
3676 {
3677   bfd_signed_vma svalue = (bfd_signed_vma) value;
3678
3679   if (svalue > (1 << (bits - 1)) - 1)
3680     /* The value is too big.  */
3681     return TRUE;
3682   else if (svalue < -(1 << (bits - 1)))
3683     /* The value is too small.  */
3684     return TRUE;
3685
3686   /* All is well.  */
3687   return FALSE;
3688 }
3689
3690 /* Calculate the %high function.  */
3691
3692 static bfd_vma
3693 mips_elf_high (bfd_vma value)
3694 {
3695   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
3696 }
3697
3698 /* Calculate the %higher function.  */
3699
3700 static bfd_vma
3701 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
3702 {
3703 #ifdef BFD64
3704   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
3705 #else
3706   abort ();
3707   return MINUS_ONE;
3708 #endif
3709 }
3710
3711 /* Calculate the %highest function.  */
3712
3713 static bfd_vma
3714 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
3715 {
3716 #ifdef BFD64
3717   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
3718 #else
3719   abort ();
3720   return MINUS_ONE;
3721 #endif
3722 }
3723 \f
3724 /* Create the .compact_rel section.  */
3725
3726 static bfd_boolean
3727 mips_elf_create_compact_rel_section
3728   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
3729 {
3730   flagword flags;
3731   register asection *s;
3732
3733   if (bfd_get_section_by_name (abfd, ".compact_rel") == NULL)
3734     {
3735       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
3736                | SEC_READONLY);
3737
3738       s = bfd_make_section_with_flags (abfd, ".compact_rel", flags);
3739       if (s == NULL
3740           || ! bfd_set_section_alignment (abfd, s,
3741                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
3742         return FALSE;
3743
3744       s->size = sizeof (Elf32_External_compact_rel);
3745     }
3746
3747   return TRUE;
3748 }
3749
3750 /* Create the .got section to hold the global offset table.  */
3751
3752 static bfd_boolean
3753 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info,
3754                              bfd_boolean maybe_exclude)
3755 {
3756   flagword flags;
3757   register asection *s;
3758   struct elf_link_hash_entry *h;
3759   struct bfd_link_hash_entry *bh;
3760   struct mips_got_info *g;
3761   bfd_size_type amt;
3762   struct mips_elf_link_hash_table *htab;
3763
3764   htab = mips_elf_hash_table (info);
3765
3766   /* This function may be called more than once.  */
3767   s = mips_elf_got_section (abfd, TRUE);
3768   if (s)
3769     {
3770       if (! maybe_exclude)
3771         s->flags &= ~SEC_EXCLUDE;
3772       return TRUE;
3773     }
3774
3775   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
3776            | SEC_LINKER_CREATED);
3777
3778   if (maybe_exclude)
3779     flags |= SEC_EXCLUDE;
3780
3781   /* We have to use an alignment of 2**4 here because this is hardcoded
3782      in the function stub generation and in the linker script.  */
3783   s = bfd_make_section_with_flags (abfd, ".got", flags);
3784   if (s == NULL
3785       || ! bfd_set_section_alignment (abfd, s, 4))
3786     return FALSE;
3787
3788   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
3789      linker script because we don't want to define the symbol if we
3790      are not creating a global offset table.  */
3791   bh = NULL;
3792   if (! (_bfd_generic_link_add_one_symbol
3793          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
3794           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
3795     return FALSE;
3796
3797   h = (struct elf_link_hash_entry *) bh;
3798   h->non_elf = 0;
3799   h->def_regular = 1;
3800   h->type = STT_OBJECT;
3801   elf_hash_table (info)->hgot = h;
3802
3803   if (info->shared
3804       && ! bfd_elf_link_record_dynamic_symbol (info, h))
3805     return FALSE;
3806
3807   amt = sizeof (struct mips_got_info);
3808   g = bfd_alloc (abfd, amt);
3809   if (g == NULL)
3810     return FALSE;
3811   g->global_gotsym = NULL;
3812   g->global_gotno = 0;
3813   g->tls_gotno = 0;
3814   g->local_gotno = MIPS_RESERVED_GOTNO (info);
3815   g->assigned_gotno = MIPS_RESERVED_GOTNO (info);
3816   g->bfd2got = NULL;
3817   g->next = NULL;
3818   g->tls_ldm_offset = MINUS_ONE;
3819   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3820                                     mips_elf_got_entry_eq, NULL);
3821   if (g->got_entries == NULL)
3822     return FALSE;
3823   mips_elf_section_data (s)->u.got_info = g;
3824   mips_elf_section_data (s)->elf.this_hdr.sh_flags
3825     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
3826
3827   /* VxWorks also needs a .got.plt section.  */
3828   if (htab->is_vxworks)
3829     {
3830       s = bfd_make_section_with_flags (abfd, ".got.plt",
3831                                        SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
3832                                        | SEC_IN_MEMORY | SEC_LINKER_CREATED);
3833       if (s == NULL || !bfd_set_section_alignment (abfd, s, 4))
3834         return FALSE;
3835
3836       htab->sgotplt = s;
3837     }
3838   return TRUE;
3839 }
3840 \f
3841 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
3842    __GOTT_INDEX__ symbols.  These symbols are only special for
3843    shared objects; they are not used in executables.  */
3844
3845 static bfd_boolean
3846 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
3847 {
3848   return (mips_elf_hash_table (info)->is_vxworks
3849           && info->shared
3850           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
3851               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
3852 }
3853 \f
3854 /* Calculate the value produced by the RELOCATION (which comes from
3855    the INPUT_BFD).  The ADDEND is the addend to use for this
3856    RELOCATION; RELOCATION->R_ADDEND is ignored.
3857
3858    The result of the relocation calculation is stored in VALUEP.
3859    REQUIRE_JALXP indicates whether or not the opcode used with this
3860    relocation must be JALX.
3861
3862    This function returns bfd_reloc_continue if the caller need take no
3863    further action regarding this relocation, bfd_reloc_notsupported if
3864    something goes dramatically wrong, bfd_reloc_overflow if an
3865    overflow occurs, and bfd_reloc_ok to indicate success.  */
3866
3867 static bfd_reloc_status_type
3868 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
3869                                asection *input_section,
3870                                struct bfd_link_info *info,
3871                                const Elf_Internal_Rela *relocation,
3872                                bfd_vma addend, reloc_howto_type *howto,
3873                                Elf_Internal_Sym *local_syms,
3874                                asection **local_sections, bfd_vma *valuep,
3875                                const char **namep, bfd_boolean *require_jalxp,
3876                                bfd_boolean save_addend)
3877 {
3878   /* The eventual value we will return.  */
3879   bfd_vma value;
3880   /* The address of the symbol against which the relocation is
3881      occurring.  */
3882   bfd_vma symbol = 0;
3883   /* The final GP value to be used for the relocatable, executable, or
3884      shared object file being produced.  */
3885   bfd_vma gp = MINUS_ONE;
3886   /* The place (section offset or address) of the storage unit being
3887      relocated.  */
3888   bfd_vma p;
3889   /* The value of GP used to create the relocatable object.  */
3890   bfd_vma gp0 = MINUS_ONE;
3891   /* The offset into the global offset table at which the address of
3892      the relocation entry symbol, adjusted by the addend, resides
3893      during execution.  */
3894   bfd_vma g = MINUS_ONE;
3895   /* The section in which the symbol referenced by the relocation is
3896      located.  */
3897   asection *sec = NULL;
3898   struct mips_elf_link_hash_entry *h = NULL;
3899   /* TRUE if the symbol referred to by this relocation is a local
3900      symbol.  */
3901   bfd_boolean local_p, was_local_p;
3902   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
3903   bfd_boolean gp_disp_p = FALSE;
3904   /* TRUE if the symbol referred to by this relocation is
3905      "__gnu_local_gp".  */
3906   bfd_boolean gnu_local_gp_p = FALSE;
3907   Elf_Internal_Shdr *symtab_hdr;
3908   size_t extsymoff;
3909   unsigned long r_symndx;
3910   int r_type;
3911   /* TRUE if overflow occurred during the calculation of the
3912      relocation value.  */
3913   bfd_boolean overflowed_p;
3914   /* TRUE if this relocation refers to a MIPS16 function.  */
3915   bfd_boolean target_is_16_bit_code_p = FALSE;
3916   struct mips_elf_link_hash_table *htab;
3917   bfd *dynobj;
3918
3919   dynobj = elf_hash_table (info)->dynobj;
3920   htab = mips_elf_hash_table (info);
3921
3922   /* Parse the relocation.  */
3923   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
3924   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
3925   p = (input_section->output_section->vma
3926        + input_section->output_offset
3927        + relocation->r_offset);
3928
3929   /* Assume that there will be no overflow.  */
3930   overflowed_p = FALSE;
3931
3932   /* Figure out whether or not the symbol is local, and get the offset
3933      used in the array of hash table entries.  */
3934   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
3935   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
3936                                          local_sections, FALSE);
3937   was_local_p = local_p;
3938   if (! elf_bad_symtab (input_bfd))
3939     extsymoff = symtab_hdr->sh_info;
3940   else
3941     {
3942       /* The symbol table does not follow the rule that local symbols
3943          must come before globals.  */
3944       extsymoff = 0;
3945     }
3946
3947   /* Figure out the value of the symbol.  */
3948   if (local_p)
3949     {
3950       Elf_Internal_Sym *sym;
3951
3952       sym = local_syms + r_symndx;
3953       sec = local_sections[r_symndx];
3954
3955       symbol = sec->output_section->vma + sec->output_offset;
3956       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
3957           || (sec->flags & SEC_MERGE))
3958         symbol += sym->st_value;
3959       if ((sec->flags & SEC_MERGE)
3960           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
3961         {
3962           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
3963           addend -= symbol;
3964           addend += sec->output_section->vma + sec->output_offset;
3965         }
3966
3967       /* MIPS16 text labels should be treated as odd.  */
3968       if (sym->st_other == STO_MIPS16)
3969         ++symbol;
3970
3971       /* Record the name of this symbol, for our caller.  */
3972       *namep = bfd_elf_string_from_elf_section (input_bfd,
3973                                                 symtab_hdr->sh_link,
3974                                                 sym->st_name);
3975       if (*namep == '\0')
3976         *namep = bfd_section_name (input_bfd, sec);
3977
3978       target_is_16_bit_code_p = (sym->st_other == STO_MIPS16);
3979     }
3980   else
3981     {
3982       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
3983
3984       /* For global symbols we look up the symbol in the hash-table.  */
3985       h = ((struct mips_elf_link_hash_entry *)
3986            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
3987       /* Find the real hash-table entry for this symbol.  */
3988       while (h->root.root.type == bfd_link_hash_indirect
3989              || h->root.root.type == bfd_link_hash_warning)
3990         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3991
3992       /* Record the name of this symbol, for our caller.  */
3993       *namep = h->root.root.root.string;
3994
3995       /* See if this is the special _gp_disp symbol.  Note that such a
3996          symbol must always be a global symbol.  */
3997       if (strcmp (*namep, "_gp_disp") == 0
3998           && ! NEWABI_P (input_bfd))
3999         {
4000           /* Relocations against _gp_disp are permitted only with
4001              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
4002           if (r_type != R_MIPS_HI16 && r_type != R_MIPS_LO16
4003               && r_type != R_MIPS16_HI16 && r_type != R_MIPS16_LO16)
4004             return bfd_reloc_notsupported;
4005
4006           gp_disp_p = TRUE;
4007         }
4008       /* See if this is the special _gp symbol.  Note that such a
4009          symbol must always be a global symbol.  */
4010       else if (strcmp (*namep, "__gnu_local_gp") == 0)
4011         gnu_local_gp_p = TRUE;
4012
4013
4014       /* If this symbol is defined, calculate its address.  Note that
4015          _gp_disp is a magic symbol, always implicitly defined by the
4016          linker, so it's inappropriate to check to see whether or not
4017          its defined.  */
4018       else if ((h->root.root.type == bfd_link_hash_defined
4019                 || h->root.root.type == bfd_link_hash_defweak)
4020                && h->root.root.u.def.section)
4021         {
4022           sec = h->root.root.u.def.section;
4023           if (sec->output_section)
4024             symbol = (h->root.root.u.def.value
4025                       + sec->output_section->vma
4026                       + sec->output_offset);
4027           else
4028             symbol = h->root.root.u.def.value;
4029         }
4030       else if (h->root.root.type == bfd_link_hash_undefweak)
4031         /* We allow relocations against undefined weak symbols, giving
4032            it the value zero, so that you can undefined weak functions
4033            and check to see if they exist by looking at their
4034            addresses.  */
4035         symbol = 0;
4036       else if (info->unresolved_syms_in_objects == RM_IGNORE
4037                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
4038         symbol = 0;
4039       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
4040                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
4041         {
4042           /* If this is a dynamic link, we should have created a
4043              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
4044              in in _bfd_mips_elf_create_dynamic_sections.
4045              Otherwise, we should define the symbol with a value of 0.
4046              FIXME: It should probably get into the symbol table
4047              somehow as well.  */
4048           BFD_ASSERT (! info->shared);
4049           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
4050           symbol = 0;
4051         }
4052       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
4053         {
4054           /* This is an optional symbol - an Irix specific extension to the
4055              ELF spec.  Ignore it for now.
4056              XXX - FIXME - there is more to the spec for OPTIONAL symbols
4057              than simply ignoring them, but we do not handle this for now.
4058              For information see the "64-bit ELF Object File Specification"
4059              which is available from here:
4060              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
4061           symbol = 0;
4062         }
4063       else
4064         {
4065           if (! ((*info->callbacks->undefined_symbol)
4066                  (info, h->root.root.root.string, input_bfd,
4067                   input_section, relocation->r_offset,
4068                   (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
4069                    || ELF_ST_VISIBILITY (h->root.other))))
4070             return bfd_reloc_undefined;
4071           symbol = 0;
4072         }
4073
4074       target_is_16_bit_code_p = (h->root.other == STO_MIPS16);
4075     }
4076
4077   /* If this is a 32- or 64-bit call to a 16-bit function with a stub, we
4078      need to redirect the call to the stub, unless we're already *in*
4079      a stub.  */
4080   if (r_type != R_MIPS16_26 && !info->relocatable
4081       && ((h != NULL && h->fn_stub != NULL)
4082           || (local_p
4083               && elf_tdata (input_bfd)->local_stubs != NULL
4084               && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
4085       && !mips16_stub_section_p (input_bfd, input_section))
4086     {
4087       /* This is a 32- or 64-bit call to a 16-bit function.  We should
4088          have already noticed that we were going to need the
4089          stub.  */
4090       if (local_p)
4091         sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
4092       else
4093         {
4094           BFD_ASSERT (h->need_fn_stub);
4095           sec = h->fn_stub;
4096         }
4097
4098       symbol = sec->output_section->vma + sec->output_offset;
4099       /* The target is 16-bit, but the stub isn't.  */
4100       target_is_16_bit_code_p = FALSE;
4101     }
4102   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
4103      need to redirect the call to the stub.  */
4104   else if (r_type == R_MIPS16_26 && !info->relocatable
4105            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
4106                || (local_p
4107                    && elf_tdata (input_bfd)->local_call_stubs != NULL
4108                    && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
4109            && !target_is_16_bit_code_p)
4110     {
4111       if (local_p)
4112         sec = elf_tdata (input_bfd)->local_call_stubs[r_symndx];
4113       else
4114         {
4115           /* If both call_stub and call_fp_stub are defined, we can figure
4116              out which one to use by checking which one appears in the input
4117              file.  */
4118           if (h->call_stub != NULL && h->call_fp_stub != NULL)
4119             {
4120               asection *o;
4121               
4122               sec = NULL;
4123               for (o = input_bfd->sections; o != NULL; o = o->next)
4124                 {
4125                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
4126                     {
4127                       sec = h->call_fp_stub;
4128                       break;
4129                     }
4130                 }
4131               if (sec == NULL)
4132                 sec = h->call_stub;
4133             }
4134           else if (h->call_stub != NULL)
4135             sec = h->call_stub;
4136           else
4137             sec = h->call_fp_stub;
4138         }
4139
4140       BFD_ASSERT (sec->size > 0);
4141       symbol = sec->output_section->vma + sec->output_offset;
4142     }
4143
4144   /* Calls from 16-bit code to 32-bit code and vice versa require the
4145      special jalx instruction.  */
4146   *require_jalxp = (!info->relocatable
4147                     && (((r_type == R_MIPS16_26) && !target_is_16_bit_code_p)
4148                         || ((r_type == R_MIPS_26) && target_is_16_bit_code_p)));
4149
4150   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
4151                                          local_sections, TRUE);
4152
4153   /* If we haven't already determined the GOT offset, or the GP value,
4154      and we're going to need it, get it now.  */
4155   switch (r_type)
4156     {
4157     case R_MIPS_GOT_PAGE:
4158     case R_MIPS_GOT_OFST:
4159       /* We need to decay to GOT_DISP/addend if the symbol doesn't
4160          bind locally.  */
4161       local_p = local_p || _bfd_elf_symbol_refs_local_p (&h->root, info, 1);
4162       if (local_p || r_type == R_MIPS_GOT_OFST)
4163         break;
4164       /* Fall through.  */
4165
4166     case R_MIPS_CALL16:
4167     case R_MIPS_GOT16:
4168     case R_MIPS_GOT_DISP:
4169     case R_MIPS_GOT_HI16:
4170     case R_MIPS_CALL_HI16:
4171     case R_MIPS_GOT_LO16:
4172     case R_MIPS_CALL_LO16:
4173     case R_MIPS_TLS_GD:
4174     case R_MIPS_TLS_GOTTPREL:
4175     case R_MIPS_TLS_LDM:
4176       /* Find the index into the GOT where this value is located.  */
4177       if (r_type == R_MIPS_TLS_LDM)
4178         {
4179           g = mips_elf_local_got_index (abfd, input_bfd, info,
4180                                         0, 0, NULL, r_type);
4181           if (g == MINUS_ONE)
4182             return bfd_reloc_outofrange;
4183         }
4184       else if (!local_p)
4185         {
4186           /* On VxWorks, CALL relocations should refer to the .got.plt
4187              entry, which is initialized to point at the PLT stub.  */
4188           if (htab->is_vxworks
4189               && (r_type == R_MIPS_CALL_HI16
4190                   || r_type == R_MIPS_CALL_LO16
4191                   || r_type == R_MIPS_CALL16))
4192             {
4193               BFD_ASSERT (addend == 0);
4194               BFD_ASSERT (h->root.needs_plt);
4195               g = mips_elf_gotplt_index (info, &h->root);
4196             }
4197           else
4198             {
4199               /* GOT_PAGE may take a non-zero addend, that is ignored in a
4200                  GOT_PAGE relocation that decays to GOT_DISP because the
4201                  symbol turns out to be global.  The addend is then added
4202                  as GOT_OFST.  */
4203               BFD_ASSERT (addend == 0 || r_type == R_MIPS_GOT_PAGE);
4204               g = mips_elf_global_got_index (dynobj, input_bfd,
4205                                              &h->root, r_type, info);
4206               if (h->tls_type == GOT_NORMAL
4207                   && (! elf_hash_table(info)->dynamic_sections_created
4208                       || (info->shared
4209                           && (info->symbolic || h->root.forced_local)
4210                           && h->root.def_regular)))
4211                 {
4212                   /* This is a static link or a -Bsymbolic link.  The
4213                      symbol is defined locally, or was forced to be local.
4214                      We must initialize this entry in the GOT.  */
4215                   asection *sgot = mips_elf_got_section (dynobj, FALSE);
4216                   MIPS_ELF_PUT_WORD (dynobj, symbol, sgot->contents + g);
4217                 }
4218             }
4219         }
4220       else if (!htab->is_vxworks
4221                && (r_type == R_MIPS_CALL16 || (r_type == R_MIPS_GOT16)))
4222         /* The calculation below does not involve "g".  */
4223         break;
4224       else
4225         {
4226           g = mips_elf_local_got_index (abfd, input_bfd, info,
4227                                         symbol + addend, r_symndx, h, r_type);
4228           if (g == MINUS_ONE)
4229             return bfd_reloc_outofrange;
4230         }
4231
4232       /* Convert GOT indices to actual offsets.  */
4233       g = mips_elf_got_offset_from_index (dynobj, abfd, input_bfd, g);
4234       break;
4235
4236     case R_MIPS_HI16:
4237     case R_MIPS_LO16:
4238     case R_MIPS_GPREL16:
4239     case R_MIPS_GPREL32:
4240     case R_MIPS_LITERAL:
4241     case R_MIPS16_HI16:
4242     case R_MIPS16_LO16:
4243     case R_MIPS16_GPREL:
4244       gp0 = _bfd_get_gp_value (input_bfd);
4245       gp = _bfd_get_gp_value (abfd);
4246       if (dynobj)
4247         gp += mips_elf_adjust_gp (abfd, mips_elf_got_info (dynobj, NULL),
4248                                   input_bfd);
4249       break;
4250
4251     default:
4252       break;
4253     }
4254
4255   if (gnu_local_gp_p)
4256     symbol = gp;
4257
4258   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
4259      symbols are resolved by the loader.  Add them to .rela.dyn.  */
4260   if (h != NULL && is_gott_symbol (info, &h->root))
4261     {
4262       Elf_Internal_Rela outrel;
4263       bfd_byte *loc;
4264       asection *s;
4265
4266       s = mips_elf_rel_dyn_section (info, FALSE);
4267       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
4268
4269       outrel.r_offset = (input_section->output_section->vma
4270                          + input_section->output_offset
4271                          + relocation->r_offset);
4272       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
4273       outrel.r_addend = addend;
4274       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
4275
4276       /* If we've written this relocation for a readonly section,
4277          we need to set DF_TEXTREL again, so that we do not delete the
4278          DT_TEXTREL tag.  */
4279       if (MIPS_ELF_READONLY_SECTION (input_section))
4280         info->flags |= DF_TEXTREL;
4281
4282       *valuep = 0;
4283       return bfd_reloc_ok;
4284     }
4285
4286   /* Figure out what kind of relocation is being performed.  */
4287   switch (r_type)
4288     {
4289     case R_MIPS_NONE:
4290       return bfd_reloc_continue;
4291
4292     case R_MIPS_16:
4293       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
4294       overflowed_p = mips_elf_overflow_p (value, 16);
4295       break;
4296
4297     case R_MIPS_32:
4298     case R_MIPS_REL32:
4299     case R_MIPS_64:
4300       if ((info->shared
4301            || (!htab->is_vxworks
4302                && htab->root.dynamic_sections_created
4303                && h != NULL
4304                && h->root.def_dynamic
4305                && !h->root.def_regular))
4306           && r_symndx != 0
4307           && (input_section->flags & SEC_ALLOC) != 0)
4308         {
4309           /* If we're creating a shared library, or this relocation is
4310              against a symbol in a shared library, then we can't know
4311              where the symbol will end up.  So, we create a relocation
4312              record in the output, and leave the job up to the dynamic
4313              linker.
4314
4315              In VxWorks executables, references to external symbols
4316              are handled using copy relocs or PLT stubs, so there's
4317              no need to add a dynamic relocation here.  */
4318           value = addend;
4319           if (!mips_elf_create_dynamic_relocation (abfd,
4320                                                    info,
4321                                                    relocation,
4322                                                    h,
4323                                                    sec,
4324                                                    symbol,
4325                                                    &value,
4326                                                    input_section))
4327             return bfd_reloc_undefined;
4328         }
4329       else
4330         {
4331           if (r_type != R_MIPS_REL32)
4332             value = symbol + addend;
4333           else
4334             value = addend;
4335         }
4336       value &= howto->dst_mask;
4337       break;
4338
4339     case R_MIPS_PC32:
4340       value = symbol + addend - p;
4341       value &= howto->dst_mask;
4342       break;
4343
4344     case R_MIPS16_26:
4345       /* The calculation for R_MIPS16_26 is just the same as for an
4346          R_MIPS_26.  It's only the storage of the relocated field into
4347          the output file that's different.  That's handled in
4348          mips_elf_perform_relocation.  So, we just fall through to the
4349          R_MIPS_26 case here.  */
4350     case R_MIPS_26:
4351       if (local_p)
4352         value = ((addend | ((p + 4) & 0xf0000000)) + symbol) >> 2;
4353       else
4354         {
4355           value = (_bfd_mips_elf_sign_extend (addend, 28) + symbol) >> 2;
4356           if (h->root.root.type != bfd_link_hash_undefweak)
4357             overflowed_p = (value >> 26) != ((p + 4) >> 28);
4358         }
4359       value &= howto->dst_mask;
4360       break;
4361
4362     case R_MIPS_TLS_DTPREL_HI16:
4363       value = (mips_elf_high (addend + symbol - dtprel_base (info))
4364                & howto->dst_mask);
4365       break;
4366
4367     case R_MIPS_TLS_DTPREL_LO16:
4368     case R_MIPS_TLS_DTPREL32:
4369     case R_MIPS_TLS_DTPREL64:
4370       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
4371       break;
4372
4373     case R_MIPS_TLS_TPREL_HI16:
4374       value = (mips_elf_high (addend + symbol - tprel_base (info))
4375                & howto->dst_mask);
4376       break;
4377
4378     case R_MIPS_TLS_TPREL_LO16:
4379       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
4380       break;
4381
4382     case R_MIPS_HI16:
4383     case R_MIPS16_HI16:
4384       if (!gp_disp_p)
4385         {
4386           value = mips_elf_high (addend + symbol);
4387           value &= howto->dst_mask;
4388         }
4389       else
4390         {
4391           /* For MIPS16 ABI code we generate this sequence
4392                 0: li      $v0,%hi(_gp_disp)
4393                 4: addiupc $v1,%lo(_gp_disp)
4394                 8: sll     $v0,16
4395                12: addu    $v0,$v1
4396                14: move    $gp,$v0
4397              So the offsets of hi and lo relocs are the same, but the
4398              $pc is four higher than $t9 would be, so reduce
4399              both reloc addends by 4. */
4400           if (r_type == R_MIPS16_HI16)
4401             value = mips_elf_high (addend + gp - p - 4);
4402           else
4403             value = mips_elf_high (addend + gp - p);
4404           overflowed_p = mips_elf_overflow_p (value, 16);
4405         }
4406       break;
4407
4408     case R_MIPS_LO16:
4409     case R_MIPS16_LO16:
4410       if (!gp_disp_p)
4411         value = (symbol + addend) & howto->dst_mask;
4412       else
4413         {
4414           /* See the comment for R_MIPS16_HI16 above for the reason
4415              for this conditional.  */
4416           if (r_type == R_MIPS16_LO16)
4417             value = addend + gp - p;
4418           else
4419             value = addend + gp - p + 4;
4420           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
4421              for overflow.  But, on, say, IRIX5, relocations against
4422              _gp_disp are normally generated from the .cpload
4423              pseudo-op.  It generates code that normally looks like
4424              this:
4425
4426                lui    $gp,%hi(_gp_disp)
4427                addiu  $gp,$gp,%lo(_gp_disp)
4428                addu   $gp,$gp,$t9
4429
4430              Here $t9 holds the address of the function being called,
4431              as required by the MIPS ELF ABI.  The R_MIPS_LO16
4432              relocation can easily overflow in this situation, but the
4433              R_MIPS_HI16 relocation will handle the overflow.
4434              Therefore, we consider this a bug in the MIPS ABI, and do
4435              not check for overflow here.  */
4436         }
4437       break;
4438
4439     case R_MIPS_LITERAL:
4440       /* Because we don't merge literal sections, we can handle this
4441          just like R_MIPS_GPREL16.  In the long run, we should merge
4442          shared literals, and then we will need to additional work
4443          here.  */
4444
4445       /* Fall through.  */
4446
4447     case R_MIPS16_GPREL:
4448       /* The R_MIPS16_GPREL performs the same calculation as
4449          R_MIPS_GPREL16, but stores the relocated bits in a different
4450          order.  We don't need to do anything special here; the
4451          differences are handled in mips_elf_perform_relocation.  */
4452     case R_MIPS_GPREL16:
4453       /* Only sign-extend the addend if it was extracted from the
4454          instruction.  If the addend was separate, leave it alone,
4455          otherwise we may lose significant bits.  */
4456       if (howto->partial_inplace)
4457         addend = _bfd_mips_elf_sign_extend (addend, 16);
4458       value = symbol + addend - gp;
4459       /* If the symbol was local, any earlier relocatable links will
4460          have adjusted its addend with the gp offset, so compensate
4461          for that now.  Don't do it for symbols forced local in this
4462          link, though, since they won't have had the gp offset applied
4463          to them before.  */
4464       if (was_local_p)
4465         value += gp0;
4466       overflowed_p = mips_elf_overflow_p (value, 16);
4467       break;
4468
4469     case R_MIPS_GOT16:
4470     case R_MIPS_CALL16:
4471       /* VxWorks does not have separate local and global semantics for
4472          R_MIPS_GOT16; every relocation evaluates to "G".  */
4473       if (!htab->is_vxworks && local_p)
4474         {
4475           bfd_boolean forced;
4476
4477           forced = ! mips_elf_local_relocation_p (input_bfd, relocation,
4478                                                   local_sections, FALSE);
4479           value = mips_elf_got16_entry (abfd, input_bfd, info,
4480                                         symbol + addend, forced);
4481           if (value == MINUS_ONE)
4482             return bfd_reloc_outofrange;
4483           value
4484             = mips_elf_got_offset_from_index (dynobj, abfd, input_bfd, value);
4485           overflowed_p = mips_elf_overflow_p (value, 16);
4486           break;
4487         }
4488
4489       /* Fall through.  */
4490
4491     case R_MIPS_TLS_GD:
4492     case R_MIPS_TLS_GOTTPREL:
4493     case R_MIPS_TLS_LDM:
4494     case R_MIPS_GOT_DISP:
4495     got_disp:
4496       value = g;
4497       overflowed_p = mips_elf_overflow_p (value, 16);
4498       break;
4499
4500     case R_MIPS_GPREL32:
4501       value = (addend + symbol + gp0 - gp);
4502       if (!save_addend)
4503         value &= howto->dst_mask;
4504       break;
4505
4506     case R_MIPS_PC16:
4507     case R_MIPS_GNU_REL16_S2:
4508       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
4509       overflowed_p = mips_elf_overflow_p (value, 18);
4510       value >>= howto->rightshift;
4511       value &= howto->dst_mask;
4512       break;
4513
4514     case R_MIPS_GOT_HI16:
4515     case R_MIPS_CALL_HI16:
4516       /* We're allowed to handle these two relocations identically.
4517          The dynamic linker is allowed to handle the CALL relocations
4518          differently by creating a lazy evaluation stub.  */
4519       value = g;
4520       value = mips_elf_high (value);
4521       value &= howto->dst_mask;
4522       break;
4523
4524     case R_MIPS_GOT_LO16:
4525     case R_MIPS_CALL_LO16:
4526       value = g & howto->dst_mask;
4527       break;
4528
4529     case R_MIPS_GOT_PAGE:
4530       /* GOT_PAGE relocations that reference non-local symbols decay
4531          to GOT_DISP.  The corresponding GOT_OFST relocation decays to
4532          0.  */
4533       if (! local_p)
4534         goto got_disp;
4535       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
4536       if (value == MINUS_ONE)
4537         return bfd_reloc_outofrange;
4538       value = mips_elf_got_offset_from_index (dynobj, abfd, input_bfd, value);
4539       overflowed_p = mips_elf_overflow_p (value, 16);
4540       break;
4541
4542     case R_MIPS_GOT_OFST:
4543       if (local_p)
4544         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
4545       else
4546         value = addend;
4547       overflowed_p = mips_elf_overflow_p (value, 16);
4548       break;
4549
4550     case R_MIPS_SUB:
4551       value = symbol - addend;
4552       value &= howto->dst_mask;
4553       break;
4554
4555     case R_MIPS_HIGHER:
4556       value = mips_elf_higher (addend + symbol);
4557       value &= howto->dst_mask;
4558       break;
4559
4560     case R_MIPS_HIGHEST:
4561       value = mips_elf_highest (addend + symbol);
4562       value &= howto->dst_mask;
4563       break;
4564
4565     case R_MIPS_SCN_DISP:
4566       value = symbol + addend - sec->output_offset;
4567       value &= howto->dst_mask;
4568       break;
4569
4570     case R_MIPS_JALR:
4571       /* This relocation is only a hint.  In some cases, we optimize
4572          it into a bal instruction.  But we don't try to optimize
4573          branches to the PLT; that will wind up wasting time.  */
4574       if (h != NULL && h->root.plt.offset != (bfd_vma) -1)
4575         return bfd_reloc_continue;
4576       value = symbol + addend;
4577       break;
4578
4579     case R_MIPS_PJUMP:
4580     case R_MIPS_GNU_VTINHERIT:
4581     case R_MIPS_GNU_VTENTRY:
4582       /* We don't do anything with these at present.  */
4583       return bfd_reloc_continue;
4584
4585     default:
4586       /* An unrecognized relocation type.  */
4587       return bfd_reloc_notsupported;
4588     }
4589
4590   /* Store the VALUE for our caller.  */
4591   *valuep = value;
4592   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
4593 }
4594
4595 /* Obtain the field relocated by RELOCATION.  */
4596
4597 static bfd_vma
4598 mips_elf_obtain_contents (reloc_howto_type *howto,
4599                           const Elf_Internal_Rela *relocation,
4600                           bfd *input_bfd, bfd_byte *contents)
4601 {
4602   bfd_vma x;
4603   bfd_byte *location = contents + relocation->r_offset;
4604
4605   /* Obtain the bytes.  */
4606   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
4607
4608   return x;
4609 }
4610
4611 /* It has been determined that the result of the RELOCATION is the
4612    VALUE.  Use HOWTO to place VALUE into the output file at the
4613    appropriate position.  The SECTION is the section to which the
4614    relocation applies.  If REQUIRE_JALX is TRUE, then the opcode used
4615    for the relocation must be either JAL or JALX, and it is
4616    unconditionally converted to JALX.
4617
4618    Returns FALSE if anything goes wrong.  */
4619
4620 static bfd_boolean
4621 mips_elf_perform_relocation (struct bfd_link_info *info,
4622                              reloc_howto_type *howto,
4623                              const Elf_Internal_Rela *relocation,
4624                              bfd_vma value, bfd *input_bfd,
4625                              asection *input_section, bfd_byte *contents,
4626                              bfd_boolean require_jalx)
4627 {
4628   bfd_vma x;
4629   bfd_byte *location;
4630   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
4631
4632   /* Figure out where the relocation is occurring.  */
4633   location = contents + relocation->r_offset;
4634
4635   _bfd_mips16_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
4636
4637   /* Obtain the current value.  */
4638   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
4639
4640   /* Clear the field we are setting.  */
4641   x &= ~howto->dst_mask;
4642
4643   /* Set the field.  */
4644   x |= (value & howto->dst_mask);
4645
4646   /* If required, turn JAL into JALX.  */
4647   if (require_jalx)
4648     {
4649       bfd_boolean ok;
4650       bfd_vma opcode = x >> 26;
4651       bfd_vma jalx_opcode;
4652
4653       /* Check to see if the opcode is already JAL or JALX.  */
4654       if (r_type == R_MIPS16_26)
4655         {
4656           ok = ((opcode == 0x6) || (opcode == 0x7));
4657           jalx_opcode = 0x7;
4658         }
4659       else
4660         {
4661           ok = ((opcode == 0x3) || (opcode == 0x1d));
4662           jalx_opcode = 0x1d;
4663         }
4664
4665       /* If the opcode is not JAL or JALX, there's a problem.  */
4666       if (!ok)
4667         {
4668           (*_bfd_error_handler)
4669             (_("%B: %A+0x%lx: jump to stub routine which is not jal"),
4670              input_bfd,
4671              input_section,
4672              (unsigned long) relocation->r_offset);
4673           bfd_set_error (bfd_error_bad_value);
4674           return FALSE;
4675         }
4676
4677       /* Make this the JALX opcode.  */
4678       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
4679     }
4680
4681   /* On the RM9000, bal is faster than jal, because bal uses branch
4682      prediction hardware.  If we are linking for the RM9000, and we
4683      see jal, and bal fits, use it instead.  Note that this
4684      transformation should be safe for all architectures.  */
4685   if (bfd_get_mach (input_bfd) == bfd_mach_mips9000
4686       && !info->relocatable
4687       && !require_jalx
4688       && ((r_type == R_MIPS_26 && (x >> 26) == 0x3)         /* jal addr */
4689           || (r_type == R_MIPS_JALR && x == 0x0320f809)))   /* jalr t9 */
4690     {
4691       bfd_vma addr;
4692       bfd_vma dest;
4693       bfd_signed_vma off;
4694
4695       addr = (input_section->output_section->vma
4696               + input_section->output_offset
4697               + relocation->r_offset
4698               + 4);
4699       if (r_type == R_MIPS_26)
4700         dest = (value << 2) | ((addr >> 28) << 28);
4701       else
4702         dest = value;
4703       off = dest - addr;
4704       if (off <= 0x1ffff && off >= -0x20000)
4705         x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
4706     }
4707
4708   /* Put the value into the output.  */
4709   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
4710
4711   _bfd_mips16_elf_reloc_shuffle(input_bfd, r_type, !info->relocatable,
4712                                 location);
4713
4714   return TRUE;
4715 }
4716
4717 /* Returns TRUE if SECTION is a MIPS16 stub section.  */
4718
4719 static bfd_boolean
4720 mips16_stub_section_p (bfd *abfd ATTRIBUTE_UNUSED, asection *section)
4721 {
4722   const char *name = bfd_get_section_name (abfd, section);
4723
4724   return FN_STUB_P (name) || CALL_STUB_P (name) || CALL_FP_STUB_P (name);
4725 }
4726 \f
4727 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
4728
4729 static void
4730 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4731                                        unsigned int n)
4732 {
4733   asection *s;
4734   struct mips_elf_link_hash_table *htab;
4735
4736   htab = mips_elf_hash_table (info);
4737   s = mips_elf_rel_dyn_section (info, FALSE);
4738   BFD_ASSERT (s != NULL);
4739
4740   if (htab->is_vxworks)
4741     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4742   else
4743     {
4744       if (s->size == 0)
4745         {
4746           /* Make room for a null element.  */
4747           s->size += MIPS_ELF_REL_SIZE (abfd);
4748           ++s->reloc_count;
4749         }
4750       s->size += n * MIPS_ELF_REL_SIZE (abfd);
4751     }
4752 }
4753
4754 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
4755    is the original relocation, which is now being transformed into a
4756    dynamic relocation.  The ADDENDP is adjusted if necessary; the
4757    caller should store the result in place of the original addend.  */
4758
4759 static bfd_boolean
4760 mips_elf_create_dynamic_relocation (bfd *output_bfd,
4761                                     struct bfd_link_info *info,
4762                                     const Elf_Internal_Rela *rel,
4763                                     struct mips_elf_link_hash_entry *h,
4764                                     asection *sec, bfd_vma symbol,
4765                                     bfd_vma *addendp, asection *input_section)
4766 {
4767   Elf_Internal_Rela outrel[3];
4768   asection *sreloc;
4769   bfd *dynobj;
4770   int r_type;
4771   long indx;
4772   bfd_boolean defined_p;
4773   struct mips_elf_link_hash_table *htab;
4774
4775   htab = mips_elf_hash_table (info);
4776   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
4777   dynobj = elf_hash_table (info)->dynobj;
4778   sreloc = mips_elf_rel_dyn_section (info, FALSE);
4779   BFD_ASSERT (sreloc != NULL);
4780   BFD_ASSERT (sreloc->contents != NULL);
4781   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
4782               < sreloc->size);
4783
4784   outrel[0].r_offset =
4785     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
4786   if (ABI_64_P (output_bfd))
4787     {
4788       outrel[1].r_offset =
4789         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
4790       outrel[2].r_offset =
4791         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
4792     }
4793
4794   if (outrel[0].r_offset == MINUS_ONE)
4795     /* The relocation field has been deleted.  */
4796     return TRUE;
4797
4798   if (outrel[0].r_offset == MINUS_TWO)
4799     {
4800       /* The relocation field has been converted into a relative value of
4801          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
4802          the field to be fully relocated, so add in the symbol's value.  */
4803       *addendp += symbol;
4804       return TRUE;
4805     }
4806
4807   /* We must now calculate the dynamic symbol table index to use
4808      in the relocation.  */
4809   if (h != NULL
4810       && (!h->root.def_regular
4811           || (info->shared && !info->symbolic && !h->root.forced_local)))
4812     {
4813       indx = h->root.dynindx;
4814       if (SGI_COMPAT (output_bfd))
4815         defined_p = h->root.def_regular;
4816       else
4817         /* ??? glibc's ld.so just adds the final GOT entry to the
4818            relocation field.  It therefore treats relocs against
4819            defined symbols in the same way as relocs against
4820            undefined symbols.  */
4821         defined_p = FALSE;
4822     }
4823   else
4824     {
4825       if (sec != NULL && bfd_is_abs_section (sec))
4826         indx = 0;
4827       else if (sec == NULL || sec->owner == NULL)
4828         {
4829           bfd_set_error (bfd_error_bad_value);
4830           return FALSE;
4831         }
4832       else
4833         {
4834           indx = elf_section_data (sec->output_section)->dynindx;
4835           if (indx == 0)
4836             {
4837               asection *osec = htab->root.text_index_section;
4838               indx = elf_section_data (osec)->dynindx;
4839             }
4840           if (indx == 0)
4841             abort ();
4842         }
4843
4844       /* Instead of generating a relocation using the section
4845          symbol, we may as well make it a fully relative
4846          relocation.  We want to avoid generating relocations to
4847          local symbols because we used to generate them
4848          incorrectly, without adding the original symbol value,
4849          which is mandated by the ABI for section symbols.  In
4850          order to give dynamic loaders and applications time to
4851          phase out the incorrect use, we refrain from emitting
4852          section-relative relocations.  It's not like they're
4853          useful, after all.  This should be a bit more efficient
4854          as well.  */
4855       /* ??? Although this behavior is compatible with glibc's ld.so,
4856          the ABI says that relocations against STN_UNDEF should have
4857          a symbol value of 0.  Irix rld honors this, so relocations
4858          against STN_UNDEF have no effect.  */
4859       if (!SGI_COMPAT (output_bfd))
4860         indx = 0;
4861       defined_p = TRUE;
4862     }
4863
4864   /* If the relocation was previously an absolute relocation and
4865      this symbol will not be referred to by the relocation, we must
4866      adjust it by the value we give it in the dynamic symbol table.
4867      Otherwise leave the job up to the dynamic linker.  */
4868   if (defined_p && r_type != R_MIPS_REL32)
4869     *addendp += symbol;
4870
4871   if (htab->is_vxworks)
4872     /* VxWorks uses non-relative relocations for this.  */
4873     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
4874   else
4875     /* The relocation is always an REL32 relocation because we don't
4876        know where the shared library will wind up at load-time.  */
4877     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
4878                                    R_MIPS_REL32);
4879
4880   /* For strict adherence to the ABI specification, we should
4881      generate a R_MIPS_64 relocation record by itself before the
4882      _REL32/_64 record as well, such that the addend is read in as
4883      a 64-bit value (REL32 is a 32-bit relocation, after all).
4884      However, since none of the existing ELF64 MIPS dynamic
4885      loaders seems to care, we don't waste space with these
4886      artificial relocations.  If this turns out to not be true,
4887      mips_elf_allocate_dynamic_relocation() should be tweaked so
4888      as to make room for a pair of dynamic relocations per
4889      invocation if ABI_64_P, and here we should generate an
4890      additional relocation record with R_MIPS_64 by itself for a
4891      NULL symbol before this relocation record.  */
4892   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
4893                                  ABI_64_P (output_bfd)
4894                                  ? R_MIPS_64
4895                                  : R_MIPS_NONE);
4896   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
4897
4898   /* Adjust the output offset of the relocation to reference the
4899      correct location in the output file.  */
4900   outrel[0].r_offset += (input_section->output_section->vma
4901                          + input_section->output_offset);
4902   outrel[1].r_offset += (input_section->output_section->vma
4903                          + input_section->output_offset);
4904   outrel[2].r_offset += (input_section->output_section->vma
4905                          + input_section->output_offset);
4906
4907   /* Put the relocation back out.  We have to use the special
4908      relocation outputter in the 64-bit case since the 64-bit
4909      relocation format is non-standard.  */
4910   if (ABI_64_P (output_bfd))
4911     {
4912       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
4913         (output_bfd, &outrel[0],
4914          (sreloc->contents
4915           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
4916     }
4917   else if (htab->is_vxworks)
4918     {
4919       /* VxWorks uses RELA rather than REL dynamic relocations.  */
4920       outrel[0].r_addend = *addendp;
4921       bfd_elf32_swap_reloca_out
4922         (output_bfd, &outrel[0],
4923          (sreloc->contents
4924           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
4925     }
4926   else
4927     bfd_elf32_swap_reloc_out
4928       (output_bfd, &outrel[0],
4929        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
4930
4931   /* We've now added another relocation.  */
4932   ++sreloc->reloc_count;
4933
4934   /* Make sure the output section is writable.  The dynamic linker
4935      will be writing to it.  */
4936   elf_section_data (input_section->output_section)->this_hdr.sh_flags
4937     |= SHF_WRITE;
4938
4939   /* On IRIX5, make an entry of compact relocation info.  */
4940   if (IRIX_COMPAT (output_bfd) == ict_irix5)
4941     {
4942       asection *scpt = bfd_get_section_by_name (dynobj, ".compact_rel");
4943       bfd_byte *cr;
4944
4945       if (scpt)
4946         {
4947           Elf32_crinfo cptrel;
4948
4949           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
4950           cptrel.vaddr = (rel->r_offset
4951                           + input_section->output_section->vma
4952                           + input_section->output_offset);
4953           if (r_type == R_MIPS_REL32)
4954             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
4955           else
4956             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
4957           mips_elf_set_cr_dist2to (cptrel, 0);
4958           cptrel.konst = *addendp;
4959
4960           cr = (scpt->contents
4961                 + sizeof (Elf32_External_compact_rel));
4962           mips_elf_set_cr_relvaddr (cptrel, 0);
4963           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
4964                                      ((Elf32_External_crinfo *) cr
4965                                       + scpt->reloc_count));
4966           ++scpt->reloc_count;
4967         }
4968     }
4969
4970   /* If we've written this relocation for a readonly section,
4971      we need to set DF_TEXTREL again, so that we do not delete the
4972      DT_TEXTREL tag.  */
4973   if (MIPS_ELF_READONLY_SECTION (input_section))
4974     info->flags |= DF_TEXTREL;
4975
4976   return TRUE;
4977 }
4978 \f
4979 /* Return the MACH for a MIPS e_flags value.  */
4980
4981 unsigned long
4982 _bfd_elf_mips_mach (flagword flags)
4983 {
4984   switch (flags & EF_MIPS_MACH)
4985     {
4986     case E_MIPS_MACH_3900:
4987       return bfd_mach_mips3900;
4988
4989     case E_MIPS_MACH_4010:
4990       return bfd_mach_mips4010;
4991
4992     case E_MIPS_MACH_4100:
4993       return bfd_mach_mips4100;
4994
4995     case E_MIPS_MACH_4111:
4996       return bfd_mach_mips4111;
4997
4998     case E_MIPS_MACH_4120:
4999       return bfd_mach_mips4120;
5000
5001     case E_MIPS_MACH_4650:
5002       return bfd_mach_mips4650;
5003
5004     case E_MIPS_MACH_5400:
5005       return bfd_mach_mips5400;
5006
5007     case E_MIPS_MACH_5500:
5008       return bfd_mach_mips5500;
5009
5010     case E_MIPS_MACH_9000:
5011       return bfd_mach_mips9000;
5012
5013     case E_MIPS_MACH_SB1:
5014       return bfd_mach_mips_sb1;
5015
5016     default:
5017       switch (flags & EF_MIPS_ARCH)
5018         {
5019         default:
5020         case E_MIPS_ARCH_1:
5021           return bfd_mach_mips3000;
5022
5023         case E_MIPS_ARCH_2:
5024           return bfd_mach_mips6000;
5025
5026         case E_MIPS_ARCH_3:
5027           return bfd_mach_mips4000;
5028
5029         case E_MIPS_ARCH_4:
5030           return bfd_mach_mips8000;
5031
5032         case E_MIPS_ARCH_5:
5033           return bfd_mach_mips5;
5034
5035         case E_MIPS_ARCH_32:
5036           return bfd_mach_mipsisa32;
5037
5038         case E_MIPS_ARCH_64:
5039           return bfd_mach_mipsisa64;
5040
5041         case E_MIPS_ARCH_32R2:
5042           return bfd_mach_mipsisa32r2;
5043
5044         case E_MIPS_ARCH_64R2:
5045           return bfd_mach_mipsisa64r2;
5046         }
5047     }
5048
5049   return 0;
5050 }
5051
5052 /* Return printable name for ABI.  */
5053
5054 static INLINE char *
5055 elf_mips_abi_name (bfd *abfd)
5056 {
5057   flagword flags;
5058
5059   flags = elf_elfheader (abfd)->e_flags;
5060   switch (flags & EF_MIPS_ABI)
5061     {
5062     case 0:
5063       if (ABI_N32_P (abfd))
5064         return "N32";
5065       else if (ABI_64_P (abfd))
5066         return "64";
5067       else
5068         return "none";
5069     case E_MIPS_ABI_O32:
5070       return "O32";
5071     case E_MIPS_ABI_O64:
5072       return "O64";
5073     case E_MIPS_ABI_EABI32:
5074       return "EABI32";
5075     case E_MIPS_ABI_EABI64:
5076       return "EABI64";
5077     default:
5078       return "unknown abi";
5079     }
5080 }
5081 \f
5082 /* MIPS ELF uses two common sections.  One is the usual one, and the
5083    other is for small objects.  All the small objects are kept
5084    together, and then referenced via the gp pointer, which yields
5085    faster assembler code.  This is what we use for the small common
5086    section.  This approach is copied from ecoff.c.  */
5087 static asection mips_elf_scom_section;
5088 static asymbol mips_elf_scom_symbol;
5089 static asymbol *mips_elf_scom_symbol_ptr;
5090
5091 /* MIPS ELF also uses an acommon section, which represents an
5092    allocated common symbol which may be overridden by a
5093    definition in a shared library.  */
5094 static asection mips_elf_acom_section;
5095 static asymbol mips_elf_acom_symbol;
5096 static asymbol *mips_elf_acom_symbol_ptr;
5097
5098 /* Handle the special MIPS section numbers that a symbol may use.
5099    This is used for both the 32-bit and the 64-bit ABI.  */
5100
5101 void
5102 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
5103 {
5104   elf_symbol_type *elfsym;
5105
5106   elfsym = (elf_symbol_type *) asym;
5107   switch (elfsym->internal_elf_sym.st_shndx)
5108     {
5109     case SHN_MIPS_ACOMMON:
5110       /* This section is used in a dynamically linked executable file.
5111          It is an allocated common section.  The dynamic linker can
5112          either resolve these symbols to something in a shared
5113          library, or it can just leave them here.  For our purposes,
5114          we can consider these symbols to be in a new section.  */
5115       if (mips_elf_acom_section.name == NULL)
5116         {
5117           /* Initialize the acommon section.  */
5118           mips_elf_acom_section.name = ".acommon";
5119           mips_elf_acom_section.flags = SEC_ALLOC;
5120           mips_elf_acom_section.output_section = &mips_elf_acom_section;
5121           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
5122           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
5123           mips_elf_acom_symbol.name = ".acommon";
5124           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
5125           mips_elf_acom_symbol.section = &mips_elf_acom_section;
5126           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
5127         }
5128       asym->section = &mips_elf_acom_section;
5129       break;
5130
5131     case SHN_COMMON:
5132       /* Common symbols less than the GP size are automatically
5133          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
5134       if (asym->value > elf_gp_size (abfd)
5135           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
5136           || IRIX_COMPAT (abfd) == ict_irix6)
5137         break;
5138       /* Fall through.  */
5139     case SHN_MIPS_SCOMMON:
5140       if (mips_elf_scom_section.name == NULL)
5141         {
5142           /* Initialize the small common section.  */
5143           mips_elf_scom_section.name = ".scommon";
5144           mips_elf_scom_section.flags = SEC_IS_COMMON;
5145           mips_elf_scom_section.output_section = &mips_elf_scom_section;
5146           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
5147           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
5148           mips_elf_scom_symbol.name = ".scommon";
5149           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
5150           mips_elf_scom_symbol.section = &mips_elf_scom_section;
5151           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
5152         }
5153       asym->section = &mips_elf_scom_section;
5154       asym->value = elfsym->internal_elf_sym.st_size;
5155       break;
5156
5157     case SHN_MIPS_SUNDEFINED:
5158       asym->section = bfd_und_section_ptr;
5159       break;
5160
5161     case SHN_MIPS_TEXT:
5162       {
5163         asection *section = bfd_get_section_by_name (abfd, ".text");
5164
5165         BFD_ASSERT (SGI_COMPAT (abfd));
5166         if (section != NULL)
5167           {
5168             asym->section = section;
5169             /* MIPS_TEXT is a bit special, the address is not an offset
5170                to the base of the .text section.  So substract the section
5171                base address to make it an offset.  */
5172             asym->value -= section->vma;
5173           }
5174       }
5175       break;
5176
5177     case SHN_MIPS_DATA:
5178       {
5179         asection *section = bfd_get_section_by_name (abfd, ".data");
5180
5181         BFD_ASSERT (SGI_COMPAT (abfd));
5182         if (section != NULL)
5183           {
5184             asym->section = section;
5185             /* MIPS_DATA is a bit special, the address is not an offset
5186                to the base of the .data section.  So substract the section
5187                base address to make it an offset.  */
5188             asym->value -= section->vma;
5189           }
5190       }
5191       break;
5192     }
5193 }
5194 \f
5195 /* Implement elf_backend_eh_frame_address_size.  This differs from
5196    the default in the way it handles EABI64.
5197
5198    EABI64 was originally specified as an LP64 ABI, and that is what
5199    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
5200    historically accepted the combination of -mabi=eabi and -mlong32,
5201    and this ILP32 variation has become semi-official over time.
5202    Both forms use elf32 and have pointer-sized FDE addresses.
5203
5204    If an EABI object was generated by GCC 4.0 or above, it will have
5205    an empty .gcc_compiled_longXX section, where XX is the size of longs
5206    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
5207    have no special marking to distinguish them from LP64 objects.
5208
5209    We don't want users of the official LP64 ABI to be punished for the
5210    existence of the ILP32 variant, but at the same time, we don't want
5211    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
5212    We therefore take the following approach:
5213
5214       - If ABFD contains a .gcc_compiled_longXX section, use it to
5215         determine the pointer size.
5216
5217       - Otherwise check the type of the first relocation.  Assume that
5218         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
5219
5220       - Otherwise punt.
5221
5222    The second check is enough to detect LP64 objects generated by pre-4.0
5223    compilers because, in the kind of output generated by those compilers,
5224    the first relocation will be associated with either a CIE personality
5225    routine or an FDE start address.  Furthermore, the compilers never
5226    used a special (non-pointer) encoding for this ABI.
5227
5228    Checking the relocation type should also be safe because there is no
5229    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
5230    did so.  */
5231
5232 unsigned int
5233 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
5234 {
5235   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
5236     return 8;
5237   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
5238     {
5239       bfd_boolean long32_p, long64_p;
5240
5241       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
5242       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
5243       if (long32_p && long64_p)
5244         return 0;
5245       if (long32_p)
5246         return 4;
5247       if (long64_p)
5248         return 8;
5249
5250       if (sec->reloc_count > 0
5251           && elf_section_data (sec)->relocs != NULL
5252           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
5253               == R_MIPS_64))
5254         return 8;
5255
5256       return 0;
5257     }
5258   return 4;
5259 }
5260 \f
5261 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
5262    relocations against two unnamed section symbols to resolve to the
5263    same address.  For example, if we have code like:
5264
5265         lw      $4,%got_disp(.data)($gp)
5266         lw      $25,%got_disp(.text)($gp)
5267         jalr    $25
5268
5269    then the linker will resolve both relocations to .data and the program
5270    will jump there rather than to .text.
5271
5272    We can work around this problem by giving names to local section symbols.
5273    This is also what the MIPSpro tools do.  */
5274
5275 bfd_boolean
5276 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
5277 {
5278   return SGI_COMPAT (abfd);
5279 }
5280 \f
5281 /* Work over a section just before writing it out.  This routine is
5282    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
5283    sections that need the SHF_MIPS_GPREL flag by name; there has to be
5284    a better way.  */
5285
5286 bfd_boolean
5287 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
5288 {
5289   if (hdr->sh_type == SHT_MIPS_REGINFO
5290       && hdr->sh_size > 0)
5291     {
5292       bfd_byte buf[4];
5293
5294       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
5295       BFD_ASSERT (hdr->contents == NULL);
5296
5297       if (bfd_seek (abfd,
5298                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
5299                     SEEK_SET) != 0)
5300         return FALSE;
5301       H_PUT_32 (abfd, elf_gp (abfd), buf);
5302       if (bfd_bwrite (buf, 4, abfd) != 4)
5303         return FALSE;
5304     }
5305
5306   if (hdr->sh_type == SHT_MIPS_OPTIONS
5307       && hdr->bfd_section != NULL
5308       && mips_elf_section_data (hdr->bfd_section) != NULL
5309       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
5310     {
5311       bfd_byte *contents, *l, *lend;
5312
5313       /* We stored the section contents in the tdata field in the
5314          set_section_contents routine.  We save the section contents
5315          so that we don't have to read them again.
5316          At this point we know that elf_gp is set, so we can look
5317          through the section contents to see if there is an
5318          ODK_REGINFO structure.  */
5319
5320       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
5321       l = contents;
5322       lend = contents + hdr->sh_size;
5323       while (l + sizeof (Elf_External_Options) <= lend)
5324         {
5325           Elf_Internal_Options intopt;
5326
5327           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
5328                                         &intopt);
5329           if (intopt.size < sizeof (Elf_External_Options))
5330             {
5331               (*_bfd_error_handler)
5332                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
5333                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
5334               break;
5335             }
5336           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
5337             {
5338               bfd_byte buf[8];
5339
5340               if (bfd_seek (abfd,
5341                             (hdr->sh_offset
5342                              + (l - contents)
5343                              + sizeof (Elf_External_Options)
5344                              + (sizeof (Elf64_External_RegInfo) - 8)),
5345                              SEEK_SET) != 0)
5346                 return FALSE;
5347               H_PUT_64 (abfd, elf_gp (abfd), buf);
5348               if (bfd_bwrite (buf, 8, abfd) != 8)
5349                 return FALSE;
5350             }
5351           else if (intopt.kind == ODK_REGINFO)
5352             {
5353               bfd_byte buf[4];
5354
5355               if (bfd_seek (abfd,
5356                             (hdr->sh_offset
5357                              + (l - contents)
5358                              + sizeof (Elf_External_Options)
5359                              + (sizeof (Elf32_External_RegInfo) - 4)),
5360                             SEEK_SET) != 0)
5361                 return FALSE;
5362               H_PUT_32 (abfd, elf_gp (abfd), buf);
5363               if (bfd_bwrite (buf, 4, abfd) != 4)
5364                 return FALSE;
5365             }
5366           l += intopt.size;
5367         }
5368     }
5369
5370   if (hdr->bfd_section != NULL)
5371     {
5372       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
5373
5374       if (strcmp (name, ".sdata") == 0
5375           || strcmp (name, ".lit8") == 0
5376           || strcmp (name, ".lit4") == 0)
5377         {
5378           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5379           hdr->sh_type = SHT_PROGBITS;
5380         }
5381       else if (strcmp (name, ".sbss") == 0)
5382         {
5383           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5384           hdr->sh_type = SHT_NOBITS;
5385         }
5386       else if (strcmp (name, ".srdata") == 0)
5387         {
5388           hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
5389           hdr->sh_type = SHT_PROGBITS;
5390         }
5391       else if (strcmp (name, ".compact_rel") == 0)
5392         {
5393           hdr->sh_flags = 0;
5394           hdr->sh_type = SHT_PROGBITS;
5395         }
5396       else if (strcmp (name, ".rtproc") == 0)
5397         {
5398           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
5399             {
5400               unsigned int adjust;
5401
5402               adjust = hdr->sh_size % hdr->sh_addralign;
5403               if (adjust != 0)
5404                 hdr->sh_size += hdr->sh_addralign - adjust;
5405             }
5406         }
5407     }
5408
5409   return TRUE;
5410 }
5411
5412 /* Handle a MIPS specific section when reading an object file.  This
5413    is called when elfcode.h finds a section with an unknown type.
5414    This routine supports both the 32-bit and 64-bit ELF ABI.
5415
5416    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
5417    how to.  */
5418
5419 bfd_boolean
5420 _bfd_mips_elf_section_from_shdr (bfd *abfd,
5421                                  Elf_Internal_Shdr *hdr,
5422                                  const char *name,
5423                                  int shindex)
5424 {
5425   flagword flags = 0;
5426
5427   /* There ought to be a place to keep ELF backend specific flags, but
5428      at the moment there isn't one.  We just keep track of the
5429      sections by their name, instead.  Fortunately, the ABI gives
5430      suggested names for all the MIPS specific sections, so we will
5431      probably get away with this.  */
5432   switch (hdr->sh_type)
5433     {
5434     case SHT_MIPS_LIBLIST:
5435       if (strcmp (name, ".liblist") != 0)
5436         return FALSE;
5437       break;
5438     case SHT_MIPS_MSYM:
5439       if (strcmp (name, ".msym") != 0)
5440         return FALSE;
5441       break;
5442     case SHT_MIPS_CONFLICT:
5443       if (strcmp (name, ".conflict") != 0)
5444         return FALSE;
5445       break;
5446     case SHT_MIPS_GPTAB:
5447       if (! CONST_STRNEQ (name, ".gptab."))
5448         return FALSE;
5449       break;
5450     case SHT_MIPS_UCODE:
5451       if (strcmp (name, ".ucode") != 0)
5452         return FALSE;
5453       break;
5454     case SHT_MIPS_DEBUG:
5455       if (strcmp (name, ".mdebug") != 0)
5456         return FALSE;
5457       flags = SEC_DEBUGGING;
5458       break;
5459     case SHT_MIPS_REGINFO:
5460       if (strcmp (name, ".reginfo") != 0
5461           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
5462         return FALSE;
5463       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
5464       break;
5465     case SHT_MIPS_IFACE:
5466       if (strcmp (name, ".MIPS.interfaces") != 0)
5467         return FALSE;
5468       break;
5469     case SHT_MIPS_CONTENT:
5470       if (! CONST_STRNEQ (name, ".MIPS.content"))
5471         return FALSE;
5472       break;
5473     case SHT_MIPS_OPTIONS:
5474       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
5475         return FALSE;
5476       break;
5477     case SHT_MIPS_DWARF:
5478       if (! CONST_STRNEQ (name, ".debug_"))
5479         return FALSE;
5480       break;
5481     case SHT_MIPS_SYMBOL_LIB:
5482       if (strcmp (name, ".MIPS.symlib") != 0)
5483         return FALSE;
5484       break;
5485     case SHT_MIPS_EVENTS:
5486       if (! CONST_STRNEQ (name, ".MIPS.events")
5487           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
5488         return FALSE;
5489       break;
5490     default:
5491       break;
5492     }
5493
5494   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
5495     return FALSE;
5496
5497   if (flags)
5498     {
5499       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
5500                                    (bfd_get_section_flags (abfd,
5501                                                            hdr->bfd_section)
5502                                     | flags)))
5503         return FALSE;
5504     }
5505
5506   /* FIXME: We should record sh_info for a .gptab section.  */
5507
5508   /* For a .reginfo section, set the gp value in the tdata information
5509      from the contents of this section.  We need the gp value while
5510      processing relocs, so we just get it now.  The .reginfo section
5511      is not used in the 64-bit MIPS ELF ABI.  */
5512   if (hdr->sh_type == SHT_MIPS_REGINFO)
5513     {
5514       Elf32_External_RegInfo ext;
5515       Elf32_RegInfo s;
5516
5517       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
5518                                       &ext, 0, sizeof ext))
5519         return FALSE;
5520       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
5521       elf_gp (abfd) = s.ri_gp_value;
5522     }
5523
5524   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
5525      set the gp value based on what we find.  We may see both
5526      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
5527      they should agree.  */
5528   if (hdr->sh_type == SHT_MIPS_OPTIONS)
5529     {
5530       bfd_byte *contents, *l, *lend;
5531
5532       contents = bfd_malloc (hdr->sh_size);
5533       if (contents == NULL)
5534         return FALSE;
5535       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
5536                                       0, hdr->sh_size))
5537         {
5538           free (contents);
5539           return FALSE;
5540         }
5541       l = contents;
5542       lend = contents + hdr->sh_size;
5543       while (l + sizeof (Elf_External_Options) <= lend)
5544         {
5545           Elf_Internal_Options intopt;
5546
5547           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
5548                                         &intopt);
5549           if (intopt.size < sizeof (Elf_External_Options))
5550             {
5551               (*_bfd_error_handler)
5552                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
5553                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
5554               break;
5555             }
5556           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
5557             {
5558               Elf64_Internal_RegInfo intreg;
5559
5560               bfd_mips_elf64_swap_reginfo_in
5561                 (abfd,
5562                  ((Elf64_External_RegInfo *)
5563                   (l + sizeof (Elf_External_Options))),
5564                  &intreg);
5565               elf_gp (abfd) = intreg.ri_gp_value;
5566             }
5567           else if (intopt.kind == ODK_REGINFO)
5568             {
5569               Elf32_RegInfo intreg;
5570
5571               bfd_mips_elf32_swap_reginfo_in
5572                 (abfd,
5573                  ((Elf32_External_RegInfo *)
5574                   (l + sizeof (Elf_External_Options))),
5575                  &intreg);
5576               elf_gp (abfd) = intreg.ri_gp_value;
5577             }
5578           l += intopt.size;
5579         }
5580       free (contents);
5581     }
5582
5583   return TRUE;
5584 }
5585
5586 /* Set the correct type for a MIPS ELF section.  We do this by the
5587    section name, which is a hack, but ought to work.  This routine is
5588    used by both the 32-bit and the 64-bit ABI.  */
5589
5590 bfd_boolean
5591 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
5592 {
5593   const char *name = bfd_get_section_name (abfd, sec);
5594
5595   if (strcmp (name, ".liblist") == 0)
5596     {
5597       hdr->sh_type = SHT_MIPS_LIBLIST;
5598       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
5599       /* The sh_link field is set in final_write_processing.  */
5600     }
5601   else if (strcmp (name, ".conflict") == 0)
5602     hdr->sh_type = SHT_MIPS_CONFLICT;
5603   else if (CONST_STRNEQ (name, ".gptab."))
5604     {
5605       hdr->sh_type = SHT_MIPS_GPTAB;
5606       hdr->sh_entsize = sizeof (Elf32_External_gptab);
5607       /* The sh_info field is set in final_write_processing.  */
5608     }
5609   else if (strcmp (name, ".ucode") == 0)
5610     hdr->sh_type = SHT_MIPS_UCODE;
5611   else if (strcmp (name, ".mdebug") == 0)
5612     {
5613       hdr->sh_type = SHT_MIPS_DEBUG;
5614       /* In a shared object on IRIX 5.3, the .mdebug section has an
5615          entsize of 0.  FIXME: Does this matter?  */
5616       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
5617         hdr->sh_entsize = 0;
5618       else
5619         hdr->sh_entsize = 1;
5620     }
5621   else if (strcmp (name, ".reginfo") == 0)
5622     {
5623       hdr->sh_type = SHT_MIPS_REGINFO;
5624       /* In a shared object on IRIX 5.3, the .reginfo section has an
5625          entsize of 0x18.  FIXME: Does this matter?  */
5626       if (SGI_COMPAT (abfd))
5627         {
5628           if ((abfd->flags & DYNAMIC) != 0)
5629             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
5630           else
5631             hdr->sh_entsize = 1;
5632         }
5633       else
5634         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
5635     }
5636   else if (SGI_COMPAT (abfd)
5637            && (strcmp (name, ".hash") == 0
5638                || strcmp (name, ".dynamic") == 0
5639                || strcmp (name, ".dynstr") == 0))
5640     {
5641       if (SGI_COMPAT (abfd))
5642         hdr->sh_entsize = 0;
5643 #if 0
5644       /* This isn't how the IRIX6 linker behaves.  */
5645       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
5646 #endif
5647     }
5648   else if (strcmp (name, ".got") == 0
5649            || strcmp (name, ".srdata") == 0
5650            || strcmp (name, ".sdata") == 0
5651            || strcmp (name, ".sbss") == 0
5652            || strcmp (name, ".lit4") == 0
5653            || strcmp (name, ".lit8") == 0)
5654     hdr->sh_flags |= SHF_MIPS_GPREL;
5655   else if (strcmp (name, ".MIPS.interfaces") == 0)
5656     {
5657       hdr->sh_type = SHT_MIPS_IFACE;
5658       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
5659     }
5660   else if (CONST_STRNEQ (name, ".MIPS.content"))
5661     {
5662       hdr->sh_type = SHT_MIPS_CONTENT;
5663       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
5664       /* The sh_info field is set in final_write_processing.  */
5665     }
5666   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
5667     {
5668       hdr->sh_type = SHT_MIPS_OPTIONS;
5669       hdr->sh_entsize = 1;
5670       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
5671     }
5672   else if (CONST_STRNEQ (name, ".debug_"))
5673     hdr->sh_type = SHT_MIPS_DWARF;
5674   else if (strcmp (name, ".MIPS.symlib") == 0)
5675     {
5676       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
5677       /* The sh_link and sh_info fields are set in
5678          final_write_processing.  */
5679     }
5680   else if (CONST_STRNEQ (name, ".MIPS.events")
5681            || CONST_STRNEQ (name, ".MIPS.post_rel"))
5682     {
5683       hdr->sh_type = SHT_MIPS_EVENTS;
5684       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
5685       /* The sh_link field is set in final_write_processing.  */
5686     }
5687   else if (strcmp (name, ".msym") == 0)
5688     {
5689       hdr->sh_type = SHT_MIPS_MSYM;
5690       hdr->sh_flags |= SHF_ALLOC;
5691       hdr->sh_entsize = 8;
5692     }
5693
5694   /* The generic elf_fake_sections will set up REL_HDR using the default
5695    kind of relocations.  We used to set up a second header for the
5696    non-default kind of relocations here, but only NewABI would use
5697    these, and the IRIX ld doesn't like resulting empty RELA sections.
5698    Thus we create those header only on demand now.  */
5699
5700   return TRUE;
5701 }
5702
5703 /* Given a BFD section, try to locate the corresponding ELF section
5704    index.  This is used by both the 32-bit and the 64-bit ABI.
5705    Actually, it's not clear to me that the 64-bit ABI supports these,
5706    but for non-PIC objects we will certainly want support for at least
5707    the .scommon section.  */
5708
5709 bfd_boolean
5710 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
5711                                         asection *sec, int *retval)
5712 {
5713   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
5714     {
5715       *retval = SHN_MIPS_SCOMMON;
5716       return TRUE;
5717     }
5718   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
5719     {
5720       *retval = SHN_MIPS_ACOMMON;
5721       return TRUE;
5722     }
5723   return FALSE;
5724 }
5725 \f
5726 /* Hook called by the linker routine which adds symbols from an object
5727    file.  We must handle the special MIPS section numbers here.  */
5728
5729 bfd_boolean
5730 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
5731                                Elf_Internal_Sym *sym, const char **namep,
5732                                flagword *flagsp ATTRIBUTE_UNUSED,
5733                                asection **secp, bfd_vma *valp)
5734 {
5735   if (SGI_COMPAT (abfd)
5736       && (abfd->flags & DYNAMIC) != 0
5737       && strcmp (*namep, "_rld_new_interface") == 0)
5738     {
5739       /* Skip IRIX5 rld entry name.  */
5740       *namep = NULL;
5741       return TRUE;
5742     }
5743
5744   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
5745      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
5746      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
5747      a magic symbol resolved by the linker, we ignore this bogus definition
5748      of _gp_disp.  New ABI objects do not suffer from this problem so this
5749      is not done for them. */
5750   if (!NEWABI_P(abfd)
5751       && (sym->st_shndx == SHN_ABS)
5752       && (strcmp (*namep, "_gp_disp") == 0))
5753     {
5754       *namep = NULL;
5755       return TRUE;
5756     }
5757
5758   switch (sym->st_shndx)
5759     {
5760     case SHN_COMMON:
5761       /* Common symbols less than the GP size are automatically
5762          treated as SHN_MIPS_SCOMMON symbols.  */
5763       if (sym->st_size > elf_gp_size (abfd)
5764           || ELF_ST_TYPE (sym->st_info) == STT_TLS
5765           || IRIX_COMPAT (abfd) == ict_irix6)
5766         break;
5767       /* Fall through.  */
5768     case SHN_MIPS_SCOMMON:
5769       *secp = bfd_make_section_old_way (abfd, ".scommon");
5770       (*secp)->flags |= SEC_IS_COMMON;
5771       *valp = sym->st_size;
5772       break;
5773
5774     case SHN_MIPS_TEXT:
5775       /* This section is used in a shared object.  */
5776       if (elf_tdata (abfd)->elf_text_section == NULL)
5777         {
5778           asymbol *elf_text_symbol;
5779           asection *elf_text_section;
5780           bfd_size_type amt = sizeof (asection);
5781
5782           elf_text_section = bfd_zalloc (abfd, amt);
5783           if (elf_text_section == NULL)
5784             return FALSE;
5785
5786           amt = sizeof (asymbol);
5787           elf_text_symbol = bfd_zalloc (abfd, amt);
5788           if (elf_text_symbol == NULL)
5789             return FALSE;
5790
5791           /* Initialize the section.  */
5792
5793           elf_tdata (abfd)->elf_text_section = elf_text_section;
5794           elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
5795
5796           elf_text_section->symbol = elf_text_symbol;
5797           elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
5798
5799           elf_text_section->name = ".text";
5800           elf_text_section->flags = SEC_NO_FLAGS;
5801           elf_text_section->output_section = NULL;
5802           elf_text_section->owner = abfd;
5803           elf_text_symbol->name = ".text";
5804           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
5805           elf_text_symbol->section = elf_text_section;
5806         }
5807       /* This code used to do *secp = bfd_und_section_ptr if
5808          info->shared.  I don't know why, and that doesn't make sense,
5809          so I took it out.  */
5810       *secp = elf_tdata (abfd)->elf_text_section;
5811       break;
5812
5813     case SHN_MIPS_ACOMMON:
5814       /* Fall through. XXX Can we treat this as allocated data?  */
5815     case SHN_MIPS_DATA:
5816       /* This section is used in a shared object.  */
5817       if (elf_tdata (abfd)->elf_data_section == NULL)
5818         {
5819           asymbol *elf_data_symbol;
5820           asection *elf_data_section;
5821           bfd_size_type amt = sizeof (asection);
5822
5823           elf_data_section = bfd_zalloc (abfd, amt);
5824           if (elf_data_section == NULL)
5825             return FALSE;
5826
5827           amt = sizeof (asymbol);
5828           elf_data_symbol = bfd_zalloc (abfd, amt);
5829           if (elf_data_symbol == NULL)
5830             return FALSE;
5831
5832           /* Initialize the section.  */
5833
5834           elf_tdata (abfd)->elf_data_section = elf_data_section;
5835           elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
5836
5837           elf_data_section->symbol = elf_data_symbol;
5838           elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
5839
5840           elf_data_section->name = ".data";
5841           elf_data_section->flags = SEC_NO_FLAGS;
5842           elf_data_section->output_section = NULL;
5843           elf_data_section->owner = abfd;
5844           elf_data_symbol->name = ".data";
5845           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
5846           elf_data_symbol->section = elf_data_section;
5847         }
5848       /* This code used to do *secp = bfd_und_section_ptr if
5849          info->shared.  I don't know why, and that doesn't make sense,
5850          so I took it out.  */
5851       *secp = elf_tdata (abfd)->elf_data_section;
5852       break;
5853
5854     case SHN_MIPS_SUNDEFINED:
5855       *secp = bfd_und_section_ptr;
5856       break;
5857     }
5858
5859   if (SGI_COMPAT (abfd)
5860       && ! info->shared
5861       && info->hash->creator == abfd->xvec
5862       && strcmp (*namep, "__rld_obj_head") == 0)
5863     {
5864       struct elf_link_hash_entry *h;
5865       struct bfd_link_hash_entry *bh;
5866
5867       /* Mark __rld_obj_head as dynamic.  */
5868       bh = NULL;
5869       if (! (_bfd_generic_link_add_one_symbol
5870              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
5871               get_elf_backend_data (abfd)->collect, &bh)))
5872         return FALSE;
5873
5874       h = (struct elf_link_hash_entry *) bh;
5875       h->non_elf = 0;
5876       h->def_regular = 1;
5877       h->type = STT_OBJECT;
5878
5879       if (! bfd_elf_link_record_dynamic_symbol (info, h))
5880         return FALSE;
5881
5882       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
5883     }
5884
5885   /* If this is a mips16 text symbol, add 1 to the value to make it
5886      odd.  This will cause something like .word SYM to come up with
5887      the right value when it is loaded into the PC.  */
5888   if (sym->st_other == STO_MIPS16)
5889     ++*valp;
5890
5891   return TRUE;
5892 }
5893
5894 /* This hook function is called before the linker writes out a global
5895    symbol.  We mark symbols as small common if appropriate.  This is
5896    also where we undo the increment of the value for a mips16 symbol.  */
5897
5898 bfd_boolean
5899 _bfd_mips_elf_link_output_symbol_hook
5900   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
5901    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
5902    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
5903 {
5904   /* If we see a common symbol, which implies a relocatable link, then
5905      if a symbol was small common in an input file, mark it as small
5906      common in the output file.  */
5907   if (sym->st_shndx == SHN_COMMON
5908       && strcmp (input_sec->name, ".scommon") == 0)
5909     sym->st_shndx = SHN_MIPS_SCOMMON;
5910
5911   if (sym->st_other == STO_MIPS16)
5912     sym->st_value &= ~1;
5913
5914   return TRUE;
5915 }
5916 \f
5917 /* Functions for the dynamic linker.  */
5918
5919 /* Create dynamic sections when linking against a dynamic object.  */
5920
5921 bfd_boolean
5922 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
5923 {
5924   struct elf_link_hash_entry *h;
5925   struct bfd_link_hash_entry *bh;
5926   flagword flags;
5927   register asection *s;
5928   const char * const *namep;
5929   struct mips_elf_link_hash_table *htab;
5930
5931   htab = mips_elf_hash_table (info);
5932   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5933            | SEC_LINKER_CREATED | SEC_READONLY);
5934
5935   /* The psABI requires a read-only .dynamic section, but the VxWorks
5936      EABI doesn't.  */
5937   if (!htab->is_vxworks)
5938     {
5939       s = bfd_get_section_by_name (abfd, ".dynamic");
5940       if (s != NULL)
5941         {
5942           if (! bfd_set_section_flags (abfd, s, flags))
5943             return FALSE;
5944         }
5945     }
5946
5947   /* We need to create .got section.  */
5948   if (! mips_elf_create_got_section (abfd, info, FALSE))
5949     return FALSE;
5950
5951   if (! mips_elf_rel_dyn_section (info, TRUE))
5952     return FALSE;
5953
5954   /* Create .stub section.  */
5955   if (bfd_get_section_by_name (abfd,
5956                                MIPS_ELF_STUB_SECTION_NAME (abfd)) == NULL)
5957     {
5958       s = bfd_make_section_with_flags (abfd,
5959                                        MIPS_ELF_STUB_SECTION_NAME (abfd),
5960                                        flags | SEC_CODE);
5961       if (s == NULL
5962           || ! bfd_set_section_alignment (abfd, s,
5963                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5964         return FALSE;
5965     }
5966
5967   if ((IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none)
5968       && !info->shared
5969       && bfd_get_section_by_name (abfd, ".rld_map") == NULL)
5970     {
5971       s = bfd_make_section_with_flags (abfd, ".rld_map",
5972                                        flags &~ (flagword) SEC_READONLY);
5973       if (s == NULL
5974           || ! bfd_set_section_alignment (abfd, s,
5975                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5976         return FALSE;
5977     }
5978
5979   /* On IRIX5, we adjust add some additional symbols and change the
5980      alignments of several sections.  There is no ABI documentation
5981      indicating that this is necessary on IRIX6, nor any evidence that
5982      the linker takes such action.  */
5983   if (IRIX_COMPAT (abfd) == ict_irix5)
5984     {
5985       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
5986         {
5987           bh = NULL;
5988           if (! (_bfd_generic_link_add_one_symbol
5989                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
5990                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5991             return FALSE;
5992
5993           h = (struct elf_link_hash_entry *) bh;
5994           h->non_elf = 0;
5995           h->def_regular = 1;
5996           h->type = STT_SECTION;
5997
5998           if (! bfd_elf_link_record_dynamic_symbol (info, h))
5999             return FALSE;
6000         }
6001
6002       /* We need to create a .compact_rel section.  */
6003       if (SGI_COMPAT (abfd))
6004         {
6005           if (!mips_elf_create_compact_rel_section (abfd, info))
6006             return FALSE;
6007         }
6008
6009       /* Change alignments of some sections.  */
6010       s = bfd_get_section_by_name (abfd, ".hash");
6011       if (s != NULL)
6012         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
6013       s = bfd_get_section_by_name (abfd, ".dynsym");
6014       if (s != NULL)
6015         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
6016       s = bfd_get_section_by_name (abfd, ".dynstr");
6017       if (s != NULL)
6018         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
6019       s = bfd_get_section_by_name (abfd, ".reginfo");
6020       if (s != NULL)
6021         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
6022       s = bfd_get_section_by_name (abfd, ".dynamic");
6023       if (s != NULL)
6024         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
6025     }
6026
6027   if (!info->shared)
6028     {
6029       const char *name;
6030
6031       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
6032       bh = NULL;
6033       if (!(_bfd_generic_link_add_one_symbol
6034             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
6035              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
6036         return FALSE;
6037
6038       h = (struct elf_link_hash_entry *) bh;
6039       h->non_elf = 0;
6040       h->def_regular = 1;
6041       h->type = STT_SECTION;
6042
6043       if (! bfd_elf_link_record_dynamic_symbol (info, h))
6044         return FALSE;
6045
6046       if (! mips_elf_hash_table (info)->use_rld_obj_head)
6047         {
6048           /* __rld_map is a four byte word located in the .data section
6049              and is filled in by the rtld to contain a pointer to
6050              the _r_debug structure. Its symbol value will be set in
6051              _bfd_mips_elf_finish_dynamic_symbol.  */
6052           s = bfd_get_section_by_name (abfd, ".rld_map");
6053           BFD_ASSERT (s != NULL);
6054
6055           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
6056           bh = NULL;
6057           if (!(_bfd_generic_link_add_one_symbol
6058                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
6059                  get_elf_backend_data (abfd)->collect, &bh)))
6060             return FALSE;
6061
6062           h = (struct elf_link_hash_entry *) bh;
6063           h->non_elf = 0;
6064           h->def_regular = 1;
6065           h->type = STT_OBJECT;
6066
6067           if (! bfd_elf_link_record_dynamic_symbol (info, h))
6068             return FALSE;
6069         }
6070     }
6071
6072   if (htab->is_vxworks)
6073     {
6074       /* Create the .plt, .rela.plt, .dynbss and .rela.bss sections.
6075          Also create the _PROCEDURE_LINKAGE_TABLE symbol.  */
6076       if (!_bfd_elf_create_dynamic_sections (abfd, info))
6077         return FALSE;
6078
6079       /* Cache the sections created above.  */
6080       htab->sdynbss = bfd_get_section_by_name (abfd, ".dynbss");
6081       htab->srelbss = bfd_get_section_by_name (abfd, ".rela.bss");
6082       htab->srelplt = bfd_get_section_by_name (abfd, ".rela.plt");
6083       htab->splt = bfd_get_section_by_name (abfd, ".plt");
6084       if (!htab->sdynbss
6085           || (!htab->srelbss && !info->shared)
6086           || !htab->srelplt
6087           || !htab->splt)
6088         abort ();
6089
6090       /* Do the usual VxWorks handling.  */
6091       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
6092         return FALSE;
6093
6094       /* Work out the PLT sizes.  */
6095       if (info->shared)
6096         {
6097           htab->plt_header_size
6098             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
6099           htab->plt_entry_size
6100             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
6101         }
6102       else
6103         {
6104           htab->plt_header_size
6105             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
6106           htab->plt_entry_size
6107             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
6108         }
6109     }
6110
6111   return TRUE;
6112 }
6113 \f
6114 /* Look through the relocs for a section during the first phase, and
6115    allocate space in the global offset table.  */
6116
6117 bfd_boolean
6118 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
6119                             asection *sec, const Elf_Internal_Rela *relocs)
6120 {
6121   const char *name;
6122   bfd *dynobj;
6123   Elf_Internal_Shdr *symtab_hdr;
6124   struct elf_link_hash_entry **sym_hashes;
6125   struct mips_got_info *g;
6126   size_t extsymoff;
6127   const Elf_Internal_Rela *rel;
6128   const Elf_Internal_Rela *rel_end;
6129   asection *sgot;
6130   asection *sreloc;
6131   const struct elf_backend_data *bed;
6132   struct mips_elf_link_hash_table *htab;
6133
6134   if (info->relocatable)
6135     return TRUE;
6136
6137   htab = mips_elf_hash_table (info);
6138   dynobj = elf_hash_table (info)->dynobj;
6139   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
6140   sym_hashes = elf_sym_hashes (abfd);
6141   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
6142
6143   /* Check for the mips16 stub sections.  */
6144
6145   name = bfd_get_section_name (abfd, sec);
6146   if (FN_STUB_P (name))
6147     {
6148       unsigned long r_symndx;
6149
6150       /* Look at the relocation information to figure out which symbol
6151          this is for.  */
6152
6153       r_symndx = ELF_R_SYM (abfd, relocs->r_info);
6154
6155       if (r_symndx < extsymoff
6156           || sym_hashes[r_symndx - extsymoff] == NULL)
6157         {
6158           asection *o;
6159
6160           /* This stub is for a local symbol.  This stub will only be
6161              needed if there is some relocation in this BFD, other
6162              than a 16 bit function call, which refers to this symbol.  */
6163           for (o = abfd->sections; o != NULL; o = o->next)
6164             {
6165               Elf_Internal_Rela *sec_relocs;
6166               const Elf_Internal_Rela *r, *rend;
6167
6168               /* We can ignore stub sections when looking for relocs.  */
6169               if ((o->flags & SEC_RELOC) == 0
6170                   || o->reloc_count == 0
6171                   || mips16_stub_section_p (abfd, o))
6172                 continue;
6173
6174               sec_relocs
6175                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
6176                                              info->keep_memory);
6177               if (sec_relocs == NULL)
6178                 return FALSE;
6179
6180               rend = sec_relocs + o->reloc_count;
6181               for (r = sec_relocs; r < rend; r++)
6182                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
6183                     && ELF_R_TYPE (abfd, r->r_info) != R_MIPS16_26)
6184                   break;
6185
6186               if (elf_section_data (o)->relocs != sec_relocs)
6187                 free (sec_relocs);
6188
6189               if (r < rend)
6190                 break;
6191             }
6192
6193           if (o == NULL)
6194             {
6195               /* There is no non-call reloc for this stub, so we do
6196                  not need it.  Since this function is called before
6197                  the linker maps input sections to output sections, we
6198                  can easily discard it by setting the SEC_EXCLUDE
6199                  flag.  */
6200               sec->flags |= SEC_EXCLUDE;
6201               return TRUE;
6202             }
6203
6204           /* Record this stub in an array of local symbol stubs for
6205              this BFD.  */
6206           if (elf_tdata (abfd)->local_stubs == NULL)
6207             {
6208               unsigned long symcount;
6209               asection **n;
6210               bfd_size_type amt;
6211
6212               if (elf_bad_symtab (abfd))
6213                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
6214               else
6215                 symcount = symtab_hdr->sh_info;
6216               amt = symcount * sizeof (asection *);
6217               n = bfd_zalloc (abfd, amt);
6218               if (n == NULL)
6219                 return FALSE;
6220               elf_tdata (abfd)->local_stubs = n;
6221             }
6222
6223           sec->flags |= SEC_KEEP;
6224           elf_tdata (abfd)->local_stubs[r_symndx] = sec;
6225
6226           /* We don't need to set mips16_stubs_seen in this case.
6227              That flag is used to see whether we need to look through
6228              the global symbol table for stubs.  We don't need to set
6229              it here, because we just have a local stub.  */
6230         }
6231       else
6232         {
6233           struct mips_elf_link_hash_entry *h;
6234
6235           h = ((struct mips_elf_link_hash_entry *)
6236                sym_hashes[r_symndx - extsymoff]);
6237
6238           while (h->root.root.type == bfd_link_hash_indirect
6239                  || h->root.root.type == bfd_link_hash_warning)
6240             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
6241
6242           /* H is the symbol this stub is for.  */
6243
6244           /* If we already have an appropriate stub for this function, we
6245              don't need another one, so we can discard this one.  Since
6246              this function is called before the linker maps input sections
6247              to output sections, we can easily discard it by setting the
6248              SEC_EXCLUDE flag.  */
6249           if (h->fn_stub != NULL)
6250             {
6251               sec->flags |= SEC_EXCLUDE;
6252               return TRUE;
6253             }
6254
6255           sec->flags |= SEC_KEEP;
6256           h->fn_stub = sec;
6257           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
6258         }
6259     }
6260   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
6261     {
6262       unsigned long r_symndx;
6263       struct mips_elf_link_hash_entry *h;
6264       asection **loc;
6265
6266       /* Look at the relocation information to figure out which symbol
6267          this is for.  */
6268
6269       r_symndx = ELF_R_SYM (abfd, relocs->r_info);
6270
6271       if (r_symndx < extsymoff
6272           || sym_hashes[r_symndx - extsymoff] == NULL)
6273         {
6274           asection *o;
6275
6276           /* This stub is for a local symbol.  This stub will only be
6277              needed if there is some relocation (R_MIPS16_26) in this BFD
6278              that refers to this symbol.  */
6279           for (o = abfd->sections; o != NULL; o = o->next)
6280             {
6281               Elf_Internal_Rela *sec_relocs;
6282               const Elf_Internal_Rela *r, *rend;
6283
6284               /* We can ignore stub sections when looking for relocs.  */
6285               if ((o->flags & SEC_RELOC) == 0
6286                   || o->reloc_count == 0
6287                   || mips16_stub_section_p (abfd, o))
6288                 continue;
6289
6290               sec_relocs
6291                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
6292                                              info->keep_memory);
6293               if (sec_relocs == NULL)
6294                 return FALSE;
6295
6296               rend = sec_relocs + o->reloc_count;
6297               for (r = sec_relocs; r < rend; r++)
6298                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
6299                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
6300                     break;
6301
6302               if (elf_section_data (o)->relocs != sec_relocs)
6303                 free (sec_relocs);
6304
6305               if (r < rend)
6306                 break;
6307             }
6308
6309           if (o == NULL)
6310             {
6311               /* There is no non-call reloc for this stub, so we do
6312                  not need it.  Since this function is called before
6313                  the linker maps input sections to output sections, we
6314                  can easily discard it by setting the SEC_EXCLUDE
6315                  flag.  */
6316               sec->flags |= SEC_EXCLUDE;
6317               return TRUE;
6318             }
6319
6320           /* Record this stub in an array of local symbol call_stubs for
6321              this BFD.  */
6322           if (elf_tdata (abfd)->local_call_stubs == NULL)
6323             {
6324               unsigned long symcount;
6325               asection **n;
6326               bfd_size_type amt;
6327
6328               if (elf_bad_symtab (abfd))
6329                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
6330               else
6331                 symcount = symtab_hdr->sh_info;
6332               amt = symcount * sizeof (asection *);
6333               n = bfd_zalloc (abfd, amt);
6334               if (n == NULL)
6335                 return FALSE;
6336               elf_tdata (abfd)->local_call_stubs = n;
6337             }
6338
6339           sec->flags |= SEC_KEEP;
6340           elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
6341
6342           /* We don't need to set mips16_stubs_seen in this case.
6343              That flag is used to see whether we need to look through
6344              the global symbol table for stubs.  We don't need to set
6345              it here, because we just have a local stub.  */
6346         }
6347       else
6348         {
6349           h = ((struct mips_elf_link_hash_entry *)
6350                sym_hashes[r_symndx - extsymoff]);
6351           
6352           /* H is the symbol this stub is for.  */
6353           
6354           if (CALL_FP_STUB_P (name))
6355             loc = &h->call_fp_stub;
6356           else
6357             loc = &h->call_stub;
6358           
6359           /* If we already have an appropriate stub for this function, we
6360              don't need another one, so we can discard this one.  Since
6361              this function is called before the linker maps input sections
6362              to output sections, we can easily discard it by setting the
6363              SEC_EXCLUDE flag.  */
6364           if (*loc != NULL)
6365             {
6366               sec->flags |= SEC_EXCLUDE;
6367               return TRUE;
6368             }
6369
6370           sec->flags |= SEC_KEEP;
6371           *loc = sec;
6372           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
6373         }
6374     }
6375
6376   if (dynobj == NULL)
6377     {
6378       sgot = NULL;
6379       g = NULL;
6380     }
6381   else
6382     {
6383       sgot = mips_elf_got_section (dynobj, FALSE);
6384       if (sgot == NULL)
6385         g = NULL;
6386       else
6387         {
6388           BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
6389           g = mips_elf_section_data (sgot)->u.got_info;
6390           BFD_ASSERT (g != NULL);
6391         }
6392     }
6393
6394   sreloc = NULL;
6395   bed = get_elf_backend_data (abfd);
6396   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
6397   for (rel = relocs; rel < rel_end; ++rel)
6398     {
6399       unsigned long r_symndx;
6400       unsigned int r_type;
6401       struct elf_link_hash_entry *h;
6402
6403       r_symndx = ELF_R_SYM (abfd, rel->r_info);
6404       r_type = ELF_R_TYPE (abfd, rel->r_info);
6405
6406       if (r_symndx < extsymoff)
6407         h = NULL;
6408       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
6409         {
6410           (*_bfd_error_handler)
6411             (_("%B: Malformed reloc detected for section %s"),
6412              abfd, name);
6413           bfd_set_error (bfd_error_bad_value);
6414           return FALSE;
6415         }
6416       else
6417         {
6418           h = sym_hashes[r_symndx - extsymoff];
6419
6420           /* This may be an indirect symbol created because of a version.  */
6421           if (h != NULL)
6422             {
6423               while (h->root.type == bfd_link_hash_indirect)
6424                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
6425             }
6426         }
6427
6428       /* Some relocs require a global offset table.  */
6429       if (dynobj == NULL || sgot == NULL)
6430         {
6431           switch (r_type)
6432             {
6433             case R_MIPS_GOT16:
6434             case R_MIPS_CALL16:
6435             case R_MIPS_CALL_HI16:
6436             case R_MIPS_CALL_LO16:
6437             case R_MIPS_GOT_HI16:
6438             case R_MIPS_GOT_LO16:
6439             case R_MIPS_GOT_PAGE:
6440             case R_MIPS_GOT_OFST:
6441             case R_MIPS_GOT_DISP:
6442             case R_MIPS_TLS_GOTTPREL:
6443             case R_MIPS_TLS_GD:
6444             case R_MIPS_TLS_LDM:
6445               if (dynobj == NULL)
6446                 elf_hash_table (info)->dynobj = dynobj = abfd;
6447               if (! mips_elf_create_got_section (dynobj, info, FALSE))
6448                 return FALSE;
6449               g = mips_elf_got_info (dynobj, &sgot);
6450               if (htab->is_vxworks && !info->shared)
6451                 {
6452                   (*_bfd_error_handler)
6453                     (_("%B: GOT reloc at 0x%lx not expected in executables"),
6454                      abfd, (unsigned long) rel->r_offset);
6455                   bfd_set_error (bfd_error_bad_value);
6456                   return FALSE;
6457                 }
6458               break;
6459
6460             case R_MIPS_32:
6461             case R_MIPS_REL32:
6462             case R_MIPS_64:
6463               /* In VxWorks executables, references to external symbols
6464                  are handled using copy relocs or PLT stubs, so there's
6465                  no need to add a dynamic relocation here.  */
6466               if (dynobj == NULL
6467                   && (info->shared || (h != NULL && !htab->is_vxworks))
6468                   && (sec->flags & SEC_ALLOC) != 0)
6469                 elf_hash_table (info)->dynobj = dynobj = abfd;
6470               break;
6471
6472             default:
6473               break;
6474             }
6475         }
6476
6477       if (h)
6478         {
6479           ((struct mips_elf_link_hash_entry *) h)->is_relocation_target = TRUE;
6480
6481           /* Relocations against the special VxWorks __GOTT_BASE__ and
6482              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
6483              room for them in .rela.dyn.  */
6484           if (is_gott_symbol (info, h))
6485             {
6486               if (sreloc == NULL)
6487                 {
6488                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
6489                   if (sreloc == NULL)
6490                     return FALSE;
6491                 }
6492               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
6493               if (MIPS_ELF_READONLY_SECTION (sec))
6494                 /* We tell the dynamic linker that there are
6495                    relocations against the text segment.  */
6496                 info->flags |= DF_TEXTREL;
6497             }
6498         }
6499       else if (r_type == R_MIPS_CALL_LO16
6500                || r_type == R_MIPS_GOT_LO16
6501                || r_type == R_MIPS_GOT_DISP
6502                || (r_type == R_MIPS_GOT16 && htab->is_vxworks))
6503         {
6504           /* We may need a local GOT entry for this relocation.  We
6505              don't count R_MIPS_GOT_PAGE because we can estimate the
6506              maximum number of pages needed by looking at the size of
6507              the segment.  Similar comments apply to R_MIPS_GOT16 and
6508              R_MIPS_CALL16, except on VxWorks, where GOT relocations
6509              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
6510              R_MIPS_CALL_HI16 because these are always followed by an
6511              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
6512           if (! mips_elf_record_local_got_symbol (abfd, r_symndx,
6513                                                   rel->r_addend, g, 0))
6514             return FALSE;
6515         }
6516
6517       switch (r_type)
6518         {
6519         case R_MIPS_CALL16:
6520           if (h == NULL)
6521             {
6522               (*_bfd_error_handler)
6523                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
6524                  abfd, (unsigned long) rel->r_offset);
6525               bfd_set_error (bfd_error_bad_value);
6526               return FALSE;
6527             }
6528           /* Fall through.  */
6529
6530         case R_MIPS_CALL_HI16:
6531         case R_MIPS_CALL_LO16:
6532           if (h != NULL)
6533             {
6534               /* VxWorks call relocations point the function's .got.plt
6535                  entry, which will be allocated by adjust_dynamic_symbol.
6536                  Otherwise, this symbol requires a global GOT entry.  */
6537               if ((!htab->is_vxworks || h->forced_local)
6538                   && !mips_elf_record_global_got_symbol (h, abfd, info, g, 0))
6539                 return FALSE;
6540
6541               /* We need a stub, not a plt entry for the undefined
6542                  function.  But we record it as if it needs plt.  See
6543                  _bfd_elf_adjust_dynamic_symbol.  */
6544               h->needs_plt = 1;
6545               h->type = STT_FUNC;
6546             }
6547           break;
6548
6549         case R_MIPS_GOT_PAGE:
6550           /* If this is a global, overridable symbol, GOT_PAGE will
6551              decay to GOT_DISP, so we'll need a GOT entry for it.  */
6552           if (h == NULL)
6553             break;
6554           else
6555             {
6556               struct mips_elf_link_hash_entry *hmips =
6557                 (struct mips_elf_link_hash_entry *) h;
6558
6559               while (hmips->root.root.type == bfd_link_hash_indirect
6560                      || hmips->root.root.type == bfd_link_hash_warning)
6561                 hmips = (struct mips_elf_link_hash_entry *)
6562                   hmips->root.root.u.i.link;
6563
6564               if (hmips->root.def_regular
6565                   && ! (info->shared && ! info->symbolic
6566                         && ! hmips->root.forced_local))
6567                 break;
6568             }
6569           /* Fall through.  */
6570
6571         case R_MIPS_GOT16:
6572         case R_MIPS_GOT_HI16:
6573         case R_MIPS_GOT_LO16:
6574         case R_MIPS_GOT_DISP:
6575           if (h && ! mips_elf_record_global_got_symbol (h, abfd, info, g, 0))
6576             return FALSE;
6577           break;
6578
6579         case R_MIPS_TLS_GOTTPREL:
6580           if (info->shared)
6581             info->flags |= DF_STATIC_TLS;
6582           /* Fall through */
6583
6584         case R_MIPS_TLS_LDM:
6585           if (r_type == R_MIPS_TLS_LDM)
6586             {
6587               r_symndx = 0;
6588               h = NULL;
6589             }
6590           /* Fall through */
6591
6592         case R_MIPS_TLS_GD:
6593           /* This symbol requires a global offset table entry, or two
6594              for TLS GD relocations.  */
6595           {
6596             unsigned char flag = (r_type == R_MIPS_TLS_GD
6597                                   ? GOT_TLS_GD
6598                                   : r_type == R_MIPS_TLS_LDM
6599                                   ? GOT_TLS_LDM
6600                                   : GOT_TLS_IE);
6601             if (h != NULL)
6602               {
6603                 struct mips_elf_link_hash_entry *hmips =
6604                   (struct mips_elf_link_hash_entry *) h;
6605                 hmips->tls_type |= flag;
6606
6607                 if (h && ! mips_elf_record_global_got_symbol (h, abfd, info, g, flag))
6608                   return FALSE;
6609               }
6610             else
6611               {
6612                 BFD_ASSERT (flag == GOT_TLS_LDM || r_symndx != 0);
6613
6614                 if (! mips_elf_record_local_got_symbol (abfd, r_symndx,
6615                                                         rel->r_addend, g, flag))
6616                   return FALSE;
6617               }
6618           }
6619           break;
6620
6621         case R_MIPS_32:
6622         case R_MIPS_REL32:
6623         case R_MIPS_64:
6624           /* In VxWorks executables, references to external symbols
6625              are handled using copy relocs or PLT stubs, so there's
6626              no need to add a .rela.dyn entry for this relocation.  */
6627           if ((info->shared || (h != NULL && !htab->is_vxworks))
6628               && (sec->flags & SEC_ALLOC) != 0)
6629             {
6630               if (sreloc == NULL)
6631                 {
6632                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
6633                   if (sreloc == NULL)
6634                     return FALSE;
6635                 }
6636               if (info->shared)
6637                 {
6638                   /* When creating a shared object, we must copy these
6639                      reloc types into the output file as R_MIPS_REL32
6640                      relocs.  Make room for this reloc in .rel(a).dyn.  */
6641                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
6642                   if (MIPS_ELF_READONLY_SECTION (sec))
6643                     /* We tell the dynamic linker that there are
6644                        relocations against the text segment.  */
6645                     info->flags |= DF_TEXTREL;
6646                 }
6647               else
6648                 {
6649                   struct mips_elf_link_hash_entry *hmips;
6650
6651                   /* We only need to copy this reloc if the symbol is
6652                      defined in a dynamic object.  */
6653                   hmips = (struct mips_elf_link_hash_entry *) h;
6654                   ++hmips->possibly_dynamic_relocs;
6655                   if (MIPS_ELF_READONLY_SECTION (sec))
6656                     /* We need it to tell the dynamic linker if there
6657                        are relocations against the text segment.  */
6658                     hmips->readonly_reloc = TRUE;
6659                 }
6660
6661               /* Even though we don't directly need a GOT entry for
6662                  this symbol, a symbol must have a dynamic symbol
6663                  table index greater that DT_MIPS_GOTSYM if there are
6664                  dynamic relocations against it.  This does not apply
6665                  to VxWorks, which does not have the usual coupling
6666                  between global GOT entries and .dynsym entries.  */
6667               if (h != NULL && !htab->is_vxworks)
6668                 {
6669                   if (dynobj == NULL)
6670                     elf_hash_table (info)->dynobj = dynobj = abfd;
6671                   if (! mips_elf_create_got_section (dynobj, info, TRUE))
6672                     return FALSE;
6673                   g = mips_elf_got_info (dynobj, &sgot);
6674                   if (! mips_elf_record_global_got_symbol (h, abfd, info, g, 0))
6675                     return FALSE;
6676                 }
6677             }
6678
6679           if (SGI_COMPAT (abfd))
6680             mips_elf_hash_table (info)->compact_rel_size +=
6681               sizeof (Elf32_External_crinfo);
6682           break;
6683
6684         case R_MIPS_PC16:
6685           if (h)
6686             ((struct mips_elf_link_hash_entry *) h)->is_branch_target = TRUE;
6687           break;
6688
6689         case R_MIPS_26:
6690           if (h)
6691             ((struct mips_elf_link_hash_entry *) h)->is_branch_target = TRUE;
6692           /* Fall through.  */
6693
6694         case R_MIPS_GPREL16:
6695         case R_MIPS_LITERAL:
6696         case R_MIPS_GPREL32:
6697           if (SGI_COMPAT (abfd))
6698             mips_elf_hash_table (info)->compact_rel_size +=
6699               sizeof (Elf32_External_crinfo);
6700           break;
6701
6702           /* This relocation describes the C++ object vtable hierarchy.
6703              Reconstruct it for later use during GC.  */
6704         case R_MIPS_GNU_VTINHERIT:
6705           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
6706             return FALSE;
6707           break;
6708
6709           /* This relocation describes which C++ vtable entries are actually
6710              used.  Record for later use during GC.  */
6711         case R_MIPS_GNU_VTENTRY:
6712           BFD_ASSERT (h != NULL);
6713           if (h != NULL
6714               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
6715             return FALSE;
6716           break;
6717
6718         default:
6719           break;
6720         }
6721
6722       /* We must not create a stub for a symbol that has relocations
6723          related to taking the function's address.  This doesn't apply to
6724          VxWorks, where CALL relocs refer to a .got.plt entry instead of
6725          a normal .got entry.  */
6726       if (!htab->is_vxworks && h != NULL)
6727         switch (r_type)
6728           {
6729           default:
6730             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
6731             break;
6732           case R_MIPS_CALL16:
6733           case R_MIPS_CALL_HI16:
6734           case R_MIPS_CALL_LO16:
6735           case R_MIPS_JALR:
6736             break;
6737           }
6738
6739       /* If this reloc is not a 16 bit call, and it has a global
6740          symbol, then we will need the fn_stub if there is one.
6741          References from a stub section do not count.  */
6742       if (h != NULL
6743           && r_type != R_MIPS16_26
6744           && !mips16_stub_section_p (abfd, sec))
6745         {
6746           struct mips_elf_link_hash_entry *mh;
6747
6748           mh = (struct mips_elf_link_hash_entry *) h;
6749           mh->need_fn_stub = TRUE;
6750         }
6751     }
6752
6753   return TRUE;
6754 }
6755 \f
6756 bfd_boolean
6757 _bfd_mips_relax_section (bfd *abfd, asection *sec,
6758                          struct bfd_link_info *link_info,
6759                          bfd_boolean *again)
6760 {
6761   Elf_Internal_Rela *internal_relocs;
6762   Elf_Internal_Rela *irel, *irelend;
6763   Elf_Internal_Shdr *symtab_hdr;
6764   bfd_byte *contents = NULL;
6765   size_t extsymoff;
6766   bfd_boolean changed_contents = FALSE;
6767   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
6768   Elf_Internal_Sym *isymbuf = NULL;
6769
6770   /* We are not currently changing any sizes, so only one pass.  */
6771   *again = FALSE;
6772
6773   if (link_info->relocatable)
6774     return TRUE;
6775
6776   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
6777                                                link_info->keep_memory);
6778   if (internal_relocs == NULL)
6779     return TRUE;
6780
6781   irelend = internal_relocs + sec->reloc_count
6782     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
6783   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
6784   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
6785
6786   for (irel = internal_relocs; irel < irelend; irel++)
6787     {
6788       bfd_vma symval;
6789       bfd_signed_vma sym_offset;
6790       unsigned int r_type;
6791       unsigned long r_symndx;
6792       asection *sym_sec;
6793       unsigned long instruction;
6794
6795       /* Turn jalr into bgezal, and jr into beq, if they're marked
6796          with a JALR relocation, that indicate where they jump to.
6797          This saves some pipeline bubbles.  */
6798       r_type = ELF_R_TYPE (abfd, irel->r_info);
6799       if (r_type != R_MIPS_JALR)
6800         continue;
6801
6802       r_symndx = ELF_R_SYM (abfd, irel->r_info);
6803       /* Compute the address of the jump target.  */
6804       if (r_symndx >= extsymoff)
6805         {
6806           struct mips_elf_link_hash_entry *h
6807             = ((struct mips_elf_link_hash_entry *)
6808                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
6809
6810           while (h->root.root.type == bfd_link_hash_indirect
6811                  || h->root.root.type == bfd_link_hash_warning)
6812             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
6813
6814           /* If a symbol is undefined, or if it may be overridden,
6815              skip it.  */
6816           if (! ((h->root.root.type == bfd_link_hash_defined
6817                   || h->root.root.type == bfd_link_hash_defweak)
6818                  && h->root.root.u.def.section)
6819               || (link_info->shared && ! link_info->symbolic
6820                   && !h->root.forced_local))
6821             continue;
6822
6823           sym_sec = h->root.root.u.def.section;
6824           if (sym_sec->output_section)
6825             symval = (h->root.root.u.def.value
6826                       + sym_sec->output_section->vma
6827                       + sym_sec->output_offset);
6828           else
6829             symval = h->root.root.u.def.value;
6830         }
6831       else
6832         {
6833           Elf_Internal_Sym *isym;
6834
6835           /* Read this BFD's symbols if we haven't done so already.  */
6836           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
6837             {
6838               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
6839               if (isymbuf == NULL)
6840                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
6841                                                 symtab_hdr->sh_info, 0,
6842                                                 NULL, NULL, NULL);
6843               if (isymbuf == NULL)
6844                 goto relax_return;
6845             }
6846
6847           isym = isymbuf + r_symndx;
6848           if (isym->st_shndx == SHN_UNDEF)
6849             continue;
6850           else if (isym->st_shndx == SHN_ABS)
6851             sym_sec = bfd_abs_section_ptr;
6852           else if (isym->st_shndx == SHN_COMMON)
6853             sym_sec = bfd_com_section_ptr;
6854           else
6855             sym_sec
6856               = bfd_section_from_elf_index (abfd, isym->st_shndx);
6857           symval = isym->st_value
6858             + sym_sec->output_section->vma
6859             + sym_sec->output_offset;
6860         }
6861
6862       /* Compute branch offset, from delay slot of the jump to the
6863          branch target.  */
6864       sym_offset = (symval + irel->r_addend)
6865         - (sec_start + irel->r_offset + 4);
6866
6867       /* Branch offset must be properly aligned.  */
6868       if ((sym_offset & 3) != 0)
6869         continue;
6870
6871       sym_offset >>= 2;
6872
6873       /* Check that it's in range.  */
6874       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
6875         continue;
6876
6877       /* Get the section contents if we haven't done so already.  */
6878       if (contents == NULL)
6879         {
6880           /* Get cached copy if it exists.  */
6881           if (elf_section_data (sec)->this_hdr.contents != NULL)
6882             contents = elf_section_data (sec)->this_hdr.contents;
6883           else
6884             {
6885               if (!bfd_malloc_and_get_section (abfd, sec, &contents))
6886                 goto relax_return;
6887             }
6888         }
6889
6890       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
6891
6892       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
6893       if ((instruction & 0xfc1fffff) == 0x0000f809)
6894         instruction = 0x04110000;
6895       /* If it was jr <reg>, turn it into b <target>.  */
6896       else if ((instruction & 0xfc1fffff) == 0x00000008)
6897         instruction = 0x10000000;
6898       else
6899         continue;
6900
6901       instruction |= (sym_offset & 0xffff);
6902       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
6903       changed_contents = TRUE;
6904     }
6905
6906   if (contents != NULL
6907       && elf_section_data (sec)->this_hdr.contents != contents)
6908     {
6909       if (!changed_contents && !link_info->keep_memory)
6910         free (contents);
6911       else
6912         {
6913           /* Cache the section contents for elf_link_input_bfd.  */
6914           elf_section_data (sec)->this_hdr.contents = contents;
6915         }
6916     }
6917   return TRUE;
6918
6919  relax_return:
6920   if (contents != NULL
6921       && elf_section_data (sec)->this_hdr.contents != contents)
6922     free (contents);
6923   return FALSE;
6924 }
6925 \f
6926 /* Adjust a symbol defined by a dynamic object and referenced by a
6927    regular object.  The current definition is in some section of the
6928    dynamic object, but we're not including those sections.  We have to
6929    change the definition to something the rest of the link can
6930    understand.  */
6931
6932 bfd_boolean
6933 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
6934                                      struct elf_link_hash_entry *h)
6935 {
6936   bfd *dynobj;
6937   struct mips_elf_link_hash_entry *hmips;
6938   asection *s;
6939   struct mips_elf_link_hash_table *htab;
6940
6941   htab = mips_elf_hash_table (info);
6942   dynobj = elf_hash_table (info)->dynobj;
6943
6944   /* Make sure we know what is going on here.  */
6945   BFD_ASSERT (dynobj != NULL
6946               && (h->needs_plt
6947                   || h->u.weakdef != NULL
6948                   || (h->def_dynamic
6949                       && h->ref_regular
6950                       && !h->def_regular)));
6951
6952   /* If this symbol is defined in a dynamic object, we need to copy
6953      any R_MIPS_32 or R_MIPS_REL32 relocs against it into the output
6954      file.  */
6955   hmips = (struct mips_elf_link_hash_entry *) h;
6956   if (! info->relocatable
6957       && hmips->possibly_dynamic_relocs != 0
6958       && (h->root.type == bfd_link_hash_defweak
6959           || !h->def_regular))
6960     {
6961       mips_elf_allocate_dynamic_relocations
6962         (dynobj, info, hmips->possibly_dynamic_relocs);
6963       if (hmips->readonly_reloc)
6964         /* We tell the dynamic linker that there are relocations
6965            against the text segment.  */
6966         info->flags |= DF_TEXTREL;
6967     }
6968
6969   /* For a function, create a stub, if allowed.  */
6970   if (! hmips->no_fn_stub
6971       && h->needs_plt)
6972     {
6973       if (! elf_hash_table (info)->dynamic_sections_created)
6974         return TRUE;
6975
6976       /* If this symbol is not defined in a regular file, then set
6977          the symbol to the stub location.  This is required to make
6978          function pointers compare as equal between the normal
6979          executable and the shared library.  */
6980       if (!h->def_regular)
6981         {
6982           /* We need .stub section.  */
6983           s = bfd_get_section_by_name (dynobj,
6984                                        MIPS_ELF_STUB_SECTION_NAME (dynobj));
6985           BFD_ASSERT (s != NULL);
6986
6987           h->root.u.def.section = s;
6988           h->root.u.def.value = s->size;
6989
6990           /* XXX Write this stub address somewhere.  */
6991           h->plt.offset = s->size;
6992
6993           /* Make room for this stub code.  */
6994           s->size += htab->function_stub_size;
6995
6996           /* The last half word of the stub will be filled with the index
6997              of this symbol in .dynsym section.  */
6998           return TRUE;
6999         }
7000     }
7001   else if ((h->type == STT_FUNC)
7002            && !h->needs_plt)
7003     {
7004       /* This will set the entry for this symbol in the GOT to 0, and
7005          the dynamic linker will take care of this.  */
7006       h->root.u.def.value = 0;
7007       return TRUE;
7008     }
7009
7010   /* If this is a weak symbol, and there is a real definition, the
7011      processor independent code will have arranged for us to see the
7012      real definition first, and we can just use the same value.  */
7013   if (h->u.weakdef != NULL)
7014     {
7015       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
7016                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
7017       h->root.u.def.section = h->u.weakdef->root.u.def.section;
7018       h->root.u.def.value = h->u.weakdef->root.u.def.value;
7019       return TRUE;
7020     }
7021
7022   /* This is a reference to a symbol defined by a dynamic object which
7023      is not a function.  */
7024
7025   return TRUE;
7026 }
7027
7028 /* Likewise, for VxWorks.  */
7029
7030 bfd_boolean
7031 _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info,
7032                                          struct elf_link_hash_entry *h)
7033 {
7034   bfd *dynobj;
7035   struct mips_elf_link_hash_entry *hmips;
7036   struct mips_elf_link_hash_table *htab;
7037
7038   htab = mips_elf_hash_table (info);
7039   dynobj = elf_hash_table (info)->dynobj;
7040   hmips = (struct mips_elf_link_hash_entry *) h;
7041
7042   /* Make sure we know what is going on here.  */
7043   BFD_ASSERT (dynobj != NULL
7044               && (h->needs_plt
7045                   || h->needs_copy
7046                   || h->u.weakdef != NULL
7047                   || (h->def_dynamic
7048                       && h->ref_regular
7049                       && !h->def_regular)));
7050
7051   /* If the symbol is defined by a dynamic object, we need a PLT stub if
7052      either (a) we want to branch to the symbol or (b) we're linking an
7053      executable that needs a canonical function address.  In the latter
7054      case, the canonical address will be the address of the executable's
7055      load stub.  */
7056   if ((hmips->is_branch_target
7057        || (!info->shared
7058            && h->type == STT_FUNC
7059            && hmips->is_relocation_target))
7060       && h->def_dynamic
7061       && h->ref_regular
7062       && !h->def_regular
7063       && !h->forced_local)
7064     h->needs_plt = 1;
7065
7066   /* Locally-binding symbols do not need a PLT stub; we can refer to
7067      the functions directly.  */
7068   else if (h->needs_plt
7069            && (SYMBOL_CALLS_LOCAL (info, h)
7070                || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
7071                    && h->root.type == bfd_link_hash_undefweak)))
7072     {
7073       h->needs_plt = 0;
7074       return TRUE;
7075     }
7076
7077   if (h->needs_plt)
7078     {
7079       /* If this is the first symbol to need a PLT entry, allocate room
7080          for the header, and for the header's .rela.plt.unloaded entries.  */
7081       if (htab->splt->size == 0)
7082         {
7083           htab->splt->size += htab->plt_header_size;
7084           if (!info->shared)
7085             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
7086         }
7087
7088       /* Assign the next .plt entry to this symbol.  */
7089       h->plt.offset = htab->splt->size;
7090       htab->splt->size += htab->plt_entry_size;
7091
7092       /* If the output file has no definition of the symbol, set the
7093          symbol's value to the address of the stub.  For executables,
7094          point at the PLT load stub rather than the lazy resolution stub;
7095          this stub will become the canonical function address.  */
7096       if (!h->def_regular)
7097         {
7098           h->root.u.def.section = htab->splt;
7099           h->root.u.def.value = h->plt.offset;
7100           if (!info->shared)
7101             h->root.u.def.value += 8;
7102         }
7103
7104       /* Make room for the .got.plt entry and the R_JUMP_SLOT relocation.  */
7105       htab->sgotplt->size += 4;
7106       htab->srelplt->size += sizeof (Elf32_External_Rela);
7107
7108       /* Make room for the .rela.plt.unloaded relocations.  */
7109       if (!info->shared)
7110         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
7111
7112       return TRUE;
7113     }
7114
7115   /* If a function symbol is defined by a dynamic object, and we do not
7116      need a PLT stub for it, the symbol's value should be zero.  */
7117   if (h->type == STT_FUNC
7118       && h->def_dynamic
7119       && h->ref_regular
7120       && !h->def_regular)
7121     {
7122       h->root.u.def.value = 0;
7123       return TRUE;
7124     }
7125
7126   /* If this is a weak symbol, and there is a real definition, the
7127      processor independent code will have arranged for us to see the
7128      real definition first, and we can just use the same value.  */
7129   if (h->u.weakdef != NULL)
7130     {
7131       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
7132                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
7133       h->root.u.def.section = h->u.weakdef->root.u.def.section;
7134       h->root.u.def.value = h->u.weakdef->root.u.def.value;
7135       return TRUE;
7136     }
7137
7138   /* This is a reference to a symbol defined by a dynamic object which
7139      is not a function.  */
7140   if (info->shared)
7141     return TRUE;
7142
7143   /* We must allocate the symbol in our .dynbss section, which will
7144      become part of the .bss section of the executable.  There will be
7145      an entry for this symbol in the .dynsym section.  The dynamic
7146      object will contain position independent code, so all references
7147      from the dynamic object to this symbol will go through the global
7148      offset table.  The dynamic linker will use the .dynsym entry to
7149      determine the address it must put in the global offset table, so
7150      both the dynamic object and the regular object will refer to the
7151      same memory location for the variable.  */
7152
7153   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
7154     {
7155       htab->srelbss->size += sizeof (Elf32_External_Rela);
7156       h->needs_copy = 1;
7157     }
7158
7159   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
7160 }
7161 \f
7162 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
7163    The number might be exact or a worst-case estimate, depending on how
7164    much information is available to elf_backend_omit_section_dynsym at
7165    the current linking stage.  */
7166
7167 static bfd_size_type
7168 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
7169 {
7170   bfd_size_type count;
7171
7172   count = 0;
7173   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
7174     {
7175       asection *p;
7176       const struct elf_backend_data *bed;
7177
7178       bed = get_elf_backend_data (output_bfd);
7179       for (p = output_bfd->sections; p ; p = p->next)
7180         if ((p->flags & SEC_EXCLUDE) == 0
7181             && (p->flags & SEC_ALLOC) != 0
7182             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
7183           ++count;
7184     }
7185   return count;
7186 }
7187
7188 /* This function is called after all the input files have been read,
7189    and the input sections have been assigned to output sections.  We
7190    check for any mips16 stub sections that we can discard.  */
7191
7192 bfd_boolean
7193 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
7194                                     struct bfd_link_info *info)
7195 {
7196   asection *ri;
7197
7198   bfd *dynobj;
7199   asection *s;
7200   struct mips_got_info *g;
7201   int i;
7202   bfd_size_type loadable_size = 0;
7203   bfd_size_type local_gotno;
7204   bfd_size_type dynsymcount;
7205   bfd *sub;
7206   struct mips_elf_count_tls_arg count_tls_arg;
7207   struct mips_elf_link_hash_table *htab;
7208
7209   htab = mips_elf_hash_table (info);
7210
7211   /* The .reginfo section has a fixed size.  */
7212   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
7213   if (ri != NULL)
7214     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
7215
7216   if (! (info->relocatable
7217          || ! mips_elf_hash_table (info)->mips16_stubs_seen))
7218     mips_elf_link_hash_traverse (mips_elf_hash_table (info),
7219                                  mips_elf_check_mips16_stubs, NULL);
7220
7221   dynobj = elf_hash_table (info)->dynobj;
7222   if (dynobj == NULL)
7223     /* Relocatable links don't have it.  */
7224     return TRUE;
7225
7226   g = mips_elf_got_info (dynobj, &s);
7227   if (s == NULL)
7228     return TRUE;
7229
7230   /* Calculate the total loadable size of the output.  That
7231      will give us the maximum number of GOT_PAGE entries
7232      required.  */
7233   for (sub = info->input_bfds; sub; sub = sub->link_next)
7234     {
7235       asection *subsection;
7236
7237       for (subsection = sub->sections;
7238            subsection;
7239            subsection = subsection->next)
7240         {
7241           if ((subsection->flags & SEC_ALLOC) == 0)
7242             continue;
7243           loadable_size += ((subsection->size + 0xf)
7244                             &~ (bfd_size_type) 0xf);
7245         }
7246     }
7247
7248   /* There has to be a global GOT entry for every symbol with
7249      a dynamic symbol table index of DT_MIPS_GOTSYM or
7250      higher.  Therefore, it make sense to put those symbols
7251      that need GOT entries at the end of the symbol table.  We
7252      do that here.  */
7253   if (! mips_elf_sort_hash_table (info, 1))
7254     return FALSE;
7255
7256   if (g->global_gotsym != NULL)
7257     i = elf_hash_table (info)->dynsymcount - g->global_gotsym->dynindx;
7258   else
7259     /* If there are no global symbols, or none requiring
7260        relocations, then GLOBAL_GOTSYM will be NULL.  */
7261     i = 0;
7262
7263   /* Get a worst-case estimate of the number of dynamic symbols needed.
7264      At this point, dynsymcount does not account for section symbols
7265      and count_section_dynsyms may overestimate the number that will
7266      be needed.  */
7267   dynsymcount = (elf_hash_table (info)->dynsymcount
7268                  + count_section_dynsyms (output_bfd, info));
7269
7270   /* Determine the size of one stub entry.  */
7271   htab->function_stub_size = (dynsymcount > 0x10000
7272                               ? MIPS_FUNCTION_STUB_BIG_SIZE
7273                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
7274
7275   /* In the worst case, we'll get one stub per dynamic symbol, plus
7276      one to account for the dummy entry at the end required by IRIX
7277      rld.  */
7278   loadable_size += htab->function_stub_size * (i + 1);
7279
7280   if (htab->is_vxworks)
7281     /* There's no need to allocate page entries for VxWorks; R_MIPS_GOT16
7282        relocations against local symbols evaluate to "G", and the EABI does
7283        not include R_MIPS_GOT_PAGE.  */
7284     local_gotno = 0;
7285   else
7286     /* Assume there are two loadable segments consisting of contiguous
7287        sections.  Is 5 enough?  */
7288     local_gotno = (loadable_size >> 16) + 5;
7289
7290   g->local_gotno += local_gotno;
7291   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
7292
7293   g->global_gotno = i;
7294   s->size += i * MIPS_ELF_GOT_SIZE (output_bfd);
7295
7296   /* We need to calculate tls_gotno for global symbols at this point
7297      instead of building it up earlier, to avoid doublecounting
7298      entries for one global symbol from multiple input files.  */
7299   count_tls_arg.info = info;
7300   count_tls_arg.needed = 0;
7301   elf_link_hash_traverse (elf_hash_table (info),
7302                           mips_elf_count_global_tls_entries,
7303                           &count_tls_arg);
7304   g->tls_gotno += count_tls_arg.needed;
7305   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
7306
7307   mips_elf_resolve_final_got_entries (g);
7308
7309   /* VxWorks does not support multiple GOTs.  It initializes $gp to
7310      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
7311      dynamic loader.  */
7312   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
7313     {
7314       if (! mips_elf_multi_got (output_bfd, info, g, s, local_gotno))
7315         return FALSE;
7316     }
7317   else
7318     {
7319       /* Set up TLS entries for the first GOT.  */
7320       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
7321       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
7322     }
7323   htab->computed_got_sizes = TRUE;
7324
7325   return TRUE;
7326 }
7327
7328 /* Set the sizes of the dynamic sections.  */
7329
7330 bfd_boolean
7331 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
7332                                      struct bfd_link_info *info)
7333 {
7334   bfd *dynobj;
7335   asection *s, *sreldyn;
7336   bfd_boolean reltext;
7337   struct mips_elf_link_hash_table *htab;
7338
7339   htab = mips_elf_hash_table (info);
7340   dynobj = elf_hash_table (info)->dynobj;
7341   BFD_ASSERT (dynobj != NULL);
7342
7343   if (elf_hash_table (info)->dynamic_sections_created)
7344     {
7345       /* Set the contents of the .interp section to the interpreter.  */
7346       if (info->executable)
7347         {
7348           s = bfd_get_section_by_name (dynobj, ".interp");
7349           BFD_ASSERT (s != NULL);
7350           s->size
7351             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
7352           s->contents
7353             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
7354         }
7355     }
7356
7357   /* The check_relocs and adjust_dynamic_symbol entry points have
7358      determined the sizes of the various dynamic sections.  Allocate
7359      memory for them.  */
7360   reltext = FALSE;
7361   sreldyn = NULL;
7362   for (s = dynobj->sections; s != NULL; s = s->next)
7363     {
7364       const char *name;
7365
7366       /* It's OK to base decisions on the section name, because none
7367          of the dynobj section names depend upon the input files.  */
7368       name = bfd_get_section_name (dynobj, s);
7369
7370       if ((s->flags & SEC_LINKER_CREATED) == 0)
7371         continue;
7372
7373       if (CONST_STRNEQ (name, ".rel"))
7374         {
7375           if (s->size != 0)
7376             {
7377               const char *outname;
7378               asection *target;
7379
7380               /* If this relocation section applies to a read only
7381                  section, then we probably need a DT_TEXTREL entry.
7382                  If the relocation section is .rel(a).dyn, we always
7383                  assert a DT_TEXTREL entry rather than testing whether
7384                  there exists a relocation to a read only section or
7385                  not.  */
7386               outname = bfd_get_section_name (output_bfd,
7387                                               s->output_section);
7388               target = bfd_get_section_by_name (output_bfd, outname + 4);
7389               if ((target != NULL
7390                    && (target->flags & SEC_READONLY) != 0
7391                    && (target->flags & SEC_ALLOC) != 0)
7392                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
7393                 reltext = TRUE;
7394
7395               /* We use the reloc_count field as a counter if we need
7396                  to copy relocs into the output file.  */
7397               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
7398                 s->reloc_count = 0;
7399
7400               /* If combreloc is enabled, elf_link_sort_relocs() will
7401                  sort relocations, but in a different way than we do,
7402                  and before we're done creating relocations.  Also, it
7403                  will move them around between input sections'
7404                  relocation's contents, so our sorting would be
7405                  broken, so don't let it run.  */
7406               info->combreloc = 0;
7407             }
7408         }
7409       else if (htab->is_vxworks && strcmp (name, ".got") == 0)
7410         {
7411           /* Executables do not need a GOT.  */
7412           if (info->shared)
7413             {
7414               /* Allocate relocations for all but the reserved entries.  */
7415               struct mips_got_info *g;
7416               unsigned int count;
7417
7418               g = mips_elf_got_info (dynobj, NULL);
7419               count = (g->global_gotno
7420                        + g->local_gotno
7421                        - MIPS_RESERVED_GOTNO (info));
7422               mips_elf_allocate_dynamic_relocations (dynobj, info, count);
7423             }
7424         }
7425       else if (!htab->is_vxworks && CONST_STRNEQ (name, ".got"))
7426         {
7427           /* _bfd_mips_elf_always_size_sections() has already done
7428              most of the work, but some symbols may have been mapped
7429              to versions that we must now resolve in the got_entries
7430              hash tables.  */
7431           struct mips_got_info *gg = mips_elf_got_info (dynobj, NULL);
7432           struct mips_got_info *g = gg;
7433           struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
7434           unsigned int needed_relocs = 0;
7435
7436           if (gg->next)
7437             {
7438               set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (output_bfd);
7439               set_got_offset_arg.info = info;
7440
7441               /* NOTE 2005-02-03: How can this call, or the next, ever
7442                  find any indirect entries to resolve?  They were all
7443                  resolved in mips_elf_multi_got.  */
7444               mips_elf_resolve_final_got_entries (gg);
7445               for (g = gg->next; g && g->next != gg; g = g->next)
7446                 {
7447                   unsigned int save_assign;
7448
7449                   mips_elf_resolve_final_got_entries (g);
7450
7451                   /* Assign offsets to global GOT entries.  */
7452                   save_assign = g->assigned_gotno;
7453                   g->assigned_gotno = g->local_gotno;
7454                   set_got_offset_arg.g = g;
7455                   set_got_offset_arg.needed_relocs = 0;
7456                   htab_traverse (g->got_entries,
7457                                  mips_elf_set_global_got_offset,
7458                                  &set_got_offset_arg);
7459                   needed_relocs += set_got_offset_arg.needed_relocs;
7460                   BFD_ASSERT (g->assigned_gotno - g->local_gotno
7461                               <= g->global_gotno);
7462
7463                   g->assigned_gotno = save_assign;
7464                   if (info->shared)
7465                     {
7466                       needed_relocs += g->local_gotno - g->assigned_gotno;
7467                       BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
7468                                   + g->next->global_gotno
7469                                   + g->next->tls_gotno
7470                                   + MIPS_RESERVED_GOTNO (info));
7471                     }
7472                 }
7473             }
7474           else
7475             {
7476               struct mips_elf_count_tls_arg arg;
7477               arg.info = info;
7478               arg.needed = 0;
7479
7480               htab_traverse (gg->got_entries, mips_elf_count_local_tls_relocs,
7481                              &arg);
7482               elf_link_hash_traverse (elf_hash_table (info),
7483                                       mips_elf_count_global_tls_relocs,
7484                                       &arg);
7485
7486               needed_relocs += arg.needed;
7487             }
7488
7489           if (needed_relocs)
7490             mips_elf_allocate_dynamic_relocations (dynobj, info,
7491                                                    needed_relocs);
7492         }
7493       else if (strcmp (name, MIPS_ELF_STUB_SECTION_NAME (output_bfd)) == 0)
7494         {
7495           /* IRIX rld assumes that the function stub isn't at the end
7496              of .text section.  So put a dummy.  XXX  */
7497           s->size += htab->function_stub_size;
7498         }
7499       else if (! info->shared
7500                && ! mips_elf_hash_table (info)->use_rld_obj_head
7501                && CONST_STRNEQ (name, ".rld_map"))
7502         {
7503           /* We add a room for __rld_map.  It will be filled in by the
7504              rtld to contain a pointer to the _r_debug structure.  */
7505           s->size += 4;
7506         }
7507       else if (SGI_COMPAT (output_bfd)
7508                && CONST_STRNEQ (name, ".compact_rel"))
7509         s->size += mips_elf_hash_table (info)->compact_rel_size;
7510       else if (! CONST_STRNEQ (name, ".init")
7511                && s != htab->sgotplt
7512                && s != htab->splt)
7513         {
7514           /* It's not one of our sections, so don't allocate space.  */
7515           continue;
7516         }
7517
7518       if (s->size == 0)
7519         {
7520           s->flags |= SEC_EXCLUDE;
7521           continue;
7522         }
7523
7524       if ((s->flags & SEC_HAS_CONTENTS) == 0)
7525         continue;
7526
7527       /* Allocate memory for this section last, since we may increase its
7528          size above.  */
7529       if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) == 0)
7530         {
7531           sreldyn = s;
7532           continue;
7533         }
7534
7535       /* Allocate memory for the section contents.  */
7536       s->contents = bfd_zalloc (dynobj, s->size);
7537       if (s->contents == NULL)
7538         {
7539           bfd_set_error (bfd_error_no_memory);
7540           return FALSE;
7541         }
7542     }
7543
7544   /* Allocate memory for the .rel(a).dyn section.  */
7545   if (sreldyn != NULL)
7546     {
7547       sreldyn->contents = bfd_zalloc (dynobj, sreldyn->size);
7548       if (sreldyn->contents == NULL)
7549         {
7550           bfd_set_error (bfd_error_no_memory);
7551           return FALSE;
7552         }
7553     }
7554
7555   if (elf_hash_table (info)->dynamic_sections_created)
7556     {
7557       /* Add some entries to the .dynamic section.  We fill in the
7558          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
7559          must add the entries now so that we get the correct size for
7560          the .dynamic section.  */
7561
7562       /* SGI object has the equivalence of DT_DEBUG in the
7563          DT_MIPS_RLD_MAP entry.  This must come first because glibc
7564          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and GDB only
7565          looks at the first one it sees.  */
7566       if (!info->shared
7567           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
7568         return FALSE;
7569
7570       /* The DT_DEBUG entry may be filled in by the dynamic linker and
7571          used by the debugger.  */
7572       if (info->executable
7573           && !SGI_COMPAT (output_bfd)
7574           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
7575         return FALSE;
7576
7577       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
7578         info->flags |= DF_TEXTREL;
7579
7580       if ((info->flags & DF_TEXTREL) != 0)
7581         {
7582           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
7583             return FALSE;
7584
7585           /* Clear the DF_TEXTREL flag.  It will be set again if we
7586              write out an actual text relocation; we may not, because
7587              at this point we do not know whether e.g. any .eh_frame
7588              absolute relocations have been converted to PC-relative.  */
7589           info->flags &= ~DF_TEXTREL;
7590         }
7591
7592       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
7593         return FALSE;
7594
7595       if (htab->is_vxworks)
7596         {
7597           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
7598              use any of the DT_MIPS_* tags.  */
7599           if (mips_elf_rel_dyn_section (info, FALSE))
7600             {
7601               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
7602                 return FALSE;
7603
7604               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
7605                 return FALSE;
7606
7607               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
7608                 return FALSE;
7609             }
7610           if (htab->splt->size > 0)
7611             {
7612               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
7613                 return FALSE;
7614
7615               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
7616                 return FALSE;
7617
7618               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
7619                 return FALSE;
7620             }
7621         }
7622       else
7623         {
7624           if (mips_elf_rel_dyn_section (info, FALSE))
7625             {
7626               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
7627                 return FALSE;
7628
7629               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
7630                 return FALSE;
7631
7632               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
7633                 return FALSE;
7634             }
7635
7636           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
7637             return FALSE;
7638
7639           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
7640             return FALSE;
7641
7642           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
7643             return FALSE;
7644
7645           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
7646             return FALSE;
7647
7648           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
7649             return FALSE;
7650
7651           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
7652             return FALSE;
7653
7654           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
7655             return FALSE;
7656
7657           if (IRIX_COMPAT (dynobj) == ict_irix5
7658               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
7659             return FALSE;
7660
7661           if (IRIX_COMPAT (dynobj) == ict_irix6
7662               && (bfd_get_section_by_name
7663                   (dynobj, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
7664               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
7665             return FALSE;
7666         }
7667     }
7668
7669   return TRUE;
7670 }
7671 \f
7672 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
7673    Adjust its R_ADDEND field so that it is correct for the output file.
7674    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
7675    and sections respectively; both use symbol indexes.  */
7676
7677 static void
7678 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
7679                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
7680                         asection **local_sections, Elf_Internal_Rela *rel)
7681 {
7682   unsigned int r_type, r_symndx;
7683   Elf_Internal_Sym *sym;
7684   asection *sec;
7685
7686   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections, FALSE))
7687     {
7688       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
7689       if (r_type == R_MIPS16_GPREL
7690           || r_type == R_MIPS_GPREL16
7691           || r_type == R_MIPS_GPREL32
7692           || r_type == R_MIPS_LITERAL)
7693         {
7694           rel->r_addend += _bfd_get_gp_value (input_bfd);
7695           rel->r_addend -= _bfd_get_gp_value (output_bfd);
7696         }
7697
7698       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
7699       sym = local_syms + r_symndx;
7700
7701       /* Adjust REL's addend to account for section merging.  */
7702       if (!info->relocatable)
7703         {
7704           sec = local_sections[r_symndx];
7705           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
7706         }
7707
7708       /* This would normally be done by the rela_normal code in elflink.c.  */
7709       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
7710         rel->r_addend += local_sections[r_symndx]->output_offset;
7711     }
7712 }
7713
7714 /* Relocate a MIPS ELF section.  */
7715
7716 bfd_boolean
7717 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
7718                                 bfd *input_bfd, asection *input_section,
7719                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
7720                                 Elf_Internal_Sym *local_syms,
7721                                 asection **local_sections)
7722 {
7723   Elf_Internal_Rela *rel;
7724   const Elf_Internal_Rela *relend;
7725   bfd_vma addend = 0;
7726   bfd_boolean use_saved_addend_p = FALSE;
7727   const struct elf_backend_data *bed;
7728
7729   bed = get_elf_backend_data (output_bfd);
7730   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
7731   for (rel = relocs; rel < relend; ++rel)
7732     {
7733       const char *name;
7734       bfd_vma value = 0;
7735       reloc_howto_type *howto;
7736       bfd_boolean require_jalx;
7737       /* TRUE if the relocation is a RELA relocation, rather than a
7738          REL relocation.  */
7739       bfd_boolean rela_relocation_p = TRUE;
7740       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
7741       const char *msg;
7742       unsigned long r_symndx;
7743       asection *sec;
7744       Elf_Internal_Shdr *symtab_hdr;
7745       struct elf_link_hash_entry *h;
7746
7747       /* Find the relocation howto for this relocation.  */
7748       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type,
7749                                        NEWABI_P (input_bfd)
7750                                        && (MIPS_RELOC_RELA_P
7751                                            (input_bfd, input_section,
7752                                             rel - relocs)));
7753
7754       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
7755       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
7756       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections, FALSE))
7757         {
7758           sec = local_sections[r_symndx];
7759           h = NULL;
7760         }
7761       else
7762         {
7763           unsigned long extsymoff;
7764
7765           extsymoff = 0;
7766           if (!elf_bad_symtab (input_bfd))
7767             extsymoff = symtab_hdr->sh_info;
7768           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
7769           while (h->root.type == bfd_link_hash_indirect
7770                  || h->root.type == bfd_link_hash_warning)
7771             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7772
7773           sec = NULL;
7774           if (h->root.type == bfd_link_hash_defined
7775               || h->root.type == bfd_link_hash_defweak)
7776             sec = h->root.u.def.section;
7777         }
7778
7779       if (sec != NULL && elf_discarded_section (sec))
7780         {
7781           /* For relocs against symbols from removed linkonce sections,
7782              or sections discarded by a linker script, we just want the
7783              section contents zeroed.  Avoid any special processing.  */
7784           _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
7785           rel->r_info = 0;
7786           rel->r_addend = 0;
7787           continue;
7788         }
7789
7790       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
7791         {
7792           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
7793              64-bit code, but make sure all their addresses are in the
7794              lowermost or uppermost 32-bit section of the 64-bit address
7795              space.  Thus, when they use an R_MIPS_64 they mean what is
7796              usually meant by R_MIPS_32, with the exception that the
7797              stored value is sign-extended to 64 bits.  */
7798           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
7799
7800           /* On big-endian systems, we need to lie about the position
7801              of the reloc.  */
7802           if (bfd_big_endian (input_bfd))
7803             rel->r_offset += 4;
7804         }
7805
7806       if (!use_saved_addend_p)
7807         {
7808           Elf_Internal_Shdr *rel_hdr;
7809
7810           /* If these relocations were originally of the REL variety,
7811              we must pull the addend out of the field that will be
7812              relocated.  Otherwise, we simply use the contents of the
7813              RELA relocation.  To determine which flavor or relocation
7814              this is, we depend on the fact that the INPUT_SECTION's
7815              REL_HDR is read before its REL_HDR2.  */
7816           rel_hdr = &elf_section_data (input_section)->rel_hdr;
7817           if ((size_t) (rel - relocs)
7818               >= (NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel))
7819             rel_hdr = elf_section_data (input_section)->rel_hdr2;
7820           if (rel_hdr->sh_entsize == MIPS_ELF_REL_SIZE (input_bfd))
7821             {
7822               bfd_byte *location = contents + rel->r_offset;
7823
7824               /* Note that this is a REL relocation.  */
7825               rela_relocation_p = FALSE;
7826
7827               /* Get the addend, which is stored in the input file.  */
7828               _bfd_mips16_elf_reloc_unshuffle (input_bfd, r_type, FALSE,
7829                                                location);
7830               addend = mips_elf_obtain_contents (howto, rel, input_bfd,
7831                                                  contents);
7832               _bfd_mips16_elf_reloc_shuffle(input_bfd, r_type, FALSE,
7833                                             location);
7834
7835               addend &= howto->src_mask;
7836
7837               /* For some kinds of relocations, the ADDEND is a
7838                  combination of the addend stored in two different
7839                  relocations.   */
7840               if (r_type == R_MIPS_HI16 || r_type == R_MIPS16_HI16
7841                   || (r_type == R_MIPS_GOT16
7842                       && mips_elf_local_relocation_p (input_bfd, rel,
7843                                                       local_sections, FALSE)))
7844                 {
7845                   const Elf_Internal_Rela *lo16_relocation;
7846                   reloc_howto_type *lo16_howto;
7847                   int lo16_type;
7848
7849                   if (r_type == R_MIPS16_HI16)
7850                     lo16_type = R_MIPS16_LO16;
7851                   else
7852                     lo16_type = R_MIPS_LO16;
7853
7854                   /* The combined value is the sum of the HI16 addend,
7855                      left-shifted by sixteen bits, and the LO16
7856                      addend, sign extended.  (Usually, the code does
7857                      a `lui' of the HI16 value, and then an `addiu' of
7858                      the LO16 value.)
7859
7860                      Scan ahead to find a matching LO16 relocation.
7861
7862                      According to the MIPS ELF ABI, the R_MIPS_LO16
7863                      relocation must be immediately following.
7864                      However, for the IRIX6 ABI, the next relocation
7865                      may be a composed relocation consisting of
7866                      several relocations for the same address.  In
7867                      that case, the R_MIPS_LO16 relocation may occur
7868                      as one of these.  We permit a similar extension
7869                      in general, as that is useful for GCC.
7870
7871                      In some cases GCC dead code elimination removes
7872                      the LO16 but keeps the corresponding HI16.  This
7873                      is strictly speaking a violation of the ABI but
7874                      not immediately harmful.  */
7875                   lo16_relocation = mips_elf_next_relocation (input_bfd,
7876                                                               lo16_type,
7877                                                               rel, relend);
7878                   if (lo16_relocation == NULL)
7879                     {
7880                       const char *name;
7881
7882                       if (h)
7883                         name = h->root.root.string;
7884                       else
7885                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
7886                                                  local_syms + r_symndx,
7887                                                  sec);
7888                       (*_bfd_error_handler)
7889                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
7890                          input_bfd, input_section, name, howto->name,
7891                          rel->r_offset);
7892                     }
7893                   else
7894                     {
7895                       bfd_byte *lo16_location;
7896                       bfd_vma l;
7897
7898                       lo16_location = contents + lo16_relocation->r_offset;
7899
7900                       /* Obtain the addend kept there.  */
7901                       lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd,
7902                                                             lo16_type, FALSE);
7903                       _bfd_mips16_elf_reloc_unshuffle (input_bfd, lo16_type,
7904                                                        FALSE, lo16_location);
7905                       l = mips_elf_obtain_contents (lo16_howto,
7906                                                     lo16_relocation,
7907                                                     input_bfd, contents);
7908                       _bfd_mips16_elf_reloc_shuffle (input_bfd, lo16_type,
7909                                                      FALSE, lo16_location);
7910                       l &= lo16_howto->src_mask;
7911                       l <<= lo16_howto->rightshift;
7912                       l = _bfd_mips_elf_sign_extend (l, 16);
7913
7914                       addend <<= 16;
7915
7916                       /* Compute the combined addend.  */
7917                       addend += l;
7918                     }
7919                 }
7920               else
7921                 addend <<= howto->rightshift;
7922             }
7923           else
7924             addend = rel->r_addend;
7925           mips_elf_adjust_addend (output_bfd, info, input_bfd,
7926                                   local_syms, local_sections, rel);
7927         }
7928
7929       if (info->relocatable)
7930         {
7931           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
7932               && bfd_big_endian (input_bfd))
7933             rel->r_offset -= 4;
7934
7935           if (!rela_relocation_p && rel->r_addend)
7936             {
7937               addend += rel->r_addend;
7938               if (r_type == R_MIPS_HI16
7939                   || r_type == R_MIPS_GOT16)
7940                 addend = mips_elf_high (addend);
7941               else if (r_type == R_MIPS_HIGHER)
7942                 addend = mips_elf_higher (addend);
7943               else if (r_type == R_MIPS_HIGHEST)
7944                 addend = mips_elf_highest (addend);
7945               else
7946                 addend >>= howto->rightshift;
7947
7948               /* We use the source mask, rather than the destination
7949                  mask because the place to which we are writing will be
7950                  source of the addend in the final link.  */
7951               addend &= howto->src_mask;
7952
7953               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
7954                 /* See the comment above about using R_MIPS_64 in the 32-bit
7955                    ABI.  Here, we need to update the addend.  It would be
7956                    possible to get away with just using the R_MIPS_32 reloc
7957                    but for endianness.  */
7958                 {
7959                   bfd_vma sign_bits;
7960                   bfd_vma low_bits;
7961                   bfd_vma high_bits;
7962
7963                   if (addend & ((bfd_vma) 1 << 31))
7964 #ifdef BFD64
7965                     sign_bits = ((bfd_vma) 1 << 32) - 1;
7966 #else
7967                     sign_bits = -1;
7968 #endif
7969                   else
7970                     sign_bits = 0;
7971
7972                   /* If we don't know that we have a 64-bit type,
7973                      do two separate stores.  */
7974                   if (bfd_big_endian (input_bfd))
7975                     {
7976                       /* Store the sign-bits (which are most significant)
7977                          first.  */
7978                       low_bits = sign_bits;
7979                       high_bits = addend;
7980                     }
7981                   else
7982                     {
7983                       low_bits = addend;
7984                       high_bits = sign_bits;
7985                     }
7986                   bfd_put_32 (input_bfd, low_bits,
7987                               contents + rel->r_offset);
7988                   bfd_put_32 (input_bfd, high_bits,
7989                               contents + rel->r_offset + 4);
7990                   continue;
7991                 }
7992
7993               if (! mips_elf_perform_relocation (info, howto, rel, addend,
7994                                                  input_bfd, input_section,
7995                                                  contents, FALSE))
7996                 return FALSE;
7997             }
7998
7999           /* Go on to the next relocation.  */
8000           continue;
8001         }
8002
8003       /* In the N32 and 64-bit ABIs there may be multiple consecutive
8004          relocations for the same offset.  In that case we are
8005          supposed to treat the output of each relocation as the addend
8006          for the next.  */
8007       if (rel + 1 < relend
8008           && rel->r_offset == rel[1].r_offset
8009           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
8010         use_saved_addend_p = TRUE;
8011       else
8012         use_saved_addend_p = FALSE;
8013
8014       /* Figure out what value we are supposed to relocate.  */
8015       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
8016                                              input_section, info, rel,
8017                                              addend, howto, local_syms,
8018                                              local_sections, &value,
8019                                              &name, &require_jalx,
8020                                              use_saved_addend_p))
8021         {
8022         case bfd_reloc_continue:
8023           /* There's nothing to do.  */
8024           continue;
8025
8026         case bfd_reloc_undefined:
8027           /* mips_elf_calculate_relocation already called the
8028              undefined_symbol callback.  There's no real point in
8029              trying to perform the relocation at this point, so we
8030              just skip ahead to the next relocation.  */
8031           continue;
8032
8033         case bfd_reloc_notsupported:
8034           msg = _("internal error: unsupported relocation error");
8035           info->callbacks->warning
8036             (info, msg, name, input_bfd, input_section, rel->r_offset);
8037           return FALSE;
8038
8039         case bfd_reloc_overflow:
8040           if (use_saved_addend_p)
8041             /* Ignore overflow until we reach the last relocation for
8042                a given location.  */
8043             ;
8044           else
8045             {
8046               struct mips_elf_link_hash_table *htab;
8047
8048               htab = mips_elf_hash_table (info);
8049               BFD_ASSERT (name != NULL);
8050               if (!htab->small_data_overflow_reported
8051                   && (howto->type == R_MIPS_GPREL16
8052                       || howto->type == R_MIPS_LITERAL))
8053                 {
8054                   const char *msg =
8055                     _("small-data section exceeds 64KB;"
8056                       " lower small-data size limit (see option -G)");
8057
8058                   htab->small_data_overflow_reported = TRUE;
8059                   (*info->callbacks->einfo) ("%P: %s\n", msg);
8060                 }
8061               if (! ((*info->callbacks->reloc_overflow)
8062                      (info, NULL, name, howto->name, (bfd_vma) 0,
8063                       input_bfd, input_section, rel->r_offset)))
8064                 return FALSE;
8065             }
8066           break;
8067
8068         case bfd_reloc_ok:
8069           break;
8070
8071         default:
8072           abort ();
8073           break;
8074         }
8075
8076       /* If we've got another relocation for the address, keep going
8077          until we reach the last one.  */
8078       if (use_saved_addend_p)
8079         {
8080           addend = value;
8081           continue;
8082         }
8083
8084       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
8085         /* See the comment above about using R_MIPS_64 in the 32-bit
8086            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
8087            that calculated the right value.  Now, however, we
8088            sign-extend the 32-bit result to 64-bits, and store it as a
8089            64-bit value.  We are especially generous here in that we
8090            go to extreme lengths to support this usage on systems with
8091            only a 32-bit VMA.  */
8092         {
8093           bfd_vma sign_bits;
8094           bfd_vma low_bits;
8095           bfd_vma high_bits;
8096
8097           if (value & ((bfd_vma) 1 << 31))
8098 #ifdef BFD64
8099             sign_bits = ((bfd_vma) 1 << 32) - 1;
8100 #else
8101             sign_bits = -1;
8102 #endif
8103           else
8104             sign_bits = 0;
8105
8106           /* If we don't know that we have a 64-bit type,
8107              do two separate stores.  */
8108           if (bfd_big_endian (input_bfd))
8109             {
8110               /* Undo what we did above.  */
8111               rel->r_offset -= 4;
8112               /* Store the sign-bits (which are most significant)
8113                  first.  */
8114               low_bits = sign_bits;
8115               high_bits = value;
8116             }
8117           else
8118             {
8119               low_bits = value;
8120               high_bits = sign_bits;
8121             }
8122           bfd_put_32 (input_bfd, low_bits,
8123                       contents + rel->r_offset);
8124           bfd_put_32 (input_bfd, high_bits,
8125                       contents + rel->r_offset + 4);
8126           continue;
8127         }
8128
8129       /* Actually perform the relocation.  */
8130       if (! mips_elf_perform_relocation (info, howto, rel, value,
8131                                          input_bfd, input_section,
8132                                          contents, require_jalx))
8133         return FALSE;
8134     }
8135
8136   return TRUE;
8137 }
8138 \f
8139 /* If NAME is one of the special IRIX6 symbols defined by the linker,
8140    adjust it appropriately now.  */
8141
8142 static void
8143 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
8144                                       const char *name, Elf_Internal_Sym *sym)
8145 {
8146   /* The linker script takes care of providing names and values for
8147      these, but we must place them into the right sections.  */
8148   static const char* const text_section_symbols[] = {
8149     "_ftext",
8150     "_etext",
8151     "__dso_displacement",
8152     "__elf_header",
8153     "__program_header_table",
8154     NULL
8155   };
8156
8157   static const char* const data_section_symbols[] = {
8158     "_fdata",
8159     "_edata",
8160     "_end",
8161     "_fbss",
8162     NULL
8163   };
8164
8165   const char* const *p;
8166   int i;
8167
8168   for (i = 0; i < 2; ++i)
8169     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
8170          *p;
8171          ++p)
8172       if (strcmp (*p, name) == 0)
8173         {
8174           /* All of these symbols are given type STT_SECTION by the
8175              IRIX6 linker.  */
8176           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8177           sym->st_other = STO_PROTECTED;
8178
8179           /* The IRIX linker puts these symbols in special sections.  */
8180           if (i == 0)
8181             sym->st_shndx = SHN_MIPS_TEXT;
8182           else
8183             sym->st_shndx = SHN_MIPS_DATA;
8184
8185           break;
8186         }
8187 }
8188
8189 /* Finish up dynamic symbol handling.  We set the contents of various
8190    dynamic sections here.  */
8191
8192 bfd_boolean
8193 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
8194                                      struct bfd_link_info *info,
8195                                      struct elf_link_hash_entry *h,
8196                                      Elf_Internal_Sym *sym)
8197 {
8198   bfd *dynobj;
8199   asection *sgot;
8200   struct mips_got_info *g, *gg;
8201   const char *name;
8202   int idx;
8203   struct mips_elf_link_hash_table *htab;
8204
8205   htab = mips_elf_hash_table (info);
8206   dynobj = elf_hash_table (info)->dynobj;
8207
8208   if (h->plt.offset != MINUS_ONE)
8209     {
8210       asection *s;
8211       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
8212
8213       /* This symbol has a stub.  Set it up.  */
8214
8215       BFD_ASSERT (h->dynindx != -1);
8216
8217       s = bfd_get_section_by_name (dynobj,
8218                                    MIPS_ELF_STUB_SECTION_NAME (dynobj));
8219       BFD_ASSERT (s != NULL);
8220
8221       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
8222                   || (h->dynindx <= 0xffff));
8223
8224       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
8225          sign extension at runtime in the stub, resulting in a negative
8226          index value.  */
8227       if (h->dynindx & ~0x7fffffff)
8228         return FALSE;
8229
8230       /* Fill the stub.  */
8231       idx = 0;
8232       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
8233       idx += 4;
8234       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
8235       idx += 4;
8236       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
8237         {
8238           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
8239                       stub + idx);
8240           idx += 4;
8241         }
8242       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
8243       idx += 4;
8244
8245       /* If a large stub is not required and sign extension is not a
8246          problem, then use legacy code in the stub.  */
8247       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
8248         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
8249       else if (h->dynindx & ~0x7fff)
8250         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
8251       else
8252         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
8253                     stub + idx);
8254
8255       BFD_ASSERT (h->plt.offset <= s->size);
8256       memcpy (s->contents + h->plt.offset, stub, htab->function_stub_size);
8257
8258       /* Mark the symbol as undefined.  plt.offset != -1 occurs
8259          only for the referenced symbol.  */
8260       sym->st_shndx = SHN_UNDEF;
8261
8262       /* The run-time linker uses the st_value field of the symbol
8263          to reset the global offset table entry for this external
8264          to its stub address when unlinking a shared object.  */
8265       sym->st_value = (s->output_section->vma + s->output_offset
8266                        + h->plt.offset);
8267     }
8268
8269   BFD_ASSERT (h->dynindx != -1
8270               || h->forced_local);
8271
8272   sgot = mips_elf_got_section (dynobj, FALSE);
8273   BFD_ASSERT (sgot != NULL);
8274   BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
8275   g = mips_elf_section_data (sgot)->u.got_info;
8276   BFD_ASSERT (g != NULL);
8277
8278   /* Run through the global symbol table, creating GOT entries for all
8279      the symbols that need them.  */
8280   if (g->global_gotsym != NULL
8281       && h->dynindx >= g->global_gotsym->dynindx)
8282     {
8283       bfd_vma offset;
8284       bfd_vma value;
8285
8286       value = sym->st_value;
8287       offset = mips_elf_global_got_index (dynobj, output_bfd, h, R_MIPS_GOT16, info);
8288       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
8289     }
8290
8291   if (g->next && h->dynindx != -1 && h->type != STT_TLS)
8292     {
8293       struct mips_got_entry e, *p;
8294       bfd_vma entry;
8295       bfd_vma offset;
8296
8297       gg = g;
8298
8299       e.abfd = output_bfd;
8300       e.symndx = -1;
8301       e.d.h = (struct mips_elf_link_hash_entry *)h;
8302       e.tls_type = 0;
8303
8304       for (g = g->next; g->next != gg; g = g->next)
8305         {
8306           if (g->got_entries
8307               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
8308                                                            &e)))
8309             {
8310               offset = p->gotidx;
8311               if (info->shared
8312                   || (elf_hash_table (info)->dynamic_sections_created
8313                       && p->d.h != NULL
8314                       && p->d.h->root.def_dynamic
8315                       && !p->d.h->root.def_regular))
8316                 {
8317                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
8318                      the various compatibility problems, it's easier to mock
8319                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
8320                      mips_elf_create_dynamic_relocation to calculate the
8321                      appropriate addend.  */
8322                   Elf_Internal_Rela rel[3];
8323
8324                   memset (rel, 0, sizeof (rel));
8325                   if (ABI_64_P (output_bfd))
8326                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
8327                   else
8328                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
8329                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
8330
8331                   entry = 0;
8332                   if (! (mips_elf_create_dynamic_relocation
8333                          (output_bfd, info, rel,
8334                           e.d.h, NULL, sym->st_value, &entry, sgot)))
8335                     return FALSE;
8336                 }
8337               else
8338                 entry = sym->st_value;
8339               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
8340             }
8341         }
8342     }
8343
8344   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
8345   name = h->root.root.string;
8346   if (strcmp (name, "_DYNAMIC") == 0
8347       || h == elf_hash_table (info)->hgot)
8348     sym->st_shndx = SHN_ABS;
8349   else if (strcmp (name, "_DYNAMIC_LINK") == 0
8350            || strcmp (name, "_DYNAMIC_LINKING") == 0)
8351     {
8352       sym->st_shndx = SHN_ABS;
8353       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8354       sym->st_value = 1;
8355     }
8356   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
8357     {
8358       sym->st_shndx = SHN_ABS;
8359       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8360       sym->st_value = elf_gp (output_bfd);
8361     }
8362   else if (SGI_COMPAT (output_bfd))
8363     {
8364       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
8365           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
8366         {
8367           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8368           sym->st_other = STO_PROTECTED;
8369           sym->st_value = 0;
8370           sym->st_shndx = SHN_MIPS_DATA;
8371         }
8372       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
8373         {
8374           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8375           sym->st_other = STO_PROTECTED;
8376           sym->st_value = mips_elf_hash_table (info)->procedure_count;
8377           sym->st_shndx = SHN_ABS;
8378         }
8379       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
8380         {
8381           if (h->type == STT_FUNC)
8382             sym->st_shndx = SHN_MIPS_TEXT;
8383           else if (h->type == STT_OBJECT)
8384             sym->st_shndx = SHN_MIPS_DATA;
8385         }
8386     }
8387
8388   /* Handle the IRIX6-specific symbols.  */
8389   if (IRIX_COMPAT (output_bfd) == ict_irix6)
8390     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
8391
8392   if (! info->shared)
8393     {
8394       if (! mips_elf_hash_table (info)->use_rld_obj_head
8395           && (strcmp (name, "__rld_map") == 0
8396               || strcmp (name, "__RLD_MAP") == 0))
8397         {
8398           asection *s = bfd_get_section_by_name (dynobj, ".rld_map");
8399           BFD_ASSERT (s != NULL);
8400           sym->st_value = s->output_section->vma + s->output_offset;
8401           bfd_put_32 (output_bfd, 0, s->contents);
8402           if (mips_elf_hash_table (info)->rld_value == 0)
8403             mips_elf_hash_table (info)->rld_value = sym->st_value;
8404         }
8405       else if (mips_elf_hash_table (info)->use_rld_obj_head
8406                && strcmp (name, "__rld_obj_head") == 0)
8407         {
8408           /* IRIX6 does not use a .rld_map section.  */
8409           if (IRIX_COMPAT (output_bfd) == ict_irix5
8410               || IRIX_COMPAT (output_bfd) == ict_none)
8411             BFD_ASSERT (bfd_get_section_by_name (dynobj, ".rld_map")
8412                         != NULL);
8413           mips_elf_hash_table (info)->rld_value = sym->st_value;
8414         }
8415     }
8416
8417   /* If this is a mips16 symbol, force the value to be even.  */
8418   if (sym->st_other == STO_MIPS16)
8419     sym->st_value &= ~1;
8420
8421   return TRUE;
8422 }
8423
8424 /* Likewise, for VxWorks.  */
8425
8426 bfd_boolean
8427 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
8428                                          struct bfd_link_info *info,
8429                                          struct elf_link_hash_entry *h,
8430                                          Elf_Internal_Sym *sym)
8431 {
8432   bfd *dynobj;
8433   asection *sgot;
8434   struct mips_got_info *g;
8435   struct mips_elf_link_hash_table *htab;
8436
8437   htab = mips_elf_hash_table (info);
8438   dynobj = elf_hash_table (info)->dynobj;
8439
8440   if (h->plt.offset != (bfd_vma) -1)
8441     {
8442       bfd_byte *loc;
8443       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
8444       Elf_Internal_Rela rel;
8445       static const bfd_vma *plt_entry;
8446
8447       BFD_ASSERT (h->dynindx != -1);
8448       BFD_ASSERT (htab->splt != NULL);
8449       BFD_ASSERT (h->plt.offset <= htab->splt->size);
8450
8451       /* Calculate the address of the .plt entry.  */
8452       plt_address = (htab->splt->output_section->vma
8453                      + htab->splt->output_offset
8454                      + h->plt.offset);
8455
8456       /* Calculate the index of the entry.  */
8457       plt_index = ((h->plt.offset - htab->plt_header_size)
8458                    / htab->plt_entry_size);
8459
8460       /* Calculate the address of the .got.plt entry.  */
8461       got_address = (htab->sgotplt->output_section->vma
8462                      + htab->sgotplt->output_offset
8463                      + plt_index * 4);
8464
8465       /* Calculate the offset of the .got.plt entry from
8466          _GLOBAL_OFFSET_TABLE_.  */
8467       got_offset = mips_elf_gotplt_index (info, h);
8468
8469       /* Calculate the offset for the branch at the start of the PLT
8470          entry.  The branch jumps to the beginning of .plt.  */
8471       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
8472
8473       /* Fill in the initial value of the .got.plt entry.  */
8474       bfd_put_32 (output_bfd, plt_address,
8475                   htab->sgotplt->contents + plt_index * 4);
8476
8477       /* Find out where the .plt entry should go.  */
8478       loc = htab->splt->contents + h->plt.offset;
8479
8480       if (info->shared)
8481         {
8482           plt_entry = mips_vxworks_shared_plt_entry;
8483           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
8484           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
8485         }
8486       else
8487         {
8488           bfd_vma got_address_high, got_address_low;
8489
8490           plt_entry = mips_vxworks_exec_plt_entry;
8491           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
8492           got_address_low = got_address & 0xffff;
8493
8494           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
8495           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
8496           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
8497           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
8498           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
8499           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
8500           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
8501           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
8502
8503           loc = (htab->srelplt2->contents
8504                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
8505
8506           /* Emit a relocation for the .got.plt entry.  */
8507           rel.r_offset = got_address;
8508           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
8509           rel.r_addend = h->plt.offset;
8510           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8511
8512           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
8513           loc += sizeof (Elf32_External_Rela);
8514           rel.r_offset = plt_address + 8;
8515           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
8516           rel.r_addend = got_offset;
8517           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8518
8519           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
8520           loc += sizeof (Elf32_External_Rela);
8521           rel.r_offset += 4;
8522           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
8523           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8524         }
8525
8526       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
8527       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
8528       rel.r_offset = got_address;
8529       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
8530       rel.r_addend = 0;
8531       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8532
8533       if (!h->def_regular)
8534         sym->st_shndx = SHN_UNDEF;
8535     }
8536
8537   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
8538
8539   sgot = mips_elf_got_section (dynobj, FALSE);
8540   BFD_ASSERT (sgot != NULL);
8541   BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
8542   g = mips_elf_section_data (sgot)->u.got_info;
8543   BFD_ASSERT (g != NULL);
8544
8545   /* See if this symbol has an entry in the GOT.  */
8546   if (g->global_gotsym != NULL
8547       && h->dynindx >= g->global_gotsym->dynindx)
8548     {
8549       bfd_vma offset;
8550       Elf_Internal_Rela outrel;
8551       bfd_byte *loc;
8552       asection *s;
8553
8554       /* Install the symbol value in the GOT.   */
8555       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
8556                                           R_MIPS_GOT16, info);
8557       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
8558
8559       /* Add a dynamic relocation for it.  */
8560       s = mips_elf_rel_dyn_section (info, FALSE);
8561       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
8562       outrel.r_offset = (sgot->output_section->vma
8563                          + sgot->output_offset
8564                          + offset);
8565       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
8566       outrel.r_addend = 0;
8567       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
8568     }
8569
8570   /* Emit a copy reloc, if needed.  */
8571   if (h->needs_copy)
8572     {
8573       Elf_Internal_Rela rel;
8574
8575       BFD_ASSERT (h->dynindx != -1);
8576
8577       rel.r_offset = (h->root.u.def.section->output_section->vma
8578                       + h->root.u.def.section->output_offset
8579                       + h->root.u.def.value);
8580       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
8581       rel.r_addend = 0;
8582       bfd_elf32_swap_reloca_out (output_bfd, &rel,
8583                                  htab->srelbss->contents
8584                                  + (htab->srelbss->reloc_count
8585                                     * sizeof (Elf32_External_Rela)));
8586       ++htab->srelbss->reloc_count;
8587     }
8588
8589   /* If this is a mips16 symbol, force the value to be even.  */
8590   if (sym->st_other == STO_MIPS16)
8591     sym->st_value &= ~1;
8592
8593   return TRUE;
8594 }
8595
8596 /* Install the PLT header for a VxWorks executable and finalize the
8597    contents of .rela.plt.unloaded.  */
8598
8599 static void
8600 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
8601 {
8602   Elf_Internal_Rela rela;
8603   bfd_byte *loc;
8604   bfd_vma got_value, got_value_high, got_value_low, plt_address;
8605   static const bfd_vma *plt_entry;
8606   struct mips_elf_link_hash_table *htab;
8607
8608   htab = mips_elf_hash_table (info);
8609   plt_entry = mips_vxworks_exec_plt0_entry;
8610
8611   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
8612   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
8613                + htab->root.hgot->root.u.def.section->output_offset
8614                + htab->root.hgot->root.u.def.value);
8615
8616   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
8617   got_value_low = got_value & 0xffff;
8618
8619   /* Calculate the address of the PLT header.  */
8620   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
8621
8622   /* Install the PLT header.  */
8623   loc = htab->splt->contents;
8624   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
8625   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
8626   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
8627   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
8628   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
8629   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
8630
8631   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
8632   loc = htab->srelplt2->contents;
8633   rela.r_offset = plt_address;
8634   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
8635   rela.r_addend = 0;
8636   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
8637   loc += sizeof (Elf32_External_Rela);
8638
8639   /* Output the relocation for the following addiu of
8640      %lo(_GLOBAL_OFFSET_TABLE_).  */
8641   rela.r_offset += 4;
8642   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
8643   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
8644   loc += sizeof (Elf32_External_Rela);
8645
8646   /* Fix up the remaining relocations.  They may have the wrong
8647      symbol index for _G_O_T_ or _P_L_T_ depending on the order
8648      in which symbols were output.  */
8649   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
8650     {
8651       Elf_Internal_Rela rel;
8652
8653       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
8654       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
8655       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8656       loc += sizeof (Elf32_External_Rela);
8657
8658       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
8659       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
8660       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8661       loc += sizeof (Elf32_External_Rela);
8662
8663       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
8664       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
8665       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8666       loc += sizeof (Elf32_External_Rela);
8667     }
8668 }
8669
8670 /* Install the PLT header for a VxWorks shared library.  */
8671
8672 static void
8673 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
8674 {
8675   unsigned int i;
8676   struct mips_elf_link_hash_table *htab;
8677
8678   htab = mips_elf_hash_table (info);
8679
8680   /* We just need to copy the entry byte-by-byte.  */
8681   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
8682     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
8683                 htab->splt->contents + i * 4);
8684 }
8685
8686 /* Finish up the dynamic sections.  */
8687
8688 bfd_boolean
8689 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
8690                                        struct bfd_link_info *info)
8691 {
8692   bfd *dynobj;
8693   asection *sdyn;
8694   asection *sgot;
8695   struct mips_got_info *gg, *g;
8696   struct mips_elf_link_hash_table *htab;
8697
8698   htab = mips_elf_hash_table (info);
8699   dynobj = elf_hash_table (info)->dynobj;
8700
8701   sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
8702
8703   sgot = mips_elf_got_section (dynobj, FALSE);
8704   if (sgot == NULL)
8705     gg = g = NULL;
8706   else
8707     {
8708       BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
8709       gg = mips_elf_section_data (sgot)->u.got_info;
8710       BFD_ASSERT (gg != NULL);
8711       g = mips_elf_got_for_ibfd (gg, output_bfd);
8712       BFD_ASSERT (g != NULL);
8713     }
8714
8715   if (elf_hash_table (info)->dynamic_sections_created)
8716     {
8717       bfd_byte *b;
8718       int dyn_to_skip = 0, dyn_skipped = 0;
8719
8720       BFD_ASSERT (sdyn != NULL);
8721       BFD_ASSERT (g != NULL);
8722
8723       for (b = sdyn->contents;
8724            b < sdyn->contents + sdyn->size;
8725            b += MIPS_ELF_DYN_SIZE (dynobj))
8726         {
8727           Elf_Internal_Dyn dyn;
8728           const char *name;
8729           size_t elemsize;
8730           asection *s;
8731           bfd_boolean swap_out_p;
8732
8733           /* Read in the current dynamic entry.  */
8734           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
8735
8736           /* Assume that we're going to modify it and write it out.  */
8737           swap_out_p = TRUE;
8738
8739           switch (dyn.d_tag)
8740             {
8741             case DT_RELENT:
8742               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
8743               break;
8744
8745             case DT_RELAENT:
8746               BFD_ASSERT (htab->is_vxworks);
8747               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
8748               break;
8749
8750             case DT_STRSZ:
8751               /* Rewrite DT_STRSZ.  */
8752               dyn.d_un.d_val =
8753                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
8754               break;
8755
8756             case DT_PLTGOT:
8757               name = ".got";
8758               if (htab->is_vxworks)
8759                 {
8760                   /* _GLOBAL_OFFSET_TABLE_ is defined to be the beginning
8761                      of the ".got" section in DYNOBJ.  */
8762                   s = bfd_get_section_by_name (dynobj, name);
8763                   BFD_ASSERT (s != NULL);
8764                   dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
8765                 }
8766               else
8767                 {
8768                   s = bfd_get_section_by_name (output_bfd, name);
8769                   BFD_ASSERT (s != NULL);
8770                   dyn.d_un.d_ptr = s->vma;
8771                 }
8772               break;
8773
8774             case DT_MIPS_RLD_VERSION:
8775               dyn.d_un.d_val = 1; /* XXX */
8776               break;
8777
8778             case DT_MIPS_FLAGS:
8779               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
8780               break;
8781
8782             case DT_MIPS_TIME_STAMP:
8783               {
8784                 time_t t;
8785                 time (&t);
8786                 dyn.d_un.d_val = t;
8787               }
8788               break;
8789
8790             case DT_MIPS_ICHECKSUM:
8791               /* XXX FIXME: */
8792               swap_out_p = FALSE;
8793               break;
8794
8795             case DT_MIPS_IVERSION:
8796               /* XXX FIXME: */
8797               swap_out_p = FALSE;
8798               break;
8799
8800             case DT_MIPS_BASE_ADDRESS:
8801               s = output_bfd->sections;
8802               BFD_ASSERT (s != NULL);
8803               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
8804               break;
8805
8806             case DT_MIPS_LOCAL_GOTNO:
8807               dyn.d_un.d_val = g->local_gotno;
8808               break;
8809
8810             case DT_MIPS_UNREFEXTNO:
8811               /* The index into the dynamic symbol table which is the
8812                  entry of the first external symbol that is not
8813                  referenced within the same object.  */
8814               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
8815               break;
8816
8817             case DT_MIPS_GOTSYM:
8818               if (gg->global_gotsym)
8819                 {
8820                   dyn.d_un.d_val = gg->global_gotsym->dynindx;
8821                   break;
8822                 }
8823               /* In case if we don't have global got symbols we default
8824                  to setting DT_MIPS_GOTSYM to the same value as
8825                  DT_MIPS_SYMTABNO, so we just fall through.  */
8826
8827             case DT_MIPS_SYMTABNO:
8828               name = ".dynsym";
8829               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
8830               s = bfd_get_section_by_name (output_bfd, name);
8831               BFD_ASSERT (s != NULL);
8832
8833               dyn.d_un.d_val = s->size / elemsize;
8834               break;
8835
8836             case DT_MIPS_HIPAGENO:
8837               dyn.d_un.d_val = g->local_gotno - MIPS_RESERVED_GOTNO (info);
8838               break;
8839
8840             case DT_MIPS_RLD_MAP:
8841               dyn.d_un.d_ptr = mips_elf_hash_table (info)->rld_value;
8842               break;
8843
8844             case DT_MIPS_OPTIONS:
8845               s = (bfd_get_section_by_name
8846                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
8847               dyn.d_un.d_ptr = s->vma;
8848               break;
8849
8850             case DT_RELASZ:
8851               BFD_ASSERT (htab->is_vxworks);
8852               /* The count does not include the JUMP_SLOT relocations.  */
8853               if (htab->srelplt)
8854                 dyn.d_un.d_val -= htab->srelplt->size;
8855               break;
8856
8857             case DT_PLTREL:
8858               BFD_ASSERT (htab->is_vxworks);
8859               dyn.d_un.d_val = DT_RELA;
8860               break;
8861
8862             case DT_PLTRELSZ:
8863               BFD_ASSERT (htab->is_vxworks);
8864               dyn.d_un.d_val = htab->srelplt->size;
8865               break;
8866
8867             case DT_JMPREL:
8868               BFD_ASSERT (htab->is_vxworks);
8869               dyn.d_un.d_val = (htab->srelplt->output_section->vma
8870                                 + htab->srelplt->output_offset);
8871               break;
8872
8873             case DT_TEXTREL:
8874               /* If we didn't need any text relocations after all, delete
8875                  the dynamic tag.  */
8876               if (!(info->flags & DF_TEXTREL))
8877                 {
8878                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
8879                   swap_out_p = FALSE;
8880                 }
8881               break;
8882
8883             case DT_FLAGS:
8884               /* If we didn't need any text relocations after all, clear
8885                  DF_TEXTREL from DT_FLAGS.  */
8886               if (!(info->flags & DF_TEXTREL))
8887                 dyn.d_un.d_val &= ~DF_TEXTREL;
8888               else
8889                 swap_out_p = FALSE;
8890               break;
8891
8892             default:
8893               swap_out_p = FALSE;
8894               break;
8895             }
8896
8897           if (swap_out_p || dyn_skipped)
8898             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
8899               (dynobj, &dyn, b - dyn_skipped);
8900
8901           if (dyn_to_skip)
8902             {
8903               dyn_skipped += dyn_to_skip;
8904               dyn_to_skip = 0;
8905             }
8906         }
8907
8908       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
8909       if (dyn_skipped > 0)
8910         memset (b - dyn_skipped, 0, dyn_skipped);
8911     }
8912
8913   if (sgot != NULL && sgot->size > 0
8914       && !bfd_is_abs_section (sgot->output_section))
8915     {
8916       if (htab->is_vxworks)
8917         {
8918           /* The first entry of the global offset table points to the
8919              ".dynamic" section.  The second is initialized by the
8920              loader and contains the shared library identifier.
8921              The third is also initialized by the loader and points
8922              to the lazy resolution stub.  */
8923           MIPS_ELF_PUT_WORD (output_bfd,
8924                              sdyn->output_offset + sdyn->output_section->vma,
8925                              sgot->contents);
8926           MIPS_ELF_PUT_WORD (output_bfd, 0,
8927                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
8928           MIPS_ELF_PUT_WORD (output_bfd, 0,
8929                              sgot->contents
8930                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
8931         }
8932       else
8933         {
8934           /* The first entry of the global offset table will be filled at
8935              runtime. The second entry will be used by some runtime loaders.
8936              This isn't the case of IRIX rld.  */
8937           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
8938           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000,
8939                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
8940         }
8941
8942       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
8943          = MIPS_ELF_GOT_SIZE (output_bfd);
8944     }
8945
8946   /* Generate dynamic relocations for the non-primary gots.  */
8947   if (gg != NULL && gg->next)
8948     {
8949       Elf_Internal_Rela rel[3];
8950       bfd_vma addend = 0;
8951
8952       memset (rel, 0, sizeof (rel));
8953       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
8954
8955       for (g = gg->next; g->next != gg; g = g->next)
8956         {
8957           bfd_vma index = g->next->local_gotno + g->next->global_gotno
8958             + g->next->tls_gotno;
8959
8960           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
8961                              + index++ * MIPS_ELF_GOT_SIZE (output_bfd));
8962           MIPS_ELF_PUT_WORD (output_bfd, 0x80000000, sgot->contents
8963                              + index++ * MIPS_ELF_GOT_SIZE (output_bfd));
8964
8965           if (! info->shared)
8966             continue;
8967
8968           while (index < g->assigned_gotno)
8969             {
8970               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
8971                 = index++ * MIPS_ELF_GOT_SIZE (output_bfd);
8972               if (!(mips_elf_create_dynamic_relocation
8973                     (output_bfd, info, rel, NULL,
8974                      bfd_abs_section_ptr,
8975                      0, &addend, sgot)))
8976                 return FALSE;
8977               BFD_ASSERT (addend == 0);
8978             }
8979         }
8980     }
8981
8982   /* The generation of dynamic relocations for the non-primary gots
8983      adds more dynamic relocations.  We cannot count them until
8984      here.  */
8985
8986   if (elf_hash_table (info)->dynamic_sections_created)
8987     {
8988       bfd_byte *b;
8989       bfd_boolean swap_out_p;
8990
8991       BFD_ASSERT (sdyn != NULL);
8992
8993       for (b = sdyn->contents;
8994            b < sdyn->contents + sdyn->size;
8995            b += MIPS_ELF_DYN_SIZE (dynobj))
8996         {
8997           Elf_Internal_Dyn dyn;
8998           asection *s;
8999
9000           /* Read in the current dynamic entry.  */
9001           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
9002
9003           /* Assume that we're going to modify it and write it out.  */
9004           swap_out_p = TRUE;
9005
9006           switch (dyn.d_tag)
9007             {
9008             case DT_RELSZ:
9009               /* Reduce DT_RELSZ to account for any relocations we
9010                  decided not to make.  This is for the n64 irix rld,
9011                  which doesn't seem to apply any relocations if there
9012                  are trailing null entries.  */
9013               s = mips_elf_rel_dyn_section (info, FALSE);
9014               dyn.d_un.d_val = (s->reloc_count
9015                                 * (ABI_64_P (output_bfd)
9016                                    ? sizeof (Elf64_Mips_External_Rel)
9017                                    : sizeof (Elf32_External_Rel)));
9018               /* Adjust the section size too.  Tools like the prelinker
9019                  can reasonably expect the values to the same.  */
9020               elf_section_data (s->output_section)->this_hdr.sh_size
9021                 = dyn.d_un.d_val;
9022               break;
9023
9024             default:
9025               swap_out_p = FALSE;
9026               break;
9027             }
9028
9029           if (swap_out_p)
9030             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
9031               (dynobj, &dyn, b);
9032         }
9033     }
9034
9035   {
9036     asection *s;
9037     Elf32_compact_rel cpt;
9038
9039     if (SGI_COMPAT (output_bfd))
9040       {
9041         /* Write .compact_rel section out.  */
9042         s = bfd_get_section_by_name (dynobj, ".compact_rel");
9043         if (s != NULL)
9044           {
9045             cpt.id1 = 1;
9046             cpt.num = s->reloc_count;
9047             cpt.id2 = 2;
9048             cpt.offset = (s->output_section->filepos
9049                           + sizeof (Elf32_External_compact_rel));
9050             cpt.reserved0 = 0;
9051             cpt.reserved1 = 0;
9052             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
9053                                             ((Elf32_External_compact_rel *)
9054                                              s->contents));
9055
9056             /* Clean up a dummy stub function entry in .text.  */
9057             s = bfd_get_section_by_name (dynobj,
9058                                          MIPS_ELF_STUB_SECTION_NAME (dynobj));
9059             if (s != NULL)
9060               {
9061                 file_ptr dummy_offset;
9062
9063                 BFD_ASSERT (s->size >= htab->function_stub_size);
9064                 dummy_offset = s->size - htab->function_stub_size;
9065                 memset (s->contents + dummy_offset, 0,
9066                         htab->function_stub_size);
9067               }
9068           }
9069       }
9070
9071     /* The psABI says that the dynamic relocations must be sorted in
9072        increasing order of r_symndx.  The VxWorks EABI doesn't require
9073        this, and because the code below handles REL rather than RELA
9074        relocations, using it for VxWorks would be outright harmful.  */
9075     if (!htab->is_vxworks)
9076       {
9077         s = mips_elf_rel_dyn_section (info, FALSE);
9078         if (s != NULL
9079             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
9080           {
9081             reldyn_sorting_bfd = output_bfd;
9082
9083             if (ABI_64_P (output_bfd))
9084               qsort ((Elf64_External_Rel *) s->contents + 1,
9085                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
9086                      sort_dynamic_relocs_64);
9087             else
9088               qsort ((Elf32_External_Rel *) s->contents + 1,
9089                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
9090                      sort_dynamic_relocs);
9091           }
9092       }
9093   }
9094
9095   if (htab->is_vxworks && htab->splt->size > 0)
9096     {
9097       if (info->shared)
9098         mips_vxworks_finish_shared_plt (output_bfd, info);
9099       else
9100         mips_vxworks_finish_exec_plt (output_bfd, info);
9101     }
9102   return TRUE;
9103 }
9104
9105
9106 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
9107
9108 static void
9109 mips_set_isa_flags (bfd *abfd)
9110 {
9111   flagword val;
9112
9113   switch (bfd_get_mach (abfd))
9114     {
9115     default:
9116     case bfd_mach_mips3000:
9117       val = E_MIPS_ARCH_1;
9118       break;
9119
9120     case bfd_mach_mips3900:
9121       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
9122       break;
9123
9124     case bfd_mach_mips6000:
9125       val = E_MIPS_ARCH_2;
9126       break;
9127
9128     case bfd_mach_mips4000:
9129     case bfd_mach_mips4300:
9130     case bfd_mach_mips4400:
9131     case bfd_mach_mips4600:
9132       val = E_MIPS_ARCH_3;
9133       break;
9134
9135     case bfd_mach_mips4010:
9136       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
9137       break;
9138
9139     case bfd_mach_mips4100:
9140       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
9141       break;
9142
9143     case bfd_mach_mips4111:
9144       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
9145       break;
9146
9147     case bfd_mach_mips4120:
9148       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
9149       break;
9150
9151     case bfd_mach_mips4650:
9152       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
9153       break;
9154
9155     case bfd_mach_mips5400:
9156       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
9157       break;
9158
9159     case bfd_mach_mips5500:
9160       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
9161       break;
9162
9163     case bfd_mach_mips9000:
9164       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
9165       break;
9166
9167     case bfd_mach_mips5000:
9168     case bfd_mach_mips7000:
9169     case bfd_mach_mips8000:
9170     case bfd_mach_mips10000:
9171     case bfd_mach_mips12000:
9172       val = E_MIPS_ARCH_4;
9173       break;
9174
9175     case bfd_mach_mips5:
9176       val = E_MIPS_ARCH_5;
9177       break;
9178
9179     case bfd_mach_mips_sb1:
9180       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
9181       break;
9182
9183     case bfd_mach_mipsisa32:
9184       val = E_MIPS_ARCH_32;
9185       break;
9186
9187     case bfd_mach_mipsisa64:
9188       val = E_MIPS_ARCH_64;
9189       break;
9190
9191     case bfd_mach_mipsisa32r2:
9192       val = E_MIPS_ARCH_32R2;
9193       break;
9194
9195     case bfd_mach_mipsisa64r2:
9196       val = E_MIPS_ARCH_64R2;
9197       break;
9198     }
9199   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
9200   elf_elfheader (abfd)->e_flags |= val;
9201
9202 }
9203
9204
9205 /* The final processing done just before writing out a MIPS ELF object
9206    file.  This gets the MIPS architecture right based on the machine
9207    number.  This is used by both the 32-bit and the 64-bit ABI.  */
9208
9209 void
9210 _bfd_mips_elf_final_write_processing (bfd *abfd,
9211                                       bfd_boolean linker ATTRIBUTE_UNUSED)
9212 {
9213   unsigned int i;
9214   Elf_Internal_Shdr **hdrpp;
9215   const char *name;
9216   asection *sec;
9217
9218   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
9219      is nonzero.  This is for compatibility with old objects, which used
9220      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
9221   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
9222     mips_set_isa_flags (abfd);
9223
9224   /* Set the sh_info field for .gptab sections and other appropriate
9225      info for each special section.  */
9226   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
9227        i < elf_numsections (abfd);
9228        i++, hdrpp++)
9229     {
9230       switch ((*hdrpp)->sh_type)
9231         {
9232         case SHT_MIPS_MSYM:
9233         case SHT_MIPS_LIBLIST:
9234           sec = bfd_get_section_by_name (abfd, ".dynstr");
9235           if (sec != NULL)
9236             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
9237           break;
9238
9239         case SHT_MIPS_GPTAB:
9240           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
9241           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
9242           BFD_ASSERT (name != NULL
9243                       && CONST_STRNEQ (name, ".gptab."));
9244           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
9245           BFD_ASSERT (sec != NULL);
9246           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
9247           break;
9248
9249         case SHT_MIPS_CONTENT:
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, ".MIPS.content"));
9254           sec = bfd_get_section_by_name (abfd,
9255                                          name + sizeof ".MIPS.content" - 1);
9256           BFD_ASSERT (sec != NULL);
9257           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
9258           break;
9259
9260         case SHT_MIPS_SYMBOL_LIB:
9261           sec = bfd_get_section_by_name (abfd, ".dynsym");
9262           if (sec != NULL)
9263             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
9264           sec = bfd_get_section_by_name (abfd, ".liblist");
9265           if (sec != NULL)
9266             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
9267           break;
9268
9269         case SHT_MIPS_EVENTS:
9270           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
9271           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
9272           BFD_ASSERT (name != NULL);
9273           if (CONST_STRNEQ (name, ".MIPS.events"))
9274             sec = bfd_get_section_by_name (abfd,
9275                                            name + sizeof ".MIPS.events" - 1);
9276           else
9277             {
9278               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
9279               sec = bfd_get_section_by_name (abfd,
9280                                              (name
9281                                               + sizeof ".MIPS.post_rel" - 1));
9282             }
9283           BFD_ASSERT (sec != NULL);
9284           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
9285           break;
9286
9287         }
9288     }
9289 }
9290 \f
9291 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
9292    segments.  */
9293
9294 int
9295 _bfd_mips_elf_additional_program_headers (bfd *abfd,
9296                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
9297 {
9298   asection *s;
9299   int ret = 0;
9300
9301   /* See if we need a PT_MIPS_REGINFO segment.  */
9302   s = bfd_get_section_by_name (abfd, ".reginfo");
9303   if (s && (s->flags & SEC_LOAD))
9304     ++ret;
9305
9306   /* See if we need a PT_MIPS_OPTIONS segment.  */
9307   if (IRIX_COMPAT (abfd) == ict_irix6
9308       && bfd_get_section_by_name (abfd,
9309                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
9310     ++ret;
9311
9312   /* See if we need a PT_MIPS_RTPROC segment.  */
9313   if (IRIX_COMPAT (abfd) == ict_irix5
9314       && bfd_get_section_by_name (abfd, ".dynamic")
9315       && bfd_get_section_by_name (abfd, ".mdebug"))
9316     ++ret;
9317
9318   /* Allocate a PT_NULL header in dynamic objects.  See
9319      _bfd_mips_elf_modify_segment_map for details.  */
9320   if (!SGI_COMPAT (abfd)
9321       && bfd_get_section_by_name (abfd, ".dynamic"))
9322     ++ret;
9323
9324   return ret;
9325 }
9326
9327 /* Modify the segment map for an IRIX5 executable.  */
9328
9329 bfd_boolean
9330 _bfd_mips_elf_modify_segment_map (bfd *abfd,
9331                                   struct bfd_link_info *info ATTRIBUTE_UNUSED)
9332 {
9333   asection *s;
9334   struct elf_segment_map *m, **pm;
9335   bfd_size_type amt;
9336
9337   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
9338      segment.  */
9339   s = bfd_get_section_by_name (abfd, ".reginfo");
9340   if (s != NULL && (s->flags & SEC_LOAD) != 0)
9341     {
9342       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
9343         if (m->p_type == PT_MIPS_REGINFO)
9344           break;
9345       if (m == NULL)
9346         {
9347           amt = sizeof *m;
9348           m = bfd_zalloc (abfd, amt);
9349           if (m == NULL)
9350             return FALSE;
9351
9352           m->p_type = PT_MIPS_REGINFO;
9353           m->count = 1;
9354           m->sections[0] = s;
9355
9356           /* We want to put it after the PHDR and INTERP segments.  */
9357           pm = &elf_tdata (abfd)->segment_map;
9358           while (*pm != NULL
9359                  && ((*pm)->p_type == PT_PHDR
9360                      || (*pm)->p_type == PT_INTERP))
9361             pm = &(*pm)->next;
9362
9363           m->next = *pm;
9364           *pm = m;
9365         }
9366     }
9367
9368   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
9369      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
9370      PT_MIPS_OPTIONS segment immediately following the program header
9371      table.  */
9372   if (NEWABI_P (abfd)
9373       /* On non-IRIX6 new abi, we'll have already created a segment
9374          for this section, so don't create another.  I'm not sure this
9375          is not also the case for IRIX 6, but I can't test it right
9376          now.  */
9377       && IRIX_COMPAT (abfd) == ict_irix6)
9378     {
9379       for (s = abfd->sections; s; s = s->next)
9380         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
9381           break;
9382
9383       if (s)
9384         {
9385           struct elf_segment_map *options_segment;
9386
9387           pm = &elf_tdata (abfd)->segment_map;
9388           while (*pm != NULL
9389                  && ((*pm)->p_type == PT_PHDR
9390                      || (*pm)->p_type == PT_INTERP))
9391             pm = &(*pm)->next;
9392
9393           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
9394             {
9395               amt = sizeof (struct elf_segment_map);
9396               options_segment = bfd_zalloc (abfd, amt);
9397               options_segment->next = *pm;
9398               options_segment->p_type = PT_MIPS_OPTIONS;
9399               options_segment->p_flags = PF_R;
9400               options_segment->p_flags_valid = TRUE;
9401               options_segment->count = 1;
9402               options_segment->sections[0] = s;
9403               *pm = options_segment;
9404             }
9405         }
9406     }
9407   else
9408     {
9409       if (IRIX_COMPAT (abfd) == ict_irix5)
9410         {
9411           /* If there are .dynamic and .mdebug sections, we make a room
9412              for the RTPROC header.  FIXME: Rewrite without section names.  */
9413           if (bfd_get_section_by_name (abfd, ".interp") == NULL
9414               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
9415               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
9416             {
9417               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
9418                 if (m->p_type == PT_MIPS_RTPROC)
9419                   break;
9420               if (m == NULL)
9421                 {
9422                   amt = sizeof *m;
9423                   m = bfd_zalloc (abfd, amt);
9424                   if (m == NULL)
9425                     return FALSE;
9426
9427                   m->p_type = PT_MIPS_RTPROC;
9428
9429                   s = bfd_get_section_by_name (abfd, ".rtproc");
9430                   if (s == NULL)
9431                     {
9432                       m->count = 0;
9433                       m->p_flags = 0;
9434                       m->p_flags_valid = 1;
9435                     }
9436                   else
9437                     {
9438                       m->count = 1;
9439                       m->sections[0] = s;
9440                     }
9441
9442                   /* We want to put it after the DYNAMIC segment.  */
9443                   pm = &elf_tdata (abfd)->segment_map;
9444                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
9445                     pm = &(*pm)->next;
9446                   if (*pm != NULL)
9447                     pm = &(*pm)->next;
9448
9449                   m->next = *pm;
9450                   *pm = m;
9451                 }
9452             }
9453         }
9454       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
9455          .dynstr, .dynsym, and .hash sections, and everything in
9456          between.  */
9457       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
9458            pm = &(*pm)->next)
9459         if ((*pm)->p_type == PT_DYNAMIC)
9460           break;
9461       m = *pm;
9462       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
9463         {
9464           /* For a normal mips executable the permissions for the PT_DYNAMIC
9465              segment are read, write and execute. We do that here since
9466              the code in elf.c sets only the read permission. This matters
9467              sometimes for the dynamic linker.  */
9468           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
9469             {
9470               m->p_flags = PF_R | PF_W | PF_X;
9471               m->p_flags_valid = 1;
9472             }
9473         }
9474       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
9475          glibc's dynamic linker has traditionally derived the number of
9476          tags from the p_filesz field, and sometimes allocates stack
9477          arrays of that size.  An overly-big PT_DYNAMIC segment can
9478          be actively harmful in such cases.  Making PT_DYNAMIC contain
9479          other sections can also make life hard for the prelinker,
9480          which might move one of the other sections to a different
9481          PT_LOAD segment.  */
9482       if (SGI_COMPAT (abfd)
9483           && m != NULL
9484           && m->count == 1
9485           && strcmp (m->sections[0]->name, ".dynamic") == 0)
9486         {
9487           static const char *sec_names[] =
9488           {
9489             ".dynamic", ".dynstr", ".dynsym", ".hash"
9490           };
9491           bfd_vma low, high;
9492           unsigned int i, c;
9493           struct elf_segment_map *n;
9494
9495           low = ~(bfd_vma) 0;
9496           high = 0;
9497           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
9498             {
9499               s = bfd_get_section_by_name (abfd, sec_names[i]);
9500               if (s != NULL && (s->flags & SEC_LOAD) != 0)
9501                 {
9502                   bfd_size_type sz;
9503
9504                   if (low > s->vma)
9505                     low = s->vma;
9506                   sz = s->size;
9507                   if (high < s->vma + sz)
9508                     high = s->vma + sz;
9509                 }
9510             }
9511
9512           c = 0;
9513           for (s = abfd->sections; s != NULL; s = s->next)
9514             if ((s->flags & SEC_LOAD) != 0
9515                 && s->vma >= low
9516                 && s->vma + s->size <= high)
9517               ++c;
9518
9519           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
9520           n = bfd_zalloc (abfd, amt);
9521           if (n == NULL)
9522             return FALSE;
9523           *n = *m;
9524           n->count = c;
9525
9526           i = 0;
9527           for (s = abfd->sections; s != NULL; s = s->next)
9528             {
9529               if ((s->flags & SEC_LOAD) != 0
9530                   && s->vma >= low
9531                   && s->vma + s->size <= high)
9532                 {
9533                   n->sections[i] = s;
9534                   ++i;
9535                 }
9536             }
9537
9538           *pm = n;
9539         }
9540     }
9541
9542   /* Allocate a spare program header in dynamic objects so that tools
9543      like the prelinker can add an extra PT_LOAD entry.
9544
9545      If the prelinker needs to make room for a new PT_LOAD entry, its
9546      standard procedure is to move the first (read-only) sections into
9547      the new (writable) segment.  However, the MIPS ABI requires
9548      .dynamic to be in a read-only segment, and the section will often
9549      start within sizeof (ElfNN_Phdr) bytes of the last program header.
9550
9551      Although the prelinker could in principle move .dynamic to a
9552      writable segment, it seems better to allocate a spare program
9553      header instead, and avoid the need to move any sections.
9554      There is a long tradition of allocating spare dynamic tags,
9555      so allocating a spare program header seems like a natural
9556      extension.  */
9557   if (!SGI_COMPAT (abfd)
9558       && bfd_get_section_by_name (abfd, ".dynamic"))
9559     {
9560       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
9561         if ((*pm)->p_type == PT_NULL)
9562           break;
9563       if (*pm == NULL)
9564         {
9565           m = bfd_zalloc (abfd, sizeof (*m));
9566           if (m == NULL)
9567             return FALSE;
9568
9569           m->p_type = PT_NULL;
9570           *pm = m;
9571         }
9572     }
9573
9574   return TRUE;
9575 }
9576 \f
9577 /* Return the section that should be marked against GC for a given
9578    relocation.  */
9579
9580 asection *
9581 _bfd_mips_elf_gc_mark_hook (asection *sec,
9582                             struct bfd_link_info *info,
9583                             Elf_Internal_Rela *rel,
9584                             struct elf_link_hash_entry *h,
9585                             Elf_Internal_Sym *sym)
9586 {
9587   /* ??? Do mips16 stub sections need to be handled special?  */
9588
9589   if (h != NULL)
9590     switch (ELF_R_TYPE (sec->owner, rel->r_info))
9591       {
9592       case R_MIPS_GNU_VTINHERIT:
9593       case R_MIPS_GNU_VTENTRY:
9594         return NULL;
9595       }
9596
9597   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
9598 }
9599
9600 /* Update the got entry reference counts for the section being removed.  */
9601
9602 bfd_boolean
9603 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
9604                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
9605                              asection *sec ATTRIBUTE_UNUSED,
9606                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
9607 {
9608 #if 0
9609   Elf_Internal_Shdr *symtab_hdr;
9610   struct elf_link_hash_entry **sym_hashes;
9611   bfd_signed_vma *local_got_refcounts;
9612   const Elf_Internal_Rela *rel, *relend;
9613   unsigned long r_symndx;
9614   struct elf_link_hash_entry *h;
9615
9616   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
9617   sym_hashes = elf_sym_hashes (abfd);
9618   local_got_refcounts = elf_local_got_refcounts (abfd);
9619
9620   relend = relocs + sec->reloc_count;
9621   for (rel = relocs; rel < relend; rel++)
9622     switch (ELF_R_TYPE (abfd, rel->r_info))
9623       {
9624       case R_MIPS_GOT16:
9625       case R_MIPS_CALL16:
9626       case R_MIPS_CALL_HI16:
9627       case R_MIPS_CALL_LO16:
9628       case R_MIPS_GOT_HI16:
9629       case R_MIPS_GOT_LO16:
9630       case R_MIPS_GOT_DISP:
9631       case R_MIPS_GOT_PAGE:
9632       case R_MIPS_GOT_OFST:
9633         /* ??? It would seem that the existing MIPS code does no sort
9634            of reference counting or whatnot on its GOT and PLT entries,
9635            so it is not possible to garbage collect them at this time.  */
9636         break;
9637
9638       default:
9639         break;
9640       }
9641 #endif
9642
9643   return TRUE;
9644 }
9645 \f
9646 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
9647    hiding the old indirect symbol.  Process additional relocation
9648    information.  Also called for weakdefs, in which case we just let
9649    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
9650
9651 void
9652 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
9653                                     struct elf_link_hash_entry *dir,
9654                                     struct elf_link_hash_entry *ind)
9655 {
9656   struct mips_elf_link_hash_entry *dirmips, *indmips;
9657
9658   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
9659
9660   if (ind->root.type != bfd_link_hash_indirect)
9661     return;
9662
9663   dirmips = (struct mips_elf_link_hash_entry *) dir;
9664   indmips = (struct mips_elf_link_hash_entry *) ind;
9665   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
9666   if (indmips->readonly_reloc)
9667     dirmips->readonly_reloc = TRUE;
9668   if (indmips->no_fn_stub)
9669     dirmips->no_fn_stub = TRUE;
9670
9671   if (dirmips->tls_type == 0)
9672     dirmips->tls_type = indmips->tls_type;
9673 }
9674
9675 void
9676 _bfd_mips_elf_hide_symbol (struct bfd_link_info *info,
9677                            struct elf_link_hash_entry *entry,
9678                            bfd_boolean force_local)
9679 {
9680   bfd *dynobj;
9681   asection *got;
9682   struct mips_got_info *g;
9683   struct mips_elf_link_hash_entry *h;
9684   struct mips_elf_link_hash_table *htab;
9685
9686   h = (struct mips_elf_link_hash_entry *) entry;
9687   if (h->forced_local)
9688     return;
9689   h->forced_local = force_local;
9690
9691   dynobj = elf_hash_table (info)->dynobj;
9692   htab = mips_elf_hash_table (info);
9693   if (dynobj != NULL && force_local && h->root.type != STT_TLS
9694       && (got = mips_elf_got_section (dynobj, TRUE)) != NULL
9695       && (g = mips_elf_section_data (got)->u.got_info) != NULL)
9696     {
9697       if (g->next)
9698         {
9699           struct mips_got_entry e;
9700           struct mips_got_info *gg = g;
9701
9702           /* Since we're turning what used to be a global symbol into a
9703              local one, bump up the number of local entries of each GOT
9704              that had an entry for it.  This will automatically decrease
9705              the number of global entries, since global_gotno is actually
9706              the upper limit of global entries.  */
9707           e.abfd = dynobj;
9708           e.symndx = -1;
9709           e.d.h = h;
9710           e.tls_type = 0;
9711
9712           for (g = g->next; g != gg; g = g->next)
9713             if (htab_find (g->got_entries, &e))
9714               {
9715                 BFD_ASSERT (g->global_gotno > 0);
9716                 g->local_gotno++;
9717                 g->global_gotno--;
9718               }
9719
9720           /* If this was a global symbol forced into the primary GOT, we
9721              no longer need an entry for it.  We can't release the entry
9722              at this point, but we must at least stop counting it as one
9723              of the symbols that required a forced got entry.  */
9724           if (h->root.got.offset == 2)
9725             {
9726               BFD_ASSERT (gg->assigned_gotno > 0);
9727               gg->assigned_gotno--;
9728             }
9729         }
9730       else if (h->root.got.offset == 1)
9731         {
9732           /* check_relocs didn't know that this symbol would be
9733              forced-local, so add an extra local got entry.  */
9734           g->local_gotno++;
9735           if (htab->computed_got_sizes)
9736             {
9737               /* We'll have treated this symbol as global rather
9738                  than local.  */
9739               BFD_ASSERT (g->global_gotno > 0);
9740               g->global_gotno--;
9741             }
9742         }
9743       else if (htab->is_vxworks && h->root.needs_plt)
9744         {
9745           /* check_relocs didn't know that this symbol would be
9746              forced-local, so add an extra local got entry.  */
9747           g->local_gotno++;
9748           if (htab->computed_got_sizes)
9749             /* The symbol is only used in call relocations, so we'll
9750                have assumed it only needs a .got.plt entry.  Increase
9751                the size of .got accordingly.  */
9752             got->size += MIPS_ELF_GOT_SIZE (dynobj);
9753         }
9754     }
9755
9756   _bfd_elf_link_hash_hide_symbol (info, &h->root, force_local);
9757 }
9758 \f
9759 #define PDR_SIZE 32
9760
9761 bfd_boolean
9762 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
9763                             struct bfd_link_info *info)
9764 {
9765   asection *o;
9766   bfd_boolean ret = FALSE;
9767   unsigned char *tdata;
9768   size_t i, skip;
9769
9770   o = bfd_get_section_by_name (abfd, ".pdr");
9771   if (! o)
9772     return FALSE;
9773   if (o->size == 0)
9774     return FALSE;
9775   if (o->size % PDR_SIZE != 0)
9776     return FALSE;
9777   if (o->output_section != NULL
9778       && bfd_is_abs_section (o->output_section))
9779     return FALSE;
9780
9781   tdata = bfd_zmalloc (o->size / PDR_SIZE);
9782   if (! tdata)
9783     return FALSE;
9784
9785   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
9786                                             info->keep_memory);
9787   if (!cookie->rels)
9788     {
9789       free (tdata);
9790       return FALSE;
9791     }
9792
9793   cookie->rel = cookie->rels;
9794   cookie->relend = cookie->rels + o->reloc_count;
9795
9796   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
9797     {
9798       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
9799         {
9800           tdata[i] = 1;
9801           skip ++;
9802         }
9803     }
9804
9805   if (skip != 0)
9806     {
9807       mips_elf_section_data (o)->u.tdata = tdata;
9808       o->size -= skip * PDR_SIZE;
9809       ret = TRUE;
9810     }
9811   else
9812     free (tdata);
9813
9814   if (! info->keep_memory)
9815     free (cookie->rels);
9816
9817   return ret;
9818 }
9819
9820 bfd_boolean
9821 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
9822 {
9823   if (strcmp (sec->name, ".pdr") == 0)
9824     return TRUE;
9825   return FALSE;
9826 }
9827
9828 bfd_boolean
9829 _bfd_mips_elf_write_section (bfd *output_bfd,
9830                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
9831                              asection *sec, bfd_byte *contents)
9832 {
9833   bfd_byte *to, *from, *end;
9834   int i;
9835
9836   if (strcmp (sec->name, ".pdr") != 0)
9837     return FALSE;
9838
9839   if (mips_elf_section_data (sec)->u.tdata == NULL)
9840     return FALSE;
9841
9842   to = contents;
9843   end = contents + sec->size;
9844   for (from = contents, i = 0;
9845        from < end;
9846        from += PDR_SIZE, i++)
9847     {
9848       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
9849         continue;
9850       if (to != from)
9851         memcpy (to, from, PDR_SIZE);
9852       to += PDR_SIZE;
9853     }
9854   bfd_set_section_contents (output_bfd, sec->output_section, contents,
9855                             sec->output_offset, sec->size);
9856   return TRUE;
9857 }
9858 \f
9859 /* MIPS ELF uses a special find_nearest_line routine in order the
9860    handle the ECOFF debugging information.  */
9861
9862 struct mips_elf_find_line
9863 {
9864   struct ecoff_debug_info d;
9865   struct ecoff_find_line i;
9866 };
9867
9868 bfd_boolean
9869 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
9870                                  asymbol **symbols, bfd_vma offset,
9871                                  const char **filename_ptr,
9872                                  const char **functionname_ptr,
9873                                  unsigned int *line_ptr)
9874 {
9875   asection *msec;
9876
9877   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
9878                                      filename_ptr, functionname_ptr,
9879                                      line_ptr))
9880     return TRUE;
9881
9882   if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
9883                                      filename_ptr, functionname_ptr,
9884                                      line_ptr, ABI_64_P (abfd) ? 8 : 0,
9885                                      &elf_tdata (abfd)->dwarf2_find_line_info))
9886     return TRUE;
9887
9888   msec = bfd_get_section_by_name (abfd, ".mdebug");
9889   if (msec != NULL)
9890     {
9891       flagword origflags;
9892       struct mips_elf_find_line *fi;
9893       const struct ecoff_debug_swap * const swap =
9894         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
9895
9896       /* If we are called during a link, mips_elf_final_link may have
9897          cleared the SEC_HAS_CONTENTS field.  We force it back on here
9898          if appropriate (which it normally will be).  */
9899       origflags = msec->flags;
9900       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
9901         msec->flags |= SEC_HAS_CONTENTS;
9902
9903       fi = elf_tdata (abfd)->find_line_info;
9904       if (fi == NULL)
9905         {
9906           bfd_size_type external_fdr_size;
9907           char *fraw_src;
9908           char *fraw_end;
9909           struct fdr *fdr_ptr;
9910           bfd_size_type amt = sizeof (struct mips_elf_find_line);
9911
9912           fi = bfd_zalloc (abfd, amt);
9913           if (fi == NULL)
9914             {
9915               msec->flags = origflags;
9916               return FALSE;
9917             }
9918
9919           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
9920             {
9921               msec->flags = origflags;
9922               return FALSE;
9923             }
9924
9925           /* Swap in the FDR information.  */
9926           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
9927           fi->d.fdr = bfd_alloc (abfd, amt);
9928           if (fi->d.fdr == NULL)
9929             {
9930               msec->flags = origflags;
9931               return FALSE;
9932             }
9933           external_fdr_size = swap->external_fdr_size;
9934           fdr_ptr = fi->d.fdr;
9935           fraw_src = (char *) fi->d.external_fdr;
9936           fraw_end = (fraw_src
9937                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
9938           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
9939             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
9940
9941           elf_tdata (abfd)->find_line_info = fi;
9942
9943           /* Note that we don't bother to ever free this information.
9944              find_nearest_line is either called all the time, as in
9945              objdump -l, so the information should be saved, or it is
9946              rarely called, as in ld error messages, so the memory
9947              wasted is unimportant.  Still, it would probably be a
9948              good idea for free_cached_info to throw it away.  */
9949         }
9950
9951       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
9952                                   &fi->i, filename_ptr, functionname_ptr,
9953                                   line_ptr))
9954         {
9955           msec->flags = origflags;
9956           return TRUE;
9957         }
9958
9959       msec->flags = origflags;
9960     }
9961
9962   /* Fall back on the generic ELF find_nearest_line routine.  */
9963
9964   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
9965                                      filename_ptr, functionname_ptr,
9966                                      line_ptr);
9967 }
9968
9969 bfd_boolean
9970 _bfd_mips_elf_find_inliner_info (bfd *abfd,
9971                                  const char **filename_ptr,
9972                                  const char **functionname_ptr,
9973                                  unsigned int *line_ptr)
9974 {
9975   bfd_boolean found;
9976   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
9977                                          functionname_ptr, line_ptr,
9978                                          & elf_tdata (abfd)->dwarf2_find_line_info);
9979   return found;
9980 }
9981
9982 \f
9983 /* When are writing out the .options or .MIPS.options section,
9984    remember the bytes we are writing out, so that we can install the
9985    GP value in the section_processing routine.  */
9986
9987 bfd_boolean
9988 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
9989                                     const void *location,
9990                                     file_ptr offset, bfd_size_type count)
9991 {
9992   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
9993     {
9994       bfd_byte *c;
9995
9996       if (elf_section_data (section) == NULL)
9997         {
9998           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
9999           section->used_by_bfd = bfd_zalloc (abfd, amt);
10000           if (elf_section_data (section) == NULL)
10001             return FALSE;
10002         }
10003       c = mips_elf_section_data (section)->u.tdata;
10004       if (c == NULL)
10005         {
10006           c = bfd_zalloc (abfd, section->size);
10007           if (c == NULL)
10008             return FALSE;
10009           mips_elf_section_data (section)->u.tdata = c;
10010         }
10011
10012       memcpy (c + offset, location, count);
10013     }
10014
10015   return _bfd_elf_set_section_contents (abfd, section, location, offset,
10016                                         count);
10017 }
10018
10019 /* This is almost identical to bfd_generic_get_... except that some
10020    MIPS relocations need to be handled specially.  Sigh.  */
10021
10022 bfd_byte *
10023 _bfd_elf_mips_get_relocated_section_contents
10024   (bfd *abfd,
10025    struct bfd_link_info *link_info,
10026    struct bfd_link_order *link_order,
10027    bfd_byte *data,
10028    bfd_boolean relocatable,
10029    asymbol **symbols)
10030 {
10031   /* Get enough memory to hold the stuff */
10032   bfd *input_bfd = link_order->u.indirect.section->owner;
10033   asection *input_section = link_order->u.indirect.section;
10034   bfd_size_type sz;
10035
10036   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
10037   arelent **reloc_vector = NULL;
10038   long reloc_count;
10039
10040   if (reloc_size < 0)
10041     goto error_return;
10042
10043   reloc_vector = bfd_malloc (reloc_size);
10044   if (reloc_vector == NULL && reloc_size != 0)
10045     goto error_return;
10046
10047   /* read in the section */
10048   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
10049   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
10050     goto error_return;
10051
10052   reloc_count = bfd_canonicalize_reloc (input_bfd,
10053                                         input_section,
10054                                         reloc_vector,
10055                                         symbols);
10056   if (reloc_count < 0)
10057     goto error_return;
10058
10059   if (reloc_count > 0)
10060     {
10061       arelent **parent;
10062       /* for mips */
10063       int gp_found;
10064       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
10065
10066       {
10067         struct bfd_hash_entry *h;
10068         struct bfd_link_hash_entry *lh;
10069         /* Skip all this stuff if we aren't mixing formats.  */
10070         if (abfd && input_bfd
10071             && abfd->xvec == input_bfd->xvec)
10072           lh = 0;
10073         else
10074           {
10075             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
10076             lh = (struct bfd_link_hash_entry *) h;
10077           }
10078       lookup:
10079         if (lh)
10080           {
10081             switch (lh->type)
10082               {
10083               case bfd_link_hash_undefined:
10084               case bfd_link_hash_undefweak:
10085               case bfd_link_hash_common:
10086                 gp_found = 0;
10087                 break;
10088               case bfd_link_hash_defined:
10089               case bfd_link_hash_defweak:
10090                 gp_found = 1;
10091                 gp = lh->u.def.value;
10092                 break;
10093               case bfd_link_hash_indirect:
10094               case bfd_link_hash_warning:
10095                 lh = lh->u.i.link;
10096                 /* @@FIXME  ignoring warning for now */
10097                 goto lookup;
10098               case bfd_link_hash_new:
10099               default:
10100                 abort ();
10101               }
10102           }
10103         else
10104           gp_found = 0;
10105       }
10106       /* end mips */
10107       for (parent = reloc_vector; *parent != NULL; parent++)
10108         {
10109           char *error_message = NULL;
10110           bfd_reloc_status_type r;
10111
10112           /* Specific to MIPS: Deal with relocation types that require
10113              knowing the gp of the output bfd.  */
10114           asymbol *sym = *(*parent)->sym_ptr_ptr;
10115
10116           /* If we've managed to find the gp and have a special
10117              function for the relocation then go ahead, else default
10118              to the generic handling.  */
10119           if (gp_found
10120               && (*parent)->howto->special_function
10121               == _bfd_mips_elf32_gprel16_reloc)
10122             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
10123                                                input_section, relocatable,
10124                                                data, gp);
10125           else
10126             r = bfd_perform_relocation (input_bfd, *parent, data,
10127                                         input_section,
10128                                         relocatable ? abfd : NULL,
10129                                         &error_message);
10130
10131           if (relocatable)
10132             {
10133               asection *os = input_section->output_section;
10134
10135               /* A partial link, so keep the relocs */
10136               os->orelocation[os->reloc_count] = *parent;
10137               os->reloc_count++;
10138             }
10139
10140           if (r != bfd_reloc_ok)
10141             {
10142               switch (r)
10143                 {
10144                 case bfd_reloc_undefined:
10145                   if (!((*link_info->callbacks->undefined_symbol)
10146                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
10147                          input_bfd, input_section, (*parent)->address, TRUE)))
10148                     goto error_return;
10149                   break;
10150                 case bfd_reloc_dangerous:
10151                   BFD_ASSERT (error_message != NULL);
10152                   if (!((*link_info->callbacks->reloc_dangerous)
10153                         (link_info, error_message, input_bfd, input_section,
10154                          (*parent)->address)))
10155                     goto error_return;
10156                   break;
10157                 case bfd_reloc_overflow:
10158                   if (!((*link_info->callbacks->reloc_overflow)
10159                         (link_info, NULL,
10160                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
10161                          (*parent)->howto->name, (*parent)->addend,
10162                          input_bfd, input_section, (*parent)->address)))
10163                     goto error_return;
10164                   break;
10165                 case bfd_reloc_outofrange:
10166                 default:
10167                   abort ();
10168                   break;
10169                 }
10170
10171             }
10172         }
10173     }
10174   if (reloc_vector != NULL)
10175     free (reloc_vector);
10176   return data;
10177
10178 error_return:
10179   if (reloc_vector != NULL)
10180     free (reloc_vector);
10181   return NULL;
10182 }
10183 \f
10184 /* Create a MIPS ELF linker hash table.  */
10185
10186 struct bfd_link_hash_table *
10187 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
10188 {
10189   struct mips_elf_link_hash_table *ret;
10190   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
10191
10192   ret = bfd_malloc (amt);
10193   if (ret == NULL)
10194     return NULL;
10195
10196   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
10197                                       mips_elf_link_hash_newfunc,
10198                                       sizeof (struct mips_elf_link_hash_entry)))
10199     {
10200       free (ret);
10201       return NULL;
10202     }
10203
10204 #if 0
10205   /* We no longer use this.  */
10206   for (i = 0; i < SIZEOF_MIPS_DYNSYM_SECNAMES; i++)
10207     ret->dynsym_sec_strindex[i] = (bfd_size_type) -1;
10208 #endif
10209   ret->procedure_count = 0;
10210   ret->compact_rel_size = 0;
10211   ret->use_rld_obj_head = FALSE;
10212   ret->rld_value = 0;
10213   ret->mips16_stubs_seen = FALSE;
10214   ret->computed_got_sizes = FALSE;
10215   ret->is_vxworks = FALSE;
10216   ret->small_data_overflow_reported = FALSE;
10217   ret->srelbss = NULL;
10218   ret->sdynbss = NULL;
10219   ret->srelplt = NULL;
10220   ret->srelplt2 = NULL;
10221   ret->sgotplt = NULL;
10222   ret->splt = NULL;
10223   ret->plt_header_size = 0;
10224   ret->plt_entry_size = 0;
10225   ret->function_stub_size = 0;
10226
10227   return &ret->root.root;
10228 }
10229
10230 /* Likewise, but indicate that the target is VxWorks.  */
10231
10232 struct bfd_link_hash_table *
10233 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
10234 {
10235   struct bfd_link_hash_table *ret;
10236
10237   ret = _bfd_mips_elf_link_hash_table_create (abfd);
10238   if (ret)
10239     {
10240       struct mips_elf_link_hash_table *htab;
10241
10242       htab = (struct mips_elf_link_hash_table *) ret;
10243       htab->is_vxworks = 1;
10244     }
10245   return ret;
10246 }
10247 \f
10248 /* We need to use a special link routine to handle the .reginfo and
10249    the .mdebug sections.  We need to merge all instances of these
10250    sections together, not write them all out sequentially.  */
10251
10252 bfd_boolean
10253 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
10254 {
10255   asection *o;
10256   struct bfd_link_order *p;
10257   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
10258   asection *rtproc_sec;
10259   Elf32_RegInfo reginfo;
10260   struct ecoff_debug_info debug;
10261   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10262   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
10263   HDRR *symhdr = &debug.symbolic_header;
10264   void *mdebug_handle = NULL;
10265   asection *s;
10266   EXTR esym;
10267   unsigned int i;
10268   bfd_size_type amt;
10269   struct mips_elf_link_hash_table *htab;
10270
10271   static const char * const secname[] =
10272   {
10273     ".text", ".init", ".fini", ".data",
10274     ".rodata", ".sdata", ".sbss", ".bss"
10275   };
10276   static const int sc[] =
10277   {
10278     scText, scInit, scFini, scData,
10279     scRData, scSData, scSBss, scBss
10280   };
10281
10282   /* We'd carefully arranged the dynamic symbol indices, and then the
10283      generic size_dynamic_sections renumbered them out from under us.
10284      Rather than trying somehow to prevent the renumbering, just do
10285      the sort again.  */
10286   htab = mips_elf_hash_table (info);
10287   if (elf_hash_table (info)->dynamic_sections_created)
10288     {
10289       bfd *dynobj;
10290       asection *got;
10291       struct mips_got_info *g;
10292       bfd_size_type dynsecsymcount;
10293
10294       /* When we resort, we must tell mips_elf_sort_hash_table what
10295          the lowest index it may use is.  That's the number of section
10296          symbols we're going to add.  The generic ELF linker only
10297          adds these symbols when building a shared object.  Note that
10298          we count the sections after (possibly) removing the .options
10299          section above.  */
10300
10301       dynsecsymcount = count_section_dynsyms (abfd, info);
10302       if (! mips_elf_sort_hash_table (info, dynsecsymcount + 1))
10303         return FALSE;
10304
10305       /* Make sure we didn't grow the global .got region.  */
10306       dynobj = elf_hash_table (info)->dynobj;
10307       got = mips_elf_got_section (dynobj, FALSE);
10308       g = mips_elf_section_data (got)->u.got_info;
10309
10310       if (g->global_gotsym != NULL)
10311         BFD_ASSERT ((elf_hash_table (info)->dynsymcount
10312                      - g->global_gotsym->dynindx)
10313                     <= g->global_gotno);
10314     }
10315
10316   /* Get a value for the GP register.  */
10317   if (elf_gp (abfd) == 0)
10318     {
10319       struct bfd_link_hash_entry *h;
10320
10321       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
10322       if (h != NULL && h->type == bfd_link_hash_defined)
10323         elf_gp (abfd) = (h->u.def.value
10324                          + h->u.def.section->output_section->vma
10325                          + h->u.def.section->output_offset);
10326       else if (htab->is_vxworks
10327                && (h = bfd_link_hash_lookup (info->hash,
10328                                              "_GLOBAL_OFFSET_TABLE_",
10329                                              FALSE, FALSE, TRUE))
10330                && h->type == bfd_link_hash_defined)
10331         elf_gp (abfd) = (h->u.def.section->output_section->vma
10332                          + h->u.def.section->output_offset
10333                          + h->u.def.value);
10334       else if (info->relocatable)
10335         {
10336           bfd_vma lo = MINUS_ONE;
10337
10338           /* Find the GP-relative section with the lowest offset.  */
10339           for (o = abfd->sections; o != NULL; o = o->next)
10340             if (o->vma < lo
10341                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
10342               lo = o->vma;
10343
10344           /* And calculate GP relative to that.  */
10345           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
10346         }
10347       else
10348         {
10349           /* If the relocate_section function needs to do a reloc
10350              involving the GP value, it should make a reloc_dangerous
10351              callback to warn that GP is not defined.  */
10352         }
10353     }
10354
10355   /* Go through the sections and collect the .reginfo and .mdebug
10356      information.  */
10357   reginfo_sec = NULL;
10358   mdebug_sec = NULL;
10359   gptab_data_sec = NULL;
10360   gptab_bss_sec = NULL;
10361   for (o = abfd->sections; o != NULL; o = o->next)
10362     {
10363       if (strcmp (o->name, ".reginfo") == 0)
10364         {
10365           memset (&reginfo, 0, sizeof reginfo);
10366
10367           /* We have found the .reginfo section in the output file.
10368              Look through all the link_orders comprising it and merge
10369              the information together.  */
10370           for (p = o->map_head.link_order; p != NULL; p = p->next)
10371             {
10372               asection *input_section;
10373               bfd *input_bfd;
10374               Elf32_External_RegInfo ext;
10375               Elf32_RegInfo sub;
10376
10377               if (p->type != bfd_indirect_link_order)
10378                 {
10379                   if (p->type == bfd_data_link_order)
10380                     continue;
10381                   abort ();
10382                 }
10383
10384               input_section = p->u.indirect.section;
10385               input_bfd = input_section->owner;
10386
10387               if (! bfd_get_section_contents (input_bfd, input_section,
10388                                               &ext, 0, sizeof ext))
10389                 return FALSE;
10390
10391               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
10392
10393               reginfo.ri_gprmask |= sub.ri_gprmask;
10394               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
10395               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
10396               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
10397               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
10398
10399               /* ri_gp_value is set by the function
10400                  mips_elf32_section_processing when the section is
10401                  finally written out.  */
10402
10403               /* Hack: reset the SEC_HAS_CONTENTS flag so that
10404                  elf_link_input_bfd ignores this section.  */
10405               input_section->flags &= ~SEC_HAS_CONTENTS;
10406             }
10407
10408           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
10409           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
10410
10411           /* Skip this section later on (I don't think this currently
10412              matters, but someday it might).  */
10413           o->map_head.link_order = NULL;
10414
10415           reginfo_sec = o;
10416         }
10417
10418       if (strcmp (o->name, ".mdebug") == 0)
10419         {
10420           struct extsym_info einfo;
10421           bfd_vma last;
10422
10423           /* We have found the .mdebug section in the output file.
10424              Look through all the link_orders comprising it and merge
10425              the information together.  */
10426           symhdr->magic = swap->sym_magic;
10427           /* FIXME: What should the version stamp be?  */
10428           symhdr->vstamp = 0;
10429           symhdr->ilineMax = 0;
10430           symhdr->cbLine = 0;
10431           symhdr->idnMax = 0;
10432           symhdr->ipdMax = 0;
10433           symhdr->isymMax = 0;
10434           symhdr->ioptMax = 0;
10435           symhdr->iauxMax = 0;
10436           symhdr->issMax = 0;
10437           symhdr->issExtMax = 0;
10438           symhdr->ifdMax = 0;
10439           symhdr->crfd = 0;
10440           symhdr->iextMax = 0;
10441
10442           /* We accumulate the debugging information itself in the
10443              debug_info structure.  */
10444           debug.line = NULL;
10445           debug.external_dnr = NULL;
10446           debug.external_pdr = NULL;
10447           debug.external_sym = NULL;
10448           debug.external_opt = NULL;
10449           debug.external_aux = NULL;
10450           debug.ss = NULL;
10451           debug.ssext = debug.ssext_end = NULL;
10452           debug.external_fdr = NULL;
10453           debug.external_rfd = NULL;
10454           debug.external_ext = debug.external_ext_end = NULL;
10455
10456           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
10457           if (mdebug_handle == NULL)
10458             return FALSE;
10459
10460           esym.jmptbl = 0;
10461           esym.cobol_main = 0;
10462           esym.weakext = 0;
10463           esym.reserved = 0;
10464           esym.ifd = ifdNil;
10465           esym.asym.iss = issNil;
10466           esym.asym.st = stLocal;
10467           esym.asym.reserved = 0;
10468           esym.asym.index = indexNil;
10469           last = 0;
10470           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
10471             {
10472               esym.asym.sc = sc[i];
10473               s = bfd_get_section_by_name (abfd, secname[i]);
10474               if (s != NULL)
10475                 {
10476                   esym.asym.value = s->vma;
10477                   last = s->vma + s->size;
10478                 }
10479               else
10480                 esym.asym.value = last;
10481               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
10482                                                  secname[i], &esym))
10483                 return FALSE;
10484             }
10485
10486           for (p = o->map_head.link_order; p != NULL; p = p->next)
10487             {
10488               asection *input_section;
10489               bfd *input_bfd;
10490               const struct ecoff_debug_swap *input_swap;
10491               struct ecoff_debug_info input_debug;
10492               char *eraw_src;
10493               char *eraw_end;
10494
10495               if (p->type != bfd_indirect_link_order)
10496                 {
10497                   if (p->type == bfd_data_link_order)
10498                     continue;
10499                   abort ();
10500                 }
10501
10502               input_section = p->u.indirect.section;
10503               input_bfd = input_section->owner;
10504
10505               if (bfd_get_flavour (input_bfd) != bfd_target_elf_flavour
10506                   || (get_elf_backend_data (input_bfd)
10507                       ->elf_backend_ecoff_debug_swap) == NULL)
10508                 {
10509                   /* I don't know what a non MIPS ELF bfd would be
10510                      doing with a .mdebug section, but I don't really
10511                      want to deal with it.  */
10512                   continue;
10513                 }
10514
10515               input_swap = (get_elf_backend_data (input_bfd)
10516                             ->elf_backend_ecoff_debug_swap);
10517
10518               BFD_ASSERT (p->size == input_section->size);
10519
10520               /* The ECOFF linking code expects that we have already
10521                  read in the debugging information and set up an
10522                  ecoff_debug_info structure, so we do that now.  */
10523               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
10524                                                    &input_debug))
10525                 return FALSE;
10526
10527               if (! (bfd_ecoff_debug_accumulate
10528                      (mdebug_handle, abfd, &debug, swap, input_bfd,
10529                       &input_debug, input_swap, info)))
10530                 return FALSE;
10531
10532               /* Loop through the external symbols.  For each one with
10533                  interesting information, try to find the symbol in
10534                  the linker global hash table and save the information
10535                  for the output external symbols.  */
10536               eraw_src = input_debug.external_ext;
10537               eraw_end = (eraw_src
10538                           + (input_debug.symbolic_header.iextMax
10539                              * input_swap->external_ext_size));
10540               for (;
10541                    eraw_src < eraw_end;
10542                    eraw_src += input_swap->external_ext_size)
10543                 {
10544                   EXTR ext;
10545                   const char *name;
10546                   struct mips_elf_link_hash_entry *h;
10547
10548                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
10549                   if (ext.asym.sc == scNil
10550                       || ext.asym.sc == scUndefined
10551                       || ext.asym.sc == scSUndefined)
10552                     continue;
10553
10554                   name = input_debug.ssext + ext.asym.iss;
10555                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
10556                                                  name, FALSE, FALSE, TRUE);
10557                   if (h == NULL || h->esym.ifd != -2)
10558                     continue;
10559
10560                   if (ext.ifd != -1)
10561                     {
10562                       BFD_ASSERT (ext.ifd
10563                                   < input_debug.symbolic_header.ifdMax);
10564                       ext.ifd = input_debug.ifdmap[ext.ifd];
10565                     }
10566
10567                   h->esym = ext;
10568                 }
10569
10570               /* Free up the information we just read.  */
10571               free (input_debug.line);
10572               free (input_debug.external_dnr);
10573               free (input_debug.external_pdr);
10574               free (input_debug.external_sym);
10575               free (input_debug.external_opt);
10576               free (input_debug.external_aux);
10577               free (input_debug.ss);
10578               free (input_debug.ssext);
10579               free (input_debug.external_fdr);
10580               free (input_debug.external_rfd);
10581               free (input_debug.external_ext);
10582
10583               /* Hack: reset the SEC_HAS_CONTENTS flag so that
10584                  elf_link_input_bfd ignores this section.  */
10585               input_section->flags &= ~SEC_HAS_CONTENTS;
10586             }
10587
10588           if (SGI_COMPAT (abfd) && info->shared)
10589             {
10590               /* Create .rtproc section.  */
10591               rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
10592               if (rtproc_sec == NULL)
10593                 {
10594                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
10595                                     | SEC_LINKER_CREATED | SEC_READONLY);
10596
10597                   rtproc_sec = bfd_make_section_with_flags (abfd,
10598                                                             ".rtproc",
10599                                                             flags);
10600                   if (rtproc_sec == NULL
10601                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
10602                     return FALSE;
10603                 }
10604
10605               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
10606                                                      info, rtproc_sec,
10607                                                      &debug))
10608                 return FALSE;
10609             }
10610
10611           /* Build the external symbol information.  */
10612           einfo.abfd = abfd;
10613           einfo.info = info;
10614           einfo.debug = &debug;
10615           einfo.swap = swap;
10616           einfo.failed = FALSE;
10617           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
10618                                        mips_elf_output_extsym, &einfo);
10619           if (einfo.failed)
10620             return FALSE;
10621
10622           /* Set the size of the .mdebug section.  */
10623           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
10624
10625           /* Skip this section later on (I don't think this currently
10626              matters, but someday it might).  */
10627           o->map_head.link_order = NULL;
10628
10629           mdebug_sec = o;
10630         }
10631
10632       if (CONST_STRNEQ (o->name, ".gptab."))
10633         {
10634           const char *subname;
10635           unsigned int c;
10636           Elf32_gptab *tab;
10637           Elf32_External_gptab *ext_tab;
10638           unsigned int j;
10639
10640           /* The .gptab.sdata and .gptab.sbss sections hold
10641              information describing how the small data area would
10642              change depending upon the -G switch.  These sections
10643              not used in executables files.  */
10644           if (! info->relocatable)
10645             {
10646               for (p = o->map_head.link_order; p != NULL; p = p->next)
10647                 {
10648                   asection *input_section;
10649
10650                   if (p->type != bfd_indirect_link_order)
10651                     {
10652                       if (p->type == bfd_data_link_order)
10653                         continue;
10654                       abort ();
10655                     }
10656
10657                   input_section = p->u.indirect.section;
10658
10659                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
10660                      elf_link_input_bfd ignores this section.  */
10661                   input_section->flags &= ~SEC_HAS_CONTENTS;
10662                 }
10663
10664               /* Skip this section later on (I don't think this
10665                  currently matters, but someday it might).  */
10666               o->map_head.link_order = NULL;
10667
10668               /* Really remove the section.  */
10669               bfd_section_list_remove (abfd, o);
10670               --abfd->section_count;
10671
10672               continue;
10673             }
10674
10675           /* There is one gptab for initialized data, and one for
10676              uninitialized data.  */
10677           if (strcmp (o->name, ".gptab.sdata") == 0)
10678             gptab_data_sec = o;
10679           else if (strcmp (o->name, ".gptab.sbss") == 0)
10680             gptab_bss_sec = o;
10681           else
10682             {
10683               (*_bfd_error_handler)
10684                 (_("%s: illegal section name `%s'"),
10685                  bfd_get_filename (abfd), o->name);
10686               bfd_set_error (bfd_error_nonrepresentable_section);
10687               return FALSE;
10688             }
10689
10690           /* The linker script always combines .gptab.data and
10691              .gptab.sdata into .gptab.sdata, and likewise for
10692              .gptab.bss and .gptab.sbss.  It is possible that there is
10693              no .sdata or .sbss section in the output file, in which
10694              case we must change the name of the output section.  */
10695           subname = o->name + sizeof ".gptab" - 1;
10696           if (bfd_get_section_by_name (abfd, subname) == NULL)
10697             {
10698               if (o == gptab_data_sec)
10699                 o->name = ".gptab.data";
10700               else
10701                 o->name = ".gptab.bss";
10702               subname = o->name + sizeof ".gptab" - 1;
10703               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
10704             }
10705
10706           /* Set up the first entry.  */
10707           c = 1;
10708           amt = c * sizeof (Elf32_gptab);
10709           tab = bfd_malloc (amt);
10710           if (tab == NULL)
10711             return FALSE;
10712           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
10713           tab[0].gt_header.gt_unused = 0;
10714
10715           /* Combine the input sections.  */
10716           for (p = o->map_head.link_order; p != NULL; p = p->next)
10717             {
10718               asection *input_section;
10719               bfd *input_bfd;
10720               bfd_size_type size;
10721               unsigned long last;
10722               bfd_size_type gpentry;
10723
10724               if (p->type != bfd_indirect_link_order)
10725                 {
10726                   if (p->type == bfd_data_link_order)
10727                     continue;
10728                   abort ();
10729                 }
10730
10731               input_section = p->u.indirect.section;
10732               input_bfd = input_section->owner;
10733
10734               /* Combine the gptab entries for this input section one
10735                  by one.  We know that the input gptab entries are
10736                  sorted by ascending -G value.  */
10737               size = input_section->size;
10738               last = 0;
10739               for (gpentry = sizeof (Elf32_External_gptab);
10740                    gpentry < size;
10741                    gpentry += sizeof (Elf32_External_gptab))
10742                 {
10743                   Elf32_External_gptab ext_gptab;
10744                   Elf32_gptab int_gptab;
10745                   unsigned long val;
10746                   unsigned long add;
10747                   bfd_boolean exact;
10748                   unsigned int look;
10749
10750                   if (! (bfd_get_section_contents
10751                          (input_bfd, input_section, &ext_gptab, gpentry,
10752                           sizeof (Elf32_External_gptab))))
10753                     {
10754                       free (tab);
10755                       return FALSE;
10756                     }
10757
10758                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
10759                                                 &int_gptab);
10760                   val = int_gptab.gt_entry.gt_g_value;
10761                   add = int_gptab.gt_entry.gt_bytes - last;
10762
10763                   exact = FALSE;
10764                   for (look = 1; look < c; look++)
10765                     {
10766                       if (tab[look].gt_entry.gt_g_value >= val)
10767                         tab[look].gt_entry.gt_bytes += add;
10768
10769                       if (tab[look].gt_entry.gt_g_value == val)
10770                         exact = TRUE;
10771                     }
10772
10773                   if (! exact)
10774                     {
10775                       Elf32_gptab *new_tab;
10776                       unsigned int max;
10777
10778                       /* We need a new table entry.  */
10779                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
10780                       new_tab = bfd_realloc (tab, amt);
10781                       if (new_tab == NULL)
10782                         {
10783                           free (tab);
10784                           return FALSE;
10785                         }
10786                       tab = new_tab;
10787                       tab[c].gt_entry.gt_g_value = val;
10788                       tab[c].gt_entry.gt_bytes = add;
10789
10790                       /* Merge in the size for the next smallest -G
10791                          value, since that will be implied by this new
10792                          value.  */
10793                       max = 0;
10794                       for (look = 1; look < c; look++)
10795                         {
10796                           if (tab[look].gt_entry.gt_g_value < val
10797                               && (max == 0
10798                                   || (tab[look].gt_entry.gt_g_value
10799                                       > tab[max].gt_entry.gt_g_value)))
10800                             max = look;
10801                         }
10802                       if (max != 0)
10803                         tab[c].gt_entry.gt_bytes +=
10804                           tab[max].gt_entry.gt_bytes;
10805
10806                       ++c;
10807                     }
10808
10809                   last = int_gptab.gt_entry.gt_bytes;
10810                 }
10811
10812               /* Hack: reset the SEC_HAS_CONTENTS flag so that
10813                  elf_link_input_bfd ignores this section.  */
10814               input_section->flags &= ~SEC_HAS_CONTENTS;
10815             }
10816
10817           /* The table must be sorted by -G value.  */
10818           if (c > 2)
10819             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
10820
10821           /* Swap out the table.  */
10822           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
10823           ext_tab = bfd_alloc (abfd, amt);
10824           if (ext_tab == NULL)
10825             {
10826               free (tab);
10827               return FALSE;
10828             }
10829
10830           for (j = 0; j < c; j++)
10831             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
10832           free (tab);
10833
10834           o->size = c * sizeof (Elf32_External_gptab);
10835           o->contents = (bfd_byte *) ext_tab;
10836
10837           /* Skip this section later on (I don't think this currently
10838              matters, but someday it might).  */
10839           o->map_head.link_order = NULL;
10840         }
10841     }
10842
10843   /* Invoke the regular ELF backend linker to do all the work.  */
10844   if (!bfd_elf_final_link (abfd, info))
10845     return FALSE;
10846
10847   /* Now write out the computed sections.  */
10848
10849   if (reginfo_sec != NULL)
10850     {
10851       Elf32_External_RegInfo ext;
10852
10853       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
10854       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
10855         return FALSE;
10856     }
10857
10858   if (mdebug_sec != NULL)
10859     {
10860       BFD_ASSERT (abfd->output_has_begun);
10861       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
10862                                                swap, info,
10863                                                mdebug_sec->filepos))
10864         return FALSE;
10865
10866       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
10867     }
10868
10869   if (gptab_data_sec != NULL)
10870     {
10871       if (! bfd_set_section_contents (abfd, gptab_data_sec,
10872                                       gptab_data_sec->contents,
10873                                       0, gptab_data_sec->size))
10874         return FALSE;
10875     }
10876
10877   if (gptab_bss_sec != NULL)
10878     {
10879       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
10880                                       gptab_bss_sec->contents,
10881                                       0, gptab_bss_sec->size))
10882         return FALSE;
10883     }
10884
10885   if (SGI_COMPAT (abfd))
10886     {
10887       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
10888       if (rtproc_sec != NULL)
10889         {
10890           if (! bfd_set_section_contents (abfd, rtproc_sec,
10891                                           rtproc_sec->contents,
10892                                           0, rtproc_sec->size))
10893             return FALSE;
10894         }
10895     }
10896
10897   return TRUE;
10898 }
10899 \f
10900 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
10901
10902 struct mips_mach_extension {
10903   unsigned long extension, base;
10904 };
10905
10906
10907 /* An array describing how BFD machines relate to one another.  The entries
10908    are ordered topologically with MIPS I extensions listed last.  */
10909
10910 static const struct mips_mach_extension mips_mach_extensions[] = {
10911   /* MIPS64 extensions.  */
10912   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
10913   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
10914
10915   /* MIPS V extensions.  */
10916   { bfd_mach_mipsisa64, bfd_mach_mips5 },
10917
10918   /* R10000 extensions.  */
10919   { bfd_mach_mips12000, bfd_mach_mips10000 },
10920
10921   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
10922      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
10923      better to allow vr5400 and vr5500 code to be merged anyway, since
10924      many libraries will just use the core ISA.  Perhaps we could add
10925      some sort of ASE flag if this ever proves a problem.  */
10926   { bfd_mach_mips5500, bfd_mach_mips5400 },
10927   { bfd_mach_mips5400, bfd_mach_mips5000 },
10928
10929   /* MIPS IV extensions.  */
10930   { bfd_mach_mips5, bfd_mach_mips8000 },
10931   { bfd_mach_mips10000, bfd_mach_mips8000 },
10932   { bfd_mach_mips5000, bfd_mach_mips8000 },
10933   { bfd_mach_mips7000, bfd_mach_mips8000 },
10934   { bfd_mach_mips9000, bfd_mach_mips8000 },
10935
10936   /* VR4100 extensions.  */
10937   { bfd_mach_mips4120, bfd_mach_mips4100 },
10938   { bfd_mach_mips4111, bfd_mach_mips4100 },
10939
10940   /* MIPS III extensions.  */
10941   { bfd_mach_mips8000, bfd_mach_mips4000 },
10942   { bfd_mach_mips4650, bfd_mach_mips4000 },
10943   { bfd_mach_mips4600, bfd_mach_mips4000 },
10944   { bfd_mach_mips4400, bfd_mach_mips4000 },
10945   { bfd_mach_mips4300, bfd_mach_mips4000 },
10946   { bfd_mach_mips4100, bfd_mach_mips4000 },
10947   { bfd_mach_mips4010, bfd_mach_mips4000 },
10948
10949   /* MIPS32 extensions.  */
10950   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
10951
10952   /* MIPS II extensions.  */
10953   { bfd_mach_mips4000, bfd_mach_mips6000 },
10954   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
10955
10956   /* MIPS I extensions.  */
10957   { bfd_mach_mips6000, bfd_mach_mips3000 },
10958   { bfd_mach_mips3900, bfd_mach_mips3000 }
10959 };
10960
10961
10962 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
10963
10964 static bfd_boolean
10965 mips_mach_extends_p (unsigned long base, unsigned long extension)
10966 {
10967   size_t i;
10968
10969   if (extension == base)
10970     return TRUE;
10971
10972   if (base == bfd_mach_mipsisa32
10973       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
10974     return TRUE;
10975
10976   if (base == bfd_mach_mipsisa32r2
10977       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
10978     return TRUE;
10979
10980   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
10981     if (extension == mips_mach_extensions[i].extension)
10982       {
10983         extension = mips_mach_extensions[i].base;
10984         if (extension == base)
10985           return TRUE;
10986       }
10987
10988   return FALSE;
10989 }
10990
10991
10992 /* Return true if the given ELF header flags describe a 32-bit binary.  */
10993
10994 static bfd_boolean
10995 mips_32bit_flags_p (flagword flags)
10996 {
10997   return ((flags & EF_MIPS_32BITMODE) != 0
10998           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
10999           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
11000           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
11001           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
11002           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
11003           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
11004 }
11005
11006
11007 /* Merge object attributes from IBFD into OBFD.  Raise an error if
11008    there are conflicting attributes.  */
11009 static bfd_boolean
11010 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
11011 {
11012   obj_attribute *in_attr;
11013   obj_attribute *out_attr;
11014
11015   if (!elf_known_obj_attributes_proc (obfd)[0].i)
11016     {
11017       /* This is the first object.  Copy the attributes.  */
11018       _bfd_elf_copy_obj_attributes (ibfd, obfd);
11019
11020       /* Use the Tag_null value to indicate the attributes have been
11021          initialized.  */
11022       elf_known_obj_attributes_proc (obfd)[0].i = 1;
11023
11024       return TRUE;
11025     }
11026
11027   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
11028      non-conflicting ones.  */
11029   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
11030   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
11031   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
11032     {
11033       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
11034       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
11035         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
11036       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
11037         ;
11038       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i > 3)
11039         _bfd_error_handler
11040           (_("Warning: %B uses unknown floating point ABI %d"), ibfd,
11041            in_attr[Tag_GNU_MIPS_ABI_FP].i);
11042       else if (out_attr[Tag_GNU_MIPS_ABI_FP].i > 3)
11043         _bfd_error_handler
11044           (_("Warning: %B uses unknown floating point ABI %d"), obfd,
11045            out_attr[Tag_GNU_MIPS_ABI_FP].i);
11046       else
11047         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
11048           {
11049           case 1:
11050             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
11051               {
11052               case 2:
11053                 _bfd_error_handler
11054                   (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
11055                    obfd, ibfd);
11056
11057               case 3:
11058                 _bfd_error_handler
11059                   (_("Warning: %B uses hard float, %B uses soft float"),
11060                    obfd, ibfd);
11061                 break;
11062
11063               default:
11064                 abort ();
11065               }
11066             break;
11067
11068           case 2:
11069             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
11070               {
11071               case 1:
11072                 _bfd_error_handler
11073                   (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
11074                    ibfd, obfd);
11075
11076               case 3:
11077                 _bfd_error_handler
11078                   (_("Warning: %B uses hard float, %B uses soft float"),
11079                    obfd, ibfd);
11080                 break;
11081
11082               default:
11083                 abort ();
11084               }
11085             break;
11086
11087           case 3:
11088             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
11089               {
11090               case 1:
11091               case 2:
11092                 _bfd_error_handler
11093                   (_("Warning: %B uses hard float, %B uses soft float"),
11094                    ibfd, obfd);
11095                 break;
11096
11097               default:
11098                 abort ();
11099               }
11100             break;
11101
11102           default:
11103             abort ();
11104           }
11105     }
11106
11107   /* Merge Tag_compatibility attributes and any common GNU ones.  */
11108   _bfd_elf_merge_object_attributes (ibfd, obfd);
11109
11110   return TRUE;
11111 }
11112
11113 /* Merge backend specific data from an object file to the output
11114    object file when linking.  */
11115
11116 bfd_boolean
11117 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
11118 {
11119   flagword old_flags;
11120   flagword new_flags;
11121   bfd_boolean ok;
11122   bfd_boolean null_input_bfd = TRUE;
11123   asection *sec;
11124
11125   /* Check if we have the same endianess */
11126   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
11127     {
11128       (*_bfd_error_handler)
11129         (_("%B: endianness incompatible with that of the selected emulation"),
11130          ibfd);
11131       return FALSE;
11132     }
11133
11134   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
11135       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
11136     return TRUE;
11137
11138   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
11139     {
11140       (*_bfd_error_handler)
11141         (_("%B: ABI is incompatible with that of the selected emulation"),
11142          ibfd);
11143       return FALSE;
11144     }
11145
11146   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
11147     return FALSE;
11148
11149   new_flags = elf_elfheader (ibfd)->e_flags;
11150   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
11151   old_flags = elf_elfheader (obfd)->e_flags;
11152
11153   if (! elf_flags_init (obfd))
11154     {
11155       elf_flags_init (obfd) = TRUE;
11156       elf_elfheader (obfd)->e_flags = new_flags;
11157       elf_elfheader (obfd)->e_ident[EI_CLASS]
11158         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
11159
11160       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
11161           && (bfd_get_arch_info (obfd)->the_default
11162               || mips_mach_extends_p (bfd_get_mach (obfd), 
11163                                       bfd_get_mach (ibfd))))
11164         {
11165           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
11166                                    bfd_get_mach (ibfd)))
11167             return FALSE;
11168         }
11169
11170       return TRUE;
11171     }
11172
11173   /* Check flag compatibility.  */
11174
11175   new_flags &= ~EF_MIPS_NOREORDER;
11176   old_flags &= ~EF_MIPS_NOREORDER;
11177
11178   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
11179      doesn't seem to matter.  */
11180   new_flags &= ~EF_MIPS_XGOT;
11181   old_flags &= ~EF_MIPS_XGOT;
11182
11183   /* MIPSpro generates ucode info in n64 objects.  Again, we should
11184      just be able to ignore this.  */
11185   new_flags &= ~EF_MIPS_UCODE;
11186   old_flags &= ~EF_MIPS_UCODE;
11187
11188   /* Don't care about the PIC flags from dynamic objects; they are
11189      PIC by design.  */
11190   if ((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0
11191       && (ibfd->flags & DYNAMIC) != 0)
11192     new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
11193
11194   if (new_flags == old_flags)
11195     return TRUE;
11196
11197   /* Check to see if the input BFD actually contains any sections.
11198      If not, its flags may not have been initialised either, but it cannot
11199      actually cause any incompatibility.  */
11200   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
11201     {
11202       /* Ignore synthetic sections and empty .text, .data and .bss sections
11203           which are automatically generated by gas.  */
11204       if (strcmp (sec->name, ".reginfo")
11205           && strcmp (sec->name, ".mdebug")
11206           && (sec->size != 0
11207               || (strcmp (sec->name, ".text")
11208                   && strcmp (sec->name, ".data")
11209                   && strcmp (sec->name, ".bss"))))
11210         {
11211           null_input_bfd = FALSE;
11212           break;
11213         }
11214     }
11215   if (null_input_bfd)
11216     return TRUE;
11217
11218   ok = TRUE;
11219
11220   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
11221       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
11222     {
11223       (*_bfd_error_handler)
11224         (_("%B: warning: linking PIC files with non-PIC files"),
11225          ibfd);
11226       ok = TRUE;
11227     }
11228
11229   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
11230     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
11231   if (! (new_flags & EF_MIPS_PIC))
11232     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
11233
11234   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
11235   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
11236
11237   /* Compare the ISAs.  */
11238   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
11239     {
11240       (*_bfd_error_handler)
11241         (_("%B: linking 32-bit code with 64-bit code"),
11242          ibfd);
11243       ok = FALSE;
11244     }
11245   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
11246     {
11247       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
11248       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
11249         {
11250           /* Copy the architecture info from IBFD to OBFD.  Also copy
11251              the 32-bit flag (if set) so that we continue to recognise
11252              OBFD as a 32-bit binary.  */
11253           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
11254           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11255           elf_elfheader (obfd)->e_flags
11256             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
11257
11258           /* Copy across the ABI flags if OBFD doesn't use them
11259              and if that was what caused us to treat IBFD as 32-bit.  */
11260           if ((old_flags & EF_MIPS_ABI) == 0
11261               && mips_32bit_flags_p (new_flags)
11262               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
11263             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
11264         }
11265       else
11266         {
11267           /* The ISAs aren't compatible.  */
11268           (*_bfd_error_handler)
11269             (_("%B: linking %s module with previous %s modules"),
11270              ibfd,
11271              bfd_printable_name (ibfd),
11272              bfd_printable_name (obfd));
11273           ok = FALSE;
11274         }
11275     }
11276
11277   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
11278   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
11279
11280   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
11281      does set EI_CLASS differently from any 32-bit ABI.  */
11282   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
11283       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
11284           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
11285     {
11286       /* Only error if both are set (to different values).  */
11287       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
11288           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
11289               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
11290         {
11291           (*_bfd_error_handler)
11292             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
11293              ibfd,
11294              elf_mips_abi_name (ibfd),
11295              elf_mips_abi_name (obfd));
11296           ok = FALSE;
11297         }
11298       new_flags &= ~EF_MIPS_ABI;
11299       old_flags &= ~EF_MIPS_ABI;
11300     }
11301
11302   /* For now, allow arbitrary mixing of ASEs (retain the union).  */
11303   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
11304     {
11305       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
11306
11307       new_flags &= ~ EF_MIPS_ARCH_ASE;
11308       old_flags &= ~ EF_MIPS_ARCH_ASE;
11309     }
11310
11311   /* Warn about any other mismatches */
11312   if (new_flags != old_flags)
11313     {
11314       (*_bfd_error_handler)
11315         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
11316          ibfd, (unsigned long) new_flags,
11317          (unsigned long) old_flags);
11318       ok = FALSE;
11319     }
11320
11321   if (! ok)
11322     {
11323       bfd_set_error (bfd_error_bad_value);
11324       return FALSE;
11325     }
11326
11327   return TRUE;
11328 }
11329
11330 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
11331
11332 bfd_boolean
11333 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
11334 {
11335   BFD_ASSERT (!elf_flags_init (abfd)
11336               || elf_elfheader (abfd)->e_flags == flags);
11337
11338   elf_elfheader (abfd)->e_flags = flags;
11339   elf_flags_init (abfd) = TRUE;
11340   return TRUE;
11341 }
11342
11343 bfd_boolean
11344 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
11345 {
11346   FILE *file = ptr;
11347
11348   BFD_ASSERT (abfd != NULL && ptr != NULL);
11349
11350   /* Print normal ELF private data.  */
11351   _bfd_elf_print_private_bfd_data (abfd, ptr);
11352
11353   /* xgettext:c-format */
11354   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
11355
11356   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
11357     fprintf (file, _(" [abi=O32]"));
11358   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
11359     fprintf (file, _(" [abi=O64]"));
11360   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
11361     fprintf (file, _(" [abi=EABI32]"));
11362   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
11363     fprintf (file, _(" [abi=EABI64]"));
11364   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
11365     fprintf (file, _(" [abi unknown]"));
11366   else if (ABI_N32_P (abfd))
11367     fprintf (file, _(" [abi=N32]"));
11368   else if (ABI_64_P (abfd))
11369     fprintf (file, _(" [abi=64]"));
11370   else
11371     fprintf (file, _(" [no abi set]"));
11372
11373   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
11374     fprintf (file, " [mips1]");
11375   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
11376     fprintf (file, " [mips2]");
11377   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
11378     fprintf (file, " [mips3]");
11379   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
11380     fprintf (file, " [mips4]");
11381   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
11382     fprintf (file, " [mips5]");
11383   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
11384     fprintf (file, " [mips32]");
11385   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
11386     fprintf (file, " [mips64]");
11387   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
11388     fprintf (file, " [mips32r2]");
11389   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
11390     fprintf (file, " [mips64r2]");
11391   else
11392     fprintf (file, _(" [unknown ISA]"));
11393
11394   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
11395     fprintf (file, " [mdmx]");
11396
11397   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
11398     fprintf (file, " [mips16]");
11399
11400   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
11401     fprintf (file, " [32bitmode]");
11402   else
11403     fprintf (file, _(" [not 32bitmode]"));
11404
11405   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
11406     fprintf (file, " [noreorder]");
11407
11408   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
11409     fprintf (file, " [PIC]");
11410
11411   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
11412     fprintf (file, " [CPIC]");
11413
11414   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
11415     fprintf (file, " [XGOT]");
11416
11417   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
11418     fprintf (file, " [UCODE]");
11419
11420   fputc ('\n', file);
11421
11422   return TRUE;
11423 }
11424
11425 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
11426 {
11427   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
11428   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
11429   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
11430   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
11431   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
11432   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
11433   { NULL,                     0,  0, 0,              0 }
11434 };
11435
11436 /* Merge non visibility st_other attributes.  Ensure that the
11437    STO_OPTIONAL flag is copied into h->other, even if this is not a
11438    definiton of the symbol.  */
11439 void
11440 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
11441                                       const Elf_Internal_Sym *isym,
11442                                       bfd_boolean definition,
11443                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
11444 {
11445   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
11446     {
11447       unsigned char other;
11448
11449       other = (definition ? isym->st_other : h->other);
11450       other &= ~ELF_ST_VISIBILITY (-1);
11451       h->other = other | ELF_ST_VISIBILITY (h->other);
11452     }
11453
11454   if (!definition
11455       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
11456     h->other |= STO_OPTIONAL;
11457 }
11458
11459 /* Decide whether an undefined symbol is special and can be ignored.
11460    This is the case for OPTIONAL symbols on IRIX.  */
11461 bfd_boolean
11462 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
11463 {
11464   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
11465 }
11466
11467 bfd_boolean
11468 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
11469 {
11470   return (sym->st_shndx == SHN_COMMON
11471           || sym->st_shndx == SHN_MIPS_ACOMMON
11472           || sym->st_shndx == SHN_MIPS_SCOMMON);
11473 }