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