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