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