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