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