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