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