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