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