2007-09-11 Jan Beulich <jbeulich@novell.com>
[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           if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
6713             return FALSE;
6714           break;
6715
6716         default:
6717           break;
6718         }
6719
6720       /* We must not create a stub for a symbol that has relocations
6721          related to taking the function's address.  This doesn't apply to
6722          VxWorks, where CALL relocs refer to a .got.plt entry instead of
6723          a normal .got entry.  */
6724       if (!htab->is_vxworks && h != NULL)
6725         switch (r_type)
6726           {
6727           default:
6728             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
6729             break;
6730           case R_MIPS_CALL16:
6731           case R_MIPS_CALL_HI16:
6732           case R_MIPS_CALL_LO16:
6733           case R_MIPS_JALR:
6734             break;
6735           }
6736
6737       /* If this reloc is not a 16 bit call, and it has a global
6738          symbol, then we will need the fn_stub if there is one.
6739          References from a stub section do not count.  */
6740       if (h != NULL
6741           && r_type != R_MIPS16_26
6742           && !mips16_stub_section_p (abfd, sec))
6743         {
6744           struct mips_elf_link_hash_entry *mh;
6745
6746           mh = (struct mips_elf_link_hash_entry *) h;
6747           mh->need_fn_stub = TRUE;
6748         }
6749     }
6750
6751   return TRUE;
6752 }
6753 \f
6754 bfd_boolean
6755 _bfd_mips_relax_section (bfd *abfd, asection *sec,
6756                          struct bfd_link_info *link_info,
6757                          bfd_boolean *again)
6758 {
6759   Elf_Internal_Rela *internal_relocs;
6760   Elf_Internal_Rela *irel, *irelend;
6761   Elf_Internal_Shdr *symtab_hdr;
6762   bfd_byte *contents = NULL;
6763   size_t extsymoff;
6764   bfd_boolean changed_contents = FALSE;
6765   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
6766   Elf_Internal_Sym *isymbuf = NULL;
6767
6768   /* We are not currently changing any sizes, so only one pass.  */
6769   *again = FALSE;
6770
6771   if (link_info->relocatable)
6772     return TRUE;
6773
6774   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
6775                                                link_info->keep_memory);
6776   if (internal_relocs == NULL)
6777     return TRUE;
6778
6779   irelend = internal_relocs + sec->reloc_count
6780     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
6781   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
6782   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
6783
6784   for (irel = internal_relocs; irel < irelend; irel++)
6785     {
6786       bfd_vma symval;
6787       bfd_signed_vma sym_offset;
6788       unsigned int r_type;
6789       unsigned long r_symndx;
6790       asection *sym_sec;
6791       unsigned long instruction;
6792
6793       /* Turn jalr into bgezal, and jr into beq, if they're marked
6794          with a JALR relocation, that indicate where they jump to.
6795          This saves some pipeline bubbles.  */
6796       r_type = ELF_R_TYPE (abfd, irel->r_info);
6797       if (r_type != R_MIPS_JALR)
6798         continue;
6799
6800       r_symndx = ELF_R_SYM (abfd, irel->r_info);
6801       /* Compute the address of the jump target.  */
6802       if (r_symndx >= extsymoff)
6803         {
6804           struct mips_elf_link_hash_entry *h
6805             = ((struct mips_elf_link_hash_entry *)
6806                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
6807
6808           while (h->root.root.type == bfd_link_hash_indirect
6809                  || h->root.root.type == bfd_link_hash_warning)
6810             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
6811
6812           /* If a symbol is undefined, or if it may be overridden,
6813              skip it.  */
6814           if (! ((h->root.root.type == bfd_link_hash_defined
6815                   || h->root.root.type == bfd_link_hash_defweak)
6816                  && h->root.root.u.def.section)
6817               || (link_info->shared && ! link_info->symbolic
6818                   && !h->root.forced_local))
6819             continue;
6820
6821           sym_sec = h->root.root.u.def.section;
6822           if (sym_sec->output_section)
6823             symval = (h->root.root.u.def.value
6824                       + sym_sec->output_section->vma
6825                       + sym_sec->output_offset);
6826           else
6827             symval = h->root.root.u.def.value;
6828         }
6829       else
6830         {
6831           Elf_Internal_Sym *isym;
6832
6833           /* Read this BFD's symbols if we haven't done so already.  */
6834           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
6835             {
6836               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
6837               if (isymbuf == NULL)
6838                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
6839                                                 symtab_hdr->sh_info, 0,
6840                                                 NULL, NULL, NULL);
6841               if (isymbuf == NULL)
6842                 goto relax_return;
6843             }
6844
6845           isym = isymbuf + r_symndx;
6846           if (isym->st_shndx == SHN_UNDEF)
6847             continue;
6848           else if (isym->st_shndx == SHN_ABS)
6849             sym_sec = bfd_abs_section_ptr;
6850           else if (isym->st_shndx == SHN_COMMON)
6851             sym_sec = bfd_com_section_ptr;
6852           else
6853             sym_sec
6854               = bfd_section_from_elf_index (abfd, isym->st_shndx);
6855           symval = isym->st_value
6856             + sym_sec->output_section->vma
6857             + sym_sec->output_offset;
6858         }
6859
6860       /* Compute branch offset, from delay slot of the jump to the
6861          branch target.  */
6862       sym_offset = (symval + irel->r_addend)
6863         - (sec_start + irel->r_offset + 4);
6864
6865       /* Branch offset must be properly aligned.  */
6866       if ((sym_offset & 3) != 0)
6867         continue;
6868
6869       sym_offset >>= 2;
6870
6871       /* Check that it's in range.  */
6872       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
6873         continue;
6874
6875       /* Get the section contents if we haven't done so already.  */
6876       if (contents == NULL)
6877         {
6878           /* Get cached copy if it exists.  */
6879           if (elf_section_data (sec)->this_hdr.contents != NULL)
6880             contents = elf_section_data (sec)->this_hdr.contents;
6881           else
6882             {
6883               if (!bfd_malloc_and_get_section (abfd, sec, &contents))
6884                 goto relax_return;
6885             }
6886         }
6887
6888       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
6889
6890       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
6891       if ((instruction & 0xfc1fffff) == 0x0000f809)
6892         instruction = 0x04110000;
6893       /* If it was jr <reg>, turn it into b <target>.  */
6894       else if ((instruction & 0xfc1fffff) == 0x00000008)
6895         instruction = 0x10000000;
6896       else
6897         continue;
6898
6899       instruction |= (sym_offset & 0xffff);
6900       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
6901       changed_contents = TRUE;
6902     }
6903
6904   if (contents != NULL
6905       && elf_section_data (sec)->this_hdr.contents != contents)
6906     {
6907       if (!changed_contents && !link_info->keep_memory)
6908         free (contents);
6909       else
6910         {
6911           /* Cache the section contents for elf_link_input_bfd.  */
6912           elf_section_data (sec)->this_hdr.contents = contents;
6913         }
6914     }
6915   return TRUE;
6916
6917  relax_return:
6918   if (contents != NULL
6919       && elf_section_data (sec)->this_hdr.contents != contents)
6920     free (contents);
6921   return FALSE;
6922 }
6923 \f
6924 /* Adjust a symbol defined by a dynamic object and referenced by a
6925    regular object.  The current definition is in some section of the
6926    dynamic object, but we're not including those sections.  We have to
6927    change the definition to something the rest of the link can
6928    understand.  */
6929
6930 bfd_boolean
6931 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
6932                                      struct elf_link_hash_entry *h)
6933 {
6934   bfd *dynobj;
6935   struct mips_elf_link_hash_entry *hmips;
6936   asection *s;
6937   struct mips_elf_link_hash_table *htab;
6938
6939   htab = mips_elf_hash_table (info);
6940   dynobj = elf_hash_table (info)->dynobj;
6941
6942   /* Make sure we know what is going on here.  */
6943   BFD_ASSERT (dynobj != NULL
6944               && (h->needs_plt
6945                   || h->u.weakdef != NULL
6946                   || (h->def_dynamic
6947                       && h->ref_regular
6948                       && !h->def_regular)));
6949
6950   /* If this symbol is defined in a dynamic object, we need to copy
6951      any R_MIPS_32 or R_MIPS_REL32 relocs against it into the output
6952      file.  */
6953   hmips = (struct mips_elf_link_hash_entry *) h;
6954   if (! info->relocatable
6955       && hmips->possibly_dynamic_relocs != 0
6956       && (h->root.type == bfd_link_hash_defweak
6957           || !h->def_regular))
6958     {
6959       mips_elf_allocate_dynamic_relocations
6960         (dynobj, info, hmips->possibly_dynamic_relocs);
6961       if (hmips->readonly_reloc)
6962         /* We tell the dynamic linker that there are relocations
6963            against the text segment.  */
6964         info->flags |= DF_TEXTREL;
6965     }
6966
6967   /* For a function, create a stub, if allowed.  */
6968   if (! hmips->no_fn_stub
6969       && h->needs_plt)
6970     {
6971       if (! elf_hash_table (info)->dynamic_sections_created)
6972         return TRUE;
6973
6974       /* If this symbol is not defined in a regular file, then set
6975          the symbol to the stub location.  This is required to make
6976          function pointers compare as equal between the normal
6977          executable and the shared library.  */
6978       if (!h->def_regular)
6979         {
6980           /* We need .stub section.  */
6981           s = bfd_get_section_by_name (dynobj,
6982                                        MIPS_ELF_STUB_SECTION_NAME (dynobj));
6983           BFD_ASSERT (s != NULL);
6984
6985           h->root.u.def.section = s;
6986           h->root.u.def.value = s->size;
6987
6988           /* XXX Write this stub address somewhere.  */
6989           h->plt.offset = s->size;
6990
6991           /* Make room for this stub code.  */
6992           s->size += htab->function_stub_size;
6993
6994           /* The last half word of the stub will be filled with the index
6995              of this symbol in .dynsym section.  */
6996           return TRUE;
6997         }
6998     }
6999   else if ((h->type == STT_FUNC)
7000            && !h->needs_plt)
7001     {
7002       /* This will set the entry for this symbol in the GOT to 0, and
7003          the dynamic linker will take care of this.  */
7004       h->root.u.def.value = 0;
7005       return TRUE;
7006     }
7007
7008   /* If this is a weak symbol, and there is a real definition, the
7009      processor independent code will have arranged for us to see the
7010      real definition first, and we can just use the same value.  */
7011   if (h->u.weakdef != NULL)
7012     {
7013       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
7014                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
7015       h->root.u.def.section = h->u.weakdef->root.u.def.section;
7016       h->root.u.def.value = h->u.weakdef->root.u.def.value;
7017       return TRUE;
7018     }
7019
7020   /* This is a reference to a symbol defined by a dynamic object which
7021      is not a function.  */
7022
7023   return TRUE;
7024 }
7025
7026 /* Likewise, for VxWorks.  */
7027
7028 bfd_boolean
7029 _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info,
7030                                          struct elf_link_hash_entry *h)
7031 {
7032   bfd *dynobj;
7033   struct mips_elf_link_hash_entry *hmips;
7034   struct mips_elf_link_hash_table *htab;
7035
7036   htab = mips_elf_hash_table (info);
7037   dynobj = elf_hash_table (info)->dynobj;
7038   hmips = (struct mips_elf_link_hash_entry *) h;
7039
7040   /* Make sure we know what is going on here.  */
7041   BFD_ASSERT (dynobj != NULL
7042               && (h->needs_plt
7043                   || h->needs_copy
7044                   || h->u.weakdef != NULL
7045                   || (h->def_dynamic
7046                       && h->ref_regular
7047                       && !h->def_regular)));
7048
7049   /* If the symbol is defined by a dynamic object, we need a PLT stub if
7050      either (a) we want to branch to the symbol or (b) we're linking an
7051      executable that needs a canonical function address.  In the latter
7052      case, the canonical address will be the address of the executable's
7053      load stub.  */
7054   if ((hmips->is_branch_target
7055        || (!info->shared
7056            && h->type == STT_FUNC
7057            && hmips->is_relocation_target))
7058       && h->def_dynamic
7059       && h->ref_regular
7060       && !h->def_regular
7061       && !h->forced_local)
7062     h->needs_plt = 1;
7063
7064   /* Locally-binding symbols do not need a PLT stub; we can refer to
7065      the functions directly.  */
7066   else if (h->needs_plt
7067            && (SYMBOL_CALLS_LOCAL (info, h)
7068                || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
7069                    && h->root.type == bfd_link_hash_undefweak)))
7070     {
7071       h->needs_plt = 0;
7072       return TRUE;
7073     }
7074
7075   if (h->needs_plt)
7076     {
7077       /* If this is the first symbol to need a PLT entry, allocate room
7078          for the header, and for the header's .rela.plt.unloaded entries.  */
7079       if (htab->splt->size == 0)
7080         {
7081           htab->splt->size += htab->plt_header_size;
7082           if (!info->shared)
7083             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
7084         }
7085
7086       /* Assign the next .plt entry to this symbol.  */
7087       h->plt.offset = htab->splt->size;
7088       htab->splt->size += htab->plt_entry_size;
7089
7090       /* If the output file has no definition of the symbol, set the
7091          symbol's value to the address of the stub.  For executables,
7092          point at the PLT load stub rather than the lazy resolution stub;
7093          this stub will become the canonical function address.  */
7094       if (!h->def_regular)
7095         {
7096           h->root.u.def.section = htab->splt;
7097           h->root.u.def.value = h->plt.offset;
7098           if (!info->shared)
7099             h->root.u.def.value += 8;
7100         }
7101
7102       /* Make room for the .got.plt entry and the R_JUMP_SLOT relocation.  */
7103       htab->sgotplt->size += 4;
7104       htab->srelplt->size += sizeof (Elf32_External_Rela);
7105
7106       /* Make room for the .rela.plt.unloaded relocations.  */
7107       if (!info->shared)
7108         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
7109
7110       return TRUE;
7111     }
7112
7113   /* If a function symbol is defined by a dynamic object, and we do not
7114      need a PLT stub for it, the symbol's value should be zero.  */
7115   if (h->type == STT_FUNC
7116       && h->def_dynamic
7117       && h->ref_regular
7118       && !h->def_regular)
7119     {
7120       h->root.u.def.value = 0;
7121       return TRUE;
7122     }
7123
7124   /* If this is a weak symbol, and there is a real definition, the
7125      processor independent code will have arranged for us to see the
7126      real definition first, and we can just use the same value.  */
7127   if (h->u.weakdef != NULL)
7128     {
7129       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
7130                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
7131       h->root.u.def.section = h->u.weakdef->root.u.def.section;
7132       h->root.u.def.value = h->u.weakdef->root.u.def.value;
7133       return TRUE;
7134     }
7135
7136   /* This is a reference to a symbol defined by a dynamic object which
7137      is not a function.  */
7138   if (info->shared)
7139     return TRUE;
7140
7141   /* We must allocate the symbol in our .dynbss section, which will
7142      become part of the .bss section of the executable.  There will be
7143      an entry for this symbol in the .dynsym section.  The dynamic
7144      object will contain position independent code, so all references
7145      from the dynamic object to this symbol will go through the global
7146      offset table.  The dynamic linker will use the .dynsym entry to
7147      determine the address it must put in the global offset table, so
7148      both the dynamic object and the regular object will refer to the
7149      same memory location for the variable.  */
7150
7151   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
7152     {
7153       htab->srelbss->size += sizeof (Elf32_External_Rela);
7154       h->needs_copy = 1;
7155     }
7156
7157   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
7158 }
7159 \f
7160 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
7161    The number might be exact or a worst-case estimate, depending on how
7162    much information is available to elf_backend_omit_section_dynsym at
7163    the current linking stage.  */
7164
7165 static bfd_size_type
7166 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
7167 {
7168   bfd_size_type count;
7169
7170   count = 0;
7171   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
7172     {
7173       asection *p;
7174       const struct elf_backend_data *bed;
7175
7176       bed = get_elf_backend_data (output_bfd);
7177       for (p = output_bfd->sections; p ; p = p->next)
7178         if ((p->flags & SEC_EXCLUDE) == 0
7179             && (p->flags & SEC_ALLOC) != 0
7180             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
7181           ++count;
7182     }
7183   return count;
7184 }
7185
7186 /* This function is called after all the input files have been read,
7187    and the input sections have been assigned to output sections.  We
7188    check for any mips16 stub sections that we can discard.  */
7189
7190 bfd_boolean
7191 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
7192                                     struct bfd_link_info *info)
7193 {
7194   asection *ri;
7195
7196   bfd *dynobj;
7197   asection *s;
7198   struct mips_got_info *g;
7199   int i;
7200   bfd_size_type loadable_size = 0;
7201   bfd_size_type local_gotno;
7202   bfd_size_type dynsymcount;
7203   bfd *sub;
7204   struct mips_elf_count_tls_arg count_tls_arg;
7205   struct mips_elf_link_hash_table *htab;
7206
7207   htab = mips_elf_hash_table (info);
7208
7209   /* The .reginfo section has a fixed size.  */
7210   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
7211   if (ri != NULL)
7212     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
7213
7214   if (! (info->relocatable
7215          || ! mips_elf_hash_table (info)->mips16_stubs_seen))
7216     mips_elf_link_hash_traverse (mips_elf_hash_table (info),
7217                                  mips_elf_check_mips16_stubs, NULL);
7218
7219   dynobj = elf_hash_table (info)->dynobj;
7220   if (dynobj == NULL)
7221     /* Relocatable links don't have it.  */
7222     return TRUE;
7223
7224   g = mips_elf_got_info (dynobj, &s);
7225   if (s == NULL)
7226     return TRUE;
7227
7228   /* Calculate the total loadable size of the output.  That
7229      will give us the maximum number of GOT_PAGE entries
7230      required.  */
7231   for (sub = info->input_bfds; sub; sub = sub->link_next)
7232     {
7233       asection *subsection;
7234
7235       for (subsection = sub->sections;
7236            subsection;
7237            subsection = subsection->next)
7238         {
7239           if ((subsection->flags & SEC_ALLOC) == 0)
7240             continue;
7241           loadable_size += ((subsection->size + 0xf)
7242                             &~ (bfd_size_type) 0xf);
7243         }
7244     }
7245
7246   /* There has to be a global GOT entry for every symbol with
7247      a dynamic symbol table index of DT_MIPS_GOTSYM or
7248      higher.  Therefore, it make sense to put those symbols
7249      that need GOT entries at the end of the symbol table.  We
7250      do that here.  */
7251   if (! mips_elf_sort_hash_table (info, 1))
7252     return FALSE;
7253
7254   if (g->global_gotsym != NULL)
7255     i = elf_hash_table (info)->dynsymcount - g->global_gotsym->dynindx;
7256   else
7257     /* If there are no global symbols, or none requiring
7258        relocations, then GLOBAL_GOTSYM will be NULL.  */
7259     i = 0;
7260
7261   /* Get a worst-case estimate of the number of dynamic symbols needed.
7262      At this point, dynsymcount does not account for section symbols
7263      and count_section_dynsyms may overestimate the number that will
7264      be needed.  */
7265   dynsymcount = (elf_hash_table (info)->dynsymcount
7266                  + count_section_dynsyms (output_bfd, info));
7267
7268   /* Determine the size of one stub entry.  */
7269   htab->function_stub_size = (dynsymcount > 0x10000
7270                               ? MIPS_FUNCTION_STUB_BIG_SIZE
7271                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
7272
7273   /* In the worst case, we'll get one stub per dynamic symbol, plus
7274      one to account for the dummy entry at the end required by IRIX
7275      rld.  */
7276   loadable_size += htab->function_stub_size * (i + 1);
7277
7278   if (htab->is_vxworks)
7279     /* There's no need to allocate page entries for VxWorks; R_MIPS_GOT16
7280        relocations against local symbols evaluate to "G", and the EABI does
7281        not include R_MIPS_GOT_PAGE.  */
7282     local_gotno = 0;
7283   else
7284     /* Assume there are two loadable segments consisting of contiguous
7285        sections.  Is 5 enough?  */
7286     local_gotno = (loadable_size >> 16) + 5;
7287
7288   g->local_gotno += local_gotno;
7289   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
7290
7291   g->global_gotno = i;
7292   s->size += i * MIPS_ELF_GOT_SIZE (output_bfd);
7293
7294   /* We need to calculate tls_gotno for global symbols at this point
7295      instead of building it up earlier, to avoid doublecounting
7296      entries for one global symbol from multiple input files.  */
7297   count_tls_arg.info = info;
7298   count_tls_arg.needed = 0;
7299   elf_link_hash_traverse (elf_hash_table (info),
7300                           mips_elf_count_global_tls_entries,
7301                           &count_tls_arg);
7302   g->tls_gotno += count_tls_arg.needed;
7303   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
7304
7305   mips_elf_resolve_final_got_entries (g);
7306
7307   /* VxWorks does not support multiple GOTs.  It initializes $gp to
7308      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
7309      dynamic loader.  */
7310   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
7311     {
7312       if (! mips_elf_multi_got (output_bfd, info, g, s, local_gotno))
7313         return FALSE;
7314     }
7315   else
7316     {
7317       /* Set up TLS entries for the first GOT.  */
7318       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
7319       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
7320     }
7321   htab->computed_got_sizes = TRUE;
7322
7323   return TRUE;
7324 }
7325
7326 /* Set the sizes of the dynamic sections.  */
7327
7328 bfd_boolean
7329 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
7330                                      struct bfd_link_info *info)
7331 {
7332   bfd *dynobj;
7333   asection *s, *sreldyn;
7334   bfd_boolean reltext;
7335   struct mips_elf_link_hash_table *htab;
7336
7337   htab = mips_elf_hash_table (info);
7338   dynobj = elf_hash_table (info)->dynobj;
7339   BFD_ASSERT (dynobj != NULL);
7340
7341   if (elf_hash_table (info)->dynamic_sections_created)
7342     {
7343       /* Set the contents of the .interp section to the interpreter.  */
7344       if (info->executable)
7345         {
7346           s = bfd_get_section_by_name (dynobj, ".interp");
7347           BFD_ASSERT (s != NULL);
7348           s->size
7349             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
7350           s->contents
7351             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
7352         }
7353     }
7354
7355   /* The check_relocs and adjust_dynamic_symbol entry points have
7356      determined the sizes of the various dynamic sections.  Allocate
7357      memory for them.  */
7358   reltext = FALSE;
7359   sreldyn = NULL;
7360   for (s = dynobj->sections; s != NULL; s = s->next)
7361     {
7362       const char *name;
7363
7364       /* It's OK to base decisions on the section name, because none
7365          of the dynobj section names depend upon the input files.  */
7366       name = bfd_get_section_name (dynobj, s);
7367
7368       if ((s->flags & SEC_LINKER_CREATED) == 0)
7369         continue;
7370
7371       if (CONST_STRNEQ (name, ".rel"))
7372         {
7373           if (s->size != 0)
7374             {
7375               const char *outname;
7376               asection *target;
7377
7378               /* If this relocation section applies to a read only
7379                  section, then we probably need a DT_TEXTREL entry.
7380                  If the relocation section is .rel(a).dyn, we always
7381                  assert a DT_TEXTREL entry rather than testing whether
7382                  there exists a relocation to a read only section or
7383                  not.  */
7384               outname = bfd_get_section_name (output_bfd,
7385                                               s->output_section);
7386               target = bfd_get_section_by_name (output_bfd, outname + 4);
7387               if ((target != NULL
7388                    && (target->flags & SEC_READONLY) != 0
7389                    && (target->flags & SEC_ALLOC) != 0)
7390                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
7391                 reltext = TRUE;
7392
7393               /* We use the reloc_count field as a counter if we need
7394                  to copy relocs into the output file.  */
7395               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
7396                 s->reloc_count = 0;
7397
7398               /* If combreloc is enabled, elf_link_sort_relocs() will
7399                  sort relocations, but in a different way than we do,
7400                  and before we're done creating relocations.  Also, it
7401                  will move them around between input sections'
7402                  relocation's contents, so our sorting would be
7403                  broken, so don't let it run.  */
7404               info->combreloc = 0;
7405             }
7406         }
7407       else if (htab->is_vxworks && strcmp (name, ".got") == 0)
7408         {
7409           /* Executables do not need a GOT.  */
7410           if (info->shared)
7411             {
7412               /* Allocate relocations for all but the reserved entries.  */
7413               struct mips_got_info *g;
7414               unsigned int count;
7415
7416               g = mips_elf_got_info (dynobj, NULL);
7417               count = (g->global_gotno
7418                        + g->local_gotno
7419                        - MIPS_RESERVED_GOTNO (info));
7420               mips_elf_allocate_dynamic_relocations (dynobj, info, count);
7421             }
7422         }
7423       else if (!htab->is_vxworks && CONST_STRNEQ (name, ".got"))
7424         {
7425           /* _bfd_mips_elf_always_size_sections() has already done
7426              most of the work, but some symbols may have been mapped
7427              to versions that we must now resolve in the got_entries
7428              hash tables.  */
7429           struct mips_got_info *gg = mips_elf_got_info (dynobj, NULL);
7430           struct mips_got_info *g = gg;
7431           struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
7432           unsigned int needed_relocs = 0;
7433
7434           if (gg->next)
7435             {
7436               set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (output_bfd);
7437               set_got_offset_arg.info = info;
7438
7439               /* NOTE 2005-02-03: How can this call, or the next, ever
7440                  find any indirect entries to resolve?  They were all
7441                  resolved in mips_elf_multi_got.  */
7442               mips_elf_resolve_final_got_entries (gg);
7443               for (g = gg->next; g && g->next != gg; g = g->next)
7444                 {
7445                   unsigned int save_assign;
7446
7447                   mips_elf_resolve_final_got_entries (g);
7448
7449                   /* Assign offsets to global GOT entries.  */
7450                   save_assign = g->assigned_gotno;
7451                   g->assigned_gotno = g->local_gotno;
7452                   set_got_offset_arg.g = g;
7453                   set_got_offset_arg.needed_relocs = 0;
7454                   htab_traverse (g->got_entries,
7455                                  mips_elf_set_global_got_offset,
7456                                  &set_got_offset_arg);
7457                   needed_relocs += set_got_offset_arg.needed_relocs;
7458                   BFD_ASSERT (g->assigned_gotno - g->local_gotno
7459                               <= g->global_gotno);
7460
7461                   g->assigned_gotno = save_assign;
7462                   if (info->shared)
7463                     {
7464                       needed_relocs += g->local_gotno - g->assigned_gotno;
7465                       BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
7466                                   + g->next->global_gotno
7467                                   + g->next->tls_gotno
7468                                   + MIPS_RESERVED_GOTNO (info));
7469                     }
7470                 }
7471             }
7472           else
7473             {
7474               struct mips_elf_count_tls_arg arg;
7475               arg.info = info;
7476               arg.needed = 0;
7477
7478               htab_traverse (gg->got_entries, mips_elf_count_local_tls_relocs,
7479                              &arg);
7480               elf_link_hash_traverse (elf_hash_table (info),
7481                                       mips_elf_count_global_tls_relocs,
7482                                       &arg);
7483
7484               needed_relocs += arg.needed;
7485             }
7486
7487           if (needed_relocs)
7488             mips_elf_allocate_dynamic_relocations (dynobj, info,
7489                                                    needed_relocs);
7490         }
7491       else if (strcmp (name, MIPS_ELF_STUB_SECTION_NAME (output_bfd)) == 0)
7492         {
7493           /* IRIX rld assumes that the function stub isn't at the end
7494              of .text section.  So put a dummy.  XXX  */
7495           s->size += htab->function_stub_size;
7496         }
7497       else if (! info->shared
7498                && ! mips_elf_hash_table (info)->use_rld_obj_head
7499                && CONST_STRNEQ (name, ".rld_map"))
7500         {
7501           /* We add a room for __rld_map.  It will be filled in by the
7502              rtld to contain a pointer to the _r_debug structure.  */
7503           s->size += 4;
7504         }
7505       else if (SGI_COMPAT (output_bfd)
7506                && CONST_STRNEQ (name, ".compact_rel"))
7507         s->size += mips_elf_hash_table (info)->compact_rel_size;
7508       else if (! CONST_STRNEQ (name, ".init")
7509                && s != htab->sgotplt
7510                && s != htab->splt)
7511         {
7512           /* It's not one of our sections, so don't allocate space.  */
7513           continue;
7514         }
7515
7516       if (s->size == 0)
7517         {
7518           s->flags |= SEC_EXCLUDE;
7519           continue;
7520         }
7521
7522       if ((s->flags & SEC_HAS_CONTENTS) == 0)
7523         continue;
7524
7525       /* Allocate memory for this section last, since we may increase its
7526          size above.  */
7527       if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) == 0)
7528         {
7529           sreldyn = s;
7530           continue;
7531         }
7532
7533       /* Allocate memory for the section contents.  */
7534       s->contents = bfd_zalloc (dynobj, s->size);
7535       if (s->contents == NULL)
7536         {
7537           bfd_set_error (bfd_error_no_memory);
7538           return FALSE;
7539         }
7540     }
7541
7542   /* Allocate memory for the .rel(a).dyn section.  */
7543   if (sreldyn != NULL)
7544     {
7545       sreldyn->contents = bfd_zalloc (dynobj, sreldyn->size);
7546       if (sreldyn->contents == NULL)
7547         {
7548           bfd_set_error (bfd_error_no_memory);
7549           return FALSE;
7550         }
7551     }
7552
7553   if (elf_hash_table (info)->dynamic_sections_created)
7554     {
7555       /* Add some entries to the .dynamic section.  We fill in the
7556          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
7557          must add the entries now so that we get the correct size for
7558          the .dynamic section.  */
7559
7560       /* SGI object has the equivalence of DT_DEBUG in the
7561          DT_MIPS_RLD_MAP entry.  This must come first because glibc
7562          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and GDB only
7563          looks at the first one it sees.  */
7564       if (!info->shared
7565           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
7566         return FALSE;
7567
7568       /* The DT_DEBUG entry may be filled in by the dynamic linker and
7569          used by the debugger.  */
7570       if (info->executable
7571           && !SGI_COMPAT (output_bfd)
7572           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
7573         return FALSE;
7574
7575       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
7576         info->flags |= DF_TEXTREL;
7577
7578       if ((info->flags & DF_TEXTREL) != 0)
7579         {
7580           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
7581             return FALSE;
7582
7583           /* Clear the DF_TEXTREL flag.  It will be set again if we
7584              write out an actual text relocation; we may not, because
7585              at this point we do not know whether e.g. any .eh_frame
7586              absolute relocations have been converted to PC-relative.  */
7587           info->flags &= ~DF_TEXTREL;
7588         }
7589
7590       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
7591         return FALSE;
7592
7593       if (htab->is_vxworks)
7594         {
7595           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
7596              use any of the DT_MIPS_* tags.  */
7597           if (mips_elf_rel_dyn_section (info, FALSE))
7598             {
7599               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
7600                 return FALSE;
7601
7602               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
7603                 return FALSE;
7604
7605               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
7606                 return FALSE;
7607             }
7608           if (htab->splt->size > 0)
7609             {
7610               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
7611                 return FALSE;
7612
7613               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
7614                 return FALSE;
7615
7616               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
7617                 return FALSE;
7618             }
7619         }
7620       else
7621         {
7622           if (mips_elf_rel_dyn_section (info, FALSE))
7623             {
7624               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
7625                 return FALSE;
7626
7627               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
7628                 return FALSE;
7629
7630               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
7631                 return FALSE;
7632             }
7633
7634           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
7635             return FALSE;
7636
7637           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
7638             return FALSE;
7639
7640           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
7641             return FALSE;
7642
7643           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
7644             return FALSE;
7645
7646           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
7647             return FALSE;
7648
7649           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
7650             return FALSE;
7651
7652           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
7653             return FALSE;
7654
7655           if (IRIX_COMPAT (dynobj) == ict_irix5
7656               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
7657             return FALSE;
7658
7659           if (IRIX_COMPAT (dynobj) == ict_irix6
7660               && (bfd_get_section_by_name
7661                   (dynobj, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
7662               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
7663             return FALSE;
7664         }
7665     }
7666
7667   return TRUE;
7668 }
7669 \f
7670 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
7671    Adjust its R_ADDEND field so that it is correct for the output file.
7672    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
7673    and sections respectively; both use symbol indexes.  */
7674
7675 static void
7676 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
7677                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
7678                         asection **local_sections, Elf_Internal_Rela *rel)
7679 {
7680   unsigned int r_type, r_symndx;
7681   Elf_Internal_Sym *sym;
7682   asection *sec;
7683
7684   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections, FALSE))
7685     {
7686       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
7687       if (r_type == R_MIPS16_GPREL
7688           || r_type == R_MIPS_GPREL16
7689           || r_type == R_MIPS_GPREL32
7690           || r_type == R_MIPS_LITERAL)
7691         {
7692           rel->r_addend += _bfd_get_gp_value (input_bfd);
7693           rel->r_addend -= _bfd_get_gp_value (output_bfd);
7694         }
7695
7696       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
7697       sym = local_syms + r_symndx;
7698
7699       /* Adjust REL's addend to account for section merging.  */
7700       if (!info->relocatable)
7701         {
7702           sec = local_sections[r_symndx];
7703           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
7704         }
7705
7706       /* This would normally be done by the rela_normal code in elflink.c.  */
7707       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
7708         rel->r_addend += local_sections[r_symndx]->output_offset;
7709     }
7710 }
7711
7712 /* Relocate a MIPS ELF section.  */
7713
7714 bfd_boolean
7715 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
7716                                 bfd *input_bfd, asection *input_section,
7717                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
7718                                 Elf_Internal_Sym *local_syms,
7719                                 asection **local_sections)
7720 {
7721   Elf_Internal_Rela *rel;
7722   const Elf_Internal_Rela *relend;
7723   bfd_vma addend = 0;
7724   bfd_boolean use_saved_addend_p = FALSE;
7725   const struct elf_backend_data *bed;
7726
7727   bed = get_elf_backend_data (output_bfd);
7728   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
7729   for (rel = relocs; rel < relend; ++rel)
7730     {
7731       const char *name;
7732       bfd_vma value = 0;
7733       reloc_howto_type *howto;
7734       bfd_boolean require_jalx;
7735       /* TRUE if the relocation is a RELA relocation, rather than a
7736          REL relocation.  */
7737       bfd_boolean rela_relocation_p = TRUE;
7738       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
7739       const char *msg;
7740       unsigned long r_symndx;
7741       asection *sec;
7742       Elf_Internal_Shdr *symtab_hdr;
7743       struct elf_link_hash_entry *h;
7744
7745       /* Find the relocation howto for this relocation.  */
7746       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type,
7747                                        NEWABI_P (input_bfd)
7748                                        && (MIPS_RELOC_RELA_P
7749                                            (input_bfd, input_section,
7750                                             rel - relocs)));
7751
7752       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
7753       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
7754       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections, FALSE))
7755         {
7756           sec = local_sections[r_symndx];
7757           h = NULL;
7758         }
7759       else
7760         {
7761           unsigned long extsymoff;
7762
7763           extsymoff = 0;
7764           if (!elf_bad_symtab (input_bfd))
7765             extsymoff = symtab_hdr->sh_info;
7766           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
7767           while (h->root.type == bfd_link_hash_indirect
7768                  || h->root.type == bfd_link_hash_warning)
7769             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7770
7771           sec = NULL;
7772           if (h->root.type == bfd_link_hash_defined
7773               || h->root.type == bfd_link_hash_defweak)
7774             sec = h->root.u.def.section;
7775         }
7776
7777       if (sec != NULL && elf_discarded_section (sec))
7778         {
7779           /* For relocs against symbols from removed linkonce sections,
7780              or sections discarded by a linker script, we just want the
7781              section contents zeroed.  Avoid any special processing.  */
7782           _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
7783           rel->r_info = 0;
7784           rel->r_addend = 0;
7785           continue;
7786         }
7787
7788       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
7789         {
7790           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
7791              64-bit code, but make sure all their addresses are in the
7792              lowermost or uppermost 32-bit section of the 64-bit address
7793              space.  Thus, when they use an R_MIPS_64 they mean what is
7794              usually meant by R_MIPS_32, with the exception that the
7795              stored value is sign-extended to 64 bits.  */
7796           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
7797
7798           /* On big-endian systems, we need to lie about the position
7799              of the reloc.  */
7800           if (bfd_big_endian (input_bfd))
7801             rel->r_offset += 4;
7802         }
7803
7804       if (!use_saved_addend_p)
7805         {
7806           Elf_Internal_Shdr *rel_hdr;
7807
7808           /* If these relocations were originally of the REL variety,
7809              we must pull the addend out of the field that will be
7810              relocated.  Otherwise, we simply use the contents of the
7811              RELA relocation.  To determine which flavor or relocation
7812              this is, we depend on the fact that the INPUT_SECTION's
7813              REL_HDR is read before its REL_HDR2.  */
7814           rel_hdr = &elf_section_data (input_section)->rel_hdr;
7815           if ((size_t) (rel - relocs)
7816               >= (NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel))
7817             rel_hdr = elf_section_data (input_section)->rel_hdr2;
7818           if (rel_hdr->sh_entsize == MIPS_ELF_REL_SIZE (input_bfd))
7819             {
7820               bfd_byte *location = contents + rel->r_offset;
7821
7822               /* Note that this is a REL relocation.  */
7823               rela_relocation_p = FALSE;
7824
7825               /* Get the addend, which is stored in the input file.  */
7826               _bfd_mips16_elf_reloc_unshuffle (input_bfd, r_type, FALSE,
7827                                                location);
7828               addend = mips_elf_obtain_contents (howto, rel, input_bfd,
7829                                                  contents);
7830               _bfd_mips16_elf_reloc_shuffle(input_bfd, r_type, FALSE,
7831                                             location);
7832
7833               addend &= howto->src_mask;
7834
7835               /* For some kinds of relocations, the ADDEND is a
7836                  combination of the addend stored in two different
7837                  relocations.   */
7838               if (r_type == R_MIPS_HI16 || r_type == R_MIPS16_HI16
7839                   || (r_type == R_MIPS_GOT16
7840                       && mips_elf_local_relocation_p (input_bfd, rel,
7841                                                       local_sections, FALSE)))
7842                 {
7843                   const Elf_Internal_Rela *lo16_relocation;
7844                   reloc_howto_type *lo16_howto;
7845                   int lo16_type;
7846
7847                   if (r_type == R_MIPS16_HI16)
7848                     lo16_type = R_MIPS16_LO16;
7849                   else
7850                     lo16_type = R_MIPS_LO16;
7851
7852                   /* The combined value is the sum of the HI16 addend,
7853                      left-shifted by sixteen bits, and the LO16
7854                      addend, sign extended.  (Usually, the code does
7855                      a `lui' of the HI16 value, and then an `addiu' of
7856                      the LO16 value.)
7857
7858                      Scan ahead to find a matching LO16 relocation.
7859
7860                      According to the MIPS ELF ABI, the R_MIPS_LO16
7861                      relocation must be immediately following.
7862                      However, for the IRIX6 ABI, the next relocation
7863                      may be a composed relocation consisting of
7864                      several relocations for the same address.  In
7865                      that case, the R_MIPS_LO16 relocation may occur
7866                      as one of these.  We permit a similar extension
7867                      in general, as that is useful for GCC.
7868
7869                      In some cases GCC dead code elimination removes
7870                      the LO16 but keeps the corresponding HI16.  This
7871                      is strictly speaking a violation of the ABI but
7872                      not immediately harmful.  */
7873                   lo16_relocation = mips_elf_next_relocation (input_bfd,
7874                                                               lo16_type,
7875                                                               rel, relend);
7876                   if (lo16_relocation == NULL)
7877                     {
7878                       const char *name;
7879
7880                       if (h)
7881                         name = h->root.root.string;
7882                       else
7883                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
7884                                                  local_syms + r_symndx,
7885                                                  sec);
7886                       (*_bfd_error_handler)
7887                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
7888                          input_bfd, input_section, name, howto->name,
7889                          rel->r_offset);
7890                     }
7891                   else
7892                     {
7893                       bfd_byte *lo16_location;
7894                       bfd_vma l;
7895
7896                       lo16_location = contents + lo16_relocation->r_offset;
7897
7898                       /* Obtain the addend kept there.  */
7899                       lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd,
7900                                                             lo16_type, FALSE);
7901                       _bfd_mips16_elf_reloc_unshuffle (input_bfd, lo16_type,
7902                                                        FALSE, lo16_location);
7903                       l = mips_elf_obtain_contents (lo16_howto,
7904                                                     lo16_relocation,
7905                                                     input_bfd, contents);
7906                       _bfd_mips16_elf_reloc_shuffle (input_bfd, lo16_type,
7907                                                      FALSE, lo16_location);
7908                       l &= lo16_howto->src_mask;
7909                       l <<= lo16_howto->rightshift;
7910                       l = _bfd_mips_elf_sign_extend (l, 16);
7911
7912                       addend <<= 16;
7913
7914                       /* Compute the combined addend.  */
7915                       addend += l;
7916                     }
7917                 }
7918               else
7919                 addend <<= howto->rightshift;
7920             }
7921           else
7922             addend = rel->r_addend;
7923           mips_elf_adjust_addend (output_bfd, info, input_bfd,
7924                                   local_syms, local_sections, rel);
7925         }
7926
7927       if (info->relocatable)
7928         {
7929           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
7930               && bfd_big_endian (input_bfd))
7931             rel->r_offset -= 4;
7932
7933           if (!rela_relocation_p && rel->r_addend)
7934             {
7935               addend += rel->r_addend;
7936               if (r_type == R_MIPS_HI16
7937                   || r_type == R_MIPS_GOT16)
7938                 addend = mips_elf_high (addend);
7939               else if (r_type == R_MIPS_HIGHER)
7940                 addend = mips_elf_higher (addend);
7941               else if (r_type == R_MIPS_HIGHEST)
7942                 addend = mips_elf_highest (addend);
7943               else
7944                 addend >>= howto->rightshift;
7945
7946               /* We use the source mask, rather than the destination
7947                  mask because the place to which we are writing will be
7948                  source of the addend in the final link.  */
7949               addend &= howto->src_mask;
7950
7951               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
7952                 /* See the comment above about using R_MIPS_64 in the 32-bit
7953                    ABI.  Here, we need to update the addend.  It would be
7954                    possible to get away with just using the R_MIPS_32 reloc
7955                    but for endianness.  */
7956                 {
7957                   bfd_vma sign_bits;
7958                   bfd_vma low_bits;
7959                   bfd_vma high_bits;
7960
7961                   if (addend & ((bfd_vma) 1 << 31))
7962 #ifdef BFD64
7963                     sign_bits = ((bfd_vma) 1 << 32) - 1;
7964 #else
7965                     sign_bits = -1;
7966 #endif
7967                   else
7968                     sign_bits = 0;
7969
7970                   /* If we don't know that we have a 64-bit type,
7971                      do two separate stores.  */
7972                   if (bfd_big_endian (input_bfd))
7973                     {
7974                       /* Store the sign-bits (which are most significant)
7975                          first.  */
7976                       low_bits = sign_bits;
7977                       high_bits = addend;
7978                     }
7979                   else
7980                     {
7981                       low_bits = addend;
7982                       high_bits = sign_bits;
7983                     }
7984                   bfd_put_32 (input_bfd, low_bits,
7985                               contents + rel->r_offset);
7986                   bfd_put_32 (input_bfd, high_bits,
7987                               contents + rel->r_offset + 4);
7988                   continue;
7989                 }
7990
7991               if (! mips_elf_perform_relocation (info, howto, rel, addend,
7992                                                  input_bfd, input_section,
7993                                                  contents, FALSE))
7994                 return FALSE;
7995             }
7996
7997           /* Go on to the next relocation.  */
7998           continue;
7999         }
8000
8001       /* In the N32 and 64-bit ABIs there may be multiple consecutive
8002          relocations for the same offset.  In that case we are
8003          supposed to treat the output of each relocation as the addend
8004          for the next.  */
8005       if (rel + 1 < relend
8006           && rel->r_offset == rel[1].r_offset
8007           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
8008         use_saved_addend_p = TRUE;
8009       else
8010         use_saved_addend_p = FALSE;
8011
8012       /* Figure out what value we are supposed to relocate.  */
8013       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
8014                                              input_section, info, rel,
8015                                              addend, howto, local_syms,
8016                                              local_sections, &value,
8017                                              &name, &require_jalx,
8018                                              use_saved_addend_p))
8019         {
8020         case bfd_reloc_continue:
8021           /* There's nothing to do.  */
8022           continue;
8023
8024         case bfd_reloc_undefined:
8025           /* mips_elf_calculate_relocation already called the
8026              undefined_symbol callback.  There's no real point in
8027              trying to perform the relocation at this point, so we
8028              just skip ahead to the next relocation.  */
8029           continue;
8030
8031         case bfd_reloc_notsupported:
8032           msg = _("internal error: unsupported relocation error");
8033           info->callbacks->warning
8034             (info, msg, name, input_bfd, input_section, rel->r_offset);
8035           return FALSE;
8036
8037         case bfd_reloc_overflow:
8038           if (use_saved_addend_p)
8039             /* Ignore overflow until we reach the last relocation for
8040                a given location.  */
8041             ;
8042           else
8043             {
8044               struct mips_elf_link_hash_table *htab;
8045
8046               htab = mips_elf_hash_table (info);
8047               BFD_ASSERT (name != NULL);
8048               if (!htab->small_data_overflow_reported
8049                   && (howto->type == R_MIPS_GPREL16
8050                       || howto->type == R_MIPS_LITERAL))
8051                 {
8052                   const char *msg =
8053                     _("small-data section exceeds 64KB;"
8054                       " lower small-data size limit (see option -G)");
8055
8056                   htab->small_data_overflow_reported = TRUE;
8057                   (*info->callbacks->einfo) ("%P: %s\n", msg);
8058                 }
8059               if (! ((*info->callbacks->reloc_overflow)
8060                      (info, NULL, name, howto->name, (bfd_vma) 0,
8061                       input_bfd, input_section, rel->r_offset)))
8062                 return FALSE;
8063             }
8064           break;
8065
8066         case bfd_reloc_ok:
8067           break;
8068
8069         default:
8070           abort ();
8071           break;
8072         }
8073
8074       /* If we've got another relocation for the address, keep going
8075          until we reach the last one.  */
8076       if (use_saved_addend_p)
8077         {
8078           addend = value;
8079           continue;
8080         }
8081
8082       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
8083         /* See the comment above about using R_MIPS_64 in the 32-bit
8084            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
8085            that calculated the right value.  Now, however, we
8086            sign-extend the 32-bit result to 64-bits, and store it as a
8087            64-bit value.  We are especially generous here in that we
8088            go to extreme lengths to support this usage on systems with
8089            only a 32-bit VMA.  */
8090         {
8091           bfd_vma sign_bits;
8092           bfd_vma low_bits;
8093           bfd_vma high_bits;
8094
8095           if (value & ((bfd_vma) 1 << 31))
8096 #ifdef BFD64
8097             sign_bits = ((bfd_vma) 1 << 32) - 1;
8098 #else
8099             sign_bits = -1;
8100 #endif
8101           else
8102             sign_bits = 0;
8103
8104           /* If we don't know that we have a 64-bit type,
8105              do two separate stores.  */
8106           if (bfd_big_endian (input_bfd))
8107             {
8108               /* Undo what we did above.  */
8109               rel->r_offset -= 4;
8110               /* Store the sign-bits (which are most significant)
8111                  first.  */
8112               low_bits = sign_bits;
8113               high_bits = value;
8114             }
8115           else
8116             {
8117               low_bits = value;
8118               high_bits = sign_bits;
8119             }
8120           bfd_put_32 (input_bfd, low_bits,
8121                       contents + rel->r_offset);
8122           bfd_put_32 (input_bfd, high_bits,
8123                       contents + rel->r_offset + 4);
8124           continue;
8125         }
8126
8127       /* Actually perform the relocation.  */
8128       if (! mips_elf_perform_relocation (info, howto, rel, value,
8129                                          input_bfd, input_section,
8130                                          contents, require_jalx))
8131         return FALSE;
8132     }
8133
8134   return TRUE;
8135 }
8136 \f
8137 /* If NAME is one of the special IRIX6 symbols defined by the linker,
8138    adjust it appropriately now.  */
8139
8140 static void
8141 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
8142                                       const char *name, Elf_Internal_Sym *sym)
8143 {
8144   /* The linker script takes care of providing names and values for
8145      these, but we must place them into the right sections.  */
8146   static const char* const text_section_symbols[] = {
8147     "_ftext",
8148     "_etext",
8149     "__dso_displacement",
8150     "__elf_header",
8151     "__program_header_table",
8152     NULL
8153   };
8154
8155   static const char* const data_section_symbols[] = {
8156     "_fdata",
8157     "_edata",
8158     "_end",
8159     "_fbss",
8160     NULL
8161   };
8162
8163   const char* const *p;
8164   int i;
8165
8166   for (i = 0; i < 2; ++i)
8167     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
8168          *p;
8169          ++p)
8170       if (strcmp (*p, name) == 0)
8171         {
8172           /* All of these symbols are given type STT_SECTION by the
8173              IRIX6 linker.  */
8174           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8175           sym->st_other = STO_PROTECTED;
8176
8177           /* The IRIX linker puts these symbols in special sections.  */
8178           if (i == 0)
8179             sym->st_shndx = SHN_MIPS_TEXT;
8180           else
8181             sym->st_shndx = SHN_MIPS_DATA;
8182
8183           break;
8184         }
8185 }
8186
8187 /* Finish up dynamic symbol handling.  We set the contents of various
8188    dynamic sections here.  */
8189
8190 bfd_boolean
8191 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
8192                                      struct bfd_link_info *info,
8193                                      struct elf_link_hash_entry *h,
8194                                      Elf_Internal_Sym *sym)
8195 {
8196   bfd *dynobj;
8197   asection *sgot;
8198   struct mips_got_info *g, *gg;
8199   const char *name;
8200   int idx;
8201   struct mips_elf_link_hash_table *htab;
8202
8203   htab = mips_elf_hash_table (info);
8204   dynobj = elf_hash_table (info)->dynobj;
8205
8206   if (h->plt.offset != MINUS_ONE)
8207     {
8208       asection *s;
8209       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
8210
8211       /* This symbol has a stub.  Set it up.  */
8212
8213       BFD_ASSERT (h->dynindx != -1);
8214
8215       s = bfd_get_section_by_name (dynobj,
8216                                    MIPS_ELF_STUB_SECTION_NAME (dynobj));
8217       BFD_ASSERT (s != NULL);
8218
8219       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
8220                   || (h->dynindx <= 0xffff));
8221
8222       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
8223          sign extension at runtime in the stub, resulting in a negative
8224          index value.  */
8225       if (h->dynindx & ~0x7fffffff)
8226         return FALSE;
8227
8228       /* Fill the stub.  */
8229       idx = 0;
8230       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
8231       idx += 4;
8232       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
8233       idx += 4;
8234       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
8235         {
8236           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
8237                       stub + idx);
8238           idx += 4;
8239         }
8240       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
8241       idx += 4;
8242
8243       /* If a large stub is not required and sign extension is not a
8244          problem, then use legacy code in the stub.  */
8245       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
8246         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
8247       else if (h->dynindx & ~0x7fff)
8248         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
8249       else
8250         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
8251                     stub + idx);
8252
8253       BFD_ASSERT (h->plt.offset <= s->size);
8254       memcpy (s->contents + h->plt.offset, stub, htab->function_stub_size);
8255
8256       /* Mark the symbol as undefined.  plt.offset != -1 occurs
8257          only for the referenced symbol.  */
8258       sym->st_shndx = SHN_UNDEF;
8259
8260       /* The run-time linker uses the st_value field of the symbol
8261          to reset the global offset table entry for this external
8262          to its stub address when unlinking a shared object.  */
8263       sym->st_value = (s->output_section->vma + s->output_offset
8264                        + h->plt.offset);
8265     }
8266
8267   BFD_ASSERT (h->dynindx != -1
8268               || h->forced_local);
8269
8270   sgot = mips_elf_got_section (dynobj, FALSE);
8271   BFD_ASSERT (sgot != NULL);
8272   BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
8273   g = mips_elf_section_data (sgot)->u.got_info;
8274   BFD_ASSERT (g != NULL);
8275
8276   /* Run through the global symbol table, creating GOT entries for all
8277      the symbols that need them.  */
8278   if (g->global_gotsym != NULL
8279       && h->dynindx >= g->global_gotsym->dynindx)
8280     {
8281       bfd_vma offset;
8282       bfd_vma value;
8283
8284       value = sym->st_value;
8285       offset = mips_elf_global_got_index (dynobj, output_bfd, h, R_MIPS_GOT16, info);
8286       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
8287     }
8288
8289   if (g->next && h->dynindx != -1 && h->type != STT_TLS)
8290     {
8291       struct mips_got_entry e, *p;
8292       bfd_vma entry;
8293       bfd_vma offset;
8294
8295       gg = g;
8296
8297       e.abfd = output_bfd;
8298       e.symndx = -1;
8299       e.d.h = (struct mips_elf_link_hash_entry *)h;
8300       e.tls_type = 0;
8301
8302       for (g = g->next; g->next != gg; g = g->next)
8303         {
8304           if (g->got_entries
8305               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
8306                                                            &e)))
8307             {
8308               offset = p->gotidx;
8309               if (info->shared
8310                   || (elf_hash_table (info)->dynamic_sections_created
8311                       && p->d.h != NULL
8312                       && p->d.h->root.def_dynamic
8313                       && !p->d.h->root.def_regular))
8314                 {
8315                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
8316                      the various compatibility problems, it's easier to mock
8317                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
8318                      mips_elf_create_dynamic_relocation to calculate the
8319                      appropriate addend.  */
8320                   Elf_Internal_Rela rel[3];
8321
8322                   memset (rel, 0, sizeof (rel));
8323                   if (ABI_64_P (output_bfd))
8324                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
8325                   else
8326                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
8327                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
8328
8329                   entry = 0;
8330                   if (! (mips_elf_create_dynamic_relocation
8331                          (output_bfd, info, rel,
8332                           e.d.h, NULL, sym->st_value, &entry, sgot)))
8333                     return FALSE;
8334                 }
8335               else
8336                 entry = sym->st_value;
8337               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
8338             }
8339         }
8340     }
8341
8342   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
8343   name = h->root.root.string;
8344   if (strcmp (name, "_DYNAMIC") == 0
8345       || h == elf_hash_table (info)->hgot)
8346     sym->st_shndx = SHN_ABS;
8347   else if (strcmp (name, "_DYNAMIC_LINK") == 0
8348            || strcmp (name, "_DYNAMIC_LINKING") == 0)
8349     {
8350       sym->st_shndx = SHN_ABS;
8351       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8352       sym->st_value = 1;
8353     }
8354   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
8355     {
8356       sym->st_shndx = SHN_ABS;
8357       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8358       sym->st_value = elf_gp (output_bfd);
8359     }
8360   else if (SGI_COMPAT (output_bfd))
8361     {
8362       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
8363           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
8364         {
8365           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8366           sym->st_other = STO_PROTECTED;
8367           sym->st_value = 0;
8368           sym->st_shndx = SHN_MIPS_DATA;
8369         }
8370       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
8371         {
8372           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8373           sym->st_other = STO_PROTECTED;
8374           sym->st_value = mips_elf_hash_table (info)->procedure_count;
8375           sym->st_shndx = SHN_ABS;
8376         }
8377       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
8378         {
8379           if (h->type == STT_FUNC)
8380             sym->st_shndx = SHN_MIPS_TEXT;
8381           else if (h->type == STT_OBJECT)
8382             sym->st_shndx = SHN_MIPS_DATA;
8383         }
8384     }
8385
8386   /* Handle the IRIX6-specific symbols.  */
8387   if (IRIX_COMPAT (output_bfd) == ict_irix6)
8388     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
8389
8390   if (! info->shared)
8391     {
8392       if (! mips_elf_hash_table (info)->use_rld_obj_head
8393           && (strcmp (name, "__rld_map") == 0
8394               || strcmp (name, "__RLD_MAP") == 0))
8395         {
8396           asection *s = bfd_get_section_by_name (dynobj, ".rld_map");
8397           BFD_ASSERT (s != NULL);
8398           sym->st_value = s->output_section->vma + s->output_offset;
8399           bfd_put_32 (output_bfd, 0, s->contents);
8400           if (mips_elf_hash_table (info)->rld_value == 0)
8401             mips_elf_hash_table (info)->rld_value = sym->st_value;
8402         }
8403       else if (mips_elf_hash_table (info)->use_rld_obj_head
8404                && strcmp (name, "__rld_obj_head") == 0)
8405         {
8406           /* IRIX6 does not use a .rld_map section.  */
8407           if (IRIX_COMPAT (output_bfd) == ict_irix5
8408               || IRIX_COMPAT (output_bfd) == ict_none)
8409             BFD_ASSERT (bfd_get_section_by_name (dynobj, ".rld_map")
8410                         != NULL);
8411           mips_elf_hash_table (info)->rld_value = sym->st_value;
8412         }
8413     }
8414
8415   /* If this is a mips16 symbol, force the value to be even.  */
8416   if (sym->st_other == STO_MIPS16)
8417     sym->st_value &= ~1;
8418
8419   return TRUE;
8420 }
8421
8422 /* Likewise, for VxWorks.  */
8423
8424 bfd_boolean
8425 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
8426                                          struct bfd_link_info *info,
8427                                          struct elf_link_hash_entry *h,
8428                                          Elf_Internal_Sym *sym)
8429 {
8430   bfd *dynobj;
8431   asection *sgot;
8432   struct mips_got_info *g;
8433   struct mips_elf_link_hash_table *htab;
8434
8435   htab = mips_elf_hash_table (info);
8436   dynobj = elf_hash_table (info)->dynobj;
8437
8438   if (h->plt.offset != (bfd_vma) -1)
8439     {
8440       bfd_byte *loc;
8441       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
8442       Elf_Internal_Rela rel;
8443       static const bfd_vma *plt_entry;
8444
8445       BFD_ASSERT (h->dynindx != -1);
8446       BFD_ASSERT (htab->splt != NULL);
8447       BFD_ASSERT (h->plt.offset <= htab->splt->size);
8448
8449       /* Calculate the address of the .plt entry.  */
8450       plt_address = (htab->splt->output_section->vma
8451                      + htab->splt->output_offset
8452                      + h->plt.offset);
8453
8454       /* Calculate the index of the entry.  */
8455       plt_index = ((h->plt.offset - htab->plt_header_size)
8456                    / htab->plt_entry_size);
8457
8458       /* Calculate the address of the .got.plt entry.  */
8459       got_address = (htab->sgotplt->output_section->vma
8460                      + htab->sgotplt->output_offset
8461                      + plt_index * 4);
8462
8463       /* Calculate the offset of the .got.plt entry from
8464          _GLOBAL_OFFSET_TABLE_.  */
8465       got_offset = mips_elf_gotplt_index (info, h);
8466
8467       /* Calculate the offset for the branch at the start of the PLT
8468          entry.  The branch jumps to the beginning of .plt.  */
8469       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
8470
8471       /* Fill in the initial value of the .got.plt entry.  */
8472       bfd_put_32 (output_bfd, plt_address,
8473                   htab->sgotplt->contents + plt_index * 4);
8474
8475       /* Find out where the .plt entry should go.  */
8476       loc = htab->splt->contents + h->plt.offset;
8477
8478       if (info->shared)
8479         {
8480           plt_entry = mips_vxworks_shared_plt_entry;
8481           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
8482           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
8483         }
8484       else
8485         {
8486           bfd_vma got_address_high, got_address_low;
8487
8488           plt_entry = mips_vxworks_exec_plt_entry;
8489           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
8490           got_address_low = got_address & 0xffff;
8491
8492           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
8493           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
8494           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
8495           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
8496           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
8497           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
8498           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
8499           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
8500
8501           loc = (htab->srelplt2->contents
8502                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
8503
8504           /* Emit a relocation for the .got.plt entry.  */
8505           rel.r_offset = got_address;
8506           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
8507           rel.r_addend = h->plt.offset;
8508           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8509
8510           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
8511           loc += sizeof (Elf32_External_Rela);
8512           rel.r_offset = plt_address + 8;
8513           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
8514           rel.r_addend = got_offset;
8515           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8516
8517           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
8518           loc += sizeof (Elf32_External_Rela);
8519           rel.r_offset += 4;
8520           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
8521           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8522         }
8523
8524       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
8525       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
8526       rel.r_offset = got_address;
8527       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
8528       rel.r_addend = 0;
8529       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8530
8531       if (!h->def_regular)
8532         sym->st_shndx = SHN_UNDEF;
8533     }
8534
8535   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
8536
8537   sgot = mips_elf_got_section (dynobj, FALSE);
8538   BFD_ASSERT (sgot != NULL);
8539   BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
8540   g = mips_elf_section_data (sgot)->u.got_info;
8541   BFD_ASSERT (g != NULL);
8542
8543   /* See if this symbol has an entry in the GOT.  */
8544   if (g->global_gotsym != NULL
8545       && h->dynindx >= g->global_gotsym->dynindx)
8546     {
8547       bfd_vma offset;
8548       Elf_Internal_Rela outrel;
8549       bfd_byte *loc;
8550       asection *s;
8551
8552       /* Install the symbol value in the GOT.   */
8553       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
8554                                           R_MIPS_GOT16, info);
8555       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
8556
8557       /* Add a dynamic relocation for it.  */
8558       s = mips_elf_rel_dyn_section (info, FALSE);
8559       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
8560       outrel.r_offset = (sgot->output_section->vma
8561                          + sgot->output_offset
8562                          + offset);
8563       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
8564       outrel.r_addend = 0;
8565       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
8566     }
8567
8568   /* Emit a copy reloc, if needed.  */
8569   if (h->needs_copy)
8570     {
8571       Elf_Internal_Rela rel;
8572
8573       BFD_ASSERT (h->dynindx != -1);
8574
8575       rel.r_offset = (h->root.u.def.section->output_section->vma
8576                       + h->root.u.def.section->output_offset
8577                       + h->root.u.def.value);
8578       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
8579       rel.r_addend = 0;
8580       bfd_elf32_swap_reloca_out (output_bfd, &rel,
8581                                  htab->srelbss->contents
8582                                  + (htab->srelbss->reloc_count
8583                                     * sizeof (Elf32_External_Rela)));
8584       ++htab->srelbss->reloc_count;
8585     }
8586
8587   /* If this is a mips16 symbol, force the value to be even.  */
8588   if (sym->st_other == STO_MIPS16)
8589     sym->st_value &= ~1;
8590
8591   return TRUE;
8592 }
8593
8594 /* Install the PLT header for a VxWorks executable and finalize the
8595    contents of .rela.plt.unloaded.  */
8596
8597 static void
8598 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
8599 {
8600   Elf_Internal_Rela rela;
8601   bfd_byte *loc;
8602   bfd_vma got_value, got_value_high, got_value_low, plt_address;
8603   static const bfd_vma *plt_entry;
8604   struct mips_elf_link_hash_table *htab;
8605
8606   htab = mips_elf_hash_table (info);
8607   plt_entry = mips_vxworks_exec_plt0_entry;
8608
8609   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
8610   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
8611                + htab->root.hgot->root.u.def.section->output_offset
8612                + htab->root.hgot->root.u.def.value);
8613
8614   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
8615   got_value_low = got_value & 0xffff;
8616
8617   /* Calculate the address of the PLT header.  */
8618   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
8619
8620   /* Install the PLT header.  */
8621   loc = htab->splt->contents;
8622   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
8623   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
8624   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
8625   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
8626   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
8627   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
8628
8629   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
8630   loc = htab->srelplt2->contents;
8631   rela.r_offset = plt_address;
8632   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
8633   rela.r_addend = 0;
8634   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
8635   loc += sizeof (Elf32_External_Rela);
8636
8637   /* Output the relocation for the following addiu of
8638      %lo(_GLOBAL_OFFSET_TABLE_).  */
8639   rela.r_offset += 4;
8640   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
8641   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
8642   loc += sizeof (Elf32_External_Rela);
8643
8644   /* Fix up the remaining relocations.  They may have the wrong
8645      symbol index for _G_O_T_ or _P_L_T_ depending on the order
8646      in which symbols were output.  */
8647   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
8648     {
8649       Elf_Internal_Rela rel;
8650
8651       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
8652       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
8653       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8654       loc += sizeof (Elf32_External_Rela);
8655
8656       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
8657       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
8658       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8659       loc += sizeof (Elf32_External_Rela);
8660
8661       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
8662       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
8663       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
8664       loc += sizeof (Elf32_External_Rela);
8665     }
8666 }
8667
8668 /* Install the PLT header for a VxWorks shared library.  */
8669
8670 static void
8671 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
8672 {
8673   unsigned int i;
8674   struct mips_elf_link_hash_table *htab;
8675
8676   htab = mips_elf_hash_table (info);
8677
8678   /* We just need to copy the entry byte-by-byte.  */
8679   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
8680     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
8681                 htab->splt->contents + i * 4);
8682 }
8683
8684 /* Finish up the dynamic sections.  */
8685
8686 bfd_boolean
8687 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
8688                                        struct bfd_link_info *info)
8689 {
8690   bfd *dynobj;
8691   asection *sdyn;
8692   asection *sgot;
8693   struct mips_got_info *gg, *g;
8694   struct mips_elf_link_hash_table *htab;
8695
8696   htab = mips_elf_hash_table (info);
8697   dynobj = elf_hash_table (info)->dynobj;
8698
8699   sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
8700
8701   sgot = mips_elf_got_section (dynobj, FALSE);
8702   if (sgot == NULL)
8703     gg = g = NULL;
8704   else
8705     {
8706       BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
8707       gg = mips_elf_section_data (sgot)->u.got_info;
8708       BFD_ASSERT (gg != NULL);
8709       g = mips_elf_got_for_ibfd (gg, output_bfd);
8710       BFD_ASSERT (g != NULL);
8711     }
8712
8713   if (elf_hash_table (info)->dynamic_sections_created)
8714     {
8715       bfd_byte *b;
8716       int dyn_to_skip = 0, dyn_skipped = 0;
8717
8718       BFD_ASSERT (sdyn != NULL);
8719       BFD_ASSERT (g != NULL);
8720
8721       for (b = sdyn->contents;
8722            b < sdyn->contents + sdyn->size;
8723            b += MIPS_ELF_DYN_SIZE (dynobj))
8724         {
8725           Elf_Internal_Dyn dyn;
8726           const char *name;
8727           size_t elemsize;
8728           asection *s;
8729           bfd_boolean swap_out_p;
8730
8731           /* Read in the current dynamic entry.  */
8732           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
8733
8734           /* Assume that we're going to modify it and write it out.  */
8735           swap_out_p = TRUE;
8736
8737           switch (dyn.d_tag)
8738             {
8739             case DT_RELENT:
8740               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
8741               break;
8742
8743             case DT_RELAENT:
8744               BFD_ASSERT (htab->is_vxworks);
8745               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
8746               break;
8747
8748             case DT_STRSZ:
8749               /* Rewrite DT_STRSZ.  */
8750               dyn.d_un.d_val =
8751                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
8752               break;
8753
8754             case DT_PLTGOT:
8755               name = ".got";
8756               if (htab->is_vxworks)
8757                 {
8758                   /* _GLOBAL_OFFSET_TABLE_ is defined to be the beginning
8759                      of the ".got" section in DYNOBJ.  */
8760                   s = bfd_get_section_by_name (dynobj, name);
8761                   BFD_ASSERT (s != NULL);
8762                   dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
8763                 }
8764               else
8765                 {
8766                   s = bfd_get_section_by_name (output_bfd, name);
8767                   BFD_ASSERT (s != NULL);
8768                   dyn.d_un.d_ptr = s->vma;
8769                 }
8770               break;
8771
8772             case DT_MIPS_RLD_VERSION:
8773               dyn.d_un.d_val = 1; /* XXX */
8774               break;
8775
8776             case DT_MIPS_FLAGS:
8777               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
8778               break;
8779
8780             case DT_MIPS_TIME_STAMP:
8781               {
8782                 time_t t;
8783                 time (&t);
8784                 dyn.d_un.d_val = t;
8785               }
8786               break;
8787
8788             case DT_MIPS_ICHECKSUM:
8789               /* XXX FIXME: */
8790               swap_out_p = FALSE;
8791               break;
8792
8793             case DT_MIPS_IVERSION:
8794               /* XXX FIXME: */
8795               swap_out_p = FALSE;
8796               break;
8797
8798             case DT_MIPS_BASE_ADDRESS:
8799               s = output_bfd->sections;
8800               BFD_ASSERT (s != NULL);
8801               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
8802               break;
8803
8804             case DT_MIPS_LOCAL_GOTNO:
8805               dyn.d_un.d_val = g->local_gotno;
8806               break;
8807
8808             case DT_MIPS_UNREFEXTNO:
8809               /* The index into the dynamic symbol table which is the
8810                  entry of the first external symbol that is not
8811                  referenced within the same object.  */
8812               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
8813               break;
8814
8815             case DT_MIPS_GOTSYM:
8816               if (gg->global_gotsym)
8817                 {
8818                   dyn.d_un.d_val = gg->global_gotsym->dynindx;
8819                   break;
8820                 }
8821               /* In case if we don't have global got symbols we default
8822                  to setting DT_MIPS_GOTSYM to the same value as
8823                  DT_MIPS_SYMTABNO, so we just fall through.  */
8824
8825             case DT_MIPS_SYMTABNO:
8826               name = ".dynsym";
8827               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
8828               s = bfd_get_section_by_name (output_bfd, name);
8829               BFD_ASSERT (s != NULL);
8830
8831               dyn.d_un.d_val = s->size / elemsize;
8832               break;
8833
8834             case DT_MIPS_HIPAGENO:
8835               dyn.d_un.d_val = g->local_gotno - MIPS_RESERVED_GOTNO (info);
8836               break;
8837
8838             case DT_MIPS_RLD_MAP:
8839               dyn.d_un.d_ptr = mips_elf_hash_table (info)->rld_value;
8840               break;
8841
8842             case DT_MIPS_OPTIONS:
8843               s = (bfd_get_section_by_name
8844                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
8845               dyn.d_un.d_ptr = s->vma;
8846               break;
8847
8848             case DT_RELASZ:
8849               BFD_ASSERT (htab->is_vxworks);
8850               /* The count does not include the JUMP_SLOT relocations.  */
8851               if (htab->srelplt)
8852                 dyn.d_un.d_val -= htab->srelplt->size;
8853               break;
8854
8855             case DT_PLTREL:
8856               BFD_ASSERT (htab->is_vxworks);
8857               dyn.d_un.d_val = DT_RELA;
8858               break;
8859
8860             case DT_PLTRELSZ:
8861               BFD_ASSERT (htab->is_vxworks);
8862               dyn.d_un.d_val = htab->srelplt->size;
8863               break;
8864
8865             case DT_JMPREL:
8866               BFD_ASSERT (htab->is_vxworks);
8867               dyn.d_un.d_val = (htab->srelplt->output_section->vma
8868                                 + htab->srelplt->output_offset);
8869               break;
8870
8871             case DT_TEXTREL:
8872               /* If we didn't need any text relocations after all, delete
8873                  the dynamic tag.  */
8874               if (!(info->flags & DF_TEXTREL))
8875                 {
8876                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
8877                   swap_out_p = FALSE;
8878                 }
8879               break;
8880
8881             case DT_FLAGS:
8882               /* If we didn't need any text relocations after all, clear
8883                  DF_TEXTREL from DT_FLAGS.  */
8884               if (!(info->flags & DF_TEXTREL))
8885                 dyn.d_un.d_val &= ~DF_TEXTREL;
8886               else
8887                 swap_out_p = FALSE;
8888               break;
8889
8890             default:
8891               swap_out_p = FALSE;
8892               break;
8893             }
8894
8895           if (swap_out_p || dyn_skipped)
8896             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
8897               (dynobj, &dyn, b - dyn_skipped);
8898
8899           if (dyn_to_skip)
8900             {
8901               dyn_skipped += dyn_to_skip;
8902               dyn_to_skip = 0;
8903             }
8904         }
8905
8906       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
8907       if (dyn_skipped > 0)
8908         memset (b - dyn_skipped, 0, dyn_skipped);
8909     }
8910
8911   if (sgot != NULL && sgot->size > 0)
8912     {
8913       if (htab->is_vxworks)
8914         {
8915           /* The first entry of the global offset table points to the
8916              ".dynamic" section.  The second is initialized by the
8917              loader and contains the shared library identifier.
8918              The third is also initialized by the loader and points
8919              to the lazy resolution stub.  */
8920           MIPS_ELF_PUT_WORD (output_bfd,
8921                              sdyn->output_offset + sdyn->output_section->vma,
8922                              sgot->contents);
8923           MIPS_ELF_PUT_WORD (output_bfd, 0,
8924                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
8925           MIPS_ELF_PUT_WORD (output_bfd, 0,
8926                              sgot->contents
8927                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
8928         }
8929       else
8930         {
8931           /* The first entry of the global offset table will be filled at
8932              runtime. The second entry will be used by some runtime loaders.
8933              This isn't the case of IRIX rld.  */
8934           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
8935           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000,
8936                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
8937         }
8938
8939       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
8940          = MIPS_ELF_GOT_SIZE (output_bfd);
8941     }
8942
8943   /* Generate dynamic relocations for the non-primary gots.  */
8944   if (gg != NULL && gg->next)
8945     {
8946       Elf_Internal_Rela rel[3];
8947       bfd_vma addend = 0;
8948
8949       memset (rel, 0, sizeof (rel));
8950       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
8951
8952       for (g = gg->next; g->next != gg; g = g->next)
8953         {
8954           bfd_vma index = g->next->local_gotno + g->next->global_gotno
8955             + g->next->tls_gotno;
8956
8957           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
8958                              + index++ * MIPS_ELF_GOT_SIZE (output_bfd));
8959           MIPS_ELF_PUT_WORD (output_bfd, 0x80000000, sgot->contents
8960                              + index++ * MIPS_ELF_GOT_SIZE (output_bfd));
8961
8962           if (! info->shared)
8963             continue;
8964
8965           while (index < g->assigned_gotno)
8966             {
8967               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
8968                 = index++ * MIPS_ELF_GOT_SIZE (output_bfd);
8969               if (!(mips_elf_create_dynamic_relocation
8970                     (output_bfd, info, rel, NULL,
8971                      bfd_abs_section_ptr,
8972                      0, &addend, sgot)))
8973                 return FALSE;
8974               BFD_ASSERT (addend == 0);
8975             }
8976         }
8977     }
8978
8979   /* The generation of dynamic relocations for the non-primary gots
8980      adds more dynamic relocations.  We cannot count them until
8981      here.  */
8982
8983   if (elf_hash_table (info)->dynamic_sections_created)
8984     {
8985       bfd_byte *b;
8986       bfd_boolean swap_out_p;
8987
8988       BFD_ASSERT (sdyn != NULL);
8989
8990       for (b = sdyn->contents;
8991            b < sdyn->contents + sdyn->size;
8992            b += MIPS_ELF_DYN_SIZE (dynobj))
8993         {
8994           Elf_Internal_Dyn dyn;
8995           asection *s;
8996
8997           /* Read in the current dynamic entry.  */
8998           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
8999
9000           /* Assume that we're going to modify it and write it out.  */
9001           swap_out_p = TRUE;
9002
9003           switch (dyn.d_tag)
9004             {
9005             case DT_RELSZ:
9006               /* Reduce DT_RELSZ to account for any relocations we
9007                  decided not to make.  This is for the n64 irix rld,
9008                  which doesn't seem to apply any relocations if there
9009                  are trailing null entries.  */
9010               s = mips_elf_rel_dyn_section (info, FALSE);
9011               dyn.d_un.d_val = (s->reloc_count
9012                                 * (ABI_64_P (output_bfd)
9013                                    ? sizeof (Elf64_Mips_External_Rel)
9014                                    : sizeof (Elf32_External_Rel)));
9015               /* Adjust the section size too.  Tools like the prelinker
9016                  can reasonably expect the values to the same.  */
9017               elf_section_data (s->output_section)->this_hdr.sh_size
9018                 = dyn.d_un.d_val;
9019               break;
9020
9021             default:
9022               swap_out_p = FALSE;
9023               break;
9024             }
9025
9026           if (swap_out_p)
9027             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
9028               (dynobj, &dyn, b);
9029         }
9030     }
9031
9032   {
9033     asection *s;
9034     Elf32_compact_rel cpt;
9035
9036     if (SGI_COMPAT (output_bfd))
9037       {
9038         /* Write .compact_rel section out.  */
9039         s = bfd_get_section_by_name (dynobj, ".compact_rel");
9040         if (s != NULL)
9041           {
9042             cpt.id1 = 1;
9043             cpt.num = s->reloc_count;
9044             cpt.id2 = 2;
9045             cpt.offset = (s->output_section->filepos
9046                           + sizeof (Elf32_External_compact_rel));
9047             cpt.reserved0 = 0;
9048             cpt.reserved1 = 0;
9049             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
9050                                             ((Elf32_External_compact_rel *)
9051                                              s->contents));
9052
9053             /* Clean up a dummy stub function entry in .text.  */
9054             s = bfd_get_section_by_name (dynobj,
9055                                          MIPS_ELF_STUB_SECTION_NAME (dynobj));
9056             if (s != NULL)
9057               {
9058                 file_ptr dummy_offset;
9059
9060                 BFD_ASSERT (s->size >= htab->function_stub_size);
9061                 dummy_offset = s->size - htab->function_stub_size;
9062                 memset (s->contents + dummy_offset, 0,
9063                         htab->function_stub_size);
9064               }
9065           }
9066       }
9067
9068     /* The psABI says that the dynamic relocations must be sorted in
9069        increasing order of r_symndx.  The VxWorks EABI doesn't require
9070        this, and because the code below handles REL rather than RELA
9071        relocations, using it for VxWorks would be outright harmful.  */
9072     if (!htab->is_vxworks)
9073       {
9074         s = mips_elf_rel_dyn_section (info, FALSE);
9075         if (s != NULL
9076             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
9077           {
9078             reldyn_sorting_bfd = output_bfd;
9079
9080             if (ABI_64_P (output_bfd))
9081               qsort ((Elf64_External_Rel *) s->contents + 1,
9082                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
9083                      sort_dynamic_relocs_64);
9084             else
9085               qsort ((Elf32_External_Rel *) s->contents + 1,
9086                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
9087                      sort_dynamic_relocs);
9088           }
9089       }
9090   }
9091
9092   if (htab->is_vxworks && htab->splt->size > 0)
9093     {
9094       if (info->shared)
9095         mips_vxworks_finish_shared_plt (output_bfd, info);
9096       else
9097         mips_vxworks_finish_exec_plt (output_bfd, info);
9098     }
9099   return TRUE;
9100 }
9101
9102
9103 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
9104
9105 static void
9106 mips_set_isa_flags (bfd *abfd)
9107 {
9108   flagword val;
9109
9110   switch (bfd_get_mach (abfd))
9111     {
9112     default:
9113     case bfd_mach_mips3000:
9114       val = E_MIPS_ARCH_1;
9115       break;
9116
9117     case bfd_mach_mips3900:
9118       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
9119       break;
9120
9121     case bfd_mach_mips6000:
9122       val = E_MIPS_ARCH_2;
9123       break;
9124
9125     case bfd_mach_mips4000:
9126     case bfd_mach_mips4300:
9127     case bfd_mach_mips4400:
9128     case bfd_mach_mips4600:
9129       val = E_MIPS_ARCH_3;
9130       break;
9131
9132     case bfd_mach_mips4010:
9133       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
9134       break;
9135
9136     case bfd_mach_mips4100:
9137       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
9138       break;
9139
9140     case bfd_mach_mips4111:
9141       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
9142       break;
9143
9144     case bfd_mach_mips4120:
9145       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
9146       break;
9147
9148     case bfd_mach_mips4650:
9149       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
9150       break;
9151
9152     case bfd_mach_mips5400:
9153       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
9154       break;
9155
9156     case bfd_mach_mips5500:
9157       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
9158       break;
9159
9160     case bfd_mach_mips9000:
9161       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
9162       break;
9163
9164     case bfd_mach_mips5000:
9165     case bfd_mach_mips7000:
9166     case bfd_mach_mips8000:
9167     case bfd_mach_mips10000:
9168     case bfd_mach_mips12000:
9169       val = E_MIPS_ARCH_4;
9170       break;
9171
9172     case bfd_mach_mips5:
9173       val = E_MIPS_ARCH_5;
9174       break;
9175
9176     case bfd_mach_mips_sb1:
9177       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
9178       break;
9179
9180     case bfd_mach_mipsisa32:
9181       val = E_MIPS_ARCH_32;
9182       break;
9183
9184     case bfd_mach_mipsisa64:
9185       val = E_MIPS_ARCH_64;
9186       break;
9187
9188     case bfd_mach_mipsisa32r2:
9189       val = E_MIPS_ARCH_32R2;
9190       break;
9191
9192     case bfd_mach_mipsisa64r2:
9193       val = E_MIPS_ARCH_64R2;
9194       break;
9195     }
9196   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
9197   elf_elfheader (abfd)->e_flags |= val;
9198
9199 }
9200
9201
9202 /* The final processing done just before writing out a MIPS ELF object
9203    file.  This gets the MIPS architecture right based on the machine
9204    number.  This is used by both the 32-bit and the 64-bit ABI.  */
9205
9206 void
9207 _bfd_mips_elf_final_write_processing (bfd *abfd,
9208                                       bfd_boolean linker ATTRIBUTE_UNUSED)
9209 {
9210   unsigned int i;
9211   Elf_Internal_Shdr **hdrpp;
9212   const char *name;
9213   asection *sec;
9214
9215   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
9216      is nonzero.  This is for compatibility with old objects, which used
9217      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
9218   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
9219     mips_set_isa_flags (abfd);
9220
9221   /* Set the sh_info field for .gptab sections and other appropriate
9222      info for each special section.  */
9223   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
9224        i < elf_numsections (abfd);
9225        i++, hdrpp++)
9226     {
9227       switch ((*hdrpp)->sh_type)
9228         {
9229         case SHT_MIPS_MSYM:
9230         case SHT_MIPS_LIBLIST:
9231           sec = bfd_get_section_by_name (abfd, ".dynstr");
9232           if (sec != NULL)
9233             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
9234           break;
9235
9236         case SHT_MIPS_GPTAB:
9237           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
9238           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
9239           BFD_ASSERT (name != NULL
9240                       && CONST_STRNEQ (name, ".gptab."));
9241           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
9242           BFD_ASSERT (sec != NULL);
9243           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
9244           break;
9245
9246         case SHT_MIPS_CONTENT:
9247           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
9248           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
9249           BFD_ASSERT (name != NULL
9250                       && CONST_STRNEQ (name, ".MIPS.content"));
9251           sec = bfd_get_section_by_name (abfd,
9252                                          name + sizeof ".MIPS.content" - 1);
9253           BFD_ASSERT (sec != NULL);
9254           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
9255           break;
9256
9257         case SHT_MIPS_SYMBOL_LIB:
9258           sec = bfd_get_section_by_name (abfd, ".dynsym");
9259           if (sec != NULL)
9260             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
9261           sec = bfd_get_section_by_name (abfd, ".liblist");
9262           if (sec != NULL)
9263             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
9264           break;
9265
9266         case SHT_MIPS_EVENTS:
9267           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
9268           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
9269           BFD_ASSERT (name != NULL);
9270           if (CONST_STRNEQ (name, ".MIPS.events"))
9271             sec = bfd_get_section_by_name (abfd,
9272                                            name + sizeof ".MIPS.events" - 1);
9273           else
9274             {
9275               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
9276               sec = bfd_get_section_by_name (abfd,
9277                                              (name
9278                                               + sizeof ".MIPS.post_rel" - 1));
9279             }
9280           BFD_ASSERT (sec != NULL);
9281           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
9282           break;
9283
9284         }
9285     }
9286 }
9287 \f
9288 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
9289    segments.  */
9290
9291 int
9292 _bfd_mips_elf_additional_program_headers (bfd *abfd,
9293                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
9294 {
9295   asection *s;
9296   int ret = 0;
9297
9298   /* See if we need a PT_MIPS_REGINFO segment.  */
9299   s = bfd_get_section_by_name (abfd, ".reginfo");
9300   if (s && (s->flags & SEC_LOAD))
9301     ++ret;
9302
9303   /* See if we need a PT_MIPS_OPTIONS segment.  */
9304   if (IRIX_COMPAT (abfd) == ict_irix6
9305       && bfd_get_section_by_name (abfd,
9306                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
9307     ++ret;
9308
9309   /* See if we need a PT_MIPS_RTPROC segment.  */
9310   if (IRIX_COMPAT (abfd) == ict_irix5
9311       && bfd_get_section_by_name (abfd, ".dynamic")
9312       && bfd_get_section_by_name (abfd, ".mdebug"))
9313     ++ret;
9314
9315   /* Allocate a PT_NULL header in dynamic objects.  See
9316      _bfd_mips_elf_modify_segment_map for details.  */
9317   if (!SGI_COMPAT (abfd)
9318       && bfd_get_section_by_name (abfd, ".dynamic"))
9319     ++ret;
9320
9321   return ret;
9322 }
9323
9324 /* Modify the segment map for an IRIX5 executable.  */
9325
9326 bfd_boolean
9327 _bfd_mips_elf_modify_segment_map (bfd *abfd,
9328                                   struct bfd_link_info *info ATTRIBUTE_UNUSED)
9329 {
9330   asection *s;
9331   struct elf_segment_map *m, **pm;
9332   bfd_size_type amt;
9333
9334   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
9335      segment.  */
9336   s = bfd_get_section_by_name (abfd, ".reginfo");
9337   if (s != NULL && (s->flags & SEC_LOAD) != 0)
9338     {
9339       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
9340         if (m->p_type == PT_MIPS_REGINFO)
9341           break;
9342       if (m == NULL)
9343         {
9344           amt = sizeof *m;
9345           m = bfd_zalloc (abfd, amt);
9346           if (m == NULL)
9347             return FALSE;
9348
9349           m->p_type = PT_MIPS_REGINFO;
9350           m->count = 1;
9351           m->sections[0] = s;
9352
9353           /* We want to put it after the PHDR and INTERP segments.  */
9354           pm = &elf_tdata (abfd)->segment_map;
9355           while (*pm != NULL
9356                  && ((*pm)->p_type == PT_PHDR
9357                      || (*pm)->p_type == PT_INTERP))
9358             pm = &(*pm)->next;
9359
9360           m->next = *pm;
9361           *pm = m;
9362         }
9363     }
9364
9365   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
9366      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
9367      PT_MIPS_OPTIONS segment immediately following the program header
9368      table.  */
9369   if (NEWABI_P (abfd)
9370       /* On non-IRIX6 new abi, we'll have already created a segment
9371          for this section, so don't create another.  I'm not sure this
9372          is not also the case for IRIX 6, but I can't test it right
9373          now.  */
9374       && IRIX_COMPAT (abfd) == ict_irix6)
9375     {
9376       for (s = abfd->sections; s; s = s->next)
9377         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
9378           break;
9379
9380       if (s)
9381         {
9382           struct elf_segment_map *options_segment;
9383
9384           pm = &elf_tdata (abfd)->segment_map;
9385           while (*pm != NULL
9386                  && ((*pm)->p_type == PT_PHDR
9387                      || (*pm)->p_type == PT_INTERP))
9388             pm = &(*pm)->next;
9389
9390           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
9391             {
9392               amt = sizeof (struct elf_segment_map);
9393               options_segment = bfd_zalloc (abfd, amt);
9394               options_segment->next = *pm;
9395               options_segment->p_type = PT_MIPS_OPTIONS;
9396               options_segment->p_flags = PF_R;
9397               options_segment->p_flags_valid = TRUE;
9398               options_segment->count = 1;
9399               options_segment->sections[0] = s;
9400               *pm = options_segment;
9401             }
9402         }
9403     }
9404   else
9405     {
9406       if (IRIX_COMPAT (abfd) == ict_irix5)
9407         {
9408           /* If there are .dynamic and .mdebug sections, we make a room
9409              for the RTPROC header.  FIXME: Rewrite without section names.  */
9410           if (bfd_get_section_by_name (abfd, ".interp") == NULL
9411               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
9412               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
9413             {
9414               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
9415                 if (m->p_type == PT_MIPS_RTPROC)
9416                   break;
9417               if (m == NULL)
9418                 {
9419                   amt = sizeof *m;
9420                   m = bfd_zalloc (abfd, amt);
9421                   if (m == NULL)
9422                     return FALSE;
9423
9424                   m->p_type = PT_MIPS_RTPROC;
9425
9426                   s = bfd_get_section_by_name (abfd, ".rtproc");
9427                   if (s == NULL)
9428                     {
9429                       m->count = 0;
9430                       m->p_flags = 0;
9431                       m->p_flags_valid = 1;
9432                     }
9433                   else
9434                     {
9435                       m->count = 1;
9436                       m->sections[0] = s;
9437                     }
9438
9439                   /* We want to put it after the DYNAMIC segment.  */
9440                   pm = &elf_tdata (abfd)->segment_map;
9441                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
9442                     pm = &(*pm)->next;
9443                   if (*pm != NULL)
9444                     pm = &(*pm)->next;
9445
9446                   m->next = *pm;
9447                   *pm = m;
9448                 }
9449             }
9450         }
9451       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
9452          .dynstr, .dynsym, and .hash sections, and everything in
9453          between.  */
9454       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
9455            pm = &(*pm)->next)
9456         if ((*pm)->p_type == PT_DYNAMIC)
9457           break;
9458       m = *pm;
9459       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
9460         {
9461           /* For a normal mips executable the permissions for the PT_DYNAMIC
9462              segment are read, write and execute. We do that here since
9463              the code in elf.c sets only the read permission. This matters
9464              sometimes for the dynamic linker.  */
9465           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
9466             {
9467               m->p_flags = PF_R | PF_W | PF_X;
9468               m->p_flags_valid = 1;
9469             }
9470         }
9471       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
9472          glibc's dynamic linker has traditionally derived the number of
9473          tags from the p_filesz field, and sometimes allocates stack
9474          arrays of that size.  An overly-big PT_DYNAMIC segment can
9475          be actively harmful in such cases.  Making PT_DYNAMIC contain
9476          other sections can also make life hard for the prelinker,
9477          which might move one of the other sections to a different
9478          PT_LOAD segment.  */
9479       if (SGI_COMPAT (abfd)
9480           && m != NULL
9481           && m->count == 1
9482           && strcmp (m->sections[0]->name, ".dynamic") == 0)
9483         {
9484           static const char *sec_names[] =
9485           {
9486             ".dynamic", ".dynstr", ".dynsym", ".hash"
9487           };
9488           bfd_vma low, high;
9489           unsigned int i, c;
9490           struct elf_segment_map *n;
9491
9492           low = ~(bfd_vma) 0;
9493           high = 0;
9494           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
9495             {
9496               s = bfd_get_section_by_name (abfd, sec_names[i]);
9497               if (s != NULL && (s->flags & SEC_LOAD) != 0)
9498                 {
9499                   bfd_size_type sz;
9500
9501                   if (low > s->vma)
9502                     low = s->vma;
9503                   sz = s->size;
9504                   if (high < s->vma + sz)
9505                     high = s->vma + sz;
9506                 }
9507             }
9508
9509           c = 0;
9510           for (s = abfd->sections; s != NULL; s = s->next)
9511             if ((s->flags & SEC_LOAD) != 0
9512                 && s->vma >= low
9513                 && s->vma + s->size <= high)
9514               ++c;
9515
9516           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
9517           n = bfd_zalloc (abfd, amt);
9518           if (n == NULL)
9519             return FALSE;
9520           *n = *m;
9521           n->count = c;
9522
9523           i = 0;
9524           for (s = abfd->sections; s != NULL; s = s->next)
9525             {
9526               if ((s->flags & SEC_LOAD) != 0
9527                   && s->vma >= low
9528                   && s->vma + s->size <= high)
9529                 {
9530                   n->sections[i] = s;
9531                   ++i;
9532                 }
9533             }
9534
9535           *pm = n;
9536         }
9537     }
9538
9539   /* Allocate a spare program header in dynamic objects so that tools
9540      like the prelinker can add an extra PT_LOAD entry.
9541
9542      If the prelinker needs to make room for a new PT_LOAD entry, its
9543      standard procedure is to move the first (read-only) sections into
9544      the new (writable) segment.  However, the MIPS ABI requires
9545      .dynamic to be in a read-only segment, and the section will often
9546      start within sizeof (ElfNN_Phdr) bytes of the last program header.
9547
9548      Although the prelinker could in principle move .dynamic to a
9549      writable segment, it seems better to allocate a spare program
9550      header instead, and avoid the need to move any sections.
9551      There is a long tradition of allocating spare dynamic tags,
9552      so allocating a spare program header seems like a natural
9553      extension.  */
9554   if (!SGI_COMPAT (abfd)
9555       && bfd_get_section_by_name (abfd, ".dynamic"))
9556     {
9557       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
9558         if ((*pm)->p_type == PT_NULL)
9559           break;
9560       if (*pm == NULL)
9561         {
9562           m = bfd_zalloc (abfd, sizeof (*m));
9563           if (m == NULL)
9564             return FALSE;
9565
9566           m->p_type = PT_NULL;
9567           *pm = m;
9568         }
9569     }
9570
9571   return TRUE;
9572 }
9573 \f
9574 /* Return the section that should be marked against GC for a given
9575    relocation.  */
9576
9577 asection *
9578 _bfd_mips_elf_gc_mark_hook (asection *sec,
9579                             struct bfd_link_info *info,
9580                             Elf_Internal_Rela *rel,
9581                             struct elf_link_hash_entry *h,
9582                             Elf_Internal_Sym *sym)
9583 {
9584   /* ??? Do mips16 stub sections need to be handled special?  */
9585
9586   if (h != NULL)
9587     switch (ELF_R_TYPE (sec->owner, rel->r_info))
9588       {
9589       case R_MIPS_GNU_VTINHERIT:
9590       case R_MIPS_GNU_VTENTRY:
9591         return NULL;
9592       }
9593
9594   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
9595 }
9596
9597 /* Update the got entry reference counts for the section being removed.  */
9598
9599 bfd_boolean
9600 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
9601                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
9602                              asection *sec ATTRIBUTE_UNUSED,
9603                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
9604 {
9605 #if 0
9606   Elf_Internal_Shdr *symtab_hdr;
9607   struct elf_link_hash_entry **sym_hashes;
9608   bfd_signed_vma *local_got_refcounts;
9609   const Elf_Internal_Rela *rel, *relend;
9610   unsigned long r_symndx;
9611   struct elf_link_hash_entry *h;
9612
9613   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
9614   sym_hashes = elf_sym_hashes (abfd);
9615   local_got_refcounts = elf_local_got_refcounts (abfd);
9616
9617   relend = relocs + sec->reloc_count;
9618   for (rel = relocs; rel < relend; rel++)
9619     switch (ELF_R_TYPE (abfd, rel->r_info))
9620       {
9621       case R_MIPS_GOT16:
9622       case R_MIPS_CALL16:
9623       case R_MIPS_CALL_HI16:
9624       case R_MIPS_CALL_LO16:
9625       case R_MIPS_GOT_HI16:
9626       case R_MIPS_GOT_LO16:
9627       case R_MIPS_GOT_DISP:
9628       case R_MIPS_GOT_PAGE:
9629       case R_MIPS_GOT_OFST:
9630         /* ??? It would seem that the existing MIPS code does no sort
9631            of reference counting or whatnot on its GOT and PLT entries,
9632            so it is not possible to garbage collect them at this time.  */
9633         break;
9634
9635       default:
9636         break;
9637       }
9638 #endif
9639
9640   return TRUE;
9641 }
9642 \f
9643 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
9644    hiding the old indirect symbol.  Process additional relocation
9645    information.  Also called for weakdefs, in which case we just let
9646    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
9647
9648 void
9649 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
9650                                     struct elf_link_hash_entry *dir,
9651                                     struct elf_link_hash_entry *ind)
9652 {
9653   struct mips_elf_link_hash_entry *dirmips, *indmips;
9654
9655   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
9656
9657   if (ind->root.type != bfd_link_hash_indirect)
9658     return;
9659
9660   dirmips = (struct mips_elf_link_hash_entry *) dir;
9661   indmips = (struct mips_elf_link_hash_entry *) ind;
9662   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
9663   if (indmips->readonly_reloc)
9664     dirmips->readonly_reloc = TRUE;
9665   if (indmips->no_fn_stub)
9666     dirmips->no_fn_stub = TRUE;
9667
9668   if (dirmips->tls_type == 0)
9669     dirmips->tls_type = indmips->tls_type;
9670 }
9671
9672 void
9673 _bfd_mips_elf_hide_symbol (struct bfd_link_info *info,
9674                            struct elf_link_hash_entry *entry,
9675                            bfd_boolean force_local)
9676 {
9677   bfd *dynobj;
9678   asection *got;
9679   struct mips_got_info *g;
9680   struct mips_elf_link_hash_entry *h;
9681   struct mips_elf_link_hash_table *htab;
9682
9683   h = (struct mips_elf_link_hash_entry *) entry;
9684   if (h->forced_local)
9685     return;
9686   h->forced_local = force_local;
9687
9688   dynobj = elf_hash_table (info)->dynobj;
9689   htab = mips_elf_hash_table (info);
9690   if (dynobj != NULL && force_local && h->root.type != STT_TLS
9691       && (got = mips_elf_got_section (dynobj, TRUE)) != NULL
9692       && (g = mips_elf_section_data (got)->u.got_info) != NULL)
9693     {
9694       if (g->next)
9695         {
9696           struct mips_got_entry e;
9697           struct mips_got_info *gg = g;
9698
9699           /* Since we're turning what used to be a global symbol into a
9700              local one, bump up the number of local entries of each GOT
9701              that had an entry for it.  This will automatically decrease
9702              the number of global entries, since global_gotno is actually
9703              the upper limit of global entries.  */
9704           e.abfd = dynobj;
9705           e.symndx = -1;
9706           e.d.h = h;
9707           e.tls_type = 0;
9708
9709           for (g = g->next; g != gg; g = g->next)
9710             if (htab_find (g->got_entries, &e))
9711               {
9712                 BFD_ASSERT (g->global_gotno > 0);
9713                 g->local_gotno++;
9714                 g->global_gotno--;
9715               }
9716
9717           /* If this was a global symbol forced into the primary GOT, we
9718              no longer need an entry for it.  We can't release the entry
9719              at this point, but we must at least stop counting it as one
9720              of the symbols that required a forced got entry.  */
9721           if (h->root.got.offset == 2)
9722             {
9723               BFD_ASSERT (gg->assigned_gotno > 0);
9724               gg->assigned_gotno--;
9725             }
9726         }
9727       else if (h->root.got.offset == 1)
9728         {
9729           /* check_relocs didn't know that this symbol would be
9730              forced-local, so add an extra local got entry.  */
9731           g->local_gotno++;
9732           if (htab->computed_got_sizes)
9733             {
9734               /* We'll have treated this symbol as global rather
9735                  than local.  */
9736               BFD_ASSERT (g->global_gotno > 0);
9737               g->global_gotno--;
9738             }
9739         }
9740       else if (htab->is_vxworks && h->root.needs_plt)
9741         {
9742           /* check_relocs didn't know that this symbol would be
9743              forced-local, so add an extra local got entry.  */
9744           g->local_gotno++;
9745           if (htab->computed_got_sizes)
9746             /* The symbol is only used in call relocations, so we'll
9747                have assumed it only needs a .got.plt entry.  Increase
9748                the size of .got accordingly.  */
9749             got->size += MIPS_ELF_GOT_SIZE (dynobj);
9750         }
9751     }
9752
9753   _bfd_elf_link_hash_hide_symbol (info, &h->root, force_local);
9754 }
9755 \f
9756 #define PDR_SIZE 32
9757
9758 bfd_boolean
9759 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
9760                             struct bfd_link_info *info)
9761 {
9762   asection *o;
9763   bfd_boolean ret = FALSE;
9764   unsigned char *tdata;
9765   size_t i, skip;
9766
9767   o = bfd_get_section_by_name (abfd, ".pdr");
9768   if (! o)
9769     return FALSE;
9770   if (o->size == 0)
9771     return FALSE;
9772   if (o->size % PDR_SIZE != 0)
9773     return FALSE;
9774   if (o->output_section != NULL
9775       && bfd_is_abs_section (o->output_section))
9776     return FALSE;
9777
9778   tdata = bfd_zmalloc (o->size / PDR_SIZE);
9779   if (! tdata)
9780     return FALSE;
9781
9782   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
9783                                             info->keep_memory);
9784   if (!cookie->rels)
9785     {
9786       free (tdata);
9787       return FALSE;
9788     }
9789
9790   cookie->rel = cookie->rels;
9791   cookie->relend = cookie->rels + o->reloc_count;
9792
9793   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
9794     {
9795       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
9796         {
9797           tdata[i] = 1;
9798           skip ++;
9799         }
9800     }
9801
9802   if (skip != 0)
9803     {
9804       mips_elf_section_data (o)->u.tdata = tdata;
9805       o->size -= skip * PDR_SIZE;
9806       ret = TRUE;
9807     }
9808   else
9809     free (tdata);
9810
9811   if (! info->keep_memory)
9812     free (cookie->rels);
9813
9814   return ret;
9815 }
9816
9817 bfd_boolean
9818 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
9819 {
9820   if (strcmp (sec->name, ".pdr") == 0)
9821     return TRUE;
9822   return FALSE;
9823 }
9824
9825 bfd_boolean
9826 _bfd_mips_elf_write_section (bfd *output_bfd,
9827                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
9828                              asection *sec, bfd_byte *contents)
9829 {
9830   bfd_byte *to, *from, *end;
9831   int i;
9832
9833   if (strcmp (sec->name, ".pdr") != 0)
9834     return FALSE;
9835
9836   if (mips_elf_section_data (sec)->u.tdata == NULL)
9837     return FALSE;
9838
9839   to = contents;
9840   end = contents + sec->size;
9841   for (from = contents, i = 0;
9842        from < end;
9843        from += PDR_SIZE, i++)
9844     {
9845       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
9846         continue;
9847       if (to != from)
9848         memcpy (to, from, PDR_SIZE);
9849       to += PDR_SIZE;
9850     }
9851   bfd_set_section_contents (output_bfd, sec->output_section, contents,
9852                             sec->output_offset, sec->size);
9853   return TRUE;
9854 }
9855 \f
9856 /* MIPS ELF uses a special find_nearest_line routine in order the
9857    handle the ECOFF debugging information.  */
9858
9859 struct mips_elf_find_line
9860 {
9861   struct ecoff_debug_info d;
9862   struct ecoff_find_line i;
9863 };
9864
9865 bfd_boolean
9866 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
9867                                  asymbol **symbols, bfd_vma offset,
9868                                  const char **filename_ptr,
9869                                  const char **functionname_ptr,
9870                                  unsigned int *line_ptr)
9871 {
9872   asection *msec;
9873
9874   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
9875                                      filename_ptr, functionname_ptr,
9876                                      line_ptr))
9877     return TRUE;
9878
9879   if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
9880                                      filename_ptr, functionname_ptr,
9881                                      line_ptr, ABI_64_P (abfd) ? 8 : 0,
9882                                      &elf_tdata (abfd)->dwarf2_find_line_info))
9883     return TRUE;
9884
9885   msec = bfd_get_section_by_name (abfd, ".mdebug");
9886   if (msec != NULL)
9887     {
9888       flagword origflags;
9889       struct mips_elf_find_line *fi;
9890       const struct ecoff_debug_swap * const swap =
9891         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
9892
9893       /* If we are called during a link, mips_elf_final_link may have
9894          cleared the SEC_HAS_CONTENTS field.  We force it back on here
9895          if appropriate (which it normally will be).  */
9896       origflags = msec->flags;
9897       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
9898         msec->flags |= SEC_HAS_CONTENTS;
9899
9900       fi = elf_tdata (abfd)->find_line_info;
9901       if (fi == NULL)
9902         {
9903           bfd_size_type external_fdr_size;
9904           char *fraw_src;
9905           char *fraw_end;
9906           struct fdr *fdr_ptr;
9907           bfd_size_type amt = sizeof (struct mips_elf_find_line);
9908
9909           fi = bfd_zalloc (abfd, amt);
9910           if (fi == NULL)
9911             {
9912               msec->flags = origflags;
9913               return FALSE;
9914             }
9915
9916           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
9917             {
9918               msec->flags = origflags;
9919               return FALSE;
9920             }
9921
9922           /* Swap in the FDR information.  */
9923           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
9924           fi->d.fdr = bfd_alloc (abfd, amt);
9925           if (fi->d.fdr == NULL)
9926             {
9927               msec->flags = origflags;
9928               return FALSE;
9929             }
9930           external_fdr_size = swap->external_fdr_size;
9931           fdr_ptr = fi->d.fdr;
9932           fraw_src = (char *) fi->d.external_fdr;
9933           fraw_end = (fraw_src
9934                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
9935           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
9936             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
9937
9938           elf_tdata (abfd)->find_line_info = fi;
9939
9940           /* Note that we don't bother to ever free this information.
9941              find_nearest_line is either called all the time, as in
9942              objdump -l, so the information should be saved, or it is
9943              rarely called, as in ld error messages, so the memory
9944              wasted is unimportant.  Still, it would probably be a
9945              good idea for free_cached_info to throw it away.  */
9946         }
9947
9948       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
9949                                   &fi->i, filename_ptr, functionname_ptr,
9950                                   line_ptr))
9951         {
9952           msec->flags = origflags;
9953           return TRUE;
9954         }
9955
9956       msec->flags = origflags;
9957     }
9958
9959   /* Fall back on the generic ELF find_nearest_line routine.  */
9960
9961   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
9962                                      filename_ptr, functionname_ptr,
9963                                      line_ptr);
9964 }
9965
9966 bfd_boolean
9967 _bfd_mips_elf_find_inliner_info (bfd *abfd,
9968                                  const char **filename_ptr,
9969                                  const char **functionname_ptr,
9970                                  unsigned int *line_ptr)
9971 {
9972   bfd_boolean found;
9973   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
9974                                          functionname_ptr, line_ptr,
9975                                          & elf_tdata (abfd)->dwarf2_find_line_info);
9976   return found;
9977 }
9978
9979 \f
9980 /* When are writing out the .options or .MIPS.options section,
9981    remember the bytes we are writing out, so that we can install the
9982    GP value in the section_processing routine.  */
9983
9984 bfd_boolean
9985 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
9986                                     const void *location,
9987                                     file_ptr offset, bfd_size_type count)
9988 {
9989   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
9990     {
9991       bfd_byte *c;
9992
9993       if (elf_section_data (section) == NULL)
9994         {
9995           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
9996           section->used_by_bfd = bfd_zalloc (abfd, amt);
9997           if (elf_section_data (section) == NULL)
9998             return FALSE;
9999         }
10000       c = mips_elf_section_data (section)->u.tdata;
10001       if (c == NULL)
10002         {
10003           c = bfd_zalloc (abfd, section->size);
10004           if (c == NULL)
10005             return FALSE;
10006           mips_elf_section_data (section)->u.tdata = c;
10007         }
10008
10009       memcpy (c + offset, location, count);
10010     }
10011
10012   return _bfd_elf_set_section_contents (abfd, section, location, offset,
10013                                         count);
10014 }
10015
10016 /* This is almost identical to bfd_generic_get_... except that some
10017    MIPS relocations need to be handled specially.  Sigh.  */
10018
10019 bfd_byte *
10020 _bfd_elf_mips_get_relocated_section_contents
10021   (bfd *abfd,
10022    struct bfd_link_info *link_info,
10023    struct bfd_link_order *link_order,
10024    bfd_byte *data,
10025    bfd_boolean relocatable,
10026    asymbol **symbols)
10027 {
10028   /* Get enough memory to hold the stuff */
10029   bfd *input_bfd = link_order->u.indirect.section->owner;
10030   asection *input_section = link_order->u.indirect.section;
10031   bfd_size_type sz;
10032
10033   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
10034   arelent **reloc_vector = NULL;
10035   long reloc_count;
10036
10037   if (reloc_size < 0)
10038     goto error_return;
10039
10040   reloc_vector = bfd_malloc (reloc_size);
10041   if (reloc_vector == NULL && reloc_size != 0)
10042     goto error_return;
10043
10044   /* read in the section */
10045   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
10046   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
10047     goto error_return;
10048
10049   reloc_count = bfd_canonicalize_reloc (input_bfd,
10050                                         input_section,
10051                                         reloc_vector,
10052                                         symbols);
10053   if (reloc_count < 0)
10054     goto error_return;
10055
10056   if (reloc_count > 0)
10057     {
10058       arelent **parent;
10059       /* for mips */
10060       int gp_found;
10061       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
10062
10063       {
10064         struct bfd_hash_entry *h;
10065         struct bfd_link_hash_entry *lh;
10066         /* Skip all this stuff if we aren't mixing formats.  */
10067         if (abfd && input_bfd
10068             && abfd->xvec == input_bfd->xvec)
10069           lh = 0;
10070         else
10071           {
10072             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
10073             lh = (struct bfd_link_hash_entry *) h;
10074           }
10075       lookup:
10076         if (lh)
10077           {
10078             switch (lh->type)
10079               {
10080               case bfd_link_hash_undefined:
10081               case bfd_link_hash_undefweak:
10082               case bfd_link_hash_common:
10083                 gp_found = 0;
10084                 break;
10085               case bfd_link_hash_defined:
10086               case bfd_link_hash_defweak:
10087                 gp_found = 1;
10088                 gp = lh->u.def.value;
10089                 break;
10090               case bfd_link_hash_indirect:
10091               case bfd_link_hash_warning:
10092                 lh = lh->u.i.link;
10093                 /* @@FIXME  ignoring warning for now */
10094                 goto lookup;
10095               case bfd_link_hash_new:
10096               default:
10097                 abort ();
10098               }
10099           }
10100         else
10101           gp_found = 0;
10102       }
10103       /* end mips */
10104       for (parent = reloc_vector; *parent != NULL; parent++)
10105         {
10106           char *error_message = NULL;
10107           bfd_reloc_status_type r;
10108
10109           /* Specific to MIPS: Deal with relocation types that require
10110              knowing the gp of the output bfd.  */
10111           asymbol *sym = *(*parent)->sym_ptr_ptr;
10112
10113           /* If we've managed to find the gp and have a special
10114              function for the relocation then go ahead, else default
10115              to the generic handling.  */
10116           if (gp_found
10117               && (*parent)->howto->special_function
10118               == _bfd_mips_elf32_gprel16_reloc)
10119             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
10120                                                input_section, relocatable,
10121                                                data, gp);
10122           else
10123             r = bfd_perform_relocation (input_bfd, *parent, data,
10124                                         input_section,
10125                                         relocatable ? abfd : NULL,
10126                                         &error_message);
10127
10128           if (relocatable)
10129             {
10130               asection *os = input_section->output_section;
10131
10132               /* A partial link, so keep the relocs */
10133               os->orelocation[os->reloc_count] = *parent;
10134               os->reloc_count++;
10135             }
10136
10137           if (r != bfd_reloc_ok)
10138             {
10139               switch (r)
10140                 {
10141                 case bfd_reloc_undefined:
10142                   if (!((*link_info->callbacks->undefined_symbol)
10143                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
10144                          input_bfd, input_section, (*parent)->address, TRUE)))
10145                     goto error_return;
10146                   break;
10147                 case bfd_reloc_dangerous:
10148                   BFD_ASSERT (error_message != NULL);
10149                   if (!((*link_info->callbacks->reloc_dangerous)
10150                         (link_info, error_message, input_bfd, input_section,
10151                          (*parent)->address)))
10152                     goto error_return;
10153                   break;
10154                 case bfd_reloc_overflow:
10155                   if (!((*link_info->callbacks->reloc_overflow)
10156                         (link_info, NULL,
10157                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
10158                          (*parent)->howto->name, (*parent)->addend,
10159                          input_bfd, input_section, (*parent)->address)))
10160                     goto error_return;
10161                   break;
10162                 case bfd_reloc_outofrange:
10163                 default:
10164                   abort ();
10165                   break;
10166                 }
10167
10168             }
10169         }
10170     }
10171   if (reloc_vector != NULL)
10172     free (reloc_vector);
10173   return data;
10174
10175 error_return:
10176   if (reloc_vector != NULL)
10177     free (reloc_vector);
10178   return NULL;
10179 }
10180 \f
10181 /* Create a MIPS ELF linker hash table.  */
10182
10183 struct bfd_link_hash_table *
10184 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
10185 {
10186   struct mips_elf_link_hash_table *ret;
10187   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
10188
10189   ret = bfd_malloc (amt);
10190   if (ret == NULL)
10191     return NULL;
10192
10193   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
10194                                       mips_elf_link_hash_newfunc,
10195                                       sizeof (struct mips_elf_link_hash_entry)))
10196     {
10197       free (ret);
10198       return NULL;
10199     }
10200
10201 #if 0
10202   /* We no longer use this.  */
10203   for (i = 0; i < SIZEOF_MIPS_DYNSYM_SECNAMES; i++)
10204     ret->dynsym_sec_strindex[i] = (bfd_size_type) -1;
10205 #endif
10206   ret->procedure_count = 0;
10207   ret->compact_rel_size = 0;
10208   ret->use_rld_obj_head = FALSE;
10209   ret->rld_value = 0;
10210   ret->mips16_stubs_seen = FALSE;
10211   ret->computed_got_sizes = FALSE;
10212   ret->is_vxworks = FALSE;
10213   ret->small_data_overflow_reported = FALSE;
10214   ret->srelbss = NULL;
10215   ret->sdynbss = NULL;
10216   ret->srelplt = NULL;
10217   ret->srelplt2 = NULL;
10218   ret->sgotplt = NULL;
10219   ret->splt = NULL;
10220   ret->plt_header_size = 0;
10221   ret->plt_entry_size = 0;
10222   ret->function_stub_size = 0;
10223
10224   return &ret->root.root;
10225 }
10226
10227 /* Likewise, but indicate that the target is VxWorks.  */
10228
10229 struct bfd_link_hash_table *
10230 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
10231 {
10232   struct bfd_link_hash_table *ret;
10233
10234   ret = _bfd_mips_elf_link_hash_table_create (abfd);
10235   if (ret)
10236     {
10237       struct mips_elf_link_hash_table *htab;
10238
10239       htab = (struct mips_elf_link_hash_table *) ret;
10240       htab->is_vxworks = 1;
10241     }
10242   return ret;
10243 }
10244 \f
10245 /* We need to use a special link routine to handle the .reginfo and
10246    the .mdebug sections.  We need to merge all instances of these
10247    sections together, not write them all out sequentially.  */
10248
10249 bfd_boolean
10250 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
10251 {
10252   asection *o;
10253   struct bfd_link_order *p;
10254   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
10255   asection *rtproc_sec;
10256   Elf32_RegInfo reginfo;
10257   struct ecoff_debug_info debug;
10258   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10259   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
10260   HDRR *symhdr = &debug.symbolic_header;
10261   void *mdebug_handle = NULL;
10262   asection *s;
10263   EXTR esym;
10264   unsigned int i;
10265   bfd_size_type amt;
10266   struct mips_elf_link_hash_table *htab;
10267
10268   static const char * const secname[] =
10269   {
10270     ".text", ".init", ".fini", ".data",
10271     ".rodata", ".sdata", ".sbss", ".bss"
10272   };
10273   static const int sc[] =
10274   {
10275     scText, scInit, scFini, scData,
10276     scRData, scSData, scSBss, scBss
10277   };
10278
10279   /* We'd carefully arranged the dynamic symbol indices, and then the
10280      generic size_dynamic_sections renumbered them out from under us.
10281      Rather than trying somehow to prevent the renumbering, just do
10282      the sort again.  */
10283   htab = mips_elf_hash_table (info);
10284   if (elf_hash_table (info)->dynamic_sections_created)
10285     {
10286       bfd *dynobj;
10287       asection *got;
10288       struct mips_got_info *g;
10289       bfd_size_type dynsecsymcount;
10290
10291       /* When we resort, we must tell mips_elf_sort_hash_table what
10292          the lowest index it may use is.  That's the number of section
10293          symbols we're going to add.  The generic ELF linker only
10294          adds these symbols when building a shared object.  Note that
10295          we count the sections after (possibly) removing the .options
10296          section above.  */
10297
10298       dynsecsymcount = count_section_dynsyms (abfd, info);
10299       if (! mips_elf_sort_hash_table (info, dynsecsymcount + 1))
10300         return FALSE;
10301
10302       /* Make sure we didn't grow the global .got region.  */
10303       dynobj = elf_hash_table (info)->dynobj;
10304       got = mips_elf_got_section (dynobj, FALSE);
10305       g = mips_elf_section_data (got)->u.got_info;
10306
10307       if (g->global_gotsym != NULL)
10308         BFD_ASSERT ((elf_hash_table (info)->dynsymcount
10309                      - g->global_gotsym->dynindx)
10310                     <= g->global_gotno);
10311     }
10312
10313   /* Get a value for the GP register.  */
10314   if (elf_gp (abfd) == 0)
10315     {
10316       struct bfd_link_hash_entry *h;
10317
10318       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
10319       if (h != NULL && h->type == bfd_link_hash_defined)
10320         elf_gp (abfd) = (h->u.def.value
10321                          + h->u.def.section->output_section->vma
10322                          + h->u.def.section->output_offset);
10323       else if (htab->is_vxworks
10324                && (h = bfd_link_hash_lookup (info->hash,
10325                                              "_GLOBAL_OFFSET_TABLE_",
10326                                              FALSE, FALSE, TRUE))
10327                && h->type == bfd_link_hash_defined)
10328         elf_gp (abfd) = (h->u.def.section->output_section->vma
10329                          + h->u.def.section->output_offset
10330                          + h->u.def.value);
10331       else if (info->relocatable)
10332         {
10333           bfd_vma lo = MINUS_ONE;
10334
10335           /* Find the GP-relative section with the lowest offset.  */
10336           for (o = abfd->sections; o != NULL; o = o->next)
10337             if (o->vma < lo
10338                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
10339               lo = o->vma;
10340
10341           /* And calculate GP relative to that.  */
10342           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
10343         }
10344       else
10345         {
10346           /* If the relocate_section function needs to do a reloc
10347              involving the GP value, it should make a reloc_dangerous
10348              callback to warn that GP is not defined.  */
10349         }
10350     }
10351
10352   /* Go through the sections and collect the .reginfo and .mdebug
10353      information.  */
10354   reginfo_sec = NULL;
10355   mdebug_sec = NULL;
10356   gptab_data_sec = NULL;
10357   gptab_bss_sec = NULL;
10358   for (o = abfd->sections; o != NULL; o = o->next)
10359     {
10360       if (strcmp (o->name, ".reginfo") == 0)
10361         {
10362           memset (&reginfo, 0, sizeof reginfo);
10363
10364           /* We have found the .reginfo section in the output file.
10365              Look through all the link_orders comprising it and merge
10366              the information together.  */
10367           for (p = o->map_head.link_order; p != NULL; p = p->next)
10368             {
10369               asection *input_section;
10370               bfd *input_bfd;
10371               Elf32_External_RegInfo ext;
10372               Elf32_RegInfo sub;
10373
10374               if (p->type != bfd_indirect_link_order)
10375                 {
10376                   if (p->type == bfd_data_link_order)
10377                     continue;
10378                   abort ();
10379                 }
10380
10381               input_section = p->u.indirect.section;
10382               input_bfd = input_section->owner;
10383
10384               if (! bfd_get_section_contents (input_bfd, input_section,
10385                                               &ext, 0, sizeof ext))
10386                 return FALSE;
10387
10388               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
10389
10390               reginfo.ri_gprmask |= sub.ri_gprmask;
10391               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
10392               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
10393               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
10394               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
10395
10396               /* ri_gp_value is set by the function
10397                  mips_elf32_section_processing when the section is
10398                  finally written out.  */
10399
10400               /* Hack: reset the SEC_HAS_CONTENTS flag so that
10401                  elf_link_input_bfd ignores this section.  */
10402               input_section->flags &= ~SEC_HAS_CONTENTS;
10403             }
10404
10405           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
10406           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
10407
10408           /* Skip this section later on (I don't think this currently
10409              matters, but someday it might).  */
10410           o->map_head.link_order = NULL;
10411
10412           reginfo_sec = o;
10413         }
10414
10415       if (strcmp (o->name, ".mdebug") == 0)
10416         {
10417           struct extsym_info einfo;
10418           bfd_vma last;
10419
10420           /* We have found the .mdebug section in the output file.
10421              Look through all the link_orders comprising it and merge
10422              the information together.  */
10423           symhdr->magic = swap->sym_magic;
10424           /* FIXME: What should the version stamp be?  */
10425           symhdr->vstamp = 0;
10426           symhdr->ilineMax = 0;
10427           symhdr->cbLine = 0;
10428           symhdr->idnMax = 0;
10429           symhdr->ipdMax = 0;
10430           symhdr->isymMax = 0;
10431           symhdr->ioptMax = 0;
10432           symhdr->iauxMax = 0;
10433           symhdr->issMax = 0;
10434           symhdr->issExtMax = 0;
10435           symhdr->ifdMax = 0;
10436           symhdr->crfd = 0;
10437           symhdr->iextMax = 0;
10438
10439           /* We accumulate the debugging information itself in the
10440              debug_info structure.  */
10441           debug.line = NULL;
10442           debug.external_dnr = NULL;
10443           debug.external_pdr = NULL;
10444           debug.external_sym = NULL;
10445           debug.external_opt = NULL;
10446           debug.external_aux = NULL;
10447           debug.ss = NULL;
10448           debug.ssext = debug.ssext_end = NULL;
10449           debug.external_fdr = NULL;
10450           debug.external_rfd = NULL;
10451           debug.external_ext = debug.external_ext_end = NULL;
10452
10453           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
10454           if (mdebug_handle == NULL)
10455             return FALSE;
10456
10457           esym.jmptbl = 0;
10458           esym.cobol_main = 0;
10459           esym.weakext = 0;
10460           esym.reserved = 0;
10461           esym.ifd = ifdNil;
10462           esym.asym.iss = issNil;
10463           esym.asym.st = stLocal;
10464           esym.asym.reserved = 0;
10465           esym.asym.index = indexNil;
10466           last = 0;
10467           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
10468             {
10469               esym.asym.sc = sc[i];
10470               s = bfd_get_section_by_name (abfd, secname[i]);
10471               if (s != NULL)
10472                 {
10473                   esym.asym.value = s->vma;
10474                   last = s->vma + s->size;
10475                 }
10476               else
10477                 esym.asym.value = last;
10478               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
10479                                                  secname[i], &esym))
10480                 return FALSE;
10481             }
10482
10483           for (p = o->map_head.link_order; p != NULL; p = p->next)
10484             {
10485               asection *input_section;
10486               bfd *input_bfd;
10487               const struct ecoff_debug_swap *input_swap;
10488               struct ecoff_debug_info input_debug;
10489               char *eraw_src;
10490               char *eraw_end;
10491
10492               if (p->type != bfd_indirect_link_order)
10493                 {
10494                   if (p->type == bfd_data_link_order)
10495                     continue;
10496                   abort ();
10497                 }
10498
10499               input_section = p->u.indirect.section;
10500               input_bfd = input_section->owner;
10501
10502               if (bfd_get_flavour (input_bfd) != bfd_target_elf_flavour
10503                   || (get_elf_backend_data (input_bfd)
10504                       ->elf_backend_ecoff_debug_swap) == NULL)
10505                 {
10506                   /* I don't know what a non MIPS ELF bfd would be
10507                      doing with a .mdebug section, but I don't really
10508                      want to deal with it.  */
10509                   continue;
10510                 }
10511
10512               input_swap = (get_elf_backend_data (input_bfd)
10513                             ->elf_backend_ecoff_debug_swap);
10514
10515               BFD_ASSERT (p->size == input_section->size);
10516
10517               /* The ECOFF linking code expects that we have already
10518                  read in the debugging information and set up an
10519                  ecoff_debug_info structure, so we do that now.  */
10520               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
10521                                                    &input_debug))
10522                 return FALSE;
10523
10524               if (! (bfd_ecoff_debug_accumulate
10525                      (mdebug_handle, abfd, &debug, swap, input_bfd,
10526                       &input_debug, input_swap, info)))
10527                 return FALSE;
10528
10529               /* Loop through the external symbols.  For each one with
10530                  interesting information, try to find the symbol in
10531                  the linker global hash table and save the information
10532                  for the output external symbols.  */
10533               eraw_src = input_debug.external_ext;
10534               eraw_end = (eraw_src
10535                           + (input_debug.symbolic_header.iextMax
10536                              * input_swap->external_ext_size));
10537               for (;
10538                    eraw_src < eraw_end;
10539                    eraw_src += input_swap->external_ext_size)
10540                 {
10541                   EXTR ext;
10542                   const char *name;
10543                   struct mips_elf_link_hash_entry *h;
10544
10545                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
10546                   if (ext.asym.sc == scNil
10547                       || ext.asym.sc == scUndefined
10548                       || ext.asym.sc == scSUndefined)
10549                     continue;
10550
10551                   name = input_debug.ssext + ext.asym.iss;
10552                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
10553                                                  name, FALSE, FALSE, TRUE);
10554                   if (h == NULL || h->esym.ifd != -2)
10555                     continue;
10556
10557                   if (ext.ifd != -1)
10558                     {
10559                       BFD_ASSERT (ext.ifd
10560                                   < input_debug.symbolic_header.ifdMax);
10561                       ext.ifd = input_debug.ifdmap[ext.ifd];
10562                     }
10563
10564                   h->esym = ext;
10565                 }
10566
10567               /* Free up the information we just read.  */
10568               free (input_debug.line);
10569               free (input_debug.external_dnr);
10570               free (input_debug.external_pdr);
10571               free (input_debug.external_sym);
10572               free (input_debug.external_opt);
10573               free (input_debug.external_aux);
10574               free (input_debug.ss);
10575               free (input_debug.ssext);
10576               free (input_debug.external_fdr);
10577               free (input_debug.external_rfd);
10578               free (input_debug.external_ext);
10579
10580               /* Hack: reset the SEC_HAS_CONTENTS flag so that
10581                  elf_link_input_bfd ignores this section.  */
10582               input_section->flags &= ~SEC_HAS_CONTENTS;
10583             }
10584
10585           if (SGI_COMPAT (abfd) && info->shared)
10586             {
10587               /* Create .rtproc section.  */
10588               rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
10589               if (rtproc_sec == NULL)
10590                 {
10591                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
10592                                     | SEC_LINKER_CREATED | SEC_READONLY);
10593
10594                   rtproc_sec = bfd_make_section_with_flags (abfd,
10595                                                             ".rtproc",
10596                                                             flags);
10597                   if (rtproc_sec == NULL
10598                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
10599                     return FALSE;
10600                 }
10601
10602               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
10603                                                      info, rtproc_sec,
10604                                                      &debug))
10605                 return FALSE;
10606             }
10607
10608           /* Build the external symbol information.  */
10609           einfo.abfd = abfd;
10610           einfo.info = info;
10611           einfo.debug = &debug;
10612           einfo.swap = swap;
10613           einfo.failed = FALSE;
10614           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
10615                                        mips_elf_output_extsym, &einfo);
10616           if (einfo.failed)
10617             return FALSE;
10618
10619           /* Set the size of the .mdebug section.  */
10620           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
10621
10622           /* Skip this section later on (I don't think this currently
10623              matters, but someday it might).  */
10624           o->map_head.link_order = NULL;
10625
10626           mdebug_sec = o;
10627         }
10628
10629       if (CONST_STRNEQ (o->name, ".gptab."))
10630         {
10631           const char *subname;
10632           unsigned int c;
10633           Elf32_gptab *tab;
10634           Elf32_External_gptab *ext_tab;
10635           unsigned int j;
10636
10637           /* The .gptab.sdata and .gptab.sbss sections hold
10638              information describing how the small data area would
10639              change depending upon the -G switch.  These sections
10640              not used in executables files.  */
10641           if (! info->relocatable)
10642             {
10643               for (p = o->map_head.link_order; p != NULL; p = p->next)
10644                 {
10645                   asection *input_section;
10646
10647                   if (p->type != bfd_indirect_link_order)
10648                     {
10649                       if (p->type == bfd_data_link_order)
10650                         continue;
10651                       abort ();
10652                     }
10653
10654                   input_section = p->u.indirect.section;
10655
10656                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
10657                      elf_link_input_bfd ignores this section.  */
10658                   input_section->flags &= ~SEC_HAS_CONTENTS;
10659                 }
10660
10661               /* Skip this section later on (I don't think this
10662                  currently matters, but someday it might).  */
10663               o->map_head.link_order = NULL;
10664
10665               /* Really remove the section.  */
10666               bfd_section_list_remove (abfd, o);
10667               --abfd->section_count;
10668
10669               continue;
10670             }
10671
10672           /* There is one gptab for initialized data, and one for
10673              uninitialized data.  */
10674           if (strcmp (o->name, ".gptab.sdata") == 0)
10675             gptab_data_sec = o;
10676           else if (strcmp (o->name, ".gptab.sbss") == 0)
10677             gptab_bss_sec = o;
10678           else
10679             {
10680               (*_bfd_error_handler)
10681                 (_("%s: illegal section name `%s'"),
10682                  bfd_get_filename (abfd), o->name);
10683               bfd_set_error (bfd_error_nonrepresentable_section);
10684               return FALSE;
10685             }
10686
10687           /* The linker script always combines .gptab.data and
10688              .gptab.sdata into .gptab.sdata, and likewise for
10689              .gptab.bss and .gptab.sbss.  It is possible that there is
10690              no .sdata or .sbss section in the output file, in which
10691              case we must change the name of the output section.  */
10692           subname = o->name + sizeof ".gptab" - 1;
10693           if (bfd_get_section_by_name (abfd, subname) == NULL)
10694             {
10695               if (o == gptab_data_sec)
10696                 o->name = ".gptab.data";
10697               else
10698                 o->name = ".gptab.bss";
10699               subname = o->name + sizeof ".gptab" - 1;
10700               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
10701             }
10702
10703           /* Set up the first entry.  */
10704           c = 1;
10705           amt = c * sizeof (Elf32_gptab);
10706           tab = bfd_malloc (amt);
10707           if (tab == NULL)
10708             return FALSE;
10709           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
10710           tab[0].gt_header.gt_unused = 0;
10711
10712           /* Combine the input sections.  */
10713           for (p = o->map_head.link_order; p != NULL; p = p->next)
10714             {
10715               asection *input_section;
10716               bfd *input_bfd;
10717               bfd_size_type size;
10718               unsigned long last;
10719               bfd_size_type gpentry;
10720
10721               if (p->type != bfd_indirect_link_order)
10722                 {
10723                   if (p->type == bfd_data_link_order)
10724                     continue;
10725                   abort ();
10726                 }
10727
10728               input_section = p->u.indirect.section;
10729               input_bfd = input_section->owner;
10730
10731               /* Combine the gptab entries for this input section one
10732                  by one.  We know that the input gptab entries are
10733                  sorted by ascending -G value.  */
10734               size = input_section->size;
10735               last = 0;
10736               for (gpentry = sizeof (Elf32_External_gptab);
10737                    gpentry < size;
10738                    gpentry += sizeof (Elf32_External_gptab))
10739                 {
10740                   Elf32_External_gptab ext_gptab;
10741                   Elf32_gptab int_gptab;
10742                   unsigned long val;
10743                   unsigned long add;
10744                   bfd_boolean exact;
10745                   unsigned int look;
10746
10747                   if (! (bfd_get_section_contents
10748                          (input_bfd, input_section, &ext_gptab, gpentry,
10749                           sizeof (Elf32_External_gptab))))
10750                     {
10751                       free (tab);
10752                       return FALSE;
10753                     }
10754
10755                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
10756                                                 &int_gptab);
10757                   val = int_gptab.gt_entry.gt_g_value;
10758                   add = int_gptab.gt_entry.gt_bytes - last;
10759
10760                   exact = FALSE;
10761                   for (look = 1; look < c; look++)
10762                     {
10763                       if (tab[look].gt_entry.gt_g_value >= val)
10764                         tab[look].gt_entry.gt_bytes += add;
10765
10766                       if (tab[look].gt_entry.gt_g_value == val)
10767                         exact = TRUE;
10768                     }
10769
10770                   if (! exact)
10771                     {
10772                       Elf32_gptab *new_tab;
10773                       unsigned int max;
10774
10775                       /* We need a new table entry.  */
10776                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
10777                       new_tab = bfd_realloc (tab, amt);
10778                       if (new_tab == NULL)
10779                         {
10780                           free (tab);
10781                           return FALSE;
10782                         }
10783                       tab = new_tab;
10784                       tab[c].gt_entry.gt_g_value = val;
10785                       tab[c].gt_entry.gt_bytes = add;
10786
10787                       /* Merge in the size for the next smallest -G
10788                          value, since that will be implied by this new
10789                          value.  */
10790                       max = 0;
10791                       for (look = 1; look < c; look++)
10792                         {
10793                           if (tab[look].gt_entry.gt_g_value < val
10794                               && (max == 0
10795                                   || (tab[look].gt_entry.gt_g_value
10796                                       > tab[max].gt_entry.gt_g_value)))
10797                             max = look;
10798                         }
10799                       if (max != 0)
10800                         tab[c].gt_entry.gt_bytes +=
10801                           tab[max].gt_entry.gt_bytes;
10802
10803                       ++c;
10804                     }
10805
10806                   last = int_gptab.gt_entry.gt_bytes;
10807                 }
10808
10809               /* Hack: reset the SEC_HAS_CONTENTS flag so that
10810                  elf_link_input_bfd ignores this section.  */
10811               input_section->flags &= ~SEC_HAS_CONTENTS;
10812             }
10813
10814           /* The table must be sorted by -G value.  */
10815           if (c > 2)
10816             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
10817
10818           /* Swap out the table.  */
10819           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
10820           ext_tab = bfd_alloc (abfd, amt);
10821           if (ext_tab == NULL)
10822             {
10823               free (tab);
10824               return FALSE;
10825             }
10826
10827           for (j = 0; j < c; j++)
10828             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
10829           free (tab);
10830
10831           o->size = c * sizeof (Elf32_External_gptab);
10832           o->contents = (bfd_byte *) ext_tab;
10833
10834           /* Skip this section later on (I don't think this currently
10835              matters, but someday it might).  */
10836           o->map_head.link_order = NULL;
10837         }
10838     }
10839
10840   /* Invoke the regular ELF backend linker to do all the work.  */
10841   if (!bfd_elf_final_link (abfd, info))
10842     return FALSE;
10843
10844   /* Now write out the computed sections.  */
10845
10846   if (reginfo_sec != NULL)
10847     {
10848       Elf32_External_RegInfo ext;
10849
10850       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
10851       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
10852         return FALSE;
10853     }
10854
10855   if (mdebug_sec != NULL)
10856     {
10857       BFD_ASSERT (abfd->output_has_begun);
10858       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
10859                                                swap, info,
10860                                                mdebug_sec->filepos))
10861         return FALSE;
10862
10863       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
10864     }
10865
10866   if (gptab_data_sec != NULL)
10867     {
10868       if (! bfd_set_section_contents (abfd, gptab_data_sec,
10869                                       gptab_data_sec->contents,
10870                                       0, gptab_data_sec->size))
10871         return FALSE;
10872     }
10873
10874   if (gptab_bss_sec != NULL)
10875     {
10876       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
10877                                       gptab_bss_sec->contents,
10878                                       0, gptab_bss_sec->size))
10879         return FALSE;
10880     }
10881
10882   if (SGI_COMPAT (abfd))
10883     {
10884       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
10885       if (rtproc_sec != NULL)
10886         {
10887           if (! bfd_set_section_contents (abfd, rtproc_sec,
10888                                           rtproc_sec->contents,
10889                                           0, rtproc_sec->size))
10890             return FALSE;
10891         }
10892     }
10893
10894   return TRUE;
10895 }
10896 \f
10897 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
10898
10899 struct mips_mach_extension {
10900   unsigned long extension, base;
10901 };
10902
10903
10904 /* An array describing how BFD machines relate to one another.  The entries
10905    are ordered topologically with MIPS I extensions listed last.  */
10906
10907 static const struct mips_mach_extension mips_mach_extensions[] = {
10908   /* MIPS64 extensions.  */
10909   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
10910   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
10911
10912   /* MIPS V extensions.  */
10913   { bfd_mach_mipsisa64, bfd_mach_mips5 },
10914
10915   /* R10000 extensions.  */
10916   { bfd_mach_mips12000, bfd_mach_mips10000 },
10917
10918   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
10919      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
10920      better to allow vr5400 and vr5500 code to be merged anyway, since
10921      many libraries will just use the core ISA.  Perhaps we could add
10922      some sort of ASE flag if this ever proves a problem.  */
10923   { bfd_mach_mips5500, bfd_mach_mips5400 },
10924   { bfd_mach_mips5400, bfd_mach_mips5000 },
10925
10926   /* MIPS IV extensions.  */
10927   { bfd_mach_mips5, bfd_mach_mips8000 },
10928   { bfd_mach_mips10000, bfd_mach_mips8000 },
10929   { bfd_mach_mips5000, bfd_mach_mips8000 },
10930   { bfd_mach_mips7000, bfd_mach_mips8000 },
10931   { bfd_mach_mips9000, bfd_mach_mips8000 },
10932
10933   /* VR4100 extensions.  */
10934   { bfd_mach_mips4120, bfd_mach_mips4100 },
10935   { bfd_mach_mips4111, bfd_mach_mips4100 },
10936
10937   /* MIPS III extensions.  */
10938   { bfd_mach_mips8000, bfd_mach_mips4000 },
10939   { bfd_mach_mips4650, bfd_mach_mips4000 },
10940   { bfd_mach_mips4600, bfd_mach_mips4000 },
10941   { bfd_mach_mips4400, bfd_mach_mips4000 },
10942   { bfd_mach_mips4300, bfd_mach_mips4000 },
10943   { bfd_mach_mips4100, bfd_mach_mips4000 },
10944   { bfd_mach_mips4010, bfd_mach_mips4000 },
10945
10946   /* MIPS32 extensions.  */
10947   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
10948
10949   /* MIPS II extensions.  */
10950   { bfd_mach_mips4000, bfd_mach_mips6000 },
10951   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
10952
10953   /* MIPS I extensions.  */
10954   { bfd_mach_mips6000, bfd_mach_mips3000 },
10955   { bfd_mach_mips3900, bfd_mach_mips3000 }
10956 };
10957
10958
10959 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
10960
10961 static bfd_boolean
10962 mips_mach_extends_p (unsigned long base, unsigned long extension)
10963 {
10964   size_t i;
10965
10966   if (extension == base)
10967     return TRUE;
10968
10969   if (base == bfd_mach_mipsisa32
10970       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
10971     return TRUE;
10972
10973   if (base == bfd_mach_mipsisa32r2
10974       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
10975     return TRUE;
10976
10977   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
10978     if (extension == mips_mach_extensions[i].extension)
10979       {
10980         extension = mips_mach_extensions[i].base;
10981         if (extension == base)
10982           return TRUE;
10983       }
10984
10985   return FALSE;
10986 }
10987
10988
10989 /* Return true if the given ELF header flags describe a 32-bit binary.  */
10990
10991 static bfd_boolean
10992 mips_32bit_flags_p (flagword flags)
10993 {
10994   return ((flags & EF_MIPS_32BITMODE) != 0
10995           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
10996           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
10997           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
10998           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
10999           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
11000           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
11001 }
11002
11003
11004 /* Merge object attributes from IBFD into OBFD.  Raise an error if
11005    there are conflicting attributes.  */
11006 static bfd_boolean
11007 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
11008 {
11009   obj_attribute *in_attr;
11010   obj_attribute *out_attr;
11011
11012   if (!elf_known_obj_attributes_proc (obfd)[0].i)
11013     {
11014       /* This is the first object.  Copy the attributes.  */
11015       _bfd_elf_copy_obj_attributes (ibfd, obfd);
11016
11017       /* Use the Tag_null value to indicate the attributes have been
11018          initialized.  */
11019       elf_known_obj_attributes_proc (obfd)[0].i = 1;
11020
11021       return TRUE;
11022     }
11023
11024   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
11025      non-conflicting ones.  */
11026   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
11027   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
11028   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
11029     {
11030       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
11031       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
11032         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
11033       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
11034         ;
11035       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i > 3)
11036         _bfd_error_handler
11037           (_("Warning: %B uses unknown floating point ABI %d"), ibfd,
11038            in_attr[Tag_GNU_MIPS_ABI_FP].i);
11039       else if (out_attr[Tag_GNU_MIPS_ABI_FP].i > 3)
11040         _bfd_error_handler
11041           (_("Warning: %B uses unknown floating point ABI %d"), obfd,
11042            out_attr[Tag_GNU_MIPS_ABI_FP].i);
11043       else
11044         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
11045           {
11046           case 1:
11047             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
11048               {
11049               case 2:
11050                 _bfd_error_handler
11051                   (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
11052                    obfd, ibfd);
11053
11054               case 3:
11055                 _bfd_error_handler
11056                   (_("Warning: %B uses hard float, %B uses soft float"),
11057                    obfd, ibfd);
11058                 break;
11059
11060               default:
11061                 abort ();
11062               }
11063             break;
11064
11065           case 2:
11066             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
11067               {
11068               case 1:
11069                 _bfd_error_handler
11070                   (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
11071                    ibfd, obfd);
11072
11073               case 3:
11074                 _bfd_error_handler
11075                   (_("Warning: %B uses hard float, %B uses soft float"),
11076                    obfd, ibfd);
11077                 break;
11078
11079               default:
11080                 abort ();
11081               }
11082             break;
11083
11084           case 3:
11085             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
11086               {
11087               case 1:
11088               case 2:
11089                 _bfd_error_handler
11090                   (_("Warning: %B uses hard float, %B uses soft float"),
11091                    ibfd, obfd);
11092                 break;
11093
11094               default:
11095                 abort ();
11096               }
11097             break;
11098
11099           default:
11100             abort ();
11101           }
11102     }
11103
11104   /* Merge Tag_compatibility attributes and any common GNU ones.  */
11105   _bfd_elf_merge_object_attributes (ibfd, obfd);
11106
11107   return TRUE;
11108 }
11109
11110 /* Merge backend specific data from an object file to the output
11111    object file when linking.  */
11112
11113 bfd_boolean
11114 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
11115 {
11116   flagword old_flags;
11117   flagword new_flags;
11118   bfd_boolean ok;
11119   bfd_boolean null_input_bfd = TRUE;
11120   asection *sec;
11121
11122   /* Check if we have the same endianess */
11123   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
11124     {
11125       (*_bfd_error_handler)
11126         (_("%B: endianness incompatible with that of the selected emulation"),
11127          ibfd);
11128       return FALSE;
11129     }
11130
11131   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
11132       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
11133     return TRUE;
11134
11135   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
11136     {
11137       (*_bfd_error_handler)
11138         (_("%B: ABI is incompatible with that of the selected emulation"),
11139          ibfd);
11140       return FALSE;
11141     }
11142
11143   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
11144     return FALSE;
11145
11146   new_flags = elf_elfheader (ibfd)->e_flags;
11147   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
11148   old_flags = elf_elfheader (obfd)->e_flags;
11149
11150   if (! elf_flags_init (obfd))
11151     {
11152       elf_flags_init (obfd) = TRUE;
11153       elf_elfheader (obfd)->e_flags = new_flags;
11154       elf_elfheader (obfd)->e_ident[EI_CLASS]
11155         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
11156
11157       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
11158           && (bfd_get_arch_info (obfd)->the_default
11159               || mips_mach_extends_p (bfd_get_mach (obfd), 
11160                                       bfd_get_mach (ibfd))))
11161         {
11162           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
11163                                    bfd_get_mach (ibfd)))
11164             return FALSE;
11165         }
11166
11167       return TRUE;
11168     }
11169
11170   /* Check flag compatibility.  */
11171
11172   new_flags &= ~EF_MIPS_NOREORDER;
11173   old_flags &= ~EF_MIPS_NOREORDER;
11174
11175   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
11176      doesn't seem to matter.  */
11177   new_flags &= ~EF_MIPS_XGOT;
11178   old_flags &= ~EF_MIPS_XGOT;
11179
11180   /* MIPSpro generates ucode info in n64 objects.  Again, we should
11181      just be able to ignore this.  */
11182   new_flags &= ~EF_MIPS_UCODE;
11183   old_flags &= ~EF_MIPS_UCODE;
11184
11185   /* Don't care about the PIC flags from dynamic objects; they are
11186      PIC by design.  */
11187   if ((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0
11188       && (ibfd->flags & DYNAMIC) != 0)
11189     new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
11190
11191   if (new_flags == old_flags)
11192     return TRUE;
11193
11194   /* Check to see if the input BFD actually contains any sections.
11195      If not, its flags may not have been initialised either, but it cannot
11196      actually cause any incompatibility.  */
11197   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
11198     {
11199       /* Ignore synthetic sections and empty .text, .data and .bss sections
11200           which are automatically generated by gas.  */
11201       if (strcmp (sec->name, ".reginfo")
11202           && strcmp (sec->name, ".mdebug")
11203           && (sec->size != 0
11204               || (strcmp (sec->name, ".text")
11205                   && strcmp (sec->name, ".data")
11206                   && strcmp (sec->name, ".bss"))))
11207         {
11208           null_input_bfd = FALSE;
11209           break;
11210         }
11211     }
11212   if (null_input_bfd)
11213     return TRUE;
11214
11215   ok = TRUE;
11216
11217   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
11218       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
11219     {
11220       (*_bfd_error_handler)
11221         (_("%B: warning: linking PIC files with non-PIC files"),
11222          ibfd);
11223       ok = TRUE;
11224     }
11225
11226   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
11227     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
11228   if (! (new_flags & EF_MIPS_PIC))
11229     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
11230
11231   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
11232   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
11233
11234   /* Compare the ISAs.  */
11235   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
11236     {
11237       (*_bfd_error_handler)
11238         (_("%B: linking 32-bit code with 64-bit code"),
11239          ibfd);
11240       ok = FALSE;
11241     }
11242   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
11243     {
11244       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
11245       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
11246         {
11247           /* Copy the architecture info from IBFD to OBFD.  Also copy
11248              the 32-bit flag (if set) so that we continue to recognise
11249              OBFD as a 32-bit binary.  */
11250           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
11251           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11252           elf_elfheader (obfd)->e_flags
11253             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
11254
11255           /* Copy across the ABI flags if OBFD doesn't use them
11256              and if that was what caused us to treat IBFD as 32-bit.  */
11257           if ((old_flags & EF_MIPS_ABI) == 0
11258               && mips_32bit_flags_p (new_flags)
11259               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
11260             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
11261         }
11262       else
11263         {
11264           /* The ISAs aren't compatible.  */
11265           (*_bfd_error_handler)
11266             (_("%B: linking %s module with previous %s modules"),
11267              ibfd,
11268              bfd_printable_name (ibfd),
11269              bfd_printable_name (obfd));
11270           ok = FALSE;
11271         }
11272     }
11273
11274   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
11275   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
11276
11277   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
11278      does set EI_CLASS differently from any 32-bit ABI.  */
11279   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
11280       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
11281           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
11282     {
11283       /* Only error if both are set (to different values).  */
11284       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
11285           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
11286               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
11287         {
11288           (*_bfd_error_handler)
11289             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
11290              ibfd,
11291              elf_mips_abi_name (ibfd),
11292              elf_mips_abi_name (obfd));
11293           ok = FALSE;
11294         }
11295       new_flags &= ~EF_MIPS_ABI;
11296       old_flags &= ~EF_MIPS_ABI;
11297     }
11298
11299   /* For now, allow arbitrary mixing of ASEs (retain the union).  */
11300   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
11301     {
11302       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
11303
11304       new_flags &= ~ EF_MIPS_ARCH_ASE;
11305       old_flags &= ~ EF_MIPS_ARCH_ASE;
11306     }
11307
11308   /* Warn about any other mismatches */
11309   if (new_flags != old_flags)
11310     {
11311       (*_bfd_error_handler)
11312         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
11313          ibfd, (unsigned long) new_flags,
11314          (unsigned long) old_flags);
11315       ok = FALSE;
11316     }
11317
11318   if (! ok)
11319     {
11320       bfd_set_error (bfd_error_bad_value);
11321       return FALSE;
11322     }
11323
11324   return TRUE;
11325 }
11326
11327 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
11328
11329 bfd_boolean
11330 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
11331 {
11332   BFD_ASSERT (!elf_flags_init (abfd)
11333               || elf_elfheader (abfd)->e_flags == flags);
11334
11335   elf_elfheader (abfd)->e_flags = flags;
11336   elf_flags_init (abfd) = TRUE;
11337   return TRUE;
11338 }
11339
11340 bfd_boolean
11341 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
11342 {
11343   FILE *file = ptr;
11344
11345   BFD_ASSERT (abfd != NULL && ptr != NULL);
11346
11347   /* Print normal ELF private data.  */
11348   _bfd_elf_print_private_bfd_data (abfd, ptr);
11349
11350   /* xgettext:c-format */
11351   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
11352
11353   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
11354     fprintf (file, _(" [abi=O32]"));
11355   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
11356     fprintf (file, _(" [abi=O64]"));
11357   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
11358     fprintf (file, _(" [abi=EABI32]"));
11359   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
11360     fprintf (file, _(" [abi=EABI64]"));
11361   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
11362     fprintf (file, _(" [abi unknown]"));
11363   else if (ABI_N32_P (abfd))
11364     fprintf (file, _(" [abi=N32]"));
11365   else if (ABI_64_P (abfd))
11366     fprintf (file, _(" [abi=64]"));
11367   else
11368     fprintf (file, _(" [no abi set]"));
11369
11370   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
11371     fprintf (file, " [mips1]");
11372   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
11373     fprintf (file, " [mips2]");
11374   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
11375     fprintf (file, " [mips3]");
11376   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
11377     fprintf (file, " [mips4]");
11378   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
11379     fprintf (file, " [mips5]");
11380   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
11381     fprintf (file, " [mips32]");
11382   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
11383     fprintf (file, " [mips64]");
11384   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
11385     fprintf (file, " [mips32r2]");
11386   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
11387     fprintf (file, " [mips64r2]");
11388   else
11389     fprintf (file, _(" [unknown ISA]"));
11390
11391   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
11392     fprintf (file, " [mdmx]");
11393
11394   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
11395     fprintf (file, " [mips16]");
11396
11397   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
11398     fprintf (file, " [32bitmode]");
11399   else
11400     fprintf (file, _(" [not 32bitmode]"));
11401
11402   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
11403     fprintf (file, " [noreorder]");
11404
11405   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
11406     fprintf (file, " [PIC]");
11407
11408   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
11409     fprintf (file, " [CPIC]");
11410
11411   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
11412     fprintf (file, " [XGOT]");
11413
11414   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
11415     fprintf (file, " [UCODE]");
11416
11417   fputc ('\n', file);
11418
11419   return TRUE;
11420 }
11421
11422 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
11423 {
11424   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
11425   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
11426   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
11427   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
11428   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
11429   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
11430   { NULL,                     0,  0, 0,              0 }
11431 };
11432
11433 /* Merge non visibility st_other attributes.  Ensure that the
11434    STO_OPTIONAL flag is copied into h->other, even if this is not a
11435    definiton of the symbol.  */
11436 void
11437 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
11438                                       const Elf_Internal_Sym *isym,
11439                                       bfd_boolean definition,
11440                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
11441 {
11442   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
11443     {
11444       unsigned char other;
11445
11446       other = (definition ? isym->st_other : h->other);
11447       other &= ~ELF_ST_VISIBILITY (-1);
11448       h->other = other | ELF_ST_VISIBILITY (h->other);
11449     }
11450
11451   if (!definition
11452       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
11453     h->other |= STO_OPTIONAL;
11454 }
11455
11456 /* Decide whether an undefined symbol is special and can be ignored.
11457    This is the case for OPTIONAL symbols on IRIX.  */
11458 bfd_boolean
11459 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
11460 {
11461   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
11462 }
11463
11464 bfd_boolean
11465 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
11466 {
11467   return (sym->st_shndx == SHN_COMMON
11468           || sym->st_shndx == SHN_MIPS_ACOMMON
11469           || sym->st_shndx == SHN_MIPS_SCOMMON);
11470 }