1 /* MIPS-specific support for ELF
2 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003 Free Software Foundation, Inc.
5 Most of the information added by Ian Lance Taylor, Cygnus Support,
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>
12 This file is part of BFD, the Binary File Descriptor library.
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.
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.
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. */
28 /* This file handles functionality common to the different MIPS ABI's. */
33 #include "libiberty.h"
35 #include "elfxx-mips.h"
38 /* Get the ECOFF swapping routines. */
40 #include "coff/symconst.h"
41 #include "coff/ecoff.h"
42 #include "coff/mips.h"
46 /* This structure is used to hold .got entries while estimating got
50 /* The input bfd in which the symbol is defined. */
52 /* The index of the symbol, as stored in the relocation r_info, if
53 we have a local symbol; -1 otherwise. */
57 /* If abfd == NULL, an address that must be stored in the got. */
59 /* If abfd != NULL && symndx != -1, the addend of the relocation
60 that should be added to the symbol value. */
62 /* If abfd != NULL && symndx == -1, the hash table entry
63 corresponding to a global symbol in the got (or, local, if
65 struct mips_elf_link_hash_entry *h;
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. */
73 /* This structure is used to hold .got information when linking. */
77 /* The global symbol in the GOT with the lowest index in the dynamic
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. */
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;
96 /* Map an input bfd to a got in a multi-got link. */
98 struct mips_elf_bfd2got_hash {
100 struct mips_got_info *g;
103 /* Structure passed when traversing the bfd2got hash table, used to
104 create and merge bfd's gots. */
106 struct mips_elf_got_per_bfd_arg
108 /* A hashtable that maps bfds to gots. */
110 /* The output bfd. */
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
117 struct mips_got_info *primary;
118 /* A non-primary got we're trying to merge with other input bfd's
120 struct mips_got_info *current;
121 /* The maximum number of got entries that can be addressed with a
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;
130 /* Another structure used to pass arguments for got entries traversal. */
132 struct mips_elf_set_global_got_offset_arg
134 struct mips_got_info *g;
136 unsigned int needed_relocs;
137 struct bfd_link_info *info;
140 struct _mips_elf_section_data
142 struct bfd_elf_section_data elf;
145 struct mips_got_info *got_info;
150 #define mips_elf_section_data(sec) \
151 ((struct _mips_elf_section_data *) elf_section_data (sec))
153 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
154 the dynamic symbols. */
156 struct mips_elf_hash_sort_data
158 /* The symbol in the global GOT with the lowest dynamic symbol table
160 struct elf_link_hash_entry *low;
161 /* The least dynamic symbol table index corresponding to a symbol
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;
173 /* The MIPS ELF linker needs additional information for each symbol in
174 the global hash table. */
176 struct mips_elf_link_hash_entry
178 struct elf_link_hash_entry root;
180 /* External symbol information. */
183 /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
185 unsigned int possibly_dynamic_relocs;
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;
191 /* We must not create a stub for a symbol that has relocations
192 related to taking the function's address, i.e. any but
193 R_MIPS_CALL*16 ones -- see "MIPS ABI Supplement, 3rd Edition",
195 bfd_boolean no_fn_stub;
197 /* If there is a stub that 32 bit functions should use to call this
198 16 bit function, this points to the section containing the stub. */
201 /* Whether we need the fn_stub; this is set if this symbol appears
202 in any relocs other than a 16 bit call. */
203 bfd_boolean need_fn_stub;
205 /* If there is a stub that 16 bit functions should use to call this
206 32 bit function, this points to the section containing the stub. */
209 /* This is like the call_stub field, but it is used if the function
210 being called returns a floating point value. */
211 asection *call_fp_stub;
213 /* Are we forced local? .*/
214 bfd_boolean forced_local;
217 /* MIPS ELF linker hash table. */
219 struct mips_elf_link_hash_table
221 struct elf_link_hash_table root;
223 /* We no longer use this. */
224 /* String section indices for the dynamic section symbols. */
225 bfd_size_type dynsym_sec_strindex[SIZEOF_MIPS_DYNSYM_SECNAMES];
227 /* The number of .rtproc entries. */
228 bfd_size_type procedure_count;
229 /* The size of the .compact_rel section (if SGI_COMPAT). */
230 bfd_size_type compact_rel_size;
231 /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic
232 entry is set to the address of __rld_obj_head as in IRIX5. */
233 bfd_boolean use_rld_obj_head;
234 /* This is the value of the __rld_map or __rld_obj_head symbol. */
236 /* This is set if we see any mips16 stub sections. */
237 bfd_boolean mips16_stubs_seen;
240 /* Structure used to pass information to mips_elf_output_extsym. */
245 struct bfd_link_info *info;
246 struct ecoff_debug_info *debug;
247 const struct ecoff_debug_swap *swap;
251 /* The names of the runtime procedure table symbols used on IRIX5. */
253 static const char * const mips_elf_dynsym_rtproc_names[] =
256 "_procedure_string_table",
257 "_procedure_table_size",
261 /* These structures are used to generate the .compact_rel section on
266 unsigned long id1; /* Always one? */
267 unsigned long num; /* Number of compact relocation entries. */
268 unsigned long id2; /* Always two? */
269 unsigned long offset; /* The file offset of the first relocation. */
270 unsigned long reserved0; /* Zero? */
271 unsigned long reserved1; /* Zero? */
280 bfd_byte reserved0[4];
281 bfd_byte reserved1[4];
282 } Elf32_External_compact_rel;
286 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
287 unsigned int rtype : 4; /* Relocation types. See below. */
288 unsigned int dist2to : 8;
289 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
290 unsigned long konst; /* KONST field. See below. */
291 unsigned long vaddr; /* VADDR to be relocated. */
296 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
297 unsigned int rtype : 4; /* Relocation types. See below. */
298 unsigned int dist2to : 8;
299 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
300 unsigned long konst; /* KONST field. See below. */
308 } Elf32_External_crinfo;
314 } Elf32_External_crinfo2;
316 /* These are the constants used to swap the bitfields in a crinfo. */
318 #define CRINFO_CTYPE (0x1)
319 #define CRINFO_CTYPE_SH (31)
320 #define CRINFO_RTYPE (0xf)
321 #define CRINFO_RTYPE_SH (27)
322 #define CRINFO_DIST2TO (0xff)
323 #define CRINFO_DIST2TO_SH (19)
324 #define CRINFO_RELVADDR (0x7ffff)
325 #define CRINFO_RELVADDR_SH (0)
327 /* A compact relocation info has long (3 words) or short (2 words)
328 formats. A short format doesn't have VADDR field and relvaddr
329 fields contains ((VADDR - vaddr of the previous entry) >> 2). */
330 #define CRF_MIPS_LONG 1
331 #define CRF_MIPS_SHORT 0
333 /* There are 4 types of compact relocation at least. The value KONST
334 has different meaning for each type:
337 CT_MIPS_REL32 Address in data
338 CT_MIPS_WORD Address in word (XXX)
339 CT_MIPS_GPHI_LO GP - vaddr
340 CT_MIPS_JMPAD Address to jump
343 #define CRT_MIPS_REL32 0xa
344 #define CRT_MIPS_WORD 0xb
345 #define CRT_MIPS_GPHI_LO 0xc
346 #define CRT_MIPS_JMPAD 0xd
348 #define mips_elf_set_cr_format(x,format) ((x).ctype = (format))
349 #define mips_elf_set_cr_type(x,type) ((x).rtype = (type))
350 #define mips_elf_set_cr_dist2to(x,v) ((x).dist2to = (v))
351 #define mips_elf_set_cr_relvaddr(x,d) ((x).relvaddr = (d)<<2)
353 /* The structure of the runtime procedure descriptor created by the
354 loader for use by the static exception system. */
356 typedef struct runtime_pdr {
357 bfd_vma adr; /* Memory address of start of procedure. */
358 long regmask; /* Save register mask. */
359 long regoffset; /* Save register offset. */
360 long fregmask; /* Save floating point register mask. */
361 long fregoffset; /* Save floating point register offset. */
362 long frameoffset; /* Frame size. */
363 short framereg; /* Frame pointer register. */
364 short pcreg; /* Offset or reg of return pc. */
365 long irpss; /* Index into the runtime string table. */
367 struct exception_info *exception_info;/* Pointer to exception array. */
369 #define cbRPDR sizeof (RPDR)
370 #define rpdNil ((pRPDR) 0)
372 static struct bfd_hash_entry *mips_elf_link_hash_newfunc
373 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
374 static void ecoff_swap_rpdr_out
375 PARAMS ((bfd *, const RPDR *, struct rpdr_ext *));
376 static bfd_boolean mips_elf_create_procedure_table
377 PARAMS ((PTR, bfd *, struct bfd_link_info *, asection *,
378 struct ecoff_debug_info *));
379 static bfd_boolean mips_elf_check_mips16_stubs
380 PARAMS ((struct mips_elf_link_hash_entry *, PTR));
381 static void bfd_mips_elf32_swap_gptab_in
382 PARAMS ((bfd *, const Elf32_External_gptab *, Elf32_gptab *));
383 static void bfd_mips_elf32_swap_gptab_out
384 PARAMS ((bfd *, const Elf32_gptab *, Elf32_External_gptab *));
385 static void bfd_elf32_swap_compact_rel_out
386 PARAMS ((bfd *, const Elf32_compact_rel *, Elf32_External_compact_rel *));
387 static void bfd_elf32_swap_crinfo_out
388 PARAMS ((bfd *, const Elf32_crinfo *, Elf32_External_crinfo *));
389 static int sort_dynamic_relocs
390 PARAMS ((const void *, const void *));
391 static int sort_dynamic_relocs_64
392 PARAMS ((const void *, const void *));
393 static bfd_boolean mips_elf_output_extsym
394 PARAMS ((struct mips_elf_link_hash_entry *, PTR));
395 static int gptab_compare PARAMS ((const void *, const void *));
396 static asection * mips_elf_rel_dyn_section PARAMS ((bfd *, bfd_boolean));
397 static asection * mips_elf_got_section PARAMS ((bfd *, bfd_boolean));
398 static struct mips_got_info *mips_elf_got_info
399 PARAMS ((bfd *, asection **));
400 static long mips_elf_get_global_gotsym_index PARAMS ((bfd *abfd));
401 static bfd_vma mips_elf_local_got_index
402 PARAMS ((bfd *, bfd *, struct bfd_link_info *, bfd_vma));
403 static bfd_vma mips_elf_global_got_index
404 PARAMS ((bfd *, bfd *, struct elf_link_hash_entry *));
405 static bfd_vma mips_elf_got_page
406 PARAMS ((bfd *, bfd *, struct bfd_link_info *, bfd_vma, bfd_vma *));
407 static bfd_vma mips_elf_got16_entry
408 PARAMS ((bfd *, bfd *, struct bfd_link_info *, bfd_vma, bfd_boolean));
409 static bfd_vma mips_elf_got_offset_from_index
410 PARAMS ((bfd *, bfd *, bfd *, bfd_vma));
411 static struct mips_got_entry *mips_elf_create_local_got_entry
412 PARAMS ((bfd *, bfd *, struct mips_got_info *, asection *, bfd_vma));
413 static bfd_boolean mips_elf_sort_hash_table
414 PARAMS ((struct bfd_link_info *, unsigned long));
415 static bfd_boolean mips_elf_sort_hash_table_f
416 PARAMS ((struct mips_elf_link_hash_entry *, PTR));
417 static bfd_boolean mips_elf_record_local_got_symbol
418 PARAMS ((bfd *, long, bfd_vma, struct mips_got_info *));
419 static bfd_boolean mips_elf_record_global_got_symbol
420 PARAMS ((struct elf_link_hash_entry *, bfd *, struct bfd_link_info *,
421 struct mips_got_info *));
422 static const Elf_Internal_Rela *mips_elf_next_relocation
423 PARAMS ((bfd *, unsigned int, const Elf_Internal_Rela *,
424 const Elf_Internal_Rela *));
425 static bfd_boolean mips_elf_local_relocation_p
426 PARAMS ((bfd *, const Elf_Internal_Rela *, asection **, bfd_boolean));
427 static bfd_boolean mips_elf_overflow_p PARAMS ((bfd_vma, int));
428 static bfd_vma mips_elf_high PARAMS ((bfd_vma));
429 static bfd_vma mips_elf_higher PARAMS ((bfd_vma));
430 static bfd_vma mips_elf_highest PARAMS ((bfd_vma));
431 static bfd_boolean mips_elf_create_compact_rel_section
432 PARAMS ((bfd *, struct bfd_link_info *));
433 static bfd_boolean mips_elf_create_got_section
434 PARAMS ((bfd *, struct bfd_link_info *, bfd_boolean));
435 static bfd_reloc_status_type mips_elf_calculate_relocation
436 PARAMS ((bfd *, bfd *, asection *, struct bfd_link_info *,
437 const Elf_Internal_Rela *, bfd_vma, reloc_howto_type *,
438 Elf_Internal_Sym *, asection **, bfd_vma *, const char **,
439 bfd_boolean *, bfd_boolean));
440 static bfd_vma mips_elf_obtain_contents
441 PARAMS ((reloc_howto_type *, const Elf_Internal_Rela *, bfd *, bfd_byte *));
442 static bfd_boolean mips_elf_perform_relocation
443 PARAMS ((struct bfd_link_info *, reloc_howto_type *,
444 const Elf_Internal_Rela *, bfd_vma, bfd *, asection *, bfd_byte *,
446 static bfd_boolean mips_elf_stub_section_p
447 PARAMS ((bfd *, asection *));
448 static void mips_elf_allocate_dynamic_relocations
449 PARAMS ((bfd *, unsigned int));
450 static bfd_boolean mips_elf_create_dynamic_relocation
451 PARAMS ((bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
452 struct mips_elf_link_hash_entry *, asection *,
453 bfd_vma, bfd_vma *, asection *));
454 static void mips_set_isa_flags PARAMS ((bfd *));
455 static INLINE char* elf_mips_abi_name PARAMS ((bfd *));
456 static void mips_elf_irix6_finish_dynamic_symbol
457 PARAMS ((bfd *, const char *, Elf_Internal_Sym *));
458 static bfd_boolean mips_mach_extends_p PARAMS ((unsigned long, unsigned long));
459 static bfd_boolean mips_32bit_flags_p PARAMS ((flagword));
460 static INLINE hashval_t mips_elf_hash_bfd_vma PARAMS ((bfd_vma));
461 static hashval_t mips_elf_got_entry_hash PARAMS ((const PTR));
462 static int mips_elf_got_entry_eq PARAMS ((const PTR, const PTR));
464 static bfd_boolean mips_elf_multi_got
465 PARAMS ((bfd *, struct bfd_link_info *, struct mips_got_info *,
466 asection *, bfd_size_type));
467 static hashval_t mips_elf_multi_got_entry_hash PARAMS ((const PTR));
468 static int mips_elf_multi_got_entry_eq PARAMS ((const PTR, const PTR));
469 static hashval_t mips_elf_bfd2got_entry_hash PARAMS ((const PTR));
470 static int mips_elf_bfd2got_entry_eq PARAMS ((const PTR, const PTR));
471 static int mips_elf_make_got_per_bfd PARAMS ((void **, void *));
472 static int mips_elf_merge_gots PARAMS ((void **, void *));
473 static int mips_elf_set_global_got_offset PARAMS ((void**, void *));
474 static int mips_elf_resolve_final_got_entry PARAMS ((void**, void *));
475 static void mips_elf_resolve_final_got_entries
476 PARAMS ((struct mips_got_info *));
477 static bfd_vma mips_elf_adjust_gp
478 PARAMS ((bfd *, struct mips_got_info *, bfd *));
479 static struct mips_got_info *mips_elf_got_for_ibfd
480 PARAMS ((struct mips_got_info *, bfd *));
482 /* This will be used when we sort the dynamic relocation records. */
483 static bfd *reldyn_sorting_bfd;
485 /* Nonzero if ABFD is using the N32 ABI. */
487 #define ABI_N32_P(abfd) \
488 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
490 /* Nonzero if ABFD is using the N64 ABI. */
491 #define ABI_64_P(abfd) \
492 (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
494 /* Nonzero if ABFD is using NewABI conventions. */
495 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
497 /* The IRIX compatibility level we are striving for. */
498 #define IRIX_COMPAT(abfd) \
499 (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
501 /* Whether we are trying to be compatible with IRIX at all. */
502 #define SGI_COMPAT(abfd) \
503 (IRIX_COMPAT (abfd) != ict_none)
505 /* The name of the options section. */
506 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
507 (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
509 /* The name of the stub section. */
510 #define MIPS_ELF_STUB_SECTION_NAME(abfd) \
511 (NEWABI_P (abfd) ? ".MIPS.stubs" : ".stub")
513 /* The size of an external REL relocation. */
514 #define MIPS_ELF_REL_SIZE(abfd) \
515 (get_elf_backend_data (abfd)->s->sizeof_rel)
517 /* The size of an external dynamic table entry. */
518 #define MIPS_ELF_DYN_SIZE(abfd) \
519 (get_elf_backend_data (abfd)->s->sizeof_dyn)
521 /* The size of a GOT entry. */
522 #define MIPS_ELF_GOT_SIZE(abfd) \
523 (get_elf_backend_data (abfd)->s->arch_size / 8)
525 /* The size of a symbol-table entry. */
526 #define MIPS_ELF_SYM_SIZE(abfd) \
527 (get_elf_backend_data (abfd)->s->sizeof_sym)
529 /* The default alignment for sections, as a power of two. */
530 #define MIPS_ELF_LOG_FILE_ALIGN(abfd) \
531 (get_elf_backend_data (abfd)->s->log_file_align)
533 /* Get word-sized data. */
534 #define MIPS_ELF_GET_WORD(abfd, ptr) \
535 (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
537 /* Put out word-sized data. */
538 #define MIPS_ELF_PUT_WORD(abfd, val, ptr) \
540 ? bfd_put_64 (abfd, val, ptr) \
541 : bfd_put_32 (abfd, val, ptr))
543 /* Add a dynamic symbol table-entry. */
545 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \
546 (ABI_64_P (elf_hash_table (info)->dynobj) \
547 ? bfd_elf64_add_dynamic_entry (info, (bfd_vma) tag, (bfd_vma) val) \
548 : bfd_elf32_add_dynamic_entry (info, (bfd_vma) tag, (bfd_vma) val))
550 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \
551 (ABI_64_P (elf_hash_table (info)->dynobj) \
552 ? (abort (), FALSE) \
553 : bfd_elf32_add_dynamic_entry (info, (bfd_vma) tag, (bfd_vma) val))
556 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela) \
557 (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
559 /* Determine whether the internal relocation of index REL_IDX is REL
560 (zero) or RELA (non-zero). The assumption is that, if there are
561 two relocation sections for this section, one of them is REL and
562 the other is RELA. If the index of the relocation we're testing is
563 in range for the first relocation section, check that the external
564 relocation size is that for RELA. It is also assumed that, if
565 rel_idx is not in range for the first section, and this first
566 section contains REL relocs, then the relocation is in the second
567 section, that is RELA. */
568 #define MIPS_RELOC_RELA_P(abfd, sec, rel_idx) \
569 ((NUM_SHDR_ENTRIES (&elf_section_data (sec)->rel_hdr) \
570 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel \
571 > (bfd_vma)(rel_idx)) \
572 == (elf_section_data (sec)->rel_hdr.sh_entsize \
573 == (ABI_64_P (abfd) ? sizeof (Elf64_External_Rela) \
574 : sizeof (Elf32_External_Rela))))
576 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
577 from smaller values. Start with zero, widen, *then* decrement. */
578 #define MINUS_ONE (((bfd_vma)0) - 1)
580 /* The number of local .got entries we reserve. */
581 #define MIPS_RESERVED_GOTNO (2)
583 /* The offset of $gp from the beginning of the .got section. */
584 #define ELF_MIPS_GP_OFFSET(abfd) (0x7ff0)
586 /* The maximum size of the GOT for it to be addressable using 16-bit
588 #define MIPS_ELF_GOT_MAX_SIZE(abfd) (ELF_MIPS_GP_OFFSET(abfd) + 0x7fff)
590 /* Instructions which appear in a stub. For some reason the stub is
591 slightly different on an SGI system. */
592 #define STUB_LW(abfd) \
594 ? 0xdf998010 /* ld t9,0x8010(gp) */ \
595 : 0x8f998010)) /* lw t9,0x8010(gp) */
596 #define STUB_MOVE(abfd) \
597 (SGI_COMPAT (abfd) ? 0x03e07825 : 0x03e07821) /* move t7,ra */
598 #define STUB_JALR 0x0320f809 /* jal t9 */
599 #define STUB_LI16(abfd) \
600 (SGI_COMPAT (abfd) ? 0x34180000 : 0x24180000) /* ori t8,zero,0 */
601 #define MIPS_FUNCTION_STUB_SIZE (16)
603 /* The name of the dynamic interpreter. This is put in the .interp
606 #define ELF_DYNAMIC_INTERPRETER(abfd) \
607 (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" \
608 : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" \
609 : "/usr/lib/libc.so.1")
612 #define MNAME(bfd,pre,pos) \
613 (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
614 #define ELF_R_SYM(bfd, i) \
615 (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
616 #define ELF_R_TYPE(bfd, i) \
617 (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
618 #define ELF_R_INFO(bfd, s, t) \
619 (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
621 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
622 #define ELF_R_SYM(bfd, i) \
624 #define ELF_R_TYPE(bfd, i) \
626 #define ELF_R_INFO(bfd, s, t) \
627 (ELF32_R_INFO (s, t))
630 /* The mips16 compiler uses a couple of special sections to handle
631 floating point arguments.
633 Section names that look like .mips16.fn.FNNAME contain stubs that
634 copy floating point arguments from the fp regs to the gp regs and
635 then jump to FNNAME. If any 32 bit function calls FNNAME, the
636 call should be redirected to the stub instead. If no 32 bit
637 function calls FNNAME, the stub should be discarded. We need to
638 consider any reference to the function, not just a call, because
639 if the address of the function is taken we will need the stub,
640 since the address might be passed to a 32 bit function.
642 Section names that look like .mips16.call.FNNAME contain stubs
643 that copy floating point arguments from the gp regs to the fp
644 regs and then jump to FNNAME. If FNNAME is a 32 bit function,
645 then any 16 bit function that calls FNNAME should be redirected
646 to the stub instead. If FNNAME is not a 32 bit function, the
647 stub should be discarded.
649 .mips16.call.fp.FNNAME sections are similar, but contain stubs
650 which call FNNAME and then copy the return value from the fp regs
651 to the gp regs. These stubs store the return value in $18 while
652 calling FNNAME; any function which might call one of these stubs
653 must arrange to save $18 around the call. (This case is not
654 needed for 32 bit functions that call 16 bit functions, because
655 16 bit functions always return floating point values in both
658 Note that in all cases FNNAME might be defined statically.
659 Therefore, FNNAME is not used literally. Instead, the relocation
660 information will indicate which symbol the section is for.
662 We record any stubs that we find in the symbol table. */
664 #define FN_STUB ".mips16.fn."
665 #define CALL_STUB ".mips16.call."
666 #define CALL_FP_STUB ".mips16.call.fp."
668 /* Look up an entry in a MIPS ELF linker hash table. */
670 #define mips_elf_link_hash_lookup(table, string, create, copy, follow) \
671 ((struct mips_elf_link_hash_entry *) \
672 elf_link_hash_lookup (&(table)->root, (string), (create), \
675 /* Traverse a MIPS ELF linker hash table. */
677 #define mips_elf_link_hash_traverse(table, func, info) \
678 (elf_link_hash_traverse \
680 (bfd_boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func), \
683 /* Get the MIPS ELF linker hash table from a link_info structure. */
685 #define mips_elf_hash_table(p) \
686 ((struct mips_elf_link_hash_table *) ((p)->hash))
688 /* Create an entry in a MIPS ELF linker hash table. */
690 static struct bfd_hash_entry *
691 mips_elf_link_hash_newfunc (entry, table, string)
692 struct bfd_hash_entry *entry;
693 struct bfd_hash_table *table;
696 struct mips_elf_link_hash_entry *ret =
697 (struct mips_elf_link_hash_entry *) entry;
699 /* Allocate the structure if it has not already been allocated by a
701 if (ret == (struct mips_elf_link_hash_entry *) NULL)
702 ret = ((struct mips_elf_link_hash_entry *)
703 bfd_hash_allocate (table,
704 sizeof (struct mips_elf_link_hash_entry)));
705 if (ret == (struct mips_elf_link_hash_entry *) NULL)
706 return (struct bfd_hash_entry *) ret;
708 /* Call the allocation method of the superclass. */
709 ret = ((struct mips_elf_link_hash_entry *)
710 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
712 if (ret != (struct mips_elf_link_hash_entry *) NULL)
714 /* Set local fields. */
715 memset (&ret->esym, 0, sizeof (EXTR));
716 /* We use -2 as a marker to indicate that the information has
717 not been set. -1 means there is no associated ifd. */
719 ret->possibly_dynamic_relocs = 0;
720 ret->readonly_reloc = FALSE;
721 ret->no_fn_stub = FALSE;
723 ret->need_fn_stub = FALSE;
724 ret->call_stub = NULL;
725 ret->call_fp_stub = NULL;
726 ret->forced_local = FALSE;
729 return (struct bfd_hash_entry *) ret;
733 _bfd_mips_elf_new_section_hook (abfd, sec)
737 struct _mips_elf_section_data *sdata;
738 bfd_size_type amt = sizeof (*sdata);
740 sdata = (struct _mips_elf_section_data *) bfd_zalloc (abfd, amt);
743 sec->used_by_bfd = (PTR) sdata;
745 return _bfd_elf_new_section_hook (abfd, sec);
748 /* Read ECOFF debugging information from a .mdebug section into a
749 ecoff_debug_info structure. */
752 _bfd_mips_elf_read_ecoff_info (abfd, section, debug)
755 struct ecoff_debug_info *debug;
758 const struct ecoff_debug_swap *swap;
759 char *ext_hdr = NULL;
761 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
762 memset (debug, 0, sizeof (*debug));
764 ext_hdr = (char *) bfd_malloc (swap->external_hdr_size);
765 if (ext_hdr == NULL && swap->external_hdr_size != 0)
768 if (! bfd_get_section_contents (abfd, section, ext_hdr, (file_ptr) 0,
769 swap->external_hdr_size))
772 symhdr = &debug->symbolic_header;
773 (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
775 /* The symbolic header contains absolute file offsets and sizes to
777 #define READ(ptr, offset, count, size, type) \
778 if (symhdr->count == 0) \
782 bfd_size_type amt = (bfd_size_type) size * symhdr->count; \
783 debug->ptr = (type) bfd_malloc (amt); \
784 if (debug->ptr == NULL) \
786 if (bfd_seek (abfd, (file_ptr) symhdr->offset, SEEK_SET) != 0 \
787 || bfd_bread (debug->ptr, amt, abfd) != amt) \
791 READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
792 READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, PTR);
793 READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, PTR);
794 READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, PTR);
795 READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, PTR);
796 READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
798 READ (ss, cbSsOffset, issMax, sizeof (char), char *);
799 READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
800 READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, PTR);
801 READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, PTR);
802 READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, PTR);
806 debug->adjust = NULL;
813 if (debug->line != NULL)
815 if (debug->external_dnr != NULL)
816 free (debug->external_dnr);
817 if (debug->external_pdr != NULL)
818 free (debug->external_pdr);
819 if (debug->external_sym != NULL)
820 free (debug->external_sym);
821 if (debug->external_opt != NULL)
822 free (debug->external_opt);
823 if (debug->external_aux != NULL)
824 free (debug->external_aux);
825 if (debug->ss != NULL)
827 if (debug->ssext != NULL)
829 if (debug->external_fdr != NULL)
830 free (debug->external_fdr);
831 if (debug->external_rfd != NULL)
832 free (debug->external_rfd);
833 if (debug->external_ext != NULL)
834 free (debug->external_ext);
838 /* Swap RPDR (runtime procedure table entry) for output. */
841 ecoff_swap_rpdr_out (abfd, in, ex)
846 H_PUT_S32 (abfd, in->adr, ex->p_adr);
847 H_PUT_32 (abfd, in->regmask, ex->p_regmask);
848 H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
849 H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
850 H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
851 H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
853 H_PUT_16 (abfd, in->framereg, ex->p_framereg);
854 H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
856 H_PUT_32 (abfd, in->irpss, ex->p_irpss);
858 H_PUT_S32 (abfd, in->exception_info, ex->p_exception_info);
862 /* Create a runtime procedure table from the .mdebug section. */
865 mips_elf_create_procedure_table (handle, abfd, info, s, debug)
868 struct bfd_link_info *info;
870 struct ecoff_debug_info *debug;
872 const struct ecoff_debug_swap *swap;
873 HDRR *hdr = &debug->symbolic_header;
875 struct rpdr_ext *erp;
877 struct pdr_ext *epdr;
878 struct sym_ext *esym;
883 unsigned long sindex;
887 const char *no_name_func = _("static procedure (no name)");
895 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
897 sindex = strlen (no_name_func) + 1;
901 size = swap->external_pdr_size;
903 epdr = (struct pdr_ext *) bfd_malloc (size * count);
907 if (! _bfd_ecoff_get_accumulated_pdr (handle, (PTR) epdr))
910 size = sizeof (RPDR);
911 rp = rpdr = (RPDR *) bfd_malloc (size * count);
915 size = sizeof (char *);
916 sv = (char **) bfd_malloc (size * count);
920 count = hdr->isymMax;
921 size = swap->external_sym_size;
922 esym = (struct sym_ext *) bfd_malloc (size * count);
926 if (! _bfd_ecoff_get_accumulated_sym (handle, (PTR) esym))
930 ss = (char *) bfd_malloc (count);
933 if (! _bfd_ecoff_get_accumulated_ss (handle, (PTR) ss))
937 for (i = 0; i < (unsigned long) count; i++, rp++)
939 (*swap->swap_pdr_in) (abfd, (PTR) (epdr + i), &pdr);
940 (*swap->swap_sym_in) (abfd, (PTR) &esym[pdr.isym], &sym);
942 rp->regmask = pdr.regmask;
943 rp->regoffset = pdr.regoffset;
944 rp->fregmask = pdr.fregmask;
945 rp->fregoffset = pdr.fregoffset;
946 rp->frameoffset = pdr.frameoffset;
947 rp->framereg = pdr.framereg;
948 rp->pcreg = pdr.pcreg;
950 sv[i] = ss + sym.iss;
951 sindex += strlen (sv[i]) + 1;
955 size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
956 size = BFD_ALIGN (size, 16);
957 rtproc = (PTR) bfd_alloc (abfd, size);
960 mips_elf_hash_table (info)->procedure_count = 0;
964 mips_elf_hash_table (info)->procedure_count = count + 2;
966 erp = (struct rpdr_ext *) rtproc;
967 memset (erp, 0, sizeof (struct rpdr_ext));
969 str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
970 strcpy (str, no_name_func);
971 str += strlen (no_name_func) + 1;
972 for (i = 0; i < count; i++)
974 ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
976 str += strlen (sv[i]) + 1;
978 H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
980 /* Set the size and contents of .rtproc section. */
982 s->contents = (bfd_byte *) rtproc;
984 /* Skip this section later on (I don't think this currently
985 matters, but someday it might). */
986 s->link_order_head = (struct bfd_link_order *) NULL;
1015 /* Check the mips16 stubs for a particular symbol, and see if we can
1019 mips_elf_check_mips16_stubs (h, data)
1020 struct mips_elf_link_hash_entry *h;
1021 PTR data ATTRIBUTE_UNUSED;
1023 if (h->root.root.type == bfd_link_hash_warning)
1024 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
1026 if (h->fn_stub != NULL
1027 && ! h->need_fn_stub)
1029 /* We don't need the fn_stub; the only references to this symbol
1030 are 16 bit calls. Clobber the size to 0 to prevent it from
1031 being included in the link. */
1032 h->fn_stub->_raw_size = 0;
1033 h->fn_stub->_cooked_size = 0;
1034 h->fn_stub->flags &= ~SEC_RELOC;
1035 h->fn_stub->reloc_count = 0;
1036 h->fn_stub->flags |= SEC_EXCLUDE;
1039 if (h->call_stub != NULL
1040 && h->root.other == STO_MIPS16)
1042 /* We don't need the call_stub; this is a 16 bit function, so
1043 calls from other 16 bit functions are OK. Clobber the size
1044 to 0 to prevent it from being included in the link. */
1045 h->call_stub->_raw_size = 0;
1046 h->call_stub->_cooked_size = 0;
1047 h->call_stub->flags &= ~SEC_RELOC;
1048 h->call_stub->reloc_count = 0;
1049 h->call_stub->flags |= SEC_EXCLUDE;
1052 if (h->call_fp_stub != NULL
1053 && h->root.other == STO_MIPS16)
1055 /* We don't need the call_stub; this is a 16 bit function, so
1056 calls from other 16 bit functions are OK. Clobber the size
1057 to 0 to prevent it from being included in the link. */
1058 h->call_fp_stub->_raw_size = 0;
1059 h->call_fp_stub->_cooked_size = 0;
1060 h->call_fp_stub->flags &= ~SEC_RELOC;
1061 h->call_fp_stub->reloc_count = 0;
1062 h->call_fp_stub->flags |= SEC_EXCLUDE;
1068 bfd_reloc_status_type
1069 _bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry, input_section,
1070 relocatable, data, gp)
1073 arelent *reloc_entry;
1074 asection *input_section;
1075 bfd_boolean relocatable;
1080 unsigned long insn = 0;
1083 if (bfd_is_com_section (symbol->section))
1086 relocation = symbol->value;
1088 relocation += symbol->section->output_section->vma;
1089 relocation += symbol->section->output_offset;
1091 if (reloc_entry->address > input_section->_cooked_size)
1092 return bfd_reloc_outofrange;
1094 /* Set val to the offset into the section or symbol. */
1095 val = reloc_entry->addend;
1097 if (reloc_entry->howto->partial_inplace)
1099 insn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
1100 val += insn & 0xffff;
1103 _bfd_mips_elf_sign_extend(val, 16);
1105 /* Adjust val for the final section location and GP value. If we
1106 are producing relocatable output, we don't want to do this for
1107 an external symbol. */
1109 || (symbol->flags & BSF_SECTION_SYM) != 0)
1110 val += relocation - gp;
1112 if (reloc_entry->howto->partial_inplace)
1114 insn = (insn & ~0xffff) | (val & 0xffff);
1115 bfd_put_32 (abfd, (bfd_vma) insn,
1116 (bfd_byte *) data + reloc_entry->address);
1119 reloc_entry->addend = val;
1122 reloc_entry->address += input_section->output_offset;
1123 else if (((val & ~0xffff) != ~0xffff) && ((val & ~0xffff) != 0))
1124 return bfd_reloc_overflow;
1126 return bfd_reloc_ok;
1129 /* Swap an entry in a .gptab section. Note that these routines rely
1130 on the equivalence of the two elements of the union. */
1133 bfd_mips_elf32_swap_gptab_in (abfd, ex, in)
1135 const Elf32_External_gptab *ex;
1138 in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
1139 in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
1143 bfd_mips_elf32_swap_gptab_out (abfd, in, ex)
1145 const Elf32_gptab *in;
1146 Elf32_External_gptab *ex;
1148 H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
1149 H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
1153 bfd_elf32_swap_compact_rel_out (abfd, in, ex)
1155 const Elf32_compact_rel *in;
1156 Elf32_External_compact_rel *ex;
1158 H_PUT_32 (abfd, in->id1, ex->id1);
1159 H_PUT_32 (abfd, in->num, ex->num);
1160 H_PUT_32 (abfd, in->id2, ex->id2);
1161 H_PUT_32 (abfd, in->offset, ex->offset);
1162 H_PUT_32 (abfd, in->reserved0, ex->reserved0);
1163 H_PUT_32 (abfd, in->reserved1, ex->reserved1);
1167 bfd_elf32_swap_crinfo_out (abfd, in, ex)
1169 const Elf32_crinfo *in;
1170 Elf32_External_crinfo *ex;
1174 l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
1175 | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
1176 | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
1177 | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
1178 H_PUT_32 (abfd, l, ex->info);
1179 H_PUT_32 (abfd, in->konst, ex->konst);
1180 H_PUT_32 (abfd, in->vaddr, ex->vaddr);
1183 /* A .reginfo section holds a single Elf32_RegInfo structure. These
1184 routines swap this structure in and out. They are used outside of
1185 BFD, so they are globally visible. */
1188 bfd_mips_elf32_swap_reginfo_in (abfd, ex, in)
1190 const Elf32_External_RegInfo *ex;
1193 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
1194 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
1195 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
1196 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
1197 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
1198 in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
1202 bfd_mips_elf32_swap_reginfo_out (abfd, in, ex)
1204 const Elf32_RegInfo *in;
1205 Elf32_External_RegInfo *ex;
1207 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
1208 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
1209 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
1210 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
1211 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
1212 H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
1215 /* In the 64 bit ABI, the .MIPS.options section holds register
1216 information in an Elf64_Reginfo structure. These routines swap
1217 them in and out. They are globally visible because they are used
1218 outside of BFD. These routines are here so that gas can call them
1219 without worrying about whether the 64 bit ABI has been included. */
1222 bfd_mips_elf64_swap_reginfo_in (abfd, ex, in)
1224 const Elf64_External_RegInfo *ex;
1225 Elf64_Internal_RegInfo *in;
1227 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
1228 in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
1229 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
1230 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
1231 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
1232 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
1233 in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
1237 bfd_mips_elf64_swap_reginfo_out (abfd, in, ex)
1239 const Elf64_Internal_RegInfo *in;
1240 Elf64_External_RegInfo *ex;
1242 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
1243 H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
1244 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
1245 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
1246 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
1247 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
1248 H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
1251 /* Swap in an options header. */
1254 bfd_mips_elf_swap_options_in (abfd, ex, in)
1256 const Elf_External_Options *ex;
1257 Elf_Internal_Options *in;
1259 in->kind = H_GET_8 (abfd, ex->kind);
1260 in->size = H_GET_8 (abfd, ex->size);
1261 in->section = H_GET_16 (abfd, ex->section);
1262 in->info = H_GET_32 (abfd, ex->info);
1265 /* Swap out an options header. */
1268 bfd_mips_elf_swap_options_out (abfd, in, ex)
1270 const Elf_Internal_Options *in;
1271 Elf_External_Options *ex;
1273 H_PUT_8 (abfd, in->kind, ex->kind);
1274 H_PUT_8 (abfd, in->size, ex->size);
1275 H_PUT_16 (abfd, in->section, ex->section);
1276 H_PUT_32 (abfd, in->info, ex->info);
1279 /* This function is called via qsort() to sort the dynamic relocation
1280 entries by increasing r_symndx value. */
1283 sort_dynamic_relocs (arg1, arg2)
1287 Elf_Internal_Rela int_reloc1;
1288 Elf_Internal_Rela int_reloc2;
1290 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
1291 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
1293 return ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
1296 /* Like sort_dynamic_relocs, but used for elf64 relocations. */
1299 sort_dynamic_relocs_64 (arg1, arg2)
1303 Elf_Internal_Rela int_reloc1[3];
1304 Elf_Internal_Rela int_reloc2[3];
1306 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
1307 (reldyn_sorting_bfd, arg1, int_reloc1);
1308 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
1309 (reldyn_sorting_bfd, arg2, int_reloc2);
1311 return (ELF64_R_SYM (int_reloc1[0].r_info)
1312 - ELF64_R_SYM (int_reloc2[0].r_info));
1316 /* This routine is used to write out ECOFF debugging external symbol
1317 information. It is called via mips_elf_link_hash_traverse. The
1318 ECOFF external symbol information must match the ELF external
1319 symbol information. Unfortunately, at this point we don't know
1320 whether a symbol is required by reloc information, so the two
1321 tables may wind up being different. We must sort out the external
1322 symbol information before we can set the final size of the .mdebug
1323 section, and we must set the size of the .mdebug section before we
1324 can relocate any sections, and we can't know which symbols are
1325 required by relocation until we relocate the sections.
1326 Fortunately, it is relatively unlikely that any symbol will be
1327 stripped but required by a reloc. In particular, it can not happen
1328 when generating a final executable. */
1331 mips_elf_output_extsym (h, data)
1332 struct mips_elf_link_hash_entry *h;
1335 struct extsym_info *einfo = (struct extsym_info *) data;
1337 asection *sec, *output_section;
1339 if (h->root.root.type == bfd_link_hash_warning)
1340 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
1342 if (h->root.indx == -2)
1344 else if (((h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1345 || (h->root.elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
1346 && (h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
1347 && (h->root.elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
1349 else if (einfo->info->strip == strip_all
1350 || (einfo->info->strip == strip_some
1351 && bfd_hash_lookup (einfo->info->keep_hash,
1352 h->root.root.root.string,
1353 FALSE, FALSE) == NULL))
1361 if (h->esym.ifd == -2)
1364 h->esym.cobol_main = 0;
1365 h->esym.weakext = 0;
1366 h->esym.reserved = 0;
1367 h->esym.ifd = ifdNil;
1368 h->esym.asym.value = 0;
1369 h->esym.asym.st = stGlobal;
1371 if (h->root.root.type == bfd_link_hash_undefined
1372 || h->root.root.type == bfd_link_hash_undefweak)
1376 /* Use undefined class. Also, set class and type for some
1378 name = h->root.root.root.string;
1379 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
1380 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
1382 h->esym.asym.sc = scData;
1383 h->esym.asym.st = stLabel;
1384 h->esym.asym.value = 0;
1386 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
1388 h->esym.asym.sc = scAbs;
1389 h->esym.asym.st = stLabel;
1390 h->esym.asym.value =
1391 mips_elf_hash_table (einfo->info)->procedure_count;
1393 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
1395 h->esym.asym.sc = scAbs;
1396 h->esym.asym.st = stLabel;
1397 h->esym.asym.value = elf_gp (einfo->abfd);
1400 h->esym.asym.sc = scUndefined;
1402 else if (h->root.root.type != bfd_link_hash_defined
1403 && h->root.root.type != bfd_link_hash_defweak)
1404 h->esym.asym.sc = scAbs;
1409 sec = h->root.root.u.def.section;
1410 output_section = sec->output_section;
1412 /* When making a shared library and symbol h is the one from
1413 the another shared library, OUTPUT_SECTION may be null. */
1414 if (output_section == NULL)
1415 h->esym.asym.sc = scUndefined;
1418 name = bfd_section_name (output_section->owner, output_section);
1420 if (strcmp (name, ".text") == 0)
1421 h->esym.asym.sc = scText;
1422 else if (strcmp (name, ".data") == 0)
1423 h->esym.asym.sc = scData;
1424 else if (strcmp (name, ".sdata") == 0)
1425 h->esym.asym.sc = scSData;
1426 else if (strcmp (name, ".rodata") == 0
1427 || strcmp (name, ".rdata") == 0)
1428 h->esym.asym.sc = scRData;
1429 else if (strcmp (name, ".bss") == 0)
1430 h->esym.asym.sc = scBss;
1431 else if (strcmp (name, ".sbss") == 0)
1432 h->esym.asym.sc = scSBss;
1433 else if (strcmp (name, ".init") == 0)
1434 h->esym.asym.sc = scInit;
1435 else if (strcmp (name, ".fini") == 0)
1436 h->esym.asym.sc = scFini;
1438 h->esym.asym.sc = scAbs;
1442 h->esym.asym.reserved = 0;
1443 h->esym.asym.index = indexNil;
1446 if (h->root.root.type == bfd_link_hash_common)
1447 h->esym.asym.value = h->root.root.u.c.size;
1448 else if (h->root.root.type == bfd_link_hash_defined
1449 || h->root.root.type == bfd_link_hash_defweak)
1451 if (h->esym.asym.sc == scCommon)
1452 h->esym.asym.sc = scBss;
1453 else if (h->esym.asym.sc == scSCommon)
1454 h->esym.asym.sc = scSBss;
1456 sec = h->root.root.u.def.section;
1457 output_section = sec->output_section;
1458 if (output_section != NULL)
1459 h->esym.asym.value = (h->root.root.u.def.value
1460 + sec->output_offset
1461 + output_section->vma);
1463 h->esym.asym.value = 0;
1465 else if ((h->root.elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
1467 struct mips_elf_link_hash_entry *hd = h;
1468 bfd_boolean no_fn_stub = h->no_fn_stub;
1470 while (hd->root.root.type == bfd_link_hash_indirect)
1472 hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
1473 no_fn_stub = no_fn_stub || hd->no_fn_stub;
1478 /* Set type and value for a symbol with a function stub. */
1479 h->esym.asym.st = stProc;
1480 sec = hd->root.root.u.def.section;
1482 h->esym.asym.value = 0;
1485 output_section = sec->output_section;
1486 if (output_section != NULL)
1487 h->esym.asym.value = (hd->root.plt.offset
1488 + sec->output_offset
1489 + output_section->vma);
1491 h->esym.asym.value = 0;
1499 if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
1500 h->root.root.root.string,
1503 einfo->failed = TRUE;
1510 /* A comparison routine used to sort .gptab entries. */
1513 gptab_compare (p1, p2)
1517 const Elf32_gptab *a1 = (const Elf32_gptab *) p1;
1518 const Elf32_gptab *a2 = (const Elf32_gptab *) p2;
1520 return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
1523 /* Functions to manage the got entry hash table. */
1525 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
1528 static INLINE hashval_t
1529 mips_elf_hash_bfd_vma (addr)
1533 return addr + (addr >> 32);
1539 /* got_entries only match if they're identical, except for gotidx, so
1540 use all fields to compute the hash, and compare the appropriate
1544 mips_elf_got_entry_hash (entry_)
1547 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
1549 return entry->symndx
1550 + (! entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
1552 + (entry->symndx >= 0 ? mips_elf_hash_bfd_vma (entry->d.addend)
1553 : entry->d.h->root.root.root.hash));
1557 mips_elf_got_entry_eq (entry1, entry2)
1561 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
1562 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
1564 return e1->abfd == e2->abfd && e1->symndx == e2->symndx
1565 && (! e1->abfd ? e1->d.address == e2->d.address
1566 : e1->symndx >= 0 ? e1->d.addend == e2->d.addend
1567 : e1->d.h == e2->d.h);
1570 /* multi_got_entries are still a match in the case of global objects,
1571 even if the input bfd in which they're referenced differs, so the
1572 hash computation and compare functions are adjusted
1576 mips_elf_multi_got_entry_hash (entry_)
1579 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
1581 return entry->symndx
1583 ? mips_elf_hash_bfd_vma (entry->d.address)
1584 : entry->symndx >= 0
1586 + mips_elf_hash_bfd_vma (entry->d.addend))
1587 : entry->d.h->root.root.root.hash);
1591 mips_elf_multi_got_entry_eq (entry1, entry2)
1595 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
1596 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
1598 return e1->symndx == e2->symndx
1599 && (e1->symndx >= 0 ? e1->abfd == e2->abfd && e1->d.addend == e2->d.addend
1600 : e1->abfd == NULL || e2->abfd == NULL
1601 ? e1->abfd == e2->abfd && e1->d.address == e2->d.address
1602 : e1->d.h == e2->d.h);
1605 /* Returns the dynamic relocation section for DYNOBJ. */
1608 mips_elf_rel_dyn_section (dynobj, create_p)
1610 bfd_boolean create_p;
1612 static const char dname[] = ".rel.dyn";
1615 sreloc = bfd_get_section_by_name (dynobj, dname);
1616 if (sreloc == NULL && create_p)
1618 sreloc = bfd_make_section (dynobj, dname);
1620 || ! bfd_set_section_flags (dynobj, sreloc,
1625 | SEC_LINKER_CREATED
1627 || ! bfd_set_section_alignment (dynobj, sreloc,
1628 MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
1634 /* Returns the GOT section for ABFD. */
1637 mips_elf_got_section (abfd, maybe_excluded)
1639 bfd_boolean maybe_excluded;
1641 asection *sgot = bfd_get_section_by_name (abfd, ".got");
1643 || (! maybe_excluded && (sgot->flags & SEC_EXCLUDE) != 0))
1648 /* Returns the GOT information associated with the link indicated by
1649 INFO. If SGOTP is non-NULL, it is filled in with the GOT
1652 static struct mips_got_info *
1653 mips_elf_got_info (abfd, sgotp)
1658 struct mips_got_info *g;
1660 sgot = mips_elf_got_section (abfd, TRUE);
1661 BFD_ASSERT (sgot != NULL);
1662 BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
1663 g = mips_elf_section_data (sgot)->u.got_info;
1664 BFD_ASSERT (g != NULL);
1667 *sgotp = (sgot->flags & SEC_EXCLUDE) == 0 ? sgot : NULL;
1672 /* Obtain the lowest dynamic index of a symbol that was assigned a
1673 global GOT entry. */
1675 mips_elf_get_global_gotsym_index (abfd)
1679 struct mips_got_info *g;
1684 sgot = mips_elf_got_section (abfd, TRUE);
1685 if (sgot == NULL || mips_elf_section_data (sgot) == NULL)
1688 g = mips_elf_section_data (sgot)->u.got_info;
1689 if (g == NULL || g->global_gotsym == NULL)
1692 return g->global_gotsym->dynindx;
1695 /* Returns the GOT offset at which the indicated address can be found.
1696 If there is not yet a GOT entry for this value, create one. Returns
1697 -1 if no satisfactory GOT offset can be found. */
1700 mips_elf_local_got_index (abfd, ibfd, info, value)
1702 struct bfd_link_info *info;
1706 struct mips_got_info *g;
1707 struct mips_got_entry *entry;
1709 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
1711 entry = mips_elf_create_local_got_entry (abfd, ibfd, g, sgot, value);
1713 return entry->gotidx;
1718 /* Returns the GOT index for the global symbol indicated by H. */
1721 mips_elf_global_got_index (abfd, ibfd, h)
1723 struct elf_link_hash_entry *h;
1727 struct mips_got_info *g, *gg;
1728 long global_got_dynindx = 0;
1730 gg = g = mips_elf_got_info (abfd, &sgot);
1731 if (g->bfd2got && ibfd)
1733 struct mips_got_entry e, *p;
1735 BFD_ASSERT (h->dynindx >= 0);
1737 g = mips_elf_got_for_ibfd (g, ibfd);
1742 e.d.h = (struct mips_elf_link_hash_entry *)h;
1744 p = (struct mips_got_entry *) htab_find (g->got_entries, &e);
1746 BFD_ASSERT (p->gotidx > 0);
1751 if (gg->global_gotsym != NULL)
1752 global_got_dynindx = gg->global_gotsym->dynindx;
1754 /* Once we determine the global GOT entry with the lowest dynamic
1755 symbol table index, we must put all dynamic symbols with greater
1756 indices into the GOT. That makes it easy to calculate the GOT
1758 BFD_ASSERT (h->dynindx >= global_got_dynindx);
1759 index = ((h->dynindx - global_got_dynindx + g->local_gotno)
1760 * MIPS_ELF_GOT_SIZE (abfd));
1761 BFD_ASSERT (index < sgot->_raw_size);
1766 /* Find a GOT entry that is within 32KB of the VALUE. These entries
1767 are supposed to be placed at small offsets in the GOT, i.e.,
1768 within 32KB of GP. Return the index into the GOT for this page,
1769 and store the offset from this entry to the desired address in
1770 OFFSETP, if it is non-NULL. */
1773 mips_elf_got_page (abfd, ibfd, info, value, offsetp)
1775 struct bfd_link_info *info;
1780 struct mips_got_info *g;
1782 struct mips_got_entry *entry;
1784 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
1786 entry = mips_elf_create_local_got_entry (abfd, ibfd, g, sgot,
1788 & (~(bfd_vma)0xffff));
1793 index = entry->gotidx;
1796 *offsetp = value - entry->d.address;
1801 /* Find a GOT entry whose higher-order 16 bits are the same as those
1802 for value. Return the index into the GOT for this entry. */
1805 mips_elf_got16_entry (abfd, ibfd, info, value, external)
1807 struct bfd_link_info *info;
1809 bfd_boolean external;
1812 struct mips_got_info *g;
1813 struct mips_got_entry *entry;
1817 /* Although the ABI says that it is "the high-order 16 bits" that we
1818 want, it is really the %high value. The complete value is
1819 calculated with a `addiu' of a LO16 relocation, just as with a
1821 value = mips_elf_high (value) << 16;
1824 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
1826 entry = mips_elf_create_local_got_entry (abfd, ibfd, g, sgot, value);
1828 return entry->gotidx;
1833 /* Returns the offset for the entry at the INDEXth position
1837 mips_elf_got_offset_from_index (dynobj, output_bfd, input_bfd, index)
1845 struct mips_got_info *g;
1847 g = mips_elf_got_info (dynobj, &sgot);
1848 gp = _bfd_get_gp_value (output_bfd)
1849 + mips_elf_adjust_gp (output_bfd, g, input_bfd);
1851 return sgot->output_section->vma + sgot->output_offset + index - gp;
1854 /* Create a local GOT entry for VALUE. Return the index of the entry,
1855 or -1 if it could not be created. */
1857 static struct mips_got_entry *
1858 mips_elf_create_local_got_entry (abfd, ibfd, gg, sgot, value)
1860 struct mips_got_info *gg;
1864 struct mips_got_entry entry, **loc;
1865 struct mips_got_info *g;
1869 entry.d.address = value;
1871 g = mips_elf_got_for_ibfd (gg, ibfd);
1874 g = mips_elf_got_for_ibfd (gg, abfd);
1875 BFD_ASSERT (g != NULL);
1878 loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
1883 entry.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
1885 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
1890 memcpy (*loc, &entry, sizeof entry);
1892 if (g->assigned_gotno >= g->local_gotno)
1894 (*loc)->gotidx = -1;
1895 /* We didn't allocate enough space in the GOT. */
1896 (*_bfd_error_handler)
1897 (_("not enough GOT space for local GOT entries"));
1898 bfd_set_error (bfd_error_bad_value);
1902 MIPS_ELF_PUT_WORD (abfd, value,
1903 (sgot->contents + entry.gotidx));
1908 /* Sort the dynamic symbol table so that symbols that need GOT entries
1909 appear towards the end. This reduces the amount of GOT space
1910 required. MAX_LOCAL is used to set the number of local symbols
1911 known to be in the dynamic symbol table. During
1912 _bfd_mips_elf_size_dynamic_sections, this value is 1. Afterward, the
1913 section symbols are added and the count is higher. */
1916 mips_elf_sort_hash_table (info, max_local)
1917 struct bfd_link_info *info;
1918 unsigned long max_local;
1920 struct mips_elf_hash_sort_data hsd;
1921 struct mips_got_info *g;
1924 dynobj = elf_hash_table (info)->dynobj;
1926 g = mips_elf_got_info (dynobj, NULL);
1929 hsd.max_unref_got_dynindx =
1930 hsd.min_got_dynindx = elf_hash_table (info)->dynsymcount
1931 /* In the multi-got case, assigned_gotno of the master got_info
1932 indicate the number of entries that aren't referenced in the
1933 primary GOT, but that must have entries because there are
1934 dynamic relocations that reference it. Since they aren't
1935 referenced, we move them to the end of the GOT, so that they
1936 don't prevent other entries that are referenced from getting
1937 too large offsets. */
1938 - (g->next ? g->assigned_gotno : 0);
1939 hsd.max_non_got_dynindx = max_local;
1940 mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
1941 elf_hash_table (info)),
1942 mips_elf_sort_hash_table_f,
1945 /* There should have been enough room in the symbol table to
1946 accommodate both the GOT and non-GOT symbols. */
1947 BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
1948 BFD_ASSERT ((unsigned long)hsd.max_unref_got_dynindx
1949 <= elf_hash_table (info)->dynsymcount);
1951 /* Now we know which dynamic symbol has the lowest dynamic symbol
1952 table index in the GOT. */
1953 g->global_gotsym = hsd.low;
1958 /* If H needs a GOT entry, assign it the highest available dynamic
1959 index. Otherwise, assign it the lowest available dynamic
1963 mips_elf_sort_hash_table_f (h, data)
1964 struct mips_elf_link_hash_entry *h;
1967 struct mips_elf_hash_sort_data *hsd
1968 = (struct mips_elf_hash_sort_data *) data;
1970 if (h->root.root.type == bfd_link_hash_warning)
1971 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
1973 /* Symbols without dynamic symbol table entries aren't interesting
1975 if (h->root.dynindx == -1)
1978 /* Global symbols that need GOT entries that are not explicitly
1979 referenced are marked with got offset 2. Those that are
1980 referenced get a 1, and those that don't need GOT entries get
1982 if (h->root.got.offset == 2)
1984 if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
1985 hsd->low = (struct elf_link_hash_entry *) h;
1986 h->root.dynindx = hsd->max_unref_got_dynindx++;
1988 else if (h->root.got.offset != 1)
1989 h->root.dynindx = hsd->max_non_got_dynindx++;
1992 h->root.dynindx = --hsd->min_got_dynindx;
1993 hsd->low = (struct elf_link_hash_entry *) h;
1999 /* If H is a symbol that needs a global GOT entry, but has a dynamic
2000 symbol table index lower than any we've seen to date, record it for
2004 mips_elf_record_global_got_symbol (h, abfd, info, g)
2005 struct elf_link_hash_entry *h;
2007 struct bfd_link_info *info;
2008 struct mips_got_info *g;
2010 struct mips_got_entry entry, **loc;
2012 /* A global symbol in the GOT must also be in the dynamic symbol
2014 if (h->dynindx == -1)
2016 switch (ELF_ST_VISIBILITY (h->other))
2020 _bfd_mips_elf_hide_symbol (info, h, TRUE);
2023 if (!bfd_elf32_link_record_dynamic_symbol (info, h))
2029 entry.d.h = (struct mips_elf_link_hash_entry *) h;
2031 loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
2034 /* If we've already marked this entry as needing GOT space, we don't
2035 need to do it again. */
2039 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
2045 memcpy (*loc, &entry, sizeof entry);
2047 if (h->got.offset != MINUS_ONE)
2050 /* By setting this to a value other than -1, we are indicating that
2051 there needs to be a GOT entry for H. Avoid using zero, as the
2052 generic ELF copy_indirect_symbol tests for <= 0. */
2058 /* Reserve space in G for a GOT entry containing the value of symbol
2059 SYMNDX in input bfd ABDF, plus ADDEND. */
2062 mips_elf_record_local_got_symbol (abfd, symndx, addend, g)
2066 struct mips_got_info *g;
2068 struct mips_got_entry entry, **loc;
2071 entry.symndx = symndx;
2072 entry.d.addend = addend;
2073 loc = (struct mips_got_entry **)
2074 htab_find_slot (g->got_entries, &entry, INSERT);
2079 entry.gotidx = g->local_gotno++;
2081 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
2086 memcpy (*loc, &entry, sizeof entry);
2091 /* Compute the hash value of the bfd in a bfd2got hash entry. */
2094 mips_elf_bfd2got_entry_hash (entry_)
2097 const struct mips_elf_bfd2got_hash *entry
2098 = (struct mips_elf_bfd2got_hash *)entry_;
2100 return entry->bfd->id;
2103 /* Check whether two hash entries have the same bfd. */
2106 mips_elf_bfd2got_entry_eq (entry1, entry2)
2110 const struct mips_elf_bfd2got_hash *e1
2111 = (const struct mips_elf_bfd2got_hash *)entry1;
2112 const struct mips_elf_bfd2got_hash *e2
2113 = (const struct mips_elf_bfd2got_hash *)entry2;
2115 return e1->bfd == e2->bfd;
2118 /* In a multi-got link, determine the GOT to be used for IBDF. G must
2119 be the master GOT data. */
2121 static struct mips_got_info *
2122 mips_elf_got_for_ibfd (g, ibfd)
2123 struct mips_got_info *g;
2126 struct mips_elf_bfd2got_hash e, *p;
2132 p = (struct mips_elf_bfd2got_hash *) htab_find (g->bfd2got, &e);
2133 return p ? p->g : NULL;
2136 /* Create one separate got for each bfd that has entries in the global
2137 got, such that we can tell how many local and global entries each
2141 mips_elf_make_got_per_bfd (entryp, p)
2145 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
2146 struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
2147 htab_t bfd2got = arg->bfd2got;
2148 struct mips_got_info *g;
2149 struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot;
2152 /* Find the got_info for this GOT entry's input bfd. Create one if
2154 bfdgot_entry.bfd = entry->abfd;
2155 bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT);
2156 bfdgot = (struct mips_elf_bfd2got_hash *)*bfdgotp;
2162 bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
2163 (arg->obfd, sizeof (struct mips_elf_bfd2got_hash));
2173 bfdgot->bfd = entry->abfd;
2174 bfdgot->g = g = (struct mips_got_info *)
2175 bfd_alloc (arg->obfd, sizeof (struct mips_got_info));
2182 g->global_gotsym = NULL;
2183 g->global_gotno = 0;
2185 g->assigned_gotno = -1;
2186 g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
2187 mips_elf_multi_got_entry_eq,
2189 if (g->got_entries == NULL)
2199 /* Insert the GOT entry in the bfd's got entry hash table. */
2200 entryp = htab_find_slot (g->got_entries, entry, INSERT);
2201 if (*entryp != NULL)
2206 if (entry->symndx >= 0 || entry->d.h->forced_local)
2214 /* Attempt to merge gots of different input bfds. Try to use as much
2215 as possible of the primary got, since it doesn't require explicit
2216 dynamic relocations, but don't use bfds that would reference global
2217 symbols out of the addressable range. Failing the primary got,
2218 attempt to merge with the current got, or finish the current got
2219 and then make make the new got current. */
2222 mips_elf_merge_gots (bfd2got_, p)
2226 struct mips_elf_bfd2got_hash *bfd2got
2227 = (struct mips_elf_bfd2got_hash *)*bfd2got_;
2228 struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
2229 unsigned int lcount = bfd2got->g->local_gotno;
2230 unsigned int gcount = bfd2got->g->global_gotno;
2231 unsigned int maxcnt = arg->max_count;
2233 /* If we don't have a primary GOT and this is not too big, use it as
2234 a starting point for the primary GOT. */
2235 if (! arg->primary && lcount + gcount <= maxcnt)
2237 arg->primary = bfd2got->g;
2238 arg->primary_count = lcount + gcount;
2240 /* If it looks like we can merge this bfd's entries with those of
2241 the primary, merge them. The heuristics is conservative, but we
2242 don't have to squeeze it too hard. */
2243 else if (arg->primary
2244 && (arg->primary_count + lcount + gcount) <= maxcnt)
2246 struct mips_got_info *g = bfd2got->g;
2247 int old_lcount = arg->primary->local_gotno;
2248 int old_gcount = arg->primary->global_gotno;
2250 bfd2got->g = arg->primary;
2252 htab_traverse (g->got_entries,
2253 mips_elf_make_got_per_bfd,
2255 if (arg->obfd == NULL)
2258 htab_delete (g->got_entries);
2259 /* We don't have to worry about releasing memory of the actual
2260 got entries, since they're all in the master got_entries hash
2263 BFD_ASSERT (old_lcount + lcount == arg->primary->local_gotno);
2264 BFD_ASSERT (old_gcount + gcount >= arg->primary->global_gotno);
2266 arg->primary_count = arg->primary->local_gotno
2267 + arg->primary->global_gotno;
2269 /* If we can merge with the last-created got, do it. */
2270 else if (arg->current
2271 && arg->current_count + lcount + gcount <= maxcnt)
2273 struct mips_got_info *g = bfd2got->g;
2274 int old_lcount = arg->current->local_gotno;
2275 int old_gcount = arg->current->global_gotno;
2277 bfd2got->g = arg->current;
2279 htab_traverse (g->got_entries,
2280 mips_elf_make_got_per_bfd,
2282 if (arg->obfd == NULL)
2285 htab_delete (g->got_entries);
2287 BFD_ASSERT (old_lcount + lcount == arg->current->local_gotno);
2288 BFD_ASSERT (old_gcount + gcount >= arg->current->global_gotno);
2290 arg->current_count = arg->current->local_gotno
2291 + arg->current->global_gotno;
2293 /* Well, we couldn't merge, so create a new GOT. Don't check if it
2294 fits; if it turns out that it doesn't, we'll get relocation
2295 overflows anyway. */
2298 bfd2got->g->next = arg->current;
2299 arg->current = bfd2got->g;
2301 arg->current_count = lcount + gcount;
2307 /* If passed a NULL mips_got_info in the argument, set the marker used
2308 to tell whether a global symbol needs a got entry (in the primary
2309 got) to the given VALUE.
2311 If passed a pointer G to a mips_got_info in the argument (it must
2312 not be the primary GOT), compute the offset from the beginning of
2313 the (primary) GOT section to the entry in G corresponding to the
2314 global symbol. G's assigned_gotno must contain the index of the
2315 first available global GOT entry in G. VALUE must contain the size
2316 of a GOT entry in bytes. For each global GOT entry that requires a
2317 dynamic relocation, NEEDED_RELOCS is incremented, and the symbol is
2318 marked as not elligible for lazy resolution through a function
2321 mips_elf_set_global_got_offset (entryp, p)
2325 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
2326 struct mips_elf_set_global_got_offset_arg *arg
2327 = (struct mips_elf_set_global_got_offset_arg *)p;
2328 struct mips_got_info *g = arg->g;
2330 if (entry->abfd != NULL && entry->symndx == -1
2331 && entry->d.h->root.dynindx != -1)
2335 BFD_ASSERT (g->global_gotsym == NULL);
2337 entry->gotidx = arg->value * (long) g->assigned_gotno++;
2338 /* We can't do lazy update of GOT entries for
2339 non-primary GOTs since the PLT entries don't use the
2340 right offsets, so punt at it for now. */
2341 entry->d.h->no_fn_stub = TRUE;
2342 if (arg->info->shared
2343 || (elf_hash_table (arg->info)->dynamic_sections_created
2344 && ((entry->d.h->root.elf_link_hash_flags
2345 & ELF_LINK_HASH_DEF_DYNAMIC) != 0)
2346 && ((entry->d.h->root.elf_link_hash_flags
2347 & ELF_LINK_HASH_DEF_REGULAR) == 0)))
2348 ++arg->needed_relocs;
2351 entry->d.h->root.got.offset = arg->value;
2357 /* Follow indirect and warning hash entries so that each got entry
2358 points to the final symbol definition. P must point to a pointer
2359 to the hash table we're traversing. Since this traversal may
2360 modify the hash table, we set this pointer to NULL to indicate
2361 we've made a potentially-destructive change to the hash table, so
2362 the traversal must be restarted. */
2364 mips_elf_resolve_final_got_entry (entryp, p)
2368 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
2369 htab_t got_entries = *(htab_t *)p;
2371 if (entry->abfd != NULL && entry->symndx == -1)
2373 struct mips_elf_link_hash_entry *h = entry->d.h;
2375 while (h->root.root.type == bfd_link_hash_indirect
2376 || h->root.root.type == bfd_link_hash_warning)
2377 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
2379 if (entry->d.h == h)
2384 /* If we can't find this entry with the new bfd hash, re-insert
2385 it, and get the traversal restarted. */
2386 if (! htab_find (got_entries, entry))
2388 htab_clear_slot (got_entries, entryp);
2389 entryp = htab_find_slot (got_entries, entry, INSERT);
2392 /* Abort the traversal, since the whole table may have
2393 moved, and leave it up to the parent to restart the
2395 *(htab_t *)p = NULL;
2398 /* We might want to decrement the global_gotno count, but it's
2399 either too early or too late for that at this point. */
2405 /* Turn indirect got entries in a got_entries table into their final
2408 mips_elf_resolve_final_got_entries (g)
2409 struct mips_got_info *g;
2415 got_entries = g->got_entries;
2417 htab_traverse (got_entries,
2418 mips_elf_resolve_final_got_entry,
2421 while (got_entries == NULL);
2424 /* Return the offset of an input bfd IBFD's GOT from the beginning of
2427 mips_elf_adjust_gp (abfd, g, ibfd)
2429 struct mips_got_info *g;
2432 if (g->bfd2got == NULL)
2435 g = mips_elf_got_for_ibfd (g, ibfd);
2439 BFD_ASSERT (g->next);
2443 return (g->local_gotno + g->global_gotno) * MIPS_ELF_GOT_SIZE (abfd);
2446 /* Turn a single GOT that is too big for 16-bit addressing into
2447 a sequence of GOTs, each one 16-bit addressable. */
2450 mips_elf_multi_got (abfd, info, g, got, pages)
2452 struct bfd_link_info *info;
2453 struct mips_got_info *g;
2455 bfd_size_type pages;
2457 struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
2458 struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
2459 struct mips_got_info *gg;
2460 unsigned int assign;
2462 g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash,
2463 mips_elf_bfd2got_entry_eq,
2465 if (g->bfd2got == NULL)
2468 got_per_bfd_arg.bfd2got = g->bfd2got;
2469 got_per_bfd_arg.obfd = abfd;
2470 got_per_bfd_arg.info = info;
2472 /* Count how many GOT entries each input bfd requires, creating a
2473 map from bfd to got info while at that. */
2474 mips_elf_resolve_final_got_entries (g);
2475 htab_traverse (g->got_entries, mips_elf_make_got_per_bfd, &got_per_bfd_arg);
2476 if (got_per_bfd_arg.obfd == NULL)
2479 got_per_bfd_arg.current = NULL;
2480 got_per_bfd_arg.primary = NULL;
2481 /* Taking out PAGES entries is a worst-case estimate. We could
2482 compute the maximum number of pages that each separate input bfd
2483 uses, but it's probably not worth it. */
2484 got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (abfd)
2485 / MIPS_ELF_GOT_SIZE (abfd))
2486 - MIPS_RESERVED_GOTNO - pages);
2488 /* Try to merge the GOTs of input bfds together, as long as they
2489 don't seem to exceed the maximum GOT size, choosing one of them
2490 to be the primary GOT. */
2491 htab_traverse (g->bfd2got, mips_elf_merge_gots, &got_per_bfd_arg);
2492 if (got_per_bfd_arg.obfd == NULL)
2495 /* If we find any suitable primary GOT, create an empty one. */
2496 if (got_per_bfd_arg.primary == NULL)
2498 g->next = (struct mips_got_info *)
2499 bfd_alloc (abfd, sizeof (struct mips_got_info));
2500 if (g->next == NULL)
2503 g->next->global_gotsym = NULL;
2504 g->next->global_gotno = 0;
2505 g->next->local_gotno = 0;
2506 g->next->assigned_gotno = 0;
2507 g->next->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
2508 mips_elf_multi_got_entry_eq,
2510 if (g->next->got_entries == NULL)
2512 g->next->bfd2got = NULL;
2515 g->next = got_per_bfd_arg.primary;
2516 g->next->next = got_per_bfd_arg.current;
2518 /* GG is now the master GOT, and G is the primary GOT. */
2522 /* Map the output bfd to the primary got. That's what we're going
2523 to use for bfds that use GOT16 or GOT_PAGE relocations that we
2524 didn't mark in check_relocs, and we want a quick way to find it.
2525 We can't just use gg->next because we're going to reverse the
2528 struct mips_elf_bfd2got_hash *bfdgot;
2531 bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
2532 (abfd, sizeof (struct mips_elf_bfd2got_hash));
2539 bfdgotp = htab_find_slot (gg->bfd2got, bfdgot, INSERT);
2541 BFD_ASSERT (*bfdgotp == NULL);
2545 /* The IRIX dynamic linker requires every symbol that is referenced
2546 in a dynamic relocation to be present in the primary GOT, so
2547 arrange for them to appear after those that are actually
2550 GNU/Linux could very well do without it, but it would slow down
2551 the dynamic linker, since it would have to resolve every dynamic
2552 symbol referenced in other GOTs more than once, without help from
2553 the cache. Also, knowing that every external symbol has a GOT
2554 helps speed up the resolution of local symbols too, so GNU/Linux
2555 follows IRIX's practice.
2557 The number 2 is used by mips_elf_sort_hash_table_f to count
2558 global GOT symbols that are unreferenced in the primary GOT, with
2559 an initial dynamic index computed from gg->assigned_gotno, where
2560 the number of unreferenced global entries in the primary GOT is
2564 gg->assigned_gotno = gg->global_gotno - g->global_gotno;
2565 g->global_gotno = gg->global_gotno;
2566 set_got_offset_arg.value = 2;
2570 /* This could be used for dynamic linkers that don't optimize
2571 symbol resolution while applying relocations so as to use
2572 primary GOT entries or assuming the symbol is locally-defined.
2573 With this code, we assign lower dynamic indices to global
2574 symbols that are not referenced in the primary GOT, so that
2575 their entries can be omitted. */
2576 gg->assigned_gotno = 0;
2577 set_got_offset_arg.value = -1;
2580 /* Reorder dynamic symbols as described above (which behavior
2581 depends on the setting of VALUE). */
2582 set_got_offset_arg.g = NULL;
2583 htab_traverse (gg->got_entries, mips_elf_set_global_got_offset,
2584 &set_got_offset_arg);
2585 set_got_offset_arg.value = 1;
2586 htab_traverse (g->got_entries, mips_elf_set_global_got_offset,
2587 &set_got_offset_arg);
2588 if (! mips_elf_sort_hash_table (info, 1))
2591 /* Now go through the GOTs assigning them offset ranges.
2592 [assigned_gotno, local_gotno[ will be set to the range of local
2593 entries in each GOT. We can then compute the end of a GOT by
2594 adding local_gotno to global_gotno. We reverse the list and make
2595 it circular since then we'll be able to quickly compute the
2596 beginning of a GOT, by computing the end of its predecessor. To
2597 avoid special cases for the primary GOT, while still preserving
2598 assertions that are valid for both single- and multi-got links,
2599 we arrange for the main got struct to have the right number of
2600 global entries, but set its local_gotno such that the initial
2601 offset of the primary GOT is zero. Remember that the primary GOT
2602 will become the last item in the circular linked list, so it
2603 points back to the master GOT. */
2604 gg->local_gotno = -g->global_gotno;
2605 gg->global_gotno = g->global_gotno;
2611 struct mips_got_info *gn;
2613 assign += MIPS_RESERVED_GOTNO;
2614 g->assigned_gotno = assign;
2615 g->local_gotno += assign + pages;
2616 assign = g->local_gotno + g->global_gotno;
2618 /* Take g out of the direct list, and push it onto the reversed
2619 list that gg points to. */
2627 got->_raw_size = (gg->next->local_gotno
2628 + gg->next->global_gotno) * MIPS_ELF_GOT_SIZE (abfd);
2634 /* Returns the first relocation of type r_type found, beginning with
2635 RELOCATION. RELEND is one-past-the-end of the relocation table. */
2637 static const Elf_Internal_Rela *
2638 mips_elf_next_relocation (abfd, r_type, relocation, relend)
2639 bfd *abfd ATTRIBUTE_UNUSED;
2640 unsigned int r_type;
2641 const Elf_Internal_Rela *relocation;
2642 const Elf_Internal_Rela *relend;
2644 /* According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must be
2645 immediately following. However, for the IRIX6 ABI, the next
2646 relocation may be a composed relocation consisting of several
2647 relocations for the same address. In that case, the R_MIPS_LO16
2648 relocation may occur as one of these. We permit a similar
2649 extension in general, as that is useful for GCC. */
2650 while (relocation < relend)
2652 if (ELF_R_TYPE (abfd, relocation->r_info) == r_type)
2658 /* We didn't find it. */
2659 bfd_set_error (bfd_error_bad_value);
2663 /* Return whether a relocation is against a local symbol. */
2666 mips_elf_local_relocation_p (input_bfd, relocation, local_sections,
2669 const Elf_Internal_Rela *relocation;
2670 asection **local_sections;
2671 bfd_boolean check_forced;
2673 unsigned long r_symndx;
2674 Elf_Internal_Shdr *symtab_hdr;
2675 struct mips_elf_link_hash_entry *h;
2678 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
2679 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2680 extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
2682 if (r_symndx < extsymoff)
2684 if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
2689 /* Look up the hash table to check whether the symbol
2690 was forced local. */
2691 h = (struct mips_elf_link_hash_entry *)
2692 elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
2693 /* Find the real hash-table entry for this symbol. */
2694 while (h->root.root.type == bfd_link_hash_indirect
2695 || h->root.root.type == bfd_link_hash_warning)
2696 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
2697 if ((h->root.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
2704 /* Sign-extend VALUE, which has the indicated number of BITS. */
2707 _bfd_mips_elf_sign_extend (value, bits)
2711 if (value & ((bfd_vma) 1 << (bits - 1)))
2712 /* VALUE is negative. */
2713 value |= ((bfd_vma) - 1) << bits;
2718 /* Return non-zero if the indicated VALUE has overflowed the maximum
2719 range expressable by a signed number with the indicated number of
2723 mips_elf_overflow_p (value, bits)
2727 bfd_signed_vma svalue = (bfd_signed_vma) value;
2729 if (svalue > (1 << (bits - 1)) - 1)
2730 /* The value is too big. */
2732 else if (svalue < -(1 << (bits - 1)))
2733 /* The value is too small. */
2740 /* Calculate the %high function. */
2743 mips_elf_high (value)
2746 return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
2749 /* Calculate the %higher function. */
2752 mips_elf_higher (value)
2753 bfd_vma value ATTRIBUTE_UNUSED;
2756 return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
2759 return (bfd_vma) -1;
2763 /* Calculate the %highest function. */
2766 mips_elf_highest (value)
2767 bfd_vma value ATTRIBUTE_UNUSED;
2770 return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
2773 return (bfd_vma) -1;
2777 /* Create the .compact_rel section. */
2780 mips_elf_create_compact_rel_section (abfd, info)
2782 struct bfd_link_info *info ATTRIBUTE_UNUSED;
2785 register asection *s;
2787 if (bfd_get_section_by_name (abfd, ".compact_rel") == NULL)
2789 flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
2792 s = bfd_make_section (abfd, ".compact_rel");
2794 || ! bfd_set_section_flags (abfd, s, flags)
2795 || ! bfd_set_section_alignment (abfd, s,
2796 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
2799 s->_raw_size = sizeof (Elf32_External_compact_rel);
2805 /* Create the .got section to hold the global offset table. */
2808 mips_elf_create_got_section (abfd, info, maybe_exclude)
2810 struct bfd_link_info *info;
2811 bfd_boolean maybe_exclude;
2814 register asection *s;
2815 struct elf_link_hash_entry *h;
2816 struct bfd_link_hash_entry *bh;
2817 struct mips_got_info *g;
2820 /* This function may be called more than once. */
2821 s = mips_elf_got_section (abfd, TRUE);
2824 if (! maybe_exclude)
2825 s->flags &= ~SEC_EXCLUDE;
2829 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
2830 | SEC_LINKER_CREATED);
2833 flags |= SEC_EXCLUDE;
2835 /* We have to use an alignment of 2**4 here because this is hardcoded
2836 in the function stub generation and in the linker script. */
2837 s = bfd_make_section (abfd, ".got");
2839 || ! bfd_set_section_flags (abfd, s, flags)
2840 || ! bfd_set_section_alignment (abfd, s, 4))
2843 /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the
2844 linker script because we don't want to define the symbol if we
2845 are not creating a global offset table. */
2847 if (! (_bfd_generic_link_add_one_symbol
2848 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
2849 (bfd_vma) 0, (const char *) NULL, FALSE,
2850 get_elf_backend_data (abfd)->collect, &bh)))
2853 h = (struct elf_link_hash_entry *) bh;
2854 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
2855 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
2856 h->type = STT_OBJECT;
2859 && ! bfd_elf32_link_record_dynamic_symbol (info, h))
2862 amt = sizeof (struct mips_got_info);
2863 g = (struct mips_got_info *) bfd_alloc (abfd, amt);
2866 g->global_gotsym = NULL;
2867 g->local_gotno = MIPS_RESERVED_GOTNO;
2868 g->assigned_gotno = MIPS_RESERVED_GOTNO;
2871 g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
2872 mips_elf_got_entry_eq,
2874 if (g->got_entries == NULL)
2876 mips_elf_section_data (s)->u.got_info = g;
2877 mips_elf_section_data (s)->elf.this_hdr.sh_flags
2878 |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
2883 /* Calculate the value produced by the RELOCATION (which comes from
2884 the INPUT_BFD). The ADDEND is the addend to use for this
2885 RELOCATION; RELOCATION->R_ADDEND is ignored.
2887 The result of the relocation calculation is stored in VALUEP.
2888 REQUIRE_JALXP indicates whether or not the opcode used with this
2889 relocation must be JALX.
2891 This function returns bfd_reloc_continue if the caller need take no
2892 further action regarding this relocation, bfd_reloc_notsupported if
2893 something goes dramatically wrong, bfd_reloc_overflow if an
2894 overflow occurs, and bfd_reloc_ok to indicate success. */
2896 static bfd_reloc_status_type
2897 mips_elf_calculate_relocation (abfd, input_bfd, input_section, info,
2898 relocation, addend, howto, local_syms,
2899 local_sections, valuep, namep,
2900 require_jalxp, save_addend)
2903 asection *input_section;
2904 struct bfd_link_info *info;
2905 const Elf_Internal_Rela *relocation;
2907 reloc_howto_type *howto;
2908 Elf_Internal_Sym *local_syms;
2909 asection **local_sections;
2912 bfd_boolean *require_jalxp;
2913 bfd_boolean save_addend;
2915 /* The eventual value we will return. */
2917 /* The address of the symbol against which the relocation is
2920 /* The final GP value to be used for the relocatable, executable, or
2921 shared object file being produced. */
2922 bfd_vma gp = MINUS_ONE;
2923 /* The place (section offset or address) of the storage unit being
2926 /* The value of GP used to create the relocatable object. */
2927 bfd_vma gp0 = MINUS_ONE;
2928 /* The offset into the global offset table at which the address of
2929 the relocation entry symbol, adjusted by the addend, resides
2930 during execution. */
2931 bfd_vma g = MINUS_ONE;
2932 /* The section in which the symbol referenced by the relocation is
2934 asection *sec = NULL;
2935 struct mips_elf_link_hash_entry *h = NULL;
2936 /* TRUE if the symbol referred to by this relocation is a local
2938 bfd_boolean local_p, was_local_p;
2939 /* TRUE if the symbol referred to by this relocation is "_gp_disp". */
2940 bfd_boolean gp_disp_p = FALSE;
2941 Elf_Internal_Shdr *symtab_hdr;
2943 unsigned long r_symndx;
2945 /* TRUE if overflow occurred during the calculation of the
2946 relocation value. */
2947 bfd_boolean overflowed_p;
2948 /* TRUE if this relocation refers to a MIPS16 function. */
2949 bfd_boolean target_is_16_bit_code_p = FALSE;
2951 /* Parse the relocation. */
2952 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
2953 r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
2954 p = (input_section->output_section->vma
2955 + input_section->output_offset
2956 + relocation->r_offset);
2958 /* Assume that there will be no overflow. */
2959 overflowed_p = FALSE;
2961 /* Figure out whether or not the symbol is local, and get the offset
2962 used in the array of hash table entries. */
2963 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2964 local_p = mips_elf_local_relocation_p (input_bfd, relocation,
2965 local_sections, FALSE);
2966 was_local_p = local_p;
2967 if (! elf_bad_symtab (input_bfd))
2968 extsymoff = symtab_hdr->sh_info;
2971 /* The symbol table does not follow the rule that local symbols
2972 must come before globals. */
2976 /* Figure out the value of the symbol. */
2979 Elf_Internal_Sym *sym;
2981 sym = local_syms + r_symndx;
2982 sec = local_sections[r_symndx];
2984 symbol = sec->output_section->vma + sec->output_offset;
2985 if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
2986 || (sec->flags & SEC_MERGE))
2987 symbol += sym->st_value;
2988 if ((sec->flags & SEC_MERGE)
2989 && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
2991 addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
2993 addend += sec->output_section->vma + sec->output_offset;
2996 /* MIPS16 text labels should be treated as odd. */
2997 if (sym->st_other == STO_MIPS16)
3000 /* Record the name of this symbol, for our caller. */
3001 *namep = bfd_elf_string_from_elf_section (input_bfd,
3002 symtab_hdr->sh_link,
3005 *namep = bfd_section_name (input_bfd, sec);
3007 target_is_16_bit_code_p = (sym->st_other == STO_MIPS16);
3011 /* For global symbols we look up the symbol in the hash-table. */
3012 h = ((struct mips_elf_link_hash_entry *)
3013 elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
3014 /* Find the real hash-table entry for this symbol. */
3015 while (h->root.root.type == bfd_link_hash_indirect
3016 || h->root.root.type == bfd_link_hash_warning)
3017 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3019 /* Record the name of this symbol, for our caller. */
3020 *namep = h->root.root.root.string;
3022 /* See if this is the special _gp_disp symbol. Note that such a
3023 symbol must always be a global symbol. */
3024 if (strcmp (h->root.root.root.string, "_gp_disp") == 0
3025 && ! NEWABI_P (input_bfd))
3027 /* Relocations against _gp_disp are permitted only with
3028 R_MIPS_HI16 and R_MIPS_LO16 relocations. */
3029 if (r_type != R_MIPS_HI16 && r_type != R_MIPS_LO16)
3030 return bfd_reloc_notsupported;
3034 /* If this symbol is defined, calculate its address. Note that
3035 _gp_disp is a magic symbol, always implicitly defined by the
3036 linker, so it's inappropriate to check to see whether or not
3038 else if ((h->root.root.type == bfd_link_hash_defined
3039 || h->root.root.type == bfd_link_hash_defweak)
3040 && h->root.root.u.def.section)
3042 sec = h->root.root.u.def.section;
3043 if (sec->output_section)
3044 symbol = (h->root.root.u.def.value
3045 + sec->output_section->vma
3046 + sec->output_offset);
3048 symbol = h->root.root.u.def.value;
3050 else if (h->root.root.type == bfd_link_hash_undefweak)
3051 /* We allow relocations against undefined weak symbols, giving
3052 it the value zero, so that you can undefined weak functions
3053 and check to see if they exist by looking at their
3056 else if (info->shared
3057 && !info->no_undefined
3058 && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
3060 else if (strcmp (h->root.root.root.string, "_DYNAMIC_LINK") == 0 ||
3061 strcmp (h->root.root.root.string, "_DYNAMIC_LINKING") == 0)
3063 /* If this is a dynamic link, we should have created a
3064 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
3065 in in _bfd_mips_elf_create_dynamic_sections.
3066 Otherwise, we should define the symbol with a value of 0.
3067 FIXME: It should probably get into the symbol table
3069 BFD_ASSERT (! info->shared);
3070 BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
3075 if (! ((*info->callbacks->undefined_symbol)
3076 (info, h->root.root.root.string, input_bfd,
3077 input_section, relocation->r_offset,
3078 (!info->shared || info->no_undefined
3079 || ELF_ST_VISIBILITY (h->root.other)))))
3080 return bfd_reloc_undefined;
3084 target_is_16_bit_code_p = (h->root.other == STO_MIPS16);
3087 /* If this is a 32- or 64-bit call to a 16-bit function with a stub, we
3088 need to redirect the call to the stub, unless we're already *in*
3090 if (r_type != R_MIPS16_26 && !info->relocatable
3091 && ((h != NULL && h->fn_stub != NULL)
3092 || (local_p && elf_tdata (input_bfd)->local_stubs != NULL
3093 && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
3094 && !mips_elf_stub_section_p (input_bfd, input_section))
3096 /* This is a 32- or 64-bit call to a 16-bit function. We should
3097 have already noticed that we were going to need the
3100 sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
3103 BFD_ASSERT (h->need_fn_stub);
3107 symbol = sec->output_section->vma + sec->output_offset;
3109 /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
3110 need to redirect the call to the stub. */
3111 else if (r_type == R_MIPS16_26 && !info->relocatable
3113 && (h->call_stub != NULL || h->call_fp_stub != NULL)
3114 && !target_is_16_bit_code_p)
3116 /* If both call_stub and call_fp_stub are defined, we can figure
3117 out which one to use by seeing which one appears in the input
3119 if (h->call_stub != NULL && h->call_fp_stub != NULL)
3124 for (o = input_bfd->sections; o != NULL; o = o->next)
3126 if (strncmp (bfd_get_section_name (input_bfd, o),
3127 CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
3129 sec = h->call_fp_stub;
3136 else if (h->call_stub != NULL)
3139 sec = h->call_fp_stub;
3141 BFD_ASSERT (sec->_raw_size > 0);
3142 symbol = sec->output_section->vma + sec->output_offset;
3145 /* Calls from 16-bit code to 32-bit code and vice versa require the
3146 special jalx instruction. */
3147 *require_jalxp = (!info->relocatable
3148 && (((r_type == R_MIPS16_26) && !target_is_16_bit_code_p)
3149 || ((r_type == R_MIPS_26) && target_is_16_bit_code_p)));
3151 local_p = mips_elf_local_relocation_p (input_bfd, relocation,
3152 local_sections, TRUE);
3154 /* If we haven't already determined the GOT offset, or the GP value,
3155 and we're going to need it, get it now. */
3158 case R_MIPS_GOT_PAGE:
3159 case R_MIPS_GOT_OFST:
3160 /* If this symbol got a global GOT entry, we have to decay
3161 GOT_PAGE/GOT_OFST to GOT_DISP/addend. */
3162 local_p = local_p || ! h
3164 < mips_elf_get_global_gotsym_index (elf_hash_table (info)
3166 if (local_p || r_type == R_MIPS_GOT_OFST)
3172 case R_MIPS_GOT_DISP:
3173 case R_MIPS_GOT_HI16:
3174 case R_MIPS_CALL_HI16:
3175 case R_MIPS_GOT_LO16:
3176 case R_MIPS_CALL_LO16:
3177 /* Find the index into the GOT where this value is located. */
3180 /* GOT_PAGE may take a non-zero addend, that is ignored in a
3181 GOT_PAGE relocation that decays to GOT_DISP because the
3182 symbol turns out to be global. The addend is then added
3184 BFD_ASSERT (addend == 0 || r_type == R_MIPS_GOT_PAGE);
3185 g = mips_elf_global_got_index (elf_hash_table (info)->dynobj,
3187 (struct elf_link_hash_entry *) h);
3188 if (! elf_hash_table(info)->dynamic_sections_created
3190 && (info->symbolic || h->root.dynindx == -1)
3191 && (h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
3193 /* This is a static link or a -Bsymbolic link. The
3194 symbol is defined locally, or was forced to be local.
3195 We must initialize this entry in the GOT. */
3196 bfd *tmpbfd = elf_hash_table (info)->dynobj;
3197 asection *sgot = mips_elf_got_section (tmpbfd, FALSE);
3198 MIPS_ELF_PUT_WORD (tmpbfd, symbol, sgot->contents + g);
3201 else if (r_type == R_MIPS_GOT16 || r_type == R_MIPS_CALL16)
3202 /* There's no need to create a local GOT entry here; the
3203 calculation for a local GOT16 entry does not involve G. */
3207 g = mips_elf_local_got_index (abfd, input_bfd,
3208 info, symbol + addend);
3210 return bfd_reloc_outofrange;
3213 /* Convert GOT indices to actual offsets. */
3214 g = mips_elf_got_offset_from_index (elf_hash_table (info)->dynobj,
3215 abfd, input_bfd, g);
3220 case R_MIPS16_GPREL:
3221 case R_MIPS_GPREL16:
3222 case R_MIPS_GPREL32:
3223 case R_MIPS_LITERAL:
3224 gp0 = _bfd_get_gp_value (input_bfd);
3225 gp = _bfd_get_gp_value (abfd);
3226 if (elf_hash_table (info)->dynobj)
3227 gp += mips_elf_adjust_gp (abfd,
3229 (elf_hash_table (info)->dynobj, NULL),
3237 /* Figure out what kind of relocation is being performed. */
3241 return bfd_reloc_continue;
3244 value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
3245 overflowed_p = mips_elf_overflow_p (value, 16);
3252 || (elf_hash_table (info)->dynamic_sections_created
3254 && ((h->root.elf_link_hash_flags
3255 & ELF_LINK_HASH_DEF_DYNAMIC) != 0)
3256 && ((h->root.elf_link_hash_flags
3257 & ELF_LINK_HASH_DEF_REGULAR) == 0)))
3259 && (input_section->flags & SEC_ALLOC) != 0)
3261 /* If we're creating a shared library, or this relocation is
3262 against a symbol in a shared library, then we can't know
3263 where the symbol will end up. So, we create a relocation
3264 record in the output, and leave the job up to the dynamic
3267 if (!mips_elf_create_dynamic_relocation (abfd,
3275 return bfd_reloc_undefined;
3279 if (r_type != R_MIPS_REL32)
3280 value = symbol + addend;
3284 value &= howto->dst_mask;
3289 case R_MIPS_GNU_REL_LO16:
3290 value = symbol + addend - p;
3291 value &= howto->dst_mask;
3294 case R_MIPS_GNU_REL16_S2:
3295 value = symbol + _bfd_mips_elf_sign_extend (addend << 2, 18) - p;
3296 overflowed_p = mips_elf_overflow_p (value, 18);
3297 value = (value >> 2) & howto->dst_mask;
3300 case R_MIPS_GNU_REL_HI16:
3301 /* Instead of subtracting 'p' here, we should be subtracting the
3302 equivalent value for the LO part of the reloc, since the value
3303 here is relative to that address. Because that's not easy to do,
3304 we adjust 'addend' in _bfd_mips_elf_relocate_section(). See also
3305 the comment there for more information. */
3306 value = mips_elf_high (addend + symbol - p);
3307 value &= howto->dst_mask;
3311 /* The calculation for R_MIPS16_26 is just the same as for an
3312 R_MIPS_26. It's only the storage of the relocated field into
3313 the output file that's different. That's handled in
3314 mips_elf_perform_relocation. So, we just fall through to the
3315 R_MIPS_26 case here. */
3318 value = (((addend << 2) | ((p + 4) & 0xf0000000)) + symbol) >> 2;
3320 value = (_bfd_mips_elf_sign_extend (addend << 2, 28) + symbol) >> 2;
3321 value &= howto->dst_mask;
3327 value = mips_elf_high (addend + symbol);
3328 value &= howto->dst_mask;
3332 value = mips_elf_high (addend + gp - p);
3333 overflowed_p = mips_elf_overflow_p (value, 16);
3339 value = (symbol + addend) & howto->dst_mask;
3342 value = addend + gp - p + 4;
3343 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
3344 for overflow. But, on, say, IRIX5, relocations against
3345 _gp_disp are normally generated from the .cpload
3346 pseudo-op. It generates code that normally looks like
3349 lui $gp,%hi(_gp_disp)
3350 addiu $gp,$gp,%lo(_gp_disp)
3353 Here $t9 holds the address of the function being called,
3354 as required by the MIPS ELF ABI. The R_MIPS_LO16
3355 relocation can easily overflow in this situation, but the
3356 R_MIPS_HI16 relocation will handle the overflow.
3357 Therefore, we consider this a bug in the MIPS ABI, and do
3358 not check for overflow here. */
3362 case R_MIPS_LITERAL:
3363 /* Because we don't merge literal sections, we can handle this
3364 just like R_MIPS_GPREL16. In the long run, we should merge
3365 shared literals, and then we will need to additional work
3370 case R_MIPS16_GPREL:
3371 /* The R_MIPS16_GPREL performs the same calculation as
3372 R_MIPS_GPREL16, but stores the relocated bits in a different
3373 order. We don't need to do anything special here; the
3374 differences are handled in mips_elf_perform_relocation. */
3375 case R_MIPS_GPREL16:
3376 /* Only sign-extend the addend if it was extracted from the
3377 instruction. If the addend was separate, leave it alone,
3378 otherwise we may lose significant bits. */
3379 if (howto->partial_inplace)
3380 addend = _bfd_mips_elf_sign_extend (addend, 16);
3381 value = symbol + addend - gp;
3382 /* If the symbol was local, any earlier relocatable links will
3383 have adjusted its addend with the gp offset, so compensate
3384 for that now. Don't do it for symbols forced local in this
3385 link, though, since they won't have had the gp offset applied
3389 overflowed_p = mips_elf_overflow_p (value, 16);
3398 /* The special case is when the symbol is forced to be local. We
3399 need the full address in the GOT since no R_MIPS_LO16 relocation
3401 forced = ! mips_elf_local_relocation_p (input_bfd, relocation,
3402 local_sections, FALSE);
3403 value = mips_elf_got16_entry (abfd, input_bfd, info,
3404 symbol + addend, forced);
3405 if (value == MINUS_ONE)
3406 return bfd_reloc_outofrange;
3408 = mips_elf_got_offset_from_index (elf_hash_table (info)->dynobj,
3409 abfd, input_bfd, value);
3410 overflowed_p = mips_elf_overflow_p (value, 16);
3416 case R_MIPS_GOT_DISP:
3419 overflowed_p = mips_elf_overflow_p (value, 16);
3422 case R_MIPS_GPREL32:
3423 value = (addend + symbol + gp0 - gp);
3425 value &= howto->dst_mask;
3429 value = _bfd_mips_elf_sign_extend (addend, 16) + symbol - p;
3430 overflowed_p = mips_elf_overflow_p (value, 16);
3433 case R_MIPS_GOT_HI16:
3434 case R_MIPS_CALL_HI16:
3435 /* We're allowed to handle these two relocations identically.
3436 The dynamic linker is allowed to handle the CALL relocations
3437 differently by creating a lazy evaluation stub. */
3439 value = mips_elf_high (value);
3440 value &= howto->dst_mask;
3443 case R_MIPS_GOT_LO16:
3444 case R_MIPS_CALL_LO16:
3445 value = g & howto->dst_mask;
3448 case R_MIPS_GOT_PAGE:
3449 /* GOT_PAGE relocations that reference non-local symbols decay
3450 to GOT_DISP. The corresponding GOT_OFST relocation decays to
3454 value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
3455 if (value == MINUS_ONE)
3456 return bfd_reloc_outofrange;
3457 value = mips_elf_got_offset_from_index (elf_hash_table (info)->dynobj,
3458 abfd, input_bfd, value);
3459 overflowed_p = mips_elf_overflow_p (value, 16);
3462 case R_MIPS_GOT_OFST:
3464 mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
3467 overflowed_p = mips_elf_overflow_p (value, 16);
3471 value = symbol - addend;
3472 value &= howto->dst_mask;
3476 value = mips_elf_higher (addend + symbol);
3477 value &= howto->dst_mask;
3480 case R_MIPS_HIGHEST:
3481 value = mips_elf_highest (addend + symbol);
3482 value &= howto->dst_mask;
3485 case R_MIPS_SCN_DISP:
3486 value = symbol + addend - sec->output_offset;
3487 value &= howto->dst_mask;
3492 /* Both of these may be ignored. R_MIPS_JALR is an optimization
3493 hint; we could improve performance by honoring that hint. */
3494 return bfd_reloc_continue;
3496 case R_MIPS_GNU_VTINHERIT:
3497 case R_MIPS_GNU_VTENTRY:
3498 /* We don't do anything with these at present. */
3499 return bfd_reloc_continue;
3502 /* An unrecognized relocation type. */
3503 return bfd_reloc_notsupported;
3506 /* Store the VALUE for our caller. */
3508 return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
3511 /* Obtain the field relocated by RELOCATION. */
3514 mips_elf_obtain_contents (howto, relocation, input_bfd, contents)
3515 reloc_howto_type *howto;
3516 const Elf_Internal_Rela *relocation;
3521 bfd_byte *location = contents + relocation->r_offset;
3523 /* Obtain the bytes. */
3524 x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
3526 if ((ELF_R_TYPE (input_bfd, relocation->r_info) == R_MIPS16_26
3527 || ELF_R_TYPE (input_bfd, relocation->r_info) == R_MIPS16_GPREL)
3528 && bfd_little_endian (input_bfd))
3529 /* The two 16-bit words will be reversed on a little-endian system.
3530 See mips_elf_perform_relocation for more details. */
3531 x = (((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16));
3536 /* It has been determined that the result of the RELOCATION is the
3537 VALUE. Use HOWTO to place VALUE into the output file at the
3538 appropriate position. The SECTION is the section to which the
3539 relocation applies. If REQUIRE_JALX is TRUE, then the opcode used
3540 for the relocation must be either JAL or JALX, and it is
3541 unconditionally converted to JALX.
3543 Returns FALSE if anything goes wrong. */
3546 mips_elf_perform_relocation (info, howto, relocation, value, input_bfd,
3547 input_section, contents, require_jalx)
3548 struct bfd_link_info *info;
3549 reloc_howto_type *howto;
3550 const Elf_Internal_Rela *relocation;
3553 asection *input_section;
3555 bfd_boolean require_jalx;
3559 int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
3561 /* Figure out where the relocation is occurring. */
3562 location = contents + relocation->r_offset;
3564 /* Obtain the current value. */
3565 x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
3567 /* Clear the field we are setting. */
3568 x &= ~howto->dst_mask;
3570 /* If this is the R_MIPS16_26 relocation, we must store the
3571 value in a funny way. */
3572 if (r_type == R_MIPS16_26)
3574 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
3575 Most mips16 instructions are 16 bits, but these instructions
3578 The format of these instructions is:
3580 +--------------+--------------------------------+
3581 ! JALX ! X! Imm 20:16 ! Imm 25:21 !
3582 +--------------+--------------------------------+
3584 +-----------------------------------------------+
3586 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx.
3587 Note that the immediate value in the first word is swapped.
3589 When producing a relocatable object file, R_MIPS16_26 is
3590 handled mostly like R_MIPS_26. In particular, the addend is
3591 stored as a straight 26-bit value in a 32-bit instruction.
3592 (gas makes life simpler for itself by never adjusting a
3593 R_MIPS16_26 reloc to be against a section, so the addend is
3594 always zero). However, the 32 bit instruction is stored as 2
3595 16-bit values, rather than a single 32-bit value. In a
3596 big-endian file, the result is the same; in a little-endian
3597 file, the two 16-bit halves of the 32 bit value are swapped.
3598 This is so that a disassembler can recognize the jal
3601 When doing a final link, R_MIPS16_26 is treated as a 32 bit
3602 instruction stored as two 16-bit values. The addend A is the
3603 contents of the targ26 field. The calculation is the same as
3604 R_MIPS_26. When storing the calculated value, reorder the
3605 immediate value as shown above, and don't forget to store the
3606 value as two 16-bit values.
3608 To put it in MIPS ABI terms, the relocation field is T-targ26-16,
3612 +--------+----------------------+
3616 +--------+----------------------+
3619 +----------+------+-------------+
3623 +----------+--------------------+
3624 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
3625 ((sub1 << 16) | sub2)).
3627 When producing a relocatable object file, the calculation is
3628 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
3629 When producing a fully linked file, the calculation is
3630 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
3631 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff) */
3633 if (!info->relocatable)
3634 /* Shuffle the bits according to the formula above. */
3635 value = (((value & 0x1f0000) << 5)
3636 | ((value & 0x3e00000) >> 5)
3637 | (value & 0xffff));
3639 else if (r_type == R_MIPS16_GPREL)
3641 /* R_MIPS16_GPREL is used for GP-relative addressing in mips16
3642 mode. A typical instruction will have a format like this:
3644 +--------------+--------------------------------+
3645 ! EXTEND ! Imm 10:5 ! Imm 15:11 !
3646 +--------------+--------------------------------+
3647 ! Major ! rx ! ry ! Imm 4:0 !
3648 +--------------+--------------------------------+
3650 EXTEND is the five bit value 11110. Major is the instruction
3653 This is handled exactly like R_MIPS_GPREL16, except that the
3654 addend is retrieved and stored as shown in this diagram; that
3655 is, the Imm fields above replace the V-rel16 field.
3657 All we need to do here is shuffle the bits appropriately. As
3658 above, the two 16-bit halves must be swapped on a
3659 little-endian system. */
3660 value = (((value & 0x7e0) << 16)
3661 | ((value & 0xf800) << 5)
3665 /* Set the field. */
3666 x |= (value & howto->dst_mask);
3668 /* If required, turn JAL into JALX. */
3672 bfd_vma opcode = x >> 26;
3673 bfd_vma jalx_opcode;
3675 /* Check to see if the opcode is already JAL or JALX. */
3676 if (r_type == R_MIPS16_26)
3678 ok = ((opcode == 0x6) || (opcode == 0x7));
3683 ok = ((opcode == 0x3) || (opcode == 0x1d));
3687 /* If the opcode is not JAL or JALX, there's a problem. */
3690 (*_bfd_error_handler)
3691 (_("%s: %s+0x%lx: jump to stub routine which is not jal"),
3692 bfd_archive_filename (input_bfd),
3693 input_section->name,
3694 (unsigned long) relocation->r_offset);
3695 bfd_set_error (bfd_error_bad_value);
3699 /* Make this the JALX opcode. */
3700 x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
3703 /* Swap the high- and low-order 16 bits on little-endian systems
3704 when doing a MIPS16 relocation. */
3705 if ((r_type == R_MIPS16_GPREL || r_type == R_MIPS16_26)
3706 && bfd_little_endian (input_bfd))
3707 x = (((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16));
3709 /* Put the value into the output. */
3710 bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
3714 /* Returns TRUE if SECTION is a MIPS16 stub section. */
3717 mips_elf_stub_section_p (abfd, section)
3718 bfd *abfd ATTRIBUTE_UNUSED;
3721 const char *name = bfd_get_section_name (abfd, section);
3723 return (strncmp (name, FN_STUB, sizeof FN_STUB - 1) == 0
3724 || strncmp (name, CALL_STUB, sizeof CALL_STUB - 1) == 0
3725 || strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0);
3728 /* Add room for N relocations to the .rel.dyn section in ABFD. */
3731 mips_elf_allocate_dynamic_relocations (abfd, n)
3737 s = mips_elf_rel_dyn_section (abfd, FALSE);
3738 BFD_ASSERT (s != NULL);
3740 if (s->_raw_size == 0)
3742 /* Make room for a null element. */
3743 s->_raw_size += MIPS_ELF_REL_SIZE (abfd);
3746 s->_raw_size += n * MIPS_ELF_REL_SIZE (abfd);
3749 /* Create a rel.dyn relocation for the dynamic linker to resolve. REL
3750 is the original relocation, which is now being transformed into a
3751 dynamic relocation. The ADDENDP is adjusted if necessary; the
3752 caller should store the result in place of the original addend. */
3755 mips_elf_create_dynamic_relocation (output_bfd, info, rel, h, sec,
3756 symbol, addendp, input_section)
3758 struct bfd_link_info *info;
3759 const Elf_Internal_Rela *rel;
3760 struct mips_elf_link_hash_entry *h;
3764 asection *input_section;
3766 Elf_Internal_Rela outrel[3];
3772 r_type = ELF_R_TYPE (output_bfd, rel->r_info);
3773 dynobj = elf_hash_table (info)->dynobj;
3774 sreloc = mips_elf_rel_dyn_section (dynobj, FALSE);
3775 BFD_ASSERT (sreloc != NULL);
3776 BFD_ASSERT (sreloc->contents != NULL);
3777 BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
3778 < sreloc->_raw_size);
3781 outrel[0].r_offset =
3782 _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
3783 outrel[1].r_offset =
3784 _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
3785 outrel[2].r_offset =
3786 _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
3789 /* We begin by assuming that the offset for the dynamic relocation
3790 is the same as for the original relocation. We'll adjust this
3791 later to reflect the correct output offsets. */
3792 if (input_section->sec_info_type != ELF_INFO_TYPE_STABS)
3794 outrel[1].r_offset = rel[1].r_offset;
3795 outrel[2].r_offset = rel[2].r_offset;
3799 /* Except that in a stab section things are more complex.
3800 Because we compress stab information, the offset given in the
3801 relocation may not be the one we want; we must let the stabs
3802 machinery tell us the offset. */
3803 outrel[1].r_offset = outrel[0].r_offset;
3804 outrel[2].r_offset = outrel[0].r_offset;
3805 /* If we didn't need the relocation at all, this value will be
3807 if (outrel[0].r_offset == (bfd_vma) -1)
3812 if (outrel[0].r_offset == (bfd_vma) -1)
3813 /* The relocation field has been deleted. */
3815 else if (outrel[0].r_offset == (bfd_vma) -2)
3817 /* The relocation field has been converted into a relative value of
3818 some sort. Functions like _bfd_elf_write_section_eh_frame expect
3819 the field to be fully relocated, so add in the symbol's value. */
3824 /* If we've decided to skip this relocation, just output an empty
3825 record. Note that R_MIPS_NONE == 0, so that this call to memset
3826 is a way of setting R_TYPE to R_MIPS_NONE. */
3828 memset (outrel, 0, sizeof (Elf_Internal_Rela) * 3);
3832 bfd_boolean defined_p;
3834 /* We must now calculate the dynamic symbol table index to use
3835 in the relocation. */
3837 && (! info->symbolic || (h->root.elf_link_hash_flags
3838 & ELF_LINK_HASH_DEF_REGULAR) == 0)
3839 /* h->root.dynindx may be -1 if this symbol was marked to
3841 && h->root.dynindx != -1)
3843 indx = h->root.dynindx;
3844 if (SGI_COMPAT (output_bfd))
3845 defined_p = ((h->root.elf_link_hash_flags
3846 & ELF_LINK_HASH_DEF_REGULAR) != 0);
3848 /* ??? glibc's ld.so just adds the final GOT entry to the
3849 relocation field. It therefore treats relocs against
3850 defined symbols in the same way as relocs against
3851 undefined symbols. */
3856 if (sec != NULL && bfd_is_abs_section (sec))
3858 else if (sec == NULL || sec->owner == NULL)
3860 bfd_set_error (bfd_error_bad_value);
3865 indx = elf_section_data (sec->output_section)->dynindx;
3870 /* Instead of generating a relocation using the section
3871 symbol, we may as well make it a fully relative
3872 relocation. We want to avoid generating relocations to
3873 local symbols because we used to generate them
3874 incorrectly, without adding the original symbol value,
3875 which is mandated by the ABI for section symbols. In
3876 order to give dynamic loaders and applications time to
3877 phase out the incorrect use, we refrain from emitting
3878 section-relative relocations. It's not like they're
3879 useful, after all. This should be a bit more efficient
3881 /* ??? Although this behavior is compatible with glibc's ld.so,
3882 the ABI says that relocations against STN_UNDEF should have
3883 a symbol value of 0. Irix rld honors this, so relocations
3884 against STN_UNDEF have no effect. */
3885 if (!SGI_COMPAT (output_bfd))
3890 /* If the relocation was previously an absolute relocation and
3891 this symbol will not be referred to by the relocation, we must
3892 adjust it by the value we give it in the dynamic symbol table.
3893 Otherwise leave the job up to the dynamic linker. */
3894 if (defined_p && r_type != R_MIPS_REL32)
3897 /* The relocation is always an REL32 relocation because we don't
3898 know where the shared library will wind up at load-time. */
3899 outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
3901 /* For strict adherence to the ABI specification, we should
3902 generate a R_MIPS_64 relocation record by itself before the
3903 _REL32/_64 record as well, such that the addend is read in as
3904 a 64-bit value (REL32 is a 32-bit relocation, after all).
3905 However, since none of the existing ELF64 MIPS dynamic
3906 loaders seems to care, we don't waste space with these
3907 artificial relocations. If this turns out to not be true,
3908 mips_elf_allocate_dynamic_relocation() should be tweaked so
3909 as to make room for a pair of dynamic relocations per
3910 invocation if ABI_64_P, and here we should generate an
3911 additional relocation record with R_MIPS_64 by itself for a
3912 NULL symbol before this relocation record. */
3913 outrel[1].r_info = ELF_R_INFO (output_bfd, (unsigned long) 0,
3914 ABI_64_P (output_bfd)
3917 outrel[2].r_info = ELF_R_INFO (output_bfd, (unsigned long) 0,
3920 /* Adjust the output offset of the relocation to reference the
3921 correct location in the output file. */
3922 outrel[0].r_offset += (input_section->output_section->vma
3923 + input_section->output_offset);
3924 outrel[1].r_offset += (input_section->output_section->vma
3925 + input_section->output_offset);
3926 outrel[2].r_offset += (input_section->output_section->vma
3927 + input_section->output_offset);
3930 /* Put the relocation back out. We have to use the special
3931 relocation outputter in the 64-bit case since the 64-bit
3932 relocation format is non-standard. */
3933 if (ABI_64_P (output_bfd))
3935 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3936 (output_bfd, &outrel[0],
3938 + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
3941 bfd_elf32_swap_reloc_out
3942 (output_bfd, &outrel[0],
3943 (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
3945 /* We've now added another relocation. */
3946 ++sreloc->reloc_count;
3948 /* Make sure the output section is writable. The dynamic linker
3949 will be writing to it. */
3950 elf_section_data (input_section->output_section)->this_hdr.sh_flags
3953 /* On IRIX5, make an entry of compact relocation info. */
3954 if (! skip && IRIX_COMPAT (output_bfd) == ict_irix5)
3956 asection *scpt = bfd_get_section_by_name (dynobj, ".compact_rel");
3961 Elf32_crinfo cptrel;
3963 mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
3964 cptrel.vaddr = (rel->r_offset
3965 + input_section->output_section->vma
3966 + input_section->output_offset);
3967 if (r_type == R_MIPS_REL32)
3968 mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
3970 mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
3971 mips_elf_set_cr_dist2to (cptrel, 0);
3972 cptrel.konst = *addendp;
3974 cr = (scpt->contents
3975 + sizeof (Elf32_External_compact_rel));
3976 bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
3977 ((Elf32_External_crinfo *) cr
3978 + scpt->reloc_count));
3979 ++scpt->reloc_count;
3986 /* Return the MACH for a MIPS e_flags value. */
3989 _bfd_elf_mips_mach (flags)
3992 switch (flags & EF_MIPS_MACH)
3994 case E_MIPS_MACH_3900:
3995 return bfd_mach_mips3900;
3997 case E_MIPS_MACH_4010:
3998 return bfd_mach_mips4010;
4000 case E_MIPS_MACH_4100:
4001 return bfd_mach_mips4100;
4003 case E_MIPS_MACH_4111:
4004 return bfd_mach_mips4111;
4006 case E_MIPS_MACH_4120:
4007 return bfd_mach_mips4120;
4009 case E_MIPS_MACH_4650:
4010 return bfd_mach_mips4650;
4012 case E_MIPS_MACH_5400:
4013 return bfd_mach_mips5400;
4015 case E_MIPS_MACH_5500:
4016 return bfd_mach_mips5500;
4018 case E_MIPS_MACH_SB1:
4019 return bfd_mach_mips_sb1;
4022 switch (flags & EF_MIPS_ARCH)
4026 return bfd_mach_mips3000;
4030 return bfd_mach_mips6000;
4034 return bfd_mach_mips4000;
4038 return bfd_mach_mips8000;
4042 return bfd_mach_mips5;
4045 case E_MIPS_ARCH_32:
4046 return bfd_mach_mipsisa32;
4049 case E_MIPS_ARCH_64:
4050 return bfd_mach_mipsisa64;
4053 case E_MIPS_ARCH_32R2:
4054 return bfd_mach_mipsisa32r2;
4062 /* Return printable name for ABI. */
4064 static INLINE char *
4065 elf_mips_abi_name (abfd)
4070 flags = elf_elfheader (abfd)->e_flags;
4071 switch (flags & EF_MIPS_ABI)
4074 if (ABI_N32_P (abfd))
4076 else if (ABI_64_P (abfd))
4080 case E_MIPS_ABI_O32:
4082 case E_MIPS_ABI_O64:
4084 case E_MIPS_ABI_EABI32:
4086 case E_MIPS_ABI_EABI64:
4089 return "unknown abi";
4093 /* MIPS ELF uses two common sections. One is the usual one, and the
4094 other is for small objects. All the small objects are kept
4095 together, and then referenced via the gp pointer, which yields
4096 faster assembler code. This is what we use for the small common
4097 section. This approach is copied from ecoff.c. */
4098 static asection mips_elf_scom_section;
4099 static asymbol mips_elf_scom_symbol;
4100 static asymbol *mips_elf_scom_symbol_ptr;
4102 /* MIPS ELF also uses an acommon section, which represents an
4103 allocated common symbol which may be overridden by a
4104 definition in a shared library. */
4105 static asection mips_elf_acom_section;
4106 static asymbol mips_elf_acom_symbol;
4107 static asymbol *mips_elf_acom_symbol_ptr;
4109 /* Handle the special MIPS section numbers that a symbol may use.
4110 This is used for both the 32-bit and the 64-bit ABI. */
4113 _bfd_mips_elf_symbol_processing (abfd, asym)
4117 elf_symbol_type *elfsym;
4119 elfsym = (elf_symbol_type *) asym;
4120 switch (elfsym->internal_elf_sym.st_shndx)
4122 case SHN_MIPS_ACOMMON:
4123 /* This section is used in a dynamically linked executable file.
4124 It is an allocated common section. The dynamic linker can
4125 either resolve these symbols to something in a shared
4126 library, or it can just leave them here. For our purposes,
4127 we can consider these symbols to be in a new section. */
4128 if (mips_elf_acom_section.name == NULL)
4130 /* Initialize the acommon section. */
4131 mips_elf_acom_section.name = ".acommon";
4132 mips_elf_acom_section.flags = SEC_ALLOC;
4133 mips_elf_acom_section.output_section = &mips_elf_acom_section;
4134 mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
4135 mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
4136 mips_elf_acom_symbol.name = ".acommon";
4137 mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
4138 mips_elf_acom_symbol.section = &mips_elf_acom_section;
4139 mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
4141 asym->section = &mips_elf_acom_section;
4145 /* Common symbols less than the GP size are automatically
4146 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */
4147 if (asym->value > elf_gp_size (abfd)
4148 || IRIX_COMPAT (abfd) == ict_irix6)
4151 case SHN_MIPS_SCOMMON:
4152 if (mips_elf_scom_section.name == NULL)
4154 /* Initialize the small common section. */
4155 mips_elf_scom_section.name = ".scommon";
4156 mips_elf_scom_section.flags = SEC_IS_COMMON;
4157 mips_elf_scom_section.output_section = &mips_elf_scom_section;
4158 mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
4159 mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
4160 mips_elf_scom_symbol.name = ".scommon";
4161 mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
4162 mips_elf_scom_symbol.section = &mips_elf_scom_section;
4163 mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
4165 asym->section = &mips_elf_scom_section;
4166 asym->value = elfsym->internal_elf_sym.st_size;
4169 case SHN_MIPS_SUNDEFINED:
4170 asym->section = bfd_und_section_ptr;
4173 #if 0 /* for SGI_COMPAT */
4175 asym->section = mips_elf_text_section_ptr;
4179 asym->section = mips_elf_data_section_ptr;
4185 /* Work over a section just before writing it out. This routine is
4186 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize
4187 sections that need the SHF_MIPS_GPREL flag by name; there has to be
4191 _bfd_mips_elf_section_processing (abfd, hdr)
4193 Elf_Internal_Shdr *hdr;
4195 if (hdr->sh_type == SHT_MIPS_REGINFO
4196 && hdr->sh_size > 0)
4200 BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
4201 BFD_ASSERT (hdr->contents == NULL);
4204 hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
4207 H_PUT_32 (abfd, elf_gp (abfd), buf);
4208 if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4)
4212 if (hdr->sh_type == SHT_MIPS_OPTIONS
4213 && hdr->bfd_section != NULL
4214 && mips_elf_section_data (hdr->bfd_section) != NULL
4215 && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
4217 bfd_byte *contents, *l, *lend;
4219 /* We stored the section contents in the tdata field in the
4220 set_section_contents routine. We save the section contents
4221 so that we don't have to read them again.
4222 At this point we know that elf_gp is set, so we can look
4223 through the section contents to see if there is an
4224 ODK_REGINFO structure. */
4226 contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
4228 lend = contents + hdr->sh_size;
4229 while (l + sizeof (Elf_External_Options) <= lend)
4231 Elf_Internal_Options intopt;
4233 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
4235 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
4242 + sizeof (Elf_External_Options)
4243 + (sizeof (Elf64_External_RegInfo) - 8)),
4246 H_PUT_64 (abfd, elf_gp (abfd), buf);
4247 if (bfd_bwrite (buf, (bfd_size_type) 8, abfd) != 8)
4250 else if (intopt.kind == ODK_REGINFO)
4257 + sizeof (Elf_External_Options)
4258 + (sizeof (Elf32_External_RegInfo) - 4)),
4261 H_PUT_32 (abfd, elf_gp (abfd), buf);
4262 if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4)
4269 if (hdr->bfd_section != NULL)
4271 const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
4273 if (strcmp (name, ".sdata") == 0
4274 || strcmp (name, ".lit8") == 0
4275 || strcmp (name, ".lit4") == 0)
4277 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4278 hdr->sh_type = SHT_PROGBITS;
4280 else if (strcmp (name, ".sbss") == 0)
4282 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4283 hdr->sh_type = SHT_NOBITS;
4285 else if (strcmp (name, ".srdata") == 0)
4287 hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
4288 hdr->sh_type = SHT_PROGBITS;
4290 else if (strcmp (name, ".compact_rel") == 0)
4293 hdr->sh_type = SHT_PROGBITS;
4295 else if (strcmp (name, ".rtproc") == 0)
4297 if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
4299 unsigned int adjust;
4301 adjust = hdr->sh_size % hdr->sh_addralign;
4303 hdr->sh_size += hdr->sh_addralign - adjust;
4311 /* Handle a MIPS specific section when reading an object file. This
4312 is called when elfcode.h finds a section with an unknown type.
4313 This routine supports both the 32-bit and 64-bit ELF ABI.
4315 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
4319 _bfd_mips_elf_section_from_shdr (abfd, hdr, name)
4321 Elf_Internal_Shdr *hdr;
4326 /* There ought to be a place to keep ELF backend specific flags, but
4327 at the moment there isn't one. We just keep track of the
4328 sections by their name, instead. Fortunately, the ABI gives
4329 suggested names for all the MIPS specific sections, so we will
4330 probably get away with this. */
4331 switch (hdr->sh_type)
4333 case SHT_MIPS_LIBLIST:
4334 if (strcmp (name, ".liblist") != 0)
4338 if (strcmp (name, ".msym") != 0)
4341 case SHT_MIPS_CONFLICT:
4342 if (strcmp (name, ".conflict") != 0)
4345 case SHT_MIPS_GPTAB:
4346 if (strncmp (name, ".gptab.", sizeof ".gptab." - 1) != 0)
4349 case SHT_MIPS_UCODE:
4350 if (strcmp (name, ".ucode") != 0)
4353 case SHT_MIPS_DEBUG:
4354 if (strcmp (name, ".mdebug") != 0)
4356 flags = SEC_DEBUGGING;
4358 case SHT_MIPS_REGINFO:
4359 if (strcmp (name, ".reginfo") != 0
4360 || hdr->sh_size != sizeof (Elf32_External_RegInfo))
4362 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
4364 case SHT_MIPS_IFACE:
4365 if (strcmp (name, ".MIPS.interfaces") != 0)
4368 case SHT_MIPS_CONTENT:
4369 if (strncmp (name, ".MIPS.content", sizeof ".MIPS.content" - 1) != 0)
4372 case SHT_MIPS_OPTIONS:
4373 if (strcmp (name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) != 0)
4376 case SHT_MIPS_DWARF:
4377 if (strncmp (name, ".debug_", sizeof ".debug_" - 1) != 0)
4380 case SHT_MIPS_SYMBOL_LIB:
4381 if (strcmp (name, ".MIPS.symlib") != 0)
4384 case SHT_MIPS_EVENTS:
4385 if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) != 0
4386 && strncmp (name, ".MIPS.post_rel",
4387 sizeof ".MIPS.post_rel" - 1) != 0)
4394 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
4399 if (! bfd_set_section_flags (abfd, hdr->bfd_section,
4400 (bfd_get_section_flags (abfd,
4406 /* FIXME: We should record sh_info for a .gptab section. */
4408 /* For a .reginfo section, set the gp value in the tdata information
4409 from the contents of this section. We need the gp value while
4410 processing relocs, so we just get it now. The .reginfo section
4411 is not used in the 64-bit MIPS ELF ABI. */
4412 if (hdr->sh_type == SHT_MIPS_REGINFO)
4414 Elf32_External_RegInfo ext;
4417 if (! bfd_get_section_contents (abfd, hdr->bfd_section, (PTR) &ext,
4419 (bfd_size_type) sizeof ext))
4421 bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
4422 elf_gp (abfd) = s.ri_gp_value;
4425 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
4426 set the gp value based on what we find. We may see both
4427 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
4428 they should agree. */
4429 if (hdr->sh_type == SHT_MIPS_OPTIONS)
4431 bfd_byte *contents, *l, *lend;
4433 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
4434 if (contents == NULL)
4436 if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
4437 (file_ptr) 0, hdr->sh_size))
4443 lend = contents + hdr->sh_size;
4444 while (l + sizeof (Elf_External_Options) <= lend)
4446 Elf_Internal_Options intopt;
4448 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
4450 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
4452 Elf64_Internal_RegInfo intreg;
4454 bfd_mips_elf64_swap_reginfo_in
4456 ((Elf64_External_RegInfo *)
4457 (l + sizeof (Elf_External_Options))),
4459 elf_gp (abfd) = intreg.ri_gp_value;
4461 else if (intopt.kind == ODK_REGINFO)
4463 Elf32_RegInfo intreg;
4465 bfd_mips_elf32_swap_reginfo_in
4467 ((Elf32_External_RegInfo *)
4468 (l + sizeof (Elf_External_Options))),
4470 elf_gp (abfd) = intreg.ri_gp_value;
4480 /* Set the correct type for a MIPS ELF section. We do this by the
4481 section name, which is a hack, but ought to work. This routine is
4482 used by both the 32-bit and the 64-bit ABI. */
4485 _bfd_mips_elf_fake_sections (abfd, hdr, sec)
4487 Elf_Internal_Shdr *hdr;
4490 register const char *name;
4492 name = bfd_get_section_name (abfd, sec);
4494 if (strcmp (name, ".liblist") == 0)
4496 hdr->sh_type = SHT_MIPS_LIBLIST;
4497 hdr->sh_info = sec->_raw_size / sizeof (Elf32_Lib);
4498 /* The sh_link field is set in final_write_processing. */
4500 else if (strcmp (name, ".conflict") == 0)
4501 hdr->sh_type = SHT_MIPS_CONFLICT;
4502 else if (strncmp (name, ".gptab.", sizeof ".gptab." - 1) == 0)
4504 hdr->sh_type = SHT_MIPS_GPTAB;
4505 hdr->sh_entsize = sizeof (Elf32_External_gptab);
4506 /* The sh_info field is set in final_write_processing. */
4508 else if (strcmp (name, ".ucode") == 0)
4509 hdr->sh_type = SHT_MIPS_UCODE;
4510 else if (strcmp (name, ".mdebug") == 0)
4512 hdr->sh_type = SHT_MIPS_DEBUG;
4513 /* In a shared object on IRIX 5.3, the .mdebug section has an
4514 entsize of 0. FIXME: Does this matter? */
4515 if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
4516 hdr->sh_entsize = 0;
4518 hdr->sh_entsize = 1;
4520 else if (strcmp (name, ".reginfo") == 0)
4522 hdr->sh_type = SHT_MIPS_REGINFO;
4523 /* In a shared object on IRIX 5.3, the .reginfo section has an
4524 entsize of 0x18. FIXME: Does this matter? */
4525 if (SGI_COMPAT (abfd))
4527 if ((abfd->flags & DYNAMIC) != 0)
4528 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
4530 hdr->sh_entsize = 1;
4533 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
4535 else if (SGI_COMPAT (abfd)
4536 && (strcmp (name, ".hash") == 0
4537 || strcmp (name, ".dynamic") == 0
4538 || strcmp (name, ".dynstr") == 0))
4540 if (SGI_COMPAT (abfd))
4541 hdr->sh_entsize = 0;
4543 /* This isn't how the IRIX6 linker behaves. */
4544 hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
4547 else if (strcmp (name, ".got") == 0
4548 || strcmp (name, ".srdata") == 0
4549 || strcmp (name, ".sdata") == 0
4550 || strcmp (name, ".sbss") == 0
4551 || strcmp (name, ".lit4") == 0
4552 || strcmp (name, ".lit8") == 0)
4553 hdr->sh_flags |= SHF_MIPS_GPREL;
4554 else if (strcmp (name, ".MIPS.interfaces") == 0)
4556 hdr->sh_type = SHT_MIPS_IFACE;
4557 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
4559 else if (strncmp (name, ".MIPS.content", strlen (".MIPS.content")) == 0)
4561 hdr->sh_type = SHT_MIPS_CONTENT;
4562 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
4563 /* The sh_info field is set in final_write_processing. */
4565 else if (strcmp (name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) == 0)
4567 hdr->sh_type = SHT_MIPS_OPTIONS;
4568 hdr->sh_entsize = 1;
4569 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
4571 else if (strncmp (name, ".debug_", sizeof ".debug_" - 1) == 0)
4572 hdr->sh_type = SHT_MIPS_DWARF;
4573 else if (strcmp (name, ".MIPS.symlib") == 0)
4575 hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
4576 /* The sh_link and sh_info fields are set in
4577 final_write_processing. */
4579 else if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0
4580 || strncmp (name, ".MIPS.post_rel",
4581 sizeof ".MIPS.post_rel" - 1) == 0)
4583 hdr->sh_type = SHT_MIPS_EVENTS;
4584 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
4585 /* The sh_link field is set in final_write_processing. */
4587 else if (strcmp (name, ".msym") == 0)
4589 hdr->sh_type = SHT_MIPS_MSYM;
4590 hdr->sh_flags |= SHF_ALLOC;
4591 hdr->sh_entsize = 8;
4594 /* The generic elf_fake_sections will set up REL_HDR using the default
4595 kind of relocations. We used to set up a second header for the
4596 non-default kind of relocations here, but only NewABI would use
4597 these, and the IRIX ld doesn't like resulting empty RELA sections.
4598 Thus we create those header only on demand now. */
4603 /* Given a BFD section, try to locate the corresponding ELF section
4604 index. This is used by both the 32-bit and the 64-bit ABI.
4605 Actually, it's not clear to me that the 64-bit ABI supports these,
4606 but for non-PIC objects we will certainly want support for at least
4607 the .scommon section. */
4610 _bfd_mips_elf_section_from_bfd_section (abfd, sec, retval)
4611 bfd *abfd ATTRIBUTE_UNUSED;
4615 if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
4617 *retval = SHN_MIPS_SCOMMON;
4620 if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
4622 *retval = SHN_MIPS_ACOMMON;
4628 /* Hook called by the linker routine which adds symbols from an object
4629 file. We must handle the special MIPS section numbers here. */
4632 _bfd_mips_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
4634 struct bfd_link_info *info;
4635 const Elf_Internal_Sym *sym;
4637 flagword *flagsp ATTRIBUTE_UNUSED;
4641 if (SGI_COMPAT (abfd)
4642 && (abfd->flags & DYNAMIC) != 0
4643 && strcmp (*namep, "_rld_new_interface") == 0)
4645 /* Skip IRIX5 rld entry name. */
4650 switch (sym->st_shndx)
4653 /* Common symbols less than the GP size are automatically
4654 treated as SHN_MIPS_SCOMMON symbols. */
4655 if (sym->st_size > elf_gp_size (abfd)
4656 || IRIX_COMPAT (abfd) == ict_irix6)
4659 case SHN_MIPS_SCOMMON:
4660 *secp = bfd_make_section_old_way (abfd, ".scommon");
4661 (*secp)->flags |= SEC_IS_COMMON;
4662 *valp = sym->st_size;
4666 /* This section is used in a shared object. */
4667 if (elf_tdata (abfd)->elf_text_section == NULL)
4669 asymbol *elf_text_symbol;
4670 asection *elf_text_section;
4671 bfd_size_type amt = sizeof (asection);
4673 elf_text_section = bfd_zalloc (abfd, amt);
4674 if (elf_text_section == NULL)
4677 amt = sizeof (asymbol);
4678 elf_text_symbol = bfd_zalloc (abfd, amt);
4679 if (elf_text_symbol == NULL)
4682 /* Initialize the section. */
4684 elf_tdata (abfd)->elf_text_section = elf_text_section;
4685 elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
4687 elf_text_section->symbol = elf_text_symbol;
4688 elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
4690 elf_text_section->name = ".text";
4691 elf_text_section->flags = SEC_NO_FLAGS;
4692 elf_text_section->output_section = NULL;
4693 elf_text_section->owner = abfd;
4694 elf_text_symbol->name = ".text";
4695 elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
4696 elf_text_symbol->section = elf_text_section;
4698 /* This code used to do *secp = bfd_und_section_ptr if
4699 info->shared. I don't know why, and that doesn't make sense,
4700 so I took it out. */
4701 *secp = elf_tdata (abfd)->elf_text_section;
4704 case SHN_MIPS_ACOMMON:
4705 /* Fall through. XXX Can we treat this as allocated data? */
4707 /* This section is used in a shared object. */
4708 if (elf_tdata (abfd)->elf_data_section == NULL)
4710 asymbol *elf_data_symbol;
4711 asection *elf_data_section;
4712 bfd_size_type amt = sizeof (asection);
4714 elf_data_section = bfd_zalloc (abfd, amt);
4715 if (elf_data_section == NULL)
4718 amt = sizeof (asymbol);
4719 elf_data_symbol = bfd_zalloc (abfd, amt);
4720 if (elf_data_symbol == NULL)
4723 /* Initialize the section. */
4725 elf_tdata (abfd)->elf_data_section = elf_data_section;
4726 elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
4728 elf_data_section->symbol = elf_data_symbol;
4729 elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
4731 elf_data_section->name = ".data";
4732 elf_data_section->flags = SEC_NO_FLAGS;
4733 elf_data_section->output_section = NULL;
4734 elf_data_section->owner = abfd;
4735 elf_data_symbol->name = ".data";
4736 elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
4737 elf_data_symbol->section = elf_data_section;
4739 /* This code used to do *secp = bfd_und_section_ptr if
4740 info->shared. I don't know why, and that doesn't make sense,
4741 so I took it out. */
4742 *secp = elf_tdata (abfd)->elf_data_section;
4745 case SHN_MIPS_SUNDEFINED:
4746 *secp = bfd_und_section_ptr;
4750 if (SGI_COMPAT (abfd)
4752 && info->hash->creator == abfd->xvec
4753 && strcmp (*namep, "__rld_obj_head") == 0)
4755 struct elf_link_hash_entry *h;
4756 struct bfd_link_hash_entry *bh;
4758 /* Mark __rld_obj_head as dynamic. */
4760 if (! (_bfd_generic_link_add_one_symbol
4761 (info, abfd, *namep, BSF_GLOBAL, *secp,
4762 (bfd_vma) *valp, (const char *) NULL, FALSE,
4763 get_elf_backend_data (abfd)->collect, &bh)))
4766 h = (struct elf_link_hash_entry *) bh;
4767 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
4768 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4769 h->type = STT_OBJECT;
4771 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
4774 mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
4777 /* If this is a mips16 text symbol, add 1 to the value to make it
4778 odd. This will cause something like .word SYM to come up with
4779 the right value when it is loaded into the PC. */
4780 if (sym->st_other == STO_MIPS16)
4786 /* This hook function is called before the linker writes out a global
4787 symbol. We mark symbols as small common if appropriate. This is
4788 also where we undo the increment of the value for a mips16 symbol. */
4791 _bfd_mips_elf_link_output_symbol_hook (abfd, info, name, sym, input_sec)
4792 bfd *abfd ATTRIBUTE_UNUSED;
4793 struct bfd_link_info *info ATTRIBUTE_UNUSED;
4794 const char *name ATTRIBUTE_UNUSED;
4795 Elf_Internal_Sym *sym;
4796 asection *input_sec;
4798 /* If we see a common symbol, which implies a relocatable link, then
4799 if a symbol was small common in an input file, mark it as small
4800 common in the output file. */
4801 if (sym->st_shndx == SHN_COMMON
4802 && strcmp (input_sec->name, ".scommon") == 0)
4803 sym->st_shndx = SHN_MIPS_SCOMMON;
4805 if (sym->st_other == STO_MIPS16
4806 && (sym->st_value & 1) != 0)
4812 /* Functions for the dynamic linker. */
4814 /* Create dynamic sections when linking against a dynamic object. */
4817 _bfd_mips_elf_create_dynamic_sections (abfd, info)
4819 struct bfd_link_info *info;
4821 struct elf_link_hash_entry *h;
4822 struct bfd_link_hash_entry *bh;
4824 register asection *s;
4825 const char * const *namep;
4827 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4828 | SEC_LINKER_CREATED | SEC_READONLY);
4830 /* Mips ABI requests the .dynamic section to be read only. */
4831 s = bfd_get_section_by_name (abfd, ".dynamic");
4834 if (! bfd_set_section_flags (abfd, s, flags))
4838 /* We need to create .got section. */
4839 if (! mips_elf_create_got_section (abfd, info, FALSE))
4842 if (! mips_elf_rel_dyn_section (elf_hash_table (info)->dynobj, TRUE))
4845 /* Create .stub section. */
4846 if (bfd_get_section_by_name (abfd,
4847 MIPS_ELF_STUB_SECTION_NAME (abfd)) == NULL)
4849 s = bfd_make_section (abfd, MIPS_ELF_STUB_SECTION_NAME (abfd));
4851 || ! bfd_set_section_flags (abfd, s, flags | SEC_CODE)
4852 || ! bfd_set_section_alignment (abfd, s,
4853 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4857 if ((IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none)
4859 && bfd_get_section_by_name (abfd, ".rld_map") == NULL)
4861 s = bfd_make_section (abfd, ".rld_map");
4863 || ! bfd_set_section_flags (abfd, s, flags &~ (flagword) SEC_READONLY)
4864 || ! bfd_set_section_alignment (abfd, s,
4865 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4869 /* On IRIX5, we adjust add some additional symbols and change the
4870 alignments of several sections. There is no ABI documentation
4871 indicating that this is necessary on IRIX6, nor any evidence that
4872 the linker takes such action. */
4873 if (IRIX_COMPAT (abfd) == ict_irix5)
4875 for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
4878 if (! (_bfd_generic_link_add_one_symbol
4879 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr,
4880 (bfd_vma) 0, (const char *) NULL, FALSE,
4881 get_elf_backend_data (abfd)->collect, &bh)))
4884 h = (struct elf_link_hash_entry *) bh;
4885 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
4886 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4887 h->type = STT_SECTION;
4889 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
4893 /* We need to create a .compact_rel section. */
4894 if (SGI_COMPAT (abfd))
4896 if (!mips_elf_create_compact_rel_section (abfd, info))
4900 /* Change alignments of some sections. */
4901 s = bfd_get_section_by_name (abfd, ".hash");
4903 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
4904 s = bfd_get_section_by_name (abfd, ".dynsym");
4906 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
4907 s = bfd_get_section_by_name (abfd, ".dynstr");
4909 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
4910 s = bfd_get_section_by_name (abfd, ".reginfo");
4912 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
4913 s = bfd_get_section_by_name (abfd, ".dynamic");
4915 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
4922 name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
4924 if (!(_bfd_generic_link_add_one_symbol
4925 (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr,
4926 (bfd_vma) 0, (const char *) NULL, FALSE,
4927 get_elf_backend_data (abfd)->collect, &bh)))
4930 h = (struct elf_link_hash_entry *) bh;
4931 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
4932 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4933 h->type = STT_SECTION;
4935 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
4938 if (! mips_elf_hash_table (info)->use_rld_obj_head)
4940 /* __rld_map is a four byte word located in the .data section
4941 and is filled in by the rtld to contain a pointer to
4942 the _r_debug structure. Its symbol value will be set in
4943 _bfd_mips_elf_finish_dynamic_symbol. */
4944 s = bfd_get_section_by_name (abfd, ".rld_map");
4945 BFD_ASSERT (s != NULL);
4947 name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
4949 if (!(_bfd_generic_link_add_one_symbol
4950 (info, abfd, name, BSF_GLOBAL, s,
4951 (bfd_vma) 0, (const char *) NULL, FALSE,
4952 get_elf_backend_data (abfd)->collect, &bh)))
4955 h = (struct elf_link_hash_entry *) bh;
4956 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
4957 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4958 h->type = STT_OBJECT;
4960 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
4968 /* Look through the relocs for a section during the first phase, and
4969 allocate space in the global offset table. */
4972 _bfd_mips_elf_check_relocs (abfd, info, sec, relocs)
4974 struct bfd_link_info *info;
4976 const Elf_Internal_Rela *relocs;
4980 Elf_Internal_Shdr *symtab_hdr;
4981 struct elf_link_hash_entry **sym_hashes;
4982 struct mips_got_info *g;
4984 const Elf_Internal_Rela *rel;
4985 const Elf_Internal_Rela *rel_end;
4988 const struct elf_backend_data *bed;
4990 if (info->relocatable)
4993 dynobj = elf_hash_table (info)->dynobj;
4994 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
4995 sym_hashes = elf_sym_hashes (abfd);
4996 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
4998 /* Check for the mips16 stub sections. */
5000 name = bfd_get_section_name (abfd, sec);
5001 if (strncmp (name, FN_STUB, sizeof FN_STUB - 1) == 0)
5003 unsigned long r_symndx;
5005 /* Look at the relocation information to figure out which symbol
5008 r_symndx = ELF_R_SYM (abfd, relocs->r_info);
5010 if (r_symndx < extsymoff
5011 || sym_hashes[r_symndx - extsymoff] == NULL)
5015 /* This stub is for a local symbol. This stub will only be
5016 needed if there is some relocation in this BFD, other
5017 than a 16 bit function call, which refers to this symbol. */
5018 for (o = abfd->sections; o != NULL; o = o->next)
5020 Elf_Internal_Rela *sec_relocs;
5021 const Elf_Internal_Rela *r, *rend;
5023 /* We can ignore stub sections when looking for relocs. */
5024 if ((o->flags & SEC_RELOC) == 0
5025 || o->reloc_count == 0
5026 || strncmp (bfd_get_section_name (abfd, o), FN_STUB,
5027 sizeof FN_STUB - 1) == 0
5028 || strncmp (bfd_get_section_name (abfd, o), CALL_STUB,
5029 sizeof CALL_STUB - 1) == 0
5030 || strncmp (bfd_get_section_name (abfd, o), CALL_FP_STUB,
5031 sizeof CALL_FP_STUB - 1) == 0)
5035 = _bfd_elf_link_read_relocs (abfd, o, (PTR) NULL,
5036 (Elf_Internal_Rela *) NULL,
5038 if (sec_relocs == NULL)
5041 rend = sec_relocs + o->reloc_count;
5042 for (r = sec_relocs; r < rend; r++)
5043 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
5044 && ELF_R_TYPE (abfd, r->r_info) != R_MIPS16_26)
5047 if (elf_section_data (o)->relocs != sec_relocs)
5056 /* There is no non-call reloc for this stub, so we do
5057 not need it. Since this function is called before
5058 the linker maps input sections to output sections, we
5059 can easily discard it by setting the SEC_EXCLUDE
5061 sec->flags |= SEC_EXCLUDE;
5065 /* Record this stub in an array of local symbol stubs for
5067 if (elf_tdata (abfd)->local_stubs == NULL)
5069 unsigned long symcount;
5073 if (elf_bad_symtab (abfd))
5074 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
5076 symcount = symtab_hdr->sh_info;
5077 amt = symcount * sizeof (asection *);
5078 n = (asection **) bfd_zalloc (abfd, amt);
5081 elf_tdata (abfd)->local_stubs = n;
5084 elf_tdata (abfd)->local_stubs[r_symndx] = sec;
5086 /* We don't need to set mips16_stubs_seen in this case.
5087 That flag is used to see whether we need to look through
5088 the global symbol table for stubs. We don't need to set
5089 it here, because we just have a local stub. */
5093 struct mips_elf_link_hash_entry *h;
5095 h = ((struct mips_elf_link_hash_entry *)
5096 sym_hashes[r_symndx - extsymoff]);
5098 /* H is the symbol this stub is for. */
5101 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
5104 else if (strncmp (name, CALL_STUB, sizeof CALL_STUB - 1) == 0
5105 || strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
5107 unsigned long r_symndx;
5108 struct mips_elf_link_hash_entry *h;
5111 /* Look at the relocation information to figure out which symbol
5114 r_symndx = ELF_R_SYM (abfd, relocs->r_info);
5116 if (r_symndx < extsymoff
5117 || sym_hashes[r_symndx - extsymoff] == NULL)
5119 /* This stub was actually built for a static symbol defined
5120 in the same file. We assume that all static symbols in
5121 mips16 code are themselves mips16, so we can simply
5122 discard this stub. Since this function is called before
5123 the linker maps input sections to output sections, we can
5124 easily discard it by setting the SEC_EXCLUDE flag. */
5125 sec->flags |= SEC_EXCLUDE;
5129 h = ((struct mips_elf_link_hash_entry *)
5130 sym_hashes[r_symndx - extsymoff]);
5132 /* H is the symbol this stub is for. */
5134 if (strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
5135 loc = &h->call_fp_stub;
5137 loc = &h->call_stub;
5139 /* If we already have an appropriate stub for this function, we
5140 don't need another one, so we can discard this one. Since
5141 this function is called before the linker maps input sections
5142 to output sections, we can easily discard it by setting the
5143 SEC_EXCLUDE flag. We can also discard this section if we
5144 happen to already know that this is a mips16 function; it is
5145 not necessary to check this here, as it is checked later, but
5146 it is slightly faster to check now. */
5147 if (*loc != NULL || h->root.other == STO_MIPS16)
5149 sec->flags |= SEC_EXCLUDE;
5154 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
5164 sgot = mips_elf_got_section (dynobj, FALSE);
5169 BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
5170 g = mips_elf_section_data (sgot)->u.got_info;
5171 BFD_ASSERT (g != NULL);
5176 bed = get_elf_backend_data (abfd);
5177 rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
5178 for (rel = relocs; rel < rel_end; ++rel)
5180 unsigned long r_symndx;
5181 unsigned int r_type;
5182 struct elf_link_hash_entry *h;
5184 r_symndx = ELF_R_SYM (abfd, rel->r_info);
5185 r_type = ELF_R_TYPE (abfd, rel->r_info);
5187 if (r_symndx < extsymoff)
5189 else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
5191 (*_bfd_error_handler)
5192 (_("%s: Malformed reloc detected for section %s"),
5193 bfd_archive_filename (abfd), name);
5194 bfd_set_error (bfd_error_bad_value);
5199 h = sym_hashes[r_symndx - extsymoff];
5201 /* This may be an indirect symbol created because of a version. */
5204 while (h->root.type == bfd_link_hash_indirect)
5205 h = (struct elf_link_hash_entry *) h->root.u.i.link;
5209 /* Some relocs require a global offset table. */
5210 if (dynobj == NULL || sgot == NULL)
5216 case R_MIPS_CALL_HI16:
5217 case R_MIPS_CALL_LO16:
5218 case R_MIPS_GOT_HI16:
5219 case R_MIPS_GOT_LO16:
5220 case R_MIPS_GOT_PAGE:
5221 case R_MIPS_GOT_OFST:
5222 case R_MIPS_GOT_DISP:
5224 elf_hash_table (info)->dynobj = dynobj = abfd;
5225 if (! mips_elf_create_got_section (dynobj, info, FALSE))
5227 g = mips_elf_got_info (dynobj, &sgot);
5234 && (info->shared || h != NULL)
5235 && (sec->flags & SEC_ALLOC) != 0)
5236 elf_hash_table (info)->dynobj = dynobj = abfd;
5244 if (!h && (r_type == R_MIPS_CALL_LO16
5245 || r_type == R_MIPS_GOT_LO16
5246 || r_type == R_MIPS_GOT_DISP))
5248 /* We may need a local GOT entry for this relocation. We
5249 don't count R_MIPS_GOT_PAGE because we can estimate the
5250 maximum number of pages needed by looking at the size of
5251 the segment. Similar comments apply to R_MIPS_GOT16 and
5252 R_MIPS_CALL16. We don't count R_MIPS_GOT_HI16, or
5253 R_MIPS_CALL_HI16 because these are always followed by an
5254 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */
5255 if (! mips_elf_record_local_got_symbol (abfd, r_symndx,
5265 (*_bfd_error_handler)
5266 (_("%s: CALL16 reloc at 0x%lx not against global symbol"),
5267 bfd_archive_filename (abfd), (unsigned long) rel->r_offset);
5268 bfd_set_error (bfd_error_bad_value);
5273 case R_MIPS_CALL_HI16:
5274 case R_MIPS_CALL_LO16:
5277 /* This symbol requires a global offset table entry. */
5278 if (! mips_elf_record_global_got_symbol (h, abfd, info, g))
5281 /* We need a stub, not a plt entry for the undefined
5282 function. But we record it as if it needs plt. See
5283 elf_adjust_dynamic_symbol in elflink.h. */
5284 h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
5289 case R_MIPS_GOT_PAGE:
5290 /* If this is a global, overridable symbol, GOT_PAGE will
5291 decay to GOT_DISP, so we'll need a GOT entry for it. */
5296 struct mips_elf_link_hash_entry *hmips =
5297 (struct mips_elf_link_hash_entry *) h;
5299 while (hmips->root.root.type == bfd_link_hash_indirect
5300 || hmips->root.root.type == bfd_link_hash_warning)
5301 hmips = (struct mips_elf_link_hash_entry *)
5302 hmips->root.root.u.i.link;
5304 if ((hmips->root.root.type == bfd_link_hash_defined
5305 || hmips->root.root.type == bfd_link_hash_defweak)
5306 && hmips->root.root.u.def.section
5307 && ! (info->shared && ! info->symbolic
5308 && ! (hmips->root.elf_link_hash_flags
5309 & ELF_LINK_FORCED_LOCAL))
5310 /* If we've encountered any other relocation
5311 referencing the symbol, we'll have marked it as
5312 dynamic, and, even though we might be able to get
5313 rid of the GOT entry should we know for sure all
5314 previous relocations were GOT_PAGE ones, at this
5315 point we can't tell, so just keep using the
5316 symbol as dynamic. This is very important in the
5317 multi-got case, since we don't decide whether to
5318 decay GOT_PAGE to GOT_DISP on a per-GOT basis: if
5319 the symbol is dynamic, we'll need a GOT entry for
5320 every GOT in which the symbol is referenced with
5321 a GOT_PAGE relocation. */
5322 && hmips->root.dynindx == -1)
5328 case R_MIPS_GOT_HI16:
5329 case R_MIPS_GOT_LO16:
5330 case R_MIPS_GOT_DISP:
5331 /* This symbol requires a global offset table entry. */
5332 if (h && ! mips_elf_record_global_got_symbol (h, abfd, info, g))
5339 if ((info->shared || h != NULL)
5340 && (sec->flags & SEC_ALLOC) != 0)
5344 sreloc = mips_elf_rel_dyn_section (dynobj, TRUE);
5348 #define MIPS_READONLY_SECTION (SEC_ALLOC | SEC_LOAD | SEC_READONLY)
5351 /* When creating a shared object, we must copy these
5352 reloc types into the output file as R_MIPS_REL32
5353 relocs. We make room for this reloc in the
5354 .rel.dyn reloc section. */
5355 mips_elf_allocate_dynamic_relocations (dynobj, 1);
5356 if ((sec->flags & MIPS_READONLY_SECTION)
5357 == MIPS_READONLY_SECTION)
5358 /* We tell the dynamic linker that there are
5359 relocations against the text segment. */
5360 info->flags |= DF_TEXTREL;
5364 struct mips_elf_link_hash_entry *hmips;
5366 /* We only need to copy this reloc if the symbol is
5367 defined in a dynamic object. */
5368 hmips = (struct mips_elf_link_hash_entry *) h;
5369 ++hmips->possibly_dynamic_relocs;
5370 if ((sec->flags & MIPS_READONLY_SECTION)
5371 == MIPS_READONLY_SECTION)
5372 /* We need it to tell the dynamic linker if there
5373 are relocations against the text segment. */
5374 hmips->readonly_reloc = TRUE;
5377 /* Even though we don't directly need a GOT entry for
5378 this symbol, a symbol must have a dynamic symbol
5379 table index greater that DT_MIPS_GOTSYM if there are
5380 dynamic relocations against it. */
5384 elf_hash_table (info)->dynobj = dynobj = abfd;
5385 if (! mips_elf_create_got_section (dynobj, info, TRUE))
5387 g = mips_elf_got_info (dynobj, &sgot);
5388 if (! mips_elf_record_global_got_symbol (h, abfd, info, g))
5393 if (SGI_COMPAT (abfd))
5394 mips_elf_hash_table (info)->compact_rel_size +=
5395 sizeof (Elf32_External_crinfo);
5399 case R_MIPS_GPREL16:
5400 case R_MIPS_LITERAL:
5401 case R_MIPS_GPREL32:
5402 if (SGI_COMPAT (abfd))
5403 mips_elf_hash_table (info)->compact_rel_size +=
5404 sizeof (Elf32_External_crinfo);
5407 /* This relocation describes the C++ object vtable hierarchy.
5408 Reconstruct it for later use during GC. */
5409 case R_MIPS_GNU_VTINHERIT:
5410 if (!_bfd_elf32_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
5414 /* This relocation describes which C++ vtable entries are actually
5415 used. Record for later use during GC. */
5416 case R_MIPS_GNU_VTENTRY:
5417 if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_offset))
5425 /* We must not create a stub for a symbol that has relocations
5426 related to taking the function's address. */
5432 struct mips_elf_link_hash_entry *mh;
5434 mh = (struct mips_elf_link_hash_entry *) h;
5435 mh->no_fn_stub = TRUE;
5439 case R_MIPS_CALL_HI16:
5440 case R_MIPS_CALL_LO16:
5445 /* If this reloc is not a 16 bit call, and it has a global
5446 symbol, then we will need the fn_stub if there is one.
5447 References from a stub section do not count. */
5449 && r_type != R_MIPS16_26
5450 && strncmp (bfd_get_section_name (abfd, sec), FN_STUB,
5451 sizeof FN_STUB - 1) != 0
5452 && strncmp (bfd_get_section_name (abfd, sec), CALL_STUB,
5453 sizeof CALL_STUB - 1) != 0
5454 && strncmp (bfd_get_section_name (abfd, sec), CALL_FP_STUB,
5455 sizeof CALL_FP_STUB - 1) != 0)
5457 struct mips_elf_link_hash_entry *mh;
5459 mh = (struct mips_elf_link_hash_entry *) h;
5460 mh->need_fn_stub = TRUE;
5468 _bfd_mips_relax_section (abfd, sec, link_info, again)
5471 struct bfd_link_info *link_info;
5474 Elf_Internal_Rela *internal_relocs;
5475 Elf_Internal_Rela *irel, *irelend;
5476 Elf_Internal_Shdr *symtab_hdr;
5477 bfd_byte *contents = NULL;
5478 bfd_byte *free_contents = NULL;
5480 bfd_boolean changed_contents = FALSE;
5481 bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
5482 Elf_Internal_Sym *isymbuf = NULL;
5484 /* We are not currently changing any sizes, so only one pass. */
5487 if (link_info->relocatable)
5490 internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, (PTR) NULL,
5491 (Elf_Internal_Rela *) NULL,
5492 link_info->keep_memory);
5493 if (internal_relocs == NULL)
5496 irelend = internal_relocs + sec->reloc_count
5497 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
5498 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5499 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
5501 for (irel = internal_relocs; irel < irelend; irel++)
5504 bfd_signed_vma sym_offset;
5505 unsigned int r_type;
5506 unsigned long r_symndx;
5508 unsigned long instruction;
5510 /* Turn jalr into bgezal, and jr into beq, if they're marked
5511 with a JALR relocation, that indicate where they jump to.
5512 This saves some pipeline bubbles. */
5513 r_type = ELF_R_TYPE (abfd, irel->r_info);
5514 if (r_type != R_MIPS_JALR)
5517 r_symndx = ELF_R_SYM (abfd, irel->r_info);
5518 /* Compute the address of the jump target. */
5519 if (r_symndx >= extsymoff)
5521 struct mips_elf_link_hash_entry *h
5522 = ((struct mips_elf_link_hash_entry *)
5523 elf_sym_hashes (abfd) [r_symndx - extsymoff]);
5525 while (h->root.root.type == bfd_link_hash_indirect
5526 || h->root.root.type == bfd_link_hash_warning)
5527 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5529 /* If a symbol is undefined, or if it may be overridden,
5531 if (! ((h->root.root.type == bfd_link_hash_defined
5532 || h->root.root.type == bfd_link_hash_defweak)
5533 && h->root.root.u.def.section)
5534 || (link_info->shared && ! link_info->symbolic
5535 && ! (h->root.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL)))
5538 sym_sec = h->root.root.u.def.section;
5539 if (sym_sec->output_section)
5540 symval = (h->root.root.u.def.value
5541 + sym_sec->output_section->vma
5542 + sym_sec->output_offset);
5544 symval = h->root.root.u.def.value;
5548 Elf_Internal_Sym *isym;
5550 /* Read this BFD's symbols if we haven't done so already. */
5551 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
5553 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
5554 if (isymbuf == NULL)
5555 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
5556 symtab_hdr->sh_info, 0,
5558 if (isymbuf == NULL)
5562 isym = isymbuf + r_symndx;
5563 if (isym->st_shndx == SHN_UNDEF)
5565 else if (isym->st_shndx == SHN_ABS)
5566 sym_sec = bfd_abs_section_ptr;
5567 else if (isym->st_shndx == SHN_COMMON)
5568 sym_sec = bfd_com_section_ptr;
5571 = bfd_section_from_elf_index (abfd, isym->st_shndx);
5572 symval = isym->st_value
5573 + sym_sec->output_section->vma
5574 + sym_sec->output_offset;
5577 /* Compute branch offset, from delay slot of the jump to the
5579 sym_offset = (symval + irel->r_addend)
5580 - (sec_start + irel->r_offset + 4);
5582 /* Branch offset must be properly aligned. */
5583 if ((sym_offset & 3) != 0)
5588 /* Check that it's in range. */
5589 if (sym_offset < -0x8000 || sym_offset >= 0x8000)
5592 /* Get the section contents if we haven't done so already. */
5593 if (contents == NULL)
5595 /* Get cached copy if it exists. */
5596 if (elf_section_data (sec)->this_hdr.contents != NULL)
5597 contents = elf_section_data (sec)->this_hdr.contents;
5600 contents = (bfd_byte *) bfd_malloc (sec->_raw_size);
5601 if (contents == NULL)
5604 free_contents = contents;
5605 if (! bfd_get_section_contents (abfd, sec, contents,
5606 (file_ptr) 0, sec->_raw_size))
5611 instruction = bfd_get_32 (abfd, contents + irel->r_offset);
5613 /* If it was jalr <reg>, turn it into bgezal $zero, <target>. */
5614 if ((instruction & 0xfc1fffff) == 0x0000f809)
5615 instruction = 0x04110000;
5616 /* If it was jr <reg>, turn it into b <target>. */
5617 else if ((instruction & 0xfc1fffff) == 0x00000008)
5618 instruction = 0x10000000;
5622 instruction |= (sym_offset & 0xffff);
5623 bfd_put_32 (abfd, instruction, contents + irel->r_offset);
5624 changed_contents = TRUE;
5627 if (contents != NULL
5628 && elf_section_data (sec)->this_hdr.contents != contents)
5630 if (!changed_contents && !link_info->keep_memory)
5634 /* Cache the section contents for elf_link_input_bfd. */
5635 elf_section_data (sec)->this_hdr.contents = contents;
5641 if (free_contents != NULL)
5642 free (free_contents);
5646 /* Adjust a symbol defined by a dynamic object and referenced by a
5647 regular object. The current definition is in some section of the
5648 dynamic object, but we're not including those sections. We have to
5649 change the definition to something the rest of the link can
5653 _bfd_mips_elf_adjust_dynamic_symbol (info, h)
5654 struct bfd_link_info *info;
5655 struct elf_link_hash_entry *h;
5658 struct mips_elf_link_hash_entry *hmips;
5661 dynobj = elf_hash_table (info)->dynobj;
5663 /* Make sure we know what is going on here. */
5664 BFD_ASSERT (dynobj != NULL
5665 && ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
5666 || h->weakdef != NULL
5667 || ((h->elf_link_hash_flags
5668 & ELF_LINK_HASH_DEF_DYNAMIC) != 0
5669 && (h->elf_link_hash_flags
5670 & ELF_LINK_HASH_REF_REGULAR) != 0
5671 && (h->elf_link_hash_flags
5672 & ELF_LINK_HASH_DEF_REGULAR) == 0)));
5674 /* If this symbol is defined in a dynamic object, we need to copy
5675 any R_MIPS_32 or R_MIPS_REL32 relocs against it into the output
5677 hmips = (struct mips_elf_link_hash_entry *) h;
5678 if (! info->relocatable
5679 && hmips->possibly_dynamic_relocs != 0
5680 && (h->root.type == bfd_link_hash_defweak
5681 || (h->elf_link_hash_flags
5682 & ELF_LINK_HASH_DEF_REGULAR) == 0))
5684 mips_elf_allocate_dynamic_relocations (dynobj,
5685 hmips->possibly_dynamic_relocs);
5686 if (hmips->readonly_reloc)
5687 /* We tell the dynamic linker that there are relocations
5688 against the text segment. */
5689 info->flags |= DF_TEXTREL;
5692 /* For a function, create a stub, if allowed. */
5693 if (! hmips->no_fn_stub
5694 && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
5696 if (! elf_hash_table (info)->dynamic_sections_created)
5699 /* If this symbol is not defined in a regular file, then set
5700 the symbol to the stub location. This is required to make
5701 function pointers compare as equal between the normal
5702 executable and the shared library. */
5703 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
5705 /* We need .stub section. */
5706 s = bfd_get_section_by_name (dynobj,
5707 MIPS_ELF_STUB_SECTION_NAME (dynobj));
5708 BFD_ASSERT (s != NULL);
5710 h->root.u.def.section = s;
5711 h->root.u.def.value = s->_raw_size;
5713 /* XXX Write this stub address somewhere. */
5714 h->plt.offset = s->_raw_size;
5716 /* Make room for this stub code. */
5717 s->_raw_size += MIPS_FUNCTION_STUB_SIZE;
5719 /* The last half word of the stub will be filled with the index
5720 of this symbol in .dynsym section. */
5724 else if ((h->type == STT_FUNC)
5725 && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0)
5727 /* This will set the entry for this symbol in the GOT to 0, and
5728 the dynamic linker will take care of this. */
5729 h->root.u.def.value = 0;
5733 /* If this is a weak symbol, and there is a real definition, the
5734 processor independent code will have arranged for us to see the
5735 real definition first, and we can just use the same value. */
5736 if (h->weakdef != NULL)
5738 BFD_ASSERT (h->weakdef->root.type == bfd_link_hash_defined
5739 || h->weakdef->root.type == bfd_link_hash_defweak);
5740 h->root.u.def.section = h->weakdef->root.u.def.section;
5741 h->root.u.def.value = h->weakdef->root.u.def.value;
5745 /* This is a reference to a symbol defined by a dynamic object which
5746 is not a function. */
5751 /* This function is called after all the input files have been read,
5752 and the input sections have been assigned to output sections. We
5753 check for any mips16 stub sections that we can discard. */
5756 _bfd_mips_elf_always_size_sections (output_bfd, info)
5758 struct bfd_link_info *info;
5764 struct mips_got_info *g;
5766 bfd_size_type loadable_size = 0;
5767 bfd_size_type local_gotno;
5770 /* The .reginfo section has a fixed size. */
5771 ri = bfd_get_section_by_name (output_bfd, ".reginfo");
5773 bfd_set_section_size (output_bfd, ri,
5774 (bfd_size_type) sizeof (Elf32_External_RegInfo));
5776 if (! (info->relocatable
5777 || ! mips_elf_hash_table (info)->mips16_stubs_seen))
5778 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
5779 mips_elf_check_mips16_stubs,
5782 dynobj = elf_hash_table (info)->dynobj;
5784 /* Relocatable links don't have it. */
5787 g = mips_elf_got_info (dynobj, &s);
5791 /* Calculate the total loadable size of the output. That
5792 will give us the maximum number of GOT_PAGE entries
5794 for (sub = info->input_bfds; sub; sub = sub->link_next)
5796 asection *subsection;
5798 for (subsection = sub->sections;
5800 subsection = subsection->next)
5802 if ((subsection->flags & SEC_ALLOC) == 0)
5804 loadable_size += ((subsection->_raw_size + 0xf)
5805 &~ (bfd_size_type) 0xf);
5809 /* There has to be a global GOT entry for every symbol with
5810 a dynamic symbol table index of DT_MIPS_GOTSYM or
5811 higher. Therefore, it make sense to put those symbols
5812 that need GOT entries at the end of the symbol table. We
5814 if (! mips_elf_sort_hash_table (info, 1))
5817 if (g->global_gotsym != NULL)
5818 i = elf_hash_table (info)->dynsymcount - g->global_gotsym->dynindx;
5820 /* If there are no global symbols, or none requiring
5821 relocations, then GLOBAL_GOTSYM will be NULL. */
5824 /* In the worst case, we'll get one stub per dynamic symbol, plus
5825 one to account for the dummy entry at the end required by IRIX
5827 loadable_size += MIPS_FUNCTION_STUB_SIZE * (i + 1);
5829 /* Assume there are two loadable segments consisting of
5830 contiguous sections. Is 5 enough? */
5831 local_gotno = (loadable_size >> 16) + 5;
5833 g->local_gotno += local_gotno;
5834 s->_raw_size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
5836 g->global_gotno = i;
5837 s->_raw_size += i * MIPS_ELF_GOT_SIZE (output_bfd);
5839 if (s->_raw_size > MIPS_ELF_GOT_MAX_SIZE (output_bfd)
5840 && ! mips_elf_multi_got (output_bfd, info, g, s, local_gotno))
5846 /* Set the sizes of the dynamic sections. */
5849 _bfd_mips_elf_size_dynamic_sections (output_bfd, info)
5851 struct bfd_link_info *info;
5855 bfd_boolean reltext;
5857 dynobj = elf_hash_table (info)->dynobj;
5858 BFD_ASSERT (dynobj != NULL);
5860 if (elf_hash_table (info)->dynamic_sections_created)
5862 /* Set the contents of the .interp section to the interpreter. */
5865 s = bfd_get_section_by_name (dynobj, ".interp");
5866 BFD_ASSERT (s != NULL);
5868 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
5870 = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
5874 /* The check_relocs and adjust_dynamic_symbol entry points have
5875 determined the sizes of the various dynamic sections. Allocate
5878 for (s = dynobj->sections; s != NULL; s = s->next)
5883 /* It's OK to base decisions on the section name, because none
5884 of the dynobj section names depend upon the input files. */
5885 name = bfd_get_section_name (dynobj, s);
5887 if ((s->flags & SEC_LINKER_CREATED) == 0)
5892 if (strncmp (name, ".rel", 4) == 0)
5894 if (s->_raw_size == 0)
5896 /* We only strip the section if the output section name
5897 has the same name. Otherwise, there might be several
5898 input sections for this output section. FIXME: This
5899 code is probably not needed these days anyhow, since
5900 the linker now does not create empty output sections. */
5901 if (s->output_section != NULL
5903 bfd_get_section_name (s->output_section->owner,
5904 s->output_section)) == 0)
5909 const char *outname;
5912 /* If this relocation section applies to a read only
5913 section, then we probably need a DT_TEXTREL entry.
5914 If the relocation section is .rel.dyn, we always
5915 assert a DT_TEXTREL entry rather than testing whether
5916 there exists a relocation to a read only section or
5918 outname = bfd_get_section_name (output_bfd,
5920 target = bfd_get_section_by_name (output_bfd, outname + 4);
5922 && (target->flags & SEC_READONLY) != 0
5923 && (target->flags & SEC_ALLOC) != 0)
5924 || strcmp (outname, ".rel.dyn") == 0)
5927 /* We use the reloc_count field as a counter if we need
5928 to copy relocs into the output file. */
5929 if (strcmp (name, ".rel.dyn") != 0)
5932 /* If combreloc is enabled, elf_link_sort_relocs() will
5933 sort relocations, but in a different way than we do,
5934 and before we're done creating relocations. Also, it
5935 will move them around between input sections'
5936 relocation's contents, so our sorting would be
5937 broken, so don't let it run. */
5938 info->combreloc = 0;
5941 else if (strncmp (name, ".got", 4) == 0)
5943 /* _bfd_mips_elf_always_size_sections() has already done
5944 most of the work, but some symbols may have been mapped
5945 to versions that we must now resolve in the got_entries
5947 struct mips_got_info *gg = mips_elf_got_info (dynobj, NULL);
5948 struct mips_got_info *g = gg;
5949 struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
5950 unsigned int needed_relocs = 0;
5954 set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (output_bfd);
5955 set_got_offset_arg.info = info;
5957 mips_elf_resolve_final_got_entries (gg);
5958 for (g = gg->next; g && g->next != gg; g = g->next)
5960 unsigned int save_assign;
5962 mips_elf_resolve_final_got_entries (g);
5964 /* Assign offsets to global GOT entries. */
5965 save_assign = g->assigned_gotno;
5966 g->assigned_gotno = g->local_gotno;
5967 set_got_offset_arg.g = g;
5968 set_got_offset_arg.needed_relocs = 0;
5969 htab_traverse (g->got_entries,
5970 mips_elf_set_global_got_offset,
5971 &set_got_offset_arg);
5972 needed_relocs += set_got_offset_arg.needed_relocs;
5973 BFD_ASSERT (g->assigned_gotno - g->local_gotno
5974 <= g->global_gotno);
5976 g->assigned_gotno = save_assign;
5979 needed_relocs += g->local_gotno - g->assigned_gotno;
5980 BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
5981 + g->next->global_gotno
5982 + MIPS_RESERVED_GOTNO);
5987 mips_elf_allocate_dynamic_relocations (dynobj, needed_relocs);
5990 else if (strcmp (name, MIPS_ELF_STUB_SECTION_NAME (output_bfd)) == 0)
5992 /* IRIX rld assumes that the function stub isn't at the end
5993 of .text section. So put a dummy. XXX */
5994 s->_raw_size += MIPS_FUNCTION_STUB_SIZE;
5996 else if (! info->shared
5997 && ! mips_elf_hash_table (info)->use_rld_obj_head
5998 && strncmp (name, ".rld_map", 8) == 0)
6000 /* We add a room for __rld_map. It will be filled in by the
6001 rtld to contain a pointer to the _r_debug structure. */
6004 else if (SGI_COMPAT (output_bfd)
6005 && strncmp (name, ".compact_rel", 12) == 0)
6006 s->_raw_size += mips_elf_hash_table (info)->compact_rel_size;
6007 else if (strncmp (name, ".init", 5) != 0)
6009 /* It's not one of our sections, so don't allocate space. */
6015 _bfd_strip_section_from_output (info, s);
6019 /* Allocate memory for the section contents. */
6020 s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->_raw_size);
6021 if (s->contents == NULL && s->_raw_size != 0)
6023 bfd_set_error (bfd_error_no_memory);
6028 if (elf_hash_table (info)->dynamic_sections_created)
6030 /* Add some entries to the .dynamic section. We fill in the
6031 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
6032 must add the entries now so that we get the correct size for
6033 the .dynamic section. The DT_DEBUG entry is filled in by the
6034 dynamic linker and used by the debugger. */
6037 /* SGI object has the equivalence of DT_DEBUG in the
6038 DT_MIPS_RLD_MAP entry. */
6039 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
6041 if (!SGI_COMPAT (output_bfd))
6043 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
6049 /* Shared libraries on traditional mips have DT_DEBUG. */
6050 if (!SGI_COMPAT (output_bfd))
6052 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
6057 if (reltext && SGI_COMPAT (output_bfd))
6058 info->flags |= DF_TEXTREL;
6060 if ((info->flags & DF_TEXTREL) != 0)
6062 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
6066 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
6069 if (mips_elf_rel_dyn_section (dynobj, FALSE))
6071 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
6074 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
6077 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
6081 if (SGI_COMPAT (output_bfd))
6083 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_CONFLICTNO, 0))
6087 if (SGI_COMPAT (output_bfd))
6089 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LIBLISTNO, 0))
6093 if (bfd_get_section_by_name (dynobj, ".conflict") != NULL)
6095 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_CONFLICT, 0))
6098 s = bfd_get_section_by_name (dynobj, ".liblist");
6099 BFD_ASSERT (s != NULL);
6101 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LIBLIST, 0))
6105 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
6108 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
6112 /* Time stamps in executable files are a bad idea. */
6113 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_TIME_STAMP, 0))
6118 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_ICHECKSUM, 0))
6123 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_IVERSION, 0))
6127 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
6130 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
6133 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
6136 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
6139 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
6142 if (IRIX_COMPAT (dynobj) == ict_irix5
6143 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
6146 if (IRIX_COMPAT (dynobj) == ict_irix6
6147 && (bfd_get_section_by_name
6148 (dynobj, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
6149 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
6156 /* Relocate a MIPS ELF section. */
6159 _bfd_mips_elf_relocate_section (output_bfd, info, input_bfd, input_section,
6160 contents, relocs, local_syms, local_sections)
6162 struct bfd_link_info *info;
6164 asection *input_section;
6166 Elf_Internal_Rela *relocs;
6167 Elf_Internal_Sym *local_syms;
6168 asection **local_sections;
6170 Elf_Internal_Rela *rel;
6171 const Elf_Internal_Rela *relend;
6173 bfd_boolean use_saved_addend_p = FALSE;
6174 const struct elf_backend_data *bed;
6176 bed = get_elf_backend_data (output_bfd);
6177 relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
6178 for (rel = relocs; rel < relend; ++rel)
6182 reloc_howto_type *howto;
6183 bfd_boolean require_jalx;
6184 /* TRUE if the relocation is a RELA relocation, rather than a
6186 bfd_boolean rela_relocation_p = TRUE;
6187 unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6188 const char * msg = (const char *) NULL;
6190 /* Find the relocation howto for this relocation. */
6191 if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
6193 /* Some 32-bit code uses R_MIPS_64. In particular, people use
6194 64-bit code, but make sure all their addresses are in the
6195 lowermost or uppermost 32-bit section of the 64-bit address
6196 space. Thus, when they use an R_MIPS_64 they mean what is
6197 usually meant by R_MIPS_32, with the exception that the
6198 stored value is sign-extended to 64 bits. */
6199 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
6201 /* On big-endian systems, we need to lie about the position
6203 if (bfd_big_endian (input_bfd))
6207 /* NewABI defaults to RELA relocations. */
6208 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type,
6209 NEWABI_P (input_bfd)
6210 && (MIPS_RELOC_RELA_P
6211 (input_bfd, input_section,
6214 if (!use_saved_addend_p)
6216 Elf_Internal_Shdr *rel_hdr;
6218 /* If these relocations were originally of the REL variety,
6219 we must pull the addend out of the field that will be
6220 relocated. Otherwise, we simply use the contents of the
6221 RELA relocation. To determine which flavor or relocation
6222 this is, we depend on the fact that the INPUT_SECTION's
6223 REL_HDR is read before its REL_HDR2. */
6224 rel_hdr = &elf_section_data (input_section)->rel_hdr;
6225 if ((size_t) (rel - relocs)
6226 >= (NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel))
6227 rel_hdr = elf_section_data (input_section)->rel_hdr2;
6228 if (rel_hdr->sh_entsize == MIPS_ELF_REL_SIZE (input_bfd))
6230 /* Note that this is a REL relocation. */
6231 rela_relocation_p = FALSE;
6233 /* Get the addend, which is stored in the input file. */
6234 addend = mips_elf_obtain_contents (howto, rel, input_bfd,
6236 addend &= howto->src_mask;
6237 addend <<= howto->rightshift;
6239 /* For some kinds of relocations, the ADDEND is a
6240 combination of the addend stored in two different
6242 if (r_type == R_MIPS_HI16
6243 || r_type == R_MIPS_GNU_REL_HI16
6244 || (r_type == R_MIPS_GOT16
6245 && mips_elf_local_relocation_p (input_bfd, rel,
6246 local_sections, FALSE)))
6249 const Elf_Internal_Rela *lo16_relocation;
6250 reloc_howto_type *lo16_howto;
6253 /* The combined value is the sum of the HI16 addend,
6254 left-shifted by sixteen bits, and the LO16
6255 addend, sign extended. (Usually, the code does
6256 a `lui' of the HI16 value, and then an `addiu' of
6259 Scan ahead to find a matching LO16 relocation. */
6260 if (r_type == R_MIPS_GNU_REL_HI16)
6261 lo = R_MIPS_GNU_REL_LO16;
6264 lo16_relocation = mips_elf_next_relocation (input_bfd, lo,
6266 if (lo16_relocation == NULL)
6269 /* Obtain the addend kept there. */
6270 lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, lo, FALSE);
6271 l = mips_elf_obtain_contents (lo16_howto, lo16_relocation,
6272 input_bfd, contents);
6273 l &= lo16_howto->src_mask;
6274 l <<= lo16_howto->rightshift;
6275 l = _bfd_mips_elf_sign_extend (l, 16);
6279 /* Compute the combined addend. */
6282 /* If PC-relative, subtract the difference between the
6283 address of the LO part of the reloc and the address of
6284 the HI part. The relocation is relative to the LO
6285 part, but mips_elf_calculate_relocation() doesn't
6286 know its address or the difference from the HI part, so
6287 we subtract that difference here. See also the
6288 comment in mips_elf_calculate_relocation(). */
6289 if (r_type == R_MIPS_GNU_REL_HI16)
6290 addend -= (lo16_relocation->r_offset - rel->r_offset);
6292 else if (r_type == R_MIPS16_GPREL)
6294 /* The addend is scrambled in the object file. See
6295 mips_elf_perform_relocation for details on the
6297 addend = (((addend & 0x1f0000) >> 5)
6298 | ((addend & 0x7e00000) >> 16)
6303 addend = rel->r_addend;
6306 if (info->relocatable)
6308 Elf_Internal_Sym *sym;
6309 unsigned long r_symndx;
6311 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
6312 && bfd_big_endian (input_bfd))
6315 /* Since we're just relocating, all we need to do is copy
6316 the relocations back out to the object file, unless
6317 they're against a section symbol, in which case we need
6318 to adjust by the section offset, or unless they're GP
6319 relative in which case we need to adjust by the amount
6320 that we're adjusting GP in this relocatable object. */
6322 if (! mips_elf_local_relocation_p (input_bfd, rel, local_sections,
6324 /* There's nothing to do for non-local relocations. */
6327 if (r_type == R_MIPS16_GPREL
6328 || r_type == R_MIPS_GPREL16
6329 || r_type == R_MIPS_GPREL32
6330 || r_type == R_MIPS_LITERAL)
6331 addend -= (_bfd_get_gp_value (output_bfd)
6332 - _bfd_get_gp_value (input_bfd));
6334 r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
6335 sym = local_syms + r_symndx;
6336 if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
6337 /* Adjust the addend appropriately. */
6338 addend += local_sections[r_symndx]->output_offset;
6340 if (howto->partial_inplace)
6342 /* If the relocation is for a R_MIPS_HI16 or R_MIPS_GOT16,
6343 then we only want to write out the high-order 16 bits.
6344 The subsequent R_MIPS_LO16 will handle the low-order bits.
6346 if (r_type == R_MIPS_HI16 || r_type == R_MIPS_GOT16
6347 || r_type == R_MIPS_GNU_REL_HI16)
6348 addend = mips_elf_high (addend);
6349 else if (r_type == R_MIPS_HIGHER)
6350 addend = mips_elf_higher (addend);
6351 else if (r_type == R_MIPS_HIGHEST)
6352 addend = mips_elf_highest (addend);
6355 if (rela_relocation_p)
6356 /* If this is a RELA relocation, just update the addend.
6357 We have to cast away constness for REL. */
6358 rel->r_addend = addend;
6361 /* Otherwise, we have to write the value back out. Note
6362 that we use the source mask, rather than the
6363 destination mask because the place to which we are
6364 writing will be source of the addend in the final
6366 addend >>= howto->rightshift;
6367 addend &= howto->src_mask;
6369 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
6370 /* See the comment above about using R_MIPS_64 in the 32-bit
6371 ABI. Here, we need to update the addend. It would be
6372 possible to get away with just using the R_MIPS_32 reloc
6373 but for endianness. */
6379 if (addend & ((bfd_vma) 1 << 31))
6381 sign_bits = ((bfd_vma) 1 << 32) - 1;
6388 /* If we don't know that we have a 64-bit type,
6389 do two separate stores. */
6390 if (bfd_big_endian (input_bfd))
6392 /* Store the sign-bits (which are most significant)
6394 low_bits = sign_bits;
6400 high_bits = sign_bits;
6402 bfd_put_32 (input_bfd, low_bits,
6403 contents + rel->r_offset);
6404 bfd_put_32 (input_bfd, high_bits,
6405 contents + rel->r_offset + 4);
6409 if (! mips_elf_perform_relocation (info, howto, rel, addend,
6410 input_bfd, input_section,
6415 /* Go on to the next relocation. */
6419 /* In the N32 and 64-bit ABIs there may be multiple consecutive
6420 relocations for the same offset. In that case we are
6421 supposed to treat the output of each relocation as the addend
6423 if (rel + 1 < relend
6424 && rel->r_offset == rel[1].r_offset
6425 && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
6426 use_saved_addend_p = TRUE;
6428 use_saved_addend_p = FALSE;
6430 addend >>= howto->rightshift;
6432 /* Figure out what value we are supposed to relocate. */
6433 switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
6434 input_section, info, rel,
6435 addend, howto, local_syms,
6436 local_sections, &value,
6437 &name, &require_jalx,
6438 use_saved_addend_p))
6440 case bfd_reloc_continue:
6441 /* There's nothing to do. */
6444 case bfd_reloc_undefined:
6445 /* mips_elf_calculate_relocation already called the
6446 undefined_symbol callback. There's no real point in
6447 trying to perform the relocation at this point, so we
6448 just skip ahead to the next relocation. */
6451 case bfd_reloc_notsupported:
6452 msg = _("internal error: unsupported relocation error");
6453 info->callbacks->warning
6454 (info, msg, name, input_bfd, input_section, rel->r_offset);
6457 case bfd_reloc_overflow:
6458 if (use_saved_addend_p)
6459 /* Ignore overflow until we reach the last relocation for
6460 a given location. */
6464 BFD_ASSERT (name != NULL);
6465 if (! ((*info->callbacks->reloc_overflow)
6466 (info, name, howto->name, (bfd_vma) 0,
6467 input_bfd, input_section, rel->r_offset)))
6480 /* If we've got another relocation for the address, keep going
6481 until we reach the last one. */
6482 if (use_saved_addend_p)
6488 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
6489 /* See the comment above about using R_MIPS_64 in the 32-bit
6490 ABI. Until now, we've been using the HOWTO for R_MIPS_32;
6491 that calculated the right value. Now, however, we
6492 sign-extend the 32-bit result to 64-bits, and store it as a
6493 64-bit value. We are especially generous here in that we
6494 go to extreme lengths to support this usage on systems with
6495 only a 32-bit VMA. */
6501 if (value & ((bfd_vma) 1 << 31))
6503 sign_bits = ((bfd_vma) 1 << 32) - 1;
6510 /* If we don't know that we have a 64-bit type,
6511 do two separate stores. */
6512 if (bfd_big_endian (input_bfd))
6514 /* Undo what we did above. */
6516 /* Store the sign-bits (which are most significant)
6518 low_bits = sign_bits;
6524 high_bits = sign_bits;
6526 bfd_put_32 (input_bfd, low_bits,
6527 contents + rel->r_offset);
6528 bfd_put_32 (input_bfd, high_bits,
6529 contents + rel->r_offset + 4);
6533 /* Actually perform the relocation. */
6534 if (! mips_elf_perform_relocation (info, howto, rel, value,
6535 input_bfd, input_section,
6536 contents, require_jalx))
6543 /* If NAME is one of the special IRIX6 symbols defined by the linker,
6544 adjust it appropriately now. */
6547 mips_elf_irix6_finish_dynamic_symbol (abfd, name, sym)
6548 bfd *abfd ATTRIBUTE_UNUSED;
6550 Elf_Internal_Sym *sym;
6552 /* The linker script takes care of providing names and values for
6553 these, but we must place them into the right sections. */
6554 static const char* const text_section_symbols[] = {
6557 "__dso_displacement",
6559 "__program_header_table",
6563 static const char* const data_section_symbols[] = {
6571 const char* const *p;
6574 for (i = 0; i < 2; ++i)
6575 for (p = (i == 0) ? text_section_symbols : data_section_symbols;
6578 if (strcmp (*p, name) == 0)
6580 /* All of these symbols are given type STT_SECTION by the
6582 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6583 sym->st_other = STO_PROTECTED;
6585 /* The IRIX linker puts these symbols in special sections. */
6587 sym->st_shndx = SHN_MIPS_TEXT;
6589 sym->st_shndx = SHN_MIPS_DATA;
6595 /* Finish up dynamic symbol handling. We set the contents of various
6596 dynamic sections here. */
6599 _bfd_mips_elf_finish_dynamic_symbol (output_bfd, info, h, sym)
6601 struct bfd_link_info *info;
6602 struct elf_link_hash_entry *h;
6603 Elf_Internal_Sym *sym;
6608 struct mips_got_info *g, *gg;
6611 dynobj = elf_hash_table (info)->dynobj;
6612 gval = sym->st_value;
6614 if (h->plt.offset != (bfd_vma) -1)
6617 bfd_byte stub[MIPS_FUNCTION_STUB_SIZE];
6619 /* This symbol has a stub. Set it up. */
6621 BFD_ASSERT (h->dynindx != -1);
6623 s = bfd_get_section_by_name (dynobj,
6624 MIPS_ELF_STUB_SECTION_NAME (dynobj));
6625 BFD_ASSERT (s != NULL);
6627 /* FIXME: Can h->dynindex be more than 64K? */
6628 if (h->dynindx & 0xffff0000)
6631 /* Fill the stub. */
6632 bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub);
6633 bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + 4);
6634 bfd_put_32 (output_bfd, STUB_JALR, stub + 8);
6635 bfd_put_32 (output_bfd, STUB_LI16 (output_bfd) + h->dynindx, stub + 12);
6637 BFD_ASSERT (h->plt.offset <= s->_raw_size);
6638 memcpy (s->contents + h->plt.offset, stub, MIPS_FUNCTION_STUB_SIZE);
6640 /* Mark the symbol as undefined. plt.offset != -1 occurs
6641 only for the referenced symbol. */
6642 sym->st_shndx = SHN_UNDEF;
6644 /* The run-time linker uses the st_value field of the symbol
6645 to reset the global offset table entry for this external
6646 to its stub address when unlinking a shared object. */
6647 gval = s->output_section->vma + s->output_offset + h->plt.offset;
6648 sym->st_value = gval;
6651 BFD_ASSERT (h->dynindx != -1
6652 || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0);
6654 sgot = mips_elf_got_section (dynobj, FALSE);
6655 BFD_ASSERT (sgot != NULL);
6656 BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
6657 g = mips_elf_section_data (sgot)->u.got_info;
6658 BFD_ASSERT (g != NULL);
6660 /* Run through the global symbol table, creating GOT entries for all
6661 the symbols that need them. */
6662 if (g->global_gotsym != NULL
6663 && h->dynindx >= g->global_gotsym->dynindx)
6668 value = sym->st_value;
6669 offset = mips_elf_global_got_index (dynobj, output_bfd, h);
6670 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
6673 if (g->next && h->dynindx != -1)
6675 struct mips_got_entry e, *p;
6678 Elf_Internal_Rela rel[3];
6683 e.abfd = output_bfd;
6685 e.d.h = (struct mips_elf_link_hash_entry *)h;
6688 || h->root.type == bfd_link_hash_undefined
6689 || h->root.type == bfd_link_hash_undefweak)
6691 else if (sym->st_value)
6692 value = sym->st_value;
6694 value = h->root.u.def.value;
6696 memset (rel, 0, sizeof (rel));
6697 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
6699 for (g = g->next; g->next != gg; g = g->next)
6702 && (p = (struct mips_got_entry *) htab_find (g->got_entries,
6706 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
6708 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
6711 || (elf_hash_table (info)->dynamic_sections_created
6713 && ((p->d.h->root.elf_link_hash_flags
6714 & ELF_LINK_HASH_DEF_DYNAMIC) != 0)
6715 && ((p->d.h->root.elf_link_hash_flags
6716 & ELF_LINK_HASH_DEF_REGULAR) == 0)))
6717 && ! (mips_elf_create_dynamic_relocation
6718 (output_bfd, info, rel,
6719 e.d.h, NULL, value, &addend, sgot)))
6721 BFD_ASSERT (addend == 0);
6726 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
6727 name = h->root.root.string;
6728 if (strcmp (name, "_DYNAMIC") == 0
6729 || strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0)
6730 sym->st_shndx = SHN_ABS;
6731 else if (strcmp (name, "_DYNAMIC_LINK") == 0
6732 || strcmp (name, "_DYNAMIC_LINKING") == 0)
6734 sym->st_shndx = SHN_ABS;
6735 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6738 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
6740 sym->st_shndx = SHN_ABS;
6741 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6742 sym->st_value = elf_gp (output_bfd);
6744 else if (SGI_COMPAT (output_bfd))
6746 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
6747 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
6749 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6750 sym->st_other = STO_PROTECTED;
6752 sym->st_shndx = SHN_MIPS_DATA;
6754 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
6756 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6757 sym->st_other = STO_PROTECTED;
6758 sym->st_value = mips_elf_hash_table (info)->procedure_count;
6759 sym->st_shndx = SHN_ABS;
6761 else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
6763 if (h->type == STT_FUNC)
6764 sym->st_shndx = SHN_MIPS_TEXT;
6765 else if (h->type == STT_OBJECT)
6766 sym->st_shndx = SHN_MIPS_DATA;
6770 /* Handle the IRIX6-specific symbols. */
6771 if (IRIX_COMPAT (output_bfd) == ict_irix6)
6772 mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
6776 if (! mips_elf_hash_table (info)->use_rld_obj_head
6777 && (strcmp (name, "__rld_map") == 0
6778 || strcmp (name, "__RLD_MAP") == 0))
6780 asection *s = bfd_get_section_by_name (dynobj, ".rld_map");
6781 BFD_ASSERT (s != NULL);
6782 sym->st_value = s->output_section->vma + s->output_offset;
6783 bfd_put_32 (output_bfd, (bfd_vma) 0, s->contents);
6784 if (mips_elf_hash_table (info)->rld_value == 0)
6785 mips_elf_hash_table (info)->rld_value = sym->st_value;
6787 else if (mips_elf_hash_table (info)->use_rld_obj_head
6788 && strcmp (name, "__rld_obj_head") == 0)
6790 /* IRIX6 does not use a .rld_map section. */
6791 if (IRIX_COMPAT (output_bfd) == ict_irix5
6792 || IRIX_COMPAT (output_bfd) == ict_none)
6793 BFD_ASSERT (bfd_get_section_by_name (dynobj, ".rld_map")
6795 mips_elf_hash_table (info)->rld_value = sym->st_value;
6799 /* If this is a mips16 symbol, force the value to be even. */
6800 if (sym->st_other == STO_MIPS16
6801 && (sym->st_value & 1) != 0)
6807 /* Finish up the dynamic sections. */
6810 _bfd_mips_elf_finish_dynamic_sections (output_bfd, info)
6812 struct bfd_link_info *info;
6817 struct mips_got_info *gg, *g;
6819 dynobj = elf_hash_table (info)->dynobj;
6821 sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
6823 sgot = mips_elf_got_section (dynobj, FALSE);
6828 BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
6829 gg = mips_elf_section_data (sgot)->u.got_info;
6830 BFD_ASSERT (gg != NULL);
6831 g = mips_elf_got_for_ibfd (gg, output_bfd);
6832 BFD_ASSERT (g != NULL);
6835 if (elf_hash_table (info)->dynamic_sections_created)
6839 BFD_ASSERT (sdyn != NULL);
6840 BFD_ASSERT (g != NULL);
6842 for (b = sdyn->contents;
6843 b < sdyn->contents + sdyn->_raw_size;
6844 b += MIPS_ELF_DYN_SIZE (dynobj))
6846 Elf_Internal_Dyn dyn;
6850 bfd_boolean swap_out_p;
6852 /* Read in the current dynamic entry. */
6853 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
6855 /* Assume that we're going to modify it and write it out. */
6861 s = mips_elf_rel_dyn_section (dynobj, FALSE);
6862 BFD_ASSERT (s != NULL);
6863 dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
6867 /* Rewrite DT_STRSZ. */
6869 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
6875 case DT_MIPS_CONFLICT:
6878 case DT_MIPS_LIBLIST:
6881 s = bfd_get_section_by_name (output_bfd, name);
6882 BFD_ASSERT (s != NULL);
6883 dyn.d_un.d_ptr = s->vma;
6886 case DT_MIPS_RLD_VERSION:
6887 dyn.d_un.d_val = 1; /* XXX */
6891 dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
6894 case DT_MIPS_CONFLICTNO:
6896 elemsize = sizeof (Elf32_Conflict);
6899 case DT_MIPS_LIBLISTNO:
6901 elemsize = sizeof (Elf32_Lib);
6903 s = bfd_get_section_by_name (output_bfd, name);
6906 if (s->_cooked_size != 0)
6907 dyn.d_un.d_val = s->_cooked_size / elemsize;
6909 dyn.d_un.d_val = s->_raw_size / elemsize;
6915 case DT_MIPS_TIME_STAMP:
6916 time ((time_t *) &dyn.d_un.d_val);
6919 case DT_MIPS_ICHECKSUM:
6924 case DT_MIPS_IVERSION:
6929 case DT_MIPS_BASE_ADDRESS:
6930 s = output_bfd->sections;
6931 BFD_ASSERT (s != NULL);
6932 dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
6935 case DT_MIPS_LOCAL_GOTNO:
6936 dyn.d_un.d_val = g->local_gotno;
6939 case DT_MIPS_UNREFEXTNO:
6940 /* The index into the dynamic symbol table which is the
6941 entry of the first external symbol that is not
6942 referenced within the same object. */
6943 dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
6946 case DT_MIPS_GOTSYM:
6947 if (gg->global_gotsym)
6949 dyn.d_un.d_val = gg->global_gotsym->dynindx;
6952 /* In case if we don't have global got symbols we default
6953 to setting DT_MIPS_GOTSYM to the same value as
6954 DT_MIPS_SYMTABNO, so we just fall through. */
6956 case DT_MIPS_SYMTABNO:
6958 elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
6959 s = bfd_get_section_by_name (output_bfd, name);
6960 BFD_ASSERT (s != NULL);
6962 if (s->_cooked_size != 0)
6963 dyn.d_un.d_val = s->_cooked_size / elemsize;
6965 dyn.d_un.d_val = s->_raw_size / elemsize;
6968 case DT_MIPS_HIPAGENO:
6969 dyn.d_un.d_val = g->local_gotno - MIPS_RESERVED_GOTNO;
6972 case DT_MIPS_RLD_MAP:
6973 dyn.d_un.d_ptr = mips_elf_hash_table (info)->rld_value;
6976 case DT_MIPS_OPTIONS:
6977 s = (bfd_get_section_by_name
6978 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
6979 dyn.d_un.d_ptr = s->vma;
6983 s = (bfd_get_section_by_name (output_bfd, ".msym"));
6984 dyn.d_un.d_ptr = s->vma;
6993 (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
6998 /* The first entry of the global offset table will be filled at
6999 runtime. The second entry will be used by some runtime loaders.
7000 This isn't the case of IRIX rld. */
7001 if (sgot != NULL && sgot->_raw_size > 0)
7003 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
7004 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000,
7005 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
7009 elf_section_data (sgot->output_section)->this_hdr.sh_entsize
7010 = MIPS_ELF_GOT_SIZE (output_bfd);
7012 /* Generate dynamic relocations for the non-primary gots. */
7013 if (gg != NULL && gg->next)
7015 Elf_Internal_Rela rel[3];
7018 memset (rel, 0, sizeof (rel));
7019 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
7021 for (g = gg->next; g->next != gg; g = g->next)
7023 bfd_vma index = g->next->local_gotno + g->next->global_gotno;
7025 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents
7026 + index++ * MIPS_ELF_GOT_SIZE (output_bfd));
7027 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000, sgot->contents
7028 + index++ * MIPS_ELF_GOT_SIZE (output_bfd));
7033 while (index < g->assigned_gotno)
7035 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
7036 = index++ * MIPS_ELF_GOT_SIZE (output_bfd);
7037 if (!(mips_elf_create_dynamic_relocation
7038 (output_bfd, info, rel, NULL,
7039 bfd_abs_section_ptr,
7042 BFD_ASSERT (addend == 0);
7049 Elf32_compact_rel cpt;
7051 if (SGI_COMPAT (output_bfd))
7053 /* Write .compact_rel section out. */
7054 s = bfd_get_section_by_name (dynobj, ".compact_rel");
7058 cpt.num = s->reloc_count;
7060 cpt.offset = (s->output_section->filepos
7061 + sizeof (Elf32_External_compact_rel));
7064 bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
7065 ((Elf32_External_compact_rel *)
7068 /* Clean up a dummy stub function entry in .text. */
7069 s = bfd_get_section_by_name (dynobj,
7070 MIPS_ELF_STUB_SECTION_NAME (dynobj));
7073 file_ptr dummy_offset;
7075 BFD_ASSERT (s->_raw_size >= MIPS_FUNCTION_STUB_SIZE);
7076 dummy_offset = s->_raw_size - MIPS_FUNCTION_STUB_SIZE;
7077 memset (s->contents + dummy_offset, 0,
7078 MIPS_FUNCTION_STUB_SIZE);
7083 /* We need to sort the entries of the dynamic relocation section. */
7085 s = mips_elf_rel_dyn_section (dynobj, FALSE);
7088 && s->_raw_size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
7090 reldyn_sorting_bfd = output_bfd;
7092 if (ABI_64_P (output_bfd))
7093 qsort ((Elf64_External_Rel *) s->contents + 1,
7094 (size_t) s->reloc_count - 1,
7095 sizeof (Elf64_Mips_External_Rel), sort_dynamic_relocs_64);
7097 qsort ((Elf32_External_Rel *) s->contents + 1,
7098 (size_t) s->reloc_count - 1,
7099 sizeof (Elf32_External_Rel), sort_dynamic_relocs);
7107 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags. */
7110 mips_set_isa_flags (abfd)
7115 switch (bfd_get_mach (abfd))
7118 case bfd_mach_mips3000:
7119 val = E_MIPS_ARCH_1;
7122 case bfd_mach_mips3900:
7123 val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
7126 case bfd_mach_mips6000:
7127 val = E_MIPS_ARCH_2;
7130 case bfd_mach_mips4000:
7131 case bfd_mach_mips4300:
7132 case bfd_mach_mips4400:
7133 case bfd_mach_mips4600:
7134 val = E_MIPS_ARCH_3;
7137 case bfd_mach_mips4010:
7138 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
7141 case bfd_mach_mips4100:
7142 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
7145 case bfd_mach_mips4111:
7146 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
7149 case bfd_mach_mips4120:
7150 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
7153 case bfd_mach_mips4650:
7154 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
7157 case bfd_mach_mips5400:
7158 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
7161 case bfd_mach_mips5500:
7162 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
7165 case bfd_mach_mips5000:
7166 case bfd_mach_mips7000:
7167 case bfd_mach_mips8000:
7168 case bfd_mach_mips10000:
7169 case bfd_mach_mips12000:
7170 val = E_MIPS_ARCH_4;
7173 case bfd_mach_mips5:
7174 val = E_MIPS_ARCH_5;
7177 case bfd_mach_mips_sb1:
7178 val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
7181 case bfd_mach_mipsisa32:
7182 val = E_MIPS_ARCH_32;
7185 case bfd_mach_mipsisa64:
7186 val = E_MIPS_ARCH_64;
7189 case bfd_mach_mipsisa32r2:
7190 val = E_MIPS_ARCH_32R2;
7193 elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
7194 elf_elfheader (abfd)->e_flags |= val;
7199 /* The final processing done just before writing out a MIPS ELF object
7200 file. This gets the MIPS architecture right based on the machine
7201 number. This is used by both the 32-bit and the 64-bit ABI. */
7204 _bfd_mips_elf_final_write_processing (abfd, linker)
7206 bfd_boolean linker ATTRIBUTE_UNUSED;
7209 Elf_Internal_Shdr **hdrpp;
7213 /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
7214 is nonzero. This is for compatibility with old objects, which used
7215 a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH. */
7216 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
7217 mips_set_isa_flags (abfd);
7219 /* Set the sh_info field for .gptab sections and other appropriate
7220 info for each special section. */
7221 for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
7222 i < elf_numsections (abfd);
7225 switch ((*hdrpp)->sh_type)
7228 case SHT_MIPS_LIBLIST:
7229 sec = bfd_get_section_by_name (abfd, ".dynstr");
7231 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
7234 case SHT_MIPS_GPTAB:
7235 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
7236 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
7237 BFD_ASSERT (name != NULL
7238 && strncmp (name, ".gptab.", sizeof ".gptab." - 1) == 0);
7239 sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
7240 BFD_ASSERT (sec != NULL);
7241 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
7244 case SHT_MIPS_CONTENT:
7245 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
7246 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
7247 BFD_ASSERT (name != NULL
7248 && strncmp (name, ".MIPS.content",
7249 sizeof ".MIPS.content" - 1) == 0);
7250 sec = bfd_get_section_by_name (abfd,
7251 name + sizeof ".MIPS.content" - 1);
7252 BFD_ASSERT (sec != NULL);
7253 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
7256 case SHT_MIPS_SYMBOL_LIB:
7257 sec = bfd_get_section_by_name (abfd, ".dynsym");
7259 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
7260 sec = bfd_get_section_by_name (abfd, ".liblist");
7262 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
7265 case SHT_MIPS_EVENTS:
7266 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
7267 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
7268 BFD_ASSERT (name != NULL);
7269 if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0)
7270 sec = bfd_get_section_by_name (abfd,
7271 name + sizeof ".MIPS.events" - 1);
7274 BFD_ASSERT (strncmp (name, ".MIPS.post_rel",
7275 sizeof ".MIPS.post_rel" - 1) == 0);
7276 sec = bfd_get_section_by_name (abfd,
7278 + sizeof ".MIPS.post_rel" - 1));
7280 BFD_ASSERT (sec != NULL);
7281 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
7288 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
7292 _bfd_mips_elf_additional_program_headers (abfd)
7298 /* See if we need a PT_MIPS_REGINFO segment. */
7299 s = bfd_get_section_by_name (abfd, ".reginfo");
7300 if (s && (s->flags & SEC_LOAD))
7303 /* See if we need a PT_MIPS_OPTIONS segment. */
7304 if (IRIX_COMPAT (abfd) == ict_irix6
7305 && bfd_get_section_by_name (abfd,
7306 MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
7309 /* See if we need a PT_MIPS_RTPROC segment. */
7310 if (IRIX_COMPAT (abfd) == ict_irix5
7311 && bfd_get_section_by_name (abfd, ".dynamic")
7312 && bfd_get_section_by_name (abfd, ".mdebug"))
7318 /* Modify the segment map for an IRIX5 executable. */
7321 _bfd_mips_elf_modify_segment_map (abfd)
7325 struct elf_segment_map *m, **pm;
7328 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
7330 s = bfd_get_section_by_name (abfd, ".reginfo");
7331 if (s != NULL && (s->flags & SEC_LOAD) != 0)
7333 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
7334 if (m->p_type == PT_MIPS_REGINFO)
7339 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
7343 m->p_type = PT_MIPS_REGINFO;
7347 /* We want to put it after the PHDR and INTERP segments. */
7348 pm = &elf_tdata (abfd)->segment_map;
7350 && ((*pm)->p_type == PT_PHDR
7351 || (*pm)->p_type == PT_INTERP))
7359 /* For IRIX 6, we don't have .mdebug sections, nor does anything but
7360 .dynamic end up in PT_DYNAMIC. However, we do have to insert a
7361 PT_OPTIONS segment immediately following the program header
7364 /* On non-IRIX6 new abi, we'll have already created a segment
7365 for this section, so don't create another. I'm not sure this
7366 is not also the case for IRIX 6, but I can't test it right
7368 && IRIX_COMPAT (abfd) == ict_irix6)
7370 for (s = abfd->sections; s; s = s->next)
7371 if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
7376 struct elf_segment_map *options_segment;
7378 /* Usually, there's a program header table. But, sometimes
7379 there's not (like when running the `ld' testsuite). So,
7380 if there's no program header table, we just put the
7381 options segment at the end. */
7382 for (pm = &elf_tdata (abfd)->segment_map;
7385 if ((*pm)->p_type == PT_PHDR)
7388 amt = sizeof (struct elf_segment_map);
7389 options_segment = bfd_zalloc (abfd, amt);
7390 options_segment->next = *pm;
7391 options_segment->p_type = PT_MIPS_OPTIONS;
7392 options_segment->p_flags = PF_R;
7393 options_segment->p_flags_valid = TRUE;
7394 options_segment->count = 1;
7395 options_segment->sections[0] = s;
7396 *pm = options_segment;
7401 if (IRIX_COMPAT (abfd) == ict_irix5)
7403 /* If there are .dynamic and .mdebug sections, we make a room
7404 for the RTPROC header. FIXME: Rewrite without section names. */
7405 if (bfd_get_section_by_name (abfd, ".interp") == NULL
7406 && bfd_get_section_by_name (abfd, ".dynamic") != NULL
7407 && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
7409 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
7410 if (m->p_type == PT_MIPS_RTPROC)
7415 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
7419 m->p_type = PT_MIPS_RTPROC;
7421 s = bfd_get_section_by_name (abfd, ".rtproc");
7426 m->p_flags_valid = 1;
7434 /* We want to put it after the DYNAMIC segment. */
7435 pm = &elf_tdata (abfd)->segment_map;
7436 while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
7446 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
7447 .dynstr, .dynsym, and .hash sections, and everything in
7449 for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
7451 if ((*pm)->p_type == PT_DYNAMIC)
7454 if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
7456 /* For a normal mips executable the permissions for the PT_DYNAMIC
7457 segment are read, write and execute. We do that here since
7458 the code in elf.c sets only the read permission. This matters
7459 sometimes for the dynamic linker. */
7460 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
7462 m->p_flags = PF_R | PF_W | PF_X;
7463 m->p_flags_valid = 1;
7467 && m->count == 1 && strcmp (m->sections[0]->name, ".dynamic") == 0)
7469 static const char *sec_names[] =
7471 ".dynamic", ".dynstr", ".dynsym", ".hash"
7475 struct elf_segment_map *n;
7479 for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
7481 s = bfd_get_section_by_name (abfd, sec_names[i]);
7482 if (s != NULL && (s->flags & SEC_LOAD) != 0)
7488 sz = s->_cooked_size;
7491 if (high < s->vma + sz)
7497 for (s = abfd->sections; s != NULL; s = s->next)
7498 if ((s->flags & SEC_LOAD) != 0
7501 + (s->_cooked_size !=
7502 0 ? s->_cooked_size : s->_raw_size)) <= high))
7505 amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
7506 n = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
7513 for (s = abfd->sections; s != NULL; s = s->next)
7515 if ((s->flags & SEC_LOAD) != 0
7518 + (s->_cooked_size != 0 ?
7519 s->_cooked_size : s->_raw_size)) <= high))
7533 /* Return the section that should be marked against GC for a given
7537 _bfd_mips_elf_gc_mark_hook (sec, info, rel, h, sym)
7539 struct bfd_link_info *info ATTRIBUTE_UNUSED;
7540 Elf_Internal_Rela *rel;
7541 struct elf_link_hash_entry *h;
7542 Elf_Internal_Sym *sym;
7544 /* ??? Do mips16 stub sections need to be handled special? */
7548 switch (ELF_R_TYPE (sec->owner, rel->r_info))
7550 case R_MIPS_GNU_VTINHERIT:
7551 case R_MIPS_GNU_VTENTRY:
7555 switch (h->root.type)
7557 case bfd_link_hash_defined:
7558 case bfd_link_hash_defweak:
7559 return h->root.u.def.section;
7561 case bfd_link_hash_common:
7562 return h->root.u.c.p->section;
7570 return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
7575 /* Update the got entry reference counts for the section being removed. */
7578 _bfd_mips_elf_gc_sweep_hook (abfd, info, sec, relocs)
7579 bfd *abfd ATTRIBUTE_UNUSED;
7580 struct bfd_link_info *info ATTRIBUTE_UNUSED;
7581 asection *sec ATTRIBUTE_UNUSED;
7582 const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
7585 Elf_Internal_Shdr *symtab_hdr;
7586 struct elf_link_hash_entry **sym_hashes;
7587 bfd_signed_vma *local_got_refcounts;
7588 const Elf_Internal_Rela *rel, *relend;
7589 unsigned long r_symndx;
7590 struct elf_link_hash_entry *h;
7592 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7593 sym_hashes = elf_sym_hashes (abfd);
7594 local_got_refcounts = elf_local_got_refcounts (abfd);
7596 relend = relocs + sec->reloc_count;
7597 for (rel = relocs; rel < relend; rel++)
7598 switch (ELF_R_TYPE (abfd, rel->r_info))
7602 case R_MIPS_CALL_HI16:
7603 case R_MIPS_CALL_LO16:
7604 case R_MIPS_GOT_HI16:
7605 case R_MIPS_GOT_LO16:
7606 case R_MIPS_GOT_DISP:
7607 case R_MIPS_GOT_PAGE:
7608 case R_MIPS_GOT_OFST:
7609 /* ??? It would seem that the existing MIPS code does no sort
7610 of reference counting or whatnot on its GOT and PLT entries,
7611 so it is not possible to garbage collect them at this time. */
7622 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
7623 hiding the old indirect symbol. Process additional relocation
7624 information. Also called for weakdefs, in which case we just let
7625 _bfd_elf_link_hash_copy_indirect copy the flags for us. */
7628 _bfd_mips_elf_copy_indirect_symbol (bed, dir, ind)
7629 const struct elf_backend_data *bed;
7630 struct elf_link_hash_entry *dir, *ind;
7632 struct mips_elf_link_hash_entry *dirmips, *indmips;
7634 _bfd_elf_link_hash_copy_indirect (bed, dir, ind);
7636 if (ind->root.type != bfd_link_hash_indirect)
7639 dirmips = (struct mips_elf_link_hash_entry *) dir;
7640 indmips = (struct mips_elf_link_hash_entry *) ind;
7641 dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
7642 if (indmips->readonly_reloc)
7643 dirmips->readonly_reloc = TRUE;
7644 if (indmips->no_fn_stub)
7645 dirmips->no_fn_stub = TRUE;
7649 _bfd_mips_elf_hide_symbol (info, entry, force_local)
7650 struct bfd_link_info *info;
7651 struct elf_link_hash_entry *entry;
7652 bfd_boolean force_local;
7656 struct mips_got_info *g;
7657 struct mips_elf_link_hash_entry *h;
7659 h = (struct mips_elf_link_hash_entry *) entry;
7660 if (h->forced_local)
7662 h->forced_local = force_local;
7664 dynobj = elf_hash_table (info)->dynobj;
7665 if (dynobj != NULL && force_local)
7667 got = mips_elf_got_section (dynobj, FALSE);
7668 g = mips_elf_section_data (got)->u.got_info;
7672 struct mips_got_entry e;
7673 struct mips_got_info *gg = g;
7675 /* Since we're turning what used to be a global symbol into a
7676 local one, bump up the number of local entries of each GOT
7677 that had an entry for it. This will automatically decrease
7678 the number of global entries, since global_gotno is actually
7679 the upper limit of global entries. */
7684 for (g = g->next; g != gg; g = g->next)
7685 if (htab_find (g->got_entries, &e))
7687 BFD_ASSERT (g->global_gotno > 0);
7692 /* If this was a global symbol forced into the primary GOT, we
7693 no longer need an entry for it. We can't release the entry
7694 at this point, but we must at least stop counting it as one
7695 of the symbols that required a forced got entry. */
7696 if (h->root.got.offset == 2)
7698 BFD_ASSERT (gg->assigned_gotno > 0);
7699 gg->assigned_gotno--;
7702 else if (g->global_gotno == 0 && g->global_gotsym == NULL)
7703 /* If we haven't got through GOT allocation yet, just bump up the
7704 number of local entries, as this symbol won't be counted as
7707 else if (h->root.got.offset == 1)
7709 /* If we're past non-multi-GOT allocation and this symbol had
7710 been marked for a global got entry, give it a local entry
7712 BFD_ASSERT (g->global_gotno > 0);
7718 _bfd_elf_link_hash_hide_symbol (info, &h->root, force_local);
7724 _bfd_mips_elf_discard_info (abfd, cookie, info)
7726 struct elf_reloc_cookie *cookie;
7727 struct bfd_link_info *info;
7730 bfd_boolean ret = FALSE;
7731 unsigned char *tdata;
7734 o = bfd_get_section_by_name (abfd, ".pdr");
7737 if (o->_raw_size == 0)
7739 if (o->_raw_size % PDR_SIZE != 0)
7741 if (o->output_section != NULL
7742 && bfd_is_abs_section (o->output_section))
7745 tdata = bfd_zmalloc (o->_raw_size / PDR_SIZE);
7749 cookie->rels = _bfd_elf_link_read_relocs (abfd, o, (PTR) NULL,
7750 (Elf_Internal_Rela *) NULL,
7758 cookie->rel = cookie->rels;
7759 cookie->relend = cookie->rels + o->reloc_count;
7761 for (i = 0, skip = 0; i < o->_raw_size / PDR_SIZE; i ++)
7763 if (MNAME(abfd,_bfd_elf,reloc_symbol_deleted_p) (i * PDR_SIZE, cookie))
7772 mips_elf_section_data (o)->u.tdata = tdata;
7773 o->_cooked_size = o->_raw_size - skip * PDR_SIZE;
7779 if (! info->keep_memory)
7780 free (cookie->rels);
7786 _bfd_mips_elf_ignore_discarded_relocs (sec)
7789 if (strcmp (sec->name, ".pdr") == 0)
7795 _bfd_mips_elf_write_section (output_bfd, sec, contents)
7800 bfd_byte *to, *from, *end;
7803 if (strcmp (sec->name, ".pdr") != 0)
7806 if (mips_elf_section_data (sec)->u.tdata == NULL)
7810 end = contents + sec->_raw_size;
7811 for (from = contents, i = 0;
7813 from += PDR_SIZE, i++)
7815 if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
7818 memcpy (to, from, PDR_SIZE);
7821 bfd_set_section_contents (output_bfd, sec->output_section, contents,
7822 (file_ptr) sec->output_offset,
7827 /* MIPS ELF uses a special find_nearest_line routine in order the
7828 handle the ECOFF debugging information. */
7830 struct mips_elf_find_line
7832 struct ecoff_debug_info d;
7833 struct ecoff_find_line i;
7837 _bfd_mips_elf_find_nearest_line (abfd, section, symbols, offset, filename_ptr,
7838 functionname_ptr, line_ptr)
7843 const char **filename_ptr;
7844 const char **functionname_ptr;
7845 unsigned int *line_ptr;
7849 if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
7850 filename_ptr, functionname_ptr,
7854 if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
7855 filename_ptr, functionname_ptr,
7857 (unsigned) (ABI_64_P (abfd) ? 8 : 0),
7858 &elf_tdata (abfd)->dwarf2_find_line_info))
7861 msec = bfd_get_section_by_name (abfd, ".mdebug");
7865 struct mips_elf_find_line *fi;
7866 const struct ecoff_debug_swap * const swap =
7867 get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
7869 /* If we are called during a link, mips_elf_final_link may have
7870 cleared the SEC_HAS_CONTENTS field. We force it back on here
7871 if appropriate (which it normally will be). */
7872 origflags = msec->flags;
7873 if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
7874 msec->flags |= SEC_HAS_CONTENTS;
7876 fi = elf_tdata (abfd)->find_line_info;
7879 bfd_size_type external_fdr_size;
7882 struct fdr *fdr_ptr;
7883 bfd_size_type amt = sizeof (struct mips_elf_find_line);
7885 fi = (struct mips_elf_find_line *) bfd_zalloc (abfd, amt);
7888 msec->flags = origflags;
7892 if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
7894 msec->flags = origflags;
7898 /* Swap in the FDR information. */
7899 amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
7900 fi->d.fdr = (struct fdr *) bfd_alloc (abfd, amt);
7901 if (fi->d.fdr == NULL)
7903 msec->flags = origflags;
7906 external_fdr_size = swap->external_fdr_size;
7907 fdr_ptr = fi->d.fdr;
7908 fraw_src = (char *) fi->d.external_fdr;
7909 fraw_end = (fraw_src
7910 + fi->d.symbolic_header.ifdMax * external_fdr_size);
7911 for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
7912 (*swap->swap_fdr_in) (abfd, (PTR) fraw_src, fdr_ptr);
7914 elf_tdata (abfd)->find_line_info = fi;
7916 /* Note that we don't bother to ever free this information.
7917 find_nearest_line is either called all the time, as in
7918 objdump -l, so the information should be saved, or it is
7919 rarely called, as in ld error messages, so the memory
7920 wasted is unimportant. Still, it would probably be a
7921 good idea for free_cached_info to throw it away. */
7924 if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
7925 &fi->i, filename_ptr, functionname_ptr,
7928 msec->flags = origflags;
7932 msec->flags = origflags;
7935 /* Fall back on the generic ELF find_nearest_line routine. */
7937 return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
7938 filename_ptr, functionname_ptr,
7942 /* When are writing out the .options or .MIPS.options section,
7943 remember the bytes we are writing out, so that we can install the
7944 GP value in the section_processing routine. */
7947 _bfd_mips_elf_set_section_contents (abfd, section, location, offset, count)
7952 bfd_size_type count;
7954 if (strcmp (section->name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) == 0)
7958 if (elf_section_data (section) == NULL)
7960 bfd_size_type amt = sizeof (struct bfd_elf_section_data);
7961 section->used_by_bfd = (PTR) bfd_zalloc (abfd, amt);
7962 if (elf_section_data (section) == NULL)
7965 c = mips_elf_section_data (section)->u.tdata;
7970 if (section->_cooked_size != 0)
7971 size = section->_cooked_size;
7973 size = section->_raw_size;
7974 c = (bfd_byte *) bfd_zalloc (abfd, size);
7977 mips_elf_section_data (section)->u.tdata = c;
7980 memcpy (c + offset, location, (size_t) count);
7983 return _bfd_elf_set_section_contents (abfd, section, location, offset,
7987 /* This is almost identical to bfd_generic_get_... except that some
7988 MIPS relocations need to be handled specially. Sigh. */
7991 _bfd_elf_mips_get_relocated_section_contents (abfd, link_info, link_order,
7992 data, relocatable, symbols)
7994 struct bfd_link_info *link_info;
7995 struct bfd_link_order *link_order;
7997 bfd_boolean relocatable;
8000 /* Get enough memory to hold the stuff */
8001 bfd *input_bfd = link_order->u.indirect.section->owner;
8002 asection *input_section = link_order->u.indirect.section;
8004 long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
8005 arelent **reloc_vector = NULL;
8011 reloc_vector = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
8012 if (reloc_vector == NULL && reloc_size != 0)
8015 /* read in the section */
8016 if (!bfd_get_section_contents (input_bfd,
8020 input_section->_raw_size))
8023 /* We're not relaxing the section, so just copy the size info */
8024 input_section->_cooked_size = input_section->_raw_size;
8025 input_section->reloc_done = TRUE;
8027 reloc_count = bfd_canonicalize_reloc (input_bfd,
8031 if (reloc_count < 0)
8034 if (reloc_count > 0)
8039 bfd_vma gp = 0x12345678; /* initialize just to shut gcc up */
8042 struct bfd_hash_entry *h;
8043 struct bfd_link_hash_entry *lh;
8044 /* Skip all this stuff if we aren't mixing formats. */
8045 if (abfd && input_bfd
8046 && abfd->xvec == input_bfd->xvec)
8050 h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
8051 lh = (struct bfd_link_hash_entry *) h;
8058 case bfd_link_hash_undefined:
8059 case bfd_link_hash_undefweak:
8060 case bfd_link_hash_common:
8063 case bfd_link_hash_defined:
8064 case bfd_link_hash_defweak:
8066 gp = lh->u.def.value;
8068 case bfd_link_hash_indirect:
8069 case bfd_link_hash_warning:
8071 /* @@FIXME ignoring warning for now */
8073 case bfd_link_hash_new:
8082 for (parent = reloc_vector; *parent != (arelent *) NULL;
8085 char *error_message = (char *) NULL;
8086 bfd_reloc_status_type r;
8088 /* Specific to MIPS: Deal with relocation types that require
8089 knowing the gp of the output bfd. */
8090 asymbol *sym = *(*parent)->sym_ptr_ptr;
8091 if (bfd_is_abs_section (sym->section) && abfd)
8093 /* The special_function wouldn't get called anyway. */
8097 /* The gp isn't there; let the special function code
8098 fall over on its own. */
8100 else if ((*parent)->howto->special_function
8101 == _bfd_mips_elf32_gprel16_reloc)
8103 /* bypass special_function call */
8104 r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
8105 input_section, relocatable,
8107 goto skip_bfd_perform_relocation;
8109 /* end mips specific stuff */
8111 r = bfd_perform_relocation (input_bfd,
8115 relocatable ? abfd : (bfd *) NULL,
8117 skip_bfd_perform_relocation:
8121 asection *os = input_section->output_section;
8123 /* A partial link, so keep the relocs */
8124 os->orelocation[os->reloc_count] = *parent;
8128 if (r != bfd_reloc_ok)
8132 case bfd_reloc_undefined:
8133 if (!((*link_info->callbacks->undefined_symbol)
8134 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
8135 input_bfd, input_section, (*parent)->address,
8139 case bfd_reloc_dangerous:
8140 BFD_ASSERT (error_message != (char *) NULL);
8141 if (!((*link_info->callbacks->reloc_dangerous)
8142 (link_info, error_message, input_bfd, input_section,
8143 (*parent)->address)))
8146 case bfd_reloc_overflow:
8147 if (!((*link_info->callbacks->reloc_overflow)
8148 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
8149 (*parent)->howto->name, (*parent)->addend,
8150 input_bfd, input_section, (*parent)->address)))
8153 case bfd_reloc_outofrange:
8162 if (reloc_vector != NULL)
8163 free (reloc_vector);
8167 if (reloc_vector != NULL)
8168 free (reloc_vector);
8172 /* Create a MIPS ELF linker hash table. */
8174 struct bfd_link_hash_table *
8175 _bfd_mips_elf_link_hash_table_create (abfd)
8178 struct mips_elf_link_hash_table *ret;
8179 bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
8181 ret = (struct mips_elf_link_hash_table *) bfd_malloc (amt);
8182 if (ret == (struct mips_elf_link_hash_table *) NULL)
8185 if (! _bfd_elf_link_hash_table_init (&ret->root, abfd,
8186 mips_elf_link_hash_newfunc))
8193 /* We no longer use this. */
8194 for (i = 0; i < SIZEOF_MIPS_DYNSYM_SECNAMES; i++)
8195 ret->dynsym_sec_strindex[i] = (bfd_size_type) -1;
8197 ret->procedure_count = 0;
8198 ret->compact_rel_size = 0;
8199 ret->use_rld_obj_head = FALSE;
8201 ret->mips16_stubs_seen = FALSE;
8203 return &ret->root.root;
8206 /* We need to use a special link routine to handle the .reginfo and
8207 the .mdebug sections. We need to merge all instances of these
8208 sections together, not write them all out sequentially. */
8211 _bfd_mips_elf_final_link (abfd, info)
8213 struct bfd_link_info *info;
8217 struct bfd_link_order *p;
8218 asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
8219 asection *rtproc_sec;
8220 Elf32_RegInfo reginfo;
8221 struct ecoff_debug_info debug;
8222 const struct ecoff_debug_swap *swap
8223 = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
8224 HDRR *symhdr = &debug.symbolic_header;
8225 PTR mdebug_handle = NULL;
8231 static const char * const secname[] =
8233 ".text", ".init", ".fini", ".data",
8234 ".rodata", ".sdata", ".sbss", ".bss"
8236 static const int sc[] =
8238 scText, scInit, scFini, scData,
8239 scRData, scSData, scSBss, scBss
8242 /* We'd carefully arranged the dynamic symbol indices, and then the
8243 generic size_dynamic_sections renumbered them out from under us.
8244 Rather than trying somehow to prevent the renumbering, just do
8246 if (elf_hash_table (info)->dynamic_sections_created)
8250 struct mips_got_info *g;
8252 /* When we resort, we must tell mips_elf_sort_hash_table what
8253 the lowest index it may use is. That's the number of section
8254 symbols we're going to add. The generic ELF linker only
8255 adds these symbols when building a shared object. Note that
8256 we count the sections after (possibly) removing the .options
8258 if (! mips_elf_sort_hash_table (info, (info->shared
8259 ? bfd_count_sections (abfd) + 1
8263 /* Make sure we didn't grow the global .got region. */
8264 dynobj = elf_hash_table (info)->dynobj;
8265 got = mips_elf_got_section (dynobj, FALSE);
8266 g = mips_elf_section_data (got)->u.got_info;
8268 if (g->global_gotsym != NULL)
8269 BFD_ASSERT ((elf_hash_table (info)->dynsymcount
8270 - g->global_gotsym->dynindx)
8271 <= g->global_gotno);
8275 /* We want to set the GP value for ld -r. */
8276 /* On IRIX5, we omit the .options section. On IRIX6, however, we
8277 include it, even though we don't process it quite right. (Some
8278 entries are supposed to be merged.) Empirically, we seem to be
8279 better off including it then not. */
8280 if (IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none)
8281 for (secpp = &abfd->sections; *secpp != NULL; secpp = &(*secpp)->next)
8283 if (strcmp ((*secpp)->name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) == 0)
8285 for (p = (*secpp)->link_order_head; p != NULL; p = p->next)
8286 if (p->type == bfd_indirect_link_order)
8287 p->u.indirect.section->flags &= ~SEC_HAS_CONTENTS;
8288 (*secpp)->link_order_head = NULL;
8289 bfd_section_list_remove (abfd, secpp);
8290 --abfd->section_count;
8296 /* We include .MIPS.options, even though we don't process it quite right.
8297 (Some entries are supposed to be merged.) At IRIX6 empirically we seem
8298 to be better off including it than not. */
8299 for (secpp = &abfd->sections; *secpp != NULL; secpp = &(*secpp)->next)
8301 if (strcmp ((*secpp)->name, ".MIPS.options") == 0)
8303 for (p = (*secpp)->link_order_head; p != NULL; p = p->next)
8304 if (p->type == bfd_indirect_link_order)
8305 p->u.indirect.section->flags &=~ SEC_HAS_CONTENTS;
8306 (*secpp)->link_order_head = NULL;
8307 bfd_section_list_remove (abfd, secpp);
8308 --abfd->section_count;
8315 /* Get a value for the GP register. */
8316 if (elf_gp (abfd) == 0)
8318 struct bfd_link_hash_entry *h;
8320 h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
8321 if (h != (struct bfd_link_hash_entry *) NULL
8322 && h->type == bfd_link_hash_defined)
8323 elf_gp (abfd) = (h->u.def.value
8324 + h->u.def.section->output_section->vma
8325 + h->u.def.section->output_offset);
8326 else if (info->relocatable)
8328 bfd_vma lo = MINUS_ONE;
8330 /* Find the GP-relative section with the lowest offset. */
8331 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
8333 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
8336 /* And calculate GP relative to that. */
8337 elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (abfd);
8341 /* If the relocate_section function needs to do a reloc
8342 involving the GP value, it should make a reloc_dangerous
8343 callback to warn that GP is not defined. */
8347 /* Go through the sections and collect the .reginfo and .mdebug
8351 gptab_data_sec = NULL;
8352 gptab_bss_sec = NULL;
8353 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
8355 if (strcmp (o->name, ".reginfo") == 0)
8357 memset (®info, 0, sizeof reginfo);
8359 /* We have found the .reginfo section in the output file.
8360 Look through all the link_orders comprising it and merge
8361 the information together. */
8362 for (p = o->link_order_head;
8363 p != (struct bfd_link_order *) NULL;
8366 asection *input_section;
8368 Elf32_External_RegInfo ext;
8371 if (p->type != bfd_indirect_link_order)
8373 if (p->type == bfd_data_link_order)
8378 input_section = p->u.indirect.section;
8379 input_bfd = input_section->owner;
8381 /* The linker emulation code has probably clobbered the
8382 size to be zero bytes. */
8383 if (input_section->_raw_size == 0)
8384 input_section->_raw_size = sizeof (Elf32_External_RegInfo);
8386 if (! bfd_get_section_contents (input_bfd, input_section,
8389 (bfd_size_type) sizeof ext))
8392 bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
8394 reginfo.ri_gprmask |= sub.ri_gprmask;
8395 reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
8396 reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
8397 reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
8398 reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
8400 /* ri_gp_value is set by the function
8401 mips_elf32_section_processing when the section is
8402 finally written out. */
8404 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8405 elf_link_input_bfd ignores this section. */
8406 input_section->flags &= ~SEC_HAS_CONTENTS;
8409 /* Size has been set in _bfd_mips_elf_always_size_sections. */
8410 BFD_ASSERT(o->_raw_size == sizeof (Elf32_External_RegInfo));
8412 /* Skip this section later on (I don't think this currently
8413 matters, but someday it might). */
8414 o->link_order_head = (struct bfd_link_order *) NULL;
8419 if (strcmp (o->name, ".mdebug") == 0)
8421 struct extsym_info einfo;
8424 /* We have found the .mdebug section in the output file.
8425 Look through all the link_orders comprising it and merge
8426 the information together. */
8427 symhdr->magic = swap->sym_magic;
8428 /* FIXME: What should the version stamp be? */
8430 symhdr->ilineMax = 0;
8434 symhdr->isymMax = 0;
8435 symhdr->ioptMax = 0;
8436 symhdr->iauxMax = 0;
8438 symhdr->issExtMax = 0;
8441 symhdr->iextMax = 0;
8443 /* We accumulate the debugging information itself in the
8444 debug_info structure. */
8446 debug.external_dnr = NULL;
8447 debug.external_pdr = NULL;
8448 debug.external_sym = NULL;
8449 debug.external_opt = NULL;
8450 debug.external_aux = NULL;
8452 debug.ssext = debug.ssext_end = NULL;
8453 debug.external_fdr = NULL;
8454 debug.external_rfd = NULL;
8455 debug.external_ext = debug.external_ext_end = NULL;
8457 mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
8458 if (mdebug_handle == (PTR) NULL)
8462 esym.cobol_main = 0;
8466 esym.asym.iss = issNil;
8467 esym.asym.st = stLocal;
8468 esym.asym.reserved = 0;
8469 esym.asym.index = indexNil;
8471 for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
8473 esym.asym.sc = sc[i];
8474 s = bfd_get_section_by_name (abfd, secname[i]);
8477 esym.asym.value = s->vma;
8478 last = s->vma + s->_raw_size;
8481 esym.asym.value = last;
8482 if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
8487 for (p = o->link_order_head;
8488 p != (struct bfd_link_order *) NULL;
8491 asection *input_section;
8493 const struct ecoff_debug_swap *input_swap;
8494 struct ecoff_debug_info input_debug;
8498 if (p->type != bfd_indirect_link_order)
8500 if (p->type == bfd_data_link_order)
8505 input_section = p->u.indirect.section;
8506 input_bfd = input_section->owner;
8508 if (bfd_get_flavour (input_bfd) != bfd_target_elf_flavour
8509 || (get_elf_backend_data (input_bfd)
8510 ->elf_backend_ecoff_debug_swap) == NULL)
8512 /* I don't know what a non MIPS ELF bfd would be
8513 doing with a .mdebug section, but I don't really
8514 want to deal with it. */
8518 input_swap = (get_elf_backend_data (input_bfd)
8519 ->elf_backend_ecoff_debug_swap);
8521 BFD_ASSERT (p->size == input_section->_raw_size);
8523 /* The ECOFF linking code expects that we have already
8524 read in the debugging information and set up an
8525 ecoff_debug_info structure, so we do that now. */
8526 if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
8530 if (! (bfd_ecoff_debug_accumulate
8531 (mdebug_handle, abfd, &debug, swap, input_bfd,
8532 &input_debug, input_swap, info)))
8535 /* Loop through the external symbols. For each one with
8536 interesting information, try to find the symbol in
8537 the linker global hash table and save the information
8538 for the output external symbols. */
8539 eraw_src = input_debug.external_ext;
8540 eraw_end = (eraw_src
8541 + (input_debug.symbolic_header.iextMax
8542 * input_swap->external_ext_size));
8544 eraw_src < eraw_end;
8545 eraw_src += input_swap->external_ext_size)
8549 struct mips_elf_link_hash_entry *h;
8551 (*input_swap->swap_ext_in) (input_bfd, (PTR) eraw_src, &ext);
8552 if (ext.asym.sc == scNil
8553 || ext.asym.sc == scUndefined
8554 || ext.asym.sc == scSUndefined)
8557 name = input_debug.ssext + ext.asym.iss;
8558 h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
8559 name, FALSE, FALSE, TRUE);
8560 if (h == NULL || h->esym.ifd != -2)
8566 < input_debug.symbolic_header.ifdMax);
8567 ext.ifd = input_debug.ifdmap[ext.ifd];
8573 /* Free up the information we just read. */
8574 free (input_debug.line);
8575 free (input_debug.external_dnr);
8576 free (input_debug.external_pdr);
8577 free (input_debug.external_sym);
8578 free (input_debug.external_opt);
8579 free (input_debug.external_aux);
8580 free (input_debug.ss);
8581 free (input_debug.ssext);
8582 free (input_debug.external_fdr);
8583 free (input_debug.external_rfd);
8584 free (input_debug.external_ext);
8586 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8587 elf_link_input_bfd ignores this section. */
8588 input_section->flags &= ~SEC_HAS_CONTENTS;
8591 if (SGI_COMPAT (abfd) && info->shared)
8593 /* Create .rtproc section. */
8594 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
8595 if (rtproc_sec == NULL)
8597 flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
8598 | SEC_LINKER_CREATED | SEC_READONLY);
8600 rtproc_sec = bfd_make_section (abfd, ".rtproc");
8601 if (rtproc_sec == NULL
8602 || ! bfd_set_section_flags (abfd, rtproc_sec, flags)
8603 || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
8607 if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
8613 /* Build the external symbol information. */
8616 einfo.debug = &debug;
8618 einfo.failed = FALSE;
8619 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8620 mips_elf_output_extsym,
8625 /* Set the size of the .mdebug section. */
8626 o->_raw_size = bfd_ecoff_debug_size (abfd, &debug, swap);
8628 /* Skip this section later on (I don't think this currently
8629 matters, but someday it might). */
8630 o->link_order_head = (struct bfd_link_order *) NULL;
8635 if (strncmp (o->name, ".gptab.", sizeof ".gptab." - 1) == 0)
8637 const char *subname;
8640 Elf32_External_gptab *ext_tab;
8643 /* The .gptab.sdata and .gptab.sbss sections hold
8644 information describing how the small data area would
8645 change depending upon the -G switch. These sections
8646 not used in executables files. */
8647 if (! info->relocatable)
8649 for (p = o->link_order_head;
8650 p != (struct bfd_link_order *) NULL;
8653 asection *input_section;
8655 if (p->type != bfd_indirect_link_order)
8657 if (p->type == bfd_data_link_order)
8662 input_section = p->u.indirect.section;
8664 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8665 elf_link_input_bfd ignores this section. */
8666 input_section->flags &= ~SEC_HAS_CONTENTS;
8669 /* Skip this section later on (I don't think this
8670 currently matters, but someday it might). */
8671 o->link_order_head = (struct bfd_link_order *) NULL;
8673 /* Really remove the section. */
8674 for (secpp = &abfd->sections;
8676 secpp = &(*secpp)->next)
8678 bfd_section_list_remove (abfd, secpp);
8679 --abfd->section_count;
8684 /* There is one gptab for initialized data, and one for
8685 uninitialized data. */
8686 if (strcmp (o->name, ".gptab.sdata") == 0)
8688 else if (strcmp (o->name, ".gptab.sbss") == 0)
8692 (*_bfd_error_handler)
8693 (_("%s: illegal section name `%s'"),
8694 bfd_get_filename (abfd), o->name);
8695 bfd_set_error (bfd_error_nonrepresentable_section);
8699 /* The linker script always combines .gptab.data and
8700 .gptab.sdata into .gptab.sdata, and likewise for
8701 .gptab.bss and .gptab.sbss. It is possible that there is
8702 no .sdata or .sbss section in the output file, in which
8703 case we must change the name of the output section. */
8704 subname = o->name + sizeof ".gptab" - 1;
8705 if (bfd_get_section_by_name (abfd, subname) == NULL)
8707 if (o == gptab_data_sec)
8708 o->name = ".gptab.data";
8710 o->name = ".gptab.bss";
8711 subname = o->name + sizeof ".gptab" - 1;
8712 BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
8715 /* Set up the first entry. */
8717 amt = c * sizeof (Elf32_gptab);
8718 tab = (Elf32_gptab *) bfd_malloc (amt);
8721 tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
8722 tab[0].gt_header.gt_unused = 0;
8724 /* Combine the input sections. */
8725 for (p = o->link_order_head;
8726 p != (struct bfd_link_order *) NULL;
8729 asection *input_section;
8733 bfd_size_type gpentry;
8735 if (p->type != bfd_indirect_link_order)
8737 if (p->type == bfd_data_link_order)
8742 input_section = p->u.indirect.section;
8743 input_bfd = input_section->owner;
8745 /* Combine the gptab entries for this input section one
8746 by one. We know that the input gptab entries are
8747 sorted by ascending -G value. */
8748 size = bfd_section_size (input_bfd, input_section);
8750 for (gpentry = sizeof (Elf32_External_gptab);
8752 gpentry += sizeof (Elf32_External_gptab))
8754 Elf32_External_gptab ext_gptab;
8755 Elf32_gptab int_gptab;
8761 if (! (bfd_get_section_contents
8762 (input_bfd, input_section, (PTR) &ext_gptab,
8764 (bfd_size_type) sizeof (Elf32_External_gptab))))
8770 bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
8772 val = int_gptab.gt_entry.gt_g_value;
8773 add = int_gptab.gt_entry.gt_bytes - last;
8776 for (look = 1; look < c; look++)
8778 if (tab[look].gt_entry.gt_g_value >= val)
8779 tab[look].gt_entry.gt_bytes += add;
8781 if (tab[look].gt_entry.gt_g_value == val)
8787 Elf32_gptab *new_tab;
8790 /* We need a new table entry. */
8791 amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
8792 new_tab = (Elf32_gptab *) bfd_realloc ((PTR) tab, amt);
8793 if (new_tab == NULL)
8799 tab[c].gt_entry.gt_g_value = val;
8800 tab[c].gt_entry.gt_bytes = add;
8802 /* Merge in the size for the next smallest -G
8803 value, since that will be implied by this new
8806 for (look = 1; look < c; look++)
8808 if (tab[look].gt_entry.gt_g_value < val
8810 || (tab[look].gt_entry.gt_g_value
8811 > tab[max].gt_entry.gt_g_value)))
8815 tab[c].gt_entry.gt_bytes +=
8816 tab[max].gt_entry.gt_bytes;
8821 last = int_gptab.gt_entry.gt_bytes;
8824 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8825 elf_link_input_bfd ignores this section. */
8826 input_section->flags &= ~SEC_HAS_CONTENTS;
8829 /* The table must be sorted by -G value. */
8831 qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
8833 /* Swap out the table. */
8834 amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
8835 ext_tab = (Elf32_External_gptab *) bfd_alloc (abfd, amt);
8836 if (ext_tab == NULL)
8842 for (j = 0; j < c; j++)
8843 bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
8846 o->_raw_size = c * sizeof (Elf32_External_gptab);
8847 o->contents = (bfd_byte *) ext_tab;
8849 /* Skip this section later on (I don't think this currently
8850 matters, but someday it might). */
8851 o->link_order_head = (struct bfd_link_order *) NULL;
8855 /* Invoke the regular ELF backend linker to do all the work. */
8856 if (!MNAME(abfd,bfd_elf,bfd_final_link) (abfd, info))
8859 /* Now write out the computed sections. */
8861 if (reginfo_sec != (asection *) NULL)
8863 Elf32_External_RegInfo ext;
8865 bfd_mips_elf32_swap_reginfo_out (abfd, ®info, &ext);
8866 if (! bfd_set_section_contents (abfd, reginfo_sec, (PTR) &ext,
8868 (bfd_size_type) sizeof ext))
8872 if (mdebug_sec != (asection *) NULL)
8874 BFD_ASSERT (abfd->output_has_begun);
8875 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
8877 mdebug_sec->filepos))
8880 bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
8883 if (gptab_data_sec != (asection *) NULL)
8885 if (! bfd_set_section_contents (abfd, gptab_data_sec,
8886 gptab_data_sec->contents,
8888 gptab_data_sec->_raw_size))
8892 if (gptab_bss_sec != (asection *) NULL)
8894 if (! bfd_set_section_contents (abfd, gptab_bss_sec,
8895 gptab_bss_sec->contents,
8897 gptab_bss_sec->_raw_size))
8901 if (SGI_COMPAT (abfd))
8903 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
8904 if (rtproc_sec != NULL)
8906 if (! bfd_set_section_contents (abfd, rtproc_sec,
8907 rtproc_sec->contents,
8909 rtproc_sec->_raw_size))
8917 /* Structure for saying that BFD machine EXTENSION extends BASE. */
8919 struct mips_mach_extension {
8920 unsigned long extension, base;
8924 /* An array describing how BFD machines relate to one another. The entries
8925 are ordered topologically with MIPS I extensions listed last. */
8927 static const struct mips_mach_extension mips_mach_extensions[] = {
8928 /* MIPS64 extensions. */
8929 { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
8931 /* MIPS V extensions. */
8932 { bfd_mach_mipsisa64, bfd_mach_mips5 },
8934 /* R10000 extensions. */
8935 { bfd_mach_mips12000, bfd_mach_mips10000 },
8937 /* R5000 extensions. Note: the vr5500 ISA is an extension of the core
8938 vr5400 ISA, but doesn't include the multimedia stuff. It seems
8939 better to allow vr5400 and vr5500 code to be merged anyway, since
8940 many libraries will just use the core ISA. Perhaps we could add
8941 some sort of ASE flag if this ever proves a problem. */
8942 { bfd_mach_mips5500, bfd_mach_mips5400 },
8943 { bfd_mach_mips5400, bfd_mach_mips5000 },
8945 /* MIPS IV extensions. */
8946 { bfd_mach_mips5, bfd_mach_mips8000 },
8947 { bfd_mach_mips10000, bfd_mach_mips8000 },
8948 { bfd_mach_mips5000, bfd_mach_mips8000 },
8949 { bfd_mach_mips7000, bfd_mach_mips8000 },
8951 /* VR4100 extensions. */
8952 { bfd_mach_mips4120, bfd_mach_mips4100 },
8953 { bfd_mach_mips4111, bfd_mach_mips4100 },
8955 /* MIPS III extensions. */
8956 { bfd_mach_mips8000, bfd_mach_mips4000 },
8957 { bfd_mach_mips4650, bfd_mach_mips4000 },
8958 { bfd_mach_mips4600, bfd_mach_mips4000 },
8959 { bfd_mach_mips4400, bfd_mach_mips4000 },
8960 { bfd_mach_mips4300, bfd_mach_mips4000 },
8961 { bfd_mach_mips4100, bfd_mach_mips4000 },
8962 { bfd_mach_mips4010, bfd_mach_mips4000 },
8964 /* MIPS32 extensions. */
8965 { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
8967 /* MIPS II extensions. */
8968 { bfd_mach_mips4000, bfd_mach_mips6000 },
8969 { bfd_mach_mipsisa32, bfd_mach_mips6000 },
8971 /* MIPS I extensions. */
8972 { bfd_mach_mips6000, bfd_mach_mips3000 },
8973 { bfd_mach_mips3900, bfd_mach_mips3000 }
8977 /* Return true if bfd machine EXTENSION is an extension of machine BASE. */
8980 mips_mach_extends_p (base, extension)
8981 unsigned long base, extension;
8985 for (i = 0; extension != base && i < ARRAY_SIZE (mips_mach_extensions); i++)
8986 if (extension == mips_mach_extensions[i].extension)
8987 extension = mips_mach_extensions[i].base;
8989 return extension == base;
8993 /* Return true if the given ELF header flags describe a 32-bit binary. */
8996 mips_32bit_flags_p (flags)
8999 return ((flags & EF_MIPS_32BITMODE) != 0
9000 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
9001 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
9002 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
9003 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
9004 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
9005 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
9009 /* Merge backend specific data from an object file to the output
9010 object file when linking. */
9013 _bfd_mips_elf_merge_private_bfd_data (ibfd, obfd)
9020 bfd_boolean null_input_bfd = TRUE;
9023 /* Check if we have the same endianess */
9024 if (! _bfd_generic_verify_endian_match (ibfd, obfd))
9026 (*_bfd_error_handler)
9027 (_("%s: endianness incompatible with that of the selected emulation"),
9028 bfd_archive_filename (ibfd));
9032 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
9033 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
9036 if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
9038 (*_bfd_error_handler)
9039 (_("%s: ABI is incompatible with that of the selected emulation"),
9040 bfd_archive_filename (ibfd));
9044 new_flags = elf_elfheader (ibfd)->e_flags;
9045 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
9046 old_flags = elf_elfheader (obfd)->e_flags;
9048 if (! elf_flags_init (obfd))
9050 elf_flags_init (obfd) = TRUE;
9051 elf_elfheader (obfd)->e_flags = new_flags;
9052 elf_elfheader (obfd)->e_ident[EI_CLASS]
9053 = elf_elfheader (ibfd)->e_ident[EI_CLASS];
9055 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
9056 && bfd_get_arch_info (obfd)->the_default)
9058 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
9059 bfd_get_mach (ibfd)))
9066 /* Check flag compatibility. */
9068 new_flags &= ~EF_MIPS_NOREORDER;
9069 old_flags &= ~EF_MIPS_NOREORDER;
9071 /* Some IRIX 6 BSD-compatibility objects have this bit set. It
9072 doesn't seem to matter. */
9073 new_flags &= ~EF_MIPS_XGOT;
9074 old_flags &= ~EF_MIPS_XGOT;
9076 if (new_flags == old_flags)
9079 /* Check to see if the input BFD actually contains any sections.
9080 If not, its flags may not have been initialised either, but it cannot
9081 actually cause any incompatibility. */
9082 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
9084 /* Ignore synthetic sections and empty .text, .data and .bss sections
9085 which are automatically generated by gas. */
9086 if (strcmp (sec->name, ".reginfo")
9087 && strcmp (sec->name, ".mdebug")
9088 && ((!strcmp (sec->name, ".text")
9089 || !strcmp (sec->name, ".data")
9090 || !strcmp (sec->name, ".bss"))
9091 && sec->_raw_size != 0))
9093 null_input_bfd = FALSE;
9102 if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
9103 != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
9105 (*_bfd_error_handler)
9106 (_("%s: warning: linking PIC files with non-PIC files"),
9107 bfd_archive_filename (ibfd));
9111 if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
9112 elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
9113 if (! (new_flags & EF_MIPS_PIC))
9114 elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
9116 new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
9117 old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
9119 /* Compare the ISAs. */
9120 if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
9122 (*_bfd_error_handler)
9123 (_("%s: linking 32-bit code with 64-bit code"),
9124 bfd_archive_filename (ibfd));
9127 else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
9129 /* OBFD's ISA isn't the same as, or an extension of, IBFD's. */
9130 if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
9132 /* Copy the architecture info from IBFD to OBFD. Also copy
9133 the 32-bit flag (if set) so that we continue to recognise
9134 OBFD as a 32-bit binary. */
9135 bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
9136 elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
9137 elf_elfheader (obfd)->e_flags
9138 |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
9140 /* Copy across the ABI flags if OBFD doesn't use them
9141 and if that was what caused us to treat IBFD as 32-bit. */
9142 if ((old_flags & EF_MIPS_ABI) == 0
9143 && mips_32bit_flags_p (new_flags)
9144 && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
9145 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
9149 /* The ISAs aren't compatible. */
9150 (*_bfd_error_handler)
9151 (_("%s: linking %s module with previous %s modules"),
9152 bfd_archive_filename (ibfd),
9153 bfd_printable_name (ibfd),
9154 bfd_printable_name (obfd));
9159 new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
9160 old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
9162 /* Compare ABIs. The 64-bit ABI does not use EF_MIPS_ABI. But, it
9163 does set EI_CLASS differently from any 32-bit ABI. */
9164 if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
9165 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
9166 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
9168 /* Only error if both are set (to different values). */
9169 if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
9170 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
9171 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
9173 (*_bfd_error_handler)
9174 (_("%s: ABI mismatch: linking %s module with previous %s modules"),
9175 bfd_archive_filename (ibfd),
9176 elf_mips_abi_name (ibfd),
9177 elf_mips_abi_name (obfd));
9180 new_flags &= ~EF_MIPS_ABI;
9181 old_flags &= ~EF_MIPS_ABI;
9184 /* For now, allow arbitrary mixing of ASEs (retain the union). */
9185 if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
9187 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
9189 new_flags &= ~ EF_MIPS_ARCH_ASE;
9190 old_flags &= ~ EF_MIPS_ARCH_ASE;
9193 /* Warn about any other mismatches */
9194 if (new_flags != old_flags)
9196 (*_bfd_error_handler)
9197 (_("%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
9198 bfd_archive_filename (ibfd), (unsigned long) new_flags,
9199 (unsigned long) old_flags);
9205 bfd_set_error (bfd_error_bad_value);
9212 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */
9215 _bfd_mips_elf_set_private_flags (abfd, flags)
9219 BFD_ASSERT (!elf_flags_init (abfd)
9220 || elf_elfheader (abfd)->e_flags == flags);
9222 elf_elfheader (abfd)->e_flags = flags;
9223 elf_flags_init (abfd) = TRUE;
9228 _bfd_mips_elf_print_private_bfd_data (abfd, ptr)
9232 FILE *file = (FILE *) ptr;
9234 BFD_ASSERT (abfd != NULL && ptr != NULL);
9236 /* Print normal ELF private data. */
9237 _bfd_elf_print_private_bfd_data (abfd, ptr);
9239 /* xgettext:c-format */
9240 fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
9242 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
9243 fprintf (file, _(" [abi=O32]"));
9244 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
9245 fprintf (file, _(" [abi=O64]"));
9246 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
9247 fprintf (file, _(" [abi=EABI32]"));
9248 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
9249 fprintf (file, _(" [abi=EABI64]"));
9250 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
9251 fprintf (file, _(" [abi unknown]"));
9252 else if (ABI_N32_P (abfd))
9253 fprintf (file, _(" [abi=N32]"));
9254 else if (ABI_64_P (abfd))
9255 fprintf (file, _(" [abi=64]"));
9257 fprintf (file, _(" [no abi set]"));
9259 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
9260 fprintf (file, _(" [mips1]"));
9261 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
9262 fprintf (file, _(" [mips2]"));
9263 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
9264 fprintf (file, _(" [mips3]"));
9265 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
9266 fprintf (file, _(" [mips4]"));
9267 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
9268 fprintf (file, _(" [mips5]"));
9269 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
9270 fprintf (file, _(" [mips32]"));
9271 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
9272 fprintf (file, _(" [mips64]"));
9273 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
9274 fprintf (file, _(" [mips32r2]"));
9276 fprintf (file, _(" [unknown ISA]"));
9278 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
9279 fprintf (file, _(" [mdmx]"));
9281 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
9282 fprintf (file, _(" [mips16]"));
9284 if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
9285 fprintf (file, _(" [32bitmode]"));
9287 fprintf (file, _(" [not 32bitmode]"));
9294 struct bfd_elf_special_section const _bfd_mips_elf_special_sections[]=
9296 { ".sdata", 0, NULL, 0,
9297 SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
9298 { ".sbss", 0, NULL, 0,
9299 SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
9300 { ".lit4", 0, NULL, 0,
9301 SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
9302 { ".lit8", 0, NULL, 0,
9303 SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
9304 { ".ucode", 0, NULL, 0,
9305 SHT_MIPS_UCODE, 0 },
9306 { ".mdebug", 0, NULL, 0,
9307 SHT_MIPS_DEBUG, 0 },