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