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