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