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