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 /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ? */
3013 /* For global symbols we look up the symbol in the hash-table. */
3014 h
= ((struct mips_elf_link_hash_entry
*)
3015 elf_sym_hashes (input_bfd
) [r_symndx
- extsymoff
]);
3016 /* Find the real hash-table entry for this symbol. */
3017 while (h
->root
.root
.type
== bfd_link_hash_indirect
3018 || h
->root
.root
.type
== bfd_link_hash_warning
)
3019 h
= (struct mips_elf_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
3021 /* Record the name of this symbol, for our caller. */
3022 *namep
= h
->root
.root
.root
.string
;
3024 /* See if this is the special _gp_disp symbol. Note that such a
3025 symbol must always be a global symbol. */
3026 if (strcmp (*namep
, "_gp_disp") == 0
3027 && ! NEWABI_P (input_bfd
))
3029 /* Relocations against _gp_disp are permitted only with
3030 R_MIPS_HI16 and R_MIPS_LO16 relocations. */
3031 if (r_type
!= R_MIPS_HI16
&& r_type
!= R_MIPS_LO16
)
3032 return bfd_reloc_notsupported
;
3036 /* If this symbol is defined, calculate its address. Note that
3037 _gp_disp is a magic symbol, always implicitly defined by the
3038 linker, so it's inappropriate to check to see whether or not
3040 else if ((h
->root
.root
.type
== bfd_link_hash_defined
3041 || h
->root
.root
.type
== bfd_link_hash_defweak
)
3042 && h
->root
.root
.u
.def
.section
)
3044 sec
= h
->root
.root
.u
.def
.section
;
3045 if (sec
->output_section
)
3046 symbol
= (h
->root
.root
.u
.def
.value
3047 + sec
->output_section
->vma
3048 + sec
->output_offset
);
3050 symbol
= h
->root
.root
.u
.def
.value
;
3052 else if (h
->root
.root
.type
== bfd_link_hash_undefweak
)
3053 /* We allow relocations against undefined weak symbols, giving
3054 it the value zero, so that you can undefined weak functions
3055 and check to see if they exist by looking at their
3058 else if (info
->shared
3059 && info
->unresolved_syms_in_objects
== RM_IGNORE
3060 && ELF_ST_VISIBILITY (h
->root
.other
) == STV_DEFAULT
)
3062 else if (strcmp (*namep
, "_DYNAMIC_LINK") == 0 ||
3063 strcmp (*namep
, "_DYNAMIC_LINKING") == 0)
3065 /* If this is a dynamic link, we should have created a
3066 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
3067 in in _bfd_mips_elf_create_dynamic_sections.
3068 Otherwise, we should define the symbol with a value of 0.
3069 FIXME: It should probably get into the symbol table
3071 BFD_ASSERT (! info
->shared
);
3072 BFD_ASSERT (bfd_get_section_by_name (abfd
, ".dynamic") == NULL
);
3077 if (! ((*info
->callbacks
->undefined_symbol
)
3078 (info
, h
->root
.root
.root
.string
, input_bfd
,
3079 input_section
, relocation
->r_offset
,
3080 ((info
->shared
&& info
->unresolved_syms_in_shared_libs
== RM_GENERATE_ERROR
)
3081 || (!info
->shared
&& info
->unresolved_syms_in_objects
== RM_GENERATE_ERROR
)
3082 || ELF_ST_VISIBILITY (h
->root
.other
)))))
3083 return bfd_reloc_undefined
;
3087 target_is_16_bit_code_p
= (h
->root
.other
== STO_MIPS16
);
3090 /* If this is a 32- or 64-bit call to a 16-bit function with a stub, we
3091 need to redirect the call to the stub, unless we're already *in*
3093 if (r_type
!= R_MIPS16_26
&& !info
->relocatable
3094 && ((h
!= NULL
&& h
->fn_stub
!= NULL
)
3095 || (local_p
&& elf_tdata (input_bfd
)->local_stubs
!= NULL
3096 && elf_tdata (input_bfd
)->local_stubs
[r_symndx
] != NULL
))
3097 && !mips_elf_stub_section_p (input_bfd
, input_section
))
3099 /* This is a 32- or 64-bit call to a 16-bit function. We should
3100 have already noticed that we were going to need the
3103 sec
= elf_tdata (input_bfd
)->local_stubs
[r_symndx
];
3106 BFD_ASSERT (h
->need_fn_stub
);
3110 symbol
= sec
->output_section
->vma
+ sec
->output_offset
;
3112 /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
3113 need to redirect the call to the stub. */
3114 else if (r_type
== R_MIPS16_26
&& !info
->relocatable
3116 && (h
->call_stub
!= NULL
|| h
->call_fp_stub
!= NULL
)
3117 && !target_is_16_bit_code_p
)
3119 /* If both call_stub and call_fp_stub are defined, we can figure
3120 out which one to use by seeing which one appears in the input
3122 if (h
->call_stub
!= NULL
&& h
->call_fp_stub
!= NULL
)
3127 for (o
= input_bfd
->sections
; o
!= NULL
; o
= o
->next
)
3129 if (strncmp (bfd_get_section_name (input_bfd
, o
),
3130 CALL_FP_STUB
, sizeof CALL_FP_STUB
- 1) == 0)
3132 sec
= h
->call_fp_stub
;
3139 else if (h
->call_stub
!= NULL
)
3142 sec
= h
->call_fp_stub
;
3144 BFD_ASSERT (sec
->_raw_size
> 0);
3145 symbol
= sec
->output_section
->vma
+ sec
->output_offset
;
3148 /* Calls from 16-bit code to 32-bit code and vice versa require the
3149 special jalx instruction. */
3150 *require_jalxp
= (!info
->relocatable
3151 && (((r_type
== R_MIPS16_26
) && !target_is_16_bit_code_p
)
3152 || ((r_type
== R_MIPS_26
) && target_is_16_bit_code_p
)));
3154 local_p
= mips_elf_local_relocation_p (input_bfd
, relocation
,
3155 local_sections
, TRUE
);
3157 /* If we haven't already determined the GOT offset, or the GP value,
3158 and we're going to need it, get it now. */
3161 case R_MIPS_GOT_PAGE
:
3162 case R_MIPS_GOT_OFST
:
3163 /* If this symbol got a global GOT entry, we have to decay
3164 GOT_PAGE/GOT_OFST to GOT_DISP/addend. */
3165 local_p
= local_p
|| ! h
3167 < mips_elf_get_global_gotsym_index (elf_hash_table (info
)
3169 if (local_p
|| r_type
== R_MIPS_GOT_OFST
)
3175 case R_MIPS_GOT_DISP
:
3176 case R_MIPS_GOT_HI16
:
3177 case R_MIPS_CALL_HI16
:
3178 case R_MIPS_GOT_LO16
:
3179 case R_MIPS_CALL_LO16
:
3180 /* Find the index into the GOT where this value is located. */
3183 /* GOT_PAGE may take a non-zero addend, that is ignored in a
3184 GOT_PAGE relocation that decays to GOT_DISP because the
3185 symbol turns out to be global. The addend is then added
3187 BFD_ASSERT (addend
== 0 || r_type
== R_MIPS_GOT_PAGE
);
3188 g
= mips_elf_global_got_index (elf_hash_table (info
)->dynobj
,
3190 (struct elf_link_hash_entry
*) h
);
3191 if (! elf_hash_table(info
)->dynamic_sections_created
3193 && (info
->symbolic
|| h
->root
.dynindx
== -1)
3194 && (h
->root
.elf_link_hash_flags
& ELF_LINK_HASH_DEF_REGULAR
)))
3196 /* This is a static link or a -Bsymbolic link. The
3197 symbol is defined locally, or was forced to be local.
3198 We must initialize this entry in the GOT. */
3199 bfd
*tmpbfd
= elf_hash_table (info
)->dynobj
;
3200 asection
*sgot
= mips_elf_got_section (tmpbfd
, FALSE
);
3201 MIPS_ELF_PUT_WORD (tmpbfd
, symbol
, sgot
->contents
+ g
);
3204 else if (r_type
== R_MIPS_GOT16
|| r_type
== R_MIPS_CALL16
)
3205 /* There's no need to create a local GOT entry here; the
3206 calculation for a local GOT16 entry does not involve G. */
3210 g
= mips_elf_local_got_index (abfd
, input_bfd
,
3211 info
, symbol
+ addend
);
3213 return bfd_reloc_outofrange
;
3216 /* Convert GOT indices to actual offsets. */
3217 g
= mips_elf_got_offset_from_index (elf_hash_table (info
)->dynobj
,
3218 abfd
, input_bfd
, g
);
3223 case R_MIPS16_GPREL
:
3224 case R_MIPS_GPREL16
:
3225 case R_MIPS_GPREL32
:
3226 case R_MIPS_LITERAL
:
3227 gp0
= _bfd_get_gp_value (input_bfd
);
3228 gp
= _bfd_get_gp_value (abfd
);
3229 if (elf_hash_table (info
)->dynobj
)
3230 gp
+= mips_elf_adjust_gp (abfd
,
3232 (elf_hash_table (info
)->dynobj
, NULL
),
3240 /* Figure out what kind of relocation is being performed. */
3244 return bfd_reloc_continue
;
3247 value
= symbol
+ _bfd_mips_elf_sign_extend (addend
, 16);
3248 overflowed_p
= mips_elf_overflow_p (value
, 16);
3255 || (elf_hash_table (info
)->dynamic_sections_created
3257 && ((h
->root
.elf_link_hash_flags
3258 & ELF_LINK_HASH_DEF_DYNAMIC
) != 0)
3259 && ((h
->root
.elf_link_hash_flags
3260 & ELF_LINK_HASH_DEF_REGULAR
) == 0)))
3262 && (input_section
->flags
& SEC_ALLOC
) != 0)
3264 /* If we're creating a shared library, or this relocation is
3265 against a symbol in a shared library, then we can't know
3266 where the symbol will end up. So, we create a relocation
3267 record in the output, and leave the job up to the dynamic
3270 if (!mips_elf_create_dynamic_relocation (abfd
,
3278 return bfd_reloc_undefined
;
3282 if (r_type
!= R_MIPS_REL32
)
3283 value
= symbol
+ addend
;
3287 value
&= howto
->dst_mask
;
3292 case R_MIPS_GNU_REL_LO16
:
3293 value
= symbol
+ addend
- p
;
3294 value
&= howto
->dst_mask
;
3297 case R_MIPS_GNU_REL16_S2
:
3298 value
= symbol
+ _bfd_mips_elf_sign_extend (addend
<< 2, 18) - p
;
3299 overflowed_p
= mips_elf_overflow_p (value
, 18);
3300 value
= (value
>> 2) & howto
->dst_mask
;
3303 case R_MIPS_GNU_REL_HI16
:
3304 /* Instead of subtracting 'p' here, we should be subtracting the
3305 equivalent value for the LO part of the reloc, since the value
3306 here is relative to that address. Because that's not easy to do,
3307 we adjust 'addend' in _bfd_mips_elf_relocate_section(). See also
3308 the comment there for more information. */
3309 value
= mips_elf_high (addend
+ symbol
- p
);
3310 value
&= howto
->dst_mask
;
3314 /* The calculation for R_MIPS16_26 is just the same as for an
3315 R_MIPS_26. It's only the storage of the relocated field into
3316 the output file that's different. That's handled in
3317 mips_elf_perform_relocation. So, we just fall through to the
3318 R_MIPS_26 case here. */
3321 value
= (((addend
<< 2) | ((p
+ 4) & 0xf0000000)) + symbol
) >> 2;
3323 value
= (_bfd_mips_elf_sign_extend (addend
<< 2, 28) + symbol
) >> 2;
3324 value
&= howto
->dst_mask
;
3330 value
= mips_elf_high (addend
+ symbol
);
3331 value
&= howto
->dst_mask
;
3335 value
= mips_elf_high (addend
+ gp
- p
);
3336 overflowed_p
= mips_elf_overflow_p (value
, 16);
3342 value
= (symbol
+ addend
) & howto
->dst_mask
;
3345 value
= addend
+ gp
- p
+ 4;
3346 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
3347 for overflow. But, on, say, IRIX5, relocations against
3348 _gp_disp are normally generated from the .cpload
3349 pseudo-op. It generates code that normally looks like
3352 lui $gp,%hi(_gp_disp)
3353 addiu $gp,$gp,%lo(_gp_disp)
3356 Here $t9 holds the address of the function being called,
3357 as required by the MIPS ELF ABI. The R_MIPS_LO16
3358 relocation can easily overflow in this situation, but the
3359 R_MIPS_HI16 relocation will handle the overflow.
3360 Therefore, we consider this a bug in the MIPS ABI, and do
3361 not check for overflow here. */
3365 case R_MIPS_LITERAL
:
3366 /* Because we don't merge literal sections, we can handle this
3367 just like R_MIPS_GPREL16. In the long run, we should merge
3368 shared literals, and then we will need to additional work
3373 case R_MIPS16_GPREL
:
3374 /* The R_MIPS16_GPREL performs the same calculation as
3375 R_MIPS_GPREL16, but stores the relocated bits in a different
3376 order. We don't need to do anything special here; the
3377 differences are handled in mips_elf_perform_relocation. */
3378 case R_MIPS_GPREL16
:
3379 /* Only sign-extend the addend if it was extracted from the
3380 instruction. If the addend was separate, leave it alone,
3381 otherwise we may lose significant bits. */
3382 if (howto
->partial_inplace
)
3383 addend
= _bfd_mips_elf_sign_extend (addend
, 16);
3384 value
= symbol
+ addend
- gp
;
3385 /* If the symbol was local, any earlier relocatable links will
3386 have adjusted its addend with the gp offset, so compensate
3387 for that now. Don't do it for symbols forced local in this
3388 link, though, since they won't have had the gp offset applied
3392 overflowed_p
= mips_elf_overflow_p (value
, 16);
3401 /* The special case is when the symbol is forced to be local. We
3402 need the full address in the GOT since no R_MIPS_LO16 relocation
3404 forced
= ! mips_elf_local_relocation_p (input_bfd
, relocation
,
3405 local_sections
, FALSE
);
3406 value
= mips_elf_got16_entry (abfd
, input_bfd
, info
,
3407 symbol
+ addend
, forced
);
3408 if (value
== MINUS_ONE
)
3409 return bfd_reloc_outofrange
;
3411 = mips_elf_got_offset_from_index (elf_hash_table (info
)->dynobj
,
3412 abfd
, input_bfd
, value
);
3413 overflowed_p
= mips_elf_overflow_p (value
, 16);
3419 case R_MIPS_GOT_DISP
:
3422 overflowed_p
= mips_elf_overflow_p (value
, 16);
3425 case R_MIPS_GPREL32
:
3426 value
= (addend
+ symbol
+ gp0
- gp
);
3428 value
&= howto
->dst_mask
;
3432 value
= _bfd_mips_elf_sign_extend (addend
, 16) + symbol
- p
;
3433 overflowed_p
= mips_elf_overflow_p (value
, 16);
3436 case R_MIPS_GOT_HI16
:
3437 case R_MIPS_CALL_HI16
:
3438 /* We're allowed to handle these two relocations identically.
3439 The dynamic linker is allowed to handle the CALL relocations
3440 differently by creating a lazy evaluation stub. */
3442 value
= mips_elf_high (value
);
3443 value
&= howto
->dst_mask
;
3446 case R_MIPS_GOT_LO16
:
3447 case R_MIPS_CALL_LO16
:
3448 value
= g
& howto
->dst_mask
;
3451 case R_MIPS_GOT_PAGE
:
3452 /* GOT_PAGE relocations that reference non-local symbols decay
3453 to GOT_DISP. The corresponding GOT_OFST relocation decays to
3457 value
= mips_elf_got_page (abfd
, input_bfd
, info
, symbol
+ addend
, NULL
);
3458 if (value
== MINUS_ONE
)
3459 return bfd_reloc_outofrange
;
3460 value
= mips_elf_got_offset_from_index (elf_hash_table (info
)->dynobj
,
3461 abfd
, input_bfd
, value
);
3462 overflowed_p
= mips_elf_overflow_p (value
, 16);
3465 case R_MIPS_GOT_OFST
:
3467 mips_elf_got_page (abfd
, input_bfd
, info
, symbol
+ addend
, &value
);
3470 overflowed_p
= mips_elf_overflow_p (value
, 16);
3474 value
= symbol
- addend
;
3475 value
&= howto
->dst_mask
;
3479 value
= mips_elf_higher (addend
+ symbol
);
3480 value
&= howto
->dst_mask
;
3483 case R_MIPS_HIGHEST
:
3484 value
= mips_elf_highest (addend
+ symbol
);
3485 value
&= howto
->dst_mask
;
3488 case R_MIPS_SCN_DISP
:
3489 value
= symbol
+ addend
- sec
->output_offset
;
3490 value
&= howto
->dst_mask
;
3495 /* Both of these may be ignored. R_MIPS_JALR is an optimization
3496 hint; we could improve performance by honoring that hint. */
3497 return bfd_reloc_continue
;
3499 case R_MIPS_GNU_VTINHERIT
:
3500 case R_MIPS_GNU_VTENTRY
:
3501 /* We don't do anything with these at present. */
3502 return bfd_reloc_continue
;
3505 /* An unrecognized relocation type. */
3506 return bfd_reloc_notsupported
;
3509 /* Store the VALUE for our caller. */
3511 return overflowed_p
? bfd_reloc_overflow
: bfd_reloc_ok
;
3514 /* Obtain the field relocated by RELOCATION. */
3517 mips_elf_obtain_contents (howto
, relocation
, input_bfd
, contents
)
3518 reloc_howto_type
*howto
;
3519 const Elf_Internal_Rela
*relocation
;
3524 bfd_byte
*location
= contents
+ relocation
->r_offset
;
3526 /* Obtain the bytes. */
3527 x
= bfd_get ((8 * bfd_get_reloc_size (howto
)), input_bfd
, location
);
3529 if ((ELF_R_TYPE (input_bfd
, relocation
->r_info
) == R_MIPS16_26
3530 || ELF_R_TYPE (input_bfd
, relocation
->r_info
) == R_MIPS16_GPREL
)
3531 && bfd_little_endian (input_bfd
))
3532 /* The two 16-bit words will be reversed on a little-endian system.
3533 See mips_elf_perform_relocation for more details. */
3534 x
= (((x
& 0xffff) << 16) | ((x
& 0xffff0000) >> 16));
3539 /* It has been determined that the result of the RELOCATION is the
3540 VALUE. Use HOWTO to place VALUE into the output file at the
3541 appropriate position. The SECTION is the section to which the
3542 relocation applies. If REQUIRE_JALX is TRUE, then the opcode used
3543 for the relocation must be either JAL or JALX, and it is
3544 unconditionally converted to JALX.
3546 Returns FALSE if anything goes wrong. */
3549 mips_elf_perform_relocation (info
, howto
, relocation
, value
, input_bfd
,
3550 input_section
, contents
, require_jalx
)
3551 struct bfd_link_info
*info
;
3552 reloc_howto_type
*howto
;
3553 const Elf_Internal_Rela
*relocation
;
3556 asection
*input_section
;
3558 bfd_boolean require_jalx
;
3562 int r_type
= ELF_R_TYPE (input_bfd
, relocation
->r_info
);
3564 /* Figure out where the relocation is occurring. */
3565 location
= contents
+ relocation
->r_offset
;
3567 /* Obtain the current value. */
3568 x
= mips_elf_obtain_contents (howto
, relocation
, input_bfd
, contents
);
3570 /* Clear the field we are setting. */
3571 x
&= ~howto
->dst_mask
;
3573 /* If this is the R_MIPS16_26 relocation, we must store the
3574 value in a funny way. */
3575 if (r_type
== R_MIPS16_26
)
3577 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
3578 Most mips16 instructions are 16 bits, but these instructions
3581 The format of these instructions is:
3583 +--------------+--------------------------------+
3584 ! JALX ! X! Imm 20:16 ! Imm 25:21 !
3585 +--------------+--------------------------------+
3587 +-----------------------------------------------+
3589 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx.
3590 Note that the immediate value in the first word is swapped.
3592 When producing a relocatable object file, R_MIPS16_26 is
3593 handled mostly like R_MIPS_26. In particular, the addend is
3594 stored as a straight 26-bit value in a 32-bit instruction.
3595 (gas makes life simpler for itself by never adjusting a
3596 R_MIPS16_26 reloc to be against a section, so the addend is
3597 always zero). However, the 32 bit instruction is stored as 2
3598 16-bit values, rather than a single 32-bit value. In a
3599 big-endian file, the result is the same; in a little-endian
3600 file, the two 16-bit halves of the 32 bit value are swapped.
3601 This is so that a disassembler can recognize the jal
3604 When doing a final link, R_MIPS16_26 is treated as a 32 bit
3605 instruction stored as two 16-bit values. The addend A is the
3606 contents of the targ26 field. The calculation is the same as
3607 R_MIPS_26. When storing the calculated value, reorder the
3608 immediate value as shown above, and don't forget to store the
3609 value as two 16-bit values.
3611 To put it in MIPS ABI terms, the relocation field is T-targ26-16,
3615 +--------+----------------------+
3619 +--------+----------------------+
3622 +----------+------+-------------+
3626 +----------+--------------------+
3627 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
3628 ((sub1 << 16) | sub2)).
3630 When producing a relocatable object file, the calculation is
3631 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
3632 When producing a fully linked file, the calculation is
3633 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
3634 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff) */
3636 if (!info
->relocatable
)
3637 /* Shuffle the bits according to the formula above. */
3638 value
= (((value
& 0x1f0000) << 5)
3639 | ((value
& 0x3e00000) >> 5)
3640 | (value
& 0xffff));
3642 else if (r_type
== R_MIPS16_GPREL
)
3644 /* R_MIPS16_GPREL is used for GP-relative addressing in mips16
3645 mode. A typical instruction will have a format like this:
3647 +--------------+--------------------------------+
3648 ! EXTEND ! Imm 10:5 ! Imm 15:11 !
3649 +--------------+--------------------------------+
3650 ! Major ! rx ! ry ! Imm 4:0 !
3651 +--------------+--------------------------------+
3653 EXTEND is the five bit value 11110. Major is the instruction
3656 This is handled exactly like R_MIPS_GPREL16, except that the
3657 addend is retrieved and stored as shown in this diagram; that
3658 is, the Imm fields above replace the V-rel16 field.
3660 All we need to do here is shuffle the bits appropriately. As
3661 above, the two 16-bit halves must be swapped on a
3662 little-endian system. */
3663 value
= (((value
& 0x7e0) << 16)
3664 | ((value
& 0xf800) << 5)
3668 /* Set the field. */
3669 x
|= (value
& howto
->dst_mask
);
3671 /* If required, turn JAL into JALX. */
3675 bfd_vma opcode
= x
>> 26;
3676 bfd_vma jalx_opcode
;
3678 /* Check to see if the opcode is already JAL or JALX. */
3679 if (r_type
== R_MIPS16_26
)
3681 ok
= ((opcode
== 0x6) || (opcode
== 0x7));
3686 ok
= ((opcode
== 0x3) || (opcode
== 0x1d));
3690 /* If the opcode is not JAL or JALX, there's a problem. */
3693 (*_bfd_error_handler
)
3694 (_("%s: %s+0x%lx: jump to stub routine which is not jal"),
3695 bfd_archive_filename (input_bfd
),
3696 input_section
->name
,
3697 (unsigned long) relocation
->r_offset
);
3698 bfd_set_error (bfd_error_bad_value
);
3702 /* Make this the JALX opcode. */
3703 x
= (x
& ~(0x3f << 26)) | (jalx_opcode
<< 26);
3706 /* Swap the high- and low-order 16 bits on little-endian systems
3707 when doing a MIPS16 relocation. */
3708 if ((r_type
== R_MIPS16_GPREL
|| r_type
== R_MIPS16_26
)
3709 && bfd_little_endian (input_bfd
))
3710 x
= (((x
& 0xffff) << 16) | ((x
& 0xffff0000) >> 16));
3712 /* Put the value into the output. */
3713 bfd_put (8 * bfd_get_reloc_size (howto
), input_bfd
, x
, location
);
3717 /* Returns TRUE if SECTION is a MIPS16 stub section. */
3720 mips_elf_stub_section_p (abfd
, section
)
3721 bfd
*abfd ATTRIBUTE_UNUSED
;
3724 const char *name
= bfd_get_section_name (abfd
, section
);
3726 return (strncmp (name
, FN_STUB
, sizeof FN_STUB
- 1) == 0
3727 || strncmp (name
, CALL_STUB
, sizeof CALL_STUB
- 1) == 0
3728 || strncmp (name
, CALL_FP_STUB
, sizeof CALL_FP_STUB
- 1) == 0);
3731 /* Add room for N relocations to the .rel.dyn section in ABFD. */
3734 mips_elf_allocate_dynamic_relocations (abfd
, n
)
3740 s
= mips_elf_rel_dyn_section (abfd
, FALSE
);
3741 BFD_ASSERT (s
!= NULL
);
3743 if (s
->_raw_size
== 0)
3745 /* Make room for a null element. */
3746 s
->_raw_size
+= MIPS_ELF_REL_SIZE (abfd
);
3749 s
->_raw_size
+= n
* MIPS_ELF_REL_SIZE (abfd
);
3752 /* Create a rel.dyn relocation for the dynamic linker to resolve. REL
3753 is the original relocation, which is now being transformed into a
3754 dynamic relocation. The ADDENDP is adjusted if necessary; the
3755 caller should store the result in place of the original addend. */
3758 mips_elf_create_dynamic_relocation (output_bfd
, info
, rel
, h
, sec
,
3759 symbol
, addendp
, input_section
)
3761 struct bfd_link_info
*info
;
3762 const Elf_Internal_Rela
*rel
;
3763 struct mips_elf_link_hash_entry
*h
;
3767 asection
*input_section
;
3769 Elf_Internal_Rela outrel
[3];
3775 r_type
= ELF_R_TYPE (output_bfd
, rel
->r_info
);
3776 dynobj
= elf_hash_table (info
)->dynobj
;
3777 sreloc
= mips_elf_rel_dyn_section (dynobj
, FALSE
);
3778 BFD_ASSERT (sreloc
!= NULL
);
3779 BFD_ASSERT (sreloc
->contents
!= NULL
);
3780 BFD_ASSERT (sreloc
->reloc_count
* MIPS_ELF_REL_SIZE (output_bfd
)
3781 < sreloc
->_raw_size
);
3784 outrel
[0].r_offset
=
3785 _bfd_elf_section_offset (output_bfd
, info
, input_section
, rel
[0].r_offset
);
3786 outrel
[1].r_offset
=
3787 _bfd_elf_section_offset (output_bfd
, info
, input_section
, rel
[1].r_offset
);
3788 outrel
[2].r_offset
=
3789 _bfd_elf_section_offset (output_bfd
, info
, input_section
, rel
[2].r_offset
);
3792 /* We begin by assuming that the offset for the dynamic relocation
3793 is the same as for the original relocation. We'll adjust this
3794 later to reflect the correct output offsets. */
3795 if (input_section
->sec_info_type
!= ELF_INFO_TYPE_STABS
)
3797 outrel
[1].r_offset
= rel
[1].r_offset
;
3798 outrel
[2].r_offset
= rel
[2].r_offset
;
3802 /* Except that in a stab section things are more complex.
3803 Because we compress stab information, the offset given in the
3804 relocation may not be the one we want; we must let the stabs
3805 machinery tell us the offset. */
3806 outrel
[1].r_offset
= outrel
[0].r_offset
;
3807 outrel
[2].r_offset
= outrel
[0].r_offset
;
3808 /* If we didn't need the relocation at all, this value will be
3810 if (outrel
[0].r_offset
== (bfd_vma
) -1)
3815 if (outrel
[0].r_offset
== (bfd_vma
) -1)
3816 /* The relocation field has been deleted. */
3818 else if (outrel
[0].r_offset
== (bfd_vma
) -2)
3820 /* The relocation field has been converted into a relative value of
3821 some sort. Functions like _bfd_elf_write_section_eh_frame expect
3822 the field to be fully relocated, so add in the symbol's value. */
3827 /* If we've decided to skip this relocation, just output an empty
3828 record. Note that R_MIPS_NONE == 0, so that this call to memset
3829 is a way of setting R_TYPE to R_MIPS_NONE. */
3831 memset (outrel
, 0, sizeof (Elf_Internal_Rela
) * 3);
3835 bfd_boolean defined_p
;
3837 /* We must now calculate the dynamic symbol table index to use
3838 in the relocation. */
3840 && (! info
->symbolic
|| (h
->root
.elf_link_hash_flags
3841 & ELF_LINK_HASH_DEF_REGULAR
) == 0)
3842 /* h->root.dynindx may be -1 if this symbol was marked to
3844 && h
->root
.dynindx
!= -1)
3846 indx
= h
->root
.dynindx
;
3847 if (SGI_COMPAT (output_bfd
))
3848 defined_p
= ((h
->root
.elf_link_hash_flags
3849 & ELF_LINK_HASH_DEF_REGULAR
) != 0);
3851 /* ??? glibc's ld.so just adds the final GOT entry to the
3852 relocation field. It therefore treats relocs against
3853 defined symbols in the same way as relocs against
3854 undefined symbols. */
3859 if (sec
!= NULL
&& bfd_is_abs_section (sec
))
3861 else if (sec
== NULL
|| sec
->owner
== NULL
)
3863 bfd_set_error (bfd_error_bad_value
);
3868 indx
= elf_section_data (sec
->output_section
)->dynindx
;
3873 /* Instead of generating a relocation using the section
3874 symbol, we may as well make it a fully relative
3875 relocation. We want to avoid generating relocations to
3876 local symbols because we used to generate them
3877 incorrectly, without adding the original symbol value,
3878 which is mandated by the ABI for section symbols. In
3879 order to give dynamic loaders and applications time to
3880 phase out the incorrect use, we refrain from emitting
3881 section-relative relocations. It's not like they're
3882 useful, after all. This should be a bit more efficient
3884 /* ??? Although this behavior is compatible with glibc's ld.so,
3885 the ABI says that relocations against STN_UNDEF should have
3886 a symbol value of 0. Irix rld honors this, so relocations
3887 against STN_UNDEF have no effect. */
3888 if (!SGI_COMPAT (output_bfd
))
3893 /* If the relocation was previously an absolute relocation and
3894 this symbol will not be referred to by the relocation, we must
3895 adjust it by the value we give it in the dynamic symbol table.
3896 Otherwise leave the job up to the dynamic linker. */
3897 if (defined_p
&& r_type
!= R_MIPS_REL32
)
3900 /* The relocation is always an REL32 relocation because we don't
3901 know where the shared library will wind up at load-time. */
3902 outrel
[0].r_info
= ELF_R_INFO (output_bfd
, (unsigned long) indx
,
3904 /* For strict adherence to the ABI specification, we should
3905 generate a R_MIPS_64 relocation record by itself before the
3906 _REL32/_64 record as well, such that the addend is read in as
3907 a 64-bit value (REL32 is a 32-bit relocation, after all).
3908 However, since none of the existing ELF64 MIPS dynamic
3909 loaders seems to care, we don't waste space with these
3910 artificial relocations. If this turns out to not be true,
3911 mips_elf_allocate_dynamic_relocation() should be tweaked so
3912 as to make room for a pair of dynamic relocations per
3913 invocation if ABI_64_P, and here we should generate an
3914 additional relocation record with R_MIPS_64 by itself for a
3915 NULL symbol before this relocation record. */
3916 outrel
[1].r_info
= ELF_R_INFO (output_bfd
, (unsigned long) 0,
3917 ABI_64_P (output_bfd
)
3920 outrel
[2].r_info
= ELF_R_INFO (output_bfd
, (unsigned long) 0,
3923 /* Adjust the output offset of the relocation to reference the
3924 correct location in the output file. */
3925 outrel
[0].r_offset
+= (input_section
->output_section
->vma
3926 + input_section
->output_offset
);
3927 outrel
[1].r_offset
+= (input_section
->output_section
->vma
3928 + input_section
->output_offset
);
3929 outrel
[2].r_offset
+= (input_section
->output_section
->vma
3930 + input_section
->output_offset
);
3933 /* Put the relocation back out. We have to use the special
3934 relocation outputter in the 64-bit case since the 64-bit
3935 relocation format is non-standard. */
3936 if (ABI_64_P (output_bfd
))
3938 (*get_elf_backend_data (output_bfd
)->s
->swap_reloc_out
)
3939 (output_bfd
, &outrel
[0],
3941 + sreloc
->reloc_count
* sizeof (Elf64_Mips_External_Rel
)));
3944 bfd_elf32_swap_reloc_out
3945 (output_bfd
, &outrel
[0],
3946 (sreloc
->contents
+ sreloc
->reloc_count
* sizeof (Elf32_External_Rel
)));
3948 /* We've now added another relocation. */
3949 ++sreloc
->reloc_count
;
3951 /* Make sure the output section is writable. The dynamic linker
3952 will be writing to it. */
3953 elf_section_data (input_section
->output_section
)->this_hdr
.sh_flags
3956 /* On IRIX5, make an entry of compact relocation info. */
3957 if (! skip
&& IRIX_COMPAT (output_bfd
) == ict_irix5
)
3959 asection
*scpt
= bfd_get_section_by_name (dynobj
, ".compact_rel");
3964 Elf32_crinfo cptrel
;
3966 mips_elf_set_cr_format (cptrel
, CRF_MIPS_LONG
);
3967 cptrel
.vaddr
= (rel
->r_offset
3968 + input_section
->output_section
->vma
3969 + input_section
->output_offset
);
3970 if (r_type
== R_MIPS_REL32
)
3971 mips_elf_set_cr_type (cptrel
, CRT_MIPS_REL32
);
3973 mips_elf_set_cr_type (cptrel
, CRT_MIPS_WORD
);
3974 mips_elf_set_cr_dist2to (cptrel
, 0);
3975 cptrel
.konst
= *addendp
;
3977 cr
= (scpt
->contents
3978 + sizeof (Elf32_External_compact_rel
));
3979 bfd_elf32_swap_crinfo_out (output_bfd
, &cptrel
,
3980 ((Elf32_External_crinfo
*) cr
3981 + scpt
->reloc_count
));
3982 ++scpt
->reloc_count
;
3989 /* Return the MACH for a MIPS e_flags value. */
3992 _bfd_elf_mips_mach (flags
)
3995 switch (flags
& EF_MIPS_MACH
)
3997 case E_MIPS_MACH_3900
:
3998 return bfd_mach_mips3900
;
4000 case E_MIPS_MACH_4010
:
4001 return bfd_mach_mips4010
;
4003 case E_MIPS_MACH_4100
:
4004 return bfd_mach_mips4100
;
4006 case E_MIPS_MACH_4111
:
4007 return bfd_mach_mips4111
;
4009 case E_MIPS_MACH_4120
:
4010 return bfd_mach_mips4120
;
4012 case E_MIPS_MACH_4650
:
4013 return bfd_mach_mips4650
;
4015 case E_MIPS_MACH_5400
:
4016 return bfd_mach_mips5400
;
4018 case E_MIPS_MACH_5500
:
4019 return bfd_mach_mips5500
;
4021 case E_MIPS_MACH_SB1
:
4022 return bfd_mach_mips_sb1
;
4025 switch (flags
& EF_MIPS_ARCH
)
4029 return bfd_mach_mips3000
;
4033 return bfd_mach_mips6000
;
4037 return bfd_mach_mips4000
;
4041 return bfd_mach_mips8000
;
4045 return bfd_mach_mips5
;
4048 case E_MIPS_ARCH_32
:
4049 return bfd_mach_mipsisa32
;
4052 case E_MIPS_ARCH_64
:
4053 return bfd_mach_mipsisa64
;
4056 case E_MIPS_ARCH_32R2
:
4057 return bfd_mach_mipsisa32r2
;
4060 case E_MIPS_ARCH_64R2
:
4061 return bfd_mach_mipsisa64r2
;
4069 /* Return printable name for ABI. */
4071 static INLINE
char *
4072 elf_mips_abi_name (abfd
)
4077 flags
= elf_elfheader (abfd
)->e_flags
;
4078 switch (flags
& EF_MIPS_ABI
)
4081 if (ABI_N32_P (abfd
))
4083 else if (ABI_64_P (abfd
))
4087 case E_MIPS_ABI_O32
:
4089 case E_MIPS_ABI_O64
:
4091 case E_MIPS_ABI_EABI32
:
4093 case E_MIPS_ABI_EABI64
:
4096 return "unknown abi";
4100 /* MIPS ELF uses two common sections. One is the usual one, and the
4101 other is for small objects. All the small objects are kept
4102 together, and then referenced via the gp pointer, which yields
4103 faster assembler code. This is what we use for the small common
4104 section. This approach is copied from ecoff.c. */
4105 static asection mips_elf_scom_section
;
4106 static asymbol mips_elf_scom_symbol
;
4107 static asymbol
*mips_elf_scom_symbol_ptr
;
4109 /* MIPS ELF also uses an acommon section, which represents an
4110 allocated common symbol which may be overridden by a
4111 definition in a shared library. */
4112 static asection mips_elf_acom_section
;
4113 static asymbol mips_elf_acom_symbol
;
4114 static asymbol
*mips_elf_acom_symbol_ptr
;
4116 /* Handle the special MIPS section numbers that a symbol may use.
4117 This is used for both the 32-bit and the 64-bit ABI. */
4120 _bfd_mips_elf_symbol_processing (abfd
, asym
)
4124 elf_symbol_type
*elfsym
;
4126 elfsym
= (elf_symbol_type
*) asym
;
4127 switch (elfsym
->internal_elf_sym
.st_shndx
)
4129 case SHN_MIPS_ACOMMON
:
4130 /* This section is used in a dynamically linked executable file.
4131 It is an allocated common section. The dynamic linker can
4132 either resolve these symbols to something in a shared
4133 library, or it can just leave them here. For our purposes,
4134 we can consider these symbols to be in a new section. */
4135 if (mips_elf_acom_section
.name
== NULL
)
4137 /* Initialize the acommon section. */
4138 mips_elf_acom_section
.name
= ".acommon";
4139 mips_elf_acom_section
.flags
= SEC_ALLOC
;
4140 mips_elf_acom_section
.output_section
= &mips_elf_acom_section
;
4141 mips_elf_acom_section
.symbol
= &mips_elf_acom_symbol
;
4142 mips_elf_acom_section
.symbol_ptr_ptr
= &mips_elf_acom_symbol_ptr
;
4143 mips_elf_acom_symbol
.name
= ".acommon";
4144 mips_elf_acom_symbol
.flags
= BSF_SECTION_SYM
;
4145 mips_elf_acom_symbol
.section
= &mips_elf_acom_section
;
4146 mips_elf_acom_symbol_ptr
= &mips_elf_acom_symbol
;
4148 asym
->section
= &mips_elf_acom_section
;
4152 /* Common symbols less than the GP size are automatically
4153 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */
4154 if (asym
->value
> elf_gp_size (abfd
)
4155 || IRIX_COMPAT (abfd
) == ict_irix6
)
4158 case SHN_MIPS_SCOMMON
:
4159 if (mips_elf_scom_section
.name
== NULL
)
4161 /* Initialize the small common section. */
4162 mips_elf_scom_section
.name
= ".scommon";
4163 mips_elf_scom_section
.flags
= SEC_IS_COMMON
;
4164 mips_elf_scom_section
.output_section
= &mips_elf_scom_section
;
4165 mips_elf_scom_section
.symbol
= &mips_elf_scom_symbol
;
4166 mips_elf_scom_section
.symbol_ptr_ptr
= &mips_elf_scom_symbol_ptr
;
4167 mips_elf_scom_symbol
.name
= ".scommon";
4168 mips_elf_scom_symbol
.flags
= BSF_SECTION_SYM
;
4169 mips_elf_scom_symbol
.section
= &mips_elf_scom_section
;
4170 mips_elf_scom_symbol_ptr
= &mips_elf_scom_symbol
;
4172 asym
->section
= &mips_elf_scom_section
;
4173 asym
->value
= elfsym
->internal_elf_sym
.st_size
;
4176 case SHN_MIPS_SUNDEFINED
:
4177 asym
->section
= bfd_und_section_ptr
;
4180 #if 0 /* for SGI_COMPAT */
4182 asym
->section
= mips_elf_text_section_ptr
;
4186 asym
->section
= mips_elf_data_section_ptr
;
4192 /* Work over a section just before writing it out. This routine is
4193 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize
4194 sections that need the SHF_MIPS_GPREL flag by name; there has to be
4198 _bfd_mips_elf_section_processing (abfd
, hdr
)
4200 Elf_Internal_Shdr
*hdr
;
4202 if (hdr
->sh_type
== SHT_MIPS_REGINFO
4203 && hdr
->sh_size
> 0)
4207 BFD_ASSERT (hdr
->sh_size
== sizeof (Elf32_External_RegInfo
));
4208 BFD_ASSERT (hdr
->contents
== NULL
);
4211 hdr
->sh_offset
+ sizeof (Elf32_External_RegInfo
) - 4,
4214 H_PUT_32 (abfd
, elf_gp (abfd
), buf
);
4215 if (bfd_bwrite (buf
, (bfd_size_type
) 4, abfd
) != 4)
4219 if (hdr
->sh_type
== SHT_MIPS_OPTIONS
4220 && hdr
->bfd_section
!= NULL
4221 && mips_elf_section_data (hdr
->bfd_section
) != NULL
4222 && mips_elf_section_data (hdr
->bfd_section
)->u
.tdata
!= NULL
)
4224 bfd_byte
*contents
, *l
, *lend
;
4226 /* We stored the section contents in the tdata field in the
4227 set_section_contents routine. We save the section contents
4228 so that we don't have to read them again.
4229 At this point we know that elf_gp is set, so we can look
4230 through the section contents to see if there is an
4231 ODK_REGINFO structure. */
4233 contents
= mips_elf_section_data (hdr
->bfd_section
)->u
.tdata
;
4235 lend
= contents
+ hdr
->sh_size
;
4236 while (l
+ sizeof (Elf_External_Options
) <= lend
)
4238 Elf_Internal_Options intopt
;
4240 bfd_mips_elf_swap_options_in (abfd
, (Elf_External_Options
*) l
,
4242 if (ABI_64_P (abfd
) && intopt
.kind
== ODK_REGINFO
)
4249 + sizeof (Elf_External_Options
)
4250 + (sizeof (Elf64_External_RegInfo
) - 8)),
4253 H_PUT_64 (abfd
, elf_gp (abfd
), buf
);
4254 if (bfd_bwrite (buf
, (bfd_size_type
) 8, abfd
) != 8)
4257 else if (intopt
.kind
== ODK_REGINFO
)
4264 + sizeof (Elf_External_Options
)
4265 + (sizeof (Elf32_External_RegInfo
) - 4)),
4268 H_PUT_32 (abfd
, elf_gp (abfd
), buf
);
4269 if (bfd_bwrite (buf
, (bfd_size_type
) 4, abfd
) != 4)
4276 if (hdr
->bfd_section
!= NULL
)
4278 const char *name
= bfd_get_section_name (abfd
, hdr
->bfd_section
);
4280 if (strcmp (name
, ".sdata") == 0
4281 || strcmp (name
, ".lit8") == 0
4282 || strcmp (name
, ".lit4") == 0)
4284 hdr
->sh_flags
|= SHF_ALLOC
| SHF_WRITE
| SHF_MIPS_GPREL
;
4285 hdr
->sh_type
= SHT_PROGBITS
;
4287 else if (strcmp (name
, ".sbss") == 0)
4289 hdr
->sh_flags
|= SHF_ALLOC
| SHF_WRITE
| SHF_MIPS_GPREL
;
4290 hdr
->sh_type
= SHT_NOBITS
;
4292 else if (strcmp (name
, ".srdata") == 0)
4294 hdr
->sh_flags
|= SHF_ALLOC
| SHF_MIPS_GPREL
;
4295 hdr
->sh_type
= SHT_PROGBITS
;
4297 else if (strcmp (name
, ".compact_rel") == 0)
4300 hdr
->sh_type
= SHT_PROGBITS
;
4302 else if (strcmp (name
, ".rtproc") == 0)
4304 if (hdr
->sh_addralign
!= 0 && hdr
->sh_entsize
== 0)
4306 unsigned int adjust
;
4308 adjust
= hdr
->sh_size
% hdr
->sh_addralign
;
4310 hdr
->sh_size
+= hdr
->sh_addralign
- adjust
;
4318 /* Handle a MIPS specific section when reading an object file. This
4319 is called when elfcode.h finds a section with an unknown type.
4320 This routine supports both the 32-bit and 64-bit ELF ABI.
4322 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
4326 _bfd_mips_elf_section_from_shdr (abfd
, hdr
, name
)
4328 Elf_Internal_Shdr
*hdr
;
4333 /* There ought to be a place to keep ELF backend specific flags, but
4334 at the moment there isn't one. We just keep track of the
4335 sections by their name, instead. Fortunately, the ABI gives
4336 suggested names for all the MIPS specific sections, so we will
4337 probably get away with this. */
4338 switch (hdr
->sh_type
)
4340 case SHT_MIPS_LIBLIST
:
4341 if (strcmp (name
, ".liblist") != 0)
4345 if (strcmp (name
, ".msym") != 0)
4348 case SHT_MIPS_CONFLICT
:
4349 if (strcmp (name
, ".conflict") != 0)
4352 case SHT_MIPS_GPTAB
:
4353 if (strncmp (name
, ".gptab.", sizeof ".gptab." - 1) != 0)
4356 case SHT_MIPS_UCODE
:
4357 if (strcmp (name
, ".ucode") != 0)
4360 case SHT_MIPS_DEBUG
:
4361 if (strcmp (name
, ".mdebug") != 0)
4363 flags
= SEC_DEBUGGING
;
4365 case SHT_MIPS_REGINFO
:
4366 if (strcmp (name
, ".reginfo") != 0
4367 || hdr
->sh_size
!= sizeof (Elf32_External_RegInfo
))
4369 flags
= (SEC_LINK_ONCE
| SEC_LINK_DUPLICATES_SAME_SIZE
);
4371 case SHT_MIPS_IFACE
:
4372 if (strcmp (name
, ".MIPS.interfaces") != 0)
4375 case SHT_MIPS_CONTENT
:
4376 if (strncmp (name
, ".MIPS.content", sizeof ".MIPS.content" - 1) != 0)
4379 case SHT_MIPS_OPTIONS
:
4380 if (strcmp (name
, MIPS_ELF_OPTIONS_SECTION_NAME (abfd
)) != 0)
4383 case SHT_MIPS_DWARF
:
4384 if (strncmp (name
, ".debug_", sizeof ".debug_" - 1) != 0)
4387 case SHT_MIPS_SYMBOL_LIB
:
4388 if (strcmp (name
, ".MIPS.symlib") != 0)
4391 case SHT_MIPS_EVENTS
:
4392 if (strncmp (name
, ".MIPS.events", sizeof ".MIPS.events" - 1) != 0
4393 && strncmp (name
, ".MIPS.post_rel",
4394 sizeof ".MIPS.post_rel" - 1) != 0)
4401 if (! _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
))
4406 if (! bfd_set_section_flags (abfd
, hdr
->bfd_section
,
4407 (bfd_get_section_flags (abfd
,
4413 /* FIXME: We should record sh_info for a .gptab section. */
4415 /* For a .reginfo section, set the gp value in the tdata information
4416 from the contents of this section. We need the gp value while
4417 processing relocs, so we just get it now. The .reginfo section
4418 is not used in the 64-bit MIPS ELF ABI. */
4419 if (hdr
->sh_type
== SHT_MIPS_REGINFO
)
4421 Elf32_External_RegInfo ext
;
4424 if (! bfd_get_section_contents (abfd
, hdr
->bfd_section
, (PTR
) &ext
,
4426 (bfd_size_type
) sizeof ext
))
4428 bfd_mips_elf32_swap_reginfo_in (abfd
, &ext
, &s
);
4429 elf_gp (abfd
) = s
.ri_gp_value
;
4432 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
4433 set the gp value based on what we find. We may see both
4434 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
4435 they should agree. */
4436 if (hdr
->sh_type
== SHT_MIPS_OPTIONS
)
4438 bfd_byte
*contents
, *l
, *lend
;
4440 contents
= (bfd_byte
*) bfd_malloc (hdr
->sh_size
);
4441 if (contents
== NULL
)
4443 if (! bfd_get_section_contents (abfd
, hdr
->bfd_section
, contents
,
4444 (file_ptr
) 0, hdr
->sh_size
))
4450 lend
= contents
+ hdr
->sh_size
;
4451 while (l
+ sizeof (Elf_External_Options
) <= lend
)
4453 Elf_Internal_Options intopt
;
4455 bfd_mips_elf_swap_options_in (abfd
, (Elf_External_Options
*) l
,
4457 if (ABI_64_P (abfd
) && intopt
.kind
== ODK_REGINFO
)
4459 Elf64_Internal_RegInfo intreg
;
4461 bfd_mips_elf64_swap_reginfo_in
4463 ((Elf64_External_RegInfo
*)
4464 (l
+ sizeof (Elf_External_Options
))),
4466 elf_gp (abfd
) = intreg
.ri_gp_value
;
4468 else if (intopt
.kind
== ODK_REGINFO
)
4470 Elf32_RegInfo intreg
;
4472 bfd_mips_elf32_swap_reginfo_in
4474 ((Elf32_External_RegInfo
*)
4475 (l
+ sizeof (Elf_External_Options
))),
4477 elf_gp (abfd
) = intreg
.ri_gp_value
;
4487 /* Set the correct type for a MIPS ELF section. We do this by the
4488 section name, which is a hack, but ought to work. This routine is
4489 used by both the 32-bit and the 64-bit ABI. */
4492 _bfd_mips_elf_fake_sections (abfd
, hdr
, sec
)
4494 Elf_Internal_Shdr
*hdr
;
4497 register const char *name
;
4499 name
= bfd_get_section_name (abfd
, sec
);
4501 if (strcmp (name
, ".liblist") == 0)
4503 hdr
->sh_type
= SHT_MIPS_LIBLIST
;
4504 hdr
->sh_info
= sec
->_raw_size
/ sizeof (Elf32_Lib
);
4505 /* The sh_link field is set in final_write_processing. */
4507 else if (strcmp (name
, ".conflict") == 0)
4508 hdr
->sh_type
= SHT_MIPS_CONFLICT
;
4509 else if (strncmp (name
, ".gptab.", sizeof ".gptab." - 1) == 0)
4511 hdr
->sh_type
= SHT_MIPS_GPTAB
;
4512 hdr
->sh_entsize
= sizeof (Elf32_External_gptab
);
4513 /* The sh_info field is set in final_write_processing. */
4515 else if (strcmp (name
, ".ucode") == 0)
4516 hdr
->sh_type
= SHT_MIPS_UCODE
;
4517 else if (strcmp (name
, ".mdebug") == 0)
4519 hdr
->sh_type
= SHT_MIPS_DEBUG
;
4520 /* In a shared object on IRIX 5.3, the .mdebug section has an
4521 entsize of 0. FIXME: Does this matter? */
4522 if (SGI_COMPAT (abfd
) && (abfd
->flags
& DYNAMIC
) != 0)
4523 hdr
->sh_entsize
= 0;
4525 hdr
->sh_entsize
= 1;
4527 else if (strcmp (name
, ".reginfo") == 0)
4529 hdr
->sh_type
= SHT_MIPS_REGINFO
;
4530 /* In a shared object on IRIX 5.3, the .reginfo section has an
4531 entsize of 0x18. FIXME: Does this matter? */
4532 if (SGI_COMPAT (abfd
))
4534 if ((abfd
->flags
& DYNAMIC
) != 0)
4535 hdr
->sh_entsize
= sizeof (Elf32_External_RegInfo
);
4537 hdr
->sh_entsize
= 1;
4540 hdr
->sh_entsize
= sizeof (Elf32_External_RegInfo
);
4542 else if (SGI_COMPAT (abfd
)
4543 && (strcmp (name
, ".hash") == 0
4544 || strcmp (name
, ".dynamic") == 0
4545 || strcmp (name
, ".dynstr") == 0))
4547 if (SGI_COMPAT (abfd
))
4548 hdr
->sh_entsize
= 0;
4550 /* This isn't how the IRIX6 linker behaves. */
4551 hdr
->sh_info
= SIZEOF_MIPS_DYNSYM_SECNAMES
;
4554 else if (strcmp (name
, ".got") == 0
4555 || strcmp (name
, ".srdata") == 0
4556 || strcmp (name
, ".sdata") == 0
4557 || strcmp (name
, ".sbss") == 0
4558 || strcmp (name
, ".lit4") == 0
4559 || strcmp (name
, ".lit8") == 0)
4560 hdr
->sh_flags
|= SHF_MIPS_GPREL
;
4561 else if (strcmp (name
, ".MIPS.interfaces") == 0)
4563 hdr
->sh_type
= SHT_MIPS_IFACE
;
4564 hdr
->sh_flags
|= SHF_MIPS_NOSTRIP
;
4566 else if (strncmp (name
, ".MIPS.content", strlen (".MIPS.content")) == 0)
4568 hdr
->sh_type
= SHT_MIPS_CONTENT
;
4569 hdr
->sh_flags
|= SHF_MIPS_NOSTRIP
;
4570 /* The sh_info field is set in final_write_processing. */
4572 else if (strcmp (name
, MIPS_ELF_OPTIONS_SECTION_NAME (abfd
)) == 0)
4574 hdr
->sh_type
= SHT_MIPS_OPTIONS
;
4575 hdr
->sh_entsize
= 1;
4576 hdr
->sh_flags
|= SHF_MIPS_NOSTRIP
;
4578 else if (strncmp (name
, ".debug_", sizeof ".debug_" - 1) == 0)
4579 hdr
->sh_type
= SHT_MIPS_DWARF
;
4580 else if (strcmp (name
, ".MIPS.symlib") == 0)
4582 hdr
->sh_type
= SHT_MIPS_SYMBOL_LIB
;
4583 /* The sh_link and sh_info fields are set in
4584 final_write_processing. */
4586 else if (strncmp (name
, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0
4587 || strncmp (name
, ".MIPS.post_rel",
4588 sizeof ".MIPS.post_rel" - 1) == 0)
4590 hdr
->sh_type
= SHT_MIPS_EVENTS
;
4591 hdr
->sh_flags
|= SHF_MIPS_NOSTRIP
;
4592 /* The sh_link field is set in final_write_processing. */
4594 else if (strcmp (name
, ".msym") == 0)
4596 hdr
->sh_type
= SHT_MIPS_MSYM
;
4597 hdr
->sh_flags
|= SHF_ALLOC
;
4598 hdr
->sh_entsize
= 8;
4601 /* The generic elf_fake_sections will set up REL_HDR using the default
4602 kind of relocations. We used to set up a second header for the
4603 non-default kind of relocations here, but only NewABI would use
4604 these, and the IRIX ld doesn't like resulting empty RELA sections.
4605 Thus we create those header only on demand now. */
4610 /* Given a BFD section, try to locate the corresponding ELF section
4611 index. This is used by both the 32-bit and the 64-bit ABI.
4612 Actually, it's not clear to me that the 64-bit ABI supports these,
4613 but for non-PIC objects we will certainly want support for at least
4614 the .scommon section. */
4617 _bfd_mips_elf_section_from_bfd_section (abfd
, sec
, retval
)
4618 bfd
*abfd ATTRIBUTE_UNUSED
;
4622 if (strcmp (bfd_get_section_name (abfd
, sec
), ".scommon") == 0)
4624 *retval
= SHN_MIPS_SCOMMON
;
4627 if (strcmp (bfd_get_section_name (abfd
, sec
), ".acommon") == 0)
4629 *retval
= SHN_MIPS_ACOMMON
;
4635 /* Hook called by the linker routine which adds symbols from an object
4636 file. We must handle the special MIPS section numbers here. */
4639 _bfd_mips_elf_add_symbol_hook (abfd
, info
, sym
, namep
, flagsp
, secp
, valp
)
4641 struct bfd_link_info
*info
;
4642 const Elf_Internal_Sym
*sym
;
4644 flagword
*flagsp ATTRIBUTE_UNUSED
;
4648 if (SGI_COMPAT (abfd
)
4649 && (abfd
->flags
& DYNAMIC
) != 0
4650 && strcmp (*namep
, "_rld_new_interface") == 0)
4652 /* Skip IRIX5 rld entry name. */
4657 switch (sym
->st_shndx
)
4660 /* Common symbols less than the GP size are automatically
4661 treated as SHN_MIPS_SCOMMON symbols. */
4662 if (sym
->st_size
> elf_gp_size (abfd
)
4663 || IRIX_COMPAT (abfd
) == ict_irix6
)
4666 case SHN_MIPS_SCOMMON
:
4667 *secp
= bfd_make_section_old_way (abfd
, ".scommon");
4668 (*secp
)->flags
|= SEC_IS_COMMON
;
4669 *valp
= sym
->st_size
;
4673 /* This section is used in a shared object. */
4674 if (elf_tdata (abfd
)->elf_text_section
== NULL
)
4676 asymbol
*elf_text_symbol
;
4677 asection
*elf_text_section
;
4678 bfd_size_type amt
= sizeof (asection
);
4680 elf_text_section
= bfd_zalloc (abfd
, amt
);
4681 if (elf_text_section
== NULL
)
4684 amt
= sizeof (asymbol
);
4685 elf_text_symbol
= bfd_zalloc (abfd
, amt
);
4686 if (elf_text_symbol
== NULL
)
4689 /* Initialize the section. */
4691 elf_tdata (abfd
)->elf_text_section
= elf_text_section
;
4692 elf_tdata (abfd
)->elf_text_symbol
= elf_text_symbol
;
4694 elf_text_section
->symbol
= elf_text_symbol
;
4695 elf_text_section
->symbol_ptr_ptr
= &elf_tdata (abfd
)->elf_text_symbol
;
4697 elf_text_section
->name
= ".text";
4698 elf_text_section
->flags
= SEC_NO_FLAGS
;
4699 elf_text_section
->output_section
= NULL
;
4700 elf_text_section
->owner
= abfd
;
4701 elf_text_symbol
->name
= ".text";
4702 elf_text_symbol
->flags
= BSF_SECTION_SYM
| BSF_DYNAMIC
;
4703 elf_text_symbol
->section
= elf_text_section
;
4705 /* This code used to do *secp = bfd_und_section_ptr if
4706 info->shared. I don't know why, and that doesn't make sense,
4707 so I took it out. */
4708 *secp
= elf_tdata (abfd
)->elf_text_section
;
4711 case SHN_MIPS_ACOMMON
:
4712 /* Fall through. XXX Can we treat this as allocated data? */
4714 /* This section is used in a shared object. */
4715 if (elf_tdata (abfd
)->elf_data_section
== NULL
)
4717 asymbol
*elf_data_symbol
;
4718 asection
*elf_data_section
;
4719 bfd_size_type amt
= sizeof (asection
);
4721 elf_data_section
= bfd_zalloc (abfd
, amt
);
4722 if (elf_data_section
== NULL
)
4725 amt
= sizeof (asymbol
);
4726 elf_data_symbol
= bfd_zalloc (abfd
, amt
);
4727 if (elf_data_symbol
== NULL
)
4730 /* Initialize the section. */
4732 elf_tdata (abfd
)->elf_data_section
= elf_data_section
;
4733 elf_tdata (abfd
)->elf_data_symbol
= elf_data_symbol
;
4735 elf_data_section
->symbol
= elf_data_symbol
;
4736 elf_data_section
->symbol_ptr_ptr
= &elf_tdata (abfd
)->elf_data_symbol
;
4738 elf_data_section
->name
= ".data";
4739 elf_data_section
->flags
= SEC_NO_FLAGS
;
4740 elf_data_section
->output_section
= NULL
;
4741 elf_data_section
->owner
= abfd
;
4742 elf_data_symbol
->name
= ".data";
4743 elf_data_symbol
->flags
= BSF_SECTION_SYM
| BSF_DYNAMIC
;
4744 elf_data_symbol
->section
= elf_data_section
;
4746 /* This code used to do *secp = bfd_und_section_ptr if
4747 info->shared. I don't know why, and that doesn't make sense,
4748 so I took it out. */
4749 *secp
= elf_tdata (abfd
)->elf_data_section
;
4752 case SHN_MIPS_SUNDEFINED
:
4753 *secp
= bfd_und_section_ptr
;
4757 if (SGI_COMPAT (abfd
)
4759 && info
->hash
->creator
== abfd
->xvec
4760 && strcmp (*namep
, "__rld_obj_head") == 0)
4762 struct elf_link_hash_entry
*h
;
4763 struct bfd_link_hash_entry
*bh
;
4765 /* Mark __rld_obj_head as dynamic. */
4767 if (! (_bfd_generic_link_add_one_symbol
4768 (info
, abfd
, *namep
, BSF_GLOBAL
, *secp
,
4769 (bfd_vma
) *valp
, (const char *) NULL
, FALSE
,
4770 get_elf_backend_data (abfd
)->collect
, &bh
)))
4773 h
= (struct elf_link_hash_entry
*) bh
;
4774 h
->elf_link_hash_flags
&= ~ELF_LINK_NON_ELF
;
4775 h
->elf_link_hash_flags
|= ELF_LINK_HASH_DEF_REGULAR
;
4776 h
->type
= STT_OBJECT
;
4778 if (! bfd_elf32_link_record_dynamic_symbol (info
, h
))
4781 mips_elf_hash_table (info
)->use_rld_obj_head
= TRUE
;
4784 /* If this is a mips16 text symbol, add 1 to the value to make it
4785 odd. This will cause something like .word SYM to come up with
4786 the right value when it is loaded into the PC. */
4787 if (sym
->st_other
== STO_MIPS16
)
4793 /* This hook function is called before the linker writes out a global
4794 symbol. We mark symbols as small common if appropriate. This is
4795 also where we undo the increment of the value for a mips16 symbol. */
4798 _bfd_mips_elf_link_output_symbol_hook (abfd
, info
, name
, sym
, input_sec
)
4799 bfd
*abfd ATTRIBUTE_UNUSED
;
4800 struct bfd_link_info
*info ATTRIBUTE_UNUSED
;
4801 const char *name ATTRIBUTE_UNUSED
;
4802 Elf_Internal_Sym
*sym
;
4803 asection
*input_sec
;
4805 /* If we see a common symbol, which implies a relocatable link, then
4806 if a symbol was small common in an input file, mark it as small
4807 common in the output file. */
4808 if (sym
->st_shndx
== SHN_COMMON
4809 && strcmp (input_sec
->name
, ".scommon") == 0)
4810 sym
->st_shndx
= SHN_MIPS_SCOMMON
;
4812 if (sym
->st_other
== STO_MIPS16
4813 && (sym
->st_value
& 1) != 0)
4819 /* Functions for the dynamic linker. */
4821 /* Create dynamic sections when linking against a dynamic object. */
4824 _bfd_mips_elf_create_dynamic_sections (abfd
, info
)
4826 struct bfd_link_info
*info
;
4828 struct elf_link_hash_entry
*h
;
4829 struct bfd_link_hash_entry
*bh
;
4831 register asection
*s
;
4832 const char * const *namep
;
4834 flags
= (SEC_ALLOC
| SEC_LOAD
| SEC_HAS_CONTENTS
| SEC_IN_MEMORY
4835 | SEC_LINKER_CREATED
| SEC_READONLY
);
4837 /* Mips ABI requests the .dynamic section to be read only. */
4838 s
= bfd_get_section_by_name (abfd
, ".dynamic");
4841 if (! bfd_set_section_flags (abfd
, s
, flags
))
4845 /* We need to create .got section. */
4846 if (! mips_elf_create_got_section (abfd
, info
, FALSE
))
4849 if (! mips_elf_rel_dyn_section (elf_hash_table (info
)->dynobj
, TRUE
))
4852 /* Create .stub section. */
4853 if (bfd_get_section_by_name (abfd
,
4854 MIPS_ELF_STUB_SECTION_NAME (abfd
)) == NULL
)
4856 s
= bfd_make_section (abfd
, MIPS_ELF_STUB_SECTION_NAME (abfd
));
4858 || ! bfd_set_section_flags (abfd
, s
, flags
| SEC_CODE
)
4859 || ! bfd_set_section_alignment (abfd
, s
,
4860 MIPS_ELF_LOG_FILE_ALIGN (abfd
)))
4864 if ((IRIX_COMPAT (abfd
) == ict_irix5
|| IRIX_COMPAT (abfd
) == ict_none
)
4866 && bfd_get_section_by_name (abfd
, ".rld_map") == NULL
)
4868 s
= bfd_make_section (abfd
, ".rld_map");
4870 || ! bfd_set_section_flags (abfd
, s
, flags
&~ (flagword
) SEC_READONLY
)
4871 || ! bfd_set_section_alignment (abfd
, s
,
4872 MIPS_ELF_LOG_FILE_ALIGN (abfd
)))
4876 /* On IRIX5, we adjust add some additional symbols and change the
4877 alignments of several sections. There is no ABI documentation
4878 indicating that this is necessary on IRIX6, nor any evidence that
4879 the linker takes such action. */
4880 if (IRIX_COMPAT (abfd
) == ict_irix5
)
4882 for (namep
= mips_elf_dynsym_rtproc_names
; *namep
!= NULL
; namep
++)
4885 if (! (_bfd_generic_link_add_one_symbol
4886 (info
, abfd
, *namep
, BSF_GLOBAL
, bfd_und_section_ptr
,
4887 (bfd_vma
) 0, (const char *) NULL
, FALSE
,
4888 get_elf_backend_data (abfd
)->collect
, &bh
)))
4891 h
= (struct elf_link_hash_entry
*) bh
;
4892 h
->elf_link_hash_flags
&= ~ELF_LINK_NON_ELF
;
4893 h
->elf_link_hash_flags
|= ELF_LINK_HASH_DEF_REGULAR
;
4894 h
->type
= STT_SECTION
;
4896 if (! bfd_elf32_link_record_dynamic_symbol (info
, h
))
4900 /* We need to create a .compact_rel section. */
4901 if (SGI_COMPAT (abfd
))
4903 if (!mips_elf_create_compact_rel_section (abfd
, info
))
4907 /* Change alignments of some sections. */
4908 s
= bfd_get_section_by_name (abfd
, ".hash");
4910 bfd_set_section_alignment (abfd
, s
, MIPS_ELF_LOG_FILE_ALIGN (abfd
));
4911 s
= bfd_get_section_by_name (abfd
, ".dynsym");
4913 bfd_set_section_alignment (abfd
, s
, MIPS_ELF_LOG_FILE_ALIGN (abfd
));
4914 s
= bfd_get_section_by_name (abfd
, ".dynstr");
4916 bfd_set_section_alignment (abfd
, s
, MIPS_ELF_LOG_FILE_ALIGN (abfd
));
4917 s
= bfd_get_section_by_name (abfd
, ".reginfo");
4919 bfd_set_section_alignment (abfd
, s
, MIPS_ELF_LOG_FILE_ALIGN (abfd
));
4920 s
= bfd_get_section_by_name (abfd
, ".dynamic");
4922 bfd_set_section_alignment (abfd
, s
, MIPS_ELF_LOG_FILE_ALIGN (abfd
));
4929 name
= SGI_COMPAT (abfd
) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
4931 if (!(_bfd_generic_link_add_one_symbol
4932 (info
, abfd
, name
, BSF_GLOBAL
, bfd_abs_section_ptr
,
4933 (bfd_vma
) 0, (const char *) NULL
, FALSE
,
4934 get_elf_backend_data (abfd
)->collect
, &bh
)))
4937 h
= (struct elf_link_hash_entry
*) bh
;
4938 h
->elf_link_hash_flags
&= ~ELF_LINK_NON_ELF
;
4939 h
->elf_link_hash_flags
|= ELF_LINK_HASH_DEF_REGULAR
;
4940 h
->type
= STT_SECTION
;
4942 if (! bfd_elf32_link_record_dynamic_symbol (info
, h
))
4945 if (! mips_elf_hash_table (info
)->use_rld_obj_head
)
4947 /* __rld_map is a four byte word located in the .data section
4948 and is filled in by the rtld to contain a pointer to
4949 the _r_debug structure. Its symbol value will be set in
4950 _bfd_mips_elf_finish_dynamic_symbol. */
4951 s
= bfd_get_section_by_name (abfd
, ".rld_map");
4952 BFD_ASSERT (s
!= NULL
);
4954 name
= SGI_COMPAT (abfd
) ? "__rld_map" : "__RLD_MAP";
4956 if (!(_bfd_generic_link_add_one_symbol
4957 (info
, abfd
, name
, BSF_GLOBAL
, s
,
4958 (bfd_vma
) 0, (const char *) NULL
, FALSE
,
4959 get_elf_backend_data (abfd
)->collect
, &bh
)))
4962 h
= (struct elf_link_hash_entry
*) bh
;
4963 h
->elf_link_hash_flags
&= ~ELF_LINK_NON_ELF
;
4964 h
->elf_link_hash_flags
|= ELF_LINK_HASH_DEF_REGULAR
;
4965 h
->type
= STT_OBJECT
;
4967 if (! bfd_elf32_link_record_dynamic_symbol (info
, h
))
4975 /* Look through the relocs for a section during the first phase, and
4976 allocate space in the global offset table. */
4979 _bfd_mips_elf_check_relocs (abfd
, info
, sec
, relocs
)
4981 struct bfd_link_info
*info
;
4983 const Elf_Internal_Rela
*relocs
;
4987 Elf_Internal_Shdr
*symtab_hdr
;
4988 struct elf_link_hash_entry
**sym_hashes
;
4989 struct mips_got_info
*g
;
4991 const Elf_Internal_Rela
*rel
;
4992 const Elf_Internal_Rela
*rel_end
;
4995 const struct elf_backend_data
*bed
;
4997 if (info
->relocatable
)
5000 dynobj
= elf_hash_table (info
)->dynobj
;
5001 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
5002 sym_hashes
= elf_sym_hashes (abfd
);
5003 extsymoff
= (elf_bad_symtab (abfd
)) ? 0 : symtab_hdr
->sh_info
;
5005 /* Check for the mips16 stub sections. */
5007 name
= bfd_get_section_name (abfd
, sec
);
5008 if (strncmp (name
, FN_STUB
, sizeof FN_STUB
- 1) == 0)
5010 unsigned long r_symndx
;
5012 /* Look at the relocation information to figure out which symbol
5015 r_symndx
= ELF_R_SYM (abfd
, relocs
->r_info
);
5017 if (r_symndx
< extsymoff
5018 || sym_hashes
[r_symndx
- extsymoff
] == NULL
)
5022 /* This stub is for a local symbol. This stub will only be
5023 needed if there is some relocation in this BFD, other
5024 than a 16 bit function call, which refers to this symbol. */
5025 for (o
= abfd
->sections
; o
!= NULL
; o
= o
->next
)
5027 Elf_Internal_Rela
*sec_relocs
;
5028 const Elf_Internal_Rela
*r
, *rend
;
5030 /* We can ignore stub sections when looking for relocs. */
5031 if ((o
->flags
& SEC_RELOC
) == 0
5032 || o
->reloc_count
== 0
5033 || strncmp (bfd_get_section_name (abfd
, o
), FN_STUB
,
5034 sizeof FN_STUB
- 1) == 0
5035 || strncmp (bfd_get_section_name (abfd
, o
), CALL_STUB
,
5036 sizeof CALL_STUB
- 1) == 0
5037 || strncmp (bfd_get_section_name (abfd
, o
), CALL_FP_STUB
,
5038 sizeof CALL_FP_STUB
- 1) == 0)
5042 = _bfd_elf_link_read_relocs (abfd
, o
, (PTR
) NULL
,
5043 (Elf_Internal_Rela
*) NULL
,
5045 if (sec_relocs
== NULL
)
5048 rend
= sec_relocs
+ o
->reloc_count
;
5049 for (r
= sec_relocs
; r
< rend
; r
++)
5050 if (ELF_R_SYM (abfd
, r
->r_info
) == r_symndx
5051 && ELF_R_TYPE (abfd
, r
->r_info
) != R_MIPS16_26
)
5054 if (elf_section_data (o
)->relocs
!= sec_relocs
)
5063 /* There is no non-call reloc for this stub, so we do
5064 not need it. Since this function is called before
5065 the linker maps input sections to output sections, we
5066 can easily discard it by setting the SEC_EXCLUDE
5068 sec
->flags
|= SEC_EXCLUDE
;
5072 /* Record this stub in an array of local symbol stubs for
5074 if (elf_tdata (abfd
)->local_stubs
== NULL
)
5076 unsigned long symcount
;
5080 if (elf_bad_symtab (abfd
))
5081 symcount
= NUM_SHDR_ENTRIES (symtab_hdr
);
5083 symcount
= symtab_hdr
->sh_info
;
5084 amt
= symcount
* sizeof (asection
*);
5085 n
= (asection
**) bfd_zalloc (abfd
, amt
);
5088 elf_tdata (abfd
)->local_stubs
= n
;
5091 elf_tdata (abfd
)->local_stubs
[r_symndx
] = sec
;
5093 /* We don't need to set mips16_stubs_seen in this case.
5094 That flag is used to see whether we need to look through
5095 the global symbol table for stubs. We don't need to set
5096 it here, because we just have a local stub. */
5100 struct mips_elf_link_hash_entry
*h
;
5102 h
= ((struct mips_elf_link_hash_entry
*)
5103 sym_hashes
[r_symndx
- extsymoff
]);
5105 /* H is the symbol this stub is for. */
5108 mips_elf_hash_table (info
)->mips16_stubs_seen
= TRUE
;
5111 else if (strncmp (name
, CALL_STUB
, sizeof CALL_STUB
- 1) == 0
5112 || strncmp (name
, CALL_FP_STUB
, sizeof CALL_FP_STUB
- 1) == 0)
5114 unsigned long r_symndx
;
5115 struct mips_elf_link_hash_entry
*h
;
5118 /* Look at the relocation information to figure out which symbol
5121 r_symndx
= ELF_R_SYM (abfd
, relocs
->r_info
);
5123 if (r_symndx
< extsymoff
5124 || sym_hashes
[r_symndx
- extsymoff
] == NULL
)
5126 /* This stub was actually built for a static symbol defined
5127 in the same file. We assume that all static symbols in
5128 mips16 code are themselves mips16, so we can simply
5129 discard this stub. Since this function is called before
5130 the linker maps input sections to output sections, we can
5131 easily discard it by setting the SEC_EXCLUDE flag. */
5132 sec
->flags
|= SEC_EXCLUDE
;
5136 h
= ((struct mips_elf_link_hash_entry
*)
5137 sym_hashes
[r_symndx
- extsymoff
]);
5139 /* H is the symbol this stub is for. */
5141 if (strncmp (name
, CALL_FP_STUB
, sizeof CALL_FP_STUB
- 1) == 0)
5142 loc
= &h
->call_fp_stub
;
5144 loc
= &h
->call_stub
;
5146 /* If we already have an appropriate stub for this function, we
5147 don't need another one, so we can discard this one. Since
5148 this function is called before the linker maps input sections
5149 to output sections, we can easily discard it by setting the
5150 SEC_EXCLUDE flag. We can also discard this section if we
5151 happen to already know that this is a mips16 function; it is
5152 not necessary to check this here, as it is checked later, but
5153 it is slightly faster to check now. */
5154 if (*loc
!= NULL
|| h
->root
.other
== STO_MIPS16
)
5156 sec
->flags
|= SEC_EXCLUDE
;
5161 mips_elf_hash_table (info
)->mips16_stubs_seen
= TRUE
;
5171 sgot
= mips_elf_got_section (dynobj
, FALSE
);
5176 BFD_ASSERT (mips_elf_section_data (sgot
) != NULL
);
5177 g
= mips_elf_section_data (sgot
)->u
.got_info
;
5178 BFD_ASSERT (g
!= NULL
);
5183 bed
= get_elf_backend_data (abfd
);
5184 rel_end
= relocs
+ sec
->reloc_count
* bed
->s
->int_rels_per_ext_rel
;
5185 for (rel
= relocs
; rel
< rel_end
; ++rel
)
5187 unsigned long r_symndx
;
5188 unsigned int r_type
;
5189 struct elf_link_hash_entry
*h
;
5191 r_symndx
= ELF_R_SYM (abfd
, rel
->r_info
);
5192 r_type
= ELF_R_TYPE (abfd
, rel
->r_info
);
5194 if (r_symndx
< extsymoff
)
5196 else if (r_symndx
>= extsymoff
+ NUM_SHDR_ENTRIES (symtab_hdr
))
5198 (*_bfd_error_handler
)
5199 (_("%s: Malformed reloc detected for section %s"),
5200 bfd_archive_filename (abfd
), name
);
5201 bfd_set_error (bfd_error_bad_value
);
5206 h
= sym_hashes
[r_symndx
- extsymoff
];
5208 /* This may be an indirect symbol created because of a version. */
5211 while (h
->root
.type
== bfd_link_hash_indirect
)
5212 h
= (struct elf_link_hash_entry
*) h
->root
.u
.i
.link
;
5216 /* Some relocs require a global offset table. */
5217 if (dynobj
== NULL
|| sgot
== NULL
)
5223 case R_MIPS_CALL_HI16
:
5224 case R_MIPS_CALL_LO16
:
5225 case R_MIPS_GOT_HI16
:
5226 case R_MIPS_GOT_LO16
:
5227 case R_MIPS_GOT_PAGE
:
5228 case R_MIPS_GOT_OFST
:
5229 case R_MIPS_GOT_DISP
:
5231 elf_hash_table (info
)->dynobj
= dynobj
= abfd
;
5232 if (! mips_elf_create_got_section (dynobj
, info
, FALSE
))
5234 g
= mips_elf_got_info (dynobj
, &sgot
);
5241 && (info
->shared
|| h
!= NULL
)
5242 && (sec
->flags
& SEC_ALLOC
) != 0)
5243 elf_hash_table (info
)->dynobj
= dynobj
= abfd
;
5251 if (!h
&& (r_type
== R_MIPS_CALL_LO16
5252 || r_type
== R_MIPS_GOT_LO16
5253 || r_type
== R_MIPS_GOT_DISP
))
5255 /* We may need a local GOT entry for this relocation. We
5256 don't count R_MIPS_GOT_PAGE because we can estimate the
5257 maximum number of pages needed by looking at the size of
5258 the segment. Similar comments apply to R_MIPS_GOT16 and
5259 R_MIPS_CALL16. We don't count R_MIPS_GOT_HI16, or
5260 R_MIPS_CALL_HI16 because these are always followed by an
5261 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */
5262 if (! mips_elf_record_local_got_symbol (abfd
, r_symndx
,
5272 (*_bfd_error_handler
)
5273 (_("%s: CALL16 reloc at 0x%lx not against global symbol"),
5274 bfd_archive_filename (abfd
), (unsigned long) rel
->r_offset
);
5275 bfd_set_error (bfd_error_bad_value
);
5280 case R_MIPS_CALL_HI16
:
5281 case R_MIPS_CALL_LO16
:
5284 /* This symbol requires a global offset table entry. */
5285 if (! mips_elf_record_global_got_symbol (h
, abfd
, info
, g
))
5288 /* We need a stub, not a plt entry for the undefined
5289 function. But we record it as if it needs plt. See
5290 elf_adjust_dynamic_symbol in elflink.h. */
5291 h
->elf_link_hash_flags
|= ELF_LINK_HASH_NEEDS_PLT
;
5296 case R_MIPS_GOT_PAGE
:
5297 /* If this is a global, overridable symbol, GOT_PAGE will
5298 decay to GOT_DISP, so we'll need a GOT entry for it. */
5303 struct mips_elf_link_hash_entry
*hmips
=
5304 (struct mips_elf_link_hash_entry
*) h
;
5306 while (hmips
->root
.root
.type
== bfd_link_hash_indirect
5307 || hmips
->root
.root
.type
== bfd_link_hash_warning
)
5308 hmips
= (struct mips_elf_link_hash_entry
*)
5309 hmips
->root
.root
.u
.i
.link
;
5311 if ((hmips
->root
.root
.type
== bfd_link_hash_defined
5312 || hmips
->root
.root
.type
== bfd_link_hash_defweak
)
5313 && hmips
->root
.root
.u
.def
.section
5314 && ! (info
->shared
&& ! info
->symbolic
5315 && ! (hmips
->root
.elf_link_hash_flags
5316 & ELF_LINK_FORCED_LOCAL
))
5317 /* If we've encountered any other relocation
5318 referencing the symbol, we'll have marked it as
5319 dynamic, and, even though we might be able to get
5320 rid of the GOT entry should we know for sure all
5321 previous relocations were GOT_PAGE ones, at this
5322 point we can't tell, so just keep using the
5323 symbol as dynamic. This is very important in the
5324 multi-got case, since we don't decide whether to
5325 decay GOT_PAGE to GOT_DISP on a per-GOT basis: if
5326 the symbol is dynamic, we'll need a GOT entry for
5327 every GOT in which the symbol is referenced with
5328 a GOT_PAGE relocation. */
5329 && hmips
->root
.dynindx
== -1)
5335 case R_MIPS_GOT_HI16
:
5336 case R_MIPS_GOT_LO16
:
5337 case R_MIPS_GOT_DISP
:
5338 /* This symbol requires a global offset table entry. */
5339 if (h
&& ! mips_elf_record_global_got_symbol (h
, abfd
, info
, g
))
5346 if ((info
->shared
|| h
!= NULL
)
5347 && (sec
->flags
& SEC_ALLOC
) != 0)
5351 sreloc
= mips_elf_rel_dyn_section (dynobj
, TRUE
);
5355 #define MIPS_READONLY_SECTION (SEC_ALLOC | SEC_LOAD | SEC_READONLY)
5358 /* When creating a shared object, we must copy these
5359 reloc types into the output file as R_MIPS_REL32
5360 relocs. We make room for this reloc in the
5361 .rel.dyn reloc section. */
5362 mips_elf_allocate_dynamic_relocations (dynobj
, 1);
5363 if ((sec
->flags
& MIPS_READONLY_SECTION
)
5364 == MIPS_READONLY_SECTION
)
5365 /* We tell the dynamic linker that there are
5366 relocations against the text segment. */
5367 info
->flags
|= DF_TEXTREL
;
5371 struct mips_elf_link_hash_entry
*hmips
;
5373 /* We only need to copy this reloc if the symbol is
5374 defined in a dynamic object. */
5375 hmips
= (struct mips_elf_link_hash_entry
*) h
;
5376 ++hmips
->possibly_dynamic_relocs
;
5377 if ((sec
->flags
& MIPS_READONLY_SECTION
)
5378 == MIPS_READONLY_SECTION
)
5379 /* We need it to tell the dynamic linker if there
5380 are relocations against the text segment. */
5381 hmips
->readonly_reloc
= TRUE
;
5384 /* Even though we don't directly need a GOT entry for
5385 this symbol, a symbol must have a dynamic symbol
5386 table index greater that DT_MIPS_GOTSYM if there are
5387 dynamic relocations against it. */
5391 elf_hash_table (info
)->dynobj
= dynobj
= abfd
;
5392 if (! mips_elf_create_got_section (dynobj
, info
, TRUE
))
5394 g
= mips_elf_got_info (dynobj
, &sgot
);
5395 if (! mips_elf_record_global_got_symbol (h
, abfd
, info
, g
))
5400 if (SGI_COMPAT (abfd
))
5401 mips_elf_hash_table (info
)->compact_rel_size
+=
5402 sizeof (Elf32_External_crinfo
);
5406 case R_MIPS_GPREL16
:
5407 case R_MIPS_LITERAL
:
5408 case R_MIPS_GPREL32
:
5409 if (SGI_COMPAT (abfd
))
5410 mips_elf_hash_table (info
)->compact_rel_size
+=
5411 sizeof (Elf32_External_crinfo
);
5414 /* This relocation describes the C++ object vtable hierarchy.
5415 Reconstruct it for later use during GC. */
5416 case R_MIPS_GNU_VTINHERIT
:
5417 if (!_bfd_elf32_gc_record_vtinherit (abfd
, sec
, h
, rel
->r_offset
))
5421 /* This relocation describes which C++ vtable entries are actually
5422 used. Record for later use during GC. */
5423 case R_MIPS_GNU_VTENTRY
:
5424 if (!_bfd_elf32_gc_record_vtentry (abfd
, sec
, h
, rel
->r_offset
))
5432 /* We must not create a stub for a symbol that has relocations
5433 related to taking the function's address. */
5439 struct mips_elf_link_hash_entry
*mh
;
5441 mh
= (struct mips_elf_link_hash_entry
*) h
;
5442 mh
->no_fn_stub
= TRUE
;
5446 case R_MIPS_CALL_HI16
:
5447 case R_MIPS_CALL_LO16
:
5452 /* If this reloc is not a 16 bit call, and it has a global
5453 symbol, then we will need the fn_stub if there is one.
5454 References from a stub section do not count. */
5456 && r_type
!= R_MIPS16_26
5457 && strncmp (bfd_get_section_name (abfd
, sec
), FN_STUB
,
5458 sizeof FN_STUB
- 1) != 0
5459 && strncmp (bfd_get_section_name (abfd
, sec
), CALL_STUB
,
5460 sizeof CALL_STUB
- 1) != 0
5461 && strncmp (bfd_get_section_name (abfd
, sec
), CALL_FP_STUB
,
5462 sizeof CALL_FP_STUB
- 1) != 0)
5464 struct mips_elf_link_hash_entry
*mh
;
5466 mh
= (struct mips_elf_link_hash_entry
*) h
;
5467 mh
->need_fn_stub
= TRUE
;
5475 _bfd_mips_relax_section (abfd
, sec
, link_info
, again
)
5478 struct bfd_link_info
*link_info
;
5481 Elf_Internal_Rela
*internal_relocs
;
5482 Elf_Internal_Rela
*irel
, *irelend
;
5483 Elf_Internal_Shdr
*symtab_hdr
;
5484 bfd_byte
*contents
= NULL
;
5485 bfd_byte
*free_contents
= NULL
;
5487 bfd_boolean changed_contents
= FALSE
;
5488 bfd_vma sec_start
= sec
->output_section
->vma
+ sec
->output_offset
;
5489 Elf_Internal_Sym
*isymbuf
= NULL
;
5491 /* We are not currently changing any sizes, so only one pass. */
5494 if (link_info
->relocatable
)
5497 internal_relocs
= _bfd_elf_link_read_relocs (abfd
, sec
, (PTR
) NULL
,
5498 (Elf_Internal_Rela
*) NULL
,
5499 link_info
->keep_memory
);
5500 if (internal_relocs
== NULL
)
5503 irelend
= internal_relocs
+ sec
->reloc_count
5504 * get_elf_backend_data (abfd
)->s
->int_rels_per_ext_rel
;
5505 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
5506 extsymoff
= (elf_bad_symtab (abfd
)) ? 0 : symtab_hdr
->sh_info
;
5508 for (irel
= internal_relocs
; irel
< irelend
; irel
++)
5511 bfd_signed_vma sym_offset
;
5512 unsigned int r_type
;
5513 unsigned long r_symndx
;
5515 unsigned long instruction
;
5517 /* Turn jalr into bgezal, and jr into beq, if they're marked
5518 with a JALR relocation, that indicate where they jump to.
5519 This saves some pipeline bubbles. */
5520 r_type
= ELF_R_TYPE (abfd
, irel
->r_info
);
5521 if (r_type
!= R_MIPS_JALR
)
5524 r_symndx
= ELF_R_SYM (abfd
, irel
->r_info
);
5525 /* Compute the address of the jump target. */
5526 if (r_symndx
>= extsymoff
)
5528 struct mips_elf_link_hash_entry
*h
5529 = ((struct mips_elf_link_hash_entry
*)
5530 elf_sym_hashes (abfd
) [r_symndx
- extsymoff
]);
5532 while (h
->root
.root
.type
== bfd_link_hash_indirect
5533 || h
->root
.root
.type
== bfd_link_hash_warning
)
5534 h
= (struct mips_elf_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
5536 /* If a symbol is undefined, or if it may be overridden,
5538 if (! ((h
->root
.root
.type
== bfd_link_hash_defined
5539 || h
->root
.root
.type
== bfd_link_hash_defweak
)
5540 && h
->root
.root
.u
.def
.section
)
5541 || (link_info
->shared
&& ! link_info
->symbolic
5542 && ! (h
->root
.elf_link_hash_flags
& ELF_LINK_FORCED_LOCAL
)))
5545 sym_sec
= h
->root
.root
.u
.def
.section
;
5546 if (sym_sec
->output_section
)
5547 symval
= (h
->root
.root
.u
.def
.value
5548 + sym_sec
->output_section
->vma
5549 + sym_sec
->output_offset
);
5551 symval
= h
->root
.root
.u
.def
.value
;
5555 Elf_Internal_Sym
*isym
;
5557 /* Read this BFD's symbols if we haven't done so already. */
5558 if (isymbuf
== NULL
&& symtab_hdr
->sh_info
!= 0)
5560 isymbuf
= (Elf_Internal_Sym
*) symtab_hdr
->contents
;
5561 if (isymbuf
== NULL
)
5562 isymbuf
= bfd_elf_get_elf_syms (abfd
, symtab_hdr
,
5563 symtab_hdr
->sh_info
, 0,
5565 if (isymbuf
== NULL
)
5569 isym
= isymbuf
+ r_symndx
;
5570 if (isym
->st_shndx
== SHN_UNDEF
)
5572 else if (isym
->st_shndx
== SHN_ABS
)
5573 sym_sec
= bfd_abs_section_ptr
;
5574 else if (isym
->st_shndx
== SHN_COMMON
)
5575 sym_sec
= bfd_com_section_ptr
;
5578 = bfd_section_from_elf_index (abfd
, isym
->st_shndx
);
5579 symval
= isym
->st_value
5580 + sym_sec
->output_section
->vma
5581 + sym_sec
->output_offset
;
5584 /* Compute branch offset, from delay slot of the jump to the
5586 sym_offset
= (symval
+ irel
->r_addend
)
5587 - (sec_start
+ irel
->r_offset
+ 4);
5589 /* Branch offset must be properly aligned. */
5590 if ((sym_offset
& 3) != 0)
5595 /* Check that it's in range. */
5596 if (sym_offset
< -0x8000 || sym_offset
>= 0x8000)
5599 /* Get the section contents if we haven't done so already. */
5600 if (contents
== NULL
)
5602 /* Get cached copy if it exists. */
5603 if (elf_section_data (sec
)->this_hdr
.contents
!= NULL
)
5604 contents
= elf_section_data (sec
)->this_hdr
.contents
;
5607 contents
= (bfd_byte
*) bfd_malloc (sec
->_raw_size
);
5608 if (contents
== NULL
)
5611 free_contents
= contents
;
5612 if (! bfd_get_section_contents (abfd
, sec
, contents
,
5613 (file_ptr
) 0, sec
->_raw_size
))
5618 instruction
= bfd_get_32 (abfd
, contents
+ irel
->r_offset
);
5620 /* If it was jalr <reg>, turn it into bgezal $zero, <target>. */
5621 if ((instruction
& 0xfc1fffff) == 0x0000f809)
5622 instruction
= 0x04110000;
5623 /* If it was jr <reg>, turn it into b <target>. */
5624 else if ((instruction
& 0xfc1fffff) == 0x00000008)
5625 instruction
= 0x10000000;
5629 instruction
|= (sym_offset
& 0xffff);
5630 bfd_put_32 (abfd
, instruction
, contents
+ irel
->r_offset
);
5631 changed_contents
= TRUE
;
5634 if (contents
!= NULL
5635 && elf_section_data (sec
)->this_hdr
.contents
!= contents
)
5637 if (!changed_contents
&& !link_info
->keep_memory
)
5641 /* Cache the section contents for elf_link_input_bfd. */
5642 elf_section_data (sec
)->this_hdr
.contents
= contents
;
5648 if (free_contents
!= NULL
)
5649 free (free_contents
);
5653 /* Adjust a symbol defined by a dynamic object and referenced by a
5654 regular object. The current definition is in some section of the
5655 dynamic object, but we're not including those sections. We have to
5656 change the definition to something the rest of the link can
5660 _bfd_mips_elf_adjust_dynamic_symbol (info
, h
)
5661 struct bfd_link_info
*info
;
5662 struct elf_link_hash_entry
*h
;
5665 struct mips_elf_link_hash_entry
*hmips
;
5668 dynobj
= elf_hash_table (info
)->dynobj
;
5670 /* Make sure we know what is going on here. */
5671 BFD_ASSERT (dynobj
!= NULL
5672 && ((h
->elf_link_hash_flags
& ELF_LINK_HASH_NEEDS_PLT
)
5673 || h
->weakdef
!= NULL
5674 || ((h
->elf_link_hash_flags
5675 & ELF_LINK_HASH_DEF_DYNAMIC
) != 0
5676 && (h
->elf_link_hash_flags
5677 & ELF_LINK_HASH_REF_REGULAR
) != 0
5678 && (h
->elf_link_hash_flags
5679 & ELF_LINK_HASH_DEF_REGULAR
) == 0)));
5681 /* If this symbol is defined in a dynamic object, we need to copy
5682 any R_MIPS_32 or R_MIPS_REL32 relocs against it into the output
5684 hmips
= (struct mips_elf_link_hash_entry
*) h
;
5685 if (! info
->relocatable
5686 && hmips
->possibly_dynamic_relocs
!= 0
5687 && (h
->root
.type
== bfd_link_hash_defweak
5688 || (h
->elf_link_hash_flags
5689 & ELF_LINK_HASH_DEF_REGULAR
) == 0))
5691 mips_elf_allocate_dynamic_relocations (dynobj
,
5692 hmips
->possibly_dynamic_relocs
);
5693 if (hmips
->readonly_reloc
)
5694 /* We tell the dynamic linker that there are relocations
5695 against the text segment. */
5696 info
->flags
|= DF_TEXTREL
;
5699 /* For a function, create a stub, if allowed. */
5700 if (! hmips
->no_fn_stub
5701 && (h
->elf_link_hash_flags
& ELF_LINK_HASH_NEEDS_PLT
) != 0)
5703 if (! elf_hash_table (info
)->dynamic_sections_created
)
5706 /* If this symbol is not defined in a regular file, then set
5707 the symbol to the stub location. This is required to make
5708 function pointers compare as equal between the normal
5709 executable and the shared library. */
5710 if ((h
->elf_link_hash_flags
& ELF_LINK_HASH_DEF_REGULAR
) == 0)
5712 /* We need .stub section. */
5713 s
= bfd_get_section_by_name (dynobj
,
5714 MIPS_ELF_STUB_SECTION_NAME (dynobj
));
5715 BFD_ASSERT (s
!= NULL
);
5717 h
->root
.u
.def
.section
= s
;
5718 h
->root
.u
.def
.value
= s
->_raw_size
;
5720 /* XXX Write this stub address somewhere. */
5721 h
->plt
.offset
= s
->_raw_size
;
5723 /* Make room for this stub code. */
5724 s
->_raw_size
+= MIPS_FUNCTION_STUB_SIZE
;
5726 /* The last half word of the stub will be filled with the index
5727 of this symbol in .dynsym section. */
5731 else if ((h
->type
== STT_FUNC
)
5732 && (h
->elf_link_hash_flags
& ELF_LINK_HASH_NEEDS_PLT
) == 0)
5734 /* This will set the entry for this symbol in the GOT to 0, and
5735 the dynamic linker will take care of this. */
5736 h
->root
.u
.def
.value
= 0;
5740 /* If this is a weak symbol, and there is a real definition, the
5741 processor independent code will have arranged for us to see the
5742 real definition first, and we can just use the same value. */
5743 if (h
->weakdef
!= NULL
)
5745 BFD_ASSERT (h
->weakdef
->root
.type
== bfd_link_hash_defined
5746 || h
->weakdef
->root
.type
== bfd_link_hash_defweak
);
5747 h
->root
.u
.def
.section
= h
->weakdef
->root
.u
.def
.section
;
5748 h
->root
.u
.def
.value
= h
->weakdef
->root
.u
.def
.value
;
5752 /* This is a reference to a symbol defined by a dynamic object which
5753 is not a function. */
5758 /* This function is called after all the input files have been read,
5759 and the input sections have been assigned to output sections. We
5760 check for any mips16 stub sections that we can discard. */
5763 _bfd_mips_elf_always_size_sections (output_bfd
, info
)
5765 struct bfd_link_info
*info
;
5771 struct mips_got_info
*g
;
5773 bfd_size_type loadable_size
= 0;
5774 bfd_size_type local_gotno
;
5777 /* The .reginfo section has a fixed size. */
5778 ri
= bfd_get_section_by_name (output_bfd
, ".reginfo");
5780 bfd_set_section_size (output_bfd
, ri
,
5781 (bfd_size_type
) sizeof (Elf32_External_RegInfo
));
5783 if (! (info
->relocatable
5784 || ! mips_elf_hash_table (info
)->mips16_stubs_seen
))
5785 mips_elf_link_hash_traverse (mips_elf_hash_table (info
),
5786 mips_elf_check_mips16_stubs
,
5789 dynobj
= elf_hash_table (info
)->dynobj
;
5791 /* Relocatable links don't have it. */
5794 g
= mips_elf_got_info (dynobj
, &s
);
5798 /* Calculate the total loadable size of the output. That
5799 will give us the maximum number of GOT_PAGE entries
5801 for (sub
= info
->input_bfds
; sub
; sub
= sub
->link_next
)
5803 asection
*subsection
;
5805 for (subsection
= sub
->sections
;
5807 subsection
= subsection
->next
)
5809 if ((subsection
->flags
& SEC_ALLOC
) == 0)
5811 loadable_size
+= ((subsection
->_raw_size
+ 0xf)
5812 &~ (bfd_size_type
) 0xf);
5816 /* There has to be a global GOT entry for every symbol with
5817 a dynamic symbol table index of DT_MIPS_GOTSYM or
5818 higher. Therefore, it make sense to put those symbols
5819 that need GOT entries at the end of the symbol table. We
5821 if (! mips_elf_sort_hash_table (info
, 1))
5824 if (g
->global_gotsym
!= NULL
)
5825 i
= elf_hash_table (info
)->dynsymcount
- g
->global_gotsym
->dynindx
;
5827 /* If there are no global symbols, or none requiring
5828 relocations, then GLOBAL_GOTSYM will be NULL. */
5831 /* In the worst case, we'll get one stub per dynamic symbol, plus
5832 one to account for the dummy entry at the end required by IRIX
5834 loadable_size
+= MIPS_FUNCTION_STUB_SIZE
* (i
+ 1);
5836 /* Assume there are two loadable segments consisting of
5837 contiguous sections. Is 5 enough? */
5838 local_gotno
= (loadable_size
>> 16) + 5;
5840 g
->local_gotno
+= local_gotno
;
5841 s
->_raw_size
+= g
->local_gotno
* MIPS_ELF_GOT_SIZE (output_bfd
);
5843 g
->global_gotno
= i
;
5844 s
->_raw_size
+= i
* MIPS_ELF_GOT_SIZE (output_bfd
);
5846 if (s
->_raw_size
> MIPS_ELF_GOT_MAX_SIZE (output_bfd
)
5847 && ! mips_elf_multi_got (output_bfd
, info
, g
, s
, local_gotno
))
5853 /* Set the sizes of the dynamic sections. */
5856 _bfd_mips_elf_size_dynamic_sections (output_bfd
, info
)
5858 struct bfd_link_info
*info
;
5862 bfd_boolean reltext
;
5864 dynobj
= elf_hash_table (info
)->dynobj
;
5865 BFD_ASSERT (dynobj
!= NULL
);
5867 if (elf_hash_table (info
)->dynamic_sections_created
)
5869 /* Set the contents of the .interp section to the interpreter. */
5872 s
= bfd_get_section_by_name (dynobj
, ".interp");
5873 BFD_ASSERT (s
!= NULL
);
5875 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd
)) + 1;
5877 = (bfd_byte
*) ELF_DYNAMIC_INTERPRETER (output_bfd
);
5881 /* The check_relocs and adjust_dynamic_symbol entry points have
5882 determined the sizes of the various dynamic sections. Allocate
5885 for (s
= dynobj
->sections
; s
!= NULL
; s
= s
->next
)
5890 /* It's OK to base decisions on the section name, because none
5891 of the dynobj section names depend upon the input files. */
5892 name
= bfd_get_section_name (dynobj
, s
);
5894 if ((s
->flags
& SEC_LINKER_CREATED
) == 0)
5899 if (strncmp (name
, ".rel", 4) == 0)
5901 if (s
->_raw_size
== 0)
5903 /* We only strip the section if the output section name
5904 has the same name. Otherwise, there might be several
5905 input sections for this output section. FIXME: This
5906 code is probably not needed these days anyhow, since
5907 the linker now does not create empty output sections. */
5908 if (s
->output_section
!= NULL
5910 bfd_get_section_name (s
->output_section
->owner
,
5911 s
->output_section
)) == 0)
5916 const char *outname
;
5919 /* If this relocation section applies to a read only
5920 section, then we probably need a DT_TEXTREL entry.
5921 If the relocation section is .rel.dyn, we always
5922 assert a DT_TEXTREL entry rather than testing whether
5923 there exists a relocation to a read only section or
5925 outname
= bfd_get_section_name (output_bfd
,
5927 target
= bfd_get_section_by_name (output_bfd
, outname
+ 4);
5929 && (target
->flags
& SEC_READONLY
) != 0
5930 && (target
->flags
& SEC_ALLOC
) != 0)
5931 || strcmp (outname
, ".rel.dyn") == 0)
5934 /* We use the reloc_count field as a counter if we need
5935 to copy relocs into the output file. */
5936 if (strcmp (name
, ".rel.dyn") != 0)
5939 /* If combreloc is enabled, elf_link_sort_relocs() will
5940 sort relocations, but in a different way than we do,
5941 and before we're done creating relocations. Also, it
5942 will move them around between input sections'
5943 relocation's contents, so our sorting would be
5944 broken, so don't let it run. */
5945 info
->combreloc
= 0;
5948 else if (strncmp (name
, ".got", 4) == 0)
5950 /* _bfd_mips_elf_always_size_sections() has already done
5951 most of the work, but some symbols may have been mapped
5952 to versions that we must now resolve in the got_entries
5954 struct mips_got_info
*gg
= mips_elf_got_info (dynobj
, NULL
);
5955 struct mips_got_info
*g
= gg
;
5956 struct mips_elf_set_global_got_offset_arg set_got_offset_arg
;
5957 unsigned int needed_relocs
= 0;
5961 set_got_offset_arg
.value
= MIPS_ELF_GOT_SIZE (output_bfd
);
5962 set_got_offset_arg
.info
= info
;
5964 mips_elf_resolve_final_got_entries (gg
);
5965 for (g
= gg
->next
; g
&& g
->next
!= gg
; g
= g
->next
)
5967 unsigned int save_assign
;
5969 mips_elf_resolve_final_got_entries (g
);
5971 /* Assign offsets to global GOT entries. */
5972 save_assign
= g
->assigned_gotno
;
5973 g
->assigned_gotno
= g
->local_gotno
;
5974 set_got_offset_arg
.g
= g
;
5975 set_got_offset_arg
.needed_relocs
= 0;
5976 htab_traverse (g
->got_entries
,
5977 mips_elf_set_global_got_offset
,
5978 &set_got_offset_arg
);
5979 needed_relocs
+= set_got_offset_arg
.needed_relocs
;
5980 BFD_ASSERT (g
->assigned_gotno
- g
->local_gotno
5981 <= g
->global_gotno
);
5983 g
->assigned_gotno
= save_assign
;
5986 needed_relocs
+= g
->local_gotno
- g
->assigned_gotno
;
5987 BFD_ASSERT (g
->assigned_gotno
== g
->next
->local_gotno
5988 + g
->next
->global_gotno
5989 + MIPS_RESERVED_GOTNO
);
5994 mips_elf_allocate_dynamic_relocations (dynobj
, needed_relocs
);
5997 else if (strcmp (name
, MIPS_ELF_STUB_SECTION_NAME (output_bfd
)) == 0)
5999 /* IRIX rld assumes that the function stub isn't at the end
6000 of .text section. So put a dummy. XXX */
6001 s
->_raw_size
+= MIPS_FUNCTION_STUB_SIZE
;
6003 else if (! info
->shared
6004 && ! mips_elf_hash_table (info
)->use_rld_obj_head
6005 && strncmp (name
, ".rld_map", 8) == 0)
6007 /* We add a room for __rld_map. It will be filled in by the
6008 rtld to contain a pointer to the _r_debug structure. */
6011 else if (SGI_COMPAT (output_bfd
)
6012 && strncmp (name
, ".compact_rel", 12) == 0)
6013 s
->_raw_size
+= mips_elf_hash_table (info
)->compact_rel_size
;
6014 else if (strncmp (name
, ".init", 5) != 0)
6016 /* It's not one of our sections, so don't allocate space. */
6022 _bfd_strip_section_from_output (info
, s
);
6026 /* Allocate memory for the section contents. */
6027 s
->contents
= (bfd_byte
*) bfd_zalloc (dynobj
, s
->_raw_size
);
6028 if (s
->contents
== NULL
&& s
->_raw_size
!= 0)
6030 bfd_set_error (bfd_error_no_memory
);
6035 if (elf_hash_table (info
)->dynamic_sections_created
)
6037 /* Add some entries to the .dynamic section. We fill in the
6038 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
6039 must add the entries now so that we get the correct size for
6040 the .dynamic section. The DT_DEBUG entry is filled in by the
6041 dynamic linker and used by the debugger. */
6044 /* SGI object has the equivalence of DT_DEBUG in the
6045 DT_MIPS_RLD_MAP entry. */
6046 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_RLD_MAP
, 0))
6048 if (!SGI_COMPAT (output_bfd
))
6050 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_DEBUG
, 0))
6056 /* Shared libraries on traditional mips have DT_DEBUG. */
6057 if (!SGI_COMPAT (output_bfd
))
6059 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_DEBUG
, 0))
6064 if (reltext
&& SGI_COMPAT (output_bfd
))
6065 info
->flags
|= DF_TEXTREL
;
6067 if ((info
->flags
& DF_TEXTREL
) != 0)
6069 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_TEXTREL
, 0))
6073 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_PLTGOT
, 0))
6076 if (mips_elf_rel_dyn_section (dynobj
, FALSE
))
6078 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_REL
, 0))
6081 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_RELSZ
, 0))
6084 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_RELENT
, 0))
6088 if (SGI_COMPAT (output_bfd
))
6090 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_CONFLICTNO
, 0))
6094 if (SGI_COMPAT (output_bfd
))
6096 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_LIBLISTNO
, 0))
6100 if (bfd_get_section_by_name (dynobj
, ".conflict") != NULL
)
6102 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_CONFLICT
, 0))
6105 s
= bfd_get_section_by_name (dynobj
, ".liblist");
6106 BFD_ASSERT (s
!= NULL
);
6108 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_LIBLIST
, 0))
6112 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_RLD_VERSION
, 0))
6115 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_FLAGS
, 0))
6119 /* Time stamps in executable files are a bad idea. */
6120 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_TIME_STAMP
, 0))
6125 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_ICHECKSUM
, 0))
6130 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_IVERSION
, 0))
6134 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_BASE_ADDRESS
, 0))
6137 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_LOCAL_GOTNO
, 0))
6140 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_SYMTABNO
, 0))
6143 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_UNREFEXTNO
, 0))
6146 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_GOTSYM
, 0))
6149 if (IRIX_COMPAT (dynobj
) == ict_irix5
6150 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_HIPAGENO
, 0))
6153 if (IRIX_COMPAT (dynobj
) == ict_irix6
6154 && (bfd_get_section_by_name
6155 (dynobj
, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj
)))
6156 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_OPTIONS
, 0))
6163 /* Relocate a MIPS ELF section. */
6166 _bfd_mips_elf_relocate_section (output_bfd
, info
, input_bfd
, input_section
,
6167 contents
, relocs
, local_syms
, local_sections
)
6169 struct bfd_link_info
*info
;
6171 asection
*input_section
;
6173 Elf_Internal_Rela
*relocs
;
6174 Elf_Internal_Sym
*local_syms
;
6175 asection
**local_sections
;
6177 Elf_Internal_Rela
*rel
;
6178 const Elf_Internal_Rela
*relend
;
6180 bfd_boolean use_saved_addend_p
= FALSE
;
6181 const struct elf_backend_data
*bed
;
6183 bed
= get_elf_backend_data (output_bfd
);
6184 relend
= relocs
+ input_section
->reloc_count
* bed
->s
->int_rels_per_ext_rel
;
6185 for (rel
= relocs
; rel
< relend
; ++rel
)
6189 reloc_howto_type
*howto
;
6190 bfd_boolean require_jalx
;
6191 /* TRUE if the relocation is a RELA relocation, rather than a
6193 bfd_boolean rela_relocation_p
= TRUE
;
6194 unsigned int r_type
= ELF_R_TYPE (output_bfd
, rel
->r_info
);
6195 const char * msg
= (const char *) NULL
;
6197 /* Find the relocation howto for this relocation. */
6198 if (r_type
== R_MIPS_64
&& ! NEWABI_P (input_bfd
))
6200 /* Some 32-bit code uses R_MIPS_64. In particular, people use
6201 64-bit code, but make sure all their addresses are in the
6202 lowermost or uppermost 32-bit section of the 64-bit address
6203 space. Thus, when they use an R_MIPS_64 they mean what is
6204 usually meant by R_MIPS_32, with the exception that the
6205 stored value is sign-extended to 64 bits. */
6206 howto
= MIPS_ELF_RTYPE_TO_HOWTO (input_bfd
, R_MIPS_32
, FALSE
);
6208 /* On big-endian systems, we need to lie about the position
6210 if (bfd_big_endian (input_bfd
))
6214 /* NewABI defaults to RELA relocations. */
6215 howto
= MIPS_ELF_RTYPE_TO_HOWTO (input_bfd
, r_type
,
6216 NEWABI_P (input_bfd
)
6217 && (MIPS_RELOC_RELA_P
6218 (input_bfd
, input_section
,
6221 if (!use_saved_addend_p
)
6223 Elf_Internal_Shdr
*rel_hdr
;
6225 /* If these relocations were originally of the REL variety,
6226 we must pull the addend out of the field that will be
6227 relocated. Otherwise, we simply use the contents of the
6228 RELA relocation. To determine which flavor or relocation
6229 this is, we depend on the fact that the INPUT_SECTION's
6230 REL_HDR is read before its REL_HDR2. */
6231 rel_hdr
= &elf_section_data (input_section
)->rel_hdr
;
6232 if ((size_t) (rel
- relocs
)
6233 >= (NUM_SHDR_ENTRIES (rel_hdr
) * bed
->s
->int_rels_per_ext_rel
))
6234 rel_hdr
= elf_section_data (input_section
)->rel_hdr2
;
6235 if (rel_hdr
->sh_entsize
== MIPS_ELF_REL_SIZE (input_bfd
))
6237 /* Note that this is a REL relocation. */
6238 rela_relocation_p
= FALSE
;
6240 /* Get the addend, which is stored in the input file. */
6241 addend
= mips_elf_obtain_contents (howto
, rel
, input_bfd
,
6243 addend
&= howto
->src_mask
;
6244 addend
<<= howto
->rightshift
;
6246 /* For some kinds of relocations, the ADDEND is a
6247 combination of the addend stored in two different
6249 if (r_type
== R_MIPS_HI16
6250 || r_type
== R_MIPS_GNU_REL_HI16
6251 || (r_type
== R_MIPS_GOT16
6252 && mips_elf_local_relocation_p (input_bfd
, rel
,
6253 local_sections
, FALSE
)))
6256 const Elf_Internal_Rela
*lo16_relocation
;
6257 reloc_howto_type
*lo16_howto
;
6260 /* The combined value is the sum of the HI16 addend,
6261 left-shifted by sixteen bits, and the LO16
6262 addend, sign extended. (Usually, the code does
6263 a `lui' of the HI16 value, and then an `addiu' of
6266 Scan ahead to find a matching LO16 relocation. */
6267 if (r_type
== R_MIPS_GNU_REL_HI16
)
6268 lo
= R_MIPS_GNU_REL_LO16
;
6271 lo16_relocation
= mips_elf_next_relocation (input_bfd
, lo
,
6273 if (lo16_relocation
== NULL
)
6276 /* Obtain the addend kept there. */
6277 lo16_howto
= MIPS_ELF_RTYPE_TO_HOWTO (input_bfd
, lo
, FALSE
);
6278 l
= mips_elf_obtain_contents (lo16_howto
, lo16_relocation
,
6279 input_bfd
, contents
);
6280 l
&= lo16_howto
->src_mask
;
6281 l
<<= lo16_howto
->rightshift
;
6282 l
= _bfd_mips_elf_sign_extend (l
, 16);
6286 /* Compute the combined addend. */
6289 /* If PC-relative, subtract the difference between the
6290 address of the LO part of the reloc and the address of
6291 the HI part. The relocation is relative to the LO
6292 part, but mips_elf_calculate_relocation() doesn't
6293 know its address or the difference from the HI part, so
6294 we subtract that difference here. See also the
6295 comment in mips_elf_calculate_relocation(). */
6296 if (r_type
== R_MIPS_GNU_REL_HI16
)
6297 addend
-= (lo16_relocation
->r_offset
- rel
->r_offset
);
6299 else if (r_type
== R_MIPS16_GPREL
)
6301 /* The addend is scrambled in the object file. See
6302 mips_elf_perform_relocation for details on the
6304 addend
= (((addend
& 0x1f0000) >> 5)
6305 | ((addend
& 0x7e00000) >> 16)
6310 addend
= rel
->r_addend
;
6313 if (info
->relocatable
)
6315 Elf_Internal_Sym
*sym
;
6316 unsigned long r_symndx
;
6318 if (r_type
== R_MIPS_64
&& ! NEWABI_P (output_bfd
)
6319 && bfd_big_endian (input_bfd
))
6322 /* Since we're just relocating, all we need to do is copy
6323 the relocations back out to the object file, unless
6324 they're against a section symbol, in which case we need
6325 to adjust by the section offset, or unless they're GP
6326 relative in which case we need to adjust by the amount
6327 that we're adjusting GP in this relocatable object. */
6329 if (! mips_elf_local_relocation_p (input_bfd
, rel
, local_sections
,
6331 /* There's nothing to do for non-local relocations. */
6334 if (r_type
== R_MIPS16_GPREL
6335 || r_type
== R_MIPS_GPREL16
6336 || r_type
== R_MIPS_GPREL32
6337 || r_type
== R_MIPS_LITERAL
)
6338 addend
-= (_bfd_get_gp_value (output_bfd
)
6339 - _bfd_get_gp_value (input_bfd
));
6341 r_symndx
= ELF_R_SYM (output_bfd
, rel
->r_info
);
6342 sym
= local_syms
+ r_symndx
;
6343 if (ELF_ST_TYPE (sym
->st_info
) == STT_SECTION
)
6344 /* Adjust the addend appropriately. */
6345 addend
+= local_sections
[r_symndx
]->output_offset
;
6347 if (howto
->partial_inplace
)
6349 /* If the relocation is for a R_MIPS_HI16 or R_MIPS_GOT16,
6350 then we only want to write out the high-order 16 bits.
6351 The subsequent R_MIPS_LO16 will handle the low-order bits.
6353 if (r_type
== R_MIPS_HI16
|| r_type
== R_MIPS_GOT16
6354 || r_type
== R_MIPS_GNU_REL_HI16
)
6355 addend
= mips_elf_high (addend
);
6356 else if (r_type
== R_MIPS_HIGHER
)
6357 addend
= mips_elf_higher (addend
);
6358 else if (r_type
== R_MIPS_HIGHEST
)
6359 addend
= mips_elf_highest (addend
);
6362 if (rela_relocation_p
)
6363 /* If this is a RELA relocation, just update the addend.
6364 We have to cast away constness for REL. */
6365 rel
->r_addend
= addend
;
6368 /* Otherwise, we have to write the value back out. Note
6369 that we use the source mask, rather than the
6370 destination mask because the place to which we are
6371 writing will be source of the addend in the final
6373 addend
>>= howto
->rightshift
;
6374 addend
&= howto
->src_mask
;
6376 if (r_type
== R_MIPS_64
&& ! NEWABI_P (output_bfd
))
6377 /* See the comment above about using R_MIPS_64 in the 32-bit
6378 ABI. Here, we need to update the addend. It would be
6379 possible to get away with just using the R_MIPS_32 reloc
6380 but for endianness. */
6386 if (addend
& ((bfd_vma
) 1 << 31))
6388 sign_bits
= ((bfd_vma
) 1 << 32) - 1;
6395 /* If we don't know that we have a 64-bit type,
6396 do two separate stores. */
6397 if (bfd_big_endian (input_bfd
))
6399 /* Store the sign-bits (which are most significant)
6401 low_bits
= sign_bits
;
6407 high_bits
= sign_bits
;
6409 bfd_put_32 (input_bfd
, low_bits
,
6410 contents
+ rel
->r_offset
);
6411 bfd_put_32 (input_bfd
, high_bits
,
6412 contents
+ rel
->r_offset
+ 4);
6416 if (! mips_elf_perform_relocation (info
, howto
, rel
, addend
,
6417 input_bfd
, input_section
,
6422 /* Go on to the next relocation. */
6426 /* In the N32 and 64-bit ABIs there may be multiple consecutive
6427 relocations for the same offset. In that case we are
6428 supposed to treat the output of each relocation as the addend
6430 if (rel
+ 1 < relend
6431 && rel
->r_offset
== rel
[1].r_offset
6432 && ELF_R_TYPE (input_bfd
, rel
[1].r_info
) != R_MIPS_NONE
)
6433 use_saved_addend_p
= TRUE
;
6435 use_saved_addend_p
= FALSE
;
6437 addend
>>= howto
->rightshift
;
6439 /* Figure out what value we are supposed to relocate. */
6440 switch (mips_elf_calculate_relocation (output_bfd
, input_bfd
,
6441 input_section
, info
, rel
,
6442 addend
, howto
, local_syms
,
6443 local_sections
, &value
,
6444 &name
, &require_jalx
,
6445 use_saved_addend_p
))
6447 case bfd_reloc_continue
:
6448 /* There's nothing to do. */
6451 case bfd_reloc_undefined
:
6452 /* mips_elf_calculate_relocation already called the
6453 undefined_symbol callback. There's no real point in
6454 trying to perform the relocation at this point, so we
6455 just skip ahead to the next relocation. */
6458 case bfd_reloc_notsupported
:
6459 msg
= _("internal error: unsupported relocation error");
6460 info
->callbacks
->warning
6461 (info
, msg
, name
, input_bfd
, input_section
, rel
->r_offset
);
6464 case bfd_reloc_overflow
:
6465 if (use_saved_addend_p
)
6466 /* Ignore overflow until we reach the last relocation for
6467 a given location. */
6471 BFD_ASSERT (name
!= NULL
);
6472 if (! ((*info
->callbacks
->reloc_overflow
)
6473 (info
, name
, howto
->name
, (bfd_vma
) 0,
6474 input_bfd
, input_section
, rel
->r_offset
)))
6487 /* If we've got another relocation for the address, keep going
6488 until we reach the last one. */
6489 if (use_saved_addend_p
)
6495 if (r_type
== R_MIPS_64
&& ! NEWABI_P (output_bfd
))
6496 /* See the comment above about using R_MIPS_64 in the 32-bit
6497 ABI. Until now, we've been using the HOWTO for R_MIPS_32;
6498 that calculated the right value. Now, however, we
6499 sign-extend the 32-bit result to 64-bits, and store it as a
6500 64-bit value. We are especially generous here in that we
6501 go to extreme lengths to support this usage on systems with
6502 only a 32-bit VMA. */
6508 if (value
& ((bfd_vma
) 1 << 31))
6510 sign_bits
= ((bfd_vma
) 1 << 32) - 1;
6517 /* If we don't know that we have a 64-bit type,
6518 do two separate stores. */
6519 if (bfd_big_endian (input_bfd
))
6521 /* Undo what we did above. */
6523 /* Store the sign-bits (which are most significant)
6525 low_bits
= sign_bits
;
6531 high_bits
= sign_bits
;
6533 bfd_put_32 (input_bfd
, low_bits
,
6534 contents
+ rel
->r_offset
);
6535 bfd_put_32 (input_bfd
, high_bits
,
6536 contents
+ rel
->r_offset
+ 4);
6540 /* Actually perform the relocation. */
6541 if (! mips_elf_perform_relocation (info
, howto
, rel
, value
,
6542 input_bfd
, input_section
,
6543 contents
, require_jalx
))
6550 /* If NAME is one of the special IRIX6 symbols defined by the linker,
6551 adjust it appropriately now. */
6554 mips_elf_irix6_finish_dynamic_symbol (abfd
, name
, sym
)
6555 bfd
*abfd ATTRIBUTE_UNUSED
;
6557 Elf_Internal_Sym
*sym
;
6559 /* The linker script takes care of providing names and values for
6560 these, but we must place them into the right sections. */
6561 static const char* const text_section_symbols
[] = {
6564 "__dso_displacement",
6566 "__program_header_table",
6570 static const char* const data_section_symbols
[] = {
6578 const char* const *p
;
6581 for (i
= 0; i
< 2; ++i
)
6582 for (p
= (i
== 0) ? text_section_symbols
: data_section_symbols
;
6585 if (strcmp (*p
, name
) == 0)
6587 /* All of these symbols are given type STT_SECTION by the
6589 sym
->st_info
= ELF_ST_INFO (STB_GLOBAL
, STT_SECTION
);
6590 sym
->st_other
= STO_PROTECTED
;
6592 /* The IRIX linker puts these symbols in special sections. */
6594 sym
->st_shndx
= SHN_MIPS_TEXT
;
6596 sym
->st_shndx
= SHN_MIPS_DATA
;
6602 /* Finish up dynamic symbol handling. We set the contents of various
6603 dynamic sections here. */
6606 _bfd_mips_elf_finish_dynamic_symbol (output_bfd
, info
, h
, sym
)
6608 struct bfd_link_info
*info
;
6609 struct elf_link_hash_entry
*h
;
6610 Elf_Internal_Sym
*sym
;
6615 struct mips_got_info
*g
, *gg
;
6618 dynobj
= elf_hash_table (info
)->dynobj
;
6619 gval
= sym
->st_value
;
6621 if (h
->plt
.offset
!= (bfd_vma
) -1)
6624 bfd_byte stub
[MIPS_FUNCTION_STUB_SIZE
];
6626 /* This symbol has a stub. Set it up. */
6628 BFD_ASSERT (h
->dynindx
!= -1);
6630 s
= bfd_get_section_by_name (dynobj
,
6631 MIPS_ELF_STUB_SECTION_NAME (dynobj
));
6632 BFD_ASSERT (s
!= NULL
);
6634 /* FIXME: Can h->dynindex be more than 64K? */
6635 if (h
->dynindx
& 0xffff0000)
6638 /* Fill the stub. */
6639 bfd_put_32 (output_bfd
, STUB_LW (output_bfd
), stub
);
6640 bfd_put_32 (output_bfd
, STUB_MOVE (output_bfd
), stub
+ 4);
6641 bfd_put_32 (output_bfd
, STUB_JALR
, stub
+ 8);
6642 bfd_put_32 (output_bfd
, STUB_LI16 (output_bfd
) + h
->dynindx
, stub
+ 12);
6644 BFD_ASSERT (h
->plt
.offset
<= s
->_raw_size
);
6645 memcpy (s
->contents
+ h
->plt
.offset
, stub
, MIPS_FUNCTION_STUB_SIZE
);
6647 /* Mark the symbol as undefined. plt.offset != -1 occurs
6648 only for the referenced symbol. */
6649 sym
->st_shndx
= SHN_UNDEF
;
6651 /* The run-time linker uses the st_value field of the symbol
6652 to reset the global offset table entry for this external
6653 to its stub address when unlinking a shared object. */
6654 gval
= s
->output_section
->vma
+ s
->output_offset
+ h
->plt
.offset
;
6655 sym
->st_value
= gval
;
6658 BFD_ASSERT (h
->dynindx
!= -1
6659 || (h
->elf_link_hash_flags
& ELF_LINK_FORCED_LOCAL
) != 0);
6661 sgot
= mips_elf_got_section (dynobj
, FALSE
);
6662 BFD_ASSERT (sgot
!= NULL
);
6663 BFD_ASSERT (mips_elf_section_data (sgot
) != NULL
);
6664 g
= mips_elf_section_data (sgot
)->u
.got_info
;
6665 BFD_ASSERT (g
!= NULL
);
6667 /* Run through the global symbol table, creating GOT entries for all
6668 the symbols that need them. */
6669 if (g
->global_gotsym
!= NULL
6670 && h
->dynindx
>= g
->global_gotsym
->dynindx
)
6675 value
= sym
->st_value
;
6676 offset
= mips_elf_global_got_index (dynobj
, output_bfd
, h
);
6677 MIPS_ELF_PUT_WORD (output_bfd
, value
, sgot
->contents
+ offset
);
6680 if (g
->next
&& h
->dynindx
!= -1)
6682 struct mips_got_entry e
, *p
;
6685 Elf_Internal_Rela rel
[3];
6690 e
.abfd
= output_bfd
;
6692 e
.d
.h
= (struct mips_elf_link_hash_entry
*)h
;
6695 || h
->root
.type
== bfd_link_hash_undefined
6696 || h
->root
.type
== bfd_link_hash_undefweak
)
6698 else if (sym
->st_value
)
6699 value
= sym
->st_value
;
6701 value
= h
->root
.u
.def
.value
;
6703 memset (rel
, 0, sizeof (rel
));
6704 rel
[0].r_info
= ELF_R_INFO (output_bfd
, 0, R_MIPS_REL32
);
6706 for (g
= g
->next
; g
->next
!= gg
; g
= g
->next
)
6709 && (p
= (struct mips_got_entry
*) htab_find (g
->got_entries
,
6713 rel
[0].r_offset
= rel
[1].r_offset
= rel
[2].r_offset
= offset
;
6715 MIPS_ELF_PUT_WORD (output_bfd
, value
, sgot
->contents
+ offset
);
6718 || (elf_hash_table (info
)->dynamic_sections_created
6720 && ((p
->d
.h
->root
.elf_link_hash_flags
6721 & ELF_LINK_HASH_DEF_DYNAMIC
) != 0)
6722 && ((p
->d
.h
->root
.elf_link_hash_flags
6723 & ELF_LINK_HASH_DEF_REGULAR
) == 0)))
6724 && ! (mips_elf_create_dynamic_relocation
6725 (output_bfd
, info
, rel
,
6726 e
.d
.h
, NULL
, value
, &addend
, sgot
)))
6728 BFD_ASSERT (addend
== 0);
6733 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
6734 name
= h
->root
.root
.string
;
6735 if (strcmp (name
, "_DYNAMIC") == 0
6736 || strcmp (name
, "_GLOBAL_OFFSET_TABLE_") == 0)
6737 sym
->st_shndx
= SHN_ABS
;
6738 else if (strcmp (name
, "_DYNAMIC_LINK") == 0
6739 || strcmp (name
, "_DYNAMIC_LINKING") == 0)
6741 sym
->st_shndx
= SHN_ABS
;
6742 sym
->st_info
= ELF_ST_INFO (STB_GLOBAL
, STT_SECTION
);
6745 else if (strcmp (name
, "_gp_disp") == 0 && ! NEWABI_P (output_bfd
))
6747 sym
->st_shndx
= SHN_ABS
;
6748 sym
->st_info
= ELF_ST_INFO (STB_GLOBAL
, STT_SECTION
);
6749 sym
->st_value
= elf_gp (output_bfd
);
6751 else if (SGI_COMPAT (output_bfd
))
6753 if (strcmp (name
, mips_elf_dynsym_rtproc_names
[0]) == 0
6754 || strcmp (name
, mips_elf_dynsym_rtproc_names
[1]) == 0)
6756 sym
->st_info
= ELF_ST_INFO (STB_GLOBAL
, STT_SECTION
);
6757 sym
->st_other
= STO_PROTECTED
;
6759 sym
->st_shndx
= SHN_MIPS_DATA
;
6761 else if (strcmp (name
, mips_elf_dynsym_rtproc_names
[2]) == 0)
6763 sym
->st_info
= ELF_ST_INFO (STB_GLOBAL
, STT_SECTION
);
6764 sym
->st_other
= STO_PROTECTED
;
6765 sym
->st_value
= mips_elf_hash_table (info
)->procedure_count
;
6766 sym
->st_shndx
= SHN_ABS
;
6768 else if (sym
->st_shndx
!= SHN_UNDEF
&& sym
->st_shndx
!= SHN_ABS
)
6770 if (h
->type
== STT_FUNC
)
6771 sym
->st_shndx
= SHN_MIPS_TEXT
;
6772 else if (h
->type
== STT_OBJECT
)
6773 sym
->st_shndx
= SHN_MIPS_DATA
;
6777 /* Handle the IRIX6-specific symbols. */
6778 if (IRIX_COMPAT (output_bfd
) == ict_irix6
)
6779 mips_elf_irix6_finish_dynamic_symbol (output_bfd
, name
, sym
);
6783 if (! mips_elf_hash_table (info
)->use_rld_obj_head
6784 && (strcmp (name
, "__rld_map") == 0
6785 || strcmp (name
, "__RLD_MAP") == 0))
6787 asection
*s
= bfd_get_section_by_name (dynobj
, ".rld_map");
6788 BFD_ASSERT (s
!= NULL
);
6789 sym
->st_value
= s
->output_section
->vma
+ s
->output_offset
;
6790 bfd_put_32 (output_bfd
, (bfd_vma
) 0, s
->contents
);
6791 if (mips_elf_hash_table (info
)->rld_value
== 0)
6792 mips_elf_hash_table (info
)->rld_value
= sym
->st_value
;
6794 else if (mips_elf_hash_table (info
)->use_rld_obj_head
6795 && strcmp (name
, "__rld_obj_head") == 0)
6797 /* IRIX6 does not use a .rld_map section. */
6798 if (IRIX_COMPAT (output_bfd
) == ict_irix5
6799 || IRIX_COMPAT (output_bfd
) == ict_none
)
6800 BFD_ASSERT (bfd_get_section_by_name (dynobj
, ".rld_map")
6802 mips_elf_hash_table (info
)->rld_value
= sym
->st_value
;
6806 /* If this is a mips16 symbol, force the value to be even. */
6807 if (sym
->st_other
== STO_MIPS16
6808 && (sym
->st_value
& 1) != 0)
6814 /* Finish up the dynamic sections. */
6817 _bfd_mips_elf_finish_dynamic_sections (output_bfd
, info
)
6819 struct bfd_link_info
*info
;
6824 struct mips_got_info
*gg
, *g
;
6826 dynobj
= elf_hash_table (info
)->dynobj
;
6828 sdyn
= bfd_get_section_by_name (dynobj
, ".dynamic");
6830 sgot
= mips_elf_got_section (dynobj
, FALSE
);
6835 BFD_ASSERT (mips_elf_section_data (sgot
) != NULL
);
6836 gg
= mips_elf_section_data (sgot
)->u
.got_info
;
6837 BFD_ASSERT (gg
!= NULL
);
6838 g
= mips_elf_got_for_ibfd (gg
, output_bfd
);
6839 BFD_ASSERT (g
!= NULL
);
6842 if (elf_hash_table (info
)->dynamic_sections_created
)
6846 BFD_ASSERT (sdyn
!= NULL
);
6847 BFD_ASSERT (g
!= NULL
);
6849 for (b
= sdyn
->contents
;
6850 b
< sdyn
->contents
+ sdyn
->_raw_size
;
6851 b
+= MIPS_ELF_DYN_SIZE (dynobj
))
6853 Elf_Internal_Dyn dyn
;
6857 bfd_boolean swap_out_p
;
6859 /* Read in the current dynamic entry. */
6860 (*get_elf_backend_data (dynobj
)->s
->swap_dyn_in
) (dynobj
, b
, &dyn
);
6862 /* Assume that we're going to modify it and write it out. */
6868 s
= mips_elf_rel_dyn_section (dynobj
, FALSE
);
6869 BFD_ASSERT (s
!= NULL
);
6870 dyn
.d_un
.d_val
= MIPS_ELF_REL_SIZE (dynobj
);
6874 /* Rewrite DT_STRSZ. */
6876 _bfd_elf_strtab_size (elf_hash_table (info
)->dynstr
);
6882 case DT_MIPS_CONFLICT
:
6885 case DT_MIPS_LIBLIST
:
6888 s
= bfd_get_section_by_name (output_bfd
, name
);
6889 BFD_ASSERT (s
!= NULL
);
6890 dyn
.d_un
.d_ptr
= s
->vma
;
6893 case DT_MIPS_RLD_VERSION
:
6894 dyn
.d_un
.d_val
= 1; /* XXX */
6898 dyn
.d_un
.d_val
= RHF_NOTPOT
; /* XXX */
6901 case DT_MIPS_CONFLICTNO
:
6903 elemsize
= sizeof (Elf32_Conflict
);
6906 case DT_MIPS_LIBLISTNO
:
6908 elemsize
= sizeof (Elf32_Lib
);
6910 s
= bfd_get_section_by_name (output_bfd
, name
);
6913 if (s
->_cooked_size
!= 0)
6914 dyn
.d_un
.d_val
= s
->_cooked_size
/ elemsize
;
6916 dyn
.d_un
.d_val
= s
->_raw_size
/ elemsize
;
6922 case DT_MIPS_TIME_STAMP
:
6923 time ((time_t *) &dyn
.d_un
.d_val
);
6926 case DT_MIPS_ICHECKSUM
:
6931 case DT_MIPS_IVERSION
:
6936 case DT_MIPS_BASE_ADDRESS
:
6937 s
= output_bfd
->sections
;
6938 BFD_ASSERT (s
!= NULL
);
6939 dyn
.d_un
.d_ptr
= s
->vma
& ~(bfd_vma
) 0xffff;
6942 case DT_MIPS_LOCAL_GOTNO
:
6943 dyn
.d_un
.d_val
= g
->local_gotno
;
6946 case DT_MIPS_UNREFEXTNO
:
6947 /* The index into the dynamic symbol table which is the
6948 entry of the first external symbol that is not
6949 referenced within the same object. */
6950 dyn
.d_un
.d_val
= bfd_count_sections (output_bfd
) + 1;
6953 case DT_MIPS_GOTSYM
:
6954 if (gg
->global_gotsym
)
6956 dyn
.d_un
.d_val
= gg
->global_gotsym
->dynindx
;
6959 /* In case if we don't have global got symbols we default
6960 to setting DT_MIPS_GOTSYM to the same value as
6961 DT_MIPS_SYMTABNO, so we just fall through. */
6963 case DT_MIPS_SYMTABNO
:
6965 elemsize
= MIPS_ELF_SYM_SIZE (output_bfd
);
6966 s
= bfd_get_section_by_name (output_bfd
, name
);
6967 BFD_ASSERT (s
!= NULL
);
6969 if (s
->_cooked_size
!= 0)
6970 dyn
.d_un
.d_val
= s
->_cooked_size
/ elemsize
;
6972 dyn
.d_un
.d_val
= s
->_raw_size
/ elemsize
;
6975 case DT_MIPS_HIPAGENO
:
6976 dyn
.d_un
.d_val
= g
->local_gotno
- MIPS_RESERVED_GOTNO
;
6979 case DT_MIPS_RLD_MAP
:
6980 dyn
.d_un
.d_ptr
= mips_elf_hash_table (info
)->rld_value
;
6983 case DT_MIPS_OPTIONS
:
6984 s
= (bfd_get_section_by_name
6985 (output_bfd
, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd
)));
6986 dyn
.d_un
.d_ptr
= s
->vma
;
6990 s
= (bfd_get_section_by_name (output_bfd
, ".msym"));
6991 dyn
.d_un
.d_ptr
= s
->vma
;
7000 (*get_elf_backend_data (dynobj
)->s
->swap_dyn_out
)
7005 /* The first entry of the global offset table will be filled at
7006 runtime. The second entry will be used by some runtime loaders.
7007 This isn't the case of IRIX rld. */
7008 if (sgot
!= NULL
&& sgot
->_raw_size
> 0)
7010 MIPS_ELF_PUT_WORD (output_bfd
, (bfd_vma
) 0, sgot
->contents
);
7011 MIPS_ELF_PUT_WORD (output_bfd
, (bfd_vma
) 0x80000000,
7012 sgot
->contents
+ MIPS_ELF_GOT_SIZE (output_bfd
));
7016 elf_section_data (sgot
->output_section
)->this_hdr
.sh_entsize
7017 = MIPS_ELF_GOT_SIZE (output_bfd
);
7019 /* Generate dynamic relocations for the non-primary gots. */
7020 if (gg
!= NULL
&& gg
->next
)
7022 Elf_Internal_Rela rel
[3];
7025 memset (rel
, 0, sizeof (rel
));
7026 rel
[0].r_info
= ELF_R_INFO (output_bfd
, 0, R_MIPS_REL32
);
7028 for (g
= gg
->next
; g
->next
!= gg
; g
= g
->next
)
7030 bfd_vma index
= g
->next
->local_gotno
+ g
->next
->global_gotno
;
7032 MIPS_ELF_PUT_WORD (output_bfd
, (bfd_vma
) 0, sgot
->contents
7033 + index
++ * MIPS_ELF_GOT_SIZE (output_bfd
));
7034 MIPS_ELF_PUT_WORD (output_bfd
, (bfd_vma
) 0x80000000, sgot
->contents
7035 + index
++ * MIPS_ELF_GOT_SIZE (output_bfd
));
7040 while (index
< g
->assigned_gotno
)
7042 rel
[0].r_offset
= rel
[1].r_offset
= rel
[2].r_offset
7043 = index
++ * MIPS_ELF_GOT_SIZE (output_bfd
);
7044 if (!(mips_elf_create_dynamic_relocation
7045 (output_bfd
, info
, rel
, NULL
,
7046 bfd_abs_section_ptr
,
7049 BFD_ASSERT (addend
== 0);
7056 Elf32_compact_rel cpt
;
7058 if (SGI_COMPAT (output_bfd
))
7060 /* Write .compact_rel section out. */
7061 s
= bfd_get_section_by_name (dynobj
, ".compact_rel");
7065 cpt
.num
= s
->reloc_count
;
7067 cpt
.offset
= (s
->output_section
->filepos
7068 + sizeof (Elf32_External_compact_rel
));
7071 bfd_elf32_swap_compact_rel_out (output_bfd
, &cpt
,
7072 ((Elf32_External_compact_rel
*)
7075 /* Clean up a dummy stub function entry in .text. */
7076 s
= bfd_get_section_by_name (dynobj
,
7077 MIPS_ELF_STUB_SECTION_NAME (dynobj
));
7080 file_ptr dummy_offset
;
7082 BFD_ASSERT (s
->_raw_size
>= MIPS_FUNCTION_STUB_SIZE
);
7083 dummy_offset
= s
->_raw_size
- MIPS_FUNCTION_STUB_SIZE
;
7084 memset (s
->contents
+ dummy_offset
, 0,
7085 MIPS_FUNCTION_STUB_SIZE
);
7090 /* We need to sort the entries of the dynamic relocation section. */
7092 s
= mips_elf_rel_dyn_section (dynobj
, FALSE
);
7095 && s
->_raw_size
> (bfd_vma
)2 * MIPS_ELF_REL_SIZE (output_bfd
))
7097 reldyn_sorting_bfd
= output_bfd
;
7099 if (ABI_64_P (output_bfd
))
7100 qsort ((Elf64_External_Rel
*) s
->contents
+ 1,
7101 (size_t) s
->reloc_count
- 1,
7102 sizeof (Elf64_Mips_External_Rel
), sort_dynamic_relocs_64
);
7104 qsort ((Elf32_External_Rel
*) s
->contents
+ 1,
7105 (size_t) s
->reloc_count
- 1,
7106 sizeof (Elf32_External_Rel
), sort_dynamic_relocs
);
7114 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags. */
7117 mips_set_isa_flags (abfd
)
7122 switch (bfd_get_mach (abfd
))
7125 case bfd_mach_mips3000
:
7126 val
= E_MIPS_ARCH_1
;
7129 case bfd_mach_mips3900
:
7130 val
= E_MIPS_ARCH_1
| E_MIPS_MACH_3900
;
7133 case bfd_mach_mips6000
:
7134 val
= E_MIPS_ARCH_2
;
7137 case bfd_mach_mips4000
:
7138 case bfd_mach_mips4300
:
7139 case bfd_mach_mips4400
:
7140 case bfd_mach_mips4600
:
7141 val
= E_MIPS_ARCH_3
;
7144 case bfd_mach_mips4010
:
7145 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_4010
;
7148 case bfd_mach_mips4100
:
7149 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_4100
;
7152 case bfd_mach_mips4111
:
7153 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_4111
;
7156 case bfd_mach_mips4120
:
7157 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_4120
;
7160 case bfd_mach_mips4650
:
7161 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_4650
;
7164 case bfd_mach_mips5400
:
7165 val
= E_MIPS_ARCH_4
| E_MIPS_MACH_5400
;
7168 case bfd_mach_mips5500
:
7169 val
= E_MIPS_ARCH_4
| E_MIPS_MACH_5500
;
7172 case bfd_mach_mips5000
:
7173 case bfd_mach_mips7000
:
7174 case bfd_mach_mips8000
:
7175 case bfd_mach_mips10000
:
7176 case bfd_mach_mips12000
:
7177 val
= E_MIPS_ARCH_4
;
7180 case bfd_mach_mips5
:
7181 val
= E_MIPS_ARCH_5
;
7184 case bfd_mach_mips_sb1
:
7185 val
= E_MIPS_ARCH_64
| E_MIPS_MACH_SB1
;
7188 case bfd_mach_mipsisa32
:
7189 val
= E_MIPS_ARCH_32
;
7192 case bfd_mach_mipsisa64
:
7193 val
= E_MIPS_ARCH_64
;
7196 case bfd_mach_mipsisa32r2
:
7197 val
= E_MIPS_ARCH_32R2
;
7200 case bfd_mach_mipsisa64r2
:
7201 val
= E_MIPS_ARCH_64R2
;
7204 elf_elfheader (abfd
)->e_flags
&= ~(EF_MIPS_ARCH
| EF_MIPS_MACH
);
7205 elf_elfheader (abfd
)->e_flags
|= val
;
7210 /* The final processing done just before writing out a MIPS ELF object
7211 file. This gets the MIPS architecture right based on the machine
7212 number. This is used by both the 32-bit and the 64-bit ABI. */
7215 _bfd_mips_elf_final_write_processing (abfd
, linker
)
7217 bfd_boolean linker ATTRIBUTE_UNUSED
;
7220 Elf_Internal_Shdr
**hdrpp
;
7224 /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
7225 is nonzero. This is for compatibility with old objects, which used
7226 a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH. */
7227 if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_MACH
) == 0)
7228 mips_set_isa_flags (abfd
);
7230 /* Set the sh_info field for .gptab sections and other appropriate
7231 info for each special section. */
7232 for (i
= 1, hdrpp
= elf_elfsections (abfd
) + 1;
7233 i
< elf_numsections (abfd
);
7236 switch ((*hdrpp
)->sh_type
)
7239 case SHT_MIPS_LIBLIST
:
7240 sec
= bfd_get_section_by_name (abfd
, ".dynstr");
7242 (*hdrpp
)->sh_link
= elf_section_data (sec
)->this_idx
;
7245 case SHT_MIPS_GPTAB
:
7246 BFD_ASSERT ((*hdrpp
)->bfd_section
!= NULL
);
7247 name
= bfd_get_section_name (abfd
, (*hdrpp
)->bfd_section
);
7248 BFD_ASSERT (name
!= NULL
7249 && strncmp (name
, ".gptab.", sizeof ".gptab." - 1) == 0);
7250 sec
= bfd_get_section_by_name (abfd
, name
+ sizeof ".gptab" - 1);
7251 BFD_ASSERT (sec
!= NULL
);
7252 (*hdrpp
)->sh_info
= elf_section_data (sec
)->this_idx
;
7255 case SHT_MIPS_CONTENT
:
7256 BFD_ASSERT ((*hdrpp
)->bfd_section
!= NULL
);
7257 name
= bfd_get_section_name (abfd
, (*hdrpp
)->bfd_section
);
7258 BFD_ASSERT (name
!= NULL
7259 && strncmp (name
, ".MIPS.content",
7260 sizeof ".MIPS.content" - 1) == 0);
7261 sec
= bfd_get_section_by_name (abfd
,
7262 name
+ sizeof ".MIPS.content" - 1);
7263 BFD_ASSERT (sec
!= NULL
);
7264 (*hdrpp
)->sh_link
= elf_section_data (sec
)->this_idx
;
7267 case SHT_MIPS_SYMBOL_LIB
:
7268 sec
= bfd_get_section_by_name (abfd
, ".dynsym");
7270 (*hdrpp
)->sh_link
= elf_section_data (sec
)->this_idx
;
7271 sec
= bfd_get_section_by_name (abfd
, ".liblist");
7273 (*hdrpp
)->sh_info
= elf_section_data (sec
)->this_idx
;
7276 case SHT_MIPS_EVENTS
:
7277 BFD_ASSERT ((*hdrpp
)->bfd_section
!= NULL
);
7278 name
= bfd_get_section_name (abfd
, (*hdrpp
)->bfd_section
);
7279 BFD_ASSERT (name
!= NULL
);
7280 if (strncmp (name
, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0)
7281 sec
= bfd_get_section_by_name (abfd
,
7282 name
+ sizeof ".MIPS.events" - 1);
7285 BFD_ASSERT (strncmp (name
, ".MIPS.post_rel",
7286 sizeof ".MIPS.post_rel" - 1) == 0);
7287 sec
= bfd_get_section_by_name (abfd
,
7289 + sizeof ".MIPS.post_rel" - 1));
7291 BFD_ASSERT (sec
!= NULL
);
7292 (*hdrpp
)->sh_link
= elf_section_data (sec
)->this_idx
;
7299 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
7303 _bfd_mips_elf_additional_program_headers (abfd
)
7309 /* See if we need a PT_MIPS_REGINFO segment. */
7310 s
= bfd_get_section_by_name (abfd
, ".reginfo");
7311 if (s
&& (s
->flags
& SEC_LOAD
))
7314 /* See if we need a PT_MIPS_OPTIONS segment. */
7315 if (IRIX_COMPAT (abfd
) == ict_irix6
7316 && bfd_get_section_by_name (abfd
,
7317 MIPS_ELF_OPTIONS_SECTION_NAME (abfd
)))
7320 /* See if we need a PT_MIPS_RTPROC segment. */
7321 if (IRIX_COMPAT (abfd
) == ict_irix5
7322 && bfd_get_section_by_name (abfd
, ".dynamic")
7323 && bfd_get_section_by_name (abfd
, ".mdebug"))
7329 /* Modify the segment map for an IRIX5 executable. */
7332 _bfd_mips_elf_modify_segment_map (abfd
)
7336 struct elf_segment_map
*m
, **pm
;
7339 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
7341 s
= bfd_get_section_by_name (abfd
, ".reginfo");
7342 if (s
!= NULL
&& (s
->flags
& SEC_LOAD
) != 0)
7344 for (m
= elf_tdata (abfd
)->segment_map
; m
!= NULL
; m
= m
->next
)
7345 if (m
->p_type
== PT_MIPS_REGINFO
)
7350 m
= (struct elf_segment_map
*) bfd_zalloc (abfd
, amt
);
7354 m
->p_type
= PT_MIPS_REGINFO
;
7358 /* We want to put it after the PHDR and INTERP segments. */
7359 pm
= &elf_tdata (abfd
)->segment_map
;
7361 && ((*pm
)->p_type
== PT_PHDR
7362 || (*pm
)->p_type
== PT_INTERP
))
7370 /* For IRIX 6, we don't have .mdebug sections, nor does anything but
7371 .dynamic end up in PT_DYNAMIC. However, we do have to insert a
7372 PT_OPTIONS segment immediately following the program header
7375 /* On non-IRIX6 new abi, we'll have already created a segment
7376 for this section, so don't create another. I'm not sure this
7377 is not also the case for IRIX 6, but I can't test it right
7379 && IRIX_COMPAT (abfd
) == ict_irix6
)
7381 for (s
= abfd
->sections
; s
; s
= s
->next
)
7382 if (elf_section_data (s
)->this_hdr
.sh_type
== SHT_MIPS_OPTIONS
)
7387 struct elf_segment_map
*options_segment
;
7389 /* Usually, there's a program header table. But, sometimes
7390 there's not (like when running the `ld' testsuite). So,
7391 if there's no program header table, we just put the
7392 options segment at the end. */
7393 for (pm
= &elf_tdata (abfd
)->segment_map
;
7396 if ((*pm
)->p_type
== PT_PHDR
)
7399 amt
= sizeof (struct elf_segment_map
);
7400 options_segment
= bfd_zalloc (abfd
, amt
);
7401 options_segment
->next
= *pm
;
7402 options_segment
->p_type
= PT_MIPS_OPTIONS
;
7403 options_segment
->p_flags
= PF_R
;
7404 options_segment
->p_flags_valid
= TRUE
;
7405 options_segment
->count
= 1;
7406 options_segment
->sections
[0] = s
;
7407 *pm
= options_segment
;
7412 if (IRIX_COMPAT (abfd
) == ict_irix5
)
7414 /* If there are .dynamic and .mdebug sections, we make a room
7415 for the RTPROC header. FIXME: Rewrite without section names. */
7416 if (bfd_get_section_by_name (abfd
, ".interp") == NULL
7417 && bfd_get_section_by_name (abfd
, ".dynamic") != NULL
7418 && bfd_get_section_by_name (abfd
, ".mdebug") != NULL
)
7420 for (m
= elf_tdata (abfd
)->segment_map
; m
!= NULL
; m
= m
->next
)
7421 if (m
->p_type
== PT_MIPS_RTPROC
)
7426 m
= (struct elf_segment_map
*) bfd_zalloc (abfd
, amt
);
7430 m
->p_type
= PT_MIPS_RTPROC
;
7432 s
= bfd_get_section_by_name (abfd
, ".rtproc");
7437 m
->p_flags_valid
= 1;
7445 /* We want to put it after the DYNAMIC segment. */
7446 pm
= &elf_tdata (abfd
)->segment_map
;
7447 while (*pm
!= NULL
&& (*pm
)->p_type
!= PT_DYNAMIC
)
7457 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
7458 .dynstr, .dynsym, and .hash sections, and everything in
7460 for (pm
= &elf_tdata (abfd
)->segment_map
; *pm
!= NULL
;
7462 if ((*pm
)->p_type
== PT_DYNAMIC
)
7465 if (m
!= NULL
&& IRIX_COMPAT (abfd
) == ict_none
)
7467 /* For a normal mips executable the permissions for the PT_DYNAMIC
7468 segment are read, write and execute. We do that here since
7469 the code in elf.c sets only the read permission. This matters
7470 sometimes for the dynamic linker. */
7471 if (bfd_get_section_by_name (abfd
, ".dynamic") != NULL
)
7473 m
->p_flags
= PF_R
| PF_W
| PF_X
;
7474 m
->p_flags_valid
= 1;
7478 && m
->count
== 1 && strcmp (m
->sections
[0]->name
, ".dynamic") == 0)
7480 static const char *sec_names
[] =
7482 ".dynamic", ".dynstr", ".dynsym", ".hash"
7486 struct elf_segment_map
*n
;
7490 for (i
= 0; i
< sizeof sec_names
/ sizeof sec_names
[0]; i
++)
7492 s
= bfd_get_section_by_name (abfd
, sec_names
[i
]);
7493 if (s
!= NULL
&& (s
->flags
& SEC_LOAD
) != 0)
7499 sz
= s
->_cooked_size
;
7502 if (high
< s
->vma
+ sz
)
7508 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
7509 if ((s
->flags
& SEC_LOAD
) != 0
7512 + (s
->_cooked_size
!=
7513 0 ? s
->_cooked_size
: s
->_raw_size
)) <= high
))
7516 amt
= sizeof *n
+ (bfd_size_type
) (c
- 1) * sizeof (asection
*);
7517 n
= (struct elf_segment_map
*) bfd_zalloc (abfd
, amt
);
7524 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
7526 if ((s
->flags
& SEC_LOAD
) != 0
7529 + (s
->_cooked_size
!= 0 ?
7530 s
->_cooked_size
: s
->_raw_size
)) <= high
))
7544 /* Return the section that should be marked against GC for a given
7548 _bfd_mips_elf_gc_mark_hook (sec
, info
, rel
, h
, sym
)
7550 struct bfd_link_info
*info ATTRIBUTE_UNUSED
;
7551 Elf_Internal_Rela
*rel
;
7552 struct elf_link_hash_entry
*h
;
7553 Elf_Internal_Sym
*sym
;
7555 /* ??? Do mips16 stub sections need to be handled special? */
7559 switch (ELF_R_TYPE (sec
->owner
, rel
->r_info
))
7561 case R_MIPS_GNU_VTINHERIT
:
7562 case R_MIPS_GNU_VTENTRY
:
7566 switch (h
->root
.type
)
7568 case bfd_link_hash_defined
:
7569 case bfd_link_hash_defweak
:
7570 return h
->root
.u
.def
.section
;
7572 case bfd_link_hash_common
:
7573 return h
->root
.u
.c
.p
->section
;
7581 return bfd_section_from_elf_index (sec
->owner
, sym
->st_shndx
);
7586 /* Update the got entry reference counts for the section being removed. */
7589 _bfd_mips_elf_gc_sweep_hook (abfd
, info
, sec
, relocs
)
7590 bfd
*abfd ATTRIBUTE_UNUSED
;
7591 struct bfd_link_info
*info ATTRIBUTE_UNUSED
;
7592 asection
*sec ATTRIBUTE_UNUSED
;
7593 const Elf_Internal_Rela
*relocs ATTRIBUTE_UNUSED
;
7596 Elf_Internal_Shdr
*symtab_hdr
;
7597 struct elf_link_hash_entry
**sym_hashes
;
7598 bfd_signed_vma
*local_got_refcounts
;
7599 const Elf_Internal_Rela
*rel
, *relend
;
7600 unsigned long r_symndx
;
7601 struct elf_link_hash_entry
*h
;
7603 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
7604 sym_hashes
= elf_sym_hashes (abfd
);
7605 local_got_refcounts
= elf_local_got_refcounts (abfd
);
7607 relend
= relocs
+ sec
->reloc_count
;
7608 for (rel
= relocs
; rel
< relend
; rel
++)
7609 switch (ELF_R_TYPE (abfd
, rel
->r_info
))
7613 case R_MIPS_CALL_HI16
:
7614 case R_MIPS_CALL_LO16
:
7615 case R_MIPS_GOT_HI16
:
7616 case R_MIPS_GOT_LO16
:
7617 case R_MIPS_GOT_DISP
:
7618 case R_MIPS_GOT_PAGE
:
7619 case R_MIPS_GOT_OFST
:
7620 /* ??? It would seem that the existing MIPS code does no sort
7621 of reference counting or whatnot on its GOT and PLT entries,
7622 so it is not possible to garbage collect them at this time. */
7633 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
7634 hiding the old indirect symbol. Process additional relocation
7635 information. Also called for weakdefs, in which case we just let
7636 _bfd_elf_link_hash_copy_indirect copy the flags for us. */
7639 _bfd_mips_elf_copy_indirect_symbol (bed
, dir
, ind
)
7640 const struct elf_backend_data
*bed
;
7641 struct elf_link_hash_entry
*dir
, *ind
;
7643 struct mips_elf_link_hash_entry
*dirmips
, *indmips
;
7645 _bfd_elf_link_hash_copy_indirect (bed
, dir
, ind
);
7647 if (ind
->root
.type
!= bfd_link_hash_indirect
)
7650 dirmips
= (struct mips_elf_link_hash_entry
*) dir
;
7651 indmips
= (struct mips_elf_link_hash_entry
*) ind
;
7652 dirmips
->possibly_dynamic_relocs
+= indmips
->possibly_dynamic_relocs
;
7653 if (indmips
->readonly_reloc
)
7654 dirmips
->readonly_reloc
= TRUE
;
7655 if (indmips
->no_fn_stub
)
7656 dirmips
->no_fn_stub
= TRUE
;
7660 _bfd_mips_elf_hide_symbol (info
, entry
, force_local
)
7661 struct bfd_link_info
*info
;
7662 struct elf_link_hash_entry
*entry
;
7663 bfd_boolean force_local
;
7667 struct mips_got_info
*g
;
7668 struct mips_elf_link_hash_entry
*h
;
7670 h
= (struct mips_elf_link_hash_entry
*) entry
;
7671 if (h
->forced_local
)
7673 h
->forced_local
= force_local
;
7675 dynobj
= elf_hash_table (info
)->dynobj
;
7676 if (dynobj
!= NULL
&& force_local
)
7678 got
= mips_elf_got_section (dynobj
, FALSE
);
7679 g
= mips_elf_section_data (got
)->u
.got_info
;
7683 struct mips_got_entry e
;
7684 struct mips_got_info
*gg
= g
;
7686 /* Since we're turning what used to be a global symbol into a
7687 local one, bump up the number of local entries of each GOT
7688 that had an entry for it. This will automatically decrease
7689 the number of global entries, since global_gotno is actually
7690 the upper limit of global entries. */
7695 for (g
= g
->next
; g
!= gg
; g
= g
->next
)
7696 if (htab_find (g
->got_entries
, &e
))
7698 BFD_ASSERT (g
->global_gotno
> 0);
7703 /* If this was a global symbol forced into the primary GOT, we
7704 no longer need an entry for it. We can't release the entry
7705 at this point, but we must at least stop counting it as one
7706 of the symbols that required a forced got entry. */
7707 if (h
->root
.got
.offset
== 2)
7709 BFD_ASSERT (gg
->assigned_gotno
> 0);
7710 gg
->assigned_gotno
--;
7713 else if (g
->global_gotno
== 0 && g
->global_gotsym
== NULL
)
7714 /* If we haven't got through GOT allocation yet, just bump up the
7715 number of local entries, as this symbol won't be counted as
7718 else if (h
->root
.got
.offset
== 1)
7720 /* If we're past non-multi-GOT allocation and this symbol had
7721 been marked for a global got entry, give it a local entry
7723 BFD_ASSERT (g
->global_gotno
> 0);
7729 _bfd_elf_link_hash_hide_symbol (info
, &h
->root
, force_local
);
7735 _bfd_mips_elf_discard_info (abfd
, cookie
, info
)
7737 struct elf_reloc_cookie
*cookie
;
7738 struct bfd_link_info
*info
;
7741 bfd_boolean ret
= FALSE
;
7742 unsigned char *tdata
;
7745 o
= bfd_get_section_by_name (abfd
, ".pdr");
7748 if (o
->_raw_size
== 0)
7750 if (o
->_raw_size
% PDR_SIZE
!= 0)
7752 if (o
->output_section
!= NULL
7753 && bfd_is_abs_section (o
->output_section
))
7756 tdata
= bfd_zmalloc (o
->_raw_size
/ PDR_SIZE
);
7760 cookie
->rels
= _bfd_elf_link_read_relocs (abfd
, o
, (PTR
) NULL
,
7761 (Elf_Internal_Rela
*) NULL
,
7769 cookie
->rel
= cookie
->rels
;
7770 cookie
->relend
= cookie
->rels
+ o
->reloc_count
;
7772 for (i
= 0, skip
= 0; i
< o
->_raw_size
/ PDR_SIZE
; i
++)
7774 if (MNAME(abfd
,_bfd_elf
,reloc_symbol_deleted_p
) (i
* PDR_SIZE
, cookie
))
7783 mips_elf_section_data (o
)->u
.tdata
= tdata
;
7784 o
->_cooked_size
= o
->_raw_size
- skip
* PDR_SIZE
;
7790 if (! info
->keep_memory
)
7791 free (cookie
->rels
);
7797 _bfd_mips_elf_ignore_discarded_relocs (sec
)
7800 if (strcmp (sec
->name
, ".pdr") == 0)
7806 _bfd_mips_elf_write_section (output_bfd
, sec
, contents
)
7811 bfd_byte
*to
, *from
, *end
;
7814 if (strcmp (sec
->name
, ".pdr") != 0)
7817 if (mips_elf_section_data (sec
)->u
.tdata
== NULL
)
7821 end
= contents
+ sec
->_raw_size
;
7822 for (from
= contents
, i
= 0;
7824 from
+= PDR_SIZE
, i
++)
7826 if ((mips_elf_section_data (sec
)->u
.tdata
)[i
] == 1)
7829 memcpy (to
, from
, PDR_SIZE
);
7832 bfd_set_section_contents (output_bfd
, sec
->output_section
, contents
,
7833 (file_ptr
) sec
->output_offset
,
7838 /* MIPS ELF uses a special find_nearest_line routine in order the
7839 handle the ECOFF debugging information. */
7841 struct mips_elf_find_line
7843 struct ecoff_debug_info d
;
7844 struct ecoff_find_line i
;
7848 _bfd_mips_elf_find_nearest_line (abfd
, section
, symbols
, offset
, filename_ptr
,
7849 functionname_ptr
, line_ptr
)
7854 const char **filename_ptr
;
7855 const char **functionname_ptr
;
7856 unsigned int *line_ptr
;
7860 if (_bfd_dwarf1_find_nearest_line (abfd
, section
, symbols
, offset
,
7861 filename_ptr
, functionname_ptr
,
7865 if (_bfd_dwarf2_find_nearest_line (abfd
, section
, symbols
, offset
,
7866 filename_ptr
, functionname_ptr
,
7868 (unsigned) (ABI_64_P (abfd
) ? 8 : 0),
7869 &elf_tdata (abfd
)->dwarf2_find_line_info
))
7872 msec
= bfd_get_section_by_name (abfd
, ".mdebug");
7876 struct mips_elf_find_line
*fi
;
7877 const struct ecoff_debug_swap
* const swap
=
7878 get_elf_backend_data (abfd
)->elf_backend_ecoff_debug_swap
;
7880 /* If we are called during a link, mips_elf_final_link may have
7881 cleared the SEC_HAS_CONTENTS field. We force it back on here
7882 if appropriate (which it normally will be). */
7883 origflags
= msec
->flags
;
7884 if (elf_section_data (msec
)->this_hdr
.sh_type
!= SHT_NOBITS
)
7885 msec
->flags
|= SEC_HAS_CONTENTS
;
7887 fi
= elf_tdata (abfd
)->find_line_info
;
7890 bfd_size_type external_fdr_size
;
7893 struct fdr
*fdr_ptr
;
7894 bfd_size_type amt
= sizeof (struct mips_elf_find_line
);
7896 fi
= (struct mips_elf_find_line
*) bfd_zalloc (abfd
, amt
);
7899 msec
->flags
= origflags
;
7903 if (! _bfd_mips_elf_read_ecoff_info (abfd
, msec
, &fi
->d
))
7905 msec
->flags
= origflags
;
7909 /* Swap in the FDR information. */
7910 amt
= fi
->d
.symbolic_header
.ifdMax
* sizeof (struct fdr
);
7911 fi
->d
.fdr
= (struct fdr
*) bfd_alloc (abfd
, amt
);
7912 if (fi
->d
.fdr
== NULL
)
7914 msec
->flags
= origflags
;
7917 external_fdr_size
= swap
->external_fdr_size
;
7918 fdr_ptr
= fi
->d
.fdr
;
7919 fraw_src
= (char *) fi
->d
.external_fdr
;
7920 fraw_end
= (fraw_src
7921 + fi
->d
.symbolic_header
.ifdMax
* external_fdr_size
);
7922 for (; fraw_src
< fraw_end
; fraw_src
+= external_fdr_size
, fdr_ptr
++)
7923 (*swap
->swap_fdr_in
) (abfd
, (PTR
) fraw_src
, fdr_ptr
);
7925 elf_tdata (abfd
)->find_line_info
= fi
;
7927 /* Note that we don't bother to ever free this information.
7928 find_nearest_line is either called all the time, as in
7929 objdump -l, so the information should be saved, or it is
7930 rarely called, as in ld error messages, so the memory
7931 wasted is unimportant. Still, it would probably be a
7932 good idea for free_cached_info to throw it away. */
7935 if (_bfd_ecoff_locate_line (abfd
, section
, offset
, &fi
->d
, swap
,
7936 &fi
->i
, filename_ptr
, functionname_ptr
,
7939 msec
->flags
= origflags
;
7943 msec
->flags
= origflags
;
7946 /* Fall back on the generic ELF find_nearest_line routine. */
7948 return _bfd_elf_find_nearest_line (abfd
, section
, symbols
, offset
,
7949 filename_ptr
, functionname_ptr
,
7953 /* When are writing out the .options or .MIPS.options section,
7954 remember the bytes we are writing out, so that we can install the
7955 GP value in the section_processing routine. */
7958 _bfd_mips_elf_set_section_contents (abfd
, section
, location
, offset
, count
)
7963 bfd_size_type count
;
7965 if (strcmp (section
->name
, MIPS_ELF_OPTIONS_SECTION_NAME (abfd
)) == 0)
7969 if (elf_section_data (section
) == NULL
)
7971 bfd_size_type amt
= sizeof (struct bfd_elf_section_data
);
7972 section
->used_by_bfd
= (PTR
) bfd_zalloc (abfd
, amt
);
7973 if (elf_section_data (section
) == NULL
)
7976 c
= mips_elf_section_data (section
)->u
.tdata
;
7981 if (section
->_cooked_size
!= 0)
7982 size
= section
->_cooked_size
;
7984 size
= section
->_raw_size
;
7985 c
= (bfd_byte
*) bfd_zalloc (abfd
, size
);
7988 mips_elf_section_data (section
)->u
.tdata
= c
;
7991 memcpy (c
+ offset
, location
, (size_t) count
);
7994 return _bfd_elf_set_section_contents (abfd
, section
, location
, offset
,
7998 /* This is almost identical to bfd_generic_get_... except that some
7999 MIPS relocations need to be handled specially. Sigh. */
8002 _bfd_elf_mips_get_relocated_section_contents (abfd
, link_info
, link_order
,
8003 data
, relocatable
, symbols
)
8005 struct bfd_link_info
*link_info
;
8006 struct bfd_link_order
*link_order
;
8008 bfd_boolean relocatable
;
8011 /* Get enough memory to hold the stuff */
8012 bfd
*input_bfd
= link_order
->u
.indirect
.section
->owner
;
8013 asection
*input_section
= link_order
->u
.indirect
.section
;
8015 long reloc_size
= bfd_get_reloc_upper_bound (input_bfd
, input_section
);
8016 arelent
**reloc_vector
= NULL
;
8022 reloc_vector
= (arelent
**) bfd_malloc ((bfd_size_type
) reloc_size
);
8023 if (reloc_vector
== NULL
&& reloc_size
!= 0)
8026 /* read in the section */
8027 if (!bfd_get_section_contents (input_bfd
,
8031 input_section
->_raw_size
))
8034 /* We're not relaxing the section, so just copy the size info */
8035 input_section
->_cooked_size
= input_section
->_raw_size
;
8036 input_section
->reloc_done
= TRUE
;
8038 reloc_count
= bfd_canonicalize_reloc (input_bfd
,
8042 if (reloc_count
< 0)
8045 if (reloc_count
> 0)
8050 bfd_vma gp
= 0x12345678; /* initialize just to shut gcc up */
8053 struct bfd_hash_entry
*h
;
8054 struct bfd_link_hash_entry
*lh
;
8055 /* Skip all this stuff if we aren't mixing formats. */
8056 if (abfd
&& input_bfd
8057 && abfd
->xvec
== input_bfd
->xvec
)
8061 h
= bfd_hash_lookup (&link_info
->hash
->table
, "_gp", FALSE
, FALSE
);
8062 lh
= (struct bfd_link_hash_entry
*) h
;
8069 case bfd_link_hash_undefined
:
8070 case bfd_link_hash_undefweak
:
8071 case bfd_link_hash_common
:
8074 case bfd_link_hash_defined
:
8075 case bfd_link_hash_defweak
:
8077 gp
= lh
->u
.def
.value
;
8079 case bfd_link_hash_indirect
:
8080 case bfd_link_hash_warning
:
8082 /* @@FIXME ignoring warning for now */
8084 case bfd_link_hash_new
:
8093 for (parent
= reloc_vector
; *parent
!= (arelent
*) NULL
;
8096 char *error_message
= (char *) NULL
;
8097 bfd_reloc_status_type r
;
8099 /* Specific to MIPS: Deal with relocation types that require
8100 knowing the gp of the output bfd. */
8101 asymbol
*sym
= *(*parent
)->sym_ptr_ptr
;
8102 if (bfd_is_abs_section (sym
->section
) && abfd
)
8104 /* The special_function wouldn't get called anyway. */
8108 /* The gp isn't there; let the special function code
8109 fall over on its own. */
8111 else if ((*parent
)->howto
->special_function
8112 == _bfd_mips_elf32_gprel16_reloc
)
8114 /* bypass special_function call */
8115 r
= _bfd_mips_elf_gprel16_with_gp (input_bfd
, sym
, *parent
,
8116 input_section
, relocatable
,
8118 goto skip_bfd_perform_relocation
;
8120 /* end mips specific stuff */
8122 r
= bfd_perform_relocation (input_bfd
,
8126 relocatable
? abfd
: (bfd
*) NULL
,
8128 skip_bfd_perform_relocation
:
8132 asection
*os
= input_section
->output_section
;
8134 /* A partial link, so keep the relocs */
8135 os
->orelocation
[os
->reloc_count
] = *parent
;
8139 if (r
!= bfd_reloc_ok
)
8143 case bfd_reloc_undefined
:
8144 if (!((*link_info
->callbacks
->undefined_symbol
)
8145 (link_info
, bfd_asymbol_name (*(*parent
)->sym_ptr_ptr
),
8146 input_bfd
, input_section
, (*parent
)->address
,
8150 case bfd_reloc_dangerous
:
8151 BFD_ASSERT (error_message
!= (char *) NULL
);
8152 if (!((*link_info
->callbacks
->reloc_dangerous
)
8153 (link_info
, error_message
, input_bfd
, input_section
,
8154 (*parent
)->address
)))
8157 case bfd_reloc_overflow
:
8158 if (!((*link_info
->callbacks
->reloc_overflow
)
8159 (link_info
, bfd_asymbol_name (*(*parent
)->sym_ptr_ptr
),
8160 (*parent
)->howto
->name
, (*parent
)->addend
,
8161 input_bfd
, input_section
, (*parent
)->address
)))
8164 case bfd_reloc_outofrange
:
8173 if (reloc_vector
!= NULL
)
8174 free (reloc_vector
);
8178 if (reloc_vector
!= NULL
)
8179 free (reloc_vector
);
8183 /* Create a MIPS ELF linker hash table. */
8185 struct bfd_link_hash_table
*
8186 _bfd_mips_elf_link_hash_table_create (abfd
)
8189 struct mips_elf_link_hash_table
*ret
;
8190 bfd_size_type amt
= sizeof (struct mips_elf_link_hash_table
);
8192 ret
= (struct mips_elf_link_hash_table
*) bfd_malloc (amt
);
8193 if (ret
== (struct mips_elf_link_hash_table
*) NULL
)
8196 if (! _bfd_elf_link_hash_table_init (&ret
->root
, abfd
,
8197 mips_elf_link_hash_newfunc
))
8204 /* We no longer use this. */
8205 for (i
= 0; i
< SIZEOF_MIPS_DYNSYM_SECNAMES
; i
++)
8206 ret
->dynsym_sec_strindex
[i
] = (bfd_size_type
) -1;
8208 ret
->procedure_count
= 0;
8209 ret
->compact_rel_size
= 0;
8210 ret
->use_rld_obj_head
= FALSE
;
8212 ret
->mips16_stubs_seen
= FALSE
;
8214 return &ret
->root
.root
;
8217 /* We need to use a special link routine to handle the .reginfo and
8218 the .mdebug sections. We need to merge all instances of these
8219 sections together, not write them all out sequentially. */
8222 _bfd_mips_elf_final_link (abfd
, info
)
8224 struct bfd_link_info
*info
;
8228 struct bfd_link_order
*p
;
8229 asection
*reginfo_sec
, *mdebug_sec
, *gptab_data_sec
, *gptab_bss_sec
;
8230 asection
*rtproc_sec
;
8231 Elf32_RegInfo reginfo
;
8232 struct ecoff_debug_info debug
;
8233 const struct ecoff_debug_swap
*swap
8234 = get_elf_backend_data (abfd
)->elf_backend_ecoff_debug_swap
;
8235 HDRR
*symhdr
= &debug
.symbolic_header
;
8236 PTR mdebug_handle
= NULL
;
8242 static const char * const secname
[] =
8244 ".text", ".init", ".fini", ".data",
8245 ".rodata", ".sdata", ".sbss", ".bss"
8247 static const int sc
[] =
8249 scText
, scInit
, scFini
, scData
,
8250 scRData
, scSData
, scSBss
, scBss
8253 /* We'd carefully arranged the dynamic symbol indices, and then the
8254 generic size_dynamic_sections renumbered them out from under us.
8255 Rather than trying somehow to prevent the renumbering, just do
8257 if (elf_hash_table (info
)->dynamic_sections_created
)
8261 struct mips_got_info
*g
;
8263 /* When we resort, we must tell mips_elf_sort_hash_table what
8264 the lowest index it may use is. That's the number of section
8265 symbols we're going to add. The generic ELF linker only
8266 adds these symbols when building a shared object. Note that
8267 we count the sections after (possibly) removing the .options
8269 if (! mips_elf_sort_hash_table (info
, (info
->shared
8270 ? bfd_count_sections (abfd
) + 1
8274 /* Make sure we didn't grow the global .got region. */
8275 dynobj
= elf_hash_table (info
)->dynobj
;
8276 got
= mips_elf_got_section (dynobj
, FALSE
);
8277 g
= mips_elf_section_data (got
)->u
.got_info
;
8279 if (g
->global_gotsym
!= NULL
)
8280 BFD_ASSERT ((elf_hash_table (info
)->dynsymcount
8281 - g
->global_gotsym
->dynindx
)
8282 <= g
->global_gotno
);
8286 /* We want to set the GP value for ld -r. */
8287 /* On IRIX5, we omit the .options section. On IRIX6, however, we
8288 include it, even though we don't process it quite right. (Some
8289 entries are supposed to be merged.) Empirically, we seem to be
8290 better off including it then not. */
8291 if (IRIX_COMPAT (abfd
) == ict_irix5
|| IRIX_COMPAT (abfd
) == ict_none
)
8292 for (secpp
= &abfd
->sections
; *secpp
!= NULL
; secpp
= &(*secpp
)->next
)
8294 if (strcmp ((*secpp
)->name
, MIPS_ELF_OPTIONS_SECTION_NAME (abfd
)) == 0)
8296 for (p
= (*secpp
)->link_order_head
; p
!= NULL
; p
= p
->next
)
8297 if (p
->type
== bfd_indirect_link_order
)
8298 p
->u
.indirect
.section
->flags
&= ~SEC_HAS_CONTENTS
;
8299 (*secpp
)->link_order_head
= NULL
;
8300 bfd_section_list_remove (abfd
, secpp
);
8301 --abfd
->section_count
;
8307 /* We include .MIPS.options, even though we don't process it quite right.
8308 (Some entries are supposed to be merged.) At IRIX6 empirically we seem
8309 to be better off including it than not. */
8310 for (secpp
= &abfd
->sections
; *secpp
!= NULL
; secpp
= &(*secpp
)->next
)
8312 if (strcmp ((*secpp
)->name
, ".MIPS.options") == 0)
8314 for (p
= (*secpp
)->link_order_head
; p
!= NULL
; p
= p
->next
)
8315 if (p
->type
== bfd_indirect_link_order
)
8316 p
->u
.indirect
.section
->flags
&=~ SEC_HAS_CONTENTS
;
8317 (*secpp
)->link_order_head
= NULL
;
8318 bfd_section_list_remove (abfd
, secpp
);
8319 --abfd
->section_count
;
8326 /* Get a value for the GP register. */
8327 if (elf_gp (abfd
) == 0)
8329 struct bfd_link_hash_entry
*h
;
8331 h
= bfd_link_hash_lookup (info
->hash
, "_gp", FALSE
, FALSE
, TRUE
);
8332 if (h
!= (struct bfd_link_hash_entry
*) NULL
8333 && h
->type
== bfd_link_hash_defined
)
8334 elf_gp (abfd
) = (h
->u
.def
.value
8335 + h
->u
.def
.section
->output_section
->vma
8336 + h
->u
.def
.section
->output_offset
);
8337 else if (info
->relocatable
)
8339 bfd_vma lo
= MINUS_ONE
;
8341 /* Find the GP-relative section with the lowest offset. */
8342 for (o
= abfd
->sections
; o
!= (asection
*) NULL
; o
= o
->next
)
8344 && (elf_section_data (o
)->this_hdr
.sh_flags
& SHF_MIPS_GPREL
))
8347 /* And calculate GP relative to that. */
8348 elf_gp (abfd
) = lo
+ ELF_MIPS_GP_OFFSET (abfd
);
8352 /* If the relocate_section function needs to do a reloc
8353 involving the GP value, it should make a reloc_dangerous
8354 callback to warn that GP is not defined. */
8358 /* Go through the sections and collect the .reginfo and .mdebug
8362 gptab_data_sec
= NULL
;
8363 gptab_bss_sec
= NULL
;
8364 for (o
= abfd
->sections
; o
!= (asection
*) NULL
; o
= o
->next
)
8366 if (strcmp (o
->name
, ".reginfo") == 0)
8368 memset (®info
, 0, sizeof reginfo
);
8370 /* We have found the .reginfo section in the output file.
8371 Look through all the link_orders comprising it and merge
8372 the information together. */
8373 for (p
= o
->link_order_head
;
8374 p
!= (struct bfd_link_order
*) NULL
;
8377 asection
*input_section
;
8379 Elf32_External_RegInfo ext
;
8382 if (p
->type
!= bfd_indirect_link_order
)
8384 if (p
->type
== bfd_data_link_order
)
8389 input_section
= p
->u
.indirect
.section
;
8390 input_bfd
= input_section
->owner
;
8392 /* The linker emulation code has probably clobbered the
8393 size to be zero bytes. */
8394 if (input_section
->_raw_size
== 0)
8395 input_section
->_raw_size
= sizeof (Elf32_External_RegInfo
);
8397 if (! bfd_get_section_contents (input_bfd
, input_section
,
8400 (bfd_size_type
) sizeof ext
))
8403 bfd_mips_elf32_swap_reginfo_in (input_bfd
, &ext
, &sub
);
8405 reginfo
.ri_gprmask
|= sub
.ri_gprmask
;
8406 reginfo
.ri_cprmask
[0] |= sub
.ri_cprmask
[0];
8407 reginfo
.ri_cprmask
[1] |= sub
.ri_cprmask
[1];
8408 reginfo
.ri_cprmask
[2] |= sub
.ri_cprmask
[2];
8409 reginfo
.ri_cprmask
[3] |= sub
.ri_cprmask
[3];
8411 /* ri_gp_value is set by the function
8412 mips_elf32_section_processing when the section is
8413 finally written out. */
8415 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8416 elf_link_input_bfd ignores this section. */
8417 input_section
->flags
&= ~SEC_HAS_CONTENTS
;
8420 /* Size has been set in _bfd_mips_elf_always_size_sections. */
8421 BFD_ASSERT(o
->_raw_size
== sizeof (Elf32_External_RegInfo
));
8423 /* Skip this section later on (I don't think this currently
8424 matters, but someday it might). */
8425 o
->link_order_head
= (struct bfd_link_order
*) NULL
;
8430 if (strcmp (o
->name
, ".mdebug") == 0)
8432 struct extsym_info einfo
;
8435 /* We have found the .mdebug section in the output file.
8436 Look through all the link_orders comprising it and merge
8437 the information together. */
8438 symhdr
->magic
= swap
->sym_magic
;
8439 /* FIXME: What should the version stamp be? */
8441 symhdr
->ilineMax
= 0;
8445 symhdr
->isymMax
= 0;
8446 symhdr
->ioptMax
= 0;
8447 symhdr
->iauxMax
= 0;
8449 symhdr
->issExtMax
= 0;
8452 symhdr
->iextMax
= 0;
8454 /* We accumulate the debugging information itself in the
8455 debug_info structure. */
8457 debug
.external_dnr
= NULL
;
8458 debug
.external_pdr
= NULL
;
8459 debug
.external_sym
= NULL
;
8460 debug
.external_opt
= NULL
;
8461 debug
.external_aux
= NULL
;
8463 debug
.ssext
= debug
.ssext_end
= NULL
;
8464 debug
.external_fdr
= NULL
;
8465 debug
.external_rfd
= NULL
;
8466 debug
.external_ext
= debug
.external_ext_end
= NULL
;
8468 mdebug_handle
= bfd_ecoff_debug_init (abfd
, &debug
, swap
, info
);
8469 if (mdebug_handle
== (PTR
) NULL
)
8473 esym
.cobol_main
= 0;
8477 esym
.asym
.iss
= issNil
;
8478 esym
.asym
.st
= stLocal
;
8479 esym
.asym
.reserved
= 0;
8480 esym
.asym
.index
= indexNil
;
8482 for (i
= 0; i
< sizeof (secname
) / sizeof (secname
[0]); i
++)
8484 esym
.asym
.sc
= sc
[i
];
8485 s
= bfd_get_section_by_name (abfd
, secname
[i
]);
8488 esym
.asym
.value
= s
->vma
;
8489 last
= s
->vma
+ s
->_raw_size
;
8492 esym
.asym
.value
= last
;
8493 if (!bfd_ecoff_debug_one_external (abfd
, &debug
, swap
,
8498 for (p
= o
->link_order_head
;
8499 p
!= (struct bfd_link_order
*) NULL
;
8502 asection
*input_section
;
8504 const struct ecoff_debug_swap
*input_swap
;
8505 struct ecoff_debug_info input_debug
;
8509 if (p
->type
!= bfd_indirect_link_order
)
8511 if (p
->type
== bfd_data_link_order
)
8516 input_section
= p
->u
.indirect
.section
;
8517 input_bfd
= input_section
->owner
;
8519 if (bfd_get_flavour (input_bfd
) != bfd_target_elf_flavour
8520 || (get_elf_backend_data (input_bfd
)
8521 ->elf_backend_ecoff_debug_swap
) == NULL
)
8523 /* I don't know what a non MIPS ELF bfd would be
8524 doing with a .mdebug section, but I don't really
8525 want to deal with it. */
8529 input_swap
= (get_elf_backend_data (input_bfd
)
8530 ->elf_backend_ecoff_debug_swap
);
8532 BFD_ASSERT (p
->size
== input_section
->_raw_size
);
8534 /* The ECOFF linking code expects that we have already
8535 read in the debugging information and set up an
8536 ecoff_debug_info structure, so we do that now. */
8537 if (! _bfd_mips_elf_read_ecoff_info (input_bfd
, input_section
,
8541 if (! (bfd_ecoff_debug_accumulate
8542 (mdebug_handle
, abfd
, &debug
, swap
, input_bfd
,
8543 &input_debug
, input_swap
, info
)))
8546 /* Loop through the external symbols. For each one with
8547 interesting information, try to find the symbol in
8548 the linker global hash table and save the information
8549 for the output external symbols. */
8550 eraw_src
= input_debug
.external_ext
;
8551 eraw_end
= (eraw_src
8552 + (input_debug
.symbolic_header
.iextMax
8553 * input_swap
->external_ext_size
));
8555 eraw_src
< eraw_end
;
8556 eraw_src
+= input_swap
->external_ext_size
)
8560 struct mips_elf_link_hash_entry
*h
;
8562 (*input_swap
->swap_ext_in
) (input_bfd
, (PTR
) eraw_src
, &ext
);
8563 if (ext
.asym
.sc
== scNil
8564 || ext
.asym
.sc
== scUndefined
8565 || ext
.asym
.sc
== scSUndefined
)
8568 name
= input_debug
.ssext
+ ext
.asym
.iss
;
8569 h
= mips_elf_link_hash_lookup (mips_elf_hash_table (info
),
8570 name
, FALSE
, FALSE
, TRUE
);
8571 if (h
== NULL
|| h
->esym
.ifd
!= -2)
8577 < input_debug
.symbolic_header
.ifdMax
);
8578 ext
.ifd
= input_debug
.ifdmap
[ext
.ifd
];
8584 /* Free up the information we just read. */
8585 free (input_debug
.line
);
8586 free (input_debug
.external_dnr
);
8587 free (input_debug
.external_pdr
);
8588 free (input_debug
.external_sym
);
8589 free (input_debug
.external_opt
);
8590 free (input_debug
.external_aux
);
8591 free (input_debug
.ss
);
8592 free (input_debug
.ssext
);
8593 free (input_debug
.external_fdr
);
8594 free (input_debug
.external_rfd
);
8595 free (input_debug
.external_ext
);
8597 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8598 elf_link_input_bfd ignores this section. */
8599 input_section
->flags
&= ~SEC_HAS_CONTENTS
;
8602 if (SGI_COMPAT (abfd
) && info
->shared
)
8604 /* Create .rtproc section. */
8605 rtproc_sec
= bfd_get_section_by_name (abfd
, ".rtproc");
8606 if (rtproc_sec
== NULL
)
8608 flagword flags
= (SEC_HAS_CONTENTS
| SEC_IN_MEMORY
8609 | SEC_LINKER_CREATED
| SEC_READONLY
);
8611 rtproc_sec
= bfd_make_section (abfd
, ".rtproc");
8612 if (rtproc_sec
== NULL
8613 || ! bfd_set_section_flags (abfd
, rtproc_sec
, flags
)
8614 || ! bfd_set_section_alignment (abfd
, rtproc_sec
, 4))
8618 if (! mips_elf_create_procedure_table (mdebug_handle
, abfd
,
8624 /* Build the external symbol information. */
8627 einfo
.debug
= &debug
;
8629 einfo
.failed
= FALSE
;
8630 mips_elf_link_hash_traverse (mips_elf_hash_table (info
),
8631 mips_elf_output_extsym
,
8636 /* Set the size of the .mdebug section. */
8637 o
->_raw_size
= bfd_ecoff_debug_size (abfd
, &debug
, swap
);
8639 /* Skip this section later on (I don't think this currently
8640 matters, but someday it might). */
8641 o
->link_order_head
= (struct bfd_link_order
*) NULL
;
8646 if (strncmp (o
->name
, ".gptab.", sizeof ".gptab." - 1) == 0)
8648 const char *subname
;
8651 Elf32_External_gptab
*ext_tab
;
8654 /* The .gptab.sdata and .gptab.sbss sections hold
8655 information describing how the small data area would
8656 change depending upon the -G switch. These sections
8657 not used in executables files. */
8658 if (! info
->relocatable
)
8660 for (p
= o
->link_order_head
;
8661 p
!= (struct bfd_link_order
*) NULL
;
8664 asection
*input_section
;
8666 if (p
->type
!= bfd_indirect_link_order
)
8668 if (p
->type
== bfd_data_link_order
)
8673 input_section
= p
->u
.indirect
.section
;
8675 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8676 elf_link_input_bfd ignores this section. */
8677 input_section
->flags
&= ~SEC_HAS_CONTENTS
;
8680 /* Skip this section later on (I don't think this
8681 currently matters, but someday it might). */
8682 o
->link_order_head
= (struct bfd_link_order
*) NULL
;
8684 /* Really remove the section. */
8685 for (secpp
= &abfd
->sections
;
8687 secpp
= &(*secpp
)->next
)
8689 bfd_section_list_remove (abfd
, secpp
);
8690 --abfd
->section_count
;
8695 /* There is one gptab for initialized data, and one for
8696 uninitialized data. */
8697 if (strcmp (o
->name
, ".gptab.sdata") == 0)
8699 else if (strcmp (o
->name
, ".gptab.sbss") == 0)
8703 (*_bfd_error_handler
)
8704 (_("%s: illegal section name `%s'"),
8705 bfd_get_filename (abfd
), o
->name
);
8706 bfd_set_error (bfd_error_nonrepresentable_section
);
8710 /* The linker script always combines .gptab.data and
8711 .gptab.sdata into .gptab.sdata, and likewise for
8712 .gptab.bss and .gptab.sbss. It is possible that there is
8713 no .sdata or .sbss section in the output file, in which
8714 case we must change the name of the output section. */
8715 subname
= o
->name
+ sizeof ".gptab" - 1;
8716 if (bfd_get_section_by_name (abfd
, subname
) == NULL
)
8718 if (o
== gptab_data_sec
)
8719 o
->name
= ".gptab.data";
8721 o
->name
= ".gptab.bss";
8722 subname
= o
->name
+ sizeof ".gptab" - 1;
8723 BFD_ASSERT (bfd_get_section_by_name (abfd
, subname
) != NULL
);
8726 /* Set up the first entry. */
8728 amt
= c
* sizeof (Elf32_gptab
);
8729 tab
= (Elf32_gptab
*) bfd_malloc (amt
);
8732 tab
[0].gt_header
.gt_current_g_value
= elf_gp_size (abfd
);
8733 tab
[0].gt_header
.gt_unused
= 0;
8735 /* Combine the input sections. */
8736 for (p
= o
->link_order_head
;
8737 p
!= (struct bfd_link_order
*) NULL
;
8740 asection
*input_section
;
8744 bfd_size_type gpentry
;
8746 if (p
->type
!= bfd_indirect_link_order
)
8748 if (p
->type
== bfd_data_link_order
)
8753 input_section
= p
->u
.indirect
.section
;
8754 input_bfd
= input_section
->owner
;
8756 /* Combine the gptab entries for this input section one
8757 by one. We know that the input gptab entries are
8758 sorted by ascending -G value. */
8759 size
= bfd_section_size (input_bfd
, input_section
);
8761 for (gpentry
= sizeof (Elf32_External_gptab
);
8763 gpentry
+= sizeof (Elf32_External_gptab
))
8765 Elf32_External_gptab ext_gptab
;
8766 Elf32_gptab int_gptab
;
8772 if (! (bfd_get_section_contents
8773 (input_bfd
, input_section
, (PTR
) &ext_gptab
,
8775 (bfd_size_type
) sizeof (Elf32_External_gptab
))))
8781 bfd_mips_elf32_swap_gptab_in (input_bfd
, &ext_gptab
,
8783 val
= int_gptab
.gt_entry
.gt_g_value
;
8784 add
= int_gptab
.gt_entry
.gt_bytes
- last
;
8787 for (look
= 1; look
< c
; look
++)
8789 if (tab
[look
].gt_entry
.gt_g_value
>= val
)
8790 tab
[look
].gt_entry
.gt_bytes
+= add
;
8792 if (tab
[look
].gt_entry
.gt_g_value
== val
)
8798 Elf32_gptab
*new_tab
;
8801 /* We need a new table entry. */
8802 amt
= (bfd_size_type
) (c
+ 1) * sizeof (Elf32_gptab
);
8803 new_tab
= (Elf32_gptab
*) bfd_realloc ((PTR
) tab
, amt
);
8804 if (new_tab
== NULL
)
8810 tab
[c
].gt_entry
.gt_g_value
= val
;
8811 tab
[c
].gt_entry
.gt_bytes
= add
;
8813 /* Merge in the size for the next smallest -G
8814 value, since that will be implied by this new
8817 for (look
= 1; look
< c
; look
++)
8819 if (tab
[look
].gt_entry
.gt_g_value
< val
8821 || (tab
[look
].gt_entry
.gt_g_value
8822 > tab
[max
].gt_entry
.gt_g_value
)))
8826 tab
[c
].gt_entry
.gt_bytes
+=
8827 tab
[max
].gt_entry
.gt_bytes
;
8832 last
= int_gptab
.gt_entry
.gt_bytes
;
8835 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8836 elf_link_input_bfd ignores this section. */
8837 input_section
->flags
&= ~SEC_HAS_CONTENTS
;
8840 /* The table must be sorted by -G value. */
8842 qsort (tab
+ 1, c
- 1, sizeof (tab
[0]), gptab_compare
);
8844 /* Swap out the table. */
8845 amt
= (bfd_size_type
) c
* sizeof (Elf32_External_gptab
);
8846 ext_tab
= (Elf32_External_gptab
*) bfd_alloc (abfd
, amt
);
8847 if (ext_tab
== NULL
)
8853 for (j
= 0; j
< c
; j
++)
8854 bfd_mips_elf32_swap_gptab_out (abfd
, tab
+ j
, ext_tab
+ j
);
8857 o
->_raw_size
= c
* sizeof (Elf32_External_gptab
);
8858 o
->contents
= (bfd_byte
*) ext_tab
;
8860 /* Skip this section later on (I don't think this currently
8861 matters, but someday it might). */
8862 o
->link_order_head
= (struct bfd_link_order
*) NULL
;
8866 /* Invoke the regular ELF backend linker to do all the work. */
8867 if (!MNAME(abfd
,bfd_elf
,bfd_final_link
) (abfd
, info
))
8870 /* Now write out the computed sections. */
8872 if (reginfo_sec
!= (asection
*) NULL
)
8874 Elf32_External_RegInfo ext
;
8876 bfd_mips_elf32_swap_reginfo_out (abfd
, ®info
, &ext
);
8877 if (! bfd_set_section_contents (abfd
, reginfo_sec
, (PTR
) &ext
,
8879 (bfd_size_type
) sizeof ext
))
8883 if (mdebug_sec
!= (asection
*) NULL
)
8885 BFD_ASSERT (abfd
->output_has_begun
);
8886 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle
, abfd
, &debug
,
8888 mdebug_sec
->filepos
))
8891 bfd_ecoff_debug_free (mdebug_handle
, abfd
, &debug
, swap
, info
);
8894 if (gptab_data_sec
!= (asection
*) NULL
)
8896 if (! bfd_set_section_contents (abfd
, gptab_data_sec
,
8897 gptab_data_sec
->contents
,
8899 gptab_data_sec
->_raw_size
))
8903 if (gptab_bss_sec
!= (asection
*) NULL
)
8905 if (! bfd_set_section_contents (abfd
, gptab_bss_sec
,
8906 gptab_bss_sec
->contents
,
8908 gptab_bss_sec
->_raw_size
))
8912 if (SGI_COMPAT (abfd
))
8914 rtproc_sec
= bfd_get_section_by_name (abfd
, ".rtproc");
8915 if (rtproc_sec
!= NULL
)
8917 if (! bfd_set_section_contents (abfd
, rtproc_sec
,
8918 rtproc_sec
->contents
,
8920 rtproc_sec
->_raw_size
))
8928 /* Structure for saying that BFD machine EXTENSION extends BASE. */
8930 struct mips_mach_extension
{
8931 unsigned long extension
, base
;
8935 /* An array describing how BFD machines relate to one another. The entries
8936 are ordered topologically with MIPS I extensions listed last. */
8938 static const struct mips_mach_extension mips_mach_extensions
[] = {
8939 /* MIPS64 extensions. */
8940 { bfd_mach_mipsisa64r2
, bfd_mach_mipsisa64
},
8941 { bfd_mach_mips_sb1
, bfd_mach_mipsisa64
},
8943 /* MIPS V extensions. */
8944 { bfd_mach_mipsisa64
, bfd_mach_mips5
},
8946 /* R10000 extensions. */
8947 { bfd_mach_mips12000
, bfd_mach_mips10000
},
8949 /* R5000 extensions. Note: the vr5500 ISA is an extension of the core
8950 vr5400 ISA, but doesn't include the multimedia stuff. It seems
8951 better to allow vr5400 and vr5500 code to be merged anyway, since
8952 many libraries will just use the core ISA. Perhaps we could add
8953 some sort of ASE flag if this ever proves a problem. */
8954 { bfd_mach_mips5500
, bfd_mach_mips5400
},
8955 { bfd_mach_mips5400
, bfd_mach_mips5000
},
8957 /* MIPS IV extensions. */
8958 { bfd_mach_mips5
, bfd_mach_mips8000
},
8959 { bfd_mach_mips10000
, bfd_mach_mips8000
},
8960 { bfd_mach_mips5000
, bfd_mach_mips8000
},
8961 { bfd_mach_mips7000
, bfd_mach_mips8000
},
8963 /* VR4100 extensions. */
8964 { bfd_mach_mips4120
, bfd_mach_mips4100
},
8965 { bfd_mach_mips4111
, bfd_mach_mips4100
},
8967 /* MIPS III extensions. */
8968 { bfd_mach_mips8000
, bfd_mach_mips4000
},
8969 { bfd_mach_mips4650
, bfd_mach_mips4000
},
8970 { bfd_mach_mips4600
, bfd_mach_mips4000
},
8971 { bfd_mach_mips4400
, bfd_mach_mips4000
},
8972 { bfd_mach_mips4300
, bfd_mach_mips4000
},
8973 { bfd_mach_mips4100
, bfd_mach_mips4000
},
8974 { bfd_mach_mips4010
, bfd_mach_mips4000
},
8976 /* MIPS32 extensions. */
8977 { bfd_mach_mipsisa32r2
, bfd_mach_mipsisa32
},
8979 /* MIPS II extensions. */
8980 { bfd_mach_mips4000
, bfd_mach_mips6000
},
8981 { bfd_mach_mipsisa32
, bfd_mach_mips6000
},
8983 /* MIPS I extensions. */
8984 { bfd_mach_mips6000
, bfd_mach_mips3000
},
8985 { bfd_mach_mips3900
, bfd_mach_mips3000
}
8989 /* Return true if bfd machine EXTENSION is an extension of machine BASE. */
8992 mips_mach_extends_p (base
, extension
)
8993 unsigned long base
, extension
;
8997 for (i
= 0; extension
!= base
&& i
< ARRAY_SIZE (mips_mach_extensions
); i
++)
8998 if (extension
== mips_mach_extensions
[i
].extension
)
8999 extension
= mips_mach_extensions
[i
].base
;
9001 return extension
== base
;
9005 /* Return true if the given ELF header flags describe a 32-bit binary. */
9008 mips_32bit_flags_p (flags
)
9011 return ((flags
& EF_MIPS_32BITMODE
) != 0
9012 || (flags
& EF_MIPS_ABI
) == E_MIPS_ABI_O32
9013 || (flags
& EF_MIPS_ABI
) == E_MIPS_ABI_EABI32
9014 || (flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_1
9015 || (flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_2
9016 || (flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_32
9017 || (flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_32R2
);
9021 /* Merge backend specific data from an object file to the output
9022 object file when linking. */
9025 _bfd_mips_elf_merge_private_bfd_data (ibfd
, obfd
)
9032 bfd_boolean null_input_bfd
= TRUE
;
9035 /* Check if we have the same endianess */
9036 if (! _bfd_generic_verify_endian_match (ibfd
, obfd
))
9038 (*_bfd_error_handler
)
9039 (_("%s: endianness incompatible with that of the selected emulation"),
9040 bfd_archive_filename (ibfd
));
9044 if (bfd_get_flavour (ibfd
) != bfd_target_elf_flavour
9045 || bfd_get_flavour (obfd
) != bfd_target_elf_flavour
)
9048 if (strcmp (bfd_get_target (ibfd
), bfd_get_target (obfd
)) != 0)
9050 (*_bfd_error_handler
)
9051 (_("%s: ABI is incompatible with that of the selected emulation"),
9052 bfd_archive_filename (ibfd
));
9056 new_flags
= elf_elfheader (ibfd
)->e_flags
;
9057 elf_elfheader (obfd
)->e_flags
|= new_flags
& EF_MIPS_NOREORDER
;
9058 old_flags
= elf_elfheader (obfd
)->e_flags
;
9060 if (! elf_flags_init (obfd
))
9062 elf_flags_init (obfd
) = TRUE
;
9063 elf_elfheader (obfd
)->e_flags
= new_flags
;
9064 elf_elfheader (obfd
)->e_ident
[EI_CLASS
]
9065 = elf_elfheader (ibfd
)->e_ident
[EI_CLASS
];
9067 if (bfd_get_arch (obfd
) == bfd_get_arch (ibfd
)
9068 && bfd_get_arch_info (obfd
)->the_default
)
9070 if (! bfd_set_arch_mach (obfd
, bfd_get_arch (ibfd
),
9071 bfd_get_mach (ibfd
)))
9078 /* Check flag compatibility. */
9080 new_flags
&= ~EF_MIPS_NOREORDER
;
9081 old_flags
&= ~EF_MIPS_NOREORDER
;
9083 /* Some IRIX 6 BSD-compatibility objects have this bit set. It
9084 doesn't seem to matter. */
9085 new_flags
&= ~EF_MIPS_XGOT
;
9086 old_flags
&= ~EF_MIPS_XGOT
;
9088 if (new_flags
== old_flags
)
9091 /* Check to see if the input BFD actually contains any sections.
9092 If not, its flags may not have been initialised either, but it cannot
9093 actually cause any incompatibility. */
9094 for (sec
= ibfd
->sections
; sec
!= NULL
; sec
= sec
->next
)
9096 /* Ignore synthetic sections and empty .text, .data and .bss sections
9097 which are automatically generated by gas. */
9098 if (strcmp (sec
->name
, ".reginfo")
9099 && strcmp (sec
->name
, ".mdebug")
9100 && ((!strcmp (sec
->name
, ".text")
9101 || !strcmp (sec
->name
, ".data")
9102 || !strcmp (sec
->name
, ".bss"))
9103 && sec
->_raw_size
!= 0))
9105 null_input_bfd
= FALSE
;
9114 if (((new_flags
& (EF_MIPS_PIC
| EF_MIPS_CPIC
)) != 0)
9115 != ((old_flags
& (EF_MIPS_PIC
| EF_MIPS_CPIC
)) != 0))
9117 (*_bfd_error_handler
)
9118 (_("%s: warning: linking PIC files with non-PIC files"),
9119 bfd_archive_filename (ibfd
));
9123 if (new_flags
& (EF_MIPS_PIC
| EF_MIPS_CPIC
))
9124 elf_elfheader (obfd
)->e_flags
|= EF_MIPS_CPIC
;
9125 if (! (new_flags
& EF_MIPS_PIC
))
9126 elf_elfheader (obfd
)->e_flags
&= ~EF_MIPS_PIC
;
9128 new_flags
&= ~ (EF_MIPS_PIC
| EF_MIPS_CPIC
);
9129 old_flags
&= ~ (EF_MIPS_PIC
| EF_MIPS_CPIC
);
9131 /* Compare the ISAs. */
9132 if (mips_32bit_flags_p (old_flags
) != mips_32bit_flags_p (new_flags
))
9134 (*_bfd_error_handler
)
9135 (_("%s: linking 32-bit code with 64-bit code"),
9136 bfd_archive_filename (ibfd
));
9139 else if (!mips_mach_extends_p (bfd_get_mach (ibfd
), bfd_get_mach (obfd
)))
9141 /* OBFD's ISA isn't the same as, or an extension of, IBFD's. */
9142 if (mips_mach_extends_p (bfd_get_mach (obfd
), bfd_get_mach (ibfd
)))
9144 /* Copy the architecture info from IBFD to OBFD. Also copy
9145 the 32-bit flag (if set) so that we continue to recognise
9146 OBFD as a 32-bit binary. */
9147 bfd_set_arch_info (obfd
, bfd_get_arch_info (ibfd
));
9148 elf_elfheader (obfd
)->e_flags
&= ~(EF_MIPS_ARCH
| EF_MIPS_MACH
);
9149 elf_elfheader (obfd
)->e_flags
9150 |= new_flags
& (EF_MIPS_ARCH
| EF_MIPS_MACH
| EF_MIPS_32BITMODE
);
9152 /* Copy across the ABI flags if OBFD doesn't use them
9153 and if that was what caused us to treat IBFD as 32-bit. */
9154 if ((old_flags
& EF_MIPS_ABI
) == 0
9155 && mips_32bit_flags_p (new_flags
)
9156 && !mips_32bit_flags_p (new_flags
& ~EF_MIPS_ABI
))
9157 elf_elfheader (obfd
)->e_flags
|= new_flags
& EF_MIPS_ABI
;
9161 /* The ISAs aren't compatible. */
9162 (*_bfd_error_handler
)
9163 (_("%s: linking %s module with previous %s modules"),
9164 bfd_archive_filename (ibfd
),
9165 bfd_printable_name (ibfd
),
9166 bfd_printable_name (obfd
));
9171 new_flags
&= ~(EF_MIPS_ARCH
| EF_MIPS_MACH
| EF_MIPS_32BITMODE
);
9172 old_flags
&= ~(EF_MIPS_ARCH
| EF_MIPS_MACH
| EF_MIPS_32BITMODE
);
9174 /* Compare ABIs. The 64-bit ABI does not use EF_MIPS_ABI. But, it
9175 does set EI_CLASS differently from any 32-bit ABI. */
9176 if ((new_flags
& EF_MIPS_ABI
) != (old_flags
& EF_MIPS_ABI
)
9177 || (elf_elfheader (ibfd
)->e_ident
[EI_CLASS
]
9178 != elf_elfheader (obfd
)->e_ident
[EI_CLASS
]))
9180 /* Only error if both are set (to different values). */
9181 if (((new_flags
& EF_MIPS_ABI
) && (old_flags
& EF_MIPS_ABI
))
9182 || (elf_elfheader (ibfd
)->e_ident
[EI_CLASS
]
9183 != elf_elfheader (obfd
)->e_ident
[EI_CLASS
]))
9185 (*_bfd_error_handler
)
9186 (_("%s: ABI mismatch: linking %s module with previous %s modules"),
9187 bfd_archive_filename (ibfd
),
9188 elf_mips_abi_name (ibfd
),
9189 elf_mips_abi_name (obfd
));
9192 new_flags
&= ~EF_MIPS_ABI
;
9193 old_flags
&= ~EF_MIPS_ABI
;
9196 /* For now, allow arbitrary mixing of ASEs (retain the union). */
9197 if ((new_flags
& EF_MIPS_ARCH_ASE
) != (old_flags
& EF_MIPS_ARCH_ASE
))
9199 elf_elfheader (obfd
)->e_flags
|= new_flags
& EF_MIPS_ARCH_ASE
;
9201 new_flags
&= ~ EF_MIPS_ARCH_ASE
;
9202 old_flags
&= ~ EF_MIPS_ARCH_ASE
;
9205 /* Warn about any other mismatches */
9206 if (new_flags
!= old_flags
)
9208 (*_bfd_error_handler
)
9209 (_("%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
9210 bfd_archive_filename (ibfd
), (unsigned long) new_flags
,
9211 (unsigned long) old_flags
);
9217 bfd_set_error (bfd_error_bad_value
);
9224 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */
9227 _bfd_mips_elf_set_private_flags (abfd
, flags
)
9231 BFD_ASSERT (!elf_flags_init (abfd
)
9232 || elf_elfheader (abfd
)->e_flags
== flags
);
9234 elf_elfheader (abfd
)->e_flags
= flags
;
9235 elf_flags_init (abfd
) = TRUE
;
9240 _bfd_mips_elf_print_private_bfd_data (abfd
, ptr
)
9244 FILE *file
= (FILE *) ptr
;
9246 BFD_ASSERT (abfd
!= NULL
&& ptr
!= NULL
);
9248 /* Print normal ELF private data. */
9249 _bfd_elf_print_private_bfd_data (abfd
, ptr
);
9251 /* xgettext:c-format */
9252 fprintf (file
, _("private flags = %lx:"), elf_elfheader (abfd
)->e_flags
);
9254 if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ABI
) == E_MIPS_ABI_O32
)
9255 fprintf (file
, _(" [abi=O32]"));
9256 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ABI
) == E_MIPS_ABI_O64
)
9257 fprintf (file
, _(" [abi=O64]"));
9258 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ABI
) == E_MIPS_ABI_EABI32
)
9259 fprintf (file
, _(" [abi=EABI32]"));
9260 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ABI
) == E_MIPS_ABI_EABI64
)
9261 fprintf (file
, _(" [abi=EABI64]"));
9262 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ABI
))
9263 fprintf (file
, _(" [abi unknown]"));
9264 else if (ABI_N32_P (abfd
))
9265 fprintf (file
, _(" [abi=N32]"));
9266 else if (ABI_64_P (abfd
))
9267 fprintf (file
, _(" [abi=64]"));
9269 fprintf (file
, _(" [no abi set]"));
9271 if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_1
)
9272 fprintf (file
, _(" [mips1]"));
9273 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_2
)
9274 fprintf (file
, _(" [mips2]"));
9275 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_3
)
9276 fprintf (file
, _(" [mips3]"));
9277 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_4
)
9278 fprintf (file
, _(" [mips4]"));
9279 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_5
)
9280 fprintf (file
, _(" [mips5]"));
9281 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_32
)
9282 fprintf (file
, _(" [mips32]"));
9283 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_64
)
9284 fprintf (file
, _(" [mips64]"));
9285 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_32R2
)
9286 fprintf (file
, _(" [mips32r2]"));
9287 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_64R2
)
9288 fprintf (file
, _(" [mips64r2]"));
9290 fprintf (file
, _(" [unknown ISA]"));
9292 if (elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH_ASE_MDMX
)
9293 fprintf (file
, _(" [mdmx]"));
9295 if (elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH_ASE_M16
)
9296 fprintf (file
, _(" [mips16]"));
9298 if (elf_elfheader (abfd
)->e_flags
& EF_MIPS_32BITMODE
)
9299 fprintf (file
, _(" [32bitmode]"));
9301 fprintf (file
, _(" [not 32bitmode]"));
9308 struct bfd_elf_special_section
const _bfd_mips_elf_special_sections
[]=
9310 { ".sdata", 6, -2, SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
+ SHF_MIPS_GPREL
},
9311 { ".sbss", 5, -2, SHT_NOBITS
, SHF_ALLOC
+ SHF_WRITE
+ SHF_MIPS_GPREL
},
9312 { ".lit4", 5, 0, SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
+ SHF_MIPS_GPREL
},
9313 { ".lit8", 5, 0, SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
+ SHF_MIPS_GPREL
},
9314 { ".ucode", 6, 0, SHT_MIPS_UCODE
, 0 },
9315 { ".mdebug", 7, 0, SHT_MIPS_DEBUG
, 0 },
9316 { NULL
, 0, 0, 0, 0 }