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