1 /* MIPS-specific support for ELF
2 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003, 2004, 2005, 2006, 2007, 2008 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
27 MA 02110-1301, USA. */
30 /* This file handles functionality common to the different MIPS ABI's. */
35 #include "libiberty.h"
37 #include "elfxx-mips.h"
39 #include "elf-vxworks.h"
41 /* Get the ECOFF swapping routines. */
43 #include "coff/symconst.h"
44 #include "coff/ecoff.h"
45 #include "coff/mips.h"
49 /* This structure is used to hold information about one GOT entry.
50 There are three types of entry:
52 (1) absolute addresses
54 (2) SYMBOL + OFFSET addresses, where SYMBOL is local to an input bfd
55 (abfd != NULL, symndx >= 0)
56 (3) global and forced-local symbols
57 (abfd != NULL, symndx == -1)
59 Type (3) entries are treated differently for different types of GOT.
60 In the "master" GOT -- i.e. the one that describes every GOT
61 reference needed in the link -- the mips_got_entry is keyed on both
62 the symbol and the input bfd that references it. If it turns out
63 that we need multiple GOTs, we can then use this information to
64 create separate GOTs for each input bfd.
66 However, we want each of these separate GOTs to have at most one
67 entry for a given symbol, so their type (3) entries are keyed only
68 on the symbol. The input bfd given by the "abfd" field is somewhat
69 arbitrary in this case.
71 This means that when there are multiple GOTs, each GOT has a unique
72 mips_got_entry for every symbol within it. We can therefore use the
73 mips_got_entry fields (tls_type and gotidx) to track the symbol's
76 However, if it turns out that we need only a single GOT, we continue
77 to use the master GOT to describe it. There may therefore be several
78 mips_got_entries for the same symbol, each with a different input bfd.
79 We want to make sure that each symbol gets a unique GOT entry, so when
80 there's a single GOT, we use the symbol's hash entry, not the
81 mips_got_entry fields, to track a symbol's GOT index. */
84 /* The input bfd in which the symbol is defined. */
86 /* The index of the symbol, as stored in the relocation r_info, if
87 we have a local symbol; -1 otherwise. */
91 /* If abfd == NULL, an address that must be stored in the got. */
93 /* If abfd != NULL && symndx != -1, the addend of the relocation
94 that should be added to the symbol value. */
96 /* If abfd != NULL && symndx == -1, the hash table entry
97 corresponding to a global symbol in the got (or, local, if
99 struct mips_elf_link_hash_entry
*h
;
102 /* The TLS types included in this GOT entry (specifically, GD and
103 IE). The GD and IE flags can be added as we encounter new
104 relocations. LDM can also be set; it will always be alone, not
105 combined with any GD or IE flags. An LDM GOT entry will be
106 a local symbol entry with r_symndx == 0. */
107 unsigned char tls_type
;
109 /* The offset from the beginning of the .got section to the entry
110 corresponding to this symbol+addend. If it's a global symbol
111 whose offset is yet to be decided, it's going to be -1. */
115 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
116 The structures form a non-overlapping list that is sorted by increasing
118 struct mips_got_page_range
120 struct mips_got_page_range
*next
;
121 bfd_signed_vma min_addend
;
122 bfd_signed_vma max_addend
;
125 /* This structure describes the range of addends that are applied to page
126 relocations against a given symbol. */
127 struct mips_got_page_entry
129 /* The input bfd in which the symbol is defined. */
131 /* The index of the symbol, as stored in the relocation r_info. */
133 /* The ranges for this page entry. */
134 struct mips_got_page_range
*ranges
;
135 /* The maximum number of page entries needed for RANGES. */
139 /* This structure is used to hold .got information when linking. */
143 /* The global symbol in the GOT with the lowest index in the dynamic
145 struct elf_link_hash_entry
*global_gotsym
;
146 /* The number of global .got entries. */
147 unsigned int global_gotno
;
148 /* The number of .got slots used for TLS. */
149 unsigned int tls_gotno
;
150 /* The first unused TLS .got entry. Used only during
151 mips_elf_initialize_tls_index. */
152 unsigned int tls_assigned_gotno
;
153 /* The number of local .got entries, eventually including page entries. */
154 unsigned int local_gotno
;
155 /* The maximum number of page entries needed. */
156 unsigned int page_gotno
;
157 /* The number of local .got entries we have used. */
158 unsigned int assigned_gotno
;
159 /* A hash table holding members of the got. */
160 struct htab
*got_entries
;
161 /* A hash table of mips_got_page_entry structures. */
162 struct htab
*got_page_entries
;
163 /* A hash table mapping input bfds to other mips_got_info. NULL
164 unless multi-got was necessary. */
165 struct htab
*bfd2got
;
166 /* In multi-got links, a pointer to the next got (err, rather, most
167 of the time, it points to the previous got). */
168 struct mips_got_info
*next
;
169 /* This is the GOT index of the TLS LDM entry for the GOT, MINUS_ONE
170 for none, or MINUS_TWO for not yet assigned. This is needed
171 because a single-GOT link may have multiple hash table entries
172 for the LDM. It does not get initialized in multi-GOT mode. */
173 bfd_vma tls_ldm_offset
;
176 /* Map an input bfd to a got in a multi-got link. */
178 struct mips_elf_bfd2got_hash
{
180 struct mips_got_info
*g
;
183 /* Structure passed when traversing the bfd2got hash table, used to
184 create and merge bfd's gots. */
186 struct mips_elf_got_per_bfd_arg
188 /* A hashtable that maps bfds to gots. */
190 /* The output bfd. */
192 /* The link information. */
193 struct bfd_link_info
*info
;
194 /* A pointer to the primary got, i.e., the one that's going to get
195 the implicit relocations from DT_MIPS_LOCAL_GOTNO and
197 struct mips_got_info
*primary
;
198 /* A non-primary got we're trying to merge with other input bfd's
200 struct mips_got_info
*current
;
201 /* The maximum number of got entries that can be addressed with a
203 unsigned int max_count
;
204 /* The maximum number of page entries needed by each got. */
205 unsigned int max_pages
;
206 /* The total number of global entries which will live in the
207 primary got and be automatically relocated. This includes
208 those not referenced by the primary GOT but included in
210 unsigned int global_count
;
213 /* Another structure used to pass arguments for got entries traversal. */
215 struct mips_elf_set_global_got_offset_arg
217 struct mips_got_info
*g
;
219 unsigned int needed_relocs
;
220 struct bfd_link_info
*info
;
223 /* A structure used to count TLS relocations or GOT entries, for GOT
224 entry or ELF symbol table traversal. */
226 struct mips_elf_count_tls_arg
228 struct bfd_link_info
*info
;
232 struct _mips_elf_section_data
234 struct bfd_elf_section_data elf
;
237 struct mips_got_info
*got_info
;
242 #define mips_elf_section_data(sec) \
243 ((struct _mips_elf_section_data *) elf_section_data (sec))
245 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
246 the dynamic symbols. */
248 struct mips_elf_hash_sort_data
250 /* The symbol in the global GOT with the lowest dynamic symbol table
252 struct elf_link_hash_entry
*low
;
253 /* The least dynamic symbol table index corresponding to a non-TLS
254 symbol with a GOT entry. */
255 long min_got_dynindx
;
256 /* The greatest dynamic symbol table index corresponding to a symbol
257 with a GOT entry that is not referenced (e.g., a dynamic symbol
258 with dynamic relocations pointing to it from non-primary GOTs). */
259 long max_unref_got_dynindx
;
260 /* The greatest dynamic symbol table index not corresponding to a
261 symbol without a GOT entry. */
262 long max_non_got_dynindx
;
265 /* The MIPS ELF linker needs additional information for each symbol in
266 the global hash table. */
268 struct mips_elf_link_hash_entry
270 struct elf_link_hash_entry root
;
272 /* External symbol information. */
275 /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
277 unsigned int possibly_dynamic_relocs
;
279 /* If the R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 reloc is against
280 a readonly section. */
281 bfd_boolean readonly_reloc
;
283 /* We must not create a stub for a symbol that has relocations
284 related to taking the function's address, i.e. any but
285 R_MIPS_CALL*16 ones -- see "MIPS ABI Supplement, 3rd Edition",
287 bfd_boolean no_fn_stub
;
289 /* If there is a stub that 32 bit functions should use to call this
290 16 bit function, this points to the section containing the stub. */
293 /* Whether we need the fn_stub; this is set if this symbol appears
294 in any relocs other than a 16 bit call. */
295 bfd_boolean need_fn_stub
;
297 /* If there is a stub that 16 bit functions should use to call this
298 32 bit function, this points to the section containing the stub. */
301 /* This is like the call_stub field, but it is used if the function
302 being called returns a floating point value. */
303 asection
*call_fp_stub
;
305 /* Are we forced local? This will only be set if we have converted
306 the initial global GOT entry to a local GOT entry. */
307 bfd_boolean forced_local
;
309 /* Are we referenced by some kind of relocation? */
310 bfd_boolean is_relocation_target
;
312 /* Are we referenced by branch relocations? */
313 bfd_boolean is_branch_target
;
317 #define GOT_TLS_LDM 2
319 #define GOT_TLS_OFFSET_DONE 0x40
320 #define GOT_TLS_DONE 0x80
321 unsigned char tls_type
;
322 /* This is only used in single-GOT mode; in multi-GOT mode there
323 is one mips_got_entry per GOT entry, so the offset is stored
324 there. In single-GOT mode there may be many mips_got_entry
325 structures all referring to the same GOT slot. It might be
326 possible to use root.got.offset instead, but that field is
327 overloaded already. */
328 bfd_vma tls_got_offset
;
331 /* MIPS ELF linker hash table. */
333 struct mips_elf_link_hash_table
335 struct elf_link_hash_table root
;
337 /* We no longer use this. */
338 /* String section indices for the dynamic section symbols. */
339 bfd_size_type dynsym_sec_strindex
[SIZEOF_MIPS_DYNSYM_SECNAMES
];
341 /* The number of .rtproc entries. */
342 bfd_size_type procedure_count
;
343 /* The size of the .compact_rel section (if SGI_COMPAT). */
344 bfd_size_type compact_rel_size
;
345 /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic
346 entry is set to the address of __rld_obj_head as in IRIX5. */
347 bfd_boolean use_rld_obj_head
;
348 /* This is the value of the __rld_map or __rld_obj_head symbol. */
350 /* This is set if we see any mips16 stub sections. */
351 bfd_boolean mips16_stubs_seen
;
352 /* True if we've computed the size of the GOT. */
353 bfd_boolean computed_got_sizes
;
354 /* True if we're generating code for VxWorks. */
355 bfd_boolean is_vxworks
;
356 /* True if we already reported the small-data section overflow. */
357 bfd_boolean small_data_overflow_reported
;
358 /* Shortcuts to some dynamic sections, or NULL if they are not
366 /* The size of the PLT header in bytes (VxWorks only). */
367 bfd_vma plt_header_size
;
368 /* The size of a PLT entry in bytes (VxWorks only). */
369 bfd_vma plt_entry_size
;
370 /* The size of a function stub entry in bytes. */
371 bfd_vma function_stub_size
;
374 #define TLS_RELOC_P(r_type) \
375 (r_type == R_MIPS_TLS_DTPMOD32 \
376 || r_type == R_MIPS_TLS_DTPMOD64 \
377 || r_type == R_MIPS_TLS_DTPREL32 \
378 || r_type == R_MIPS_TLS_DTPREL64 \
379 || r_type == R_MIPS_TLS_GD \
380 || r_type == R_MIPS_TLS_LDM \
381 || r_type == R_MIPS_TLS_DTPREL_HI16 \
382 || r_type == R_MIPS_TLS_DTPREL_LO16 \
383 || r_type == R_MIPS_TLS_GOTTPREL \
384 || r_type == R_MIPS_TLS_TPREL32 \
385 || r_type == R_MIPS_TLS_TPREL64 \
386 || r_type == R_MIPS_TLS_TPREL_HI16 \
387 || r_type == R_MIPS_TLS_TPREL_LO16)
389 /* Structure used to pass information to mips_elf_output_extsym. */
394 struct bfd_link_info
*info
;
395 struct ecoff_debug_info
*debug
;
396 const struct ecoff_debug_swap
*swap
;
400 /* The names of the runtime procedure table symbols used on IRIX5. */
402 static const char * const mips_elf_dynsym_rtproc_names
[] =
405 "_procedure_string_table",
406 "_procedure_table_size",
410 /* These structures are used to generate the .compact_rel section on
415 unsigned long id1
; /* Always one? */
416 unsigned long num
; /* Number of compact relocation entries. */
417 unsigned long id2
; /* Always two? */
418 unsigned long offset
; /* The file offset of the first relocation. */
419 unsigned long reserved0
; /* Zero? */
420 unsigned long reserved1
; /* Zero? */
429 bfd_byte reserved0
[4];
430 bfd_byte reserved1
[4];
431 } Elf32_External_compact_rel
;
435 unsigned int ctype
: 1; /* 1: long 0: short format. See below. */
436 unsigned int rtype
: 4; /* Relocation types. See below. */
437 unsigned int dist2to
: 8;
438 unsigned int relvaddr
: 19; /* (VADDR - vaddr of the previous entry)/ 4 */
439 unsigned long konst
; /* KONST field. See below. */
440 unsigned long vaddr
; /* VADDR to be relocated. */
445 unsigned int ctype
: 1; /* 1: long 0: short format. See below. */
446 unsigned int rtype
: 4; /* Relocation types. See below. */
447 unsigned int dist2to
: 8;
448 unsigned int relvaddr
: 19; /* (VADDR - vaddr of the previous entry)/ 4 */
449 unsigned long konst
; /* KONST field. See below. */
457 } Elf32_External_crinfo
;
463 } Elf32_External_crinfo2
;
465 /* These are the constants used to swap the bitfields in a crinfo. */
467 #define CRINFO_CTYPE (0x1)
468 #define CRINFO_CTYPE_SH (31)
469 #define CRINFO_RTYPE (0xf)
470 #define CRINFO_RTYPE_SH (27)
471 #define CRINFO_DIST2TO (0xff)
472 #define CRINFO_DIST2TO_SH (19)
473 #define CRINFO_RELVADDR (0x7ffff)
474 #define CRINFO_RELVADDR_SH (0)
476 /* A compact relocation info has long (3 words) or short (2 words)
477 formats. A short format doesn't have VADDR field and relvaddr
478 fields contains ((VADDR - vaddr of the previous entry) >> 2). */
479 #define CRF_MIPS_LONG 1
480 #define CRF_MIPS_SHORT 0
482 /* There are 4 types of compact relocation at least. The value KONST
483 has different meaning for each type:
486 CT_MIPS_REL32 Address in data
487 CT_MIPS_WORD Address in word (XXX)
488 CT_MIPS_GPHI_LO GP - vaddr
489 CT_MIPS_JMPAD Address to jump
492 #define CRT_MIPS_REL32 0xa
493 #define CRT_MIPS_WORD 0xb
494 #define CRT_MIPS_GPHI_LO 0xc
495 #define CRT_MIPS_JMPAD 0xd
497 #define mips_elf_set_cr_format(x,format) ((x).ctype = (format))
498 #define mips_elf_set_cr_type(x,type) ((x).rtype = (type))
499 #define mips_elf_set_cr_dist2to(x,v) ((x).dist2to = (v))
500 #define mips_elf_set_cr_relvaddr(x,d) ((x).relvaddr = (d)<<2)
502 /* The structure of the runtime procedure descriptor created by the
503 loader for use by the static exception system. */
505 typedef struct runtime_pdr
{
506 bfd_vma adr
; /* Memory address of start of procedure. */
507 long regmask
; /* Save register mask. */
508 long regoffset
; /* Save register offset. */
509 long fregmask
; /* Save floating point register mask. */
510 long fregoffset
; /* Save floating point register offset. */
511 long frameoffset
; /* Frame size. */
512 short framereg
; /* Frame pointer register. */
513 short pcreg
; /* Offset or reg of return pc. */
514 long irpss
; /* Index into the runtime string table. */
516 struct exception_info
*exception_info
;/* Pointer to exception array. */
518 #define cbRPDR sizeof (RPDR)
519 #define rpdNil ((pRPDR) 0)
521 static struct mips_got_entry
*mips_elf_create_local_got_entry
522 (bfd
*, struct bfd_link_info
*, bfd
*, struct mips_got_info
*, asection
*,
523 bfd_vma
, unsigned long, struct mips_elf_link_hash_entry
*, int);
524 static bfd_boolean mips_elf_sort_hash_table_f
525 (struct mips_elf_link_hash_entry
*, void *);
526 static bfd_vma mips_elf_high
528 static bfd_boolean mips16_stub_section_p
530 static bfd_boolean mips_elf_create_dynamic_relocation
531 (bfd
*, struct bfd_link_info
*, const Elf_Internal_Rela
*,
532 struct mips_elf_link_hash_entry
*, asection
*, bfd_vma
,
533 bfd_vma
*, asection
*);
534 static hashval_t mips_elf_got_entry_hash
536 static bfd_vma mips_elf_adjust_gp
537 (bfd
*, struct mips_got_info
*, bfd
*);
538 static struct mips_got_info
*mips_elf_got_for_ibfd
539 (struct mips_got_info
*, bfd
*);
541 /* This will be used when we sort the dynamic relocation records. */
542 static bfd
*reldyn_sorting_bfd
;
544 /* Nonzero if ABFD is using the N32 ABI. */
545 #define ABI_N32_P(abfd) \
546 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
548 /* Nonzero if ABFD is using the N64 ABI. */
549 #define ABI_64_P(abfd) \
550 (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
552 /* Nonzero if ABFD is using NewABI conventions. */
553 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
555 /* The IRIX compatibility level we are striving for. */
556 #define IRIX_COMPAT(abfd) \
557 (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
559 /* Whether we are trying to be compatible with IRIX at all. */
560 #define SGI_COMPAT(abfd) \
561 (IRIX_COMPAT (abfd) != ict_none)
563 /* The name of the options section. */
564 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
565 (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
567 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
568 Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME. */
569 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
570 (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
572 /* Whether the section is readonly. */
573 #define MIPS_ELF_READONLY_SECTION(sec) \
574 ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) \
575 == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
577 /* The name of the stub section. */
578 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
580 /* The size of an external REL relocation. */
581 #define MIPS_ELF_REL_SIZE(abfd) \
582 (get_elf_backend_data (abfd)->s->sizeof_rel)
584 /* The size of an external RELA relocation. */
585 #define MIPS_ELF_RELA_SIZE(abfd) \
586 (get_elf_backend_data (abfd)->s->sizeof_rela)
588 /* The size of an external dynamic table entry. */
589 #define MIPS_ELF_DYN_SIZE(abfd) \
590 (get_elf_backend_data (abfd)->s->sizeof_dyn)
592 /* The size of a GOT entry. */
593 #define MIPS_ELF_GOT_SIZE(abfd) \
594 (get_elf_backend_data (abfd)->s->arch_size / 8)
596 /* The size of a symbol-table entry. */
597 #define MIPS_ELF_SYM_SIZE(abfd) \
598 (get_elf_backend_data (abfd)->s->sizeof_sym)
600 /* The default alignment for sections, as a power of two. */
601 #define MIPS_ELF_LOG_FILE_ALIGN(abfd) \
602 (get_elf_backend_data (abfd)->s->log_file_align)
604 /* Get word-sized data. */
605 #define MIPS_ELF_GET_WORD(abfd, ptr) \
606 (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
608 /* Put out word-sized data. */
609 #define MIPS_ELF_PUT_WORD(abfd, val, ptr) \
611 ? bfd_put_64 (abfd, val, ptr) \
612 : bfd_put_32 (abfd, val, ptr))
614 /* Add a dynamic symbol table-entry. */
615 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \
616 _bfd_elf_add_dynamic_entry (info, tag, val)
618 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela) \
619 (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
621 /* Determine whether the internal relocation of index REL_IDX is REL
622 (zero) or RELA (non-zero). The assumption is that, if there are
623 two relocation sections for this section, one of them is REL and
624 the other is RELA. If the index of the relocation we're testing is
625 in range for the first relocation section, check that the external
626 relocation size is that for RELA. It is also assumed that, if
627 rel_idx is not in range for the first section, and this first
628 section contains REL relocs, then the relocation is in the second
629 section, that is RELA. */
630 #define MIPS_RELOC_RELA_P(abfd, sec, rel_idx) \
631 ((NUM_SHDR_ENTRIES (&elf_section_data (sec)->rel_hdr) \
632 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel \
633 > (bfd_vma)(rel_idx)) \
634 == (elf_section_data (sec)->rel_hdr.sh_entsize \
635 == (ABI_64_P (abfd) ? sizeof (Elf64_External_Rela) \
636 : sizeof (Elf32_External_Rela))))
638 /* The name of the dynamic relocation section. */
639 #define MIPS_ELF_REL_DYN_NAME(INFO) \
640 (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
642 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
643 from smaller values. Start with zero, widen, *then* decrement. */
644 #define MINUS_ONE (((bfd_vma)0) - 1)
645 #define MINUS_TWO (((bfd_vma)0) - 2)
647 /* The number of local .got entries we reserve. */
648 #define MIPS_RESERVED_GOTNO(INFO) \
649 (mips_elf_hash_table (INFO)->is_vxworks ? 3 : 2)
651 /* The value to write into got[1] for SVR4 targets, to identify it is
652 a GNU object. The dynamic linker can then use got[1] to store the
654 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
655 ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
657 /* The offset of $gp from the beginning of the .got section. */
658 #define ELF_MIPS_GP_OFFSET(INFO) \
659 (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
661 /* The maximum size of the GOT for it to be addressable using 16-bit
663 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
665 /* Instructions which appear in a stub. */
666 #define STUB_LW(abfd) \
668 ? 0xdf998010 /* ld t9,0x8010(gp) */ \
669 : 0x8f998010)) /* lw t9,0x8010(gp) */
670 #define STUB_MOVE(abfd) \
672 ? 0x03e0782d /* daddu t7,ra */ \
673 : 0x03e07821)) /* addu t7,ra */
674 #define STUB_LUI(VAL) (0x3c180000 + (VAL)) /* lui t8,VAL */
675 #define STUB_JALR 0x0320f809 /* jalr t9,ra */
676 #define STUB_ORI(VAL) (0x37180000 + (VAL)) /* ori t8,t8,VAL */
677 #define STUB_LI16U(VAL) (0x34180000 + (VAL)) /* ori t8,zero,VAL unsigned */
678 #define STUB_LI16S(abfd, VAL) \
680 ? (0x64180000 + (VAL)) /* daddiu t8,zero,VAL sign extended */ \
681 : (0x24180000 + (VAL)))) /* addiu t8,zero,VAL sign extended */
683 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
684 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
686 /* The name of the dynamic interpreter. This is put in the .interp
689 #define ELF_DYNAMIC_INTERPRETER(abfd) \
690 (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" \
691 : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" \
692 : "/usr/lib/libc.so.1")
695 #define MNAME(bfd,pre,pos) \
696 (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
697 #define ELF_R_SYM(bfd, i) \
698 (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
699 #define ELF_R_TYPE(bfd, i) \
700 (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
701 #define ELF_R_INFO(bfd, s, t) \
702 (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
704 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
705 #define ELF_R_SYM(bfd, i) \
707 #define ELF_R_TYPE(bfd, i) \
709 #define ELF_R_INFO(bfd, s, t) \
710 (ELF32_R_INFO (s, t))
713 /* The mips16 compiler uses a couple of special sections to handle
714 floating point arguments.
716 Section names that look like .mips16.fn.FNNAME contain stubs that
717 copy floating point arguments from the fp regs to the gp regs and
718 then jump to FNNAME. If any 32 bit function calls FNNAME, the
719 call should be redirected to the stub instead. If no 32 bit
720 function calls FNNAME, the stub should be discarded. We need to
721 consider any reference to the function, not just a call, because
722 if the address of the function is taken we will need the stub,
723 since the address might be passed to a 32 bit function.
725 Section names that look like .mips16.call.FNNAME contain stubs
726 that copy floating point arguments from the gp regs to the fp
727 regs and then jump to FNNAME. If FNNAME is a 32 bit function,
728 then any 16 bit function that calls FNNAME should be redirected
729 to the stub instead. If FNNAME is not a 32 bit function, the
730 stub should be discarded.
732 .mips16.call.fp.FNNAME sections are similar, but contain stubs
733 which call FNNAME and then copy the return value from the fp regs
734 to the gp regs. These stubs store the return value in $18 while
735 calling FNNAME; any function which might call one of these stubs
736 must arrange to save $18 around the call. (This case is not
737 needed for 32 bit functions that call 16 bit functions, because
738 16 bit functions always return floating point values in both
741 Note that in all cases FNNAME might be defined statically.
742 Therefore, FNNAME is not used literally. Instead, the relocation
743 information will indicate which symbol the section is for.
745 We record any stubs that we find in the symbol table. */
747 #define FN_STUB ".mips16.fn."
748 #define CALL_STUB ".mips16.call."
749 #define CALL_FP_STUB ".mips16.call.fp."
751 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
752 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
753 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
755 /* The format of the first PLT entry in a VxWorks executable. */
756 static const bfd_vma mips_vxworks_exec_plt0_entry
[] = {
757 0x3c190000, /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_) */
758 0x27390000, /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_) */
759 0x8f390008, /* lw t9, 8(t9) */
760 0x00000000, /* nop */
761 0x03200008, /* jr t9 */
765 /* The format of subsequent PLT entries. */
766 static const bfd_vma mips_vxworks_exec_plt_entry
[] = {
767 0x10000000, /* b .PLT_resolver */
768 0x24180000, /* li t8, <pltindex> */
769 0x3c190000, /* lui t9, %hi(<.got.plt slot>) */
770 0x27390000, /* addiu t9, t9, %lo(<.got.plt slot>) */
771 0x8f390000, /* lw t9, 0(t9) */
772 0x00000000, /* nop */
773 0x03200008, /* jr t9 */
777 /* The format of the first PLT entry in a VxWorks shared object. */
778 static const bfd_vma mips_vxworks_shared_plt0_entry
[] = {
779 0x8f990008, /* lw t9, 8(gp) */
780 0x00000000, /* nop */
781 0x03200008, /* jr t9 */
782 0x00000000, /* nop */
783 0x00000000, /* nop */
787 /* The format of subsequent PLT entries. */
788 static const bfd_vma mips_vxworks_shared_plt_entry
[] = {
789 0x10000000, /* b .PLT_resolver */
790 0x24180000 /* li t8, <pltindex> */
793 /* Look up an entry in a MIPS ELF linker hash table. */
795 #define mips_elf_link_hash_lookup(table, string, create, copy, follow) \
796 ((struct mips_elf_link_hash_entry *) \
797 elf_link_hash_lookup (&(table)->root, (string), (create), \
800 /* Traverse a MIPS ELF linker hash table. */
802 #define mips_elf_link_hash_traverse(table, func, info) \
803 (elf_link_hash_traverse \
805 (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \
808 /* Get the MIPS ELF linker hash table from a link_info structure. */
810 #define mips_elf_hash_table(p) \
811 ((struct mips_elf_link_hash_table *) ((p)->hash))
813 /* Find the base offsets for thread-local storage in this object,
814 for GD/LD and IE/LE respectively. */
816 #define TP_OFFSET 0x7000
817 #define DTP_OFFSET 0x8000
820 dtprel_base (struct bfd_link_info
*info
)
822 /* If tls_sec is NULL, we should have signalled an error already. */
823 if (elf_hash_table (info
)->tls_sec
== NULL
)
825 return elf_hash_table (info
)->tls_sec
->vma
+ DTP_OFFSET
;
829 tprel_base (struct bfd_link_info
*info
)
831 /* If tls_sec is NULL, we should have signalled an error already. */
832 if (elf_hash_table (info
)->tls_sec
== NULL
)
834 return elf_hash_table (info
)->tls_sec
->vma
+ TP_OFFSET
;
837 /* Create an entry in a MIPS ELF linker hash table. */
839 static struct bfd_hash_entry
*
840 mips_elf_link_hash_newfunc (struct bfd_hash_entry
*entry
,
841 struct bfd_hash_table
*table
, const char *string
)
843 struct mips_elf_link_hash_entry
*ret
=
844 (struct mips_elf_link_hash_entry
*) entry
;
846 /* Allocate the structure if it has not already been allocated by a
849 ret
= bfd_hash_allocate (table
, sizeof (struct mips_elf_link_hash_entry
));
851 return (struct bfd_hash_entry
*) ret
;
853 /* Call the allocation method of the superclass. */
854 ret
= ((struct mips_elf_link_hash_entry
*)
855 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry
*) ret
,
859 /* Set local fields. */
860 memset (&ret
->esym
, 0, sizeof (EXTR
));
861 /* We use -2 as a marker to indicate that the information has
862 not been set. -1 means there is no associated ifd. */
864 ret
->possibly_dynamic_relocs
= 0;
865 ret
->readonly_reloc
= FALSE
;
866 ret
->no_fn_stub
= FALSE
;
868 ret
->need_fn_stub
= FALSE
;
869 ret
->call_stub
= NULL
;
870 ret
->call_fp_stub
= NULL
;
871 ret
->forced_local
= FALSE
;
872 ret
->is_branch_target
= FALSE
;
873 ret
->is_relocation_target
= FALSE
;
874 ret
->tls_type
= GOT_NORMAL
;
877 return (struct bfd_hash_entry
*) ret
;
881 _bfd_mips_elf_new_section_hook (bfd
*abfd
, asection
*sec
)
883 if (!sec
->used_by_bfd
)
885 struct _mips_elf_section_data
*sdata
;
886 bfd_size_type amt
= sizeof (*sdata
);
888 sdata
= bfd_zalloc (abfd
, amt
);
891 sec
->used_by_bfd
= sdata
;
894 return _bfd_elf_new_section_hook (abfd
, sec
);
897 /* Read ECOFF debugging information from a .mdebug section into a
898 ecoff_debug_info structure. */
901 _bfd_mips_elf_read_ecoff_info (bfd
*abfd
, asection
*section
,
902 struct ecoff_debug_info
*debug
)
905 const struct ecoff_debug_swap
*swap
;
908 swap
= get_elf_backend_data (abfd
)->elf_backend_ecoff_debug_swap
;
909 memset (debug
, 0, sizeof (*debug
));
911 ext_hdr
= bfd_malloc (swap
->external_hdr_size
);
912 if (ext_hdr
== NULL
&& swap
->external_hdr_size
!= 0)
915 if (! bfd_get_section_contents (abfd
, section
, ext_hdr
, 0,
916 swap
->external_hdr_size
))
919 symhdr
= &debug
->symbolic_header
;
920 (*swap
->swap_hdr_in
) (abfd
, ext_hdr
, symhdr
);
922 /* The symbolic header contains absolute file offsets and sizes to
924 #define READ(ptr, offset, count, size, type) \
925 if (symhdr->count == 0) \
929 bfd_size_type amt = (bfd_size_type) size * symhdr->count; \
930 debug->ptr = bfd_malloc (amt); \
931 if (debug->ptr == NULL) \
933 if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0 \
934 || bfd_bread (debug->ptr, amt, abfd) != amt) \
938 READ (line
, cbLineOffset
, cbLine
, sizeof (unsigned char), unsigned char *);
939 READ (external_dnr
, cbDnOffset
, idnMax
, swap
->external_dnr_size
, void *);
940 READ (external_pdr
, cbPdOffset
, ipdMax
, swap
->external_pdr_size
, void *);
941 READ (external_sym
, cbSymOffset
, isymMax
, swap
->external_sym_size
, void *);
942 READ (external_opt
, cbOptOffset
, ioptMax
, swap
->external_opt_size
, void *);
943 READ (external_aux
, cbAuxOffset
, iauxMax
, sizeof (union aux_ext
),
945 READ (ss
, cbSsOffset
, issMax
, sizeof (char), char *);
946 READ (ssext
, cbSsExtOffset
, issExtMax
, sizeof (char), char *);
947 READ (external_fdr
, cbFdOffset
, ifdMax
, swap
->external_fdr_size
, void *);
948 READ (external_rfd
, cbRfdOffset
, crfd
, swap
->external_rfd_size
, void *);
949 READ (external_ext
, cbExtOffset
, iextMax
, swap
->external_ext_size
, void *);
959 if (debug
->line
!= NULL
)
961 if (debug
->external_dnr
!= NULL
)
962 free (debug
->external_dnr
);
963 if (debug
->external_pdr
!= NULL
)
964 free (debug
->external_pdr
);
965 if (debug
->external_sym
!= NULL
)
966 free (debug
->external_sym
);
967 if (debug
->external_opt
!= NULL
)
968 free (debug
->external_opt
);
969 if (debug
->external_aux
!= NULL
)
970 free (debug
->external_aux
);
971 if (debug
->ss
!= NULL
)
973 if (debug
->ssext
!= NULL
)
975 if (debug
->external_fdr
!= NULL
)
976 free (debug
->external_fdr
);
977 if (debug
->external_rfd
!= NULL
)
978 free (debug
->external_rfd
);
979 if (debug
->external_ext
!= NULL
)
980 free (debug
->external_ext
);
984 /* Swap RPDR (runtime procedure table entry) for output. */
987 ecoff_swap_rpdr_out (bfd
*abfd
, const RPDR
*in
, struct rpdr_ext
*ex
)
989 H_PUT_S32 (abfd
, in
->adr
, ex
->p_adr
);
990 H_PUT_32 (abfd
, in
->regmask
, ex
->p_regmask
);
991 H_PUT_32 (abfd
, in
->regoffset
, ex
->p_regoffset
);
992 H_PUT_32 (abfd
, in
->fregmask
, ex
->p_fregmask
);
993 H_PUT_32 (abfd
, in
->fregoffset
, ex
->p_fregoffset
);
994 H_PUT_32 (abfd
, in
->frameoffset
, ex
->p_frameoffset
);
996 H_PUT_16 (abfd
, in
->framereg
, ex
->p_framereg
);
997 H_PUT_16 (abfd
, in
->pcreg
, ex
->p_pcreg
);
999 H_PUT_32 (abfd
, in
->irpss
, ex
->p_irpss
);
1002 /* Create a runtime procedure table from the .mdebug section. */
1005 mips_elf_create_procedure_table (void *handle
, bfd
*abfd
,
1006 struct bfd_link_info
*info
, asection
*s
,
1007 struct ecoff_debug_info
*debug
)
1009 const struct ecoff_debug_swap
*swap
;
1010 HDRR
*hdr
= &debug
->symbolic_header
;
1012 struct rpdr_ext
*erp
;
1014 struct pdr_ext
*epdr
;
1015 struct sym_ext
*esym
;
1019 bfd_size_type count
;
1020 unsigned long sindex
;
1024 const char *no_name_func
= _("static procedure (no name)");
1032 swap
= get_elf_backend_data (abfd
)->elf_backend_ecoff_debug_swap
;
1034 sindex
= strlen (no_name_func
) + 1;
1035 count
= hdr
->ipdMax
;
1038 size
= swap
->external_pdr_size
;
1040 epdr
= bfd_malloc (size
* count
);
1044 if (! _bfd_ecoff_get_accumulated_pdr (handle
, (bfd_byte
*) epdr
))
1047 size
= sizeof (RPDR
);
1048 rp
= rpdr
= bfd_malloc (size
* count
);
1052 size
= sizeof (char *);
1053 sv
= bfd_malloc (size
* count
);
1057 count
= hdr
->isymMax
;
1058 size
= swap
->external_sym_size
;
1059 esym
= bfd_malloc (size
* count
);
1063 if (! _bfd_ecoff_get_accumulated_sym (handle
, (bfd_byte
*) esym
))
1066 count
= hdr
->issMax
;
1067 ss
= bfd_malloc (count
);
1070 if (! _bfd_ecoff_get_accumulated_ss (handle
, (bfd_byte
*) ss
))
1073 count
= hdr
->ipdMax
;
1074 for (i
= 0; i
< (unsigned long) count
; i
++, rp
++)
1076 (*swap
->swap_pdr_in
) (abfd
, epdr
+ i
, &pdr
);
1077 (*swap
->swap_sym_in
) (abfd
, &esym
[pdr
.isym
], &sym
);
1078 rp
->adr
= sym
.value
;
1079 rp
->regmask
= pdr
.regmask
;
1080 rp
->regoffset
= pdr
.regoffset
;
1081 rp
->fregmask
= pdr
.fregmask
;
1082 rp
->fregoffset
= pdr
.fregoffset
;
1083 rp
->frameoffset
= pdr
.frameoffset
;
1084 rp
->framereg
= pdr
.framereg
;
1085 rp
->pcreg
= pdr
.pcreg
;
1087 sv
[i
] = ss
+ sym
.iss
;
1088 sindex
+= strlen (sv
[i
]) + 1;
1092 size
= sizeof (struct rpdr_ext
) * (count
+ 2) + sindex
;
1093 size
= BFD_ALIGN (size
, 16);
1094 rtproc
= bfd_alloc (abfd
, size
);
1097 mips_elf_hash_table (info
)->procedure_count
= 0;
1101 mips_elf_hash_table (info
)->procedure_count
= count
+ 2;
1104 memset (erp
, 0, sizeof (struct rpdr_ext
));
1106 str
= (char *) rtproc
+ sizeof (struct rpdr_ext
) * (count
+ 2);
1107 strcpy (str
, no_name_func
);
1108 str
+= strlen (no_name_func
) + 1;
1109 for (i
= 0; i
< count
; i
++)
1111 ecoff_swap_rpdr_out (abfd
, rpdr
+ i
, erp
+ i
);
1112 strcpy (str
, sv
[i
]);
1113 str
+= strlen (sv
[i
]) + 1;
1115 H_PUT_S32 (abfd
, -1, (erp
+ count
)->p_adr
);
1117 /* Set the size and contents of .rtproc section. */
1119 s
->contents
= rtproc
;
1121 /* Skip this section later on (I don't think this currently
1122 matters, but someday it might). */
1123 s
->map_head
.link_order
= NULL
;
1152 /* Check the mips16 stubs for a particular symbol, and see if we can
1156 mips_elf_check_mips16_stubs (struct mips_elf_link_hash_entry
*h
,
1157 void *data ATTRIBUTE_UNUSED
)
1159 if (h
->root
.root
.type
== bfd_link_hash_warning
)
1160 h
= (struct mips_elf_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
1162 if (h
->fn_stub
!= NULL
1163 && ! h
->need_fn_stub
)
1165 /* We don't need the fn_stub; the only references to this symbol
1166 are 16 bit calls. Clobber the size to 0 to prevent it from
1167 being included in the link. */
1168 h
->fn_stub
->size
= 0;
1169 h
->fn_stub
->flags
&= ~SEC_RELOC
;
1170 h
->fn_stub
->reloc_count
= 0;
1171 h
->fn_stub
->flags
|= SEC_EXCLUDE
;
1174 if (h
->call_stub
!= NULL
1175 && ELF_ST_IS_MIPS16 (h
->root
.other
))
1177 /* We don't need the call_stub; this is a 16 bit function, so
1178 calls from other 16 bit functions are OK. Clobber the size
1179 to 0 to prevent it from being included in the link. */
1180 h
->call_stub
->size
= 0;
1181 h
->call_stub
->flags
&= ~SEC_RELOC
;
1182 h
->call_stub
->reloc_count
= 0;
1183 h
->call_stub
->flags
|= SEC_EXCLUDE
;
1186 if (h
->call_fp_stub
!= NULL
1187 && ELF_ST_IS_MIPS16 (h
->root
.other
))
1189 /* We don't need the call_stub; this is a 16 bit function, so
1190 calls from other 16 bit functions are OK. Clobber the size
1191 to 0 to prevent it from being included in the link. */
1192 h
->call_fp_stub
->size
= 0;
1193 h
->call_fp_stub
->flags
&= ~SEC_RELOC
;
1194 h
->call_fp_stub
->reloc_count
= 0;
1195 h
->call_fp_stub
->flags
|= SEC_EXCLUDE
;
1201 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1202 Most mips16 instructions are 16 bits, but these instructions
1205 The format of these instructions is:
1207 +--------------+--------------------------------+
1208 | JALX | X| Imm 20:16 | Imm 25:21 |
1209 +--------------+--------------------------------+
1211 +-----------------------------------------------+
1213 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx.
1214 Note that the immediate value in the first word is swapped.
1216 When producing a relocatable object file, R_MIPS16_26 is
1217 handled mostly like R_MIPS_26. In particular, the addend is
1218 stored as a straight 26-bit value in a 32-bit instruction.
1219 (gas makes life simpler for itself by never adjusting a
1220 R_MIPS16_26 reloc to be against a section, so the addend is
1221 always zero). However, the 32 bit instruction is stored as 2
1222 16-bit values, rather than a single 32-bit value. In a
1223 big-endian file, the result is the same; in a little-endian
1224 file, the two 16-bit halves of the 32 bit value are swapped.
1225 This is so that a disassembler can recognize the jal
1228 When doing a final link, R_MIPS16_26 is treated as a 32 bit
1229 instruction stored as two 16-bit values. The addend A is the
1230 contents of the targ26 field. The calculation is the same as
1231 R_MIPS_26. When storing the calculated value, reorder the
1232 immediate value as shown above, and don't forget to store the
1233 value as two 16-bit values.
1235 To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1239 +--------+----------------------+
1243 +--------+----------------------+
1246 +----------+------+-------------+
1250 +----------+--------------------+
1251 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1252 ((sub1 << 16) | sub2)).
1254 When producing a relocatable object file, the calculation is
1255 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1256 When producing a fully linked file, the calculation is
1257 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1258 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1260 R_MIPS16_GPREL is used for GP-relative addressing in mips16
1261 mode. A typical instruction will have a format like this:
1263 +--------------+--------------------------------+
1264 | EXTEND | Imm 10:5 | Imm 15:11 |
1265 +--------------+--------------------------------+
1266 | Major | rx | ry | Imm 4:0 |
1267 +--------------+--------------------------------+
1269 EXTEND is the five bit value 11110. Major is the instruction
1272 This is handled exactly like R_MIPS_GPREL16, except that the
1273 addend is retrieved and stored as shown in this diagram; that
1274 is, the Imm fields above replace the V-rel16 field.
1276 All we need to do here is shuffle the bits appropriately. As
1277 above, the two 16-bit halves must be swapped on a
1278 little-endian system.
1280 R_MIPS16_HI16 and R_MIPS16_LO16 are used in mips16 mode to
1281 access data when neither GP-relative nor PC-relative addressing
1282 can be used. They are handled like R_MIPS_HI16 and R_MIPS_LO16,
1283 except that the addend is retrieved and stored as shown above
1287 _bfd_mips16_elf_reloc_unshuffle (bfd
*abfd
, int r_type
,
1288 bfd_boolean jal_shuffle
, bfd_byte
*data
)
1290 bfd_vma extend
, insn
, val
;
1292 if (r_type
!= R_MIPS16_26
&& r_type
!= R_MIPS16_GPREL
1293 && r_type
!= R_MIPS16_HI16
&& r_type
!= R_MIPS16_LO16
)
1296 /* Pick up the mips16 extend instruction and the real instruction. */
1297 extend
= bfd_get_16 (abfd
, data
);
1298 insn
= bfd_get_16 (abfd
, data
+ 2);
1299 if (r_type
== R_MIPS16_26
)
1302 val
= ((extend
& 0xfc00) << 16) | ((extend
& 0x3e0) << 11)
1303 | ((extend
& 0x1f) << 21) | insn
;
1305 val
= extend
<< 16 | insn
;
1308 val
= ((extend
& 0xf800) << 16) | ((insn
& 0xffe0) << 11)
1309 | ((extend
& 0x1f) << 11) | (extend
& 0x7e0) | (insn
& 0x1f);
1310 bfd_put_32 (abfd
, val
, data
);
1314 _bfd_mips16_elf_reloc_shuffle (bfd
*abfd
, int r_type
,
1315 bfd_boolean jal_shuffle
, bfd_byte
*data
)
1317 bfd_vma extend
, insn
, val
;
1319 if (r_type
!= R_MIPS16_26
&& r_type
!= R_MIPS16_GPREL
1320 && r_type
!= R_MIPS16_HI16
&& r_type
!= R_MIPS16_LO16
)
1323 val
= bfd_get_32 (abfd
, data
);
1324 if (r_type
== R_MIPS16_26
)
1328 insn
= val
& 0xffff;
1329 extend
= ((val
>> 16) & 0xfc00) | ((val
>> 11) & 0x3e0)
1330 | ((val
>> 21) & 0x1f);
1334 insn
= val
& 0xffff;
1340 insn
= ((val
>> 11) & 0xffe0) | (val
& 0x1f);
1341 extend
= ((val
>> 16) & 0xf800) | ((val
>> 11) & 0x1f) | (val
& 0x7e0);
1343 bfd_put_16 (abfd
, insn
, data
+ 2);
1344 bfd_put_16 (abfd
, extend
, data
);
1347 bfd_reloc_status_type
1348 _bfd_mips_elf_gprel16_with_gp (bfd
*abfd
, asymbol
*symbol
,
1349 arelent
*reloc_entry
, asection
*input_section
,
1350 bfd_boolean relocatable
, void *data
, bfd_vma gp
)
1354 bfd_reloc_status_type status
;
1356 if (bfd_is_com_section (symbol
->section
))
1359 relocation
= symbol
->value
;
1361 relocation
+= symbol
->section
->output_section
->vma
;
1362 relocation
+= symbol
->section
->output_offset
;
1364 if (reloc_entry
->address
> bfd_get_section_limit (abfd
, input_section
))
1365 return bfd_reloc_outofrange
;
1367 /* Set val to the offset into the section or symbol. */
1368 val
= reloc_entry
->addend
;
1370 _bfd_mips_elf_sign_extend (val
, 16);
1372 /* Adjust val for the final section location and GP value. If we
1373 are producing relocatable output, we don't want to do this for
1374 an external symbol. */
1376 || (symbol
->flags
& BSF_SECTION_SYM
) != 0)
1377 val
+= relocation
- gp
;
1379 if (reloc_entry
->howto
->partial_inplace
)
1381 status
= _bfd_relocate_contents (reloc_entry
->howto
, abfd
, val
,
1383 + reloc_entry
->address
);
1384 if (status
!= bfd_reloc_ok
)
1388 reloc_entry
->addend
= val
;
1391 reloc_entry
->address
+= input_section
->output_offset
;
1393 return bfd_reloc_ok
;
1396 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
1397 R_MIPS_GOT16. REL is the relocation, INPUT_SECTION is the section
1398 that contains the relocation field and DATA points to the start of
1403 struct mips_hi16
*next
;
1405 asection
*input_section
;
1409 /* FIXME: This should not be a static variable. */
1411 static struct mips_hi16
*mips_hi16_list
;
1413 /* A howto special_function for REL *HI16 relocations. We can only
1414 calculate the correct value once we've seen the partnering
1415 *LO16 relocation, so just save the information for later.
1417 The ABI requires that the *LO16 immediately follow the *HI16.
1418 However, as a GNU extension, we permit an arbitrary number of
1419 *HI16s to be associated with a single *LO16. This significantly
1420 simplies the relocation handling in gcc. */
1422 bfd_reloc_status_type
1423 _bfd_mips_elf_hi16_reloc (bfd
*abfd ATTRIBUTE_UNUSED
, arelent
*reloc_entry
,
1424 asymbol
*symbol ATTRIBUTE_UNUSED
, void *data
,
1425 asection
*input_section
, bfd
*output_bfd
,
1426 char **error_message ATTRIBUTE_UNUSED
)
1428 struct mips_hi16
*n
;
1430 if (reloc_entry
->address
> bfd_get_section_limit (abfd
, input_section
))
1431 return bfd_reloc_outofrange
;
1433 n
= bfd_malloc (sizeof *n
);
1435 return bfd_reloc_outofrange
;
1437 n
->next
= mips_hi16_list
;
1439 n
->input_section
= input_section
;
1440 n
->rel
= *reloc_entry
;
1443 if (output_bfd
!= NULL
)
1444 reloc_entry
->address
+= input_section
->output_offset
;
1446 return bfd_reloc_ok
;
1449 /* A howto special_function for REL R_MIPS_GOT16 relocations. This is just
1450 like any other 16-bit relocation when applied to global symbols, but is
1451 treated in the same as R_MIPS_HI16 when applied to local symbols. */
1453 bfd_reloc_status_type
1454 _bfd_mips_elf_got16_reloc (bfd
*abfd
, arelent
*reloc_entry
, asymbol
*symbol
,
1455 void *data
, asection
*input_section
,
1456 bfd
*output_bfd
, char **error_message
)
1458 if ((symbol
->flags
& (BSF_GLOBAL
| BSF_WEAK
)) != 0
1459 || bfd_is_und_section (bfd_get_section (symbol
))
1460 || bfd_is_com_section (bfd_get_section (symbol
)))
1461 /* The relocation is against a global symbol. */
1462 return _bfd_mips_elf_generic_reloc (abfd
, reloc_entry
, symbol
, data
,
1463 input_section
, output_bfd
,
1466 return _bfd_mips_elf_hi16_reloc (abfd
, reloc_entry
, symbol
, data
,
1467 input_section
, output_bfd
, error_message
);
1470 /* A howto special_function for REL *LO16 relocations. The *LO16 itself
1471 is a straightforward 16 bit inplace relocation, but we must deal with
1472 any partnering high-part relocations as well. */
1474 bfd_reloc_status_type
1475 _bfd_mips_elf_lo16_reloc (bfd
*abfd
, arelent
*reloc_entry
, asymbol
*symbol
,
1476 void *data
, asection
*input_section
,
1477 bfd
*output_bfd
, char **error_message
)
1480 bfd_byte
*location
= (bfd_byte
*) data
+ reloc_entry
->address
;
1482 if (reloc_entry
->address
> bfd_get_section_limit (abfd
, input_section
))
1483 return bfd_reloc_outofrange
;
1485 _bfd_mips16_elf_reloc_unshuffle (abfd
, reloc_entry
->howto
->type
, FALSE
,
1487 vallo
= bfd_get_32 (abfd
, location
);
1488 _bfd_mips16_elf_reloc_shuffle (abfd
, reloc_entry
->howto
->type
, FALSE
,
1491 while (mips_hi16_list
!= NULL
)
1493 bfd_reloc_status_type ret
;
1494 struct mips_hi16
*hi
;
1496 hi
= mips_hi16_list
;
1498 /* R_MIPS_GOT16 relocations are something of a special case. We
1499 want to install the addend in the same way as for a R_MIPS_HI16
1500 relocation (with a rightshift of 16). However, since GOT16
1501 relocations can also be used with global symbols, their howto
1502 has a rightshift of 0. */
1503 if (hi
->rel
.howto
->type
== R_MIPS_GOT16
)
1504 hi
->rel
.howto
= MIPS_ELF_RTYPE_TO_HOWTO (abfd
, R_MIPS_HI16
, FALSE
);
1506 /* VALLO is a signed 16-bit number. Bias it by 0x8000 so that any
1507 carry or borrow will induce a change of +1 or -1 in the high part. */
1508 hi
->rel
.addend
+= (vallo
+ 0x8000) & 0xffff;
1510 ret
= _bfd_mips_elf_generic_reloc (abfd
, &hi
->rel
, symbol
, hi
->data
,
1511 hi
->input_section
, output_bfd
,
1513 if (ret
!= bfd_reloc_ok
)
1516 mips_hi16_list
= hi
->next
;
1520 return _bfd_mips_elf_generic_reloc (abfd
, reloc_entry
, symbol
, data
,
1521 input_section
, output_bfd
,
1525 /* A generic howto special_function. This calculates and installs the
1526 relocation itself, thus avoiding the oft-discussed problems in
1527 bfd_perform_relocation and bfd_install_relocation. */
1529 bfd_reloc_status_type
1530 _bfd_mips_elf_generic_reloc (bfd
*abfd ATTRIBUTE_UNUSED
, arelent
*reloc_entry
,
1531 asymbol
*symbol
, void *data ATTRIBUTE_UNUSED
,
1532 asection
*input_section
, bfd
*output_bfd
,
1533 char **error_message ATTRIBUTE_UNUSED
)
1536 bfd_reloc_status_type status
;
1537 bfd_boolean relocatable
;
1539 relocatable
= (output_bfd
!= NULL
);
1541 if (reloc_entry
->address
> bfd_get_section_limit (abfd
, input_section
))
1542 return bfd_reloc_outofrange
;
1544 /* Build up the field adjustment in VAL. */
1546 if (!relocatable
|| (symbol
->flags
& BSF_SECTION_SYM
) != 0)
1548 /* Either we're calculating the final field value or we have a
1549 relocation against a section symbol. Add in the section's
1550 offset or address. */
1551 val
+= symbol
->section
->output_section
->vma
;
1552 val
+= symbol
->section
->output_offset
;
1557 /* We're calculating the final field value. Add in the symbol's value
1558 and, if pc-relative, subtract the address of the field itself. */
1559 val
+= symbol
->value
;
1560 if (reloc_entry
->howto
->pc_relative
)
1562 val
-= input_section
->output_section
->vma
;
1563 val
-= input_section
->output_offset
;
1564 val
-= reloc_entry
->address
;
1568 /* VAL is now the final adjustment. If we're keeping this relocation
1569 in the output file, and if the relocation uses a separate addend,
1570 we just need to add VAL to that addend. Otherwise we need to add
1571 VAL to the relocation field itself. */
1572 if (relocatable
&& !reloc_entry
->howto
->partial_inplace
)
1573 reloc_entry
->addend
+= val
;
1576 bfd_byte
*location
= (bfd_byte
*) data
+ reloc_entry
->address
;
1578 /* Add in the separate addend, if any. */
1579 val
+= reloc_entry
->addend
;
1581 /* Add VAL to the relocation field. */
1582 _bfd_mips16_elf_reloc_unshuffle (abfd
, reloc_entry
->howto
->type
, FALSE
,
1584 status
= _bfd_relocate_contents (reloc_entry
->howto
, abfd
, val
,
1586 _bfd_mips16_elf_reloc_shuffle (abfd
, reloc_entry
->howto
->type
, FALSE
,
1589 if (status
!= bfd_reloc_ok
)
1594 reloc_entry
->address
+= input_section
->output_offset
;
1596 return bfd_reloc_ok
;
1599 /* Swap an entry in a .gptab section. Note that these routines rely
1600 on the equivalence of the two elements of the union. */
1603 bfd_mips_elf32_swap_gptab_in (bfd
*abfd
, const Elf32_External_gptab
*ex
,
1606 in
->gt_entry
.gt_g_value
= H_GET_32 (abfd
, ex
->gt_entry
.gt_g_value
);
1607 in
->gt_entry
.gt_bytes
= H_GET_32 (abfd
, ex
->gt_entry
.gt_bytes
);
1611 bfd_mips_elf32_swap_gptab_out (bfd
*abfd
, const Elf32_gptab
*in
,
1612 Elf32_External_gptab
*ex
)
1614 H_PUT_32 (abfd
, in
->gt_entry
.gt_g_value
, ex
->gt_entry
.gt_g_value
);
1615 H_PUT_32 (abfd
, in
->gt_entry
.gt_bytes
, ex
->gt_entry
.gt_bytes
);
1619 bfd_elf32_swap_compact_rel_out (bfd
*abfd
, const Elf32_compact_rel
*in
,
1620 Elf32_External_compact_rel
*ex
)
1622 H_PUT_32 (abfd
, in
->id1
, ex
->id1
);
1623 H_PUT_32 (abfd
, in
->num
, ex
->num
);
1624 H_PUT_32 (abfd
, in
->id2
, ex
->id2
);
1625 H_PUT_32 (abfd
, in
->offset
, ex
->offset
);
1626 H_PUT_32 (abfd
, in
->reserved0
, ex
->reserved0
);
1627 H_PUT_32 (abfd
, in
->reserved1
, ex
->reserved1
);
1631 bfd_elf32_swap_crinfo_out (bfd
*abfd
, const Elf32_crinfo
*in
,
1632 Elf32_External_crinfo
*ex
)
1636 l
= (((in
->ctype
& CRINFO_CTYPE
) << CRINFO_CTYPE_SH
)
1637 | ((in
->rtype
& CRINFO_RTYPE
) << CRINFO_RTYPE_SH
)
1638 | ((in
->dist2to
& CRINFO_DIST2TO
) << CRINFO_DIST2TO_SH
)
1639 | ((in
->relvaddr
& CRINFO_RELVADDR
) << CRINFO_RELVADDR_SH
));
1640 H_PUT_32 (abfd
, l
, ex
->info
);
1641 H_PUT_32 (abfd
, in
->konst
, ex
->konst
);
1642 H_PUT_32 (abfd
, in
->vaddr
, ex
->vaddr
);
1645 /* A .reginfo section holds a single Elf32_RegInfo structure. These
1646 routines swap this structure in and out. They are used outside of
1647 BFD, so they are globally visible. */
1650 bfd_mips_elf32_swap_reginfo_in (bfd
*abfd
, const Elf32_External_RegInfo
*ex
,
1653 in
->ri_gprmask
= H_GET_32 (abfd
, ex
->ri_gprmask
);
1654 in
->ri_cprmask
[0] = H_GET_32 (abfd
, ex
->ri_cprmask
[0]);
1655 in
->ri_cprmask
[1] = H_GET_32 (abfd
, ex
->ri_cprmask
[1]);
1656 in
->ri_cprmask
[2] = H_GET_32 (abfd
, ex
->ri_cprmask
[2]);
1657 in
->ri_cprmask
[3] = H_GET_32 (abfd
, ex
->ri_cprmask
[3]);
1658 in
->ri_gp_value
= H_GET_32 (abfd
, ex
->ri_gp_value
);
1662 bfd_mips_elf32_swap_reginfo_out (bfd
*abfd
, const Elf32_RegInfo
*in
,
1663 Elf32_External_RegInfo
*ex
)
1665 H_PUT_32 (abfd
, in
->ri_gprmask
, ex
->ri_gprmask
);
1666 H_PUT_32 (abfd
, in
->ri_cprmask
[0], ex
->ri_cprmask
[0]);
1667 H_PUT_32 (abfd
, in
->ri_cprmask
[1], ex
->ri_cprmask
[1]);
1668 H_PUT_32 (abfd
, in
->ri_cprmask
[2], ex
->ri_cprmask
[2]);
1669 H_PUT_32 (abfd
, in
->ri_cprmask
[3], ex
->ri_cprmask
[3]);
1670 H_PUT_32 (abfd
, in
->ri_gp_value
, ex
->ri_gp_value
);
1673 /* In the 64 bit ABI, the .MIPS.options section holds register
1674 information in an Elf64_Reginfo structure. These routines swap
1675 them in and out. They are globally visible because they are used
1676 outside of BFD. These routines are here so that gas can call them
1677 without worrying about whether the 64 bit ABI has been included. */
1680 bfd_mips_elf64_swap_reginfo_in (bfd
*abfd
, const Elf64_External_RegInfo
*ex
,
1681 Elf64_Internal_RegInfo
*in
)
1683 in
->ri_gprmask
= H_GET_32 (abfd
, ex
->ri_gprmask
);
1684 in
->ri_pad
= H_GET_32 (abfd
, ex
->ri_pad
);
1685 in
->ri_cprmask
[0] = H_GET_32 (abfd
, ex
->ri_cprmask
[0]);
1686 in
->ri_cprmask
[1] = H_GET_32 (abfd
, ex
->ri_cprmask
[1]);
1687 in
->ri_cprmask
[2] = H_GET_32 (abfd
, ex
->ri_cprmask
[2]);
1688 in
->ri_cprmask
[3] = H_GET_32 (abfd
, ex
->ri_cprmask
[3]);
1689 in
->ri_gp_value
= H_GET_64 (abfd
, ex
->ri_gp_value
);
1693 bfd_mips_elf64_swap_reginfo_out (bfd
*abfd
, const Elf64_Internal_RegInfo
*in
,
1694 Elf64_External_RegInfo
*ex
)
1696 H_PUT_32 (abfd
, in
->ri_gprmask
, ex
->ri_gprmask
);
1697 H_PUT_32 (abfd
, in
->ri_pad
, ex
->ri_pad
);
1698 H_PUT_32 (abfd
, in
->ri_cprmask
[0], ex
->ri_cprmask
[0]);
1699 H_PUT_32 (abfd
, in
->ri_cprmask
[1], ex
->ri_cprmask
[1]);
1700 H_PUT_32 (abfd
, in
->ri_cprmask
[2], ex
->ri_cprmask
[2]);
1701 H_PUT_32 (abfd
, in
->ri_cprmask
[3], ex
->ri_cprmask
[3]);
1702 H_PUT_64 (abfd
, in
->ri_gp_value
, ex
->ri_gp_value
);
1705 /* Swap in an options header. */
1708 bfd_mips_elf_swap_options_in (bfd
*abfd
, const Elf_External_Options
*ex
,
1709 Elf_Internal_Options
*in
)
1711 in
->kind
= H_GET_8 (abfd
, ex
->kind
);
1712 in
->size
= H_GET_8 (abfd
, ex
->size
);
1713 in
->section
= H_GET_16 (abfd
, ex
->section
);
1714 in
->info
= H_GET_32 (abfd
, ex
->info
);
1717 /* Swap out an options header. */
1720 bfd_mips_elf_swap_options_out (bfd
*abfd
, const Elf_Internal_Options
*in
,
1721 Elf_External_Options
*ex
)
1723 H_PUT_8 (abfd
, in
->kind
, ex
->kind
);
1724 H_PUT_8 (abfd
, in
->size
, ex
->size
);
1725 H_PUT_16 (abfd
, in
->section
, ex
->section
);
1726 H_PUT_32 (abfd
, in
->info
, ex
->info
);
1729 /* This function is called via qsort() to sort the dynamic relocation
1730 entries by increasing r_symndx value. */
1733 sort_dynamic_relocs (const void *arg1
, const void *arg2
)
1735 Elf_Internal_Rela int_reloc1
;
1736 Elf_Internal_Rela int_reloc2
;
1739 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd
, arg1
, &int_reloc1
);
1740 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd
, arg2
, &int_reloc2
);
1742 diff
= ELF32_R_SYM (int_reloc1
.r_info
) - ELF32_R_SYM (int_reloc2
.r_info
);
1746 if (int_reloc1
.r_offset
< int_reloc2
.r_offset
)
1748 if (int_reloc1
.r_offset
> int_reloc2
.r_offset
)
1753 /* Like sort_dynamic_relocs, but used for elf64 relocations. */
1756 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED
,
1757 const void *arg2 ATTRIBUTE_UNUSED
)
1760 Elf_Internal_Rela int_reloc1
[3];
1761 Elf_Internal_Rela int_reloc2
[3];
1763 (*get_elf_backend_data (reldyn_sorting_bfd
)->s
->swap_reloc_in
)
1764 (reldyn_sorting_bfd
, arg1
, int_reloc1
);
1765 (*get_elf_backend_data (reldyn_sorting_bfd
)->s
->swap_reloc_in
)
1766 (reldyn_sorting_bfd
, arg2
, int_reloc2
);
1768 if (ELF64_R_SYM (int_reloc1
[0].r_info
) < ELF64_R_SYM (int_reloc2
[0].r_info
))
1770 if (ELF64_R_SYM (int_reloc1
[0].r_info
) > ELF64_R_SYM (int_reloc2
[0].r_info
))
1773 if (int_reloc1
[0].r_offset
< int_reloc2
[0].r_offset
)
1775 if (int_reloc1
[0].r_offset
> int_reloc2
[0].r_offset
)
1784 /* This routine is used to write out ECOFF debugging external symbol
1785 information. It is called via mips_elf_link_hash_traverse. The
1786 ECOFF external symbol information must match the ELF external
1787 symbol information. Unfortunately, at this point we don't know
1788 whether a symbol is required by reloc information, so the two
1789 tables may wind up being different. We must sort out the external
1790 symbol information before we can set the final size of the .mdebug
1791 section, and we must set the size of the .mdebug section before we
1792 can relocate any sections, and we can't know which symbols are
1793 required by relocation until we relocate the sections.
1794 Fortunately, it is relatively unlikely that any symbol will be
1795 stripped but required by a reloc. In particular, it can not happen
1796 when generating a final executable. */
1799 mips_elf_output_extsym (struct mips_elf_link_hash_entry
*h
, void *data
)
1801 struct extsym_info
*einfo
= data
;
1803 asection
*sec
, *output_section
;
1805 if (h
->root
.root
.type
== bfd_link_hash_warning
)
1806 h
= (struct mips_elf_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
1808 if (h
->root
.indx
== -2)
1810 else if ((h
->root
.def_dynamic
1811 || h
->root
.ref_dynamic
1812 || h
->root
.type
== bfd_link_hash_new
)
1813 && !h
->root
.def_regular
1814 && !h
->root
.ref_regular
)
1816 else if (einfo
->info
->strip
== strip_all
1817 || (einfo
->info
->strip
== strip_some
1818 && bfd_hash_lookup (einfo
->info
->keep_hash
,
1819 h
->root
.root
.root
.string
,
1820 FALSE
, FALSE
) == NULL
))
1828 if (h
->esym
.ifd
== -2)
1831 h
->esym
.cobol_main
= 0;
1832 h
->esym
.weakext
= 0;
1833 h
->esym
.reserved
= 0;
1834 h
->esym
.ifd
= ifdNil
;
1835 h
->esym
.asym
.value
= 0;
1836 h
->esym
.asym
.st
= stGlobal
;
1838 if (h
->root
.root
.type
== bfd_link_hash_undefined
1839 || h
->root
.root
.type
== bfd_link_hash_undefweak
)
1843 /* Use undefined class. Also, set class and type for some
1845 name
= h
->root
.root
.root
.string
;
1846 if (strcmp (name
, mips_elf_dynsym_rtproc_names
[0]) == 0
1847 || strcmp (name
, mips_elf_dynsym_rtproc_names
[1]) == 0)
1849 h
->esym
.asym
.sc
= scData
;
1850 h
->esym
.asym
.st
= stLabel
;
1851 h
->esym
.asym
.value
= 0;
1853 else if (strcmp (name
, mips_elf_dynsym_rtproc_names
[2]) == 0)
1855 h
->esym
.asym
.sc
= scAbs
;
1856 h
->esym
.asym
.st
= stLabel
;
1857 h
->esym
.asym
.value
=
1858 mips_elf_hash_table (einfo
->info
)->procedure_count
;
1860 else if (strcmp (name
, "_gp_disp") == 0 && ! NEWABI_P (einfo
->abfd
))
1862 h
->esym
.asym
.sc
= scAbs
;
1863 h
->esym
.asym
.st
= stLabel
;
1864 h
->esym
.asym
.value
= elf_gp (einfo
->abfd
);
1867 h
->esym
.asym
.sc
= scUndefined
;
1869 else if (h
->root
.root
.type
!= bfd_link_hash_defined
1870 && h
->root
.root
.type
!= bfd_link_hash_defweak
)
1871 h
->esym
.asym
.sc
= scAbs
;
1876 sec
= h
->root
.root
.u
.def
.section
;
1877 output_section
= sec
->output_section
;
1879 /* When making a shared library and symbol h is the one from
1880 the another shared library, OUTPUT_SECTION may be null. */
1881 if (output_section
== NULL
)
1882 h
->esym
.asym
.sc
= scUndefined
;
1885 name
= bfd_section_name (output_section
->owner
, output_section
);
1887 if (strcmp (name
, ".text") == 0)
1888 h
->esym
.asym
.sc
= scText
;
1889 else if (strcmp (name
, ".data") == 0)
1890 h
->esym
.asym
.sc
= scData
;
1891 else if (strcmp (name
, ".sdata") == 0)
1892 h
->esym
.asym
.sc
= scSData
;
1893 else if (strcmp (name
, ".rodata") == 0
1894 || strcmp (name
, ".rdata") == 0)
1895 h
->esym
.asym
.sc
= scRData
;
1896 else if (strcmp (name
, ".bss") == 0)
1897 h
->esym
.asym
.sc
= scBss
;
1898 else if (strcmp (name
, ".sbss") == 0)
1899 h
->esym
.asym
.sc
= scSBss
;
1900 else if (strcmp (name
, ".init") == 0)
1901 h
->esym
.asym
.sc
= scInit
;
1902 else if (strcmp (name
, ".fini") == 0)
1903 h
->esym
.asym
.sc
= scFini
;
1905 h
->esym
.asym
.sc
= scAbs
;
1909 h
->esym
.asym
.reserved
= 0;
1910 h
->esym
.asym
.index
= indexNil
;
1913 if (h
->root
.root
.type
== bfd_link_hash_common
)
1914 h
->esym
.asym
.value
= h
->root
.root
.u
.c
.size
;
1915 else if (h
->root
.root
.type
== bfd_link_hash_defined
1916 || h
->root
.root
.type
== bfd_link_hash_defweak
)
1918 if (h
->esym
.asym
.sc
== scCommon
)
1919 h
->esym
.asym
.sc
= scBss
;
1920 else if (h
->esym
.asym
.sc
== scSCommon
)
1921 h
->esym
.asym
.sc
= scSBss
;
1923 sec
= h
->root
.root
.u
.def
.section
;
1924 output_section
= sec
->output_section
;
1925 if (output_section
!= NULL
)
1926 h
->esym
.asym
.value
= (h
->root
.root
.u
.def
.value
1927 + sec
->output_offset
1928 + output_section
->vma
);
1930 h
->esym
.asym
.value
= 0;
1932 else if (h
->root
.needs_plt
)
1934 struct mips_elf_link_hash_entry
*hd
= h
;
1935 bfd_boolean no_fn_stub
= h
->no_fn_stub
;
1937 while (hd
->root
.root
.type
== bfd_link_hash_indirect
)
1939 hd
= (struct mips_elf_link_hash_entry
*)h
->root
.root
.u
.i
.link
;
1940 no_fn_stub
= no_fn_stub
|| hd
->no_fn_stub
;
1945 /* Set type and value for a symbol with a function stub. */
1946 h
->esym
.asym
.st
= stProc
;
1947 sec
= hd
->root
.root
.u
.def
.section
;
1949 h
->esym
.asym
.value
= 0;
1952 output_section
= sec
->output_section
;
1953 if (output_section
!= NULL
)
1954 h
->esym
.asym
.value
= (hd
->root
.plt
.offset
1955 + sec
->output_offset
1956 + output_section
->vma
);
1958 h
->esym
.asym
.value
= 0;
1963 if (! bfd_ecoff_debug_one_external (einfo
->abfd
, einfo
->debug
, einfo
->swap
,
1964 h
->root
.root
.root
.string
,
1967 einfo
->failed
= TRUE
;
1974 /* A comparison routine used to sort .gptab entries. */
1977 gptab_compare (const void *p1
, const void *p2
)
1979 const Elf32_gptab
*a1
= p1
;
1980 const Elf32_gptab
*a2
= p2
;
1982 return a1
->gt_entry
.gt_g_value
- a2
->gt_entry
.gt_g_value
;
1985 /* Functions to manage the got entry hash table. */
1987 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
1990 static INLINE hashval_t
1991 mips_elf_hash_bfd_vma (bfd_vma addr
)
1994 return addr
+ (addr
>> 32);
2000 /* got_entries only match if they're identical, except for gotidx, so
2001 use all fields to compute the hash, and compare the appropriate
2005 mips_elf_got_entry_hash (const void *entry_
)
2007 const struct mips_got_entry
*entry
= (struct mips_got_entry
*)entry_
;
2009 return entry
->symndx
2010 + ((entry
->tls_type
& GOT_TLS_LDM
) << 17)
2011 + (! entry
->abfd
? mips_elf_hash_bfd_vma (entry
->d
.address
)
2013 + (entry
->symndx
>= 0 ? mips_elf_hash_bfd_vma (entry
->d
.addend
)
2014 : entry
->d
.h
->root
.root
.root
.hash
));
2018 mips_elf_got_entry_eq (const void *entry1
, const void *entry2
)
2020 const struct mips_got_entry
*e1
= (struct mips_got_entry
*)entry1
;
2021 const struct mips_got_entry
*e2
= (struct mips_got_entry
*)entry2
;
2023 /* An LDM entry can only match another LDM entry. */
2024 if ((e1
->tls_type
^ e2
->tls_type
) & GOT_TLS_LDM
)
2027 return e1
->abfd
== e2
->abfd
&& e1
->symndx
== e2
->symndx
2028 && (! e1
->abfd
? e1
->d
.address
== e2
->d
.address
2029 : e1
->symndx
>= 0 ? e1
->d
.addend
== e2
->d
.addend
2030 : e1
->d
.h
== e2
->d
.h
);
2033 /* multi_got_entries are still a match in the case of global objects,
2034 even if the input bfd in which they're referenced differs, so the
2035 hash computation and compare functions are adjusted
2039 mips_elf_multi_got_entry_hash (const void *entry_
)
2041 const struct mips_got_entry
*entry
= (struct mips_got_entry
*)entry_
;
2043 return entry
->symndx
2045 ? mips_elf_hash_bfd_vma (entry
->d
.address
)
2046 : entry
->symndx
>= 0
2047 ? ((entry
->tls_type
& GOT_TLS_LDM
)
2048 ? (GOT_TLS_LDM
<< 17)
2050 + mips_elf_hash_bfd_vma (entry
->d
.addend
)))
2051 : entry
->d
.h
->root
.root
.root
.hash
);
2055 mips_elf_multi_got_entry_eq (const void *entry1
, const void *entry2
)
2057 const struct mips_got_entry
*e1
= (struct mips_got_entry
*)entry1
;
2058 const struct mips_got_entry
*e2
= (struct mips_got_entry
*)entry2
;
2060 /* Any two LDM entries match. */
2061 if (e1
->tls_type
& e2
->tls_type
& GOT_TLS_LDM
)
2064 /* Nothing else matches an LDM entry. */
2065 if ((e1
->tls_type
^ e2
->tls_type
) & GOT_TLS_LDM
)
2068 return e1
->symndx
== e2
->symndx
2069 && (e1
->symndx
>= 0 ? e1
->abfd
== e2
->abfd
&& e1
->d
.addend
== e2
->d
.addend
2070 : e1
->abfd
== NULL
|| e2
->abfd
== NULL
2071 ? e1
->abfd
== e2
->abfd
&& e1
->d
.address
== e2
->d
.address
2072 : e1
->d
.h
== e2
->d
.h
);
2076 mips_got_page_entry_hash (const void *entry_
)
2078 const struct mips_got_page_entry
*entry
;
2080 entry
= (const struct mips_got_page_entry
*) entry_
;
2081 return entry
->abfd
->id
+ entry
->symndx
;
2085 mips_got_page_entry_eq (const void *entry1_
, const void *entry2_
)
2087 const struct mips_got_page_entry
*entry1
, *entry2
;
2089 entry1
= (const struct mips_got_page_entry
*) entry1_
;
2090 entry2
= (const struct mips_got_page_entry
*) entry2_
;
2091 return entry1
->abfd
== entry2
->abfd
&& entry1
->symndx
== entry2
->symndx
;
2094 /* Return the dynamic relocation section. If it doesn't exist, try to
2095 create a new it if CREATE_P, otherwise return NULL. Also return NULL
2096 if creation fails. */
2099 mips_elf_rel_dyn_section (struct bfd_link_info
*info
, bfd_boolean create_p
)
2105 dname
= MIPS_ELF_REL_DYN_NAME (info
);
2106 dynobj
= elf_hash_table (info
)->dynobj
;
2107 sreloc
= bfd_get_section_by_name (dynobj
, dname
);
2108 if (sreloc
== NULL
&& create_p
)
2110 sreloc
= bfd_make_section_with_flags (dynobj
, dname
,
2115 | SEC_LINKER_CREATED
2118 || ! bfd_set_section_alignment (dynobj
, sreloc
,
2119 MIPS_ELF_LOG_FILE_ALIGN (dynobj
)))
2125 /* Returns the GOT section for ABFD. */
2128 mips_elf_got_section (bfd
*abfd
, bfd_boolean maybe_excluded
)
2130 asection
*sgot
= bfd_get_section_by_name (abfd
, ".got");
2132 || (! maybe_excluded
&& (sgot
->flags
& SEC_EXCLUDE
) != 0))
2137 /* Returns the GOT information associated with the link indicated by
2138 INFO. If SGOTP is non-NULL, it is filled in with the GOT
2141 static struct mips_got_info
*
2142 mips_elf_got_info (bfd
*abfd
, asection
**sgotp
)
2145 struct mips_got_info
*g
;
2147 sgot
= mips_elf_got_section (abfd
, TRUE
);
2148 BFD_ASSERT (sgot
!= NULL
);
2149 BFD_ASSERT (mips_elf_section_data (sgot
) != NULL
);
2150 g
= mips_elf_section_data (sgot
)->u
.got_info
;
2151 BFD_ASSERT (g
!= NULL
);
2154 *sgotp
= (sgot
->flags
& SEC_EXCLUDE
) == 0 ? sgot
: NULL
;
2159 /* Count the number of relocations needed for a TLS GOT entry, with
2160 access types from TLS_TYPE, and symbol H (or a local symbol if H
2164 mips_tls_got_relocs (struct bfd_link_info
*info
, unsigned char tls_type
,
2165 struct elf_link_hash_entry
*h
)
2169 bfd_boolean need_relocs
= FALSE
;
2170 bfd_boolean dyn
= elf_hash_table (info
)->dynamic_sections_created
;
2172 if (h
&& WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn
, info
->shared
, h
)
2173 && (!info
->shared
|| !SYMBOL_REFERENCES_LOCAL (info
, h
)))
2176 if ((info
->shared
|| indx
!= 0)
2178 || ELF_ST_VISIBILITY (h
->other
) == STV_DEFAULT
2179 || h
->root
.type
!= bfd_link_hash_undefweak
))
2185 if (tls_type
& GOT_TLS_GD
)
2192 if (tls_type
& GOT_TLS_IE
)
2195 if ((tls_type
& GOT_TLS_LDM
) && info
->shared
)
2201 /* Count the number of TLS relocations required for the GOT entry in
2202 ARG1, if it describes a local symbol. */
2205 mips_elf_count_local_tls_relocs (void **arg1
, void *arg2
)
2207 struct mips_got_entry
*entry
= * (struct mips_got_entry
**) arg1
;
2208 struct mips_elf_count_tls_arg
*arg
= arg2
;
2210 if (entry
->abfd
!= NULL
&& entry
->symndx
!= -1)
2211 arg
->needed
+= mips_tls_got_relocs (arg
->info
, entry
->tls_type
, NULL
);
2216 /* Count the number of TLS GOT entries required for the global (or
2217 forced-local) symbol in ARG1. */
2220 mips_elf_count_global_tls_entries (void *arg1
, void *arg2
)
2222 struct mips_elf_link_hash_entry
*hm
2223 = (struct mips_elf_link_hash_entry
*) arg1
;
2224 struct mips_elf_count_tls_arg
*arg
= arg2
;
2226 if (hm
->tls_type
& GOT_TLS_GD
)
2228 if (hm
->tls_type
& GOT_TLS_IE
)
2234 /* Count the number of TLS relocations required for the global (or
2235 forced-local) symbol in ARG1. */
2238 mips_elf_count_global_tls_relocs (void *arg1
, void *arg2
)
2240 struct mips_elf_link_hash_entry
*hm
2241 = (struct mips_elf_link_hash_entry
*) arg1
;
2242 struct mips_elf_count_tls_arg
*arg
= arg2
;
2244 arg
->needed
+= mips_tls_got_relocs (arg
->info
, hm
->tls_type
, &hm
->root
);
2249 /* Output a simple dynamic relocation into SRELOC. */
2252 mips_elf_output_dynamic_relocation (bfd
*output_bfd
,
2258 Elf_Internal_Rela rel
[3];
2260 memset (rel
, 0, sizeof (rel
));
2262 rel
[0].r_info
= ELF_R_INFO (output_bfd
, indx
, r_type
);
2263 rel
[0].r_offset
= rel
[1].r_offset
= rel
[2].r_offset
= offset
;
2265 if (ABI_64_P (output_bfd
))
2267 (*get_elf_backend_data (output_bfd
)->s
->swap_reloc_out
)
2268 (output_bfd
, &rel
[0],
2270 + sreloc
->reloc_count
* sizeof (Elf64_Mips_External_Rel
)));
2273 bfd_elf32_swap_reloc_out
2274 (output_bfd
, &rel
[0],
2276 + sreloc
->reloc_count
* sizeof (Elf32_External_Rel
)));
2277 ++sreloc
->reloc_count
;
2280 /* Initialize a set of TLS GOT entries for one symbol. */
2283 mips_elf_initialize_tls_slots (bfd
*abfd
, bfd_vma got_offset
,
2284 unsigned char *tls_type_p
,
2285 struct bfd_link_info
*info
,
2286 struct mips_elf_link_hash_entry
*h
,
2290 asection
*sreloc
, *sgot
;
2291 bfd_vma offset
, offset2
;
2293 bfd_boolean need_relocs
= FALSE
;
2295 dynobj
= elf_hash_table (info
)->dynobj
;
2296 sgot
= mips_elf_got_section (dynobj
, FALSE
);
2301 bfd_boolean dyn
= elf_hash_table (info
)->dynamic_sections_created
;
2303 if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn
, info
->shared
, &h
->root
)
2304 && (!info
->shared
|| !SYMBOL_REFERENCES_LOCAL (info
, &h
->root
)))
2305 indx
= h
->root
.dynindx
;
2308 if (*tls_type_p
& GOT_TLS_DONE
)
2311 if ((info
->shared
|| indx
!= 0)
2313 || ELF_ST_VISIBILITY (h
->root
.other
) == STV_DEFAULT
2314 || h
->root
.type
!= bfd_link_hash_undefweak
))
2317 /* MINUS_ONE means the symbol is not defined in this object. It may not
2318 be defined at all; assume that the value doesn't matter in that
2319 case. Otherwise complain if we would use the value. */
2320 BFD_ASSERT (value
!= MINUS_ONE
|| (indx
!= 0 && need_relocs
)
2321 || h
->root
.root
.type
== bfd_link_hash_undefweak
);
2323 /* Emit necessary relocations. */
2324 sreloc
= mips_elf_rel_dyn_section (info
, FALSE
);
2326 /* General Dynamic. */
2327 if (*tls_type_p
& GOT_TLS_GD
)
2329 offset
= got_offset
;
2330 offset2
= offset
+ MIPS_ELF_GOT_SIZE (abfd
);
2334 mips_elf_output_dynamic_relocation
2335 (abfd
, sreloc
, indx
,
2336 ABI_64_P (abfd
) ? R_MIPS_TLS_DTPMOD64
: R_MIPS_TLS_DTPMOD32
,
2337 sgot
->output_offset
+ sgot
->output_section
->vma
+ offset
);
2340 mips_elf_output_dynamic_relocation
2341 (abfd
, sreloc
, indx
,
2342 ABI_64_P (abfd
) ? R_MIPS_TLS_DTPREL64
: R_MIPS_TLS_DTPREL32
,
2343 sgot
->output_offset
+ sgot
->output_section
->vma
+ offset2
);
2345 MIPS_ELF_PUT_WORD (abfd
, value
- dtprel_base (info
),
2346 sgot
->contents
+ offset2
);
2350 MIPS_ELF_PUT_WORD (abfd
, 1,
2351 sgot
->contents
+ offset
);
2352 MIPS_ELF_PUT_WORD (abfd
, value
- dtprel_base (info
),
2353 sgot
->contents
+ offset2
);
2356 got_offset
+= 2 * MIPS_ELF_GOT_SIZE (abfd
);
2359 /* Initial Exec model. */
2360 if (*tls_type_p
& GOT_TLS_IE
)
2362 offset
= got_offset
;
2367 MIPS_ELF_PUT_WORD (abfd
, value
- elf_hash_table (info
)->tls_sec
->vma
,
2368 sgot
->contents
+ offset
);
2370 MIPS_ELF_PUT_WORD (abfd
, 0,
2371 sgot
->contents
+ offset
);
2373 mips_elf_output_dynamic_relocation
2374 (abfd
, sreloc
, indx
,
2375 ABI_64_P (abfd
) ? R_MIPS_TLS_TPREL64
: R_MIPS_TLS_TPREL32
,
2376 sgot
->output_offset
+ sgot
->output_section
->vma
+ offset
);
2379 MIPS_ELF_PUT_WORD (abfd
, value
- tprel_base (info
),
2380 sgot
->contents
+ offset
);
2383 if (*tls_type_p
& GOT_TLS_LDM
)
2385 /* The initial offset is zero, and the LD offsets will include the
2386 bias by DTP_OFFSET. */
2387 MIPS_ELF_PUT_WORD (abfd
, 0,
2388 sgot
->contents
+ got_offset
2389 + MIPS_ELF_GOT_SIZE (abfd
));
2392 MIPS_ELF_PUT_WORD (abfd
, 1,
2393 sgot
->contents
+ got_offset
);
2395 mips_elf_output_dynamic_relocation
2396 (abfd
, sreloc
, indx
,
2397 ABI_64_P (abfd
) ? R_MIPS_TLS_DTPMOD64
: R_MIPS_TLS_DTPMOD32
,
2398 sgot
->output_offset
+ sgot
->output_section
->vma
+ got_offset
);
2401 *tls_type_p
|= GOT_TLS_DONE
;
2404 /* Return the GOT index to use for a relocation of type R_TYPE against
2405 a symbol accessed using TLS_TYPE models. The GOT entries for this
2406 symbol in this GOT start at GOT_INDEX. This function initializes the
2407 GOT entries and corresponding relocations. */
2410 mips_tls_got_index (bfd
*abfd
, bfd_vma got_index
, unsigned char *tls_type
,
2411 int r_type
, struct bfd_link_info
*info
,
2412 struct mips_elf_link_hash_entry
*h
, bfd_vma symbol
)
2414 BFD_ASSERT (r_type
== R_MIPS_TLS_GOTTPREL
|| r_type
== R_MIPS_TLS_GD
2415 || r_type
== R_MIPS_TLS_LDM
);
2417 mips_elf_initialize_tls_slots (abfd
, got_index
, tls_type
, info
, h
, symbol
);
2419 if (r_type
== R_MIPS_TLS_GOTTPREL
)
2421 BFD_ASSERT (*tls_type
& GOT_TLS_IE
);
2422 if (*tls_type
& GOT_TLS_GD
)
2423 return got_index
+ 2 * MIPS_ELF_GOT_SIZE (abfd
);
2428 if (r_type
== R_MIPS_TLS_GD
)
2430 BFD_ASSERT (*tls_type
& GOT_TLS_GD
);
2434 if (r_type
== R_MIPS_TLS_LDM
)
2436 BFD_ASSERT (*tls_type
& GOT_TLS_LDM
);
2443 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
2444 for global symbol H. .got.plt comes before the GOT, so the offset
2445 will be negative. */
2448 mips_elf_gotplt_index (struct bfd_link_info
*info
,
2449 struct elf_link_hash_entry
*h
)
2451 bfd_vma plt_index
, got_address
, got_value
;
2452 struct mips_elf_link_hash_table
*htab
;
2454 htab
= mips_elf_hash_table (info
);
2455 BFD_ASSERT (h
->plt
.offset
!= (bfd_vma
) -1);
2457 /* Calculate the index of the symbol's PLT entry. */
2458 plt_index
= (h
->plt
.offset
- htab
->plt_header_size
) / htab
->plt_entry_size
;
2460 /* Calculate the address of the associated .got.plt entry. */
2461 got_address
= (htab
->sgotplt
->output_section
->vma
2462 + htab
->sgotplt
->output_offset
2465 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */
2466 got_value
= (htab
->root
.hgot
->root
.u
.def
.section
->output_section
->vma
2467 + htab
->root
.hgot
->root
.u
.def
.section
->output_offset
2468 + htab
->root
.hgot
->root
.u
.def
.value
);
2470 return got_address
- got_value
;
2473 /* Return the GOT offset for address VALUE. If there is not yet a GOT
2474 entry for this value, create one. If R_SYMNDX refers to a TLS symbol,
2475 create a TLS GOT entry instead. Return -1 if no satisfactory GOT
2476 offset can be found. */
2479 mips_elf_local_got_index (bfd
*abfd
, bfd
*ibfd
, struct bfd_link_info
*info
,
2480 bfd_vma value
, unsigned long r_symndx
,
2481 struct mips_elf_link_hash_entry
*h
, int r_type
)
2484 struct mips_got_info
*g
;
2485 struct mips_got_entry
*entry
;
2487 g
= mips_elf_got_info (elf_hash_table (info
)->dynobj
, &sgot
);
2489 entry
= mips_elf_create_local_got_entry (abfd
, info
, ibfd
, g
, sgot
,
2490 value
, r_symndx
, h
, r_type
);
2494 if (TLS_RELOC_P (r_type
))
2496 if (entry
->symndx
== -1 && g
->next
== NULL
)
2497 /* A type (3) entry in the single-GOT case. We use the symbol's
2498 hash table entry to track the index. */
2499 return mips_tls_got_index (abfd
, h
->tls_got_offset
, &h
->tls_type
,
2500 r_type
, info
, h
, value
);
2502 return mips_tls_got_index (abfd
, entry
->gotidx
, &entry
->tls_type
,
2503 r_type
, info
, h
, value
);
2506 return entry
->gotidx
;
2509 /* Returns the GOT index for the global symbol indicated by H. */
2512 mips_elf_global_got_index (bfd
*abfd
, bfd
*ibfd
, struct elf_link_hash_entry
*h
,
2513 int r_type
, struct bfd_link_info
*info
)
2517 struct mips_got_info
*g
, *gg
;
2518 long global_got_dynindx
= 0;
2520 gg
= g
= mips_elf_got_info (abfd
, &sgot
);
2521 if (g
->bfd2got
&& ibfd
)
2523 struct mips_got_entry e
, *p
;
2525 BFD_ASSERT (h
->dynindx
>= 0);
2527 g
= mips_elf_got_for_ibfd (g
, ibfd
);
2528 if (g
->next
!= gg
|| TLS_RELOC_P (r_type
))
2532 e
.d
.h
= (struct mips_elf_link_hash_entry
*)h
;
2535 p
= htab_find (g
->got_entries
, &e
);
2537 BFD_ASSERT (p
->gotidx
> 0);
2539 if (TLS_RELOC_P (r_type
))
2541 bfd_vma value
= MINUS_ONE
;
2542 if ((h
->root
.type
== bfd_link_hash_defined
2543 || h
->root
.type
== bfd_link_hash_defweak
)
2544 && h
->root
.u
.def
.section
->output_section
)
2545 value
= (h
->root
.u
.def
.value
2546 + h
->root
.u
.def
.section
->output_offset
2547 + h
->root
.u
.def
.section
->output_section
->vma
);
2549 return mips_tls_got_index (abfd
, p
->gotidx
, &p
->tls_type
, r_type
,
2550 info
, e
.d
.h
, value
);
2557 if (gg
->global_gotsym
!= NULL
)
2558 global_got_dynindx
= gg
->global_gotsym
->dynindx
;
2560 if (TLS_RELOC_P (r_type
))
2562 struct mips_elf_link_hash_entry
*hm
2563 = (struct mips_elf_link_hash_entry
*) h
;
2564 bfd_vma value
= MINUS_ONE
;
2566 if ((h
->root
.type
== bfd_link_hash_defined
2567 || h
->root
.type
== bfd_link_hash_defweak
)
2568 && h
->root
.u
.def
.section
->output_section
)
2569 value
= (h
->root
.u
.def
.value
2570 + h
->root
.u
.def
.section
->output_offset
2571 + h
->root
.u
.def
.section
->output_section
->vma
);
2573 index
= mips_tls_got_index (abfd
, hm
->tls_got_offset
, &hm
->tls_type
,
2574 r_type
, info
, hm
, value
);
2578 /* Once we determine the global GOT entry with the lowest dynamic
2579 symbol table index, we must put all dynamic symbols with greater
2580 indices into the GOT. That makes it easy to calculate the GOT
2582 BFD_ASSERT (h
->dynindx
>= global_got_dynindx
);
2583 index
= ((h
->dynindx
- global_got_dynindx
+ g
->local_gotno
)
2584 * MIPS_ELF_GOT_SIZE (abfd
));
2586 BFD_ASSERT (index
< sgot
->size
);
2591 /* Find a GOT page entry that points to within 32KB of VALUE. These
2592 entries are supposed to be placed at small offsets in the GOT, i.e.,
2593 within 32KB of GP. Return the index of the GOT entry, or -1 if no
2594 entry could be created. If OFFSETP is nonnull, use it to return the
2595 offset of the GOT entry from VALUE. */
2598 mips_elf_got_page (bfd
*abfd
, bfd
*ibfd
, struct bfd_link_info
*info
,
2599 bfd_vma value
, bfd_vma
*offsetp
)
2602 struct mips_got_info
*g
;
2603 bfd_vma page
, index
;
2604 struct mips_got_entry
*entry
;
2606 g
= mips_elf_got_info (elf_hash_table (info
)->dynobj
, &sgot
);
2608 page
= (value
+ 0x8000) & ~(bfd_vma
) 0xffff;
2609 entry
= mips_elf_create_local_got_entry (abfd
, info
, ibfd
, g
, sgot
,
2610 page
, 0, NULL
, R_MIPS_GOT_PAGE
);
2615 index
= entry
->gotidx
;
2618 *offsetp
= value
- entry
->d
.address
;
2623 /* Find a local GOT entry for an R_MIPS_GOT16 relocation against VALUE.
2624 EXTERNAL is true if the relocation was against a global symbol
2625 that has been forced local. */
2628 mips_elf_got16_entry (bfd
*abfd
, bfd
*ibfd
, struct bfd_link_info
*info
,
2629 bfd_vma value
, bfd_boolean external
)
2632 struct mips_got_info
*g
;
2633 struct mips_got_entry
*entry
;
2635 /* GOT16 relocations against local symbols are followed by a LO16
2636 relocation; those against global symbols are not. Thus if the
2637 symbol was originally local, the GOT16 relocation should load the
2638 equivalent of %hi(VALUE), otherwise it should load VALUE itself. */
2640 value
= mips_elf_high (value
) << 16;
2642 g
= mips_elf_got_info (elf_hash_table (info
)->dynobj
, &sgot
);
2644 entry
= mips_elf_create_local_got_entry (abfd
, info
, ibfd
, g
, sgot
,
2645 value
, 0, NULL
, R_MIPS_GOT16
);
2647 return entry
->gotidx
;
2652 /* Returns the offset for the entry at the INDEXth position
2656 mips_elf_got_offset_from_index (bfd
*dynobj
, bfd
*output_bfd
,
2657 bfd
*input_bfd
, bfd_vma index
)
2661 struct mips_got_info
*g
;
2663 g
= mips_elf_got_info (dynobj
, &sgot
);
2664 gp
= _bfd_get_gp_value (output_bfd
)
2665 + mips_elf_adjust_gp (output_bfd
, g
, input_bfd
);
2667 return sgot
->output_section
->vma
+ sgot
->output_offset
+ index
- gp
;
2670 /* Create and return a local GOT entry for VALUE, which was calculated
2671 from a symbol belonging to INPUT_SECTON. Return NULL if it could not
2672 be created. If R_SYMNDX refers to a TLS symbol, create a TLS entry
2675 static struct mips_got_entry
*
2676 mips_elf_create_local_got_entry (bfd
*abfd
, struct bfd_link_info
*info
,
2677 bfd
*ibfd
, struct mips_got_info
*gg
,
2678 asection
*sgot
, bfd_vma value
,
2679 unsigned long r_symndx
,
2680 struct mips_elf_link_hash_entry
*h
,
2683 struct mips_got_entry entry
, **loc
;
2684 struct mips_got_info
*g
;
2685 struct mips_elf_link_hash_table
*htab
;
2687 htab
= mips_elf_hash_table (info
);
2691 entry
.d
.address
= value
;
2694 g
= mips_elf_got_for_ibfd (gg
, ibfd
);
2697 g
= mips_elf_got_for_ibfd (gg
, abfd
);
2698 BFD_ASSERT (g
!= NULL
);
2701 /* We might have a symbol, H, if it has been forced local. Use the
2702 global entry then. It doesn't matter whether an entry is local
2703 or global for TLS, since the dynamic linker does not
2704 automatically relocate TLS GOT entries. */
2705 BFD_ASSERT (h
== NULL
|| h
->root
.forced_local
);
2706 if (TLS_RELOC_P (r_type
))
2708 struct mips_got_entry
*p
;
2711 if (r_type
== R_MIPS_TLS_LDM
)
2713 entry
.tls_type
= GOT_TLS_LDM
;
2719 entry
.symndx
= r_symndx
;
2725 p
= (struct mips_got_entry
*)
2726 htab_find (g
->got_entries
, &entry
);
2732 loc
= (struct mips_got_entry
**) htab_find_slot (g
->got_entries
, &entry
,
2737 entry
.gotidx
= MIPS_ELF_GOT_SIZE (abfd
) * g
->assigned_gotno
++;
2740 *loc
= (struct mips_got_entry
*)bfd_alloc (abfd
, sizeof entry
);
2745 memcpy (*loc
, &entry
, sizeof entry
);
2747 if (g
->assigned_gotno
> g
->local_gotno
)
2749 (*loc
)->gotidx
= -1;
2750 /* We didn't allocate enough space in the GOT. */
2751 (*_bfd_error_handler
)
2752 (_("not enough GOT space for local GOT entries"));
2753 bfd_set_error (bfd_error_bad_value
);
2757 MIPS_ELF_PUT_WORD (abfd
, value
,
2758 (sgot
->contents
+ entry
.gotidx
));
2760 /* These GOT entries need a dynamic relocation on VxWorks. */
2761 if (htab
->is_vxworks
)
2763 Elf_Internal_Rela outrel
;
2766 bfd_vma got_address
;
2768 s
= mips_elf_rel_dyn_section (info
, FALSE
);
2769 got_address
= (sgot
->output_section
->vma
2770 + sgot
->output_offset
2773 loc
= s
->contents
+ (s
->reloc_count
++ * sizeof (Elf32_External_Rela
));
2774 outrel
.r_offset
= got_address
;
2775 outrel
.r_info
= ELF32_R_INFO (STN_UNDEF
, R_MIPS_32
);
2776 outrel
.r_addend
= value
;
2777 bfd_elf32_swap_reloca_out (abfd
, &outrel
, loc
);
2783 /* Sort the dynamic symbol table so that symbols that need GOT entries
2784 appear towards the end. This reduces the amount of GOT space
2785 required. MAX_LOCAL is used to set the number of local symbols
2786 known to be in the dynamic symbol table. During
2787 _bfd_mips_elf_size_dynamic_sections, this value is 1. Afterward, the
2788 section symbols are added and the count is higher. */
2791 mips_elf_sort_hash_table (struct bfd_link_info
*info
, unsigned long max_local
)
2793 struct mips_elf_hash_sort_data hsd
;
2794 struct mips_got_info
*g
;
2797 dynobj
= elf_hash_table (info
)->dynobj
;
2799 g
= mips_elf_got_info (dynobj
, NULL
);
2802 hsd
.max_unref_got_dynindx
=
2803 hsd
.min_got_dynindx
= elf_hash_table (info
)->dynsymcount
2804 /* In the multi-got case, assigned_gotno of the master got_info
2805 indicate the number of entries that aren't referenced in the
2806 primary GOT, but that must have entries because there are
2807 dynamic relocations that reference it. Since they aren't
2808 referenced, we move them to the end of the GOT, so that they
2809 don't prevent other entries that are referenced from getting
2810 too large offsets. */
2811 - (g
->next
? g
->assigned_gotno
: 0);
2812 hsd
.max_non_got_dynindx
= max_local
;
2813 mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table
*)
2814 elf_hash_table (info
)),
2815 mips_elf_sort_hash_table_f
,
2818 /* There should have been enough room in the symbol table to
2819 accommodate both the GOT and non-GOT symbols. */
2820 BFD_ASSERT (hsd
.max_non_got_dynindx
<= hsd
.min_got_dynindx
);
2821 BFD_ASSERT ((unsigned long)hsd
.max_unref_got_dynindx
2822 <= elf_hash_table (info
)->dynsymcount
);
2824 /* Now we know which dynamic symbol has the lowest dynamic symbol
2825 table index in the GOT. */
2826 g
->global_gotsym
= hsd
.low
;
2831 /* If H needs a GOT entry, assign it the highest available dynamic
2832 index. Otherwise, assign it the lowest available dynamic
2836 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry
*h
, void *data
)
2838 struct mips_elf_hash_sort_data
*hsd
= data
;
2840 if (h
->root
.root
.type
== bfd_link_hash_warning
)
2841 h
= (struct mips_elf_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
2843 /* Symbols without dynamic symbol table entries aren't interesting
2845 if (h
->root
.dynindx
== -1)
2848 /* Global symbols that need GOT entries that are not explicitly
2849 referenced are marked with got offset 2. Those that are
2850 referenced get a 1, and those that don't need GOT entries get
2851 -1. Forced local symbols may also be marked with got offset 1,
2852 but are never given global GOT entries. */
2853 if (h
->root
.got
.offset
== 2)
2855 BFD_ASSERT (h
->tls_type
== GOT_NORMAL
);
2857 if (hsd
->max_unref_got_dynindx
== hsd
->min_got_dynindx
)
2858 hsd
->low
= (struct elf_link_hash_entry
*) h
;
2859 h
->root
.dynindx
= hsd
->max_unref_got_dynindx
++;
2861 else if (h
->root
.got
.offset
!= 1 || h
->forced_local
)
2862 h
->root
.dynindx
= hsd
->max_non_got_dynindx
++;
2865 BFD_ASSERT (h
->tls_type
== GOT_NORMAL
);
2867 h
->root
.dynindx
= --hsd
->min_got_dynindx
;
2868 hsd
->low
= (struct elf_link_hash_entry
*) h
;
2874 /* If H is a symbol that needs a global GOT entry, but has a dynamic
2875 symbol table index lower than any we've seen to date, record it for
2879 mips_elf_record_global_got_symbol (struct elf_link_hash_entry
*h
,
2880 bfd
*abfd
, struct bfd_link_info
*info
,
2881 struct mips_got_info
*g
,
2882 unsigned char tls_flag
)
2884 struct mips_got_entry entry
, **loc
;
2886 /* A global symbol in the GOT must also be in the dynamic symbol
2888 if (h
->dynindx
== -1)
2890 switch (ELF_ST_VISIBILITY (h
->other
))
2894 _bfd_mips_elf_hide_symbol (info
, h
, TRUE
);
2897 if (!bfd_elf_link_record_dynamic_symbol (info
, h
))
2901 /* Make sure we have a GOT to put this entry into. */
2902 BFD_ASSERT (g
!= NULL
);
2906 entry
.d
.h
= (struct mips_elf_link_hash_entry
*) h
;
2909 loc
= (struct mips_got_entry
**) htab_find_slot (g
->got_entries
, &entry
,
2912 /* If we've already marked this entry as needing GOT space, we don't
2913 need to do it again. */
2916 (*loc
)->tls_type
|= tls_flag
;
2920 *loc
= (struct mips_got_entry
*)bfd_alloc (abfd
, sizeof entry
);
2926 entry
.tls_type
= tls_flag
;
2928 memcpy (*loc
, &entry
, sizeof entry
);
2930 if (h
->got
.offset
!= MINUS_ONE
)
2935 /* By setting this to a value other than -1, we are indicating that
2936 there needs to be a GOT entry for H. Avoid using zero, as the
2937 generic ELF copy_indirect_symbol tests for <= 0. */
2939 if (h
->forced_local
)
2946 /* Reserve space in G for a GOT entry containing the value of symbol
2947 SYMNDX in input bfd ABDF, plus ADDEND. */
2950 mips_elf_record_local_got_symbol (bfd
*abfd
, long symndx
, bfd_vma addend
,
2951 struct mips_got_info
*g
,
2952 unsigned char tls_flag
)
2954 struct mips_got_entry entry
, **loc
;
2957 entry
.symndx
= symndx
;
2958 entry
.d
.addend
= addend
;
2959 entry
.tls_type
= tls_flag
;
2960 loc
= (struct mips_got_entry
**)
2961 htab_find_slot (g
->got_entries
, &entry
, INSERT
);
2965 if (tls_flag
== GOT_TLS_GD
&& !((*loc
)->tls_type
& GOT_TLS_GD
))
2968 (*loc
)->tls_type
|= tls_flag
;
2970 else if (tls_flag
== GOT_TLS_IE
&& !((*loc
)->tls_type
& GOT_TLS_IE
))
2973 (*loc
)->tls_type
|= tls_flag
;
2981 entry
.tls_type
= tls_flag
;
2982 if (tls_flag
== GOT_TLS_IE
)
2984 else if (tls_flag
== GOT_TLS_GD
)
2986 else if (g
->tls_ldm_offset
== MINUS_ONE
)
2988 g
->tls_ldm_offset
= MINUS_TWO
;
2994 entry
.gotidx
= g
->local_gotno
++;
2998 *loc
= (struct mips_got_entry
*)bfd_alloc (abfd
, sizeof entry
);
3003 memcpy (*loc
, &entry
, sizeof entry
);
3008 /* Return the maximum number of GOT page entries required for RANGE. */
3011 mips_elf_pages_for_range (const struct mips_got_page_range
*range
)
3013 return (range
->max_addend
- range
->min_addend
+ 0x1ffff) >> 16;
3016 /* Record that ABFD has a page relocation against symbol SYMNDX and
3017 that ADDEND is the addend for that relocation. G is the GOT
3018 information. This function creates an upper bound on the number of
3019 GOT slots required; no attempt is made to combine references to
3020 non-overridable global symbols across multiple input files. */
3023 mips_elf_record_got_page_entry (bfd
*abfd
, long symndx
, bfd_signed_vma addend
,
3024 struct mips_got_info
*g
)
3026 struct mips_got_page_entry lookup
, *entry
;
3027 struct mips_got_page_range
**range_ptr
, *range
;
3028 bfd_vma old_pages
, new_pages
;
3031 /* Find the mips_got_page_entry hash table entry for this symbol. */
3033 lookup
.symndx
= symndx
;
3034 loc
= htab_find_slot (g
->got_page_entries
, &lookup
, INSERT
);
3038 /* Create a mips_got_page_entry if this is the first time we've
3040 entry
= (struct mips_got_page_entry
*) *loc
;
3043 entry
= bfd_alloc (abfd
, sizeof (*entry
));
3048 entry
->symndx
= symndx
;
3049 entry
->ranges
= NULL
;
3050 entry
->num_pages
= 0;
3054 /* Skip over ranges whose maximum extent cannot share a page entry
3056 range_ptr
= &entry
->ranges
;
3057 while (*range_ptr
&& addend
> (*range_ptr
)->max_addend
+ 0xffff)
3058 range_ptr
= &(*range_ptr
)->next
;
3060 /* If we scanned to the end of the list, or found a range whose
3061 minimum extent cannot share a page entry with ADDEND, create
3062 a new singleton range. */
3064 if (!range
|| addend
< range
->min_addend
- 0xffff)
3066 range
= bfd_alloc (abfd
, sizeof (*range
));
3070 range
->next
= *range_ptr
;
3071 range
->min_addend
= addend
;
3072 range
->max_addend
= addend
;
3080 /* Remember how many pages the old range contributed. */
3081 old_pages
= mips_elf_pages_for_range (range
);
3083 /* Update the ranges. */
3084 if (addend
< range
->min_addend
)
3085 range
->min_addend
= addend
;
3086 else if (addend
> range
->max_addend
)
3088 if (range
->next
&& addend
>= range
->next
->min_addend
- 0xffff)
3090 old_pages
+= mips_elf_pages_for_range (range
->next
);
3091 range
->max_addend
= range
->next
->max_addend
;
3092 range
->next
= range
->next
->next
;
3095 range
->max_addend
= addend
;
3098 /* Record any change in the total estimate. */
3099 new_pages
= mips_elf_pages_for_range (range
);
3100 if (old_pages
!= new_pages
)
3102 entry
->num_pages
+= new_pages
- old_pages
;
3103 g
->page_gotno
+= new_pages
- old_pages
;
3109 /* Compute the hash value of the bfd in a bfd2got hash entry. */
3112 mips_elf_bfd2got_entry_hash (const void *entry_
)
3114 const struct mips_elf_bfd2got_hash
*entry
3115 = (struct mips_elf_bfd2got_hash
*)entry_
;
3117 return entry
->bfd
->id
;
3120 /* Check whether two hash entries have the same bfd. */
3123 mips_elf_bfd2got_entry_eq (const void *entry1
, const void *entry2
)
3125 const struct mips_elf_bfd2got_hash
*e1
3126 = (const struct mips_elf_bfd2got_hash
*)entry1
;
3127 const struct mips_elf_bfd2got_hash
*e2
3128 = (const struct mips_elf_bfd2got_hash
*)entry2
;
3130 return e1
->bfd
== e2
->bfd
;
3133 /* In a multi-got link, determine the GOT to be used for IBFD. G must
3134 be the master GOT data. */
3136 static struct mips_got_info
*
3137 mips_elf_got_for_ibfd (struct mips_got_info
*g
, bfd
*ibfd
)
3139 struct mips_elf_bfd2got_hash e
, *p
;
3145 p
= htab_find (g
->bfd2got
, &e
);
3146 return p
? p
->g
: NULL
;
3149 /* Use BFD2GOT to find ABFD's got entry, creating one if none exists.
3150 Return NULL if an error occured. */
3152 static struct mips_got_info
*
3153 mips_elf_get_got_for_bfd (struct htab
*bfd2got
, bfd
*output_bfd
,
3156 struct mips_elf_bfd2got_hash bfdgot_entry
, *bfdgot
;
3157 struct mips_got_info
*g
;
3160 bfdgot_entry
.bfd
= input_bfd
;
3161 bfdgotp
= htab_find_slot (bfd2got
, &bfdgot_entry
, INSERT
);
3162 bfdgot
= (struct mips_elf_bfd2got_hash
*) *bfdgotp
;
3166 bfdgot
= ((struct mips_elf_bfd2got_hash
*)
3167 bfd_alloc (output_bfd
, sizeof (struct mips_elf_bfd2got_hash
)));
3173 g
= ((struct mips_got_info
*)
3174 bfd_alloc (output_bfd
, sizeof (struct mips_got_info
)));
3178 bfdgot
->bfd
= input_bfd
;
3181 g
->global_gotsym
= NULL
;
3182 g
->global_gotno
= 0;
3185 g
->assigned_gotno
= -1;
3187 g
->tls_assigned_gotno
= 0;
3188 g
->tls_ldm_offset
= MINUS_ONE
;
3189 g
->got_entries
= htab_try_create (1, mips_elf_multi_got_entry_hash
,
3190 mips_elf_multi_got_entry_eq
, NULL
);
3191 if (g
->got_entries
== NULL
)
3194 g
->got_page_entries
= htab_try_create (1, mips_got_page_entry_hash
,
3195 mips_got_page_entry_eq
, NULL
);
3196 if (g
->got_page_entries
== NULL
)
3206 /* A htab_traverse callback for the entries in the master got.
3207 Create one separate got for each bfd that has entries in the global
3208 got, such that we can tell how many local and global entries each
3212 mips_elf_make_got_per_bfd (void **entryp
, void *p
)
3214 struct mips_got_entry
*entry
= (struct mips_got_entry
*)*entryp
;
3215 struct mips_elf_got_per_bfd_arg
*arg
= (struct mips_elf_got_per_bfd_arg
*)p
;
3216 struct mips_got_info
*g
;
3218 g
= mips_elf_get_got_for_bfd (arg
->bfd2got
, arg
->obfd
, entry
->abfd
);
3225 /* Insert the GOT entry in the bfd's got entry hash table. */
3226 entryp
= htab_find_slot (g
->got_entries
, entry
, INSERT
);
3227 if (*entryp
!= NULL
)
3232 if (entry
->tls_type
)
3234 if (entry
->tls_type
& (GOT_TLS_GD
| GOT_TLS_LDM
))
3236 if (entry
->tls_type
& GOT_TLS_IE
)
3239 else if (entry
->symndx
>= 0 || entry
->d
.h
->forced_local
)
3247 /* A htab_traverse callback for the page entries in the master got.
3248 Associate each page entry with the bfd's got. */
3251 mips_elf_make_got_pages_per_bfd (void **entryp
, void *p
)
3253 struct mips_got_page_entry
*entry
= (struct mips_got_page_entry
*) *entryp
;
3254 struct mips_elf_got_per_bfd_arg
*arg
= (struct mips_elf_got_per_bfd_arg
*) p
;
3255 struct mips_got_info
*g
;
3257 g
= mips_elf_get_got_for_bfd (arg
->bfd2got
, arg
->obfd
, entry
->abfd
);
3264 /* Insert the GOT entry in the bfd's got entry hash table. */
3265 entryp
= htab_find_slot (g
->got_page_entries
, entry
, INSERT
);
3266 if (*entryp
!= NULL
)
3270 g
->page_gotno
+= entry
->num_pages
;
3274 /* Consider merging the got described by BFD2GOT with TO, using the
3275 information given by ARG. Return -1 if this would lead to overflow,
3276 1 if they were merged successfully, and 0 if a merge failed due to
3277 lack of memory. (These values are chosen so that nonnegative return
3278 values can be returned by a htab_traverse callback.) */
3281 mips_elf_merge_got_with (struct mips_elf_bfd2got_hash
*bfd2got
,
3282 struct mips_got_info
*to
,
3283 struct mips_elf_got_per_bfd_arg
*arg
)
3285 struct mips_got_info
*from
= bfd2got
->g
;
3286 unsigned int estimate
;
3288 /* Work out how many page entries we would need for the combined GOT. */
3289 estimate
= arg
->max_pages
;
3290 if (estimate
>= from
->page_gotno
+ to
->page_gotno
)
3291 estimate
= from
->page_gotno
+ to
->page_gotno
;
3293 /* And conservatively estimate how many local, global and TLS entries
3295 estimate
+= (from
->local_gotno
3296 + from
->global_gotno
3302 /* Bail out if the combined GOT might be too big. */
3303 if (estimate
> arg
->max_count
)
3306 /* Commit to the merge. Record that TO is now the bfd for this got. */
3309 /* Transfer the bfd's got information from FROM to TO. */
3310 htab_traverse (from
->got_entries
, mips_elf_make_got_per_bfd
, arg
);
3311 if (arg
->obfd
== NULL
)
3314 htab_traverse (from
->got_page_entries
, mips_elf_make_got_pages_per_bfd
, arg
);
3315 if (arg
->obfd
== NULL
)
3318 /* We don't have to worry about releasing memory of the actual
3319 got entries, since they're all in the master got_entries hash
3321 htab_delete (from
->got_entries
);
3322 htab_delete (from
->got_page_entries
);
3326 /* Attempt to merge gots of different input bfds. Try to use as much
3327 as possible of the primary got, since it doesn't require explicit
3328 dynamic relocations, but don't use bfds that would reference global
3329 symbols out of the addressable range. Failing the primary got,
3330 attempt to merge with the current got, or finish the current got
3331 and then make make the new got current. */
3334 mips_elf_merge_gots (void **bfd2got_
, void *p
)
3336 struct mips_elf_bfd2got_hash
*bfd2got
3337 = (struct mips_elf_bfd2got_hash
*)*bfd2got_
;
3338 struct mips_elf_got_per_bfd_arg
*arg
= (struct mips_elf_got_per_bfd_arg
*)p
;
3339 struct mips_got_info
*g
;
3340 unsigned int estimate
;
3345 /* Work out the number of page, local and TLS entries. */
3346 estimate
= arg
->max_pages
;
3347 if (estimate
> g
->page_gotno
)
3348 estimate
= g
->page_gotno
;
3349 estimate
+= g
->local_gotno
+ g
->tls_gotno
;
3351 /* We place TLS GOT entries after both locals and globals. The globals
3352 for the primary GOT may overflow the normal GOT size limit, so be
3353 sure not to merge a GOT which requires TLS with the primary GOT in that
3354 case. This doesn't affect non-primary GOTs. */
3355 estimate
+= (g
->tls_gotno
> 0 ? arg
->global_count
: g
->global_gotno
);
3357 if (estimate
<= arg
->max_count
)
3359 /* If we don't have a primary GOT, use it as
3360 a starting point for the primary GOT. */
3363 arg
->primary
= bfd2got
->g
;
3367 /* Try merging with the primary GOT. */
3368 result
= mips_elf_merge_got_with (bfd2got
, arg
->primary
, arg
);
3373 /* If we can merge with the last-created got, do it. */
3376 result
= mips_elf_merge_got_with (bfd2got
, arg
->current
, arg
);
3381 /* Well, we couldn't merge, so create a new GOT. Don't check if it
3382 fits; if it turns out that it doesn't, we'll get relocation
3383 overflows anyway. */
3384 g
->next
= arg
->current
;
3390 /* Set the TLS GOT index for the GOT entry in ENTRYP. ENTRYP's NEXT field
3391 is null iff there is just a single GOT. */
3394 mips_elf_initialize_tls_index (void **entryp
, void *p
)
3396 struct mips_got_entry
*entry
= (struct mips_got_entry
*)*entryp
;
3397 struct mips_got_info
*g
= p
;
3399 unsigned char tls_type
;
3401 /* We're only interested in TLS symbols. */
3402 if (entry
->tls_type
== 0)
3405 next_index
= MIPS_ELF_GOT_SIZE (entry
->abfd
) * (long) g
->tls_assigned_gotno
;
3407 if (entry
->symndx
== -1 && g
->next
== NULL
)
3409 /* A type (3) got entry in the single-GOT case. We use the symbol's
3410 hash table entry to track its index. */
3411 if (entry
->d
.h
->tls_type
& GOT_TLS_OFFSET_DONE
)
3413 entry
->d
.h
->tls_type
|= GOT_TLS_OFFSET_DONE
;
3414 entry
->d
.h
->tls_got_offset
= next_index
;
3415 tls_type
= entry
->d
.h
->tls_type
;
3419 if (entry
->tls_type
& GOT_TLS_LDM
)
3421 /* There are separate mips_got_entry objects for each input bfd
3422 that requires an LDM entry. Make sure that all LDM entries in
3423 a GOT resolve to the same index. */
3424 if (g
->tls_ldm_offset
!= MINUS_TWO
&& g
->tls_ldm_offset
!= MINUS_ONE
)
3426 entry
->gotidx
= g
->tls_ldm_offset
;
3429 g
->tls_ldm_offset
= next_index
;
3431 entry
->gotidx
= next_index
;
3432 tls_type
= entry
->tls_type
;
3435 /* Account for the entries we've just allocated. */
3436 if (tls_type
& (GOT_TLS_GD
| GOT_TLS_LDM
))
3437 g
->tls_assigned_gotno
+= 2;
3438 if (tls_type
& GOT_TLS_IE
)
3439 g
->tls_assigned_gotno
+= 1;
3444 /* If passed a NULL mips_got_info in the argument, set the marker used
3445 to tell whether a global symbol needs a got entry (in the primary
3446 got) to the given VALUE.
3448 If passed a pointer G to a mips_got_info in the argument (it must
3449 not be the primary GOT), compute the offset from the beginning of
3450 the (primary) GOT section to the entry in G corresponding to the
3451 global symbol. G's assigned_gotno must contain the index of the
3452 first available global GOT entry in G. VALUE must contain the size
3453 of a GOT entry in bytes. For each global GOT entry that requires a
3454 dynamic relocation, NEEDED_RELOCS is incremented, and the symbol is
3455 marked as not eligible for lazy resolution through a function
3458 mips_elf_set_global_got_offset (void **entryp
, void *p
)
3460 struct mips_got_entry
*entry
= (struct mips_got_entry
*)*entryp
;
3461 struct mips_elf_set_global_got_offset_arg
*arg
3462 = (struct mips_elf_set_global_got_offset_arg
*)p
;
3463 struct mips_got_info
*g
= arg
->g
;
3465 if (g
&& entry
->tls_type
!= GOT_NORMAL
)
3466 arg
->needed_relocs
+=
3467 mips_tls_got_relocs (arg
->info
, entry
->tls_type
,
3468 entry
->symndx
== -1 ? &entry
->d
.h
->root
: NULL
);
3470 if (entry
->abfd
!= NULL
&& entry
->symndx
== -1
3471 && entry
->d
.h
->root
.dynindx
!= -1
3472 && !entry
->d
.h
->forced_local
3473 && entry
->d
.h
->tls_type
== GOT_NORMAL
)
3477 BFD_ASSERT (g
->global_gotsym
== NULL
);
3479 entry
->gotidx
= arg
->value
* (long) g
->assigned_gotno
++;
3480 if (arg
->info
->shared
3481 || (elf_hash_table (arg
->info
)->dynamic_sections_created
3482 && entry
->d
.h
->root
.def_dynamic
3483 && !entry
->d
.h
->root
.def_regular
))
3484 ++arg
->needed_relocs
;
3487 entry
->d
.h
->root
.got
.offset
= arg
->value
;
3493 /* Mark any global symbols referenced in the GOT we are iterating over
3494 as inelligible for lazy resolution stubs. */
3496 mips_elf_set_no_stub (void **entryp
, void *p ATTRIBUTE_UNUSED
)
3498 struct mips_got_entry
*entry
= (struct mips_got_entry
*)*entryp
;
3500 if (entry
->abfd
!= NULL
3501 && entry
->symndx
== -1
3502 && entry
->d
.h
->root
.dynindx
!= -1)
3503 entry
->d
.h
->no_fn_stub
= TRUE
;
3508 /* Follow indirect and warning hash entries so that each got entry
3509 points to the final symbol definition. P must point to a pointer
3510 to the hash table we're traversing. Since this traversal may
3511 modify the hash table, we set this pointer to NULL to indicate
3512 we've made a potentially-destructive change to the hash table, so
3513 the traversal must be restarted. */
3515 mips_elf_resolve_final_got_entry (void **entryp
, void *p
)
3517 struct mips_got_entry
*entry
= (struct mips_got_entry
*)*entryp
;
3518 htab_t got_entries
= *(htab_t
*)p
;
3520 if (entry
->abfd
!= NULL
&& entry
->symndx
== -1)
3522 struct mips_elf_link_hash_entry
*h
= entry
->d
.h
;
3524 while (h
->root
.root
.type
== bfd_link_hash_indirect
3525 || h
->root
.root
.type
== bfd_link_hash_warning
)
3526 h
= (struct mips_elf_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
3528 if (entry
->d
.h
== h
)
3533 /* If we can't find this entry with the new bfd hash, re-insert
3534 it, and get the traversal restarted. */
3535 if (! htab_find (got_entries
, entry
))
3537 htab_clear_slot (got_entries
, entryp
);
3538 entryp
= htab_find_slot (got_entries
, entry
, INSERT
);
3541 /* Abort the traversal, since the whole table may have
3542 moved, and leave it up to the parent to restart the
3544 *(htab_t
*)p
= NULL
;
3547 /* We might want to decrement the global_gotno count, but it's
3548 either too early or too late for that at this point. */
3554 /* Turn indirect got entries in a got_entries table into their final
3557 mips_elf_resolve_final_got_entries (struct mips_got_info
*g
)
3563 got_entries
= g
->got_entries
;
3565 htab_traverse (got_entries
,
3566 mips_elf_resolve_final_got_entry
,
3569 while (got_entries
== NULL
);
3572 /* Return the offset of an input bfd IBFD's GOT from the beginning of
3575 mips_elf_adjust_gp (bfd
*abfd
, struct mips_got_info
*g
, bfd
*ibfd
)
3577 if (g
->bfd2got
== NULL
)
3580 g
= mips_elf_got_for_ibfd (g
, ibfd
);
3584 BFD_ASSERT (g
->next
);
3588 return (g
->local_gotno
+ g
->global_gotno
+ g
->tls_gotno
)
3589 * MIPS_ELF_GOT_SIZE (abfd
);
3592 /* Turn a single GOT that is too big for 16-bit addressing into
3593 a sequence of GOTs, each one 16-bit addressable. */
3596 mips_elf_multi_got (bfd
*abfd
, struct bfd_link_info
*info
,
3597 struct mips_got_info
*g
, asection
*got
,
3598 bfd_size_type pages
)
3600 struct mips_elf_got_per_bfd_arg got_per_bfd_arg
;
3601 struct mips_elf_set_global_got_offset_arg set_got_offset_arg
;
3602 struct mips_got_info
*gg
;
3603 unsigned int assign
;
3605 g
->bfd2got
= htab_try_create (1, mips_elf_bfd2got_entry_hash
,
3606 mips_elf_bfd2got_entry_eq
, NULL
);
3607 if (g
->bfd2got
== NULL
)
3610 got_per_bfd_arg
.bfd2got
= g
->bfd2got
;
3611 got_per_bfd_arg
.obfd
= abfd
;
3612 got_per_bfd_arg
.info
= info
;
3614 /* Count how many GOT entries each input bfd requires, creating a
3615 map from bfd to got info while at that. */
3616 htab_traverse (g
->got_entries
, mips_elf_make_got_per_bfd
, &got_per_bfd_arg
);
3617 if (got_per_bfd_arg
.obfd
== NULL
)
3620 /* Also count how many page entries each input bfd requires. */
3621 htab_traverse (g
->got_page_entries
, mips_elf_make_got_pages_per_bfd
,
3623 if (got_per_bfd_arg
.obfd
== NULL
)
3626 got_per_bfd_arg
.current
= NULL
;
3627 got_per_bfd_arg
.primary
= NULL
;
3628 got_per_bfd_arg
.max_count
= ((MIPS_ELF_GOT_MAX_SIZE (info
)
3629 / MIPS_ELF_GOT_SIZE (abfd
))
3630 - MIPS_RESERVED_GOTNO (info
));
3631 got_per_bfd_arg
.max_pages
= pages
;
3632 /* The number of globals that will be included in the primary GOT.
3633 See the calls to mips_elf_set_global_got_offset below for more
3635 got_per_bfd_arg
.global_count
= g
->global_gotno
;
3637 /* Try to merge the GOTs of input bfds together, as long as they
3638 don't seem to exceed the maximum GOT size, choosing one of them
3639 to be the primary GOT. */
3640 htab_traverse (g
->bfd2got
, mips_elf_merge_gots
, &got_per_bfd_arg
);
3641 if (got_per_bfd_arg
.obfd
== NULL
)
3644 /* If we do not find any suitable primary GOT, create an empty one. */
3645 if (got_per_bfd_arg
.primary
== NULL
)
3647 g
->next
= (struct mips_got_info
*)
3648 bfd_alloc (abfd
, sizeof (struct mips_got_info
));
3649 if (g
->next
== NULL
)
3652 g
->next
->global_gotsym
= NULL
;
3653 g
->next
->global_gotno
= 0;
3654 g
->next
->local_gotno
= 0;
3655 g
->next
->page_gotno
= 0;
3656 g
->next
->tls_gotno
= 0;
3657 g
->next
->assigned_gotno
= 0;
3658 g
->next
->tls_assigned_gotno
= 0;
3659 g
->next
->tls_ldm_offset
= MINUS_ONE
;
3660 g
->next
->got_entries
= htab_try_create (1, mips_elf_multi_got_entry_hash
,
3661 mips_elf_multi_got_entry_eq
,
3663 if (g
->next
->got_entries
== NULL
)
3665 g
->next
->got_page_entries
= htab_try_create (1, mips_got_page_entry_hash
,
3666 mips_got_page_entry_eq
,
3668 if (g
->next
->got_page_entries
== NULL
)
3670 g
->next
->bfd2got
= NULL
;
3673 g
->next
= got_per_bfd_arg
.primary
;
3674 g
->next
->next
= got_per_bfd_arg
.current
;
3676 /* GG is now the master GOT, and G is the primary GOT. */
3680 /* Map the output bfd to the primary got. That's what we're going
3681 to use for bfds that use GOT16 or GOT_PAGE relocations that we
3682 didn't mark in check_relocs, and we want a quick way to find it.
3683 We can't just use gg->next because we're going to reverse the
3686 struct mips_elf_bfd2got_hash
*bfdgot
;
3689 bfdgot
= (struct mips_elf_bfd2got_hash
*)bfd_alloc
3690 (abfd
, sizeof (struct mips_elf_bfd2got_hash
));
3697 bfdgotp
= htab_find_slot (gg
->bfd2got
, bfdgot
, INSERT
);
3699 BFD_ASSERT (*bfdgotp
== NULL
);
3703 /* The IRIX dynamic linker requires every symbol that is referenced
3704 in a dynamic relocation to be present in the primary GOT, so
3705 arrange for them to appear after those that are actually
3708 GNU/Linux could very well do without it, but it would slow down
3709 the dynamic linker, since it would have to resolve every dynamic
3710 symbol referenced in other GOTs more than once, without help from
3711 the cache. Also, knowing that every external symbol has a GOT
3712 helps speed up the resolution of local symbols too, so GNU/Linux
3713 follows IRIX's practice.
3715 The number 2 is used by mips_elf_sort_hash_table_f to count
3716 global GOT symbols that are unreferenced in the primary GOT, with
3717 an initial dynamic index computed from gg->assigned_gotno, where
3718 the number of unreferenced global entries in the primary GOT is
3722 gg
->assigned_gotno
= gg
->global_gotno
- g
->global_gotno
;
3723 g
->global_gotno
= gg
->global_gotno
;
3724 set_got_offset_arg
.value
= 2;
3728 /* This could be used for dynamic linkers that don't optimize
3729 symbol resolution while applying relocations so as to use
3730 primary GOT entries or assuming the symbol is locally-defined.
3731 With this code, we assign lower dynamic indices to global
3732 symbols that are not referenced in the primary GOT, so that
3733 their entries can be omitted. */
3734 gg
->assigned_gotno
= 0;
3735 set_got_offset_arg
.value
= -1;
3738 /* Reorder dynamic symbols as described above (which behavior
3739 depends on the setting of VALUE). */
3740 set_got_offset_arg
.g
= NULL
;
3741 htab_traverse (gg
->got_entries
, mips_elf_set_global_got_offset
,
3742 &set_got_offset_arg
);
3743 set_got_offset_arg
.value
= 1;
3744 htab_traverse (g
->got_entries
, mips_elf_set_global_got_offset
,
3745 &set_got_offset_arg
);
3746 if (! mips_elf_sort_hash_table (info
, 1))
3749 /* Now go through the GOTs assigning them offset ranges.
3750 [assigned_gotno, local_gotno[ will be set to the range of local
3751 entries in each GOT. We can then compute the end of a GOT by
3752 adding local_gotno to global_gotno. We reverse the list and make
3753 it circular since then we'll be able to quickly compute the
3754 beginning of a GOT, by computing the end of its predecessor. To
3755 avoid special cases for the primary GOT, while still preserving
3756 assertions that are valid for both single- and multi-got links,
3757 we arrange for the main got struct to have the right number of
3758 global entries, but set its local_gotno such that the initial
3759 offset of the primary GOT is zero. Remember that the primary GOT
3760 will become the last item in the circular linked list, so it
3761 points back to the master GOT. */
3762 gg
->local_gotno
= -g
->global_gotno
;
3763 gg
->global_gotno
= g
->global_gotno
;
3770 struct mips_got_info
*gn
;
3772 assign
+= MIPS_RESERVED_GOTNO (info
);
3773 g
->assigned_gotno
= assign
;
3774 g
->local_gotno
+= assign
;
3775 g
->local_gotno
+= (pages
< g
->page_gotno
? pages
: g
->page_gotno
);
3776 assign
= g
->local_gotno
+ g
->global_gotno
+ g
->tls_gotno
;
3778 /* Take g out of the direct list, and push it onto the reversed
3779 list that gg points to. g->next is guaranteed to be nonnull after
3780 this operation, as required by mips_elf_initialize_tls_index. */
3785 /* Set up any TLS entries. We always place the TLS entries after
3786 all non-TLS entries. */
3787 g
->tls_assigned_gotno
= g
->local_gotno
+ g
->global_gotno
;
3788 htab_traverse (g
->got_entries
, mips_elf_initialize_tls_index
, g
);
3790 /* Move onto the next GOT. It will be a secondary GOT if nonull. */
3793 /* Mark global symbols in every non-primary GOT as ineligible for
3796 htab_traverse (g
->got_entries
, mips_elf_set_no_stub
, NULL
);
3800 got
->size
= (gg
->next
->local_gotno
3801 + gg
->next
->global_gotno
3802 + gg
->next
->tls_gotno
) * MIPS_ELF_GOT_SIZE (abfd
);
3808 /* Returns the first relocation of type r_type found, beginning with
3809 RELOCATION. RELEND is one-past-the-end of the relocation table. */
3811 static const Elf_Internal_Rela
*
3812 mips_elf_next_relocation (bfd
*abfd ATTRIBUTE_UNUSED
, unsigned int r_type
,
3813 const Elf_Internal_Rela
*relocation
,
3814 const Elf_Internal_Rela
*relend
)
3816 unsigned long r_symndx
= ELF_R_SYM (abfd
, relocation
->r_info
);
3818 while (relocation
< relend
)
3820 if (ELF_R_TYPE (abfd
, relocation
->r_info
) == r_type
3821 && ELF_R_SYM (abfd
, relocation
->r_info
) == r_symndx
)
3827 /* We didn't find it. */
3831 /* Return whether a relocation is against a local symbol. */
3834 mips_elf_local_relocation_p (bfd
*input_bfd
,
3835 const Elf_Internal_Rela
*relocation
,
3836 asection
**local_sections
,
3837 bfd_boolean check_forced
)
3839 unsigned long r_symndx
;
3840 Elf_Internal_Shdr
*symtab_hdr
;
3841 struct mips_elf_link_hash_entry
*h
;
3844 r_symndx
= ELF_R_SYM (input_bfd
, relocation
->r_info
);
3845 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
3846 extsymoff
= (elf_bad_symtab (input_bfd
)) ? 0 : symtab_hdr
->sh_info
;
3848 if (r_symndx
< extsymoff
)
3850 if (elf_bad_symtab (input_bfd
) && local_sections
[r_symndx
] != NULL
)
3855 /* Look up the hash table to check whether the symbol
3856 was forced local. */
3857 h
= (struct mips_elf_link_hash_entry
*)
3858 elf_sym_hashes (input_bfd
) [r_symndx
- extsymoff
];
3859 /* Find the real hash-table entry for this symbol. */
3860 while (h
->root
.root
.type
== bfd_link_hash_indirect
3861 || h
->root
.root
.type
== bfd_link_hash_warning
)
3862 h
= (struct mips_elf_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
3863 if (h
->root
.forced_local
)
3870 /* Sign-extend VALUE, which has the indicated number of BITS. */
3873 _bfd_mips_elf_sign_extend (bfd_vma value
, int bits
)
3875 if (value
& ((bfd_vma
) 1 << (bits
- 1)))
3876 /* VALUE is negative. */
3877 value
|= ((bfd_vma
) - 1) << bits
;
3882 /* Return non-zero if the indicated VALUE has overflowed the maximum
3883 range expressible by a signed number with the indicated number of
3887 mips_elf_overflow_p (bfd_vma value
, int bits
)
3889 bfd_signed_vma svalue
= (bfd_signed_vma
) value
;
3891 if (svalue
> (1 << (bits
- 1)) - 1)
3892 /* The value is too big. */
3894 else if (svalue
< -(1 << (bits
- 1)))
3895 /* The value is too small. */
3902 /* Calculate the %high function. */
3905 mips_elf_high (bfd_vma value
)
3907 return ((value
+ (bfd_vma
) 0x8000) >> 16) & 0xffff;
3910 /* Calculate the %higher function. */
3913 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED
)
3916 return ((value
+ (bfd_vma
) 0x80008000) >> 32) & 0xffff;
3923 /* Calculate the %highest function. */
3926 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED
)
3929 return ((value
+ (((bfd_vma
) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
3936 /* Create the .compact_rel section. */
3939 mips_elf_create_compact_rel_section
3940 (bfd
*abfd
, struct bfd_link_info
*info ATTRIBUTE_UNUSED
)
3943 register asection
*s
;
3945 if (bfd_get_section_by_name (abfd
, ".compact_rel") == NULL
)
3947 flags
= (SEC_HAS_CONTENTS
| SEC_IN_MEMORY
| SEC_LINKER_CREATED
3950 s
= bfd_make_section_with_flags (abfd
, ".compact_rel", flags
);
3952 || ! bfd_set_section_alignment (abfd
, s
,
3953 MIPS_ELF_LOG_FILE_ALIGN (abfd
)))
3956 s
->size
= sizeof (Elf32_External_compact_rel
);
3962 /* Create the .got section to hold the global offset table. */
3965 mips_elf_create_got_section (bfd
*abfd
, struct bfd_link_info
*info
,
3966 bfd_boolean maybe_exclude
)
3969 register asection
*s
;
3970 struct elf_link_hash_entry
*h
;
3971 struct bfd_link_hash_entry
*bh
;
3972 struct mips_got_info
*g
;
3974 struct mips_elf_link_hash_table
*htab
;
3976 htab
= mips_elf_hash_table (info
);
3978 /* This function may be called more than once. */
3979 s
= mips_elf_got_section (abfd
, TRUE
);
3982 if (! maybe_exclude
)
3983 s
->flags
&= ~SEC_EXCLUDE
;
3987 flags
= (SEC_ALLOC
| SEC_LOAD
| SEC_HAS_CONTENTS
| SEC_IN_MEMORY
3988 | SEC_LINKER_CREATED
);
3991 flags
|= SEC_EXCLUDE
;
3993 /* We have to use an alignment of 2**4 here because this is hardcoded
3994 in the function stub generation and in the linker script. */
3995 s
= bfd_make_section_with_flags (abfd
, ".got", flags
);
3997 || ! bfd_set_section_alignment (abfd
, s
, 4))
4000 /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the
4001 linker script because we don't want to define the symbol if we
4002 are not creating a global offset table. */
4004 if (! (_bfd_generic_link_add_one_symbol
4005 (info
, abfd
, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL
, s
,
4006 0, NULL
, FALSE
, get_elf_backend_data (abfd
)->collect
, &bh
)))
4009 h
= (struct elf_link_hash_entry
*) bh
;
4012 h
->type
= STT_OBJECT
;
4013 elf_hash_table (info
)->hgot
= h
;
4016 && ! bfd_elf_link_record_dynamic_symbol (info
, h
))
4019 amt
= sizeof (struct mips_got_info
);
4020 g
= bfd_alloc (abfd
, amt
);
4023 g
->global_gotsym
= NULL
;
4024 g
->global_gotno
= 0;
4026 g
->local_gotno
= MIPS_RESERVED_GOTNO (info
);
4028 g
->assigned_gotno
= MIPS_RESERVED_GOTNO (info
);
4031 g
->tls_ldm_offset
= MINUS_ONE
;
4032 g
->got_entries
= htab_try_create (1, mips_elf_got_entry_hash
,
4033 mips_elf_got_entry_eq
, NULL
);
4034 if (g
->got_entries
== NULL
)
4036 g
->got_page_entries
= htab_try_create (1, mips_got_page_entry_hash
,
4037 mips_got_page_entry_eq
, NULL
);
4038 if (g
->got_page_entries
== NULL
)
4040 mips_elf_section_data (s
)->u
.got_info
= g
;
4041 mips_elf_section_data (s
)->elf
.this_hdr
.sh_flags
4042 |= SHF_ALLOC
| SHF_WRITE
| SHF_MIPS_GPREL
;
4044 /* VxWorks also needs a .got.plt section. */
4045 if (htab
->is_vxworks
)
4047 s
= bfd_make_section_with_flags (abfd
, ".got.plt",
4048 SEC_ALLOC
| SEC_LOAD
| SEC_HAS_CONTENTS
4049 | SEC_IN_MEMORY
| SEC_LINKER_CREATED
);
4050 if (s
== NULL
|| !bfd_set_section_alignment (abfd
, s
, 4))
4058 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4059 __GOTT_INDEX__ symbols. These symbols are only special for
4060 shared objects; they are not used in executables. */
4063 is_gott_symbol (struct bfd_link_info
*info
, struct elf_link_hash_entry
*h
)
4065 return (mips_elf_hash_table (info
)->is_vxworks
4067 && (strcmp (h
->root
.root
.string
, "__GOTT_BASE__") == 0
4068 || strcmp (h
->root
.root
.string
, "__GOTT_INDEX__") == 0));
4071 /* Calculate the value produced by the RELOCATION (which comes from
4072 the INPUT_BFD). The ADDEND is the addend to use for this
4073 RELOCATION; RELOCATION->R_ADDEND is ignored.
4075 The result of the relocation calculation is stored in VALUEP.
4076 REQUIRE_JALXP indicates whether or not the opcode used with this
4077 relocation must be JALX.
4079 This function returns bfd_reloc_continue if the caller need take no
4080 further action regarding this relocation, bfd_reloc_notsupported if
4081 something goes dramatically wrong, bfd_reloc_overflow if an
4082 overflow occurs, and bfd_reloc_ok to indicate success. */
4084 static bfd_reloc_status_type
4085 mips_elf_calculate_relocation (bfd
*abfd
, bfd
*input_bfd
,
4086 asection
*input_section
,
4087 struct bfd_link_info
*info
,
4088 const Elf_Internal_Rela
*relocation
,
4089 bfd_vma addend
, reloc_howto_type
*howto
,
4090 Elf_Internal_Sym
*local_syms
,
4091 asection
**local_sections
, bfd_vma
*valuep
,
4092 const char **namep
, bfd_boolean
*require_jalxp
,
4093 bfd_boolean save_addend
)
4095 /* The eventual value we will return. */
4097 /* The address of the symbol against which the relocation is
4100 /* The final GP value to be used for the relocatable, executable, or
4101 shared object file being produced. */
4103 /* The place (section offset or address) of the storage unit being
4106 /* The value of GP used to create the relocatable object. */
4108 /* The offset into the global offset table at which the address of
4109 the relocation entry symbol, adjusted by the addend, resides
4110 during execution. */
4111 bfd_vma g
= MINUS_ONE
;
4112 /* The section in which the symbol referenced by the relocation is
4114 asection
*sec
= NULL
;
4115 struct mips_elf_link_hash_entry
*h
= NULL
;
4116 /* TRUE if the symbol referred to by this relocation is a local
4118 bfd_boolean local_p
, was_local_p
;
4119 /* TRUE if the symbol referred to by this relocation is "_gp_disp". */
4120 bfd_boolean gp_disp_p
= FALSE
;
4121 /* TRUE if the symbol referred to by this relocation is
4122 "__gnu_local_gp". */
4123 bfd_boolean gnu_local_gp_p
= FALSE
;
4124 Elf_Internal_Shdr
*symtab_hdr
;
4126 unsigned long r_symndx
;
4128 /* TRUE if overflow occurred during the calculation of the
4129 relocation value. */
4130 bfd_boolean overflowed_p
;
4131 /* TRUE if this relocation refers to a MIPS16 function. */
4132 bfd_boolean target_is_16_bit_code_p
= FALSE
;
4133 struct mips_elf_link_hash_table
*htab
;
4136 dynobj
= elf_hash_table (info
)->dynobj
;
4137 htab
= mips_elf_hash_table (info
);
4139 /* Parse the relocation. */
4140 r_symndx
= ELF_R_SYM (input_bfd
, relocation
->r_info
);
4141 r_type
= ELF_R_TYPE (input_bfd
, relocation
->r_info
);
4142 p
= (input_section
->output_section
->vma
4143 + input_section
->output_offset
4144 + relocation
->r_offset
);
4146 /* Assume that there will be no overflow. */
4147 overflowed_p
= FALSE
;
4149 /* Figure out whether or not the symbol is local, and get the offset
4150 used in the array of hash table entries. */
4151 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
4152 local_p
= mips_elf_local_relocation_p (input_bfd
, relocation
,
4153 local_sections
, FALSE
);
4154 was_local_p
= local_p
;
4155 if (! elf_bad_symtab (input_bfd
))
4156 extsymoff
= symtab_hdr
->sh_info
;
4159 /* The symbol table does not follow the rule that local symbols
4160 must come before globals. */
4164 /* Figure out the value of the symbol. */
4167 Elf_Internal_Sym
*sym
;
4169 sym
= local_syms
+ r_symndx
;
4170 sec
= local_sections
[r_symndx
];
4172 symbol
= sec
->output_section
->vma
+ sec
->output_offset
;
4173 if (ELF_ST_TYPE (sym
->st_info
) != STT_SECTION
4174 || (sec
->flags
& SEC_MERGE
))
4175 symbol
+= sym
->st_value
;
4176 if ((sec
->flags
& SEC_MERGE
)
4177 && ELF_ST_TYPE (sym
->st_info
) == STT_SECTION
)
4179 addend
= _bfd_elf_rel_local_sym (abfd
, sym
, &sec
, addend
);
4181 addend
+= sec
->output_section
->vma
+ sec
->output_offset
;
4184 /* MIPS16 text labels should be treated as odd. */
4185 if (ELF_ST_IS_MIPS16 (sym
->st_other
))
4188 /* Record the name of this symbol, for our caller. */
4189 *namep
= bfd_elf_string_from_elf_section (input_bfd
,
4190 symtab_hdr
->sh_link
,
4193 *namep
= bfd_section_name (input_bfd
, sec
);
4195 target_is_16_bit_code_p
= ELF_ST_IS_MIPS16 (sym
->st_other
);
4199 /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ? */
4201 /* For global symbols we look up the symbol in the hash-table. */
4202 h
= ((struct mips_elf_link_hash_entry
*)
4203 elf_sym_hashes (input_bfd
) [r_symndx
- extsymoff
]);
4204 /* Find the real hash-table entry for this symbol. */
4205 while (h
->root
.root
.type
== bfd_link_hash_indirect
4206 || h
->root
.root
.type
== bfd_link_hash_warning
)
4207 h
= (struct mips_elf_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
4209 /* Record the name of this symbol, for our caller. */
4210 *namep
= h
->root
.root
.root
.string
;
4212 /* See if this is the special _gp_disp symbol. Note that such a
4213 symbol must always be a global symbol. */
4214 if (strcmp (*namep
, "_gp_disp") == 0
4215 && ! NEWABI_P (input_bfd
))
4217 /* Relocations against _gp_disp are permitted only with
4218 R_MIPS_HI16 and R_MIPS_LO16 relocations. */
4219 if (r_type
!= R_MIPS_HI16
&& r_type
!= R_MIPS_LO16
4220 && r_type
!= R_MIPS16_HI16
&& r_type
!= R_MIPS16_LO16
)
4221 return bfd_reloc_notsupported
;
4225 /* See if this is the special _gp symbol. Note that such a
4226 symbol must always be a global symbol. */
4227 else if (strcmp (*namep
, "__gnu_local_gp") == 0)
4228 gnu_local_gp_p
= TRUE
;
4231 /* If this symbol is defined, calculate its address. Note that
4232 _gp_disp is a magic symbol, always implicitly defined by the
4233 linker, so it's inappropriate to check to see whether or not
4235 else if ((h
->root
.root
.type
== bfd_link_hash_defined
4236 || h
->root
.root
.type
== bfd_link_hash_defweak
)
4237 && h
->root
.root
.u
.def
.section
)
4239 sec
= h
->root
.root
.u
.def
.section
;
4240 if (sec
->output_section
)
4241 symbol
= (h
->root
.root
.u
.def
.value
4242 + sec
->output_section
->vma
4243 + sec
->output_offset
);
4245 symbol
= h
->root
.root
.u
.def
.value
;
4247 else if (h
->root
.root
.type
== bfd_link_hash_undefweak
)
4248 /* We allow relocations against undefined weak symbols, giving
4249 it the value zero, so that you can undefined weak functions
4250 and check to see if they exist by looking at their
4253 else if (info
->unresolved_syms_in_objects
== RM_IGNORE
4254 && ELF_ST_VISIBILITY (h
->root
.other
) == STV_DEFAULT
)
4256 else if (strcmp (*namep
, SGI_COMPAT (input_bfd
)
4257 ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
4259 /* If this is a dynamic link, we should have created a
4260 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
4261 in in _bfd_mips_elf_create_dynamic_sections.
4262 Otherwise, we should define the symbol with a value of 0.
4263 FIXME: It should probably get into the symbol table
4265 BFD_ASSERT (! info
->shared
);
4266 BFD_ASSERT (bfd_get_section_by_name (abfd
, ".dynamic") == NULL
);
4269 else if (ELF_MIPS_IS_OPTIONAL (h
->root
.other
))
4271 /* This is an optional symbol - an Irix specific extension to the
4272 ELF spec. Ignore it for now.
4273 XXX - FIXME - there is more to the spec for OPTIONAL symbols
4274 than simply ignoring them, but we do not handle this for now.
4275 For information see the "64-bit ELF Object File Specification"
4276 which is available from here:
4277 http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */
4282 if (! ((*info
->callbacks
->undefined_symbol
)
4283 (info
, h
->root
.root
.root
.string
, input_bfd
,
4284 input_section
, relocation
->r_offset
,
4285 (info
->unresolved_syms_in_objects
== RM_GENERATE_ERROR
)
4286 || ELF_ST_VISIBILITY (h
->root
.other
))))
4287 return bfd_reloc_undefined
;
4291 target_is_16_bit_code_p
= ELF_ST_IS_MIPS16 (h
->root
.other
);
4294 /* If this is a 32- or 64-bit call to a 16-bit function with a stub, we
4295 need to redirect the call to the stub, unless we're already *in*
4297 if (r_type
!= R_MIPS16_26
&& !info
->relocatable
4298 && ((h
!= NULL
&& h
->fn_stub
!= NULL
)
4300 && elf_tdata (input_bfd
)->local_stubs
!= NULL
4301 && elf_tdata (input_bfd
)->local_stubs
[r_symndx
] != NULL
))
4302 && !mips16_stub_section_p (input_bfd
, input_section
))
4304 /* This is a 32- or 64-bit call to a 16-bit function. We should
4305 have already noticed that we were going to need the
4308 sec
= elf_tdata (input_bfd
)->local_stubs
[r_symndx
];
4311 BFD_ASSERT (h
->need_fn_stub
);
4315 symbol
= sec
->output_section
->vma
+ sec
->output_offset
;
4316 /* The target is 16-bit, but the stub isn't. */
4317 target_is_16_bit_code_p
= FALSE
;
4319 /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
4320 need to redirect the call to the stub. */
4321 else if (r_type
== R_MIPS16_26
&& !info
->relocatable
4322 && ((h
!= NULL
&& (h
->call_stub
!= NULL
|| h
->call_fp_stub
!= NULL
))
4324 && elf_tdata (input_bfd
)->local_call_stubs
!= NULL
4325 && elf_tdata (input_bfd
)->local_call_stubs
[r_symndx
] != NULL
))
4326 && !target_is_16_bit_code_p
)
4329 sec
= elf_tdata (input_bfd
)->local_call_stubs
[r_symndx
];
4332 /* If both call_stub and call_fp_stub are defined, we can figure
4333 out which one to use by checking which one appears in the input
4335 if (h
->call_stub
!= NULL
&& h
->call_fp_stub
!= NULL
)
4340 for (o
= input_bfd
->sections
; o
!= NULL
; o
= o
->next
)
4342 if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd
, o
)))
4344 sec
= h
->call_fp_stub
;
4351 else if (h
->call_stub
!= NULL
)
4354 sec
= h
->call_fp_stub
;
4357 BFD_ASSERT (sec
->size
> 0);
4358 symbol
= sec
->output_section
->vma
+ sec
->output_offset
;
4361 /* Calls from 16-bit code to 32-bit code and vice versa require the
4362 special jalx instruction. */
4363 *require_jalxp
= (!info
->relocatable
4364 && (((r_type
== R_MIPS16_26
) && !target_is_16_bit_code_p
)
4365 || ((r_type
== R_MIPS_26
) && target_is_16_bit_code_p
)));
4367 local_p
= mips_elf_local_relocation_p (input_bfd
, relocation
,
4368 local_sections
, TRUE
);
4370 gp0
= _bfd_get_gp_value (input_bfd
);
4371 gp
= _bfd_get_gp_value (abfd
);
4373 gp
+= mips_elf_adjust_gp (abfd
, mips_elf_got_info (dynobj
, NULL
),
4379 /* If we haven't already determined the GOT offset, oand we're going
4380 to need it, get it now. */
4383 case R_MIPS_GOT_PAGE
:
4384 case R_MIPS_GOT_OFST
:
4385 /* We need to decay to GOT_DISP/addend if the symbol doesn't
4387 local_p
= local_p
|| _bfd_elf_symbol_refs_local_p (&h
->root
, info
, 1);
4388 if (local_p
|| r_type
== R_MIPS_GOT_OFST
)
4394 case R_MIPS_GOT_DISP
:
4395 case R_MIPS_GOT_HI16
:
4396 case R_MIPS_CALL_HI16
:
4397 case R_MIPS_GOT_LO16
:
4398 case R_MIPS_CALL_LO16
:
4400 case R_MIPS_TLS_GOTTPREL
:
4401 case R_MIPS_TLS_LDM
:
4402 /* Find the index into the GOT where this value is located. */
4403 if (r_type
== R_MIPS_TLS_LDM
)
4405 g
= mips_elf_local_got_index (abfd
, input_bfd
, info
,
4406 0, 0, NULL
, r_type
);
4408 return bfd_reloc_outofrange
;
4412 /* On VxWorks, CALL relocations should refer to the .got.plt
4413 entry, which is initialized to point at the PLT stub. */
4414 if (htab
->is_vxworks
4415 && (r_type
== R_MIPS_CALL_HI16
4416 || r_type
== R_MIPS_CALL_LO16
4417 || r_type
== R_MIPS_CALL16
))
4419 BFD_ASSERT (addend
== 0);
4420 BFD_ASSERT (h
->root
.needs_plt
);
4421 g
= mips_elf_gotplt_index (info
, &h
->root
);
4425 /* GOT_PAGE may take a non-zero addend, that is ignored in a
4426 GOT_PAGE relocation that decays to GOT_DISP because the
4427 symbol turns out to be global. The addend is then added
4429 BFD_ASSERT (addend
== 0 || r_type
== R_MIPS_GOT_PAGE
);
4430 g
= mips_elf_global_got_index (dynobj
, input_bfd
,
4431 &h
->root
, r_type
, info
);
4432 if (h
->tls_type
== GOT_NORMAL
4433 && (! elf_hash_table(info
)->dynamic_sections_created
4435 && (info
->symbolic
|| h
->root
.forced_local
)
4436 && h
->root
.def_regular
)))
4438 /* This is a static link or a -Bsymbolic link. The
4439 symbol is defined locally, or was forced to be local.
4440 We must initialize this entry in the GOT. */
4441 asection
*sgot
= mips_elf_got_section (dynobj
, FALSE
);
4442 MIPS_ELF_PUT_WORD (dynobj
, symbol
, sgot
->contents
+ g
);
4446 else if (!htab
->is_vxworks
4447 && (r_type
== R_MIPS_CALL16
|| (r_type
== R_MIPS_GOT16
)))
4448 /* The calculation below does not involve "g". */
4452 g
= mips_elf_local_got_index (abfd
, input_bfd
, info
,
4453 symbol
+ addend
, r_symndx
, h
, r_type
);
4455 return bfd_reloc_outofrange
;
4458 /* Convert GOT indices to actual offsets. */
4459 g
= mips_elf_got_offset_from_index (dynobj
, abfd
, input_bfd
, g
);
4463 /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
4464 symbols are resolved by the loader. Add them to .rela.dyn. */
4465 if (h
!= NULL
&& is_gott_symbol (info
, &h
->root
))
4467 Elf_Internal_Rela outrel
;
4471 s
= mips_elf_rel_dyn_section (info
, FALSE
);
4472 loc
= s
->contents
+ s
->reloc_count
++ * sizeof (Elf32_External_Rela
);
4474 outrel
.r_offset
= (input_section
->output_section
->vma
4475 + input_section
->output_offset
4476 + relocation
->r_offset
);
4477 outrel
.r_info
= ELF32_R_INFO (h
->root
.dynindx
, r_type
);
4478 outrel
.r_addend
= addend
;
4479 bfd_elf32_swap_reloca_out (abfd
, &outrel
, loc
);
4481 /* If we've written this relocation for a readonly section,
4482 we need to set DF_TEXTREL again, so that we do not delete the
4484 if (MIPS_ELF_READONLY_SECTION (input_section
))
4485 info
->flags
|= DF_TEXTREL
;
4488 return bfd_reloc_ok
;
4491 /* Figure out what kind of relocation is being performed. */
4495 return bfd_reloc_continue
;
4498 value
= symbol
+ _bfd_mips_elf_sign_extend (addend
, 16);
4499 overflowed_p
= mips_elf_overflow_p (value
, 16);
4506 || (!htab
->is_vxworks
4507 && htab
->root
.dynamic_sections_created
4509 && h
->root
.def_dynamic
4510 && !h
->root
.def_regular
))
4512 && (input_section
->flags
& SEC_ALLOC
) != 0)
4514 /* If we're creating a shared library, or this relocation is
4515 against a symbol in a shared library, then we can't know
4516 where the symbol will end up. So, we create a relocation
4517 record in the output, and leave the job up to the dynamic
4520 In VxWorks executables, references to external symbols
4521 are handled using copy relocs or PLT stubs, so there's
4522 no need to add a dynamic relocation here. */
4524 if (!mips_elf_create_dynamic_relocation (abfd
,
4532 return bfd_reloc_undefined
;
4536 if (r_type
!= R_MIPS_REL32
)
4537 value
= symbol
+ addend
;
4541 value
&= howto
->dst_mask
;
4545 value
= symbol
+ addend
- p
;
4546 value
&= howto
->dst_mask
;
4550 /* The calculation for R_MIPS16_26 is just the same as for an
4551 R_MIPS_26. It's only the storage of the relocated field into
4552 the output file that's different. That's handled in
4553 mips_elf_perform_relocation. So, we just fall through to the
4554 R_MIPS_26 case here. */
4557 value
= ((addend
| ((p
+ 4) & 0xf0000000)) + symbol
) >> 2;
4560 value
= (_bfd_mips_elf_sign_extend (addend
, 28) + symbol
) >> 2;
4561 if (h
->root
.root
.type
!= bfd_link_hash_undefweak
)
4562 overflowed_p
= (value
>> 26) != ((p
+ 4) >> 28);
4564 value
&= howto
->dst_mask
;
4567 case R_MIPS_TLS_DTPREL_HI16
:
4568 value
= (mips_elf_high (addend
+ symbol
- dtprel_base (info
))
4572 case R_MIPS_TLS_DTPREL_LO16
:
4573 case R_MIPS_TLS_DTPREL32
:
4574 case R_MIPS_TLS_DTPREL64
:
4575 value
= (symbol
+ addend
- dtprel_base (info
)) & howto
->dst_mask
;
4578 case R_MIPS_TLS_TPREL_HI16
:
4579 value
= (mips_elf_high (addend
+ symbol
- tprel_base (info
))
4583 case R_MIPS_TLS_TPREL_LO16
:
4584 value
= (symbol
+ addend
- tprel_base (info
)) & howto
->dst_mask
;
4591 value
= mips_elf_high (addend
+ symbol
);
4592 value
&= howto
->dst_mask
;
4596 /* For MIPS16 ABI code we generate this sequence
4597 0: li $v0,%hi(_gp_disp)
4598 4: addiupc $v1,%lo(_gp_disp)
4602 So the offsets of hi and lo relocs are the same, but the
4603 $pc is four higher than $t9 would be, so reduce
4604 both reloc addends by 4. */
4605 if (r_type
== R_MIPS16_HI16
)
4606 value
= mips_elf_high (addend
+ gp
- p
- 4);
4608 value
= mips_elf_high (addend
+ gp
- p
);
4609 overflowed_p
= mips_elf_overflow_p (value
, 16);
4616 value
= (symbol
+ addend
) & howto
->dst_mask
;
4619 /* See the comment for R_MIPS16_HI16 above for the reason
4620 for this conditional. */
4621 if (r_type
== R_MIPS16_LO16
)
4622 value
= addend
+ gp
- p
;
4624 value
= addend
+ gp
- p
+ 4;
4625 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
4626 for overflow. But, on, say, IRIX5, relocations against
4627 _gp_disp are normally generated from the .cpload
4628 pseudo-op. It generates code that normally looks like
4631 lui $gp,%hi(_gp_disp)
4632 addiu $gp,$gp,%lo(_gp_disp)
4635 Here $t9 holds the address of the function being called,
4636 as required by the MIPS ELF ABI. The R_MIPS_LO16
4637 relocation can easily overflow in this situation, but the
4638 R_MIPS_HI16 relocation will handle the overflow.
4639 Therefore, we consider this a bug in the MIPS ABI, and do
4640 not check for overflow here. */
4644 case R_MIPS_LITERAL
:
4645 /* Because we don't merge literal sections, we can handle this
4646 just like R_MIPS_GPREL16. In the long run, we should merge
4647 shared literals, and then we will need to additional work
4652 case R_MIPS16_GPREL
:
4653 /* The R_MIPS16_GPREL performs the same calculation as
4654 R_MIPS_GPREL16, but stores the relocated bits in a different
4655 order. We don't need to do anything special here; the
4656 differences are handled in mips_elf_perform_relocation. */
4657 case R_MIPS_GPREL16
:
4658 /* Only sign-extend the addend if it was extracted from the
4659 instruction. If the addend was separate, leave it alone,
4660 otherwise we may lose significant bits. */
4661 if (howto
->partial_inplace
)
4662 addend
= _bfd_mips_elf_sign_extend (addend
, 16);
4663 value
= symbol
+ addend
- gp
;
4664 /* If the symbol was local, any earlier relocatable links will
4665 have adjusted its addend with the gp offset, so compensate
4666 for that now. Don't do it for symbols forced local in this
4667 link, though, since they won't have had the gp offset applied
4671 overflowed_p
= mips_elf_overflow_p (value
, 16);
4676 /* VxWorks does not have separate local and global semantics for
4677 R_MIPS_GOT16; every relocation evaluates to "G". */
4678 if (!htab
->is_vxworks
&& local_p
)
4682 forced
= ! mips_elf_local_relocation_p (input_bfd
, relocation
,
4683 local_sections
, FALSE
);
4684 value
= mips_elf_got16_entry (abfd
, input_bfd
, info
,
4685 symbol
+ addend
, forced
);
4686 if (value
== MINUS_ONE
)
4687 return bfd_reloc_outofrange
;
4689 = mips_elf_got_offset_from_index (dynobj
, abfd
, input_bfd
, value
);
4690 overflowed_p
= mips_elf_overflow_p (value
, 16);
4697 case R_MIPS_TLS_GOTTPREL
:
4698 case R_MIPS_TLS_LDM
:
4699 case R_MIPS_GOT_DISP
:
4702 overflowed_p
= mips_elf_overflow_p (value
, 16);
4705 case R_MIPS_GPREL32
:
4706 value
= (addend
+ symbol
+ gp0
- gp
);
4708 value
&= howto
->dst_mask
;
4712 case R_MIPS_GNU_REL16_S2
:
4713 value
= symbol
+ _bfd_mips_elf_sign_extend (addend
, 18) - p
;
4714 overflowed_p
= mips_elf_overflow_p (value
, 18);
4715 value
>>= howto
->rightshift
;
4716 value
&= howto
->dst_mask
;
4719 case R_MIPS_GOT_HI16
:
4720 case R_MIPS_CALL_HI16
:
4721 /* We're allowed to handle these two relocations identically.
4722 The dynamic linker is allowed to handle the CALL relocations
4723 differently by creating a lazy evaluation stub. */
4725 value
= mips_elf_high (value
);
4726 value
&= howto
->dst_mask
;
4729 case R_MIPS_GOT_LO16
:
4730 case R_MIPS_CALL_LO16
:
4731 value
= g
& howto
->dst_mask
;
4734 case R_MIPS_GOT_PAGE
:
4735 /* GOT_PAGE relocations that reference non-local symbols decay
4736 to GOT_DISP. The corresponding GOT_OFST relocation decays to
4740 value
= mips_elf_got_page (abfd
, input_bfd
, info
, symbol
+ addend
, NULL
);
4741 if (value
== MINUS_ONE
)
4742 return bfd_reloc_outofrange
;
4743 value
= mips_elf_got_offset_from_index (dynobj
, abfd
, input_bfd
, value
);
4744 overflowed_p
= mips_elf_overflow_p (value
, 16);
4747 case R_MIPS_GOT_OFST
:
4749 mips_elf_got_page (abfd
, input_bfd
, info
, symbol
+ addend
, &value
);
4752 overflowed_p
= mips_elf_overflow_p (value
, 16);
4756 value
= symbol
- addend
;
4757 value
&= howto
->dst_mask
;
4761 value
= mips_elf_higher (addend
+ symbol
);
4762 value
&= howto
->dst_mask
;
4765 case R_MIPS_HIGHEST
:
4766 value
= mips_elf_highest (addend
+ symbol
);
4767 value
&= howto
->dst_mask
;
4770 case R_MIPS_SCN_DISP
:
4771 value
= symbol
+ addend
- sec
->output_offset
;
4772 value
&= howto
->dst_mask
;
4776 /* This relocation is only a hint. In some cases, we optimize
4777 it into a bal instruction. But we don't try to optimize
4778 branches to the PLT; that will wind up wasting time. */
4779 if (h
!= NULL
&& h
->root
.plt
.offset
!= (bfd_vma
) -1)
4780 return bfd_reloc_continue
;
4781 value
= symbol
+ addend
;
4785 case R_MIPS_GNU_VTINHERIT
:
4786 case R_MIPS_GNU_VTENTRY
:
4787 /* We don't do anything with these at present. */
4788 return bfd_reloc_continue
;
4791 /* An unrecognized relocation type. */
4792 return bfd_reloc_notsupported
;
4795 /* Store the VALUE for our caller. */
4797 return overflowed_p
? bfd_reloc_overflow
: bfd_reloc_ok
;
4800 /* Obtain the field relocated by RELOCATION. */
4803 mips_elf_obtain_contents (reloc_howto_type
*howto
,
4804 const Elf_Internal_Rela
*relocation
,
4805 bfd
*input_bfd
, bfd_byte
*contents
)
4808 bfd_byte
*location
= contents
+ relocation
->r_offset
;
4810 /* Obtain the bytes. */
4811 x
= bfd_get ((8 * bfd_get_reloc_size (howto
)), input_bfd
, location
);
4816 /* It has been determined that the result of the RELOCATION is the
4817 VALUE. Use HOWTO to place VALUE into the output file at the
4818 appropriate position. The SECTION is the section to which the
4819 relocation applies. If REQUIRE_JALX is TRUE, then the opcode used
4820 for the relocation must be either JAL or JALX, and it is
4821 unconditionally converted to JALX.
4823 Returns FALSE if anything goes wrong. */
4826 mips_elf_perform_relocation (struct bfd_link_info
*info
,
4827 reloc_howto_type
*howto
,
4828 const Elf_Internal_Rela
*relocation
,
4829 bfd_vma value
, bfd
*input_bfd
,
4830 asection
*input_section
, bfd_byte
*contents
,
4831 bfd_boolean require_jalx
)
4835 int r_type
= ELF_R_TYPE (input_bfd
, relocation
->r_info
);
4837 /* Figure out where the relocation is occurring. */
4838 location
= contents
+ relocation
->r_offset
;
4840 _bfd_mips16_elf_reloc_unshuffle (input_bfd
, r_type
, FALSE
, location
);
4842 /* Obtain the current value. */
4843 x
= mips_elf_obtain_contents (howto
, relocation
, input_bfd
, contents
);
4845 /* Clear the field we are setting. */
4846 x
&= ~howto
->dst_mask
;
4848 /* Set the field. */
4849 x
|= (value
& howto
->dst_mask
);
4851 /* If required, turn JAL into JALX. */
4855 bfd_vma opcode
= x
>> 26;
4856 bfd_vma jalx_opcode
;
4858 /* Check to see if the opcode is already JAL or JALX. */
4859 if (r_type
== R_MIPS16_26
)
4861 ok
= ((opcode
== 0x6) || (opcode
== 0x7));
4866 ok
= ((opcode
== 0x3) || (opcode
== 0x1d));
4870 /* If the opcode is not JAL or JALX, there's a problem. */
4873 (*_bfd_error_handler
)
4874 (_("%B: %A+0x%lx: jump to stub routine which is not jal"),
4877 (unsigned long) relocation
->r_offset
);
4878 bfd_set_error (bfd_error_bad_value
);
4882 /* Make this the JALX opcode. */
4883 x
= (x
& ~(0x3f << 26)) | (jalx_opcode
<< 26);
4886 /* On the RM9000, bal is faster than jal, because bal uses branch
4887 prediction hardware. If we are linking for the RM9000, and we
4888 see jal, and bal fits, use it instead. Note that this
4889 transformation should be safe for all architectures. */
4890 if (bfd_get_mach (input_bfd
) == bfd_mach_mips9000
4891 && !info
->relocatable
4893 && ((r_type
== R_MIPS_26
&& (x
>> 26) == 0x3) /* jal addr */
4894 || (r_type
== R_MIPS_JALR
&& x
== 0x0320f809))) /* jalr t9 */
4900 addr
= (input_section
->output_section
->vma
4901 + input_section
->output_offset
4902 + relocation
->r_offset
4904 if (r_type
== R_MIPS_26
)
4905 dest
= (value
<< 2) | ((addr
>> 28) << 28);
4909 if (off
<= 0x1ffff && off
>= -0x20000)
4910 x
= 0x04110000 | (((bfd_vma
) off
>> 2) & 0xffff); /* bal addr */
4913 /* Put the value into the output. */
4914 bfd_put (8 * bfd_get_reloc_size (howto
), input_bfd
, x
, location
);
4916 _bfd_mips16_elf_reloc_shuffle(input_bfd
, r_type
, !info
->relocatable
,
4922 /* Returns TRUE if SECTION is a MIPS16 stub section. */
4925 mips16_stub_section_p (bfd
*abfd ATTRIBUTE_UNUSED
, asection
*section
)
4927 const char *name
= bfd_get_section_name (abfd
, section
);
4929 return FN_STUB_P (name
) || CALL_STUB_P (name
) || CALL_FP_STUB_P (name
);
4932 /* Add room for N relocations to the .rel(a).dyn section in ABFD. */
4935 mips_elf_allocate_dynamic_relocations (bfd
*abfd
, struct bfd_link_info
*info
,
4939 struct mips_elf_link_hash_table
*htab
;
4941 htab
= mips_elf_hash_table (info
);
4942 s
= mips_elf_rel_dyn_section (info
, FALSE
);
4943 BFD_ASSERT (s
!= NULL
);
4945 if (htab
->is_vxworks
)
4946 s
->size
+= n
* MIPS_ELF_RELA_SIZE (abfd
);
4951 /* Make room for a null element. */
4952 s
->size
+= MIPS_ELF_REL_SIZE (abfd
);
4955 s
->size
+= n
* MIPS_ELF_REL_SIZE (abfd
);
4959 /* Create a rel.dyn relocation for the dynamic linker to resolve. REL
4960 is the original relocation, which is now being transformed into a
4961 dynamic relocation. The ADDENDP is adjusted if necessary; the
4962 caller should store the result in place of the original addend. */
4965 mips_elf_create_dynamic_relocation (bfd
*output_bfd
,
4966 struct bfd_link_info
*info
,
4967 const Elf_Internal_Rela
*rel
,
4968 struct mips_elf_link_hash_entry
*h
,
4969 asection
*sec
, bfd_vma symbol
,
4970 bfd_vma
*addendp
, asection
*input_section
)
4972 Elf_Internal_Rela outrel
[3];
4977 bfd_boolean defined_p
;
4978 struct mips_elf_link_hash_table
*htab
;
4980 htab
= mips_elf_hash_table (info
);
4981 r_type
= ELF_R_TYPE (output_bfd
, rel
->r_info
);
4982 dynobj
= elf_hash_table (info
)->dynobj
;
4983 sreloc
= mips_elf_rel_dyn_section (info
, FALSE
);
4984 BFD_ASSERT (sreloc
!= NULL
);
4985 BFD_ASSERT (sreloc
->contents
!= NULL
);
4986 BFD_ASSERT (sreloc
->reloc_count
* MIPS_ELF_REL_SIZE (output_bfd
)
4989 outrel
[0].r_offset
=
4990 _bfd_elf_section_offset (output_bfd
, info
, input_section
, rel
[0].r_offset
);
4991 if (ABI_64_P (output_bfd
))
4993 outrel
[1].r_offset
=
4994 _bfd_elf_section_offset (output_bfd
, info
, input_section
, rel
[1].r_offset
);
4995 outrel
[2].r_offset
=
4996 _bfd_elf_section_offset (output_bfd
, info
, input_section
, rel
[2].r_offset
);
4999 if (outrel
[0].r_offset
== MINUS_ONE
)
5000 /* The relocation field has been deleted. */
5003 if (outrel
[0].r_offset
== MINUS_TWO
)
5005 /* The relocation field has been converted into a relative value of
5006 some sort. Functions like _bfd_elf_write_section_eh_frame expect
5007 the field to be fully relocated, so add in the symbol's value. */
5012 /* We must now calculate the dynamic symbol table index to use
5013 in the relocation. */
5015 && (!h
->root
.def_regular
5016 || (info
->shared
&& !info
->symbolic
&& !h
->root
.forced_local
)))
5018 indx
= h
->root
.dynindx
;
5019 if (SGI_COMPAT (output_bfd
))
5020 defined_p
= h
->root
.def_regular
;
5022 /* ??? glibc's ld.so just adds the final GOT entry to the
5023 relocation field. It therefore treats relocs against
5024 defined symbols in the same way as relocs against
5025 undefined symbols. */
5030 if (sec
!= NULL
&& bfd_is_abs_section (sec
))
5032 else if (sec
== NULL
|| sec
->owner
== NULL
)
5034 bfd_set_error (bfd_error_bad_value
);
5039 indx
= elf_section_data (sec
->output_section
)->dynindx
;
5042 asection
*osec
= htab
->root
.text_index_section
;
5043 indx
= elf_section_data (osec
)->dynindx
;
5049 /* Instead of generating a relocation using the section
5050 symbol, we may as well make it a fully relative
5051 relocation. We want to avoid generating relocations to
5052 local symbols because we used to generate them
5053 incorrectly, without adding the original symbol value,
5054 which is mandated by the ABI for section symbols. In
5055 order to give dynamic loaders and applications time to
5056 phase out the incorrect use, we refrain from emitting
5057 section-relative relocations. It's not like they're
5058 useful, after all. This should be a bit more efficient
5060 /* ??? Although this behavior is compatible with glibc's ld.so,
5061 the ABI says that relocations against STN_UNDEF should have
5062 a symbol value of 0. Irix rld honors this, so relocations
5063 against STN_UNDEF have no effect. */
5064 if (!SGI_COMPAT (output_bfd
))
5069 /* If the relocation was previously an absolute relocation and
5070 this symbol will not be referred to by the relocation, we must
5071 adjust it by the value we give it in the dynamic symbol table.
5072 Otherwise leave the job up to the dynamic linker. */
5073 if (defined_p
&& r_type
!= R_MIPS_REL32
)
5076 if (htab
->is_vxworks
)
5077 /* VxWorks uses non-relative relocations for this. */
5078 outrel
[0].r_info
= ELF32_R_INFO (indx
, R_MIPS_32
);
5080 /* The relocation is always an REL32 relocation because we don't
5081 know where the shared library will wind up at load-time. */
5082 outrel
[0].r_info
= ELF_R_INFO (output_bfd
, (unsigned long) indx
,
5085 /* For strict adherence to the ABI specification, we should
5086 generate a R_MIPS_64 relocation record by itself before the
5087 _REL32/_64 record as well, such that the addend is read in as
5088 a 64-bit value (REL32 is a 32-bit relocation, after all).
5089 However, since none of the existing ELF64 MIPS dynamic
5090 loaders seems to care, we don't waste space with these
5091 artificial relocations. If this turns out to not be true,
5092 mips_elf_allocate_dynamic_relocation() should be tweaked so
5093 as to make room for a pair of dynamic relocations per
5094 invocation if ABI_64_P, and here we should generate an
5095 additional relocation record with R_MIPS_64 by itself for a
5096 NULL symbol before this relocation record. */
5097 outrel
[1].r_info
= ELF_R_INFO (output_bfd
, 0,
5098 ABI_64_P (output_bfd
)
5101 outrel
[2].r_info
= ELF_R_INFO (output_bfd
, 0, R_MIPS_NONE
);
5103 /* Adjust the output offset of the relocation to reference the
5104 correct location in the output file. */
5105 outrel
[0].r_offset
+= (input_section
->output_section
->vma
5106 + input_section
->output_offset
);
5107 outrel
[1].r_offset
+= (input_section
->output_section
->vma
5108 + input_section
->output_offset
);
5109 outrel
[2].r_offset
+= (input_section
->output_section
->vma
5110 + input_section
->output_offset
);
5112 /* Put the relocation back out. We have to use the special
5113 relocation outputter in the 64-bit case since the 64-bit
5114 relocation format is non-standard. */
5115 if (ABI_64_P (output_bfd
))
5117 (*get_elf_backend_data (output_bfd
)->s
->swap_reloc_out
)
5118 (output_bfd
, &outrel
[0],
5120 + sreloc
->reloc_count
* sizeof (Elf64_Mips_External_Rel
)));
5122 else if (htab
->is_vxworks
)
5124 /* VxWorks uses RELA rather than REL dynamic relocations. */
5125 outrel
[0].r_addend
= *addendp
;
5126 bfd_elf32_swap_reloca_out
5127 (output_bfd
, &outrel
[0],
5129 + sreloc
->reloc_count
* sizeof (Elf32_External_Rela
)));
5132 bfd_elf32_swap_reloc_out
5133 (output_bfd
, &outrel
[0],
5134 (sreloc
->contents
+ sreloc
->reloc_count
* sizeof (Elf32_External_Rel
)));
5136 /* We've now added another relocation. */
5137 ++sreloc
->reloc_count
;
5139 /* Make sure the output section is writable. The dynamic linker
5140 will be writing to it. */
5141 elf_section_data (input_section
->output_section
)->this_hdr
.sh_flags
5144 /* On IRIX5, make an entry of compact relocation info. */
5145 if (IRIX_COMPAT (output_bfd
) == ict_irix5
)
5147 asection
*scpt
= bfd_get_section_by_name (dynobj
, ".compact_rel");
5152 Elf32_crinfo cptrel
;
5154 mips_elf_set_cr_format (cptrel
, CRF_MIPS_LONG
);
5155 cptrel
.vaddr
= (rel
->r_offset
5156 + input_section
->output_section
->vma
5157 + input_section
->output_offset
);
5158 if (r_type
== R_MIPS_REL32
)
5159 mips_elf_set_cr_type (cptrel
, CRT_MIPS_REL32
);
5161 mips_elf_set_cr_type (cptrel
, CRT_MIPS_WORD
);
5162 mips_elf_set_cr_dist2to (cptrel
, 0);
5163 cptrel
.konst
= *addendp
;
5165 cr
= (scpt
->contents
5166 + sizeof (Elf32_External_compact_rel
));
5167 mips_elf_set_cr_relvaddr (cptrel
, 0);
5168 bfd_elf32_swap_crinfo_out (output_bfd
, &cptrel
,
5169 ((Elf32_External_crinfo
*) cr
5170 + scpt
->reloc_count
));
5171 ++scpt
->reloc_count
;
5175 /* If we've written this relocation for a readonly section,
5176 we need to set DF_TEXTREL again, so that we do not delete the
5178 if (MIPS_ELF_READONLY_SECTION (input_section
))
5179 info
->flags
|= DF_TEXTREL
;
5184 /* Return the MACH for a MIPS e_flags value. */
5187 _bfd_elf_mips_mach (flagword flags
)
5189 switch (flags
& EF_MIPS_MACH
)
5191 case E_MIPS_MACH_3900
:
5192 return bfd_mach_mips3900
;
5194 case E_MIPS_MACH_4010
:
5195 return bfd_mach_mips4010
;
5197 case E_MIPS_MACH_4100
:
5198 return bfd_mach_mips4100
;
5200 case E_MIPS_MACH_4111
:
5201 return bfd_mach_mips4111
;
5203 case E_MIPS_MACH_4120
:
5204 return bfd_mach_mips4120
;
5206 case E_MIPS_MACH_4650
:
5207 return bfd_mach_mips4650
;
5209 case E_MIPS_MACH_5400
:
5210 return bfd_mach_mips5400
;
5212 case E_MIPS_MACH_5500
:
5213 return bfd_mach_mips5500
;
5215 case E_MIPS_MACH_9000
:
5216 return bfd_mach_mips9000
;
5218 case E_MIPS_MACH_SB1
:
5219 return bfd_mach_mips_sb1
;
5221 case E_MIPS_MACH_LS2E
:
5222 return bfd_mach_mips_loongson_2e
;
5224 case E_MIPS_MACH_LS2F
:
5225 return bfd_mach_mips_loongson_2f
;
5227 case E_MIPS_MACH_OCTEON
:
5228 return bfd_mach_mips_octeon
;
5231 switch (flags
& EF_MIPS_ARCH
)
5235 return bfd_mach_mips3000
;
5238 return bfd_mach_mips6000
;
5241 return bfd_mach_mips4000
;
5244 return bfd_mach_mips8000
;
5247 return bfd_mach_mips5
;
5249 case E_MIPS_ARCH_32
:
5250 return bfd_mach_mipsisa32
;
5252 case E_MIPS_ARCH_64
:
5253 return bfd_mach_mipsisa64
;
5255 case E_MIPS_ARCH_32R2
:
5256 return bfd_mach_mipsisa32r2
;
5258 case E_MIPS_ARCH_64R2
:
5259 return bfd_mach_mipsisa64r2
;
5266 /* Return printable name for ABI. */
5268 static INLINE
char *
5269 elf_mips_abi_name (bfd
*abfd
)
5273 flags
= elf_elfheader (abfd
)->e_flags
;
5274 switch (flags
& EF_MIPS_ABI
)
5277 if (ABI_N32_P (abfd
))
5279 else if (ABI_64_P (abfd
))
5283 case E_MIPS_ABI_O32
:
5285 case E_MIPS_ABI_O64
:
5287 case E_MIPS_ABI_EABI32
:
5289 case E_MIPS_ABI_EABI64
:
5292 return "unknown abi";
5296 /* MIPS ELF uses two common sections. One is the usual one, and the
5297 other is for small objects. All the small objects are kept
5298 together, and then referenced via the gp pointer, which yields
5299 faster assembler code. This is what we use for the small common
5300 section. This approach is copied from ecoff.c. */
5301 static asection mips_elf_scom_section
;
5302 static asymbol mips_elf_scom_symbol
;
5303 static asymbol
*mips_elf_scom_symbol_ptr
;
5305 /* MIPS ELF also uses an acommon section, which represents an
5306 allocated common symbol which may be overridden by a
5307 definition in a shared library. */
5308 static asection mips_elf_acom_section
;
5309 static asymbol mips_elf_acom_symbol
;
5310 static asymbol
*mips_elf_acom_symbol_ptr
;
5312 /* Handle the special MIPS section numbers that a symbol may use.
5313 This is used for both the 32-bit and the 64-bit ABI. */
5316 _bfd_mips_elf_symbol_processing (bfd
*abfd
, asymbol
*asym
)
5318 elf_symbol_type
*elfsym
;
5320 elfsym
= (elf_symbol_type
*) asym
;
5321 switch (elfsym
->internal_elf_sym
.st_shndx
)
5323 case SHN_MIPS_ACOMMON
:
5324 /* This section is used in a dynamically linked executable file.
5325 It is an allocated common section. The dynamic linker can
5326 either resolve these symbols to something in a shared
5327 library, or it can just leave them here. For our purposes,
5328 we can consider these symbols to be in a new section. */
5329 if (mips_elf_acom_section
.name
== NULL
)
5331 /* Initialize the acommon section. */
5332 mips_elf_acom_section
.name
= ".acommon";
5333 mips_elf_acom_section
.flags
= SEC_ALLOC
;
5334 mips_elf_acom_section
.output_section
= &mips_elf_acom_section
;
5335 mips_elf_acom_section
.symbol
= &mips_elf_acom_symbol
;
5336 mips_elf_acom_section
.symbol_ptr_ptr
= &mips_elf_acom_symbol_ptr
;
5337 mips_elf_acom_symbol
.name
= ".acommon";
5338 mips_elf_acom_symbol
.flags
= BSF_SECTION_SYM
;
5339 mips_elf_acom_symbol
.section
= &mips_elf_acom_section
;
5340 mips_elf_acom_symbol_ptr
= &mips_elf_acom_symbol
;
5342 asym
->section
= &mips_elf_acom_section
;
5346 /* Common symbols less than the GP size are automatically
5347 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */
5348 if (asym
->value
> elf_gp_size (abfd
)
5349 || ELF_ST_TYPE (elfsym
->internal_elf_sym
.st_info
) == STT_TLS
5350 || IRIX_COMPAT (abfd
) == ict_irix6
)
5353 case SHN_MIPS_SCOMMON
:
5354 if (mips_elf_scom_section
.name
== NULL
)
5356 /* Initialize the small common section. */
5357 mips_elf_scom_section
.name
= ".scommon";
5358 mips_elf_scom_section
.flags
= SEC_IS_COMMON
;
5359 mips_elf_scom_section
.output_section
= &mips_elf_scom_section
;
5360 mips_elf_scom_section
.symbol
= &mips_elf_scom_symbol
;
5361 mips_elf_scom_section
.symbol_ptr_ptr
= &mips_elf_scom_symbol_ptr
;
5362 mips_elf_scom_symbol
.name
= ".scommon";
5363 mips_elf_scom_symbol
.flags
= BSF_SECTION_SYM
;
5364 mips_elf_scom_symbol
.section
= &mips_elf_scom_section
;
5365 mips_elf_scom_symbol_ptr
= &mips_elf_scom_symbol
;
5367 asym
->section
= &mips_elf_scom_section
;
5368 asym
->value
= elfsym
->internal_elf_sym
.st_size
;
5371 case SHN_MIPS_SUNDEFINED
:
5372 asym
->section
= bfd_und_section_ptr
;
5377 asection
*section
= bfd_get_section_by_name (abfd
, ".text");
5379 BFD_ASSERT (SGI_COMPAT (abfd
));
5380 if (section
!= NULL
)
5382 asym
->section
= section
;
5383 /* MIPS_TEXT is a bit special, the address is not an offset
5384 to the base of the .text section. So substract the section
5385 base address to make it an offset. */
5386 asym
->value
-= section
->vma
;
5393 asection
*section
= bfd_get_section_by_name (abfd
, ".data");
5395 BFD_ASSERT (SGI_COMPAT (abfd
));
5396 if (section
!= NULL
)
5398 asym
->section
= section
;
5399 /* MIPS_DATA is a bit special, the address is not an offset
5400 to the base of the .data section. So substract the section
5401 base address to make it an offset. */
5402 asym
->value
-= section
->vma
;
5409 /* Implement elf_backend_eh_frame_address_size. This differs from
5410 the default in the way it handles EABI64.
5412 EABI64 was originally specified as an LP64 ABI, and that is what
5413 -mabi=eabi normally gives on a 64-bit target. However, gcc has
5414 historically accepted the combination of -mabi=eabi and -mlong32,
5415 and this ILP32 variation has become semi-official over time.
5416 Both forms use elf32 and have pointer-sized FDE addresses.
5418 If an EABI object was generated by GCC 4.0 or above, it will have
5419 an empty .gcc_compiled_longXX section, where XX is the size of longs
5420 in bits. Unfortunately, ILP32 objects generated by earlier compilers
5421 have no special marking to distinguish them from LP64 objects.
5423 We don't want users of the official LP64 ABI to be punished for the
5424 existence of the ILP32 variant, but at the same time, we don't want
5425 to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
5426 We therefore take the following approach:
5428 - If ABFD contains a .gcc_compiled_longXX section, use it to
5429 determine the pointer size.
5431 - Otherwise check the type of the first relocation. Assume that
5432 the LP64 ABI is being used if the relocation is of type R_MIPS_64.
5436 The second check is enough to detect LP64 objects generated by pre-4.0
5437 compilers because, in the kind of output generated by those compilers,
5438 the first relocation will be associated with either a CIE personality
5439 routine or an FDE start address. Furthermore, the compilers never
5440 used a special (non-pointer) encoding for this ABI.
5442 Checking the relocation type should also be safe because there is no
5443 reason to use R_MIPS_64 in an ILP32 object. Pre-4.0 compilers never
5447 _bfd_mips_elf_eh_frame_address_size (bfd
*abfd
, asection
*sec
)
5449 if (elf_elfheader (abfd
)->e_ident
[EI_CLASS
] == ELFCLASS64
)
5451 if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ABI
) == E_MIPS_ABI_EABI64
)
5453 bfd_boolean long32_p
, long64_p
;
5455 long32_p
= bfd_get_section_by_name (abfd
, ".gcc_compiled_long32") != 0;
5456 long64_p
= bfd_get_section_by_name (abfd
, ".gcc_compiled_long64") != 0;
5457 if (long32_p
&& long64_p
)
5464 if (sec
->reloc_count
> 0
5465 && elf_section_data (sec
)->relocs
!= NULL
5466 && (ELF32_R_TYPE (elf_section_data (sec
)->relocs
[0].r_info
)
5475 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
5476 relocations against two unnamed section symbols to resolve to the
5477 same address. For example, if we have code like:
5479 lw $4,%got_disp(.data)($gp)
5480 lw $25,%got_disp(.text)($gp)
5483 then the linker will resolve both relocations to .data and the program
5484 will jump there rather than to .text.
5486 We can work around this problem by giving names to local section symbols.
5487 This is also what the MIPSpro tools do. */
5490 _bfd_mips_elf_name_local_section_symbols (bfd
*abfd
)
5492 return SGI_COMPAT (abfd
);
5495 /* Work over a section just before writing it out. This routine is
5496 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize
5497 sections that need the SHF_MIPS_GPREL flag by name; there has to be
5501 _bfd_mips_elf_section_processing (bfd
*abfd
, Elf_Internal_Shdr
*hdr
)
5503 if (hdr
->sh_type
== SHT_MIPS_REGINFO
5504 && hdr
->sh_size
> 0)
5508 BFD_ASSERT (hdr
->sh_size
== sizeof (Elf32_External_RegInfo
));
5509 BFD_ASSERT (hdr
->contents
== NULL
);
5512 hdr
->sh_offset
+ sizeof (Elf32_External_RegInfo
) - 4,
5515 H_PUT_32 (abfd
, elf_gp (abfd
), buf
);
5516 if (bfd_bwrite (buf
, 4, abfd
) != 4)
5520 if (hdr
->sh_type
== SHT_MIPS_OPTIONS
5521 && hdr
->bfd_section
!= NULL
5522 && mips_elf_section_data (hdr
->bfd_section
) != NULL
5523 && mips_elf_section_data (hdr
->bfd_section
)->u
.tdata
!= NULL
)
5525 bfd_byte
*contents
, *l
, *lend
;
5527 /* We stored the section contents in the tdata field in the
5528 set_section_contents routine. We save the section contents
5529 so that we don't have to read them again.
5530 At this point we know that elf_gp is set, so we can look
5531 through the section contents to see if there is an
5532 ODK_REGINFO structure. */
5534 contents
= mips_elf_section_data (hdr
->bfd_section
)->u
.tdata
;
5536 lend
= contents
+ hdr
->sh_size
;
5537 while (l
+ sizeof (Elf_External_Options
) <= lend
)
5539 Elf_Internal_Options intopt
;
5541 bfd_mips_elf_swap_options_in (abfd
, (Elf_External_Options
*) l
,
5543 if (intopt
.size
< sizeof (Elf_External_Options
))
5545 (*_bfd_error_handler
)
5546 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
5547 abfd
, MIPS_ELF_OPTIONS_SECTION_NAME (abfd
), intopt
.size
);
5550 if (ABI_64_P (abfd
) && intopt
.kind
== ODK_REGINFO
)
5557 + sizeof (Elf_External_Options
)
5558 + (sizeof (Elf64_External_RegInfo
) - 8)),
5561 H_PUT_64 (abfd
, elf_gp (abfd
), buf
);
5562 if (bfd_bwrite (buf
, 8, abfd
) != 8)
5565 else if (intopt
.kind
== ODK_REGINFO
)
5572 + sizeof (Elf_External_Options
)
5573 + (sizeof (Elf32_External_RegInfo
) - 4)),
5576 H_PUT_32 (abfd
, elf_gp (abfd
), buf
);
5577 if (bfd_bwrite (buf
, 4, abfd
) != 4)
5584 if (hdr
->bfd_section
!= NULL
)
5586 const char *name
= bfd_get_section_name (abfd
, hdr
->bfd_section
);
5588 if (strcmp (name
, ".sdata") == 0
5589 || strcmp (name
, ".lit8") == 0
5590 || strcmp (name
, ".lit4") == 0)
5592 hdr
->sh_flags
|= SHF_ALLOC
| SHF_WRITE
| SHF_MIPS_GPREL
;
5593 hdr
->sh_type
= SHT_PROGBITS
;
5595 else if (strcmp (name
, ".sbss") == 0)
5597 hdr
->sh_flags
|= SHF_ALLOC
| SHF_WRITE
| SHF_MIPS_GPREL
;
5598 hdr
->sh_type
= SHT_NOBITS
;
5600 else if (strcmp (name
, ".srdata") == 0)
5602 hdr
->sh_flags
|= SHF_ALLOC
| SHF_MIPS_GPREL
;
5603 hdr
->sh_type
= SHT_PROGBITS
;
5605 else if (strcmp (name
, ".compact_rel") == 0)
5608 hdr
->sh_type
= SHT_PROGBITS
;
5610 else if (strcmp (name
, ".rtproc") == 0)
5612 if (hdr
->sh_addralign
!= 0 && hdr
->sh_entsize
== 0)
5614 unsigned int adjust
;
5616 adjust
= hdr
->sh_size
% hdr
->sh_addralign
;
5618 hdr
->sh_size
+= hdr
->sh_addralign
- adjust
;
5626 /* Handle a MIPS specific section when reading an object file. This
5627 is called when elfcode.h finds a section with an unknown type.
5628 This routine supports both the 32-bit and 64-bit ELF ABI.
5630 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
5634 _bfd_mips_elf_section_from_shdr (bfd
*abfd
,
5635 Elf_Internal_Shdr
*hdr
,
5641 /* There ought to be a place to keep ELF backend specific flags, but
5642 at the moment there isn't one. We just keep track of the
5643 sections by their name, instead. Fortunately, the ABI gives
5644 suggested names for all the MIPS specific sections, so we will
5645 probably get away with this. */
5646 switch (hdr
->sh_type
)
5648 case SHT_MIPS_LIBLIST
:
5649 if (strcmp (name
, ".liblist") != 0)
5653 if (strcmp (name
, ".msym") != 0)
5656 case SHT_MIPS_CONFLICT
:
5657 if (strcmp (name
, ".conflict") != 0)
5660 case SHT_MIPS_GPTAB
:
5661 if (! CONST_STRNEQ (name
, ".gptab."))
5664 case SHT_MIPS_UCODE
:
5665 if (strcmp (name
, ".ucode") != 0)
5668 case SHT_MIPS_DEBUG
:
5669 if (strcmp (name
, ".mdebug") != 0)
5671 flags
= SEC_DEBUGGING
;
5673 case SHT_MIPS_REGINFO
:
5674 if (strcmp (name
, ".reginfo") != 0
5675 || hdr
->sh_size
!= sizeof (Elf32_External_RegInfo
))
5677 flags
= (SEC_LINK_ONCE
| SEC_LINK_DUPLICATES_SAME_SIZE
);
5679 case SHT_MIPS_IFACE
:
5680 if (strcmp (name
, ".MIPS.interfaces") != 0)
5683 case SHT_MIPS_CONTENT
:
5684 if (! CONST_STRNEQ (name
, ".MIPS.content"))
5687 case SHT_MIPS_OPTIONS
:
5688 if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name
))
5691 case SHT_MIPS_DWARF
:
5692 if (! CONST_STRNEQ (name
, ".debug_")
5693 && ! CONST_STRNEQ (name
, ".zdebug_"))
5696 case SHT_MIPS_SYMBOL_LIB
:
5697 if (strcmp (name
, ".MIPS.symlib") != 0)
5700 case SHT_MIPS_EVENTS
:
5701 if (! CONST_STRNEQ (name
, ".MIPS.events")
5702 && ! CONST_STRNEQ (name
, ".MIPS.post_rel"))
5709 if (! _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
, shindex
))
5714 if (! bfd_set_section_flags (abfd
, hdr
->bfd_section
,
5715 (bfd_get_section_flags (abfd
,
5721 /* FIXME: We should record sh_info for a .gptab section. */
5723 /* For a .reginfo section, set the gp value in the tdata information
5724 from the contents of this section. We need the gp value while
5725 processing relocs, so we just get it now. The .reginfo section
5726 is not used in the 64-bit MIPS ELF ABI. */
5727 if (hdr
->sh_type
== SHT_MIPS_REGINFO
)
5729 Elf32_External_RegInfo ext
;
5732 if (! bfd_get_section_contents (abfd
, hdr
->bfd_section
,
5733 &ext
, 0, sizeof ext
))
5735 bfd_mips_elf32_swap_reginfo_in (abfd
, &ext
, &s
);
5736 elf_gp (abfd
) = s
.ri_gp_value
;
5739 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
5740 set the gp value based on what we find. We may see both
5741 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
5742 they should agree. */
5743 if (hdr
->sh_type
== SHT_MIPS_OPTIONS
)
5745 bfd_byte
*contents
, *l
, *lend
;
5747 contents
= bfd_malloc (hdr
->sh_size
);
5748 if (contents
== NULL
)
5750 if (! bfd_get_section_contents (abfd
, hdr
->bfd_section
, contents
,
5757 lend
= contents
+ hdr
->sh_size
;
5758 while (l
+ sizeof (Elf_External_Options
) <= lend
)
5760 Elf_Internal_Options intopt
;
5762 bfd_mips_elf_swap_options_in (abfd
, (Elf_External_Options
*) l
,
5764 if (intopt
.size
< sizeof (Elf_External_Options
))
5766 (*_bfd_error_handler
)
5767 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
5768 abfd
, MIPS_ELF_OPTIONS_SECTION_NAME (abfd
), intopt
.size
);
5771 if (ABI_64_P (abfd
) && intopt
.kind
== ODK_REGINFO
)
5773 Elf64_Internal_RegInfo intreg
;
5775 bfd_mips_elf64_swap_reginfo_in
5777 ((Elf64_External_RegInfo
*)
5778 (l
+ sizeof (Elf_External_Options
))),
5780 elf_gp (abfd
) = intreg
.ri_gp_value
;
5782 else if (intopt
.kind
== ODK_REGINFO
)
5784 Elf32_RegInfo intreg
;
5786 bfd_mips_elf32_swap_reginfo_in
5788 ((Elf32_External_RegInfo
*)
5789 (l
+ sizeof (Elf_External_Options
))),
5791 elf_gp (abfd
) = intreg
.ri_gp_value
;
5801 /* Set the correct type for a MIPS ELF section. We do this by the
5802 section name, which is a hack, but ought to work. This routine is
5803 used by both the 32-bit and the 64-bit ABI. */
5806 _bfd_mips_elf_fake_sections (bfd
*abfd
, Elf_Internal_Shdr
*hdr
, asection
*sec
)
5808 const char *name
= bfd_get_section_name (abfd
, sec
);
5810 if (strcmp (name
, ".liblist") == 0)
5812 hdr
->sh_type
= SHT_MIPS_LIBLIST
;
5813 hdr
->sh_info
= sec
->size
/ sizeof (Elf32_Lib
);
5814 /* The sh_link field is set in final_write_processing. */
5816 else if (strcmp (name
, ".conflict") == 0)
5817 hdr
->sh_type
= SHT_MIPS_CONFLICT
;
5818 else if (CONST_STRNEQ (name
, ".gptab."))
5820 hdr
->sh_type
= SHT_MIPS_GPTAB
;
5821 hdr
->sh_entsize
= sizeof (Elf32_External_gptab
);
5822 /* The sh_info field is set in final_write_processing. */
5824 else if (strcmp (name
, ".ucode") == 0)
5825 hdr
->sh_type
= SHT_MIPS_UCODE
;
5826 else if (strcmp (name
, ".mdebug") == 0)
5828 hdr
->sh_type
= SHT_MIPS_DEBUG
;
5829 /* In a shared object on IRIX 5.3, the .mdebug section has an
5830 entsize of 0. FIXME: Does this matter? */
5831 if (SGI_COMPAT (abfd
) && (abfd
->flags
& DYNAMIC
) != 0)
5832 hdr
->sh_entsize
= 0;
5834 hdr
->sh_entsize
= 1;
5836 else if (strcmp (name
, ".reginfo") == 0)
5838 hdr
->sh_type
= SHT_MIPS_REGINFO
;
5839 /* In a shared object on IRIX 5.3, the .reginfo section has an
5840 entsize of 0x18. FIXME: Does this matter? */
5841 if (SGI_COMPAT (abfd
))
5843 if ((abfd
->flags
& DYNAMIC
) != 0)
5844 hdr
->sh_entsize
= sizeof (Elf32_External_RegInfo
);
5846 hdr
->sh_entsize
= 1;
5849 hdr
->sh_entsize
= sizeof (Elf32_External_RegInfo
);
5851 else if (SGI_COMPAT (abfd
)
5852 && (strcmp (name
, ".hash") == 0
5853 || strcmp (name
, ".dynamic") == 0
5854 || strcmp (name
, ".dynstr") == 0))
5856 if (SGI_COMPAT (abfd
))
5857 hdr
->sh_entsize
= 0;
5859 /* This isn't how the IRIX6 linker behaves. */
5860 hdr
->sh_info
= SIZEOF_MIPS_DYNSYM_SECNAMES
;
5863 else if (strcmp (name
, ".got") == 0
5864 || strcmp (name
, ".srdata") == 0
5865 || strcmp (name
, ".sdata") == 0
5866 || strcmp (name
, ".sbss") == 0
5867 || strcmp (name
, ".lit4") == 0
5868 || strcmp (name
, ".lit8") == 0)
5869 hdr
->sh_flags
|= SHF_MIPS_GPREL
;
5870 else if (strcmp (name
, ".MIPS.interfaces") == 0)
5872 hdr
->sh_type
= SHT_MIPS_IFACE
;
5873 hdr
->sh_flags
|= SHF_MIPS_NOSTRIP
;
5875 else if (CONST_STRNEQ (name
, ".MIPS.content"))
5877 hdr
->sh_type
= SHT_MIPS_CONTENT
;
5878 hdr
->sh_flags
|= SHF_MIPS_NOSTRIP
;
5879 /* The sh_info field is set in final_write_processing. */
5881 else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name
))
5883 hdr
->sh_type
= SHT_MIPS_OPTIONS
;
5884 hdr
->sh_entsize
= 1;
5885 hdr
->sh_flags
|= SHF_MIPS_NOSTRIP
;
5887 else if (CONST_STRNEQ (name
, ".debug_")
5888 || CONST_STRNEQ (name
, ".zdebug_"))
5890 hdr
->sh_type
= SHT_MIPS_DWARF
;
5892 /* Irix facilities such as libexc expect a single .debug_frame
5893 per executable, the system ones have NOSTRIP set and the linker
5894 doesn't merge sections with different flags so ... */
5895 if (SGI_COMPAT (abfd
) && CONST_STRNEQ (name
, ".debug_frame"))
5896 hdr
->sh_flags
|= SHF_MIPS_NOSTRIP
;
5898 else if (strcmp (name
, ".MIPS.symlib") == 0)
5900 hdr
->sh_type
= SHT_MIPS_SYMBOL_LIB
;
5901 /* The sh_link and sh_info fields are set in
5902 final_write_processing. */
5904 else if (CONST_STRNEQ (name
, ".MIPS.events")
5905 || CONST_STRNEQ (name
, ".MIPS.post_rel"))
5907 hdr
->sh_type
= SHT_MIPS_EVENTS
;
5908 hdr
->sh_flags
|= SHF_MIPS_NOSTRIP
;
5909 /* The sh_link field is set in final_write_processing. */
5911 else if (strcmp (name
, ".msym") == 0)
5913 hdr
->sh_type
= SHT_MIPS_MSYM
;
5914 hdr
->sh_flags
|= SHF_ALLOC
;
5915 hdr
->sh_entsize
= 8;
5918 /* The generic elf_fake_sections will set up REL_HDR using the default
5919 kind of relocations. We used to set up a second header for the
5920 non-default kind of relocations here, but only NewABI would use
5921 these, and the IRIX ld doesn't like resulting empty RELA sections.
5922 Thus we create those header only on demand now. */
5927 /* Given a BFD section, try to locate the corresponding ELF section
5928 index. This is used by both the 32-bit and the 64-bit ABI.
5929 Actually, it's not clear to me that the 64-bit ABI supports these,
5930 but for non-PIC objects we will certainly want support for at least
5931 the .scommon section. */
5934 _bfd_mips_elf_section_from_bfd_section (bfd
*abfd ATTRIBUTE_UNUSED
,
5935 asection
*sec
, int *retval
)
5937 if (strcmp (bfd_get_section_name (abfd
, sec
), ".scommon") == 0)
5939 *retval
= SHN_MIPS_SCOMMON
;
5942 if (strcmp (bfd_get_section_name (abfd
, sec
), ".acommon") == 0)
5944 *retval
= SHN_MIPS_ACOMMON
;
5950 /* Hook called by the linker routine which adds symbols from an object
5951 file. We must handle the special MIPS section numbers here. */
5954 _bfd_mips_elf_add_symbol_hook (bfd
*abfd
, struct bfd_link_info
*info
,
5955 Elf_Internal_Sym
*sym
, const char **namep
,
5956 flagword
*flagsp ATTRIBUTE_UNUSED
,
5957 asection
**secp
, bfd_vma
*valp
)
5959 if (SGI_COMPAT (abfd
)
5960 && (abfd
->flags
& DYNAMIC
) != 0
5961 && strcmp (*namep
, "_rld_new_interface") == 0)
5963 /* Skip IRIX5 rld entry name. */
5968 /* Shared objects may have a dynamic symbol '_gp_disp' defined as
5969 a SECTION *ABS*. This causes ld to think it can resolve _gp_disp
5970 by setting a DT_NEEDED for the shared object. Since _gp_disp is
5971 a magic symbol resolved by the linker, we ignore this bogus definition
5972 of _gp_disp. New ABI objects do not suffer from this problem so this
5973 is not done for them. */
5975 && (sym
->st_shndx
== SHN_ABS
)
5976 && (strcmp (*namep
, "_gp_disp") == 0))
5982 switch (sym
->st_shndx
)
5985 /* Common symbols less than the GP size are automatically
5986 treated as SHN_MIPS_SCOMMON symbols. */
5987 if (sym
->st_size
> elf_gp_size (abfd
)
5988 || ELF_ST_TYPE (sym
->st_info
) == STT_TLS
5989 || IRIX_COMPAT (abfd
) == ict_irix6
)
5992 case SHN_MIPS_SCOMMON
:
5993 *secp
= bfd_make_section_old_way (abfd
, ".scommon");
5994 (*secp
)->flags
|= SEC_IS_COMMON
;
5995 *valp
= sym
->st_size
;
5999 /* This section is used in a shared object. */
6000 if (elf_tdata (abfd
)->elf_text_section
== NULL
)
6002 asymbol
*elf_text_symbol
;
6003 asection
*elf_text_section
;
6004 bfd_size_type amt
= sizeof (asection
);
6006 elf_text_section
= bfd_zalloc (abfd
, amt
);
6007 if (elf_text_section
== NULL
)
6010 amt
= sizeof (asymbol
);
6011 elf_text_symbol
= bfd_zalloc (abfd
, amt
);
6012 if (elf_text_symbol
== NULL
)
6015 /* Initialize the section. */
6017 elf_tdata (abfd
)->elf_text_section
= elf_text_section
;
6018 elf_tdata (abfd
)->elf_text_symbol
= elf_text_symbol
;
6020 elf_text_section
->symbol
= elf_text_symbol
;
6021 elf_text_section
->symbol_ptr_ptr
= &elf_tdata (abfd
)->elf_text_symbol
;
6023 elf_text_section
->name
= ".text";
6024 elf_text_section
->flags
= SEC_NO_FLAGS
;
6025 elf_text_section
->output_section
= NULL
;
6026 elf_text_section
->owner
= abfd
;
6027 elf_text_symbol
->name
= ".text";
6028 elf_text_symbol
->flags
= BSF_SECTION_SYM
| BSF_DYNAMIC
;
6029 elf_text_symbol
->section
= elf_text_section
;
6031 /* This code used to do *secp = bfd_und_section_ptr if
6032 info->shared. I don't know why, and that doesn't make sense,
6033 so I took it out. */
6034 *secp
= elf_tdata (abfd
)->elf_text_section
;
6037 case SHN_MIPS_ACOMMON
:
6038 /* Fall through. XXX Can we treat this as allocated data? */
6040 /* This section is used in a shared object. */
6041 if (elf_tdata (abfd
)->elf_data_section
== NULL
)
6043 asymbol
*elf_data_symbol
;
6044 asection
*elf_data_section
;
6045 bfd_size_type amt
= sizeof (asection
);
6047 elf_data_section
= bfd_zalloc (abfd
, amt
);
6048 if (elf_data_section
== NULL
)
6051 amt
= sizeof (asymbol
);
6052 elf_data_symbol
= bfd_zalloc (abfd
, amt
);
6053 if (elf_data_symbol
== NULL
)
6056 /* Initialize the section. */
6058 elf_tdata (abfd
)->elf_data_section
= elf_data_section
;
6059 elf_tdata (abfd
)->elf_data_symbol
= elf_data_symbol
;
6061 elf_data_section
->symbol
= elf_data_symbol
;
6062 elf_data_section
->symbol_ptr_ptr
= &elf_tdata (abfd
)->elf_data_symbol
;
6064 elf_data_section
->name
= ".data";
6065 elf_data_section
->flags
= SEC_NO_FLAGS
;
6066 elf_data_section
->output_section
= NULL
;
6067 elf_data_section
->owner
= abfd
;
6068 elf_data_symbol
->name
= ".data";
6069 elf_data_symbol
->flags
= BSF_SECTION_SYM
| BSF_DYNAMIC
;
6070 elf_data_symbol
->section
= elf_data_section
;
6072 /* This code used to do *secp = bfd_und_section_ptr if
6073 info->shared. I don't know why, and that doesn't make sense,
6074 so I took it out. */
6075 *secp
= elf_tdata (abfd
)->elf_data_section
;
6078 case SHN_MIPS_SUNDEFINED
:
6079 *secp
= bfd_und_section_ptr
;
6083 if (SGI_COMPAT (abfd
)
6085 && info
->output_bfd
->xvec
== abfd
->xvec
6086 && strcmp (*namep
, "__rld_obj_head") == 0)
6088 struct elf_link_hash_entry
*h
;
6089 struct bfd_link_hash_entry
*bh
;
6091 /* Mark __rld_obj_head as dynamic. */
6093 if (! (_bfd_generic_link_add_one_symbol
6094 (info
, abfd
, *namep
, BSF_GLOBAL
, *secp
, *valp
, NULL
, FALSE
,
6095 get_elf_backend_data (abfd
)->collect
, &bh
)))
6098 h
= (struct elf_link_hash_entry
*) bh
;
6101 h
->type
= STT_OBJECT
;
6103 if (! bfd_elf_link_record_dynamic_symbol (info
, h
))
6106 mips_elf_hash_table (info
)->use_rld_obj_head
= TRUE
;
6109 /* If this is a mips16 text symbol, add 1 to the value to make it
6110 odd. This will cause something like .word SYM to come up with
6111 the right value when it is loaded into the PC. */
6112 if (ELF_ST_IS_MIPS16 (sym
->st_other
))
6118 /* This hook function is called before the linker writes out a global
6119 symbol. We mark symbols as small common if appropriate. This is
6120 also where we undo the increment of the value for a mips16 symbol. */
6123 _bfd_mips_elf_link_output_symbol_hook
6124 (struct bfd_link_info
*info ATTRIBUTE_UNUSED
,
6125 const char *name ATTRIBUTE_UNUSED
, Elf_Internal_Sym
*sym
,
6126 asection
*input_sec
, struct elf_link_hash_entry
*h ATTRIBUTE_UNUSED
)
6128 /* If we see a common symbol, which implies a relocatable link, then
6129 if a symbol was small common in an input file, mark it as small
6130 common in the output file. */
6131 if (sym
->st_shndx
== SHN_COMMON
6132 && strcmp (input_sec
->name
, ".scommon") == 0)
6133 sym
->st_shndx
= SHN_MIPS_SCOMMON
;
6135 if (ELF_ST_IS_MIPS16 (sym
->st_other
))
6136 sym
->st_value
&= ~1;
6141 /* Functions for the dynamic linker. */
6143 /* Create dynamic sections when linking against a dynamic object. */
6146 _bfd_mips_elf_create_dynamic_sections (bfd
*abfd
, struct bfd_link_info
*info
)
6148 struct elf_link_hash_entry
*h
;
6149 struct bfd_link_hash_entry
*bh
;
6151 register asection
*s
;
6152 const char * const *namep
;
6153 struct mips_elf_link_hash_table
*htab
;
6155 htab
= mips_elf_hash_table (info
);
6156 flags
= (SEC_ALLOC
| SEC_LOAD
| SEC_HAS_CONTENTS
| SEC_IN_MEMORY
6157 | SEC_LINKER_CREATED
| SEC_READONLY
);
6159 /* The psABI requires a read-only .dynamic section, but the VxWorks
6161 if (!htab
->is_vxworks
)
6163 s
= bfd_get_section_by_name (abfd
, ".dynamic");
6166 if (! bfd_set_section_flags (abfd
, s
, flags
))
6171 /* We need to create .got section. */
6172 if (! mips_elf_create_got_section (abfd
, info
, FALSE
))
6175 if (! mips_elf_rel_dyn_section (info
, TRUE
))
6178 /* Create .stub section. */
6179 if (bfd_get_section_by_name (abfd
,
6180 MIPS_ELF_STUB_SECTION_NAME (abfd
)) == NULL
)
6182 s
= bfd_make_section_with_flags (abfd
,
6183 MIPS_ELF_STUB_SECTION_NAME (abfd
),
6186 || ! bfd_set_section_alignment (abfd
, s
,
6187 MIPS_ELF_LOG_FILE_ALIGN (abfd
)))
6191 if ((IRIX_COMPAT (abfd
) == ict_irix5
|| IRIX_COMPAT (abfd
) == ict_none
)
6193 && bfd_get_section_by_name (abfd
, ".rld_map") == NULL
)
6195 s
= bfd_make_section_with_flags (abfd
, ".rld_map",
6196 flags
&~ (flagword
) SEC_READONLY
);
6198 || ! bfd_set_section_alignment (abfd
, s
,
6199 MIPS_ELF_LOG_FILE_ALIGN (abfd
)))
6203 /* On IRIX5, we adjust add some additional symbols and change the
6204 alignments of several sections. There is no ABI documentation
6205 indicating that this is necessary on IRIX6, nor any evidence that
6206 the linker takes such action. */
6207 if (IRIX_COMPAT (abfd
) == ict_irix5
)
6209 for (namep
= mips_elf_dynsym_rtproc_names
; *namep
!= NULL
; namep
++)
6212 if (! (_bfd_generic_link_add_one_symbol
6213 (info
, abfd
, *namep
, BSF_GLOBAL
, bfd_und_section_ptr
, 0,
6214 NULL
, FALSE
, get_elf_backend_data (abfd
)->collect
, &bh
)))
6217 h
= (struct elf_link_hash_entry
*) bh
;
6220 h
->type
= STT_SECTION
;
6222 if (! bfd_elf_link_record_dynamic_symbol (info
, h
))
6226 /* We need to create a .compact_rel section. */
6227 if (SGI_COMPAT (abfd
))
6229 if (!mips_elf_create_compact_rel_section (abfd
, info
))
6233 /* Change alignments of some sections. */
6234 s
= bfd_get_section_by_name (abfd
, ".hash");
6236 bfd_set_section_alignment (abfd
, s
, MIPS_ELF_LOG_FILE_ALIGN (abfd
));
6237 s
= bfd_get_section_by_name (abfd
, ".dynsym");
6239 bfd_set_section_alignment (abfd
, s
, MIPS_ELF_LOG_FILE_ALIGN (abfd
));
6240 s
= bfd_get_section_by_name (abfd
, ".dynstr");
6242 bfd_set_section_alignment (abfd
, s
, MIPS_ELF_LOG_FILE_ALIGN (abfd
));
6243 s
= bfd_get_section_by_name (abfd
, ".reginfo");
6245 bfd_set_section_alignment (abfd
, s
, MIPS_ELF_LOG_FILE_ALIGN (abfd
));
6246 s
= bfd_get_section_by_name (abfd
, ".dynamic");
6248 bfd_set_section_alignment (abfd
, s
, MIPS_ELF_LOG_FILE_ALIGN (abfd
));
6255 name
= SGI_COMPAT (abfd
) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
6257 if (!(_bfd_generic_link_add_one_symbol
6258 (info
, abfd
, name
, BSF_GLOBAL
, bfd_abs_section_ptr
, 0,
6259 NULL
, FALSE
, get_elf_backend_data (abfd
)->collect
, &bh
)))
6262 h
= (struct elf_link_hash_entry
*) bh
;
6265 h
->type
= STT_SECTION
;
6267 if (! bfd_elf_link_record_dynamic_symbol (info
, h
))
6270 if (! mips_elf_hash_table (info
)->use_rld_obj_head
)
6272 /* __rld_map is a four byte word located in the .data section
6273 and is filled in by the rtld to contain a pointer to
6274 the _r_debug structure. Its symbol value will be set in
6275 _bfd_mips_elf_finish_dynamic_symbol. */
6276 s
= bfd_get_section_by_name (abfd
, ".rld_map");
6277 BFD_ASSERT (s
!= NULL
);
6279 name
= SGI_COMPAT (abfd
) ? "__rld_map" : "__RLD_MAP";
6281 if (!(_bfd_generic_link_add_one_symbol
6282 (info
, abfd
, name
, BSF_GLOBAL
, s
, 0, NULL
, FALSE
,
6283 get_elf_backend_data (abfd
)->collect
, &bh
)))
6286 h
= (struct elf_link_hash_entry
*) bh
;
6289 h
->type
= STT_OBJECT
;
6291 if (! bfd_elf_link_record_dynamic_symbol (info
, h
))
6296 if (htab
->is_vxworks
)
6298 /* Create the .plt, .rela.plt, .dynbss and .rela.bss sections.
6299 Also create the _PROCEDURE_LINKAGE_TABLE symbol. */
6300 if (!_bfd_elf_create_dynamic_sections (abfd
, info
))
6303 /* Cache the sections created above. */
6304 htab
->sdynbss
= bfd_get_section_by_name (abfd
, ".dynbss");
6305 htab
->srelbss
= bfd_get_section_by_name (abfd
, ".rela.bss");
6306 htab
->srelplt
= bfd_get_section_by_name (abfd
, ".rela.plt");
6307 htab
->splt
= bfd_get_section_by_name (abfd
, ".plt");
6309 || (!htab
->srelbss
&& !info
->shared
)
6314 /* Do the usual VxWorks handling. */
6315 if (!elf_vxworks_create_dynamic_sections (abfd
, info
, &htab
->srelplt2
))
6318 /* Work out the PLT sizes. */
6321 htab
->plt_header_size
6322 = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry
);
6323 htab
->plt_entry_size
6324 = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry
);
6328 htab
->plt_header_size
6329 = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry
);
6330 htab
->plt_entry_size
6331 = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry
);
6338 /* Return true if relocation REL against section SEC is a REL rather than
6339 RELA relocation. RELOCS is the first relocation in the section and
6340 ABFD is the bfd that contains SEC. */
6343 mips_elf_rel_relocation_p (bfd
*abfd
, asection
*sec
,
6344 const Elf_Internal_Rela
*relocs
,
6345 const Elf_Internal_Rela
*rel
)
6347 Elf_Internal_Shdr
*rel_hdr
;
6348 const struct elf_backend_data
*bed
;
6350 /* To determine which flavor or relocation this is, we depend on the
6351 fact that the INPUT_SECTION's REL_HDR is read before its REL_HDR2. */
6352 rel_hdr
= &elf_section_data (sec
)->rel_hdr
;
6353 bed
= get_elf_backend_data (abfd
);
6354 if ((size_t) (rel
- relocs
)
6355 >= (NUM_SHDR_ENTRIES (rel_hdr
) * bed
->s
->int_rels_per_ext_rel
))
6356 rel_hdr
= elf_section_data (sec
)->rel_hdr2
;
6357 return rel_hdr
->sh_entsize
== MIPS_ELF_REL_SIZE (abfd
);
6360 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
6361 HOWTO is the relocation's howto and CONTENTS points to the contents
6362 of the section that REL is against. */
6365 mips_elf_read_rel_addend (bfd
*abfd
, const Elf_Internal_Rela
*rel
,
6366 reloc_howto_type
*howto
, bfd_byte
*contents
)
6369 unsigned int r_type
;
6372 r_type
= ELF_R_TYPE (abfd
, rel
->r_info
);
6373 location
= contents
+ rel
->r_offset
;
6375 /* Get the addend, which is stored in the input file. */
6376 _bfd_mips16_elf_reloc_unshuffle (abfd
, r_type
, FALSE
, location
);
6377 addend
= mips_elf_obtain_contents (howto
, rel
, abfd
, contents
);
6378 _bfd_mips16_elf_reloc_shuffle (abfd
, r_type
, FALSE
, location
);
6380 return addend
& howto
->src_mask
;
6383 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
6384 and *ADDEND is the addend for REL itself. Look for the LO16 relocation
6385 and update *ADDEND with the final addend. Return true on success
6386 or false if the LO16 could not be found. RELEND is the exclusive
6387 upper bound on the relocations for REL's section. */
6390 mips_elf_add_lo16_rel_addend (bfd
*abfd
,
6391 const Elf_Internal_Rela
*rel
,
6392 const Elf_Internal_Rela
*relend
,
6393 bfd_byte
*contents
, bfd_vma
*addend
)
6395 unsigned int r_type
, lo16_type
;
6396 const Elf_Internal_Rela
*lo16_relocation
;
6397 reloc_howto_type
*lo16_howto
;
6400 r_type
= ELF_R_TYPE (abfd
, rel
->r_info
);
6401 if (r_type
== R_MIPS16_HI16
)
6402 lo16_type
= R_MIPS16_LO16
;
6404 lo16_type
= R_MIPS_LO16
;
6406 /* The combined value is the sum of the HI16 addend, left-shifted by
6407 sixteen bits, and the LO16 addend, sign extended. (Usually, the
6408 code does a `lui' of the HI16 value, and then an `addiu' of the
6411 Scan ahead to find a matching LO16 relocation.
6413 According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
6414 be immediately following. However, for the IRIX6 ABI, the next
6415 relocation may be a composed relocation consisting of several
6416 relocations for the same address. In that case, the R_MIPS_LO16
6417 relocation may occur as one of these. We permit a similar
6418 extension in general, as that is useful for GCC.
6420 In some cases GCC dead code elimination removes the LO16 but keeps
6421 the corresponding HI16. This is strictly speaking a violation of
6422 the ABI but not immediately harmful. */
6423 lo16_relocation
= mips_elf_next_relocation (abfd
, lo16_type
, rel
, relend
);
6424 if (lo16_relocation
== NULL
)
6427 /* Obtain the addend kept there. */
6428 lo16_howto
= MIPS_ELF_RTYPE_TO_HOWTO (abfd
, lo16_type
, FALSE
);
6429 l
= mips_elf_read_rel_addend (abfd
, lo16_relocation
, lo16_howto
, contents
);
6431 l
<<= lo16_howto
->rightshift
;
6432 l
= _bfd_mips_elf_sign_extend (l
, 16);
6439 /* Try to read the contents of section SEC in bfd ABFD. Return true and
6440 store the contents in *CONTENTS on success. Assume that *CONTENTS
6441 already holds the contents if it is nonull on entry. */
6444 mips_elf_get_section_contents (bfd
*abfd
, asection
*sec
, bfd_byte
**contents
)
6449 /* Get cached copy if it exists. */
6450 if (elf_section_data (sec
)->this_hdr
.contents
!= NULL
)
6452 *contents
= elf_section_data (sec
)->this_hdr
.contents
;
6456 return bfd_malloc_and_get_section (abfd
, sec
, contents
);
6459 /* Look through the relocs for a section during the first phase, and
6460 allocate space in the global offset table. */
6463 _bfd_mips_elf_check_relocs (bfd
*abfd
, struct bfd_link_info
*info
,
6464 asection
*sec
, const Elf_Internal_Rela
*relocs
)
6468 Elf_Internal_Shdr
*symtab_hdr
;
6469 struct elf_link_hash_entry
**sym_hashes
;
6470 struct mips_got_info
*g
;
6472 const Elf_Internal_Rela
*rel
;
6473 const Elf_Internal_Rela
*rel_end
;
6476 const struct elf_backend_data
*bed
;
6477 struct mips_elf_link_hash_table
*htab
;
6480 reloc_howto_type
*howto
;
6482 if (info
->relocatable
)
6485 htab
= mips_elf_hash_table (info
);
6486 dynobj
= elf_hash_table (info
)->dynobj
;
6487 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
6488 sym_hashes
= elf_sym_hashes (abfd
);
6489 extsymoff
= (elf_bad_symtab (abfd
)) ? 0 : symtab_hdr
->sh_info
;
6491 /* Check for the mips16 stub sections. */
6493 name
= bfd_get_section_name (abfd
, sec
);
6494 if (FN_STUB_P (name
))
6496 unsigned long r_symndx
;
6498 /* Look at the relocation information to figure out which symbol
6501 r_symndx
= ELF_R_SYM (abfd
, relocs
->r_info
);
6503 if (r_symndx
< extsymoff
6504 || sym_hashes
[r_symndx
- extsymoff
] == NULL
)
6508 /* This stub is for a local symbol. This stub will only be
6509 needed if there is some relocation in this BFD, other
6510 than a 16 bit function call, which refers to this symbol. */
6511 for (o
= abfd
->sections
; o
!= NULL
; o
= o
->next
)
6513 Elf_Internal_Rela
*sec_relocs
;
6514 const Elf_Internal_Rela
*r
, *rend
;
6516 /* We can ignore stub sections when looking for relocs. */
6517 if ((o
->flags
& SEC_RELOC
) == 0
6518 || o
->reloc_count
== 0
6519 || mips16_stub_section_p (abfd
, o
))
6523 = _bfd_elf_link_read_relocs (abfd
, o
, NULL
, NULL
,
6525 if (sec_relocs
== NULL
)
6528 rend
= sec_relocs
+ o
->reloc_count
;
6529 for (r
= sec_relocs
; r
< rend
; r
++)
6530 if (ELF_R_SYM (abfd
, r
->r_info
) == r_symndx
6531 && ELF_R_TYPE (abfd
, r
->r_info
) != R_MIPS16_26
)
6534 if (elf_section_data (o
)->relocs
!= sec_relocs
)
6543 /* There is no non-call reloc for this stub, so we do
6544 not need it. Since this function is called before
6545 the linker maps input sections to output sections, we
6546 can easily discard it by setting the SEC_EXCLUDE
6548 sec
->flags
|= SEC_EXCLUDE
;
6552 /* Record this stub in an array of local symbol stubs for
6554 if (elf_tdata (abfd
)->local_stubs
== NULL
)
6556 unsigned long symcount
;
6560 if (elf_bad_symtab (abfd
))
6561 symcount
= NUM_SHDR_ENTRIES (symtab_hdr
);
6563 symcount
= symtab_hdr
->sh_info
;
6564 amt
= symcount
* sizeof (asection
*);
6565 n
= bfd_zalloc (abfd
, amt
);
6568 elf_tdata (abfd
)->local_stubs
= n
;
6571 sec
->flags
|= SEC_KEEP
;
6572 elf_tdata (abfd
)->local_stubs
[r_symndx
] = sec
;
6574 /* We don't need to set mips16_stubs_seen in this case.
6575 That flag is used to see whether we need to look through
6576 the global symbol table for stubs. We don't need to set
6577 it here, because we just have a local stub. */
6581 struct mips_elf_link_hash_entry
*h
;
6583 h
= ((struct mips_elf_link_hash_entry
*)
6584 sym_hashes
[r_symndx
- extsymoff
]);
6586 while (h
->root
.root
.type
== bfd_link_hash_indirect
6587 || h
->root
.root
.type
== bfd_link_hash_warning
)
6588 h
= (struct mips_elf_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
6590 /* H is the symbol this stub is for. */
6592 /* If we already have an appropriate stub for this function, we
6593 don't need another one, so we can discard this one. Since
6594 this function is called before the linker maps input sections
6595 to output sections, we can easily discard it by setting the
6596 SEC_EXCLUDE flag. */
6597 if (h
->fn_stub
!= NULL
)
6599 sec
->flags
|= SEC_EXCLUDE
;
6603 sec
->flags
|= SEC_KEEP
;
6605 mips_elf_hash_table (info
)->mips16_stubs_seen
= TRUE
;
6608 else if (CALL_STUB_P (name
) || CALL_FP_STUB_P (name
))
6610 unsigned long r_symndx
;
6611 struct mips_elf_link_hash_entry
*h
;
6614 /* Look at the relocation information to figure out which symbol
6617 r_symndx
= ELF_R_SYM (abfd
, relocs
->r_info
);
6619 if (r_symndx
< extsymoff
6620 || sym_hashes
[r_symndx
- extsymoff
] == NULL
)
6624 /* This stub is for a local symbol. This stub will only be
6625 needed if there is some relocation (R_MIPS16_26) in this BFD
6626 that refers to this symbol. */
6627 for (o
= abfd
->sections
; o
!= NULL
; o
= o
->next
)
6629 Elf_Internal_Rela
*sec_relocs
;
6630 const Elf_Internal_Rela
*r
, *rend
;
6632 /* We can ignore stub sections when looking for relocs. */
6633 if ((o
->flags
& SEC_RELOC
) == 0
6634 || o
->reloc_count
== 0
6635 || mips16_stub_section_p (abfd
, o
))
6639 = _bfd_elf_link_read_relocs (abfd
, o
, NULL
, NULL
,
6641 if (sec_relocs
== NULL
)
6644 rend
= sec_relocs
+ o
->reloc_count
;
6645 for (r
= sec_relocs
; r
< rend
; r
++)
6646 if (ELF_R_SYM (abfd
, r
->r_info
) == r_symndx
6647 && ELF_R_TYPE (abfd
, r
->r_info
) == R_MIPS16_26
)
6650 if (elf_section_data (o
)->relocs
!= sec_relocs
)
6659 /* There is no non-call reloc for this stub, so we do
6660 not need it. Since this function is called before
6661 the linker maps input sections to output sections, we
6662 can easily discard it by setting the SEC_EXCLUDE
6664 sec
->flags
|= SEC_EXCLUDE
;
6668 /* Record this stub in an array of local symbol call_stubs for
6670 if (elf_tdata (abfd
)->local_call_stubs
== NULL
)
6672 unsigned long symcount
;
6676 if (elf_bad_symtab (abfd
))
6677 symcount
= NUM_SHDR_ENTRIES (symtab_hdr
);
6679 symcount
= symtab_hdr
->sh_info
;
6680 amt
= symcount
* sizeof (asection
*);
6681 n
= bfd_zalloc (abfd
, amt
);
6684 elf_tdata (abfd
)->local_call_stubs
= n
;
6687 sec
->flags
|= SEC_KEEP
;
6688 elf_tdata (abfd
)->local_call_stubs
[r_symndx
] = sec
;
6690 /* We don't need to set mips16_stubs_seen in this case.
6691 That flag is used to see whether we need to look through
6692 the global symbol table for stubs. We don't need to set
6693 it here, because we just have a local stub. */
6697 h
= ((struct mips_elf_link_hash_entry
*)
6698 sym_hashes
[r_symndx
- extsymoff
]);
6700 /* H is the symbol this stub is for. */
6702 if (CALL_FP_STUB_P (name
))
6703 loc
= &h
->call_fp_stub
;
6705 loc
= &h
->call_stub
;
6707 /* If we already have an appropriate stub for this function, we
6708 don't need another one, so we can discard this one. Since
6709 this function is called before the linker maps input sections
6710 to output sections, we can easily discard it by setting the
6711 SEC_EXCLUDE flag. */
6714 sec
->flags
|= SEC_EXCLUDE
;
6718 sec
->flags
|= SEC_KEEP
;
6720 mips_elf_hash_table (info
)->mips16_stubs_seen
= TRUE
;
6731 sgot
= mips_elf_got_section (dynobj
, FALSE
);
6736 BFD_ASSERT (mips_elf_section_data (sgot
) != NULL
);
6737 g
= mips_elf_section_data (sgot
)->u
.got_info
;
6738 BFD_ASSERT (g
!= NULL
);
6743 bed
= get_elf_backend_data (abfd
);
6744 rel_end
= relocs
+ sec
->reloc_count
* bed
->s
->int_rels_per_ext_rel
;
6746 for (rel
= relocs
; rel
< rel_end
; ++rel
)
6748 unsigned long r_symndx
;
6749 unsigned int r_type
;
6750 struct elf_link_hash_entry
*h
;
6752 r_symndx
= ELF_R_SYM (abfd
, rel
->r_info
);
6753 r_type
= ELF_R_TYPE (abfd
, rel
->r_info
);
6755 if (r_symndx
< extsymoff
)
6757 else if (r_symndx
>= extsymoff
+ NUM_SHDR_ENTRIES (symtab_hdr
))
6759 (*_bfd_error_handler
)
6760 (_("%B: Malformed reloc detected for section %s"),
6762 bfd_set_error (bfd_error_bad_value
);
6767 h
= sym_hashes
[r_symndx
- extsymoff
];
6769 /* This may be an indirect symbol created because of a version. */
6772 while (h
->root
.type
== bfd_link_hash_indirect
)
6773 h
= (struct elf_link_hash_entry
*) h
->root
.u
.i
.link
;
6777 /* Some relocs require a global offset table. */
6778 if (dynobj
== NULL
|| sgot
== NULL
)
6784 case R_MIPS_CALL_HI16
:
6785 case R_MIPS_CALL_LO16
:
6786 case R_MIPS_GOT_HI16
:
6787 case R_MIPS_GOT_LO16
:
6788 case R_MIPS_GOT_PAGE
:
6789 case R_MIPS_GOT_OFST
:
6790 case R_MIPS_GOT_DISP
:
6791 case R_MIPS_TLS_GOTTPREL
:
6793 case R_MIPS_TLS_LDM
:
6795 elf_hash_table (info
)->dynobj
= dynobj
= abfd
;
6796 if (! mips_elf_create_got_section (dynobj
, info
, FALSE
))
6798 g
= mips_elf_got_info (dynobj
, &sgot
);
6799 if (htab
->is_vxworks
&& !info
->shared
)
6801 (*_bfd_error_handler
)
6802 (_("%B: GOT reloc at 0x%lx not expected in executables"),
6803 abfd
, (unsigned long) rel
->r_offset
);
6804 bfd_set_error (bfd_error_bad_value
);
6812 /* In VxWorks executables, references to external symbols
6813 are handled using copy relocs or PLT stubs, so there's
6814 no need to add a dynamic relocation here. */
6816 && (info
->shared
|| (h
!= NULL
&& !htab
->is_vxworks
))
6817 && (sec
->flags
& SEC_ALLOC
) != 0)
6818 elf_hash_table (info
)->dynobj
= dynobj
= abfd
;
6828 ((struct mips_elf_link_hash_entry
*) h
)->is_relocation_target
= TRUE
;
6830 /* Relocations against the special VxWorks __GOTT_BASE__ and
6831 __GOTT_INDEX__ symbols must be left to the loader. Allocate
6832 room for them in .rela.dyn. */
6833 if (is_gott_symbol (info
, h
))
6837 sreloc
= mips_elf_rel_dyn_section (info
, TRUE
);
6841 mips_elf_allocate_dynamic_relocations (dynobj
, info
, 1);
6842 if (MIPS_ELF_READONLY_SECTION (sec
))
6843 /* We tell the dynamic linker that there are
6844 relocations against the text segment. */
6845 info
->flags
|= DF_TEXTREL
;
6848 else if (r_type
== R_MIPS_CALL_LO16
6849 || r_type
== R_MIPS_GOT_LO16
6850 || r_type
== R_MIPS_GOT_DISP
6851 || (r_type
== R_MIPS_GOT16
&& htab
->is_vxworks
))
6853 /* We may need a local GOT entry for this relocation. We
6854 don't count R_MIPS_GOT_PAGE because we can estimate the
6855 maximum number of pages needed by looking at the size of
6856 the segment. Similar comments apply to R_MIPS_GOT16 and
6857 R_MIPS_CALL16, except on VxWorks, where GOT relocations
6858 always evaluate to "G". We don't count R_MIPS_GOT_HI16, or
6859 R_MIPS_CALL_HI16 because these are always followed by an
6860 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */
6861 if (! mips_elf_record_local_got_symbol (abfd
, r_symndx
,
6862 rel
->r_addend
, g
, 0))
6871 (*_bfd_error_handler
)
6872 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
6873 abfd
, (unsigned long) rel
->r_offset
);
6874 bfd_set_error (bfd_error_bad_value
);
6879 case R_MIPS_CALL_HI16
:
6880 case R_MIPS_CALL_LO16
:
6883 /* VxWorks call relocations point the function's .got.plt
6884 entry, which will be allocated by adjust_dynamic_symbol.
6885 Otherwise, this symbol requires a global GOT entry. */
6886 if ((!htab
->is_vxworks
|| h
->forced_local
)
6887 && !mips_elf_record_global_got_symbol (h
, abfd
, info
, g
, 0))
6890 /* We need a stub, not a plt entry for the undefined
6891 function. But we record it as if it needs plt. See
6892 _bfd_elf_adjust_dynamic_symbol. */
6898 case R_MIPS_GOT_PAGE
:
6899 /* If this is a global, overridable symbol, GOT_PAGE will
6900 decay to GOT_DISP, so we'll need a GOT entry for it. */
6903 struct mips_elf_link_hash_entry
*hmips
=
6904 (struct mips_elf_link_hash_entry
*) h
;
6906 while (hmips
->root
.root
.type
== bfd_link_hash_indirect
6907 || hmips
->root
.root
.type
== bfd_link_hash_warning
)
6908 hmips
= (struct mips_elf_link_hash_entry
*)
6909 hmips
->root
.root
.u
.i
.link
;
6911 /* This symbol is definitely not overridable. */
6912 if (hmips
->root
.def_regular
6913 && ! (info
->shared
&& ! info
->symbolic
6914 && ! hmips
->root
.forced_local
))
6920 case R_MIPS_GOT_HI16
:
6921 case R_MIPS_GOT_LO16
:
6922 if (!h
|| r_type
== R_MIPS_GOT_PAGE
)
6924 /* This relocation needs (or may need, if h != NULL) a
6925 page entry in the GOT. For R_MIPS_GOT_PAGE we do not
6926 know for sure until we know whether the symbol is
6928 if (mips_elf_rel_relocation_p (abfd
, sec
, relocs
, rel
))
6930 if (!mips_elf_get_section_contents (abfd
, sec
, &contents
))
6932 howto
= MIPS_ELF_RTYPE_TO_HOWTO (abfd
, r_type
, FALSE
);
6933 addend
= mips_elf_read_rel_addend (abfd
, rel
,
6935 if (r_type
== R_MIPS_GOT16
)
6936 mips_elf_add_lo16_rel_addend (abfd
, rel
, rel_end
,
6939 addend
<<= howto
->rightshift
;
6942 addend
= rel
->r_addend
;
6943 if (!mips_elf_record_got_page_entry (abfd
, r_symndx
, addend
, g
))
6949 case R_MIPS_GOT_DISP
:
6950 if (h
&& ! mips_elf_record_global_got_symbol (h
, abfd
, info
, g
, 0))
6954 case R_MIPS_TLS_GOTTPREL
:
6956 info
->flags
|= DF_STATIC_TLS
;
6959 case R_MIPS_TLS_LDM
:
6960 if (r_type
== R_MIPS_TLS_LDM
)
6968 /* This symbol requires a global offset table entry, or two
6969 for TLS GD relocations. */
6971 unsigned char flag
= (r_type
== R_MIPS_TLS_GD
6973 : r_type
== R_MIPS_TLS_LDM
6978 struct mips_elf_link_hash_entry
*hmips
=
6979 (struct mips_elf_link_hash_entry
*) h
;
6980 hmips
->tls_type
|= flag
;
6982 if (h
&& ! mips_elf_record_global_got_symbol (h
, abfd
, info
, g
, flag
))
6987 BFD_ASSERT (flag
== GOT_TLS_LDM
|| r_symndx
!= 0);
6989 if (! mips_elf_record_local_got_symbol (abfd
, r_symndx
,
6990 rel
->r_addend
, g
, flag
))
6999 /* In VxWorks executables, references to external symbols
7000 are handled using copy relocs or PLT stubs, so there's
7001 no need to add a .rela.dyn entry for this relocation. */
7002 if ((info
->shared
|| (h
!= NULL
&& !htab
->is_vxworks
))
7003 && (sec
->flags
& SEC_ALLOC
) != 0)
7007 sreloc
= mips_elf_rel_dyn_section (info
, TRUE
);
7013 /* When creating a shared object, we must copy these
7014 reloc types into the output file as R_MIPS_REL32
7015 relocs. Make room for this reloc in .rel(a).dyn. */
7016 mips_elf_allocate_dynamic_relocations (dynobj
, info
, 1);
7017 if (MIPS_ELF_READONLY_SECTION (sec
))
7018 /* We tell the dynamic linker that there are
7019 relocations against the text segment. */
7020 info
->flags
|= DF_TEXTREL
;
7024 struct mips_elf_link_hash_entry
*hmips
;
7026 /* We only need to copy this reloc if the symbol is
7027 defined in a dynamic object. */
7028 hmips
= (struct mips_elf_link_hash_entry
*) h
;
7029 ++hmips
->possibly_dynamic_relocs
;
7030 if (MIPS_ELF_READONLY_SECTION (sec
))
7031 /* We need it to tell the dynamic linker if there
7032 are relocations against the text segment. */
7033 hmips
->readonly_reloc
= TRUE
;
7036 /* Even though we don't directly need a GOT entry for
7037 this symbol, a symbol must have a dynamic symbol
7038 table index greater that DT_MIPS_GOTSYM if there are
7039 dynamic relocations against it. This does not apply
7040 to VxWorks, which does not have the usual coupling
7041 between global GOT entries and .dynsym entries. */
7042 if (h
!= NULL
&& !htab
->is_vxworks
)
7045 elf_hash_table (info
)->dynobj
= dynobj
= abfd
;
7046 if (! mips_elf_create_got_section (dynobj
, info
, TRUE
))
7048 g
= mips_elf_got_info (dynobj
, &sgot
);
7049 if (! mips_elf_record_global_got_symbol (h
, abfd
, info
, g
, 0))
7054 if (SGI_COMPAT (abfd
))
7055 mips_elf_hash_table (info
)->compact_rel_size
+=
7056 sizeof (Elf32_External_crinfo
);
7061 ((struct mips_elf_link_hash_entry
*) h
)->is_branch_target
= TRUE
;
7066 ((struct mips_elf_link_hash_entry
*) h
)->is_branch_target
= TRUE
;
7069 case R_MIPS_GPREL16
:
7070 case R_MIPS_LITERAL
:
7071 case R_MIPS_GPREL32
:
7072 if (SGI_COMPAT (abfd
))
7073 mips_elf_hash_table (info
)->compact_rel_size
+=
7074 sizeof (Elf32_External_crinfo
);
7077 /* This relocation describes the C++ object vtable hierarchy.
7078 Reconstruct it for later use during GC. */
7079 case R_MIPS_GNU_VTINHERIT
:
7080 if (!bfd_elf_gc_record_vtinherit (abfd
, sec
, h
, rel
->r_offset
))
7084 /* This relocation describes which C++ vtable entries are actually
7085 used. Record for later use during GC. */
7086 case R_MIPS_GNU_VTENTRY
:
7087 BFD_ASSERT (h
!= NULL
);
7089 && !bfd_elf_gc_record_vtentry (abfd
, sec
, h
, rel
->r_offset
))
7097 /* We must not create a stub for a symbol that has relocations
7098 related to taking the function's address. This doesn't apply to
7099 VxWorks, where CALL relocs refer to a .got.plt entry instead of
7100 a normal .got entry. */
7101 if (!htab
->is_vxworks
&& h
!= NULL
)
7105 ((struct mips_elf_link_hash_entry
*) h
)->no_fn_stub
= TRUE
;
7108 case R_MIPS_CALL_HI16
:
7109 case R_MIPS_CALL_LO16
:
7114 /* If this reloc is not a 16 bit call, and it has a global
7115 symbol, then we will need the fn_stub if there is one.
7116 References from a stub section do not count. */
7118 && r_type
!= R_MIPS16_26
7119 && !mips16_stub_section_p (abfd
, sec
))
7121 struct mips_elf_link_hash_entry
*mh
;
7123 mh
= (struct mips_elf_link_hash_entry
*) h
;
7124 mh
->need_fn_stub
= TRUE
;
7132 _bfd_mips_relax_section (bfd
*abfd
, asection
*sec
,
7133 struct bfd_link_info
*link_info
,
7136 Elf_Internal_Rela
*internal_relocs
;
7137 Elf_Internal_Rela
*irel
, *irelend
;
7138 Elf_Internal_Shdr
*symtab_hdr
;
7139 bfd_byte
*contents
= NULL
;
7141 bfd_boolean changed_contents
= FALSE
;
7142 bfd_vma sec_start
= sec
->output_section
->vma
+ sec
->output_offset
;
7143 Elf_Internal_Sym
*isymbuf
= NULL
;
7145 /* We are not currently changing any sizes, so only one pass. */
7148 if (link_info
->relocatable
)
7151 internal_relocs
= _bfd_elf_link_read_relocs (abfd
, sec
, NULL
, NULL
,
7152 link_info
->keep_memory
);
7153 if (internal_relocs
== NULL
)
7156 irelend
= internal_relocs
+ sec
->reloc_count
7157 * get_elf_backend_data (abfd
)->s
->int_rels_per_ext_rel
;
7158 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
7159 extsymoff
= (elf_bad_symtab (abfd
)) ? 0 : symtab_hdr
->sh_info
;
7161 for (irel
= internal_relocs
; irel
< irelend
; irel
++)
7164 bfd_signed_vma sym_offset
;
7165 unsigned int r_type
;
7166 unsigned long r_symndx
;
7168 unsigned long instruction
;
7170 /* Turn jalr into bgezal, and jr into beq, if they're marked
7171 with a JALR relocation, that indicate where they jump to.
7172 This saves some pipeline bubbles. */
7173 r_type
= ELF_R_TYPE (abfd
, irel
->r_info
);
7174 if (r_type
!= R_MIPS_JALR
)
7177 r_symndx
= ELF_R_SYM (abfd
, irel
->r_info
);
7178 /* Compute the address of the jump target. */
7179 if (r_symndx
>= extsymoff
)
7181 struct mips_elf_link_hash_entry
*h
7182 = ((struct mips_elf_link_hash_entry
*)
7183 elf_sym_hashes (abfd
) [r_symndx
- extsymoff
]);
7185 while (h
->root
.root
.type
== bfd_link_hash_indirect
7186 || h
->root
.root
.type
== bfd_link_hash_warning
)
7187 h
= (struct mips_elf_link_hash_entry
*) h
->root
.root
.u
.i
.link
;
7189 /* If a symbol is undefined, or if it may be overridden,
7191 if (! ((h
->root
.root
.type
== bfd_link_hash_defined
7192 || h
->root
.root
.type
== bfd_link_hash_defweak
)
7193 && h
->root
.root
.u
.def
.section
)
7194 || (link_info
->shared
&& ! link_info
->symbolic
7195 && !h
->root
.forced_local
))
7198 sym_sec
= h
->root
.root
.u
.def
.section
;
7199 if (sym_sec
->output_section
)
7200 symval
= (h
->root
.root
.u
.def
.value
7201 + sym_sec
->output_section
->vma
7202 + sym_sec
->output_offset
);
7204 symval
= h
->root
.root
.u
.def
.value
;
7208 Elf_Internal_Sym
*isym
;
7210 /* Read this BFD's symbols if we haven't done so already. */
7211 if (isymbuf
== NULL
&& symtab_hdr
->sh_info
!= 0)
7213 isymbuf
= (Elf_Internal_Sym
*) symtab_hdr
->contents
;
7214 if (isymbuf
== NULL
)
7215 isymbuf
= bfd_elf_get_elf_syms (abfd
, symtab_hdr
,
7216 symtab_hdr
->sh_info
, 0,
7218 if (isymbuf
== NULL
)
7222 isym
= isymbuf
+ r_symndx
;
7223 if (isym
->st_shndx
== SHN_UNDEF
)
7225 else if (isym
->st_shndx
== SHN_ABS
)
7226 sym_sec
= bfd_abs_section_ptr
;
7227 else if (isym
->st_shndx
== SHN_COMMON
)
7228 sym_sec
= bfd_com_section_ptr
;
7231 = bfd_section_from_elf_index (abfd
, isym
->st_shndx
);
7232 symval
= isym
->st_value
7233 + sym_sec
->output_section
->vma
7234 + sym_sec
->output_offset
;
7237 /* Compute branch offset, from delay slot of the jump to the
7239 sym_offset
= (symval
+ irel
->r_addend
)
7240 - (sec_start
+ irel
->r_offset
+ 4);
7242 /* Branch offset must be properly aligned. */
7243 if ((sym_offset
& 3) != 0)
7248 /* Check that it's in range. */
7249 if (sym_offset
< -0x8000 || sym_offset
>= 0x8000)
7252 /* Get the section contents if we haven't done so already. */
7253 if (!mips_elf_get_section_contents (abfd
, sec
, &contents
))
7256 instruction
= bfd_get_32 (abfd
, contents
+ irel
->r_offset
);
7258 /* If it was jalr <reg>, turn it into bgezal $zero, <target>. */
7259 if ((instruction
& 0xfc1fffff) == 0x0000f809)
7260 instruction
= 0x04110000;
7261 /* If it was jr <reg>, turn it into b <target>. */
7262 else if ((instruction
& 0xfc1fffff) == 0x00000008)
7263 instruction
= 0x10000000;
7267 instruction
|= (sym_offset
& 0xffff);
7268 bfd_put_32 (abfd
, instruction
, contents
+ irel
->r_offset
);
7269 changed_contents
= TRUE
;
7272 if (contents
!= NULL
7273 && elf_section_data (sec
)->this_hdr
.contents
!= contents
)
7275 if (!changed_contents
&& !link_info
->keep_memory
)
7279 /* Cache the section contents for elf_link_input_bfd. */
7280 elf_section_data (sec
)->this_hdr
.contents
= contents
;
7286 if (contents
!= NULL
7287 && elf_section_data (sec
)->this_hdr
.contents
!= contents
)
7292 /* Adjust a symbol defined by a dynamic object and referenced by a
7293 regular object. The current definition is in some section of the
7294 dynamic object, but we're not including those sections. We have to
7295 change the definition to something the rest of the link can
7299 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info
*info
,
7300 struct elf_link_hash_entry
*h
)
7303 struct mips_elf_link_hash_entry
*hmips
;
7305 struct mips_elf_link_hash_table
*htab
;
7307 htab
= mips_elf_hash_table (info
);
7308 dynobj
= elf_hash_table (info
)->dynobj
;
7310 /* Make sure we know what is going on here. */
7311 BFD_ASSERT (dynobj
!= NULL
7313 || h
->u
.weakdef
!= NULL
7316 && !h
->def_regular
)));
7318 /* If this symbol is defined in a dynamic object, we need to copy
7319 any R_MIPS_32 or R_MIPS_REL32 relocs against it into the output
7321 hmips
= (struct mips_elf_link_hash_entry
*) h
;
7322 if (! info
->relocatable
7323 && hmips
->possibly_dynamic_relocs
!= 0
7324 && (h
->root
.type
== bfd_link_hash_defweak
7325 || !h
->def_regular
))
7327 mips_elf_allocate_dynamic_relocations
7328 (dynobj
, info
, hmips
->possibly_dynamic_relocs
);
7329 if (hmips
->readonly_reloc
)
7330 /* We tell the dynamic linker that there are relocations
7331 against the text segment. */
7332 info
->flags
|= DF_TEXTREL
;
7335 /* For a function, create a stub, if allowed. */
7336 if (! hmips
->no_fn_stub
7339 if (! elf_hash_table (info
)->dynamic_sections_created
)
7342 /* If this symbol is not defined in a regular file, then set
7343 the symbol to the stub location. This is required to make
7344 function pointers compare as equal between the normal
7345 executable and the shared library. */
7346 if (!h
->def_regular
)
7348 /* We need .stub section. */
7349 s
= bfd_get_section_by_name (dynobj
,
7350 MIPS_ELF_STUB_SECTION_NAME (dynobj
));
7351 BFD_ASSERT (s
!= NULL
);
7353 h
->root
.u
.def
.section
= s
;
7354 h
->root
.u
.def
.value
= s
->size
;
7356 /* XXX Write this stub address somewhere. */
7357 h
->plt
.offset
= s
->size
;
7359 /* Make room for this stub code. */
7360 s
->size
+= htab
->function_stub_size
;
7362 /* The last half word of the stub will be filled with the index
7363 of this symbol in .dynsym section. */
7367 else if ((h
->type
== STT_FUNC
)
7370 /* This will set the entry for this symbol in the GOT to 0, and
7371 the dynamic linker will take care of this. */
7372 h
->root
.u
.def
.value
= 0;
7376 /* If this is a weak symbol, and there is a real definition, the
7377 processor independent code will have arranged for us to see the
7378 real definition first, and we can just use the same value. */
7379 if (h
->u
.weakdef
!= NULL
)
7381 BFD_ASSERT (h
->u
.weakdef
->root
.type
== bfd_link_hash_defined
7382 || h
->u
.weakdef
->root
.type
== bfd_link_hash_defweak
);
7383 h
->root
.u
.def
.section
= h
->u
.weakdef
->root
.u
.def
.section
;
7384 h
->root
.u
.def
.value
= h
->u
.weakdef
->root
.u
.def
.value
;
7388 /* This is a reference to a symbol defined by a dynamic object which
7389 is not a function. */
7394 /* Likewise, for VxWorks. */
7397 _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info
*info
,
7398 struct elf_link_hash_entry
*h
)
7401 struct mips_elf_link_hash_entry
*hmips
;
7402 struct mips_elf_link_hash_table
*htab
;
7404 htab
= mips_elf_hash_table (info
);
7405 dynobj
= elf_hash_table (info
)->dynobj
;
7406 hmips
= (struct mips_elf_link_hash_entry
*) h
;
7408 /* Make sure we know what is going on here. */
7409 BFD_ASSERT (dynobj
!= NULL
7412 || h
->u
.weakdef
!= NULL
7415 && !h
->def_regular
)));
7417 /* If the symbol is defined by a dynamic object, we need a PLT stub if
7418 either (a) we want to branch to the symbol or (b) we're linking an
7419 executable that needs a canonical function address. In the latter
7420 case, the canonical address will be the address of the executable's
7422 if ((hmips
->is_branch_target
7424 && h
->type
== STT_FUNC
7425 && hmips
->is_relocation_target
))
7429 && !h
->forced_local
)
7432 /* Locally-binding symbols do not need a PLT stub; we can refer to
7433 the functions directly. */
7434 else if (h
->needs_plt
7435 && (SYMBOL_CALLS_LOCAL (info
, h
)
7436 || (ELF_ST_VISIBILITY (h
->other
) != STV_DEFAULT
7437 && h
->root
.type
== bfd_link_hash_undefweak
)))
7445 /* If this is the first symbol to need a PLT entry, allocate room
7446 for the header, and for the header's .rela.plt.unloaded entries. */
7447 if (htab
->splt
->size
== 0)
7449 htab
->splt
->size
+= htab
->plt_header_size
;
7451 htab
->srelplt2
->size
+= 2 * sizeof (Elf32_External_Rela
);
7454 /* Assign the next .plt entry to this symbol. */
7455 h
->plt
.offset
= htab
->splt
->size
;
7456 htab
->splt
->size
+= htab
->plt_entry_size
;
7458 /* If the output file has no definition of the symbol, set the
7459 symbol's value to the address of the stub. Point at the PLT
7460 load stub rather than the lazy resolution stub; this stub
7461 will become the canonical function address. */
7462 if (!info
->shared
&& !h
->def_regular
)
7464 h
->root
.u
.def
.section
= htab
->splt
;
7465 h
->root
.u
.def
.value
= h
->plt
.offset
;
7466 h
->root
.u
.def
.value
+= 8;
7469 /* Make room for the .got.plt entry and the R_JUMP_SLOT relocation. */
7470 htab
->sgotplt
->size
+= 4;
7471 htab
->srelplt
->size
+= sizeof (Elf32_External_Rela
);
7473 /* Make room for the .rela.plt.unloaded relocations. */
7475 htab
->srelplt2
->size
+= 3 * sizeof (Elf32_External_Rela
);
7480 /* If a function symbol is defined by a dynamic object, and we do not
7481 need a PLT stub for it, the symbol's value should be zero. */
7482 if (h
->type
== STT_FUNC
7487 h
->root
.u
.def
.value
= 0;
7491 /* If this is a weak symbol, and there is a real definition, the
7492 processor independent code will have arranged for us to see the
7493 real definition first, and we can just use the same value. */
7494 if (h
->u
.weakdef
!= NULL
)
7496 BFD_ASSERT (h
->u
.weakdef
->root
.type
== bfd_link_hash_defined
7497 || h
->u
.weakdef
->root
.type
== bfd_link_hash_defweak
);
7498 h
->root
.u
.def
.section
= h
->u
.weakdef
->root
.u
.def
.section
;
7499 h
->root
.u
.def
.value
= h
->u
.weakdef
->root
.u
.def
.value
;
7503 /* This is a reference to a symbol defined by a dynamic object which
7504 is not a function. */
7508 /* We must allocate the symbol in our .dynbss section, which will
7509 become part of the .bss section of the executable. There will be
7510 an entry for this symbol in the .dynsym section. The dynamic
7511 object will contain position independent code, so all references
7512 from the dynamic object to this symbol will go through the global
7513 offset table. The dynamic linker will use the .dynsym entry to
7514 determine the address it must put in the global offset table, so
7515 both the dynamic object and the regular object will refer to the
7516 same memory location for the variable. */
7518 if ((h
->root
.u
.def
.section
->flags
& SEC_ALLOC
) != 0)
7520 htab
->srelbss
->size
+= sizeof (Elf32_External_Rela
);
7524 return _bfd_elf_adjust_dynamic_copy (h
, htab
->sdynbss
);
7527 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
7528 The number might be exact or a worst-case estimate, depending on how
7529 much information is available to elf_backend_omit_section_dynsym at
7530 the current linking stage. */
7532 static bfd_size_type
7533 count_section_dynsyms (bfd
*output_bfd
, struct bfd_link_info
*info
)
7535 bfd_size_type count
;
7538 if (info
->shared
|| elf_hash_table (info
)->is_relocatable_executable
)
7541 const struct elf_backend_data
*bed
;
7543 bed
= get_elf_backend_data (output_bfd
);
7544 for (p
= output_bfd
->sections
; p
; p
= p
->next
)
7545 if ((p
->flags
& SEC_EXCLUDE
) == 0
7546 && (p
->flags
& SEC_ALLOC
) != 0
7547 && !(*bed
->elf_backend_omit_section_dynsym
) (output_bfd
, info
, p
))
7553 /* This function is called after all the input files have been read,
7554 and the input sections have been assigned to output sections. We
7555 check for any mips16 stub sections that we can discard. */
7558 _bfd_mips_elf_always_size_sections (bfd
*output_bfd
,
7559 struct bfd_link_info
*info
)
7565 struct mips_got_info
*g
;
7567 bfd_size_type loadable_size
= 0;
7568 bfd_size_type page_gotno
;
7569 bfd_size_type dynsymcount
;
7571 struct mips_elf_count_tls_arg count_tls_arg
;
7572 struct mips_elf_link_hash_table
*htab
;
7574 htab
= mips_elf_hash_table (info
);
7576 /* The .reginfo section has a fixed size. */
7577 ri
= bfd_get_section_by_name (output_bfd
, ".reginfo");
7579 bfd_set_section_size (output_bfd
, ri
, sizeof (Elf32_External_RegInfo
));
7581 if (! (info
->relocatable
7582 || ! mips_elf_hash_table (info
)->mips16_stubs_seen
))
7583 mips_elf_link_hash_traverse (mips_elf_hash_table (info
),
7584 mips_elf_check_mips16_stubs
, NULL
);
7586 dynobj
= elf_hash_table (info
)->dynobj
;
7588 /* Relocatable links don't have it. */
7591 g
= mips_elf_got_info (dynobj
, &s
);
7595 /* Calculate the total loadable size of the output. That
7596 will give us the maximum number of GOT_PAGE entries
7598 for (sub
= info
->input_bfds
; sub
; sub
= sub
->link_next
)
7600 asection
*subsection
;
7602 for (subsection
= sub
->sections
;
7604 subsection
= subsection
->next
)
7606 if ((subsection
->flags
& SEC_ALLOC
) == 0)
7608 loadable_size
+= ((subsection
->size
+ 0xf)
7609 &~ (bfd_size_type
) 0xf);
7613 /* There has to be a global GOT entry for every symbol with
7614 a dynamic symbol table index of DT_MIPS_GOTSYM or
7615 higher. Therefore, it make sense to put those symbols
7616 that need GOT entries at the end of the symbol table. We
7618 if (! mips_elf_sort_hash_table (info
, 1))
7621 if (g
->global_gotsym
!= NULL
)
7622 i
= elf_hash_table (info
)->dynsymcount
- g
->global_gotsym
->dynindx
;
7624 /* If there are no global symbols, or none requiring
7625 relocations, then GLOBAL_GOTSYM will be NULL. */
7628 /* Get a worst-case estimate of the number of dynamic symbols needed.
7629 At this point, dynsymcount does not account for section symbols
7630 and count_section_dynsyms may overestimate the number that will
7632 dynsymcount
= (elf_hash_table (info
)->dynsymcount
7633 + count_section_dynsyms (output_bfd
, info
));
7635 /* Determine the size of one stub entry. */
7636 htab
->function_stub_size
= (dynsymcount
> 0x10000
7637 ? MIPS_FUNCTION_STUB_BIG_SIZE
7638 : MIPS_FUNCTION_STUB_NORMAL_SIZE
);
7640 /* In the worst case, we'll get one stub per dynamic symbol, plus
7641 one to account for the dummy entry at the end required by IRIX
7643 loadable_size
+= htab
->function_stub_size
* (i
+ 1);
7645 if (htab
->is_vxworks
)
7646 /* There's no need to allocate page entries for VxWorks; R_MIPS_GOT16
7647 relocations against local symbols evaluate to "G", and the EABI does
7648 not include R_MIPS_GOT_PAGE. */
7651 /* Assume there are two loadable segments consisting of contiguous
7652 sections. Is 5 enough? */
7653 page_gotno
= (loadable_size
>> 16) + 5;
7655 /* Choose the smaller of the two estimates; both are intended to be
7657 if (page_gotno
> g
->page_gotno
)
7658 page_gotno
= g
->page_gotno
;
7660 g
->local_gotno
+= page_gotno
;
7661 s
->size
+= g
->local_gotno
* MIPS_ELF_GOT_SIZE (output_bfd
);
7663 g
->global_gotno
= i
;
7664 s
->size
+= i
* MIPS_ELF_GOT_SIZE (output_bfd
);
7666 /* We need to calculate tls_gotno for global symbols at this point
7667 instead of building it up earlier, to avoid doublecounting
7668 entries for one global symbol from multiple input files. */
7669 count_tls_arg
.info
= info
;
7670 count_tls_arg
.needed
= 0;
7671 elf_link_hash_traverse (elf_hash_table (info
),
7672 mips_elf_count_global_tls_entries
,
7674 g
->tls_gotno
+= count_tls_arg
.needed
;
7675 s
->size
+= g
->tls_gotno
* MIPS_ELF_GOT_SIZE (output_bfd
);
7677 mips_elf_resolve_final_got_entries (g
);
7679 /* VxWorks does not support multiple GOTs. It initializes $gp to
7680 __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
7682 if (!htab
->is_vxworks
&& s
->size
> MIPS_ELF_GOT_MAX_SIZE (info
))
7684 if (! mips_elf_multi_got (output_bfd
, info
, g
, s
, page_gotno
))
7689 /* Set up TLS entries for the first GOT. */
7690 g
->tls_assigned_gotno
= g
->global_gotno
+ g
->local_gotno
;
7691 htab_traverse (g
->got_entries
, mips_elf_initialize_tls_index
, g
);
7693 htab
->computed_got_sizes
= TRUE
;
7698 /* Set the sizes of the dynamic sections. */
7701 _bfd_mips_elf_size_dynamic_sections (bfd
*output_bfd
,
7702 struct bfd_link_info
*info
)
7705 asection
*s
, *sreldyn
;
7706 bfd_boolean reltext
;
7707 struct mips_elf_link_hash_table
*htab
;
7709 htab
= mips_elf_hash_table (info
);
7710 dynobj
= elf_hash_table (info
)->dynobj
;
7711 BFD_ASSERT (dynobj
!= NULL
);
7713 if (elf_hash_table (info
)->dynamic_sections_created
)
7715 /* Set the contents of the .interp section to the interpreter. */
7716 if (info
->executable
)
7718 s
= bfd_get_section_by_name (dynobj
, ".interp");
7719 BFD_ASSERT (s
!= NULL
);
7721 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd
)) + 1;
7723 = (bfd_byte
*) ELF_DYNAMIC_INTERPRETER (output_bfd
);
7727 /* The check_relocs and adjust_dynamic_symbol entry points have
7728 determined the sizes of the various dynamic sections. Allocate
7732 for (s
= dynobj
->sections
; s
!= NULL
; s
= s
->next
)
7736 /* It's OK to base decisions on the section name, because none
7737 of the dynobj section names depend upon the input files. */
7738 name
= bfd_get_section_name (dynobj
, s
);
7740 if ((s
->flags
& SEC_LINKER_CREATED
) == 0)
7743 if (CONST_STRNEQ (name
, ".rel"))
7747 const char *outname
;
7750 /* If this relocation section applies to a read only
7751 section, then we probably need a DT_TEXTREL entry.
7752 If the relocation section is .rel(a).dyn, we always
7753 assert a DT_TEXTREL entry rather than testing whether
7754 there exists a relocation to a read only section or
7756 outname
= bfd_get_section_name (output_bfd
,
7758 target
= bfd_get_section_by_name (output_bfd
, outname
+ 4);
7760 && (target
->flags
& SEC_READONLY
) != 0
7761 && (target
->flags
& SEC_ALLOC
) != 0)
7762 || strcmp (outname
, MIPS_ELF_REL_DYN_NAME (info
)) == 0)
7765 /* We use the reloc_count field as a counter if we need
7766 to copy relocs into the output file. */
7767 if (strcmp (name
, MIPS_ELF_REL_DYN_NAME (info
)) != 0)
7770 /* If combreloc is enabled, elf_link_sort_relocs() will
7771 sort relocations, but in a different way than we do,
7772 and before we're done creating relocations. Also, it
7773 will move them around between input sections'
7774 relocation's contents, so our sorting would be
7775 broken, so don't let it run. */
7776 info
->combreloc
= 0;
7779 else if (htab
->is_vxworks
&& strcmp (name
, ".got") == 0)
7781 /* Executables do not need a GOT. */
7784 /* Allocate relocations for all but the reserved entries. */
7785 struct mips_got_info
*g
;
7788 g
= mips_elf_got_info (dynobj
, NULL
);
7789 count
= (g
->global_gotno
7791 - MIPS_RESERVED_GOTNO (info
));
7792 mips_elf_allocate_dynamic_relocations (dynobj
, info
, count
);
7795 else if (!htab
->is_vxworks
&& CONST_STRNEQ (name
, ".got"))
7797 /* _bfd_mips_elf_always_size_sections() has already done
7798 most of the work, but some symbols may have been mapped
7799 to versions that we must now resolve in the got_entries
7801 struct mips_got_info
*gg
= mips_elf_got_info (dynobj
, NULL
);
7802 struct mips_got_info
*g
= gg
;
7803 struct mips_elf_set_global_got_offset_arg set_got_offset_arg
;
7804 unsigned int needed_relocs
= 0;
7808 set_got_offset_arg
.value
= MIPS_ELF_GOT_SIZE (output_bfd
);
7809 set_got_offset_arg
.info
= info
;
7811 /* NOTE 2005-02-03: How can this call, or the next, ever
7812 find any indirect entries to resolve? They were all
7813 resolved in mips_elf_multi_got. */
7814 mips_elf_resolve_final_got_entries (gg
);
7815 for (g
= gg
->next
; g
&& g
->next
!= gg
; g
= g
->next
)
7817 unsigned int save_assign
;
7819 mips_elf_resolve_final_got_entries (g
);
7821 /* Assign offsets to global GOT entries. */
7822 save_assign
= g
->assigned_gotno
;
7823 g
->assigned_gotno
= g
->local_gotno
;
7824 set_got_offset_arg
.g
= g
;
7825 set_got_offset_arg
.needed_relocs
= 0;
7826 htab_traverse (g
->got_entries
,
7827 mips_elf_set_global_got_offset
,
7828 &set_got_offset_arg
);
7829 needed_relocs
+= set_got_offset_arg
.needed_relocs
;
7830 BFD_ASSERT (g
->assigned_gotno
- g
->local_gotno
7831 <= g
->global_gotno
);
7833 g
->assigned_gotno
= save_assign
;
7836 needed_relocs
+= g
->local_gotno
- g
->assigned_gotno
;
7837 BFD_ASSERT (g
->assigned_gotno
== g
->next
->local_gotno
7838 + g
->next
->global_gotno
7839 + g
->next
->tls_gotno
7840 + MIPS_RESERVED_GOTNO (info
));
7846 struct mips_elf_count_tls_arg arg
;
7850 htab_traverse (gg
->got_entries
, mips_elf_count_local_tls_relocs
,
7852 elf_link_hash_traverse (elf_hash_table (info
),
7853 mips_elf_count_global_tls_relocs
,
7856 needed_relocs
+= arg
.needed
;
7860 mips_elf_allocate_dynamic_relocations (dynobj
, info
,
7863 else if (strcmp (name
, MIPS_ELF_STUB_SECTION_NAME (output_bfd
)) == 0)
7865 /* IRIX rld assumes that the function stub isn't at the end
7866 of .text section. So put a dummy. XXX */
7867 s
->size
+= htab
->function_stub_size
;
7869 else if (! info
->shared
7870 && ! mips_elf_hash_table (info
)->use_rld_obj_head
7871 && CONST_STRNEQ (name
, ".rld_map"))
7873 /* We add a room for __rld_map. It will be filled in by the
7874 rtld to contain a pointer to the _r_debug structure. */
7877 else if (SGI_COMPAT (output_bfd
)
7878 && CONST_STRNEQ (name
, ".compact_rel"))
7879 s
->size
+= mips_elf_hash_table (info
)->compact_rel_size
;
7880 else if (! CONST_STRNEQ (name
, ".init")
7881 && s
!= htab
->sgotplt
7884 /* It's not one of our sections, so don't allocate space. */
7890 s
->flags
|= SEC_EXCLUDE
;
7894 if ((s
->flags
& SEC_HAS_CONTENTS
) == 0)
7897 /* Allocate memory for this section last, since we may increase its
7899 if (strcmp (name
, MIPS_ELF_REL_DYN_NAME (info
)) == 0)
7905 /* Allocate memory for the section contents. */
7906 s
->contents
= bfd_zalloc (dynobj
, s
->size
);
7907 if (s
->contents
== NULL
)
7909 bfd_set_error (bfd_error_no_memory
);
7914 /* Allocate memory for the .rel(a).dyn section. */
7915 if (sreldyn
!= NULL
)
7917 sreldyn
->contents
= bfd_zalloc (dynobj
, sreldyn
->size
);
7918 if (sreldyn
->contents
== NULL
)
7920 bfd_set_error (bfd_error_no_memory
);
7925 if (elf_hash_table (info
)->dynamic_sections_created
)
7927 /* Add some entries to the .dynamic section. We fill in the
7928 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
7929 must add the entries now so that we get the correct size for
7930 the .dynamic section. */
7932 /* SGI object has the equivalence of DT_DEBUG in the
7933 DT_MIPS_RLD_MAP entry. This must come first because glibc
7934 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and GDB only
7935 looks at the first one it sees. */
7937 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_RLD_MAP
, 0))
7940 /* The DT_DEBUG entry may be filled in by the dynamic linker and
7941 used by the debugger. */
7942 if (info
->executable
7943 && !SGI_COMPAT (output_bfd
)
7944 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_DEBUG
, 0))
7947 if (reltext
&& (SGI_COMPAT (output_bfd
) || htab
->is_vxworks
))
7948 info
->flags
|= DF_TEXTREL
;
7950 if ((info
->flags
& DF_TEXTREL
) != 0)
7952 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_TEXTREL
, 0))
7955 /* Clear the DF_TEXTREL flag. It will be set again if we
7956 write out an actual text relocation; we may not, because
7957 at this point we do not know whether e.g. any .eh_frame
7958 absolute relocations have been converted to PC-relative. */
7959 info
->flags
&= ~DF_TEXTREL
;
7962 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_PLTGOT
, 0))
7965 if (htab
->is_vxworks
)
7967 /* VxWorks uses .rela.dyn instead of .rel.dyn. It does not
7968 use any of the DT_MIPS_* tags. */
7969 if (mips_elf_rel_dyn_section (info
, FALSE
))
7971 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_RELA
, 0))
7974 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_RELASZ
, 0))
7977 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_RELAENT
, 0))
7980 if (htab
->splt
->size
> 0)
7982 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_PLTREL
, 0))
7985 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_JMPREL
, 0))
7988 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_PLTRELSZ
, 0))
7994 if (mips_elf_rel_dyn_section (info
, FALSE
))
7996 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_REL
, 0))
7999 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_RELSZ
, 0))
8002 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_RELENT
, 0))
8006 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_RLD_VERSION
, 0))
8009 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_FLAGS
, 0))
8012 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_BASE_ADDRESS
, 0))
8015 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_LOCAL_GOTNO
, 0))
8018 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_SYMTABNO
, 0))
8021 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_UNREFEXTNO
, 0))
8024 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_GOTSYM
, 0))
8027 if (IRIX_COMPAT (dynobj
) == ict_irix5
8028 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_HIPAGENO
, 0))
8031 if (IRIX_COMPAT (dynobj
) == ict_irix6
8032 && (bfd_get_section_by_name
8033 (dynobj
, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj
)))
8034 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info
, DT_MIPS_OPTIONS
, 0))
8037 if (htab
->is_vxworks
8038 && !elf_vxworks_add_dynamic_entries (output_bfd
, info
))
8045 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
8046 Adjust its R_ADDEND field so that it is correct for the output file.
8047 LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
8048 and sections respectively; both use symbol indexes. */
8051 mips_elf_adjust_addend (bfd
*output_bfd
, struct bfd_link_info
*info
,
8052 bfd
*input_bfd
, Elf_Internal_Sym
*local_syms
,
8053 asection
**local_sections
, Elf_Internal_Rela
*rel
)
8055 unsigned int r_type
, r_symndx
;
8056 Elf_Internal_Sym
*sym
;
8059 if (mips_elf_local_relocation_p (input_bfd
, rel
, local_sections
, FALSE
))
8061 r_type
= ELF_R_TYPE (output_bfd
, rel
->r_info
);
8062 if (r_type
== R_MIPS16_GPREL
8063 || r_type
== R_MIPS_GPREL16
8064 || r_type
== R_MIPS_GPREL32
8065 || r_type
== R_MIPS_LITERAL
)
8067 rel
->r_addend
+= _bfd_get_gp_value (input_bfd
);
8068 rel
->r_addend
-= _bfd_get_gp_value (output_bfd
);
8071 r_symndx
= ELF_R_SYM (output_bfd
, rel
->r_info
);
8072 sym
= local_syms
+ r_symndx
;
8074 /* Adjust REL's addend to account for section merging. */
8075 if (!info
->relocatable
)
8077 sec
= local_sections
[r_symndx
];
8078 _bfd_elf_rela_local_sym (output_bfd
, sym
, &sec
, rel
);
8081 /* This would normally be done by the rela_normal code in elflink.c. */
8082 if (ELF_ST_TYPE (sym
->st_info
) == STT_SECTION
)
8083 rel
->r_addend
+= local_sections
[r_symndx
]->output_offset
;
8087 /* Relocate a MIPS ELF section. */
8090 _bfd_mips_elf_relocate_section (bfd
*output_bfd
, struct bfd_link_info
*info
,
8091 bfd
*input_bfd
, asection
*input_section
,
8092 bfd_byte
*contents
, Elf_Internal_Rela
*relocs
,
8093 Elf_Internal_Sym
*local_syms
,
8094 asection
**local_sections
)
8096 Elf_Internal_Rela
*rel
;
8097 const Elf_Internal_Rela
*relend
;
8099 bfd_boolean use_saved_addend_p
= FALSE
;
8100 const struct elf_backend_data
*bed
;
8102 bed
= get_elf_backend_data (output_bfd
);
8103 relend
= relocs
+ input_section
->reloc_count
* bed
->s
->int_rels_per_ext_rel
;
8104 for (rel
= relocs
; rel
< relend
; ++rel
)
8108 reloc_howto_type
*howto
;
8109 bfd_boolean require_jalx
;
8110 /* TRUE if the relocation is a RELA relocation, rather than a
8112 bfd_boolean rela_relocation_p
= TRUE
;
8113 unsigned int r_type
= ELF_R_TYPE (output_bfd
, rel
->r_info
);
8115 unsigned long r_symndx
;
8117 Elf_Internal_Shdr
*symtab_hdr
;
8118 struct elf_link_hash_entry
*h
;
8120 /* Find the relocation howto for this relocation. */
8121 howto
= MIPS_ELF_RTYPE_TO_HOWTO (input_bfd
, r_type
,
8122 NEWABI_P (input_bfd
)
8123 && (MIPS_RELOC_RELA_P
8124 (input_bfd
, input_section
,
8127 r_symndx
= ELF_R_SYM (input_bfd
, rel
->r_info
);
8128 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
8129 if (mips_elf_local_relocation_p (input_bfd
, rel
, local_sections
, FALSE
))
8131 sec
= local_sections
[r_symndx
];
8136 unsigned long extsymoff
;
8139 if (!elf_bad_symtab (input_bfd
))
8140 extsymoff
= symtab_hdr
->sh_info
;
8141 h
= elf_sym_hashes (input_bfd
) [r_symndx
- extsymoff
];
8142 while (h
->root
.type
== bfd_link_hash_indirect
8143 || h
->root
.type
== bfd_link_hash_warning
)
8144 h
= (struct elf_link_hash_entry
*) h
->root
.u
.i
.link
;
8147 if (h
->root
.type
== bfd_link_hash_defined
8148 || h
->root
.type
== bfd_link_hash_defweak
)
8149 sec
= h
->root
.u
.def
.section
;
8152 if (sec
!= NULL
&& elf_discarded_section (sec
))
8154 /* For relocs against symbols from removed linkonce sections,
8155 or sections discarded by a linker script, we just want the
8156 section contents zeroed. Avoid any special processing. */
8157 _bfd_clear_contents (howto
, input_bfd
, contents
+ rel
->r_offset
);
8163 if (r_type
== R_MIPS_64
&& ! NEWABI_P (input_bfd
))
8165 /* Some 32-bit code uses R_MIPS_64. In particular, people use
8166 64-bit code, but make sure all their addresses are in the
8167 lowermost or uppermost 32-bit section of the 64-bit address
8168 space. Thus, when they use an R_MIPS_64 they mean what is
8169 usually meant by R_MIPS_32, with the exception that the
8170 stored value is sign-extended to 64 bits. */
8171 howto
= MIPS_ELF_RTYPE_TO_HOWTO (input_bfd
, R_MIPS_32
, FALSE
);
8173 /* On big-endian systems, we need to lie about the position
8175 if (bfd_big_endian (input_bfd
))
8179 if (!use_saved_addend_p
)
8181 /* If these relocations were originally of the REL variety,
8182 we must pull the addend out of the field that will be
8183 relocated. Otherwise, we simply use the contents of the
8185 if (mips_elf_rel_relocation_p (input_bfd
, input_section
,
8188 rela_relocation_p
= FALSE
;
8189 addend
= mips_elf_read_rel_addend (input_bfd
, rel
,
8191 if (r_type
== R_MIPS_HI16
8192 || r_type
== R_MIPS16_HI16
8193 || (r_type
== R_MIPS_GOT16
8194 && mips_elf_local_relocation_p (input_bfd
, rel
,
8195 local_sections
, FALSE
)))
8197 if (!mips_elf_add_lo16_rel_addend (input_bfd
, rel
, relend
,
8203 name
= h
->root
.root
.string
;
8205 name
= bfd_elf_sym_name (input_bfd
, symtab_hdr
,
8206 local_syms
+ r_symndx
,
8208 (*_bfd_error_handler
)
8209 (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
8210 input_bfd
, input_section
, name
, howto
->name
,
8215 addend
<<= howto
->rightshift
;
8218 addend
= rel
->r_addend
;
8219 mips_elf_adjust_addend (output_bfd
, info
, input_bfd
,
8220 local_syms
, local_sections
, rel
);
8223 if (info
->relocatable
)
8225 if (r_type
== R_MIPS_64
&& ! NEWABI_P (output_bfd
)
8226 && bfd_big_endian (input_bfd
))
8229 if (!rela_relocation_p
&& rel
->r_addend
)
8231 addend
+= rel
->r_addend
;
8232 if (r_type
== R_MIPS_HI16
8233 || r_type
== R_MIPS_GOT16
)
8234 addend
= mips_elf_high (addend
);
8235 else if (r_type
== R_MIPS_HIGHER
)
8236 addend
= mips_elf_higher (addend
);
8237 else if (r_type
== R_MIPS_HIGHEST
)
8238 addend
= mips_elf_highest (addend
);
8240 addend
>>= howto
->rightshift
;
8242 /* We use the source mask, rather than the destination
8243 mask because the place to which we are writing will be
8244 source of the addend in the final link. */
8245 addend
&= howto
->src_mask
;
8247 if (r_type
== R_MIPS_64
&& ! NEWABI_P (output_bfd
))
8248 /* See the comment above about using R_MIPS_64 in the 32-bit
8249 ABI. Here, we need to update the addend. It would be
8250 possible to get away with just using the R_MIPS_32 reloc
8251 but for endianness. */
8257 if (addend
& ((bfd_vma
) 1 << 31))
8259 sign_bits
= ((bfd_vma
) 1 << 32) - 1;
8266 /* If we don't know that we have a 64-bit type,
8267 do two separate stores. */
8268 if (bfd_big_endian (input_bfd
))
8270 /* Store the sign-bits (which are most significant)
8272 low_bits
= sign_bits
;
8278 high_bits
= sign_bits
;
8280 bfd_put_32 (input_bfd
, low_bits
,
8281 contents
+ rel
->r_offset
);
8282 bfd_put_32 (input_bfd
, high_bits
,
8283 contents
+ rel
->r_offset
+ 4);
8287 if (! mips_elf_perform_relocation (info
, howto
, rel
, addend
,
8288 input_bfd
, input_section
,
8293 /* Go on to the next relocation. */
8297 /* In the N32 and 64-bit ABIs there may be multiple consecutive
8298 relocations for the same offset. In that case we are
8299 supposed to treat the output of each relocation as the addend
8301 if (rel
+ 1 < relend
8302 && rel
->r_offset
== rel
[1].r_offset
8303 && ELF_R_TYPE (input_bfd
, rel
[1].r_info
) != R_MIPS_NONE
)
8304 use_saved_addend_p
= TRUE
;
8306 use_saved_addend_p
= FALSE
;
8308 /* Figure out what value we are supposed to relocate. */
8309 switch (mips_elf_calculate_relocation (output_bfd
, input_bfd
,
8310 input_section
, info
, rel
,
8311 addend
, howto
, local_syms
,
8312 local_sections
, &value
,
8313 &name
, &require_jalx
,
8314 use_saved_addend_p
))
8316 case bfd_reloc_continue
:
8317 /* There's nothing to do. */
8320 case bfd_reloc_undefined
:
8321 /* mips_elf_calculate_relocation already called the
8322 undefined_symbol callback. There's no real point in
8323 trying to perform the relocation at this point, so we
8324 just skip ahead to the next relocation. */
8327 case bfd_reloc_notsupported
:
8328 msg
= _("internal error: unsupported relocation error");
8329 info
->callbacks
->warning
8330 (info
, msg
, name
, input_bfd
, input_section
, rel
->r_offset
);
8333 case bfd_reloc_overflow
:
8334 if (use_saved_addend_p
)
8335 /* Ignore overflow until we reach the last relocation for
8336 a given location. */
8340 struct mips_elf_link_hash_table
*htab
;
8342 htab
= mips_elf_hash_table (info
);
8343 BFD_ASSERT (name
!= NULL
);
8344 if (!htab
->small_data_overflow_reported
8345 && (howto
->type
== R_MIPS_GPREL16
8346 || howto
->type
== R_MIPS_LITERAL
))
8349 _("small-data section exceeds 64KB;"
8350 " lower small-data size limit (see option -G)");
8352 htab
->small_data_overflow_reported
= TRUE
;
8353 (*info
->callbacks
->einfo
) ("%P: %s\n", msg
);
8355 if (! ((*info
->callbacks
->reloc_overflow
)
8356 (info
, NULL
, name
, howto
->name
, (bfd_vma
) 0,
8357 input_bfd
, input_section
, rel
->r_offset
)))
8370 /* If we've got another relocation for the address, keep going
8371 until we reach the last one. */
8372 if (use_saved_addend_p
)
8378 if (r_type
== R_MIPS_64
&& ! NEWABI_P (output_bfd
))
8379 /* See the comment above about using R_MIPS_64 in the 32-bit
8380 ABI. Until now, we've been using the HOWTO for R_MIPS_32;
8381 that calculated the right value. Now, however, we
8382 sign-extend the 32-bit result to 64-bits, and store it as a
8383 64-bit value. We are especially generous here in that we
8384 go to extreme lengths to support this usage on systems with
8385 only a 32-bit VMA. */
8391 if (value
& ((bfd_vma
) 1 << 31))
8393 sign_bits
= ((bfd_vma
) 1 << 32) - 1;
8400 /* If we don't know that we have a 64-bit type,
8401 do two separate stores. */
8402 if (bfd_big_endian (input_bfd
))
8404 /* Undo what we did above. */
8406 /* Store the sign-bits (which are most significant)
8408 low_bits
= sign_bits
;
8414 high_bits
= sign_bits
;
8416 bfd_put_32 (input_bfd
, low_bits
,
8417 contents
+ rel
->r_offset
);
8418 bfd_put_32 (input_bfd
, high_bits
,
8419 contents
+ rel
->r_offset
+ 4);
8423 /* Actually perform the relocation. */
8424 if (! mips_elf_perform_relocation (info
, howto
, rel
, value
,
8425 input_bfd
, input_section
,
8426 contents
, require_jalx
))
8433 /* If NAME is one of the special IRIX6 symbols defined by the linker,
8434 adjust it appropriately now. */
8437 mips_elf_irix6_finish_dynamic_symbol (bfd
*abfd ATTRIBUTE_UNUSED
,
8438 const char *name
, Elf_Internal_Sym
*sym
)
8440 /* The linker script takes care of providing names and values for
8441 these, but we must place them into the right sections. */
8442 static const char* const text_section_symbols
[] = {
8445 "__dso_displacement",
8447 "__program_header_table",
8451 static const char* const data_section_symbols
[] = {
8459 const char* const *p
;
8462 for (i
= 0; i
< 2; ++i
)
8463 for (p
= (i
== 0) ? text_section_symbols
: data_section_symbols
;
8466 if (strcmp (*p
, name
) == 0)
8468 /* All of these symbols are given type STT_SECTION by the
8470 sym
->st_info
= ELF_ST_INFO (STB_GLOBAL
, STT_SECTION
);
8471 sym
->st_other
= STO_PROTECTED
;
8473 /* The IRIX linker puts these symbols in special sections. */
8475 sym
->st_shndx
= SHN_MIPS_TEXT
;
8477 sym
->st_shndx
= SHN_MIPS_DATA
;
8483 /* Finish up dynamic symbol handling. We set the contents of various
8484 dynamic sections here. */
8487 _bfd_mips_elf_finish_dynamic_symbol (bfd
*output_bfd
,
8488 struct bfd_link_info
*info
,
8489 struct elf_link_hash_entry
*h
,
8490 Elf_Internal_Sym
*sym
)
8494 struct mips_got_info
*g
, *gg
;
8497 struct mips_elf_link_hash_table
*htab
;
8499 htab
= mips_elf_hash_table (info
);
8500 dynobj
= elf_hash_table (info
)->dynobj
;
8502 if (h
->plt
.offset
!= MINUS_ONE
)
8505 bfd_byte stub
[MIPS_FUNCTION_STUB_BIG_SIZE
];
8507 /* This symbol has a stub. Set it up. */
8509 BFD_ASSERT (h
->dynindx
!= -1);
8511 s
= bfd_get_section_by_name (dynobj
,
8512 MIPS_ELF_STUB_SECTION_NAME (dynobj
));
8513 BFD_ASSERT (s
!= NULL
);
8515 BFD_ASSERT ((htab
->function_stub_size
== MIPS_FUNCTION_STUB_BIG_SIZE
)
8516 || (h
->dynindx
<= 0xffff));
8518 /* Values up to 2^31 - 1 are allowed. Larger values would cause
8519 sign extension at runtime in the stub, resulting in a negative
8521 if (h
->dynindx
& ~0x7fffffff)
8524 /* Fill the stub. */
8526 bfd_put_32 (output_bfd
, STUB_LW (output_bfd
), stub
+ idx
);
8528 bfd_put_32 (output_bfd
, STUB_MOVE (output_bfd
), stub
+ idx
);
8530 if (htab
->function_stub_size
== MIPS_FUNCTION_STUB_BIG_SIZE
)
8532 bfd_put_32 (output_bfd
, STUB_LUI ((h
->dynindx
>> 16) & 0x7fff),
8536 bfd_put_32 (output_bfd
, STUB_JALR
, stub
+ idx
);
8539 /* If a large stub is not required and sign extension is not a
8540 problem, then use legacy code in the stub. */
8541 if (htab
->function_stub_size
== MIPS_FUNCTION_STUB_BIG_SIZE
)
8542 bfd_put_32 (output_bfd
, STUB_ORI (h
->dynindx
& 0xffff), stub
+ idx
);
8543 else if (h
->dynindx
& ~0x7fff)
8544 bfd_put_32 (output_bfd
, STUB_LI16U (h
->dynindx
& 0xffff), stub
+ idx
);
8546 bfd_put_32 (output_bfd
, STUB_LI16S (output_bfd
, h
->dynindx
),
8549 BFD_ASSERT (h
->plt
.offset
<= s
->size
);
8550 memcpy (s
->contents
+ h
->plt
.offset
, stub
, htab
->function_stub_size
);
8552 /* Mark the symbol as undefined. plt.offset != -1 occurs
8553 only for the referenced symbol. */
8554 sym
->st_shndx
= SHN_UNDEF
;
8556 /* The run-time linker uses the st_value field of the symbol
8557 to reset the global offset table entry for this external
8558 to its stub address when unlinking a shared object. */
8559 sym
->st_value
= (s
->output_section
->vma
+ s
->output_offset
8563 BFD_ASSERT (h
->dynindx
!= -1
8564 || h
->forced_local
);
8566 sgot
= mips_elf_got_section (dynobj
, FALSE
);
8567 BFD_ASSERT (sgot
!= NULL
);
8568 BFD_ASSERT (mips_elf_section_data (sgot
) != NULL
);
8569 g
= mips_elf_section_data (sgot
)->u
.got_info
;
8570 BFD_ASSERT (g
!= NULL
);
8572 /* Run through the global symbol table, creating GOT entries for all
8573 the symbols that need them. */
8574 if (g
->global_gotsym
!= NULL
8575 && h
->dynindx
>= g
->global_gotsym
->dynindx
)
8580 value
= sym
->st_value
;
8581 offset
= mips_elf_global_got_index (dynobj
, output_bfd
, h
, R_MIPS_GOT16
, info
);
8582 MIPS_ELF_PUT_WORD (output_bfd
, value
, sgot
->contents
+ offset
);
8585 if (g
->next
&& h
->dynindx
!= -1 && h
->type
!= STT_TLS
)
8587 struct mips_got_entry e
, *p
;
8593 e
.abfd
= output_bfd
;
8595 e
.d
.h
= (struct mips_elf_link_hash_entry
*)h
;
8598 for (g
= g
->next
; g
->next
!= gg
; g
= g
->next
)
8601 && (p
= (struct mips_got_entry
*) htab_find (g
->got_entries
,
8606 || (elf_hash_table (info
)->dynamic_sections_created
8608 && p
->d
.h
->root
.def_dynamic
8609 && !p
->d
.h
->root
.def_regular
))
8611 /* Create an R_MIPS_REL32 relocation for this entry. Due to
8612 the various compatibility problems, it's easier to mock
8613 up an R_MIPS_32 or R_MIPS_64 relocation and leave
8614 mips_elf_create_dynamic_relocation to calculate the
8615 appropriate addend. */
8616 Elf_Internal_Rela rel
[3];
8618 memset (rel
, 0, sizeof (rel
));
8619 if (ABI_64_P (output_bfd
))
8620 rel
[0].r_info
= ELF_R_INFO (output_bfd
, 0, R_MIPS_64
);
8622 rel
[0].r_info
= ELF_R_INFO (output_bfd
, 0, R_MIPS_32
);
8623 rel
[0].r_offset
= rel
[1].r_offset
= rel
[2].r_offset
= offset
;
8626 if (! (mips_elf_create_dynamic_relocation
8627 (output_bfd
, info
, rel
,
8628 e
.d
.h
, NULL
, sym
->st_value
, &entry
, sgot
)))
8632 entry
= sym
->st_value
;
8633 MIPS_ELF_PUT_WORD (output_bfd
, entry
, sgot
->contents
+ offset
);
8638 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
8639 name
= h
->root
.root
.string
;
8640 if (strcmp (name
, "_DYNAMIC") == 0
8641 || h
== elf_hash_table (info
)->hgot
)
8642 sym
->st_shndx
= SHN_ABS
;
8643 else if (strcmp (name
, "_DYNAMIC_LINK") == 0
8644 || strcmp (name
, "_DYNAMIC_LINKING") == 0)
8646 sym
->st_shndx
= SHN_ABS
;
8647 sym
->st_info
= ELF_ST_INFO (STB_GLOBAL
, STT_SECTION
);
8650 else if (strcmp (name
, "_gp_disp") == 0 && ! NEWABI_P (output_bfd
))
8652 sym
->st_shndx
= SHN_ABS
;
8653 sym
->st_info
= ELF_ST_INFO (STB_GLOBAL
, STT_SECTION
);
8654 sym
->st_value
= elf_gp (output_bfd
);
8656 else if (SGI_COMPAT (output_bfd
))
8658 if (strcmp (name
, mips_elf_dynsym_rtproc_names
[0]) == 0
8659 || strcmp (name
, mips_elf_dynsym_rtproc_names
[1]) == 0)
8661 sym
->st_info
= ELF_ST_INFO (STB_GLOBAL
, STT_SECTION
);
8662 sym
->st_other
= STO_PROTECTED
;
8664 sym
->st_shndx
= SHN_MIPS_DATA
;
8666 else if (strcmp (name
, mips_elf_dynsym_rtproc_names
[2]) == 0)
8668 sym
->st_info
= ELF_ST_INFO (STB_GLOBAL
, STT_SECTION
);
8669 sym
->st_other
= STO_PROTECTED
;
8670 sym
->st_value
= mips_elf_hash_table (info
)->procedure_count
;
8671 sym
->st_shndx
= SHN_ABS
;
8673 else if (sym
->st_shndx
!= SHN_UNDEF
&& sym
->st_shndx
!= SHN_ABS
)
8675 if (h
->type
== STT_FUNC
)
8676 sym
->st_shndx
= SHN_MIPS_TEXT
;
8677 else if (h
->type
== STT_OBJECT
)
8678 sym
->st_shndx
= SHN_MIPS_DATA
;
8682 /* Handle the IRIX6-specific symbols. */
8683 if (IRIX_COMPAT (output_bfd
) == ict_irix6
)
8684 mips_elf_irix6_finish_dynamic_symbol (output_bfd
, name
, sym
);
8688 if (! mips_elf_hash_table (info
)->use_rld_obj_head
8689 && (strcmp (name
, "__rld_map") == 0
8690 || strcmp (name
, "__RLD_MAP") == 0))
8692 asection
*s
= bfd_get_section_by_name (dynobj
, ".rld_map");
8693 BFD_ASSERT (s
!= NULL
);
8694 sym
->st_value
= s
->output_section
->vma
+ s
->output_offset
;
8695 bfd_put_32 (output_bfd
, 0, s
->contents
);
8696 if (mips_elf_hash_table (info
)->rld_value
== 0)
8697 mips_elf_hash_table (info
)->rld_value
= sym
->st_value
;
8699 else if (mips_elf_hash_table (info
)->use_rld_obj_head
8700 && strcmp (name
, "__rld_obj_head") == 0)
8702 /* IRIX6 does not use a .rld_map section. */
8703 if (IRIX_COMPAT (output_bfd
) == ict_irix5
8704 || IRIX_COMPAT (output_bfd
) == ict_none
)
8705 BFD_ASSERT (bfd_get_section_by_name (dynobj
, ".rld_map")
8707 mips_elf_hash_table (info
)->rld_value
= sym
->st_value
;
8711 /* If this is a mips16 symbol, force the value to be even. */
8712 if (ELF_ST_IS_MIPS16 (sym
->st_other
))
8713 sym
->st_value
&= ~1;
8718 /* Likewise, for VxWorks. */
8721 _bfd_mips_vxworks_finish_dynamic_symbol (bfd
*output_bfd
,
8722 struct bfd_link_info
*info
,
8723 struct elf_link_hash_entry
*h
,
8724 Elf_Internal_Sym
*sym
)
8728 struct mips_got_info
*g
;
8729 struct mips_elf_link_hash_table
*htab
;
8731 htab
= mips_elf_hash_table (info
);
8732 dynobj
= elf_hash_table (info
)->dynobj
;
8734 if (h
->plt
.offset
!= (bfd_vma
) -1)
8737 bfd_vma plt_address
, plt_index
, got_address
, got_offset
, branch_offset
;
8738 Elf_Internal_Rela rel
;
8739 static const bfd_vma
*plt_entry
;
8741 BFD_ASSERT (h
->dynindx
!= -1);
8742 BFD_ASSERT (htab
->splt
!= NULL
);
8743 BFD_ASSERT (h
->plt
.offset
<= htab
->splt
->size
);
8745 /* Calculate the address of the .plt entry. */
8746 plt_address
= (htab
->splt
->output_section
->vma
8747 + htab
->splt
->output_offset
8750 /* Calculate the index of the entry. */
8751 plt_index
= ((h
->plt
.offset
- htab
->plt_header_size
)
8752 / htab
->plt_entry_size
);
8754 /* Calculate the address of the .got.plt entry. */
8755 got_address
= (htab
->sgotplt
->output_section
->vma
8756 + htab
->sgotplt
->output_offset
8759 /* Calculate the offset of the .got.plt entry from
8760 _GLOBAL_OFFSET_TABLE_. */
8761 got_offset
= mips_elf_gotplt_index (info
, h
);
8763 /* Calculate the offset for the branch at the start of the PLT
8764 entry. The branch jumps to the beginning of .plt. */
8765 branch_offset
= -(h
->plt
.offset
/ 4 + 1) & 0xffff;
8767 /* Fill in the initial value of the .got.plt entry. */
8768 bfd_put_32 (output_bfd
, plt_address
,
8769 htab
->sgotplt
->contents
+ plt_index
* 4);
8771 /* Find out where the .plt entry should go. */
8772 loc
= htab
->splt
->contents
+ h
->plt
.offset
;
8776 plt_entry
= mips_vxworks_shared_plt_entry
;
8777 bfd_put_32 (output_bfd
, plt_entry
[0] | branch_offset
, loc
);
8778 bfd_put_32 (output_bfd
, plt_entry
[1] | plt_index
, loc
+ 4);
8782 bfd_vma got_address_high
, got_address_low
;
8784 plt_entry
= mips_vxworks_exec_plt_entry
;
8785 got_address_high
= ((got_address
+ 0x8000) >> 16) & 0xffff;
8786 got_address_low
= got_address
& 0xffff;
8788 bfd_put_32 (output_bfd
, plt_entry
[0] | branch_offset
, loc
);
8789 bfd_put_32 (output_bfd
, plt_entry
[1] | plt_index
, loc
+ 4);
8790 bfd_put_32 (output_bfd
, plt_entry
[2] | got_address_high
, loc
+ 8);
8791 bfd_put_32 (output_bfd
, plt_entry
[3] | got_address_low
, loc
+ 12);
8792 bfd_put_32 (output_bfd
, plt_entry
[4], loc
+ 16);
8793 bfd_put_32 (output_bfd
, plt_entry
[5], loc
+ 20);
8794 bfd_put_32 (output_bfd
, plt_entry
[6], loc
+ 24);
8795 bfd_put_32 (output_bfd
, plt_entry
[7], loc
+ 28);
8797 loc
= (htab
->srelplt2
->contents
8798 + (plt_index
* 3 + 2) * sizeof (Elf32_External_Rela
));
8800 /* Emit a relocation for the .got.plt entry. */
8801 rel
.r_offset
= got_address
;
8802 rel
.r_info
= ELF32_R_INFO (htab
->root
.hplt
->indx
, R_MIPS_32
);
8803 rel
.r_addend
= h
->plt
.offset
;
8804 bfd_elf32_swap_reloca_out (output_bfd
, &rel
, loc
);
8806 /* Emit a relocation for the lui of %hi(<.got.plt slot>). */
8807 loc
+= sizeof (Elf32_External_Rela
);
8808 rel
.r_offset
= plt_address
+ 8;
8809 rel
.r_info
= ELF32_R_INFO (htab
->root
.hgot
->indx
, R_MIPS_HI16
);
8810 rel
.r_addend
= got_offset
;
8811 bfd_elf32_swap_reloca_out (output_bfd
, &rel
, loc
);
8813 /* Emit a relocation for the addiu of %lo(<.got.plt slot>). */
8814 loc
+= sizeof (Elf32_External_Rela
);
8816 rel
.r_info
= ELF32_R_INFO (htab
->root
.hgot
->indx
, R_MIPS_LO16
);
8817 bfd_elf32_swap_reloca_out (output_bfd
, &rel
, loc
);
8820 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */
8821 loc
= htab
->srelplt
->contents
+ plt_index
* sizeof (Elf32_External_Rela
);
8822 rel
.r_offset
= got_address
;
8823 rel
.r_info
= ELF32_R_INFO (h
->dynindx
, R_MIPS_JUMP_SLOT
);
8825 bfd_elf32_swap_reloca_out (output_bfd
, &rel
, loc
);
8827 if (!h
->def_regular
)
8828 sym
->st_shndx
= SHN_UNDEF
;
8831 BFD_ASSERT (h
->dynindx
!= -1 || h
->forced_local
);
8833 sgot
= mips_elf_got_section (dynobj
, FALSE
);
8834 BFD_ASSERT (sgot
!= NULL
);
8835 BFD_ASSERT (mips_elf_section_data (sgot
) != NULL
);
8836 g
= mips_elf_section_data (sgot
)->u
.got_info
;
8837 BFD_ASSERT (g
!= NULL
);
8839 /* See if this symbol has an entry in the GOT. */
8840 if (g
->global_gotsym
!= NULL
8841 && h
->dynindx
>= g
->global_gotsym
->dynindx
)
8844 Elf_Internal_Rela outrel
;
8848 /* Install the symbol value in the GOT. */
8849 offset
= mips_elf_global_got_index (dynobj
, output_bfd
, h
,
8850 R_MIPS_GOT16
, info
);
8851 MIPS_ELF_PUT_WORD (output_bfd
, sym
->st_value
, sgot
->contents
+ offset
);
8853 /* Add a dynamic relocation for it. */
8854 s
= mips_elf_rel_dyn_section (info
, FALSE
);
8855 loc
= s
->contents
+ (s
->reloc_count
++ * sizeof (Elf32_External_Rela
));
8856 outrel
.r_offset
= (sgot
->output_section
->vma
8857 + sgot
->output_offset
8859 outrel
.r_info
= ELF32_R_INFO (h
->dynindx
, R_MIPS_32
);
8860 outrel
.r_addend
= 0;
8861 bfd_elf32_swap_reloca_out (dynobj
, &outrel
, loc
);
8864 /* Emit a copy reloc, if needed. */
8867 Elf_Internal_Rela rel
;
8869 BFD_ASSERT (h
->dynindx
!= -1);
8871 rel
.r_offset
= (h
->root
.u
.def
.section
->output_section
->vma
8872 + h
->root
.u
.def
.section
->output_offset
8873 + h
->root
.u
.def
.value
);
8874 rel
.r_info
= ELF32_R_INFO (h
->dynindx
, R_MIPS_COPY
);
8876 bfd_elf32_swap_reloca_out (output_bfd
, &rel
,
8877 htab
->srelbss
->contents
8878 + (htab
->srelbss
->reloc_count
8879 * sizeof (Elf32_External_Rela
)));
8880 ++htab
->srelbss
->reloc_count
;
8883 /* If this is a mips16 symbol, force the value to be even. */
8884 if (ELF_ST_IS_MIPS16 (sym
->st_other
))
8885 sym
->st_value
&= ~1;
8890 /* Install the PLT header for a VxWorks executable and finalize the
8891 contents of .rela.plt.unloaded. */
8894 mips_vxworks_finish_exec_plt (bfd
*output_bfd
, struct bfd_link_info
*info
)
8896 Elf_Internal_Rela rela
;
8898 bfd_vma got_value
, got_value_high
, got_value_low
, plt_address
;
8899 static const bfd_vma
*plt_entry
;
8900 struct mips_elf_link_hash_table
*htab
;
8902 htab
= mips_elf_hash_table (info
);
8903 plt_entry
= mips_vxworks_exec_plt0_entry
;
8905 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */
8906 got_value
= (htab
->root
.hgot
->root
.u
.def
.section
->output_section
->vma
8907 + htab
->root
.hgot
->root
.u
.def
.section
->output_offset
8908 + htab
->root
.hgot
->root
.u
.def
.value
);
8910 got_value_high
= ((got_value
+ 0x8000) >> 16) & 0xffff;
8911 got_value_low
= got_value
& 0xffff;
8913 /* Calculate the address of the PLT header. */
8914 plt_address
= htab
->splt
->output_section
->vma
+ htab
->splt
->output_offset
;
8916 /* Install the PLT header. */
8917 loc
= htab
->splt
->contents
;
8918 bfd_put_32 (output_bfd
, plt_entry
[0] | got_value_high
, loc
);
8919 bfd_put_32 (output_bfd
, plt_entry
[1] | got_value_low
, loc
+ 4);
8920 bfd_put_32 (output_bfd
, plt_entry
[2], loc
+ 8);
8921 bfd_put_32 (output_bfd
, plt_entry
[3], loc
+ 12);
8922 bfd_put_32 (output_bfd
, plt_entry
[4], loc
+ 16);
8923 bfd_put_32 (output_bfd
, plt_entry
[5], loc
+ 20);
8925 /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_). */
8926 loc
= htab
->srelplt2
->contents
;
8927 rela
.r_offset
= plt_address
;
8928 rela
.r_info
= ELF32_R_INFO (htab
->root
.hgot
->indx
, R_MIPS_HI16
);
8930 bfd_elf32_swap_reloca_out (output_bfd
, &rela
, loc
);
8931 loc
+= sizeof (Elf32_External_Rela
);
8933 /* Output the relocation for the following addiu of
8934 %lo(_GLOBAL_OFFSET_TABLE_). */
8936 rela
.r_info
= ELF32_R_INFO (htab
->root
.hgot
->indx
, R_MIPS_LO16
);
8937 bfd_elf32_swap_reloca_out (output_bfd
, &rela
, loc
);
8938 loc
+= sizeof (Elf32_External_Rela
);
8940 /* Fix up the remaining relocations. They may have the wrong
8941 symbol index for _G_O_T_ or _P_L_T_ depending on the order
8942 in which symbols were output. */
8943 while (loc
< htab
->srelplt2
->contents
+ htab
->srelplt2
->size
)
8945 Elf_Internal_Rela rel
;
8947 bfd_elf32_swap_reloca_in (output_bfd
, loc
, &rel
);
8948 rel
.r_info
= ELF32_R_INFO (htab
->root
.hplt
->indx
, R_MIPS_32
);
8949 bfd_elf32_swap_reloca_out (output_bfd
, &rel
, loc
);
8950 loc
+= sizeof (Elf32_External_Rela
);
8952 bfd_elf32_swap_reloca_in (output_bfd
, loc
, &rel
);
8953 rel
.r_info
= ELF32_R_INFO (htab
->root
.hgot
->indx
, R_MIPS_HI16
);
8954 bfd_elf32_swap_reloca_out (output_bfd
, &rel
, loc
);
8955 loc
+= sizeof (Elf32_External_Rela
);
8957 bfd_elf32_swap_reloca_in (output_bfd
, loc
, &rel
);
8958 rel
.r_info
= ELF32_R_INFO (htab
->root
.hgot
->indx
, R_MIPS_LO16
);
8959 bfd_elf32_swap_reloca_out (output_bfd
, &rel
, loc
);
8960 loc
+= sizeof (Elf32_External_Rela
);
8964 /* Install the PLT header for a VxWorks shared library. */
8967 mips_vxworks_finish_shared_plt (bfd
*output_bfd
, struct bfd_link_info
*info
)
8970 struct mips_elf_link_hash_table
*htab
;
8972 htab
= mips_elf_hash_table (info
);
8974 /* We just need to copy the entry byte-by-byte. */
8975 for (i
= 0; i
< ARRAY_SIZE (mips_vxworks_shared_plt0_entry
); i
++)
8976 bfd_put_32 (output_bfd
, mips_vxworks_shared_plt0_entry
[i
],
8977 htab
->splt
->contents
+ i
* 4);
8980 /* Finish up the dynamic sections. */
8983 _bfd_mips_elf_finish_dynamic_sections (bfd
*output_bfd
,
8984 struct bfd_link_info
*info
)
8989 struct mips_got_info
*gg
, *g
;
8990 struct mips_elf_link_hash_table
*htab
;
8992 htab
= mips_elf_hash_table (info
);
8993 dynobj
= elf_hash_table (info
)->dynobj
;
8995 sdyn
= bfd_get_section_by_name (dynobj
, ".dynamic");
8997 sgot
= mips_elf_got_section (dynobj
, FALSE
);
9002 BFD_ASSERT (mips_elf_section_data (sgot
) != NULL
);
9003 gg
= mips_elf_section_data (sgot
)->u
.got_info
;
9004 BFD_ASSERT (gg
!= NULL
);
9005 g
= mips_elf_got_for_ibfd (gg
, output_bfd
);
9006 BFD_ASSERT (g
!= NULL
);
9009 if (elf_hash_table (info
)->dynamic_sections_created
)
9012 int dyn_to_skip
= 0, dyn_skipped
= 0;
9014 BFD_ASSERT (sdyn
!= NULL
);
9015 BFD_ASSERT (g
!= NULL
);
9017 for (b
= sdyn
->contents
;
9018 b
< sdyn
->contents
+ sdyn
->size
;
9019 b
+= MIPS_ELF_DYN_SIZE (dynobj
))
9021 Elf_Internal_Dyn dyn
;
9025 bfd_boolean swap_out_p
;
9027 /* Read in the current dynamic entry. */
9028 (*get_elf_backend_data (dynobj
)->s
->swap_dyn_in
) (dynobj
, b
, &dyn
);
9030 /* Assume that we're going to modify it and write it out. */
9036 dyn
.d_un
.d_val
= MIPS_ELF_REL_SIZE (dynobj
);
9040 BFD_ASSERT (htab
->is_vxworks
);
9041 dyn
.d_un
.d_val
= MIPS_ELF_RELA_SIZE (dynobj
);
9045 /* Rewrite DT_STRSZ. */
9047 _bfd_elf_strtab_size (elf_hash_table (info
)->dynstr
);
9052 if (htab
->is_vxworks
)
9054 /* _GLOBAL_OFFSET_TABLE_ is defined to be the beginning
9055 of the ".got" section in DYNOBJ. */
9056 s
= bfd_get_section_by_name (dynobj
, name
);
9057 BFD_ASSERT (s
!= NULL
);
9058 dyn
.d_un
.d_ptr
= s
->output_section
->vma
+ s
->output_offset
;
9062 s
= bfd_get_section_by_name (output_bfd
, name
);
9063 BFD_ASSERT (s
!= NULL
);
9064 dyn
.d_un
.d_ptr
= s
->vma
;
9068 case DT_MIPS_RLD_VERSION
:
9069 dyn
.d_un
.d_val
= 1; /* XXX */
9073 dyn
.d_un
.d_val
= RHF_NOTPOT
; /* XXX */
9076 case DT_MIPS_TIME_STAMP
:
9084 case DT_MIPS_ICHECKSUM
:
9089 case DT_MIPS_IVERSION
:
9094 case DT_MIPS_BASE_ADDRESS
:
9095 s
= output_bfd
->sections
;
9096 BFD_ASSERT (s
!= NULL
);
9097 dyn
.d_un
.d_ptr
= s
->vma
& ~(bfd_vma
) 0xffff;
9100 case DT_MIPS_LOCAL_GOTNO
:
9101 dyn
.d_un
.d_val
= g
->local_gotno
;
9104 case DT_MIPS_UNREFEXTNO
:
9105 /* The index into the dynamic symbol table which is the
9106 entry of the first external symbol that is not
9107 referenced within the same object. */
9108 dyn
.d_un
.d_val
= bfd_count_sections (output_bfd
) + 1;
9111 case DT_MIPS_GOTSYM
:
9112 if (gg
->global_gotsym
)
9114 dyn
.d_un
.d_val
= gg
->global_gotsym
->dynindx
;
9117 /* In case if we don't have global got symbols we default
9118 to setting DT_MIPS_GOTSYM to the same value as
9119 DT_MIPS_SYMTABNO, so we just fall through. */
9121 case DT_MIPS_SYMTABNO
:
9123 elemsize
= MIPS_ELF_SYM_SIZE (output_bfd
);
9124 s
= bfd_get_section_by_name (output_bfd
, name
);
9125 BFD_ASSERT (s
!= NULL
);
9127 dyn
.d_un
.d_val
= s
->size
/ elemsize
;
9130 case DT_MIPS_HIPAGENO
:
9131 dyn
.d_un
.d_val
= g
->local_gotno
- MIPS_RESERVED_GOTNO (info
);
9134 case DT_MIPS_RLD_MAP
:
9135 dyn
.d_un
.d_ptr
= mips_elf_hash_table (info
)->rld_value
;
9138 case DT_MIPS_OPTIONS
:
9139 s
= (bfd_get_section_by_name
9140 (output_bfd
, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd
)));
9141 dyn
.d_un
.d_ptr
= s
->vma
;
9145 BFD_ASSERT (htab
->is_vxworks
);
9146 /* The count does not include the JUMP_SLOT relocations. */
9148 dyn
.d_un
.d_val
-= htab
->srelplt
->size
;
9152 BFD_ASSERT (htab
->is_vxworks
);
9153 dyn
.d_un
.d_val
= DT_RELA
;
9157 BFD_ASSERT (htab
->is_vxworks
);
9158 dyn
.d_un
.d_val
= htab
->srelplt
->size
;
9162 BFD_ASSERT (htab
->is_vxworks
);
9163 dyn
.d_un
.d_val
= (htab
->srelplt
->output_section
->vma
9164 + htab
->srelplt
->output_offset
);
9168 /* If we didn't need any text relocations after all, delete
9170 if (!(info
->flags
& DF_TEXTREL
))
9172 dyn_to_skip
= MIPS_ELF_DYN_SIZE (dynobj
);
9178 /* If we didn't need any text relocations after all, clear
9179 DF_TEXTREL from DT_FLAGS. */
9180 if (!(info
->flags
& DF_TEXTREL
))
9181 dyn
.d_un
.d_val
&= ~DF_TEXTREL
;
9188 if (htab
->is_vxworks
9189 && elf_vxworks_finish_dynamic_entry (output_bfd
, &dyn
))
9194 if (swap_out_p
|| dyn_skipped
)
9195 (*get_elf_backend_data (dynobj
)->s
->swap_dyn_out
)
9196 (dynobj
, &dyn
, b
- dyn_skipped
);
9200 dyn_skipped
+= dyn_to_skip
;
9205 /* Wipe out any trailing entries if we shifted down a dynamic tag. */
9206 if (dyn_skipped
> 0)
9207 memset (b
- dyn_skipped
, 0, dyn_skipped
);
9210 if (sgot
!= NULL
&& sgot
->size
> 0
9211 && !bfd_is_abs_section (sgot
->output_section
))
9213 if (htab
->is_vxworks
)
9215 /* The first entry of the global offset table points to the
9216 ".dynamic" section. The second is initialized by the
9217 loader and contains the shared library identifier.
9218 The third is also initialized by the loader and points
9219 to the lazy resolution stub. */
9220 MIPS_ELF_PUT_WORD (output_bfd
,
9221 sdyn
->output_offset
+ sdyn
->output_section
->vma
,
9223 MIPS_ELF_PUT_WORD (output_bfd
, 0,
9224 sgot
->contents
+ MIPS_ELF_GOT_SIZE (output_bfd
));
9225 MIPS_ELF_PUT_WORD (output_bfd
, 0,
9227 + 2 * MIPS_ELF_GOT_SIZE (output_bfd
));
9231 /* The first entry of the global offset table will be filled at
9232 runtime. The second entry will be used by some runtime loaders.
9233 This isn't the case of IRIX rld. */
9234 MIPS_ELF_PUT_WORD (output_bfd
, (bfd_vma
) 0, sgot
->contents
);
9235 MIPS_ELF_PUT_WORD (output_bfd
, MIPS_ELF_GNU_GOT1_MASK (output_bfd
),
9236 sgot
->contents
+ MIPS_ELF_GOT_SIZE (output_bfd
));
9239 elf_section_data (sgot
->output_section
)->this_hdr
.sh_entsize
9240 = MIPS_ELF_GOT_SIZE (output_bfd
);
9243 /* Generate dynamic relocations for the non-primary gots. */
9244 if (gg
!= NULL
&& gg
->next
)
9246 Elf_Internal_Rela rel
[3];
9249 memset (rel
, 0, sizeof (rel
));
9250 rel
[0].r_info
= ELF_R_INFO (output_bfd
, 0, R_MIPS_REL32
);
9252 for (g
= gg
->next
; g
->next
!= gg
; g
= g
->next
)
9254 bfd_vma index
= g
->next
->local_gotno
+ g
->next
->global_gotno
9255 + g
->next
->tls_gotno
;
9257 MIPS_ELF_PUT_WORD (output_bfd
, 0, sgot
->contents
9258 + index
++ * MIPS_ELF_GOT_SIZE (output_bfd
));
9259 MIPS_ELF_PUT_WORD (output_bfd
, MIPS_ELF_GNU_GOT1_MASK (output_bfd
),
9261 + index
++ * MIPS_ELF_GOT_SIZE (output_bfd
));
9266 while (index
< g
->assigned_gotno
)
9268 rel
[0].r_offset
= rel
[1].r_offset
= rel
[2].r_offset
9269 = index
++ * MIPS_ELF_GOT_SIZE (output_bfd
);
9270 if (!(mips_elf_create_dynamic_relocation
9271 (output_bfd
, info
, rel
, NULL
,
9272 bfd_abs_section_ptr
,
9275 BFD_ASSERT (addend
== 0);
9280 /* The generation of dynamic relocations for the non-primary gots
9281 adds more dynamic relocations. We cannot count them until
9284 if (elf_hash_table (info
)->dynamic_sections_created
)
9287 bfd_boolean swap_out_p
;
9289 BFD_ASSERT (sdyn
!= NULL
);
9291 for (b
= sdyn
->contents
;
9292 b
< sdyn
->contents
+ sdyn
->size
;
9293 b
+= MIPS_ELF_DYN_SIZE (dynobj
))
9295 Elf_Internal_Dyn dyn
;
9298 /* Read in the current dynamic entry. */
9299 (*get_elf_backend_data (dynobj
)->s
->swap_dyn_in
) (dynobj
, b
, &dyn
);
9301 /* Assume that we're going to modify it and write it out. */
9307 /* Reduce DT_RELSZ to account for any relocations we
9308 decided not to make. This is for the n64 irix rld,
9309 which doesn't seem to apply any relocations if there
9310 are trailing null entries. */
9311 s
= mips_elf_rel_dyn_section (info
, FALSE
);
9312 dyn
.d_un
.d_val
= (s
->reloc_count
9313 * (ABI_64_P (output_bfd
)
9314 ? sizeof (Elf64_Mips_External_Rel
)
9315 : sizeof (Elf32_External_Rel
)));
9316 /* Adjust the section size too. Tools like the prelinker
9317 can reasonably expect the values to the same. */
9318 elf_section_data (s
->output_section
)->this_hdr
.sh_size
9328 (*get_elf_backend_data (dynobj
)->s
->swap_dyn_out
)
9335 Elf32_compact_rel cpt
;
9337 if (SGI_COMPAT (output_bfd
))
9339 /* Write .compact_rel section out. */
9340 s
= bfd_get_section_by_name (dynobj
, ".compact_rel");
9344 cpt
.num
= s
->reloc_count
;
9346 cpt
.offset
= (s
->output_section
->filepos
9347 + sizeof (Elf32_External_compact_rel
));
9350 bfd_elf32_swap_compact_rel_out (output_bfd
, &cpt
,
9351 ((Elf32_External_compact_rel
*)
9354 /* Clean up a dummy stub function entry in .text. */
9355 s
= bfd_get_section_by_name (dynobj
,
9356 MIPS_ELF_STUB_SECTION_NAME (dynobj
));
9359 file_ptr dummy_offset
;
9361 BFD_ASSERT (s
->size
>= htab
->function_stub_size
);
9362 dummy_offset
= s
->size
- htab
->function_stub_size
;
9363 memset (s
->contents
+ dummy_offset
, 0,
9364 htab
->function_stub_size
);
9369 /* The psABI says that the dynamic relocations must be sorted in
9370 increasing order of r_symndx. The VxWorks EABI doesn't require
9371 this, and because the code below handles REL rather than RELA
9372 relocations, using it for VxWorks would be outright harmful. */
9373 if (!htab
->is_vxworks
)
9375 s
= mips_elf_rel_dyn_section (info
, FALSE
);
9377 && s
->size
> (bfd_vma
)2 * MIPS_ELF_REL_SIZE (output_bfd
))
9379 reldyn_sorting_bfd
= output_bfd
;
9381 if (ABI_64_P (output_bfd
))
9382 qsort ((Elf64_External_Rel
*) s
->contents
+ 1,
9383 s
->reloc_count
- 1, sizeof (Elf64_Mips_External_Rel
),
9384 sort_dynamic_relocs_64
);
9386 qsort ((Elf32_External_Rel
*) s
->contents
+ 1,
9387 s
->reloc_count
- 1, sizeof (Elf32_External_Rel
),
9388 sort_dynamic_relocs
);
9393 if (htab
->is_vxworks
&& htab
->splt
->size
> 0)
9396 mips_vxworks_finish_shared_plt (output_bfd
, info
);
9398 mips_vxworks_finish_exec_plt (output_bfd
, info
);
9404 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags. */
9407 mips_set_isa_flags (bfd
*abfd
)
9411 switch (bfd_get_mach (abfd
))
9414 case bfd_mach_mips3000
:
9415 val
= E_MIPS_ARCH_1
;
9418 case bfd_mach_mips3900
:
9419 val
= E_MIPS_ARCH_1
| E_MIPS_MACH_3900
;
9422 case bfd_mach_mips6000
:
9423 val
= E_MIPS_ARCH_2
;
9426 case bfd_mach_mips4000
:
9427 case bfd_mach_mips4300
:
9428 case bfd_mach_mips4400
:
9429 case bfd_mach_mips4600
:
9430 val
= E_MIPS_ARCH_3
;
9433 case bfd_mach_mips4010
:
9434 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_4010
;
9437 case bfd_mach_mips4100
:
9438 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_4100
;
9441 case bfd_mach_mips4111
:
9442 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_4111
;
9445 case bfd_mach_mips4120
:
9446 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_4120
;
9449 case bfd_mach_mips4650
:
9450 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_4650
;
9453 case bfd_mach_mips5400
:
9454 val
= E_MIPS_ARCH_4
| E_MIPS_MACH_5400
;
9457 case bfd_mach_mips5500
:
9458 val
= E_MIPS_ARCH_4
| E_MIPS_MACH_5500
;
9461 case bfd_mach_mips9000
:
9462 val
= E_MIPS_ARCH_4
| E_MIPS_MACH_9000
;
9465 case bfd_mach_mips5000
:
9466 case bfd_mach_mips7000
:
9467 case bfd_mach_mips8000
:
9468 case bfd_mach_mips10000
:
9469 case bfd_mach_mips12000
:
9470 val
= E_MIPS_ARCH_4
;
9473 case bfd_mach_mips5
:
9474 val
= E_MIPS_ARCH_5
;
9477 case bfd_mach_mips_loongson_2e
:
9478 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_LS2E
;
9481 case bfd_mach_mips_loongson_2f
:
9482 val
= E_MIPS_ARCH_3
| E_MIPS_MACH_LS2F
;
9485 case bfd_mach_mips_sb1
:
9486 val
= E_MIPS_ARCH_64
| E_MIPS_MACH_SB1
;
9489 case bfd_mach_mips_octeon
:
9490 val
= E_MIPS_ARCH_64R2
| E_MIPS_MACH_OCTEON
;
9493 case bfd_mach_mipsisa32
:
9494 val
= E_MIPS_ARCH_32
;
9497 case bfd_mach_mipsisa64
:
9498 val
= E_MIPS_ARCH_64
;
9501 case bfd_mach_mipsisa32r2
:
9502 val
= E_MIPS_ARCH_32R2
;
9505 case bfd_mach_mipsisa64r2
:
9506 val
= E_MIPS_ARCH_64R2
;
9509 elf_elfheader (abfd
)->e_flags
&= ~(EF_MIPS_ARCH
| EF_MIPS_MACH
);
9510 elf_elfheader (abfd
)->e_flags
|= val
;
9515 /* The final processing done just before writing out a MIPS ELF object
9516 file. This gets the MIPS architecture right based on the machine
9517 number. This is used by both the 32-bit and the 64-bit ABI. */
9520 _bfd_mips_elf_final_write_processing (bfd
*abfd
,
9521 bfd_boolean linker ATTRIBUTE_UNUSED
)
9524 Elf_Internal_Shdr
**hdrpp
;
9528 /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
9529 is nonzero. This is for compatibility with old objects, which used
9530 a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH. */
9531 if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_MACH
) == 0)
9532 mips_set_isa_flags (abfd
);
9534 /* Set the sh_info field for .gptab sections and other appropriate
9535 info for each special section. */
9536 for (i
= 1, hdrpp
= elf_elfsections (abfd
) + 1;
9537 i
< elf_numsections (abfd
);
9540 switch ((*hdrpp
)->sh_type
)
9543 case SHT_MIPS_LIBLIST
:
9544 sec
= bfd_get_section_by_name (abfd
, ".dynstr");
9546 (*hdrpp
)->sh_link
= elf_section_data (sec
)->this_idx
;
9549 case SHT_MIPS_GPTAB
:
9550 BFD_ASSERT ((*hdrpp
)->bfd_section
!= NULL
);
9551 name
= bfd_get_section_name (abfd
, (*hdrpp
)->bfd_section
);
9552 BFD_ASSERT (name
!= NULL
9553 && CONST_STRNEQ (name
, ".gptab."));
9554 sec
= bfd_get_section_by_name (abfd
, name
+ sizeof ".gptab" - 1);
9555 BFD_ASSERT (sec
!= NULL
);
9556 (*hdrpp
)->sh_info
= elf_section_data (sec
)->this_idx
;
9559 case SHT_MIPS_CONTENT
:
9560 BFD_ASSERT ((*hdrpp
)->bfd_section
!= NULL
);
9561 name
= bfd_get_section_name (abfd
, (*hdrpp
)->bfd_section
);
9562 BFD_ASSERT (name
!= NULL
9563 && CONST_STRNEQ (name
, ".MIPS.content"));
9564 sec
= bfd_get_section_by_name (abfd
,
9565 name
+ sizeof ".MIPS.content" - 1);
9566 BFD_ASSERT (sec
!= NULL
);
9567 (*hdrpp
)->sh_link
= elf_section_data (sec
)->this_idx
;
9570 case SHT_MIPS_SYMBOL_LIB
:
9571 sec
= bfd_get_section_by_name (abfd
, ".dynsym");
9573 (*hdrpp
)->sh_link
= elf_section_data (sec
)->this_idx
;
9574 sec
= bfd_get_section_by_name (abfd
, ".liblist");
9576 (*hdrpp
)->sh_info
= elf_section_data (sec
)->this_idx
;
9579 case SHT_MIPS_EVENTS
:
9580 BFD_ASSERT ((*hdrpp
)->bfd_section
!= NULL
);
9581 name
= bfd_get_section_name (abfd
, (*hdrpp
)->bfd_section
);
9582 BFD_ASSERT (name
!= NULL
);
9583 if (CONST_STRNEQ (name
, ".MIPS.events"))
9584 sec
= bfd_get_section_by_name (abfd
,
9585 name
+ sizeof ".MIPS.events" - 1);
9588 BFD_ASSERT (CONST_STRNEQ (name
, ".MIPS.post_rel"));
9589 sec
= bfd_get_section_by_name (abfd
,
9591 + sizeof ".MIPS.post_rel" - 1));
9593 BFD_ASSERT (sec
!= NULL
);
9594 (*hdrpp
)->sh_link
= elf_section_data (sec
)->this_idx
;
9601 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
9605 _bfd_mips_elf_additional_program_headers (bfd
*abfd
,
9606 struct bfd_link_info
*info ATTRIBUTE_UNUSED
)
9611 /* See if we need a PT_MIPS_REGINFO segment. */
9612 s
= bfd_get_section_by_name (abfd
, ".reginfo");
9613 if (s
&& (s
->flags
& SEC_LOAD
))
9616 /* See if we need a PT_MIPS_OPTIONS segment. */
9617 if (IRIX_COMPAT (abfd
) == ict_irix6
9618 && bfd_get_section_by_name (abfd
,
9619 MIPS_ELF_OPTIONS_SECTION_NAME (abfd
)))
9622 /* See if we need a PT_MIPS_RTPROC segment. */
9623 if (IRIX_COMPAT (abfd
) == ict_irix5
9624 && bfd_get_section_by_name (abfd
, ".dynamic")
9625 && bfd_get_section_by_name (abfd
, ".mdebug"))
9628 /* Allocate a PT_NULL header in dynamic objects. See
9629 _bfd_mips_elf_modify_segment_map for details. */
9630 if (!SGI_COMPAT (abfd
)
9631 && bfd_get_section_by_name (abfd
, ".dynamic"))
9637 /* Modify the segment map for an IRIX5 executable. */
9640 _bfd_mips_elf_modify_segment_map (bfd
*abfd
,
9641 struct bfd_link_info
*info
)
9644 struct elf_segment_map
*m
, **pm
;
9647 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
9649 s
= bfd_get_section_by_name (abfd
, ".reginfo");
9650 if (s
!= NULL
&& (s
->flags
& SEC_LOAD
) != 0)
9652 for (m
= elf_tdata (abfd
)->segment_map
; m
!= NULL
; m
= m
->next
)
9653 if (m
->p_type
== PT_MIPS_REGINFO
)
9658 m
= bfd_zalloc (abfd
, amt
);
9662 m
->p_type
= PT_MIPS_REGINFO
;
9666 /* We want to put it after the PHDR and INTERP segments. */
9667 pm
= &elf_tdata (abfd
)->segment_map
;
9669 && ((*pm
)->p_type
== PT_PHDR
9670 || (*pm
)->p_type
== PT_INTERP
))
9678 /* For IRIX 6, we don't have .mdebug sections, nor does anything but
9679 .dynamic end up in PT_DYNAMIC. However, we do have to insert a
9680 PT_MIPS_OPTIONS segment immediately following the program header
9683 /* On non-IRIX6 new abi, we'll have already created a segment
9684 for this section, so don't create another. I'm not sure this
9685 is not also the case for IRIX 6, but I can't test it right
9687 && IRIX_COMPAT (abfd
) == ict_irix6
)
9689 for (s
= abfd
->sections
; s
; s
= s
->next
)
9690 if (elf_section_data (s
)->this_hdr
.sh_type
== SHT_MIPS_OPTIONS
)
9695 struct elf_segment_map
*options_segment
;
9697 pm
= &elf_tdata (abfd
)->segment_map
;
9699 && ((*pm
)->p_type
== PT_PHDR
9700 || (*pm
)->p_type
== PT_INTERP
))
9703 if (*pm
== NULL
|| (*pm
)->p_type
!= PT_MIPS_OPTIONS
)
9705 amt
= sizeof (struct elf_segment_map
);
9706 options_segment
= bfd_zalloc (abfd
, amt
);
9707 options_segment
->next
= *pm
;
9708 options_segment
->p_type
= PT_MIPS_OPTIONS
;
9709 options_segment
->p_flags
= PF_R
;
9710 options_segment
->p_flags_valid
= TRUE
;
9711 options_segment
->count
= 1;
9712 options_segment
->sections
[0] = s
;
9713 *pm
= options_segment
;
9719 if (IRIX_COMPAT (abfd
) == ict_irix5
)
9721 /* If there are .dynamic and .mdebug sections, we make a room
9722 for the RTPROC header. FIXME: Rewrite without section names. */
9723 if (bfd_get_section_by_name (abfd
, ".interp") == NULL
9724 && bfd_get_section_by_name (abfd
, ".dynamic") != NULL
9725 && bfd_get_section_by_name (abfd
, ".mdebug") != NULL
)
9727 for (m
= elf_tdata (abfd
)->segment_map
; m
!= NULL
; m
= m
->next
)
9728 if (m
->p_type
== PT_MIPS_RTPROC
)
9733 m
= bfd_zalloc (abfd
, amt
);
9737 m
->p_type
= PT_MIPS_RTPROC
;
9739 s
= bfd_get_section_by_name (abfd
, ".rtproc");
9744 m
->p_flags_valid
= 1;
9752 /* We want to put it after the DYNAMIC segment. */
9753 pm
= &elf_tdata (abfd
)->segment_map
;
9754 while (*pm
!= NULL
&& (*pm
)->p_type
!= PT_DYNAMIC
)
9764 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
9765 .dynstr, .dynsym, and .hash sections, and everything in
9767 for (pm
= &elf_tdata (abfd
)->segment_map
; *pm
!= NULL
;
9769 if ((*pm
)->p_type
== PT_DYNAMIC
)
9772 if (m
!= NULL
&& IRIX_COMPAT (abfd
) == ict_none
)
9774 /* For a normal mips executable the permissions for the PT_DYNAMIC
9775 segment are read, write and execute. We do that here since
9776 the code in elf.c sets only the read permission. This matters
9777 sometimes for the dynamic linker. */
9778 if (bfd_get_section_by_name (abfd
, ".dynamic") != NULL
)
9780 m
->p_flags
= PF_R
| PF_W
| PF_X
;
9781 m
->p_flags_valid
= 1;
9784 /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
9785 glibc's dynamic linker has traditionally derived the number of
9786 tags from the p_filesz field, and sometimes allocates stack
9787 arrays of that size. An overly-big PT_DYNAMIC segment can
9788 be actively harmful in such cases. Making PT_DYNAMIC contain
9789 other sections can also make life hard for the prelinker,
9790 which might move one of the other sections to a different
9792 if (SGI_COMPAT (abfd
)
9795 && strcmp (m
->sections
[0]->name
, ".dynamic") == 0)
9797 static const char *sec_names
[] =
9799 ".dynamic", ".dynstr", ".dynsym", ".hash"
9803 struct elf_segment_map
*n
;
9807 for (i
= 0; i
< sizeof sec_names
/ sizeof sec_names
[0]; i
++)
9809 s
= bfd_get_section_by_name (abfd
, sec_names
[i
]);
9810 if (s
!= NULL
&& (s
->flags
& SEC_LOAD
) != 0)
9817 if (high
< s
->vma
+ sz
)
9823 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
9824 if ((s
->flags
& SEC_LOAD
) != 0
9826 && s
->vma
+ s
->size
<= high
)
9829 amt
= sizeof *n
+ (bfd_size_type
) (c
- 1) * sizeof (asection
*);
9830 n
= bfd_zalloc (abfd
, amt
);
9837 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
9839 if ((s
->flags
& SEC_LOAD
) != 0
9841 && s
->vma
+ s
->size
<= high
)
9852 /* Allocate a spare program header in dynamic objects so that tools
9853 like the prelinker can add an extra PT_LOAD entry.
9855 If the prelinker needs to make room for a new PT_LOAD entry, its
9856 standard procedure is to move the first (read-only) sections into
9857 the new (writable) segment. However, the MIPS ABI requires
9858 .dynamic to be in a read-only segment, and the section will often
9859 start within sizeof (ElfNN_Phdr) bytes of the last program header.
9861 Although the prelinker could in principle move .dynamic to a
9862 writable segment, it seems better to allocate a spare program
9863 header instead, and avoid the need to move any sections.
9864 There is a long tradition of allocating spare dynamic tags,
9865 so allocating a spare program header seems like a natural
9868 If INFO is NULL, we may be copying an already prelinked binary
9869 with objcopy or strip, so do not add this header. */
9871 && !SGI_COMPAT (abfd
)
9872 && bfd_get_section_by_name (abfd
, ".dynamic"))
9874 for (pm
= &elf_tdata (abfd
)->segment_map
; *pm
!= NULL
; pm
= &(*pm
)->next
)
9875 if ((*pm
)->p_type
== PT_NULL
)
9879 m
= bfd_zalloc (abfd
, sizeof (*m
));
9883 m
->p_type
= PT_NULL
;
9891 /* Return the section that should be marked against GC for a given
9895 _bfd_mips_elf_gc_mark_hook (asection
*sec
,
9896 struct bfd_link_info
*info
,
9897 Elf_Internal_Rela
*rel
,
9898 struct elf_link_hash_entry
*h
,
9899 Elf_Internal_Sym
*sym
)
9901 /* ??? Do mips16 stub sections need to be handled special? */
9904 switch (ELF_R_TYPE (sec
->owner
, rel
->r_info
))
9906 case R_MIPS_GNU_VTINHERIT
:
9907 case R_MIPS_GNU_VTENTRY
:
9911 return _bfd_elf_gc_mark_hook (sec
, info
, rel
, h
, sym
);
9914 /* Update the got entry reference counts for the section being removed. */
9917 _bfd_mips_elf_gc_sweep_hook (bfd
*abfd ATTRIBUTE_UNUSED
,
9918 struct bfd_link_info
*info ATTRIBUTE_UNUSED
,
9919 asection
*sec ATTRIBUTE_UNUSED
,
9920 const Elf_Internal_Rela
*relocs ATTRIBUTE_UNUSED
)
9923 Elf_Internal_Shdr
*symtab_hdr
;
9924 struct elf_link_hash_entry
**sym_hashes
;
9925 bfd_signed_vma
*local_got_refcounts
;
9926 const Elf_Internal_Rela
*rel
, *relend
;
9927 unsigned long r_symndx
;
9928 struct elf_link_hash_entry
*h
;
9930 if (info
->relocatable
)
9933 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
9934 sym_hashes
= elf_sym_hashes (abfd
);
9935 local_got_refcounts
= elf_local_got_refcounts (abfd
);
9937 relend
= relocs
+ sec
->reloc_count
;
9938 for (rel
= relocs
; rel
< relend
; rel
++)
9939 switch (ELF_R_TYPE (abfd
, rel
->r_info
))
9943 case R_MIPS_CALL_HI16
:
9944 case R_MIPS_CALL_LO16
:
9945 case R_MIPS_GOT_HI16
:
9946 case R_MIPS_GOT_LO16
:
9947 case R_MIPS_GOT_DISP
:
9948 case R_MIPS_GOT_PAGE
:
9949 case R_MIPS_GOT_OFST
:
9950 /* ??? It would seem that the existing MIPS code does no sort
9951 of reference counting or whatnot on its GOT and PLT entries,
9952 so it is not possible to garbage collect them at this time. */
9963 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
9964 hiding the old indirect symbol. Process additional relocation
9965 information. Also called for weakdefs, in which case we just let
9966 _bfd_elf_link_hash_copy_indirect copy the flags for us. */
9969 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info
*info
,
9970 struct elf_link_hash_entry
*dir
,
9971 struct elf_link_hash_entry
*ind
)
9973 struct mips_elf_link_hash_entry
*dirmips
, *indmips
;
9975 _bfd_elf_link_hash_copy_indirect (info
, dir
, ind
);
9977 if (ind
->root
.type
!= bfd_link_hash_indirect
)
9980 dirmips
= (struct mips_elf_link_hash_entry
*) dir
;
9981 indmips
= (struct mips_elf_link_hash_entry
*) ind
;
9982 dirmips
->possibly_dynamic_relocs
+= indmips
->possibly_dynamic_relocs
;
9983 if (indmips
->readonly_reloc
)
9984 dirmips
->readonly_reloc
= TRUE
;
9985 if (indmips
->no_fn_stub
)
9986 dirmips
->no_fn_stub
= TRUE
;
9988 if (dirmips
->tls_type
== 0)
9989 dirmips
->tls_type
= indmips
->tls_type
;
9993 _bfd_mips_elf_hide_symbol (struct bfd_link_info
*info
,
9994 struct elf_link_hash_entry
*entry
,
9995 bfd_boolean force_local
)
9999 struct mips_got_info
*g
;
10000 struct mips_elf_link_hash_entry
*h
;
10001 struct mips_elf_link_hash_table
*htab
;
10003 h
= (struct mips_elf_link_hash_entry
*) entry
;
10004 if (h
->forced_local
)
10006 h
->forced_local
= force_local
;
10008 dynobj
= elf_hash_table (info
)->dynobj
;
10009 htab
= mips_elf_hash_table (info
);
10010 if (dynobj
!= NULL
&& force_local
&& h
->root
.type
!= STT_TLS
10011 && (got
= mips_elf_got_section (dynobj
, TRUE
)) != NULL
10012 && (g
= mips_elf_section_data (got
)->u
.got_info
) != NULL
)
10016 struct mips_got_entry e
;
10017 struct mips_got_info
*gg
= g
;
10019 /* Since we're turning what used to be a global symbol into a
10020 local one, bump up the number of local entries of each GOT
10021 that had an entry for it. This will automatically decrease
10022 the number of global entries, since global_gotno is actually
10023 the upper limit of global entries. */
10029 for (g
= g
->next
; g
!= gg
; g
= g
->next
)
10030 if (htab_find (g
->got_entries
, &e
))
10032 BFD_ASSERT (g
->global_gotno
> 0);
10037 /* If this was a global symbol forced into the primary GOT, we
10038 no longer need an entry for it. We can't release the entry
10039 at this point, but we must at least stop counting it as one
10040 of the symbols that required a forced got entry. */
10041 if (h
->root
.got
.offset
== 2)
10043 BFD_ASSERT (gg
->assigned_gotno
> 0);
10044 gg
->assigned_gotno
--;
10047 else if (h
->root
.got
.offset
== 1)
10049 /* check_relocs didn't know that this symbol would be
10050 forced-local, so add an extra local got entry. */
10052 if (htab
->computed_got_sizes
)
10054 /* We'll have treated this symbol as global rather
10056 BFD_ASSERT (g
->global_gotno
> 0);
10060 else if (htab
->is_vxworks
&& h
->root
.needs_plt
)
10062 /* check_relocs didn't know that this symbol would be
10063 forced-local, so add an extra local got entry. */
10065 if (htab
->computed_got_sizes
)
10066 /* The symbol is only used in call relocations, so we'll
10067 have assumed it only needs a .got.plt entry. Increase
10068 the size of .got accordingly. */
10069 got
->size
+= MIPS_ELF_GOT_SIZE (dynobj
);
10073 _bfd_elf_link_hash_hide_symbol (info
, &h
->root
, force_local
);
10076 #define PDR_SIZE 32
10079 _bfd_mips_elf_discard_info (bfd
*abfd
, struct elf_reloc_cookie
*cookie
,
10080 struct bfd_link_info
*info
)
10083 bfd_boolean ret
= FALSE
;
10084 unsigned char *tdata
;
10087 o
= bfd_get_section_by_name (abfd
, ".pdr");
10092 if (o
->size
% PDR_SIZE
!= 0)
10094 if (o
->output_section
!= NULL
10095 && bfd_is_abs_section (o
->output_section
))
10098 tdata
= bfd_zmalloc (o
->size
/ PDR_SIZE
);
10102 cookie
->rels
= _bfd_elf_link_read_relocs (abfd
, o
, NULL
, NULL
,
10103 info
->keep_memory
);
10110 cookie
->rel
= cookie
->rels
;
10111 cookie
->relend
= cookie
->rels
+ o
->reloc_count
;
10113 for (i
= 0, skip
= 0; i
< o
->size
/ PDR_SIZE
; i
++)
10115 if (bfd_elf_reloc_symbol_deleted_p (i
* PDR_SIZE
, cookie
))
10124 mips_elf_section_data (o
)->u
.tdata
= tdata
;
10125 o
->size
-= skip
* PDR_SIZE
;
10131 if (! info
->keep_memory
)
10132 free (cookie
->rels
);
10138 _bfd_mips_elf_ignore_discarded_relocs (asection
*sec
)
10140 if (strcmp (sec
->name
, ".pdr") == 0)
10146 _bfd_mips_elf_write_section (bfd
*output_bfd
,
10147 struct bfd_link_info
*link_info ATTRIBUTE_UNUSED
,
10148 asection
*sec
, bfd_byte
*contents
)
10150 bfd_byte
*to
, *from
, *end
;
10153 if (strcmp (sec
->name
, ".pdr") != 0)
10156 if (mips_elf_section_data (sec
)->u
.tdata
== NULL
)
10160 end
= contents
+ sec
->size
;
10161 for (from
= contents
, i
= 0;
10163 from
+= PDR_SIZE
, i
++)
10165 if ((mips_elf_section_data (sec
)->u
.tdata
)[i
] == 1)
10168 memcpy (to
, from
, PDR_SIZE
);
10171 bfd_set_section_contents (output_bfd
, sec
->output_section
, contents
,
10172 sec
->output_offset
, sec
->size
);
10176 /* MIPS ELF uses a special find_nearest_line routine in order the
10177 handle the ECOFF debugging information. */
10179 struct mips_elf_find_line
10181 struct ecoff_debug_info d
;
10182 struct ecoff_find_line i
;
10186 _bfd_mips_elf_find_nearest_line (bfd
*abfd
, asection
*section
,
10187 asymbol
**symbols
, bfd_vma offset
,
10188 const char **filename_ptr
,
10189 const char **functionname_ptr
,
10190 unsigned int *line_ptr
)
10194 if (_bfd_dwarf1_find_nearest_line (abfd
, section
, symbols
, offset
,
10195 filename_ptr
, functionname_ptr
,
10199 if (_bfd_dwarf2_find_nearest_line (abfd
, section
, symbols
, offset
,
10200 filename_ptr
, functionname_ptr
,
10201 line_ptr
, ABI_64_P (abfd
) ? 8 : 0,
10202 &elf_tdata (abfd
)->dwarf2_find_line_info
))
10205 msec
= bfd_get_section_by_name (abfd
, ".mdebug");
10208 flagword origflags
;
10209 struct mips_elf_find_line
*fi
;
10210 const struct ecoff_debug_swap
* const swap
=
10211 get_elf_backend_data (abfd
)->elf_backend_ecoff_debug_swap
;
10213 /* If we are called during a link, mips_elf_final_link may have
10214 cleared the SEC_HAS_CONTENTS field. We force it back on here
10215 if appropriate (which it normally will be). */
10216 origflags
= msec
->flags
;
10217 if (elf_section_data (msec
)->this_hdr
.sh_type
!= SHT_NOBITS
)
10218 msec
->flags
|= SEC_HAS_CONTENTS
;
10220 fi
= elf_tdata (abfd
)->find_line_info
;
10223 bfd_size_type external_fdr_size
;
10226 struct fdr
*fdr_ptr
;
10227 bfd_size_type amt
= sizeof (struct mips_elf_find_line
);
10229 fi
= bfd_zalloc (abfd
, amt
);
10232 msec
->flags
= origflags
;
10236 if (! _bfd_mips_elf_read_ecoff_info (abfd
, msec
, &fi
->d
))
10238 msec
->flags
= origflags
;
10242 /* Swap in the FDR information. */
10243 amt
= fi
->d
.symbolic_header
.ifdMax
* sizeof (struct fdr
);
10244 fi
->d
.fdr
= bfd_alloc (abfd
, amt
);
10245 if (fi
->d
.fdr
== NULL
)
10247 msec
->flags
= origflags
;
10250 external_fdr_size
= swap
->external_fdr_size
;
10251 fdr_ptr
= fi
->d
.fdr
;
10252 fraw_src
= (char *) fi
->d
.external_fdr
;
10253 fraw_end
= (fraw_src
10254 + fi
->d
.symbolic_header
.ifdMax
* external_fdr_size
);
10255 for (; fraw_src
< fraw_end
; fraw_src
+= external_fdr_size
, fdr_ptr
++)
10256 (*swap
->swap_fdr_in
) (abfd
, fraw_src
, fdr_ptr
);
10258 elf_tdata (abfd
)->find_line_info
= fi
;
10260 /* Note that we don't bother to ever free this information.
10261 find_nearest_line is either called all the time, as in
10262 objdump -l, so the information should be saved, or it is
10263 rarely called, as in ld error messages, so the memory
10264 wasted is unimportant. Still, it would probably be a
10265 good idea for free_cached_info to throw it away. */
10268 if (_bfd_ecoff_locate_line (abfd
, section
, offset
, &fi
->d
, swap
,
10269 &fi
->i
, filename_ptr
, functionname_ptr
,
10272 msec
->flags
= origflags
;
10276 msec
->flags
= origflags
;
10279 /* Fall back on the generic ELF find_nearest_line routine. */
10281 return _bfd_elf_find_nearest_line (abfd
, section
, symbols
, offset
,
10282 filename_ptr
, functionname_ptr
,
10287 _bfd_mips_elf_find_inliner_info (bfd
*abfd
,
10288 const char **filename_ptr
,
10289 const char **functionname_ptr
,
10290 unsigned int *line_ptr
)
10293 found
= _bfd_dwarf2_find_inliner_info (abfd
, filename_ptr
,
10294 functionname_ptr
, line_ptr
,
10295 & elf_tdata (abfd
)->dwarf2_find_line_info
);
10300 /* When are writing out the .options or .MIPS.options section,
10301 remember the bytes we are writing out, so that we can install the
10302 GP value in the section_processing routine. */
10305 _bfd_mips_elf_set_section_contents (bfd
*abfd
, sec_ptr section
,
10306 const void *location
,
10307 file_ptr offset
, bfd_size_type count
)
10309 if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section
->name
))
10313 if (elf_section_data (section
) == NULL
)
10315 bfd_size_type amt
= sizeof (struct bfd_elf_section_data
);
10316 section
->used_by_bfd
= bfd_zalloc (abfd
, amt
);
10317 if (elf_section_data (section
) == NULL
)
10320 c
= mips_elf_section_data (section
)->u
.tdata
;
10323 c
= bfd_zalloc (abfd
, section
->size
);
10326 mips_elf_section_data (section
)->u
.tdata
= c
;
10329 memcpy (c
+ offset
, location
, count
);
10332 return _bfd_elf_set_section_contents (abfd
, section
, location
, offset
,
10336 /* This is almost identical to bfd_generic_get_... except that some
10337 MIPS relocations need to be handled specially. Sigh. */
10340 _bfd_elf_mips_get_relocated_section_contents
10342 struct bfd_link_info
*link_info
,
10343 struct bfd_link_order
*link_order
,
10345 bfd_boolean relocatable
,
10348 /* Get enough memory to hold the stuff */
10349 bfd
*input_bfd
= link_order
->u
.indirect
.section
->owner
;
10350 asection
*input_section
= link_order
->u
.indirect
.section
;
10353 long reloc_size
= bfd_get_reloc_upper_bound (input_bfd
, input_section
);
10354 arelent
**reloc_vector
= NULL
;
10357 if (reloc_size
< 0)
10360 reloc_vector
= bfd_malloc (reloc_size
);
10361 if (reloc_vector
== NULL
&& reloc_size
!= 0)
10364 /* read in the section */
10365 sz
= input_section
->rawsize
? input_section
->rawsize
: input_section
->size
;
10366 if (!bfd_get_section_contents (input_bfd
, input_section
, data
, 0, sz
))
10369 reloc_count
= bfd_canonicalize_reloc (input_bfd
,
10373 if (reloc_count
< 0)
10376 if (reloc_count
> 0)
10381 bfd_vma gp
= 0x12345678; /* initialize just to shut gcc up */
10384 struct bfd_hash_entry
*h
;
10385 struct bfd_link_hash_entry
*lh
;
10386 /* Skip all this stuff if we aren't mixing formats. */
10387 if (abfd
&& input_bfd
10388 && abfd
->xvec
== input_bfd
->xvec
)
10392 h
= bfd_hash_lookup (&link_info
->hash
->table
, "_gp", FALSE
, FALSE
);
10393 lh
= (struct bfd_link_hash_entry
*) h
;
10400 case bfd_link_hash_undefined
:
10401 case bfd_link_hash_undefweak
:
10402 case bfd_link_hash_common
:
10405 case bfd_link_hash_defined
:
10406 case bfd_link_hash_defweak
:
10408 gp
= lh
->u
.def
.value
;
10410 case bfd_link_hash_indirect
:
10411 case bfd_link_hash_warning
:
10413 /* @@FIXME ignoring warning for now */
10415 case bfd_link_hash_new
:
10424 for (parent
= reloc_vector
; *parent
!= NULL
; parent
++)
10426 char *error_message
= NULL
;
10427 bfd_reloc_status_type r
;
10429 /* Specific to MIPS: Deal with relocation types that require
10430 knowing the gp of the output bfd. */
10431 asymbol
*sym
= *(*parent
)->sym_ptr_ptr
;
10433 /* If we've managed to find the gp and have a special
10434 function for the relocation then go ahead, else default
10435 to the generic handling. */
10437 && (*parent
)->howto
->special_function
10438 == _bfd_mips_elf32_gprel16_reloc
)
10439 r
= _bfd_mips_elf_gprel16_with_gp (input_bfd
, sym
, *parent
,
10440 input_section
, relocatable
,
10443 r
= bfd_perform_relocation (input_bfd
, *parent
, data
,
10445 relocatable
? abfd
: NULL
,
10450 asection
*os
= input_section
->output_section
;
10452 /* A partial link, so keep the relocs */
10453 os
->orelocation
[os
->reloc_count
] = *parent
;
10457 if (r
!= bfd_reloc_ok
)
10461 case bfd_reloc_undefined
:
10462 if (!((*link_info
->callbacks
->undefined_symbol
)
10463 (link_info
, bfd_asymbol_name (*(*parent
)->sym_ptr_ptr
),
10464 input_bfd
, input_section
, (*parent
)->address
, TRUE
)))
10467 case bfd_reloc_dangerous
:
10468 BFD_ASSERT (error_message
!= NULL
);
10469 if (!((*link_info
->callbacks
->reloc_dangerous
)
10470 (link_info
, error_message
, input_bfd
, input_section
,
10471 (*parent
)->address
)))
10474 case bfd_reloc_overflow
:
10475 if (!((*link_info
->callbacks
->reloc_overflow
)
10477 bfd_asymbol_name (*(*parent
)->sym_ptr_ptr
),
10478 (*parent
)->howto
->name
, (*parent
)->addend
,
10479 input_bfd
, input_section
, (*parent
)->address
)))
10482 case bfd_reloc_outofrange
:
10491 if (reloc_vector
!= NULL
)
10492 free (reloc_vector
);
10496 if (reloc_vector
!= NULL
)
10497 free (reloc_vector
);
10501 /* Create a MIPS ELF linker hash table. */
10503 struct bfd_link_hash_table
*
10504 _bfd_mips_elf_link_hash_table_create (bfd
*abfd
)
10506 struct mips_elf_link_hash_table
*ret
;
10507 bfd_size_type amt
= sizeof (struct mips_elf_link_hash_table
);
10509 ret
= bfd_malloc (amt
);
10513 if (!_bfd_elf_link_hash_table_init (&ret
->root
, abfd
,
10514 mips_elf_link_hash_newfunc
,
10515 sizeof (struct mips_elf_link_hash_entry
)))
10522 /* We no longer use this. */
10523 for (i
= 0; i
< SIZEOF_MIPS_DYNSYM_SECNAMES
; i
++)
10524 ret
->dynsym_sec_strindex
[i
] = (bfd_size_type
) -1;
10526 ret
->procedure_count
= 0;
10527 ret
->compact_rel_size
= 0;
10528 ret
->use_rld_obj_head
= FALSE
;
10529 ret
->rld_value
= 0;
10530 ret
->mips16_stubs_seen
= FALSE
;
10531 ret
->computed_got_sizes
= FALSE
;
10532 ret
->is_vxworks
= FALSE
;
10533 ret
->small_data_overflow_reported
= FALSE
;
10534 ret
->srelbss
= NULL
;
10535 ret
->sdynbss
= NULL
;
10536 ret
->srelplt
= NULL
;
10537 ret
->srelplt2
= NULL
;
10538 ret
->sgotplt
= NULL
;
10540 ret
->plt_header_size
= 0;
10541 ret
->plt_entry_size
= 0;
10542 ret
->function_stub_size
= 0;
10544 return &ret
->root
.root
;
10547 /* Likewise, but indicate that the target is VxWorks. */
10549 struct bfd_link_hash_table
*
10550 _bfd_mips_vxworks_link_hash_table_create (bfd
*abfd
)
10552 struct bfd_link_hash_table
*ret
;
10554 ret
= _bfd_mips_elf_link_hash_table_create (abfd
);
10557 struct mips_elf_link_hash_table
*htab
;
10559 htab
= (struct mips_elf_link_hash_table
*) ret
;
10560 htab
->is_vxworks
= 1;
10565 /* We need to use a special link routine to handle the .reginfo and
10566 the .mdebug sections. We need to merge all instances of these
10567 sections together, not write them all out sequentially. */
10570 _bfd_mips_elf_final_link (bfd
*abfd
, struct bfd_link_info
*info
)
10573 struct bfd_link_order
*p
;
10574 asection
*reginfo_sec
, *mdebug_sec
, *gptab_data_sec
, *gptab_bss_sec
;
10575 asection
*rtproc_sec
;
10576 Elf32_RegInfo reginfo
;
10577 struct ecoff_debug_info debug
;
10578 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
10579 const struct ecoff_debug_swap
*swap
= bed
->elf_backend_ecoff_debug_swap
;
10580 HDRR
*symhdr
= &debug
.symbolic_header
;
10581 void *mdebug_handle
= NULL
;
10586 struct mips_elf_link_hash_table
*htab
;
10588 static const char * const secname
[] =
10590 ".text", ".init", ".fini", ".data",
10591 ".rodata", ".sdata", ".sbss", ".bss"
10593 static const int sc
[] =
10595 scText
, scInit
, scFini
, scData
,
10596 scRData
, scSData
, scSBss
, scBss
10599 /* We'd carefully arranged the dynamic symbol indices, and then the
10600 generic size_dynamic_sections renumbered them out from under us.
10601 Rather than trying somehow to prevent the renumbering, just do
10603 htab
= mips_elf_hash_table (info
);
10604 if (elf_hash_table (info
)->dynamic_sections_created
)
10608 struct mips_got_info
*g
;
10609 bfd_size_type dynsecsymcount
;
10611 /* When we resort, we must tell mips_elf_sort_hash_table what
10612 the lowest index it may use is. That's the number of section
10613 symbols we're going to add. The generic ELF linker only
10614 adds these symbols when building a shared object. Note that
10615 we count the sections after (possibly) removing the .options
10618 dynsecsymcount
= count_section_dynsyms (abfd
, info
);
10619 if (! mips_elf_sort_hash_table (info
, dynsecsymcount
+ 1))
10622 /* Make sure we didn't grow the global .got region. */
10623 dynobj
= elf_hash_table (info
)->dynobj
;
10624 got
= mips_elf_got_section (dynobj
, FALSE
);
10625 g
= mips_elf_section_data (got
)->u
.got_info
;
10627 if (g
->global_gotsym
!= NULL
)
10628 BFD_ASSERT ((elf_hash_table (info
)->dynsymcount
10629 - g
->global_gotsym
->dynindx
)
10630 <= g
->global_gotno
);
10633 /* Get a value for the GP register. */
10634 if (elf_gp (abfd
) == 0)
10636 struct bfd_link_hash_entry
*h
;
10638 h
= bfd_link_hash_lookup (info
->hash
, "_gp", FALSE
, FALSE
, TRUE
);
10639 if (h
!= NULL
&& h
->type
== bfd_link_hash_defined
)
10640 elf_gp (abfd
) = (h
->u
.def
.value
10641 + h
->u
.def
.section
->output_section
->vma
10642 + h
->u
.def
.section
->output_offset
);
10643 else if (htab
->is_vxworks
10644 && (h
= bfd_link_hash_lookup (info
->hash
,
10645 "_GLOBAL_OFFSET_TABLE_",
10646 FALSE
, FALSE
, TRUE
))
10647 && h
->type
== bfd_link_hash_defined
)
10648 elf_gp (abfd
) = (h
->u
.def
.section
->output_section
->vma
10649 + h
->u
.def
.section
->output_offset
10651 else if (info
->relocatable
)
10653 bfd_vma lo
= MINUS_ONE
;
10655 /* Find the GP-relative section with the lowest offset. */
10656 for (o
= abfd
->sections
; o
!= NULL
; o
= o
->next
)
10658 && (elf_section_data (o
)->this_hdr
.sh_flags
& SHF_MIPS_GPREL
))
10661 /* And calculate GP relative to that. */
10662 elf_gp (abfd
) = lo
+ ELF_MIPS_GP_OFFSET (info
);
10666 /* If the relocate_section function needs to do a reloc
10667 involving the GP value, it should make a reloc_dangerous
10668 callback to warn that GP is not defined. */
10672 /* Go through the sections and collect the .reginfo and .mdebug
10674 reginfo_sec
= NULL
;
10676 gptab_data_sec
= NULL
;
10677 gptab_bss_sec
= NULL
;
10678 for (o
= abfd
->sections
; o
!= NULL
; o
= o
->next
)
10680 if (strcmp (o
->name
, ".reginfo") == 0)
10682 memset (®info
, 0, sizeof reginfo
);
10684 /* We have found the .reginfo section in the output file.
10685 Look through all the link_orders comprising it and merge
10686 the information together. */
10687 for (p
= o
->map_head
.link_order
; p
!= NULL
; p
= p
->next
)
10689 asection
*input_section
;
10691 Elf32_External_RegInfo ext
;
10694 if (p
->type
!= bfd_indirect_link_order
)
10696 if (p
->type
== bfd_data_link_order
)
10701 input_section
= p
->u
.indirect
.section
;
10702 input_bfd
= input_section
->owner
;
10704 if (! bfd_get_section_contents (input_bfd
, input_section
,
10705 &ext
, 0, sizeof ext
))
10708 bfd_mips_elf32_swap_reginfo_in (input_bfd
, &ext
, &sub
);
10710 reginfo
.ri_gprmask
|= sub
.ri_gprmask
;
10711 reginfo
.ri_cprmask
[0] |= sub
.ri_cprmask
[0];
10712 reginfo
.ri_cprmask
[1] |= sub
.ri_cprmask
[1];
10713 reginfo
.ri_cprmask
[2] |= sub
.ri_cprmask
[2];
10714 reginfo
.ri_cprmask
[3] |= sub
.ri_cprmask
[3];
10716 /* ri_gp_value is set by the function
10717 mips_elf32_section_processing when the section is
10718 finally written out. */
10720 /* Hack: reset the SEC_HAS_CONTENTS flag so that
10721 elf_link_input_bfd ignores this section. */
10722 input_section
->flags
&= ~SEC_HAS_CONTENTS
;
10725 /* Size has been set in _bfd_mips_elf_always_size_sections. */
10726 BFD_ASSERT(o
->size
== sizeof (Elf32_External_RegInfo
));
10728 /* Skip this section later on (I don't think this currently
10729 matters, but someday it might). */
10730 o
->map_head
.link_order
= NULL
;
10735 if (strcmp (o
->name
, ".mdebug") == 0)
10737 struct extsym_info einfo
;
10740 /* We have found the .mdebug section in the output file.
10741 Look through all the link_orders comprising it and merge
10742 the information together. */
10743 symhdr
->magic
= swap
->sym_magic
;
10744 /* FIXME: What should the version stamp be? */
10745 symhdr
->vstamp
= 0;
10746 symhdr
->ilineMax
= 0;
10747 symhdr
->cbLine
= 0;
10748 symhdr
->idnMax
= 0;
10749 symhdr
->ipdMax
= 0;
10750 symhdr
->isymMax
= 0;
10751 symhdr
->ioptMax
= 0;
10752 symhdr
->iauxMax
= 0;
10753 symhdr
->issMax
= 0;
10754 symhdr
->issExtMax
= 0;
10755 symhdr
->ifdMax
= 0;
10757 symhdr
->iextMax
= 0;
10759 /* We accumulate the debugging information itself in the
10760 debug_info structure. */
10762 debug
.external_dnr
= NULL
;
10763 debug
.external_pdr
= NULL
;
10764 debug
.external_sym
= NULL
;
10765 debug
.external_opt
= NULL
;
10766 debug
.external_aux
= NULL
;
10768 debug
.ssext
= debug
.ssext_end
= NULL
;
10769 debug
.external_fdr
= NULL
;
10770 debug
.external_rfd
= NULL
;
10771 debug
.external_ext
= debug
.external_ext_end
= NULL
;
10773 mdebug_handle
= bfd_ecoff_debug_init (abfd
, &debug
, swap
, info
);
10774 if (mdebug_handle
== NULL
)
10778 esym
.cobol_main
= 0;
10782 esym
.asym
.iss
= issNil
;
10783 esym
.asym
.st
= stLocal
;
10784 esym
.asym
.reserved
= 0;
10785 esym
.asym
.index
= indexNil
;
10787 for (i
= 0; i
< sizeof (secname
) / sizeof (secname
[0]); i
++)
10789 esym
.asym
.sc
= sc
[i
];
10790 s
= bfd_get_section_by_name (abfd
, secname
[i
]);
10793 esym
.asym
.value
= s
->vma
;
10794 last
= s
->vma
+ s
->size
;
10797 esym
.asym
.value
= last
;
10798 if (!bfd_ecoff_debug_one_external (abfd
, &debug
, swap
,
10799 secname
[i
], &esym
))
10803 for (p
= o
->map_head
.link_order
; p
!= NULL
; p
= p
->next
)
10805 asection
*input_section
;
10807 const struct ecoff_debug_swap
*input_swap
;
10808 struct ecoff_debug_info input_debug
;
10812 if (p
->type
!= bfd_indirect_link_order
)
10814 if (p
->type
== bfd_data_link_order
)
10819 input_section
= p
->u
.indirect
.section
;
10820 input_bfd
= input_section
->owner
;
10822 if (bfd_get_flavour (input_bfd
) != bfd_target_elf_flavour
10823 || (get_elf_backend_data (input_bfd
)
10824 ->elf_backend_ecoff_debug_swap
) == NULL
)
10826 /* I don't know what a non MIPS ELF bfd would be
10827 doing with a .mdebug section, but I don't really
10828 want to deal with it. */
10832 input_swap
= (get_elf_backend_data (input_bfd
)
10833 ->elf_backend_ecoff_debug_swap
);
10835 BFD_ASSERT (p
->size
== input_section
->size
);
10837 /* The ECOFF linking code expects that we have already
10838 read in the debugging information and set up an
10839 ecoff_debug_info structure, so we do that now. */
10840 if (! _bfd_mips_elf_read_ecoff_info (input_bfd
, input_section
,
10844 if (! (bfd_ecoff_debug_accumulate
10845 (mdebug_handle
, abfd
, &debug
, swap
, input_bfd
,
10846 &input_debug
, input_swap
, info
)))
10849 /* Loop through the external symbols. For each one with
10850 interesting information, try to find the symbol in
10851 the linker global hash table and save the information
10852 for the output external symbols. */
10853 eraw_src
= input_debug
.external_ext
;
10854 eraw_end
= (eraw_src
10855 + (input_debug
.symbolic_header
.iextMax
10856 * input_swap
->external_ext_size
));
10858 eraw_src
< eraw_end
;
10859 eraw_src
+= input_swap
->external_ext_size
)
10863 struct mips_elf_link_hash_entry
*h
;
10865 (*input_swap
->swap_ext_in
) (input_bfd
, eraw_src
, &ext
);
10866 if (ext
.asym
.sc
== scNil
10867 || ext
.asym
.sc
== scUndefined
10868 || ext
.asym
.sc
== scSUndefined
)
10871 name
= input_debug
.ssext
+ ext
.asym
.iss
;
10872 h
= mips_elf_link_hash_lookup (mips_elf_hash_table (info
),
10873 name
, FALSE
, FALSE
, TRUE
);
10874 if (h
== NULL
|| h
->esym
.ifd
!= -2)
10879 BFD_ASSERT (ext
.ifd
10880 < input_debug
.symbolic_header
.ifdMax
);
10881 ext
.ifd
= input_debug
.ifdmap
[ext
.ifd
];
10887 /* Free up the information we just read. */
10888 free (input_debug
.line
);
10889 free (input_debug
.external_dnr
);
10890 free (input_debug
.external_pdr
);
10891 free (input_debug
.external_sym
);
10892 free (input_debug
.external_opt
);
10893 free (input_debug
.external_aux
);
10894 free (input_debug
.ss
);
10895 free (input_debug
.ssext
);
10896 free (input_debug
.external_fdr
);
10897 free (input_debug
.external_rfd
);
10898 free (input_debug
.external_ext
);
10900 /* Hack: reset the SEC_HAS_CONTENTS flag so that
10901 elf_link_input_bfd ignores this section. */
10902 input_section
->flags
&= ~SEC_HAS_CONTENTS
;
10905 if (SGI_COMPAT (abfd
) && info
->shared
)
10907 /* Create .rtproc section. */
10908 rtproc_sec
= bfd_get_section_by_name (abfd
, ".rtproc");
10909 if (rtproc_sec
== NULL
)
10911 flagword flags
= (SEC_HAS_CONTENTS
| SEC_IN_MEMORY
10912 | SEC_LINKER_CREATED
| SEC_READONLY
);
10914 rtproc_sec
= bfd_make_section_with_flags (abfd
,
10917 if (rtproc_sec
== NULL
10918 || ! bfd_set_section_alignment (abfd
, rtproc_sec
, 4))
10922 if (! mips_elf_create_procedure_table (mdebug_handle
, abfd
,
10928 /* Build the external symbol information. */
10931 einfo
.debug
= &debug
;
10933 einfo
.failed
= FALSE
;
10934 mips_elf_link_hash_traverse (mips_elf_hash_table (info
),
10935 mips_elf_output_extsym
, &einfo
);
10939 /* Set the size of the .mdebug section. */
10940 o
->size
= bfd_ecoff_debug_size (abfd
, &debug
, swap
);
10942 /* Skip this section later on (I don't think this currently
10943 matters, but someday it might). */
10944 o
->map_head
.link_order
= NULL
;
10949 if (CONST_STRNEQ (o
->name
, ".gptab."))
10951 const char *subname
;
10954 Elf32_External_gptab
*ext_tab
;
10957 /* The .gptab.sdata and .gptab.sbss sections hold
10958 information describing how the small data area would
10959 change depending upon the -G switch. These sections
10960 not used in executables files. */
10961 if (! info
->relocatable
)
10963 for (p
= o
->map_head
.link_order
; p
!= NULL
; p
= p
->next
)
10965 asection
*input_section
;
10967 if (p
->type
!= bfd_indirect_link_order
)
10969 if (p
->type
== bfd_data_link_order
)
10974 input_section
= p
->u
.indirect
.section
;
10976 /* Hack: reset the SEC_HAS_CONTENTS flag so that
10977 elf_link_input_bfd ignores this section. */
10978 input_section
->flags
&= ~SEC_HAS_CONTENTS
;
10981 /* Skip this section later on (I don't think this
10982 currently matters, but someday it might). */
10983 o
->map_head
.link_order
= NULL
;
10985 /* Really remove the section. */
10986 bfd_section_list_remove (abfd
, o
);
10987 --abfd
->section_count
;
10992 /* There is one gptab for initialized data, and one for
10993 uninitialized data. */
10994 if (strcmp (o
->name
, ".gptab.sdata") == 0)
10995 gptab_data_sec
= o
;
10996 else if (strcmp (o
->name
, ".gptab.sbss") == 0)
11000 (*_bfd_error_handler
)
11001 (_("%s: illegal section name `%s'"),
11002 bfd_get_filename (abfd
), o
->name
);
11003 bfd_set_error (bfd_error_nonrepresentable_section
);
11007 /* The linker script always combines .gptab.data and
11008 .gptab.sdata into .gptab.sdata, and likewise for
11009 .gptab.bss and .gptab.sbss. It is possible that there is
11010 no .sdata or .sbss section in the output file, in which
11011 case we must change the name of the output section. */
11012 subname
= o
->name
+ sizeof ".gptab" - 1;
11013 if (bfd_get_section_by_name (abfd
, subname
) == NULL
)
11015 if (o
== gptab_data_sec
)
11016 o
->name
= ".gptab.data";
11018 o
->name
= ".gptab.bss";
11019 subname
= o
->name
+ sizeof ".gptab" - 1;
11020 BFD_ASSERT (bfd_get_section_by_name (abfd
, subname
) != NULL
);
11023 /* Set up the first entry. */
11025 amt
= c
* sizeof (Elf32_gptab
);
11026 tab
= bfd_malloc (amt
);
11029 tab
[0].gt_header
.gt_current_g_value
= elf_gp_size (abfd
);
11030 tab
[0].gt_header
.gt_unused
= 0;
11032 /* Combine the input sections. */
11033 for (p
= o
->map_head
.link_order
; p
!= NULL
; p
= p
->next
)
11035 asection
*input_section
;
11037 bfd_size_type size
;
11038 unsigned long last
;
11039 bfd_size_type gpentry
;
11041 if (p
->type
!= bfd_indirect_link_order
)
11043 if (p
->type
== bfd_data_link_order
)
11048 input_section
= p
->u
.indirect
.section
;
11049 input_bfd
= input_section
->owner
;
11051 /* Combine the gptab entries for this input section one
11052 by one. We know that the input gptab entries are
11053 sorted by ascending -G value. */
11054 size
= input_section
->size
;
11056 for (gpentry
= sizeof (Elf32_External_gptab
);
11058 gpentry
+= sizeof (Elf32_External_gptab
))
11060 Elf32_External_gptab ext_gptab
;
11061 Elf32_gptab int_gptab
;
11067 if (! (bfd_get_section_contents
11068 (input_bfd
, input_section
, &ext_gptab
, gpentry
,
11069 sizeof (Elf32_External_gptab
))))
11075 bfd_mips_elf32_swap_gptab_in (input_bfd
, &ext_gptab
,
11077 val
= int_gptab
.gt_entry
.gt_g_value
;
11078 add
= int_gptab
.gt_entry
.gt_bytes
- last
;
11081 for (look
= 1; look
< c
; look
++)
11083 if (tab
[look
].gt_entry
.gt_g_value
>= val
)
11084 tab
[look
].gt_entry
.gt_bytes
+= add
;
11086 if (tab
[look
].gt_entry
.gt_g_value
== val
)
11092 Elf32_gptab
*new_tab
;
11095 /* We need a new table entry. */
11096 amt
= (bfd_size_type
) (c
+ 1) * sizeof (Elf32_gptab
);
11097 new_tab
= bfd_realloc (tab
, amt
);
11098 if (new_tab
== NULL
)
11104 tab
[c
].gt_entry
.gt_g_value
= val
;
11105 tab
[c
].gt_entry
.gt_bytes
= add
;
11107 /* Merge in the size for the next smallest -G
11108 value, since that will be implied by this new
11111 for (look
= 1; look
< c
; look
++)
11113 if (tab
[look
].gt_entry
.gt_g_value
< val
11115 || (tab
[look
].gt_entry
.gt_g_value
11116 > tab
[max
].gt_entry
.gt_g_value
)))
11120 tab
[c
].gt_entry
.gt_bytes
+=
11121 tab
[max
].gt_entry
.gt_bytes
;
11126 last
= int_gptab
.gt_entry
.gt_bytes
;
11129 /* Hack: reset the SEC_HAS_CONTENTS flag so that
11130 elf_link_input_bfd ignores this section. */
11131 input_section
->flags
&= ~SEC_HAS_CONTENTS
;
11134 /* The table must be sorted by -G value. */
11136 qsort (tab
+ 1, c
- 1, sizeof (tab
[0]), gptab_compare
);
11138 /* Swap out the table. */
11139 amt
= (bfd_size_type
) c
* sizeof (Elf32_External_gptab
);
11140 ext_tab
= bfd_alloc (abfd
, amt
);
11141 if (ext_tab
== NULL
)
11147 for (j
= 0; j
< c
; j
++)
11148 bfd_mips_elf32_swap_gptab_out (abfd
, tab
+ j
, ext_tab
+ j
);
11151 o
->size
= c
* sizeof (Elf32_External_gptab
);
11152 o
->contents
= (bfd_byte
*) ext_tab
;
11154 /* Skip this section later on (I don't think this currently
11155 matters, but someday it might). */
11156 o
->map_head
.link_order
= NULL
;
11160 /* Invoke the regular ELF backend linker to do all the work. */
11161 if (!bfd_elf_final_link (abfd
, info
))
11164 /* Now write out the computed sections. */
11166 if (reginfo_sec
!= NULL
)
11168 Elf32_External_RegInfo ext
;
11170 bfd_mips_elf32_swap_reginfo_out (abfd
, ®info
, &ext
);
11171 if (! bfd_set_section_contents (abfd
, reginfo_sec
, &ext
, 0, sizeof ext
))
11175 if (mdebug_sec
!= NULL
)
11177 BFD_ASSERT (abfd
->output_has_begun
);
11178 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle
, abfd
, &debug
,
11180 mdebug_sec
->filepos
))
11183 bfd_ecoff_debug_free (mdebug_handle
, abfd
, &debug
, swap
, info
);
11186 if (gptab_data_sec
!= NULL
)
11188 if (! bfd_set_section_contents (abfd
, gptab_data_sec
,
11189 gptab_data_sec
->contents
,
11190 0, gptab_data_sec
->size
))
11194 if (gptab_bss_sec
!= NULL
)
11196 if (! bfd_set_section_contents (abfd
, gptab_bss_sec
,
11197 gptab_bss_sec
->contents
,
11198 0, gptab_bss_sec
->size
))
11202 if (SGI_COMPAT (abfd
))
11204 rtproc_sec
= bfd_get_section_by_name (abfd
, ".rtproc");
11205 if (rtproc_sec
!= NULL
)
11207 if (! bfd_set_section_contents (abfd
, rtproc_sec
,
11208 rtproc_sec
->contents
,
11209 0, rtproc_sec
->size
))
11217 /* Structure for saying that BFD machine EXTENSION extends BASE. */
11219 struct mips_mach_extension
{
11220 unsigned long extension
, base
;
11224 /* An array describing how BFD machines relate to one another. The entries
11225 are ordered topologically with MIPS I extensions listed last. */
11227 static const struct mips_mach_extension mips_mach_extensions
[] = {
11228 /* MIPS64r2 extensions. */
11229 { bfd_mach_mips_octeon
, bfd_mach_mipsisa64r2
},
11231 /* MIPS64 extensions. */
11232 { bfd_mach_mipsisa64r2
, bfd_mach_mipsisa64
},
11233 { bfd_mach_mips_sb1
, bfd_mach_mipsisa64
},
11235 /* MIPS V extensions. */
11236 { bfd_mach_mipsisa64
, bfd_mach_mips5
},
11238 /* R10000 extensions. */
11239 { bfd_mach_mips12000
, bfd_mach_mips10000
},
11241 /* R5000 extensions. Note: the vr5500 ISA is an extension of the core
11242 vr5400 ISA, but doesn't include the multimedia stuff. It seems
11243 better to allow vr5400 and vr5500 code to be merged anyway, since
11244 many libraries will just use the core ISA. Perhaps we could add
11245 some sort of ASE flag if this ever proves a problem. */
11246 { bfd_mach_mips5500
, bfd_mach_mips5400
},
11247 { bfd_mach_mips5400
, bfd_mach_mips5000
},
11249 /* MIPS IV extensions. */
11250 { bfd_mach_mips5
, bfd_mach_mips8000
},
11251 { bfd_mach_mips10000
, bfd_mach_mips8000
},
11252 { bfd_mach_mips5000
, bfd_mach_mips8000
},
11253 { bfd_mach_mips7000
, bfd_mach_mips8000
},
11254 { bfd_mach_mips9000
, bfd_mach_mips8000
},
11256 /* VR4100 extensions. */
11257 { bfd_mach_mips4120
, bfd_mach_mips4100
},
11258 { bfd_mach_mips4111
, bfd_mach_mips4100
},
11260 /* MIPS III extensions. */
11261 { bfd_mach_mips_loongson_2e
, bfd_mach_mips4000
},
11262 { bfd_mach_mips_loongson_2f
, bfd_mach_mips4000
},
11263 { bfd_mach_mips8000
, bfd_mach_mips4000
},
11264 { bfd_mach_mips4650
, bfd_mach_mips4000
},
11265 { bfd_mach_mips4600
, bfd_mach_mips4000
},
11266 { bfd_mach_mips4400
, bfd_mach_mips4000
},
11267 { bfd_mach_mips4300
, bfd_mach_mips4000
},
11268 { bfd_mach_mips4100
, bfd_mach_mips4000
},
11269 { bfd_mach_mips4010
, bfd_mach_mips4000
},
11271 /* MIPS32 extensions. */
11272 { bfd_mach_mipsisa32r2
, bfd_mach_mipsisa32
},
11274 /* MIPS II extensions. */
11275 { bfd_mach_mips4000
, bfd_mach_mips6000
},
11276 { bfd_mach_mipsisa32
, bfd_mach_mips6000
},
11278 /* MIPS I extensions. */
11279 { bfd_mach_mips6000
, bfd_mach_mips3000
},
11280 { bfd_mach_mips3900
, bfd_mach_mips3000
}
11284 /* Return true if bfd machine EXTENSION is an extension of machine BASE. */
11287 mips_mach_extends_p (unsigned long base
, unsigned long extension
)
11291 if (extension
== base
)
11294 if (base
== bfd_mach_mipsisa32
11295 && mips_mach_extends_p (bfd_mach_mipsisa64
, extension
))
11298 if (base
== bfd_mach_mipsisa32r2
11299 && mips_mach_extends_p (bfd_mach_mipsisa64r2
, extension
))
11302 for (i
= 0; i
< ARRAY_SIZE (mips_mach_extensions
); i
++)
11303 if (extension
== mips_mach_extensions
[i
].extension
)
11305 extension
= mips_mach_extensions
[i
].base
;
11306 if (extension
== base
)
11314 /* Return true if the given ELF header flags describe a 32-bit binary. */
11317 mips_32bit_flags_p (flagword flags
)
11319 return ((flags
& EF_MIPS_32BITMODE
) != 0
11320 || (flags
& EF_MIPS_ABI
) == E_MIPS_ABI_O32
11321 || (flags
& EF_MIPS_ABI
) == E_MIPS_ABI_EABI32
11322 || (flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_1
11323 || (flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_2
11324 || (flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_32
11325 || (flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_32R2
);
11329 /* Merge object attributes from IBFD into OBFD. Raise an error if
11330 there are conflicting attributes. */
11332 mips_elf_merge_obj_attributes (bfd
*ibfd
, bfd
*obfd
)
11334 obj_attribute
*in_attr
;
11335 obj_attribute
*out_attr
;
11337 if (!elf_known_obj_attributes_proc (obfd
)[0].i
)
11339 /* This is the first object. Copy the attributes. */
11340 _bfd_elf_copy_obj_attributes (ibfd
, obfd
);
11342 /* Use the Tag_null value to indicate the attributes have been
11344 elf_known_obj_attributes_proc (obfd
)[0].i
= 1;
11349 /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
11350 non-conflicting ones. */
11351 in_attr
= elf_known_obj_attributes (ibfd
)[OBJ_ATTR_GNU
];
11352 out_attr
= elf_known_obj_attributes (obfd
)[OBJ_ATTR_GNU
];
11353 if (in_attr
[Tag_GNU_MIPS_ABI_FP
].i
!= out_attr
[Tag_GNU_MIPS_ABI_FP
].i
)
11355 out_attr
[Tag_GNU_MIPS_ABI_FP
].type
= 1;
11356 if (out_attr
[Tag_GNU_MIPS_ABI_FP
].i
== 0)
11357 out_attr
[Tag_GNU_MIPS_ABI_FP
].i
= in_attr
[Tag_GNU_MIPS_ABI_FP
].i
;
11358 else if (in_attr
[Tag_GNU_MIPS_ABI_FP
].i
== 0)
11360 else if (in_attr
[Tag_GNU_MIPS_ABI_FP
].i
> 4)
11362 (_("Warning: %B uses unknown floating point ABI %d"), ibfd
,
11363 in_attr
[Tag_GNU_MIPS_ABI_FP
].i
);
11364 else if (out_attr
[Tag_GNU_MIPS_ABI_FP
].i
> 4)
11366 (_("Warning: %B uses unknown floating point ABI %d"), obfd
,
11367 out_attr
[Tag_GNU_MIPS_ABI_FP
].i
);
11369 switch (out_attr
[Tag_GNU_MIPS_ABI_FP
].i
)
11372 switch (in_attr
[Tag_GNU_MIPS_ABI_FP
].i
)
11376 (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
11382 (_("Warning: %B uses hard float, %B uses soft float"),
11388 (_("Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64"),
11398 switch (in_attr
[Tag_GNU_MIPS_ABI_FP
].i
)
11402 (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
11408 (_("Warning: %B uses hard float, %B uses soft float"),
11414 (_("Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64"),
11424 switch (in_attr
[Tag_GNU_MIPS_ABI_FP
].i
)
11430 (_("Warning: %B uses hard float, %B uses soft float"),
11440 switch (in_attr
[Tag_GNU_MIPS_ABI_FP
].i
)
11444 (_("Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64"),
11450 (_("Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64"),
11456 (_("Warning: %B uses hard float, %B uses soft float"),
11470 /* Merge Tag_compatibility attributes and any common GNU ones. */
11471 _bfd_elf_merge_object_attributes (ibfd
, obfd
);
11476 /* Merge backend specific data from an object file to the output
11477 object file when linking. */
11480 _bfd_mips_elf_merge_private_bfd_data (bfd
*ibfd
, bfd
*obfd
)
11482 flagword old_flags
;
11483 flagword new_flags
;
11485 bfd_boolean null_input_bfd
= TRUE
;
11488 /* Check if we have the same endianess */
11489 if (! _bfd_generic_verify_endian_match (ibfd
, obfd
))
11491 (*_bfd_error_handler
)
11492 (_("%B: endianness incompatible with that of the selected emulation"),
11497 if (bfd_get_flavour (ibfd
) != bfd_target_elf_flavour
11498 || bfd_get_flavour (obfd
) != bfd_target_elf_flavour
)
11501 if (strcmp (bfd_get_target (ibfd
), bfd_get_target (obfd
)) != 0)
11503 (*_bfd_error_handler
)
11504 (_("%B: ABI is incompatible with that of the selected emulation"),
11509 if (!mips_elf_merge_obj_attributes (ibfd
, obfd
))
11512 new_flags
= elf_elfheader (ibfd
)->e_flags
;
11513 elf_elfheader (obfd
)->e_flags
|= new_flags
& EF_MIPS_NOREORDER
;
11514 old_flags
= elf_elfheader (obfd
)->e_flags
;
11516 if (! elf_flags_init (obfd
))
11518 elf_flags_init (obfd
) = TRUE
;
11519 elf_elfheader (obfd
)->e_flags
= new_flags
;
11520 elf_elfheader (obfd
)->e_ident
[EI_CLASS
]
11521 = elf_elfheader (ibfd
)->e_ident
[EI_CLASS
];
11523 if (bfd_get_arch (obfd
) == bfd_get_arch (ibfd
)
11524 && (bfd_get_arch_info (obfd
)->the_default
11525 || mips_mach_extends_p (bfd_get_mach (obfd
),
11526 bfd_get_mach (ibfd
))))
11528 if (! bfd_set_arch_mach (obfd
, bfd_get_arch (ibfd
),
11529 bfd_get_mach (ibfd
)))
11536 /* Check flag compatibility. */
11538 new_flags
&= ~EF_MIPS_NOREORDER
;
11539 old_flags
&= ~EF_MIPS_NOREORDER
;
11541 /* Some IRIX 6 BSD-compatibility objects have this bit set. It
11542 doesn't seem to matter. */
11543 new_flags
&= ~EF_MIPS_XGOT
;
11544 old_flags
&= ~EF_MIPS_XGOT
;
11546 /* MIPSpro generates ucode info in n64 objects. Again, we should
11547 just be able to ignore this. */
11548 new_flags
&= ~EF_MIPS_UCODE
;
11549 old_flags
&= ~EF_MIPS_UCODE
;
11551 /* Don't care about the PIC flags from dynamic objects; they are
11553 if ((new_flags
& (EF_MIPS_PIC
| EF_MIPS_CPIC
)) != 0
11554 && (ibfd
->flags
& DYNAMIC
) != 0)
11555 new_flags
&= ~ (EF_MIPS_PIC
| EF_MIPS_CPIC
);
11557 if (new_flags
== old_flags
)
11560 /* Check to see if the input BFD actually contains any sections.
11561 If not, its flags may not have been initialised either, but it cannot
11562 actually cause any incompatibility. */
11563 for (sec
= ibfd
->sections
; sec
!= NULL
; sec
= sec
->next
)
11565 /* Ignore synthetic sections and empty .text, .data and .bss sections
11566 which are automatically generated by gas. */
11567 if (strcmp (sec
->name
, ".reginfo")
11568 && strcmp (sec
->name
, ".mdebug")
11570 || (strcmp (sec
->name
, ".text")
11571 && strcmp (sec
->name
, ".data")
11572 && strcmp (sec
->name
, ".bss"))))
11574 null_input_bfd
= FALSE
;
11578 if (null_input_bfd
)
11583 if (((new_flags
& (EF_MIPS_PIC
| EF_MIPS_CPIC
)) != 0)
11584 != ((old_flags
& (EF_MIPS_PIC
| EF_MIPS_CPIC
)) != 0))
11586 (*_bfd_error_handler
)
11587 (_("%B: warning: linking PIC files with non-PIC files"),
11592 if (new_flags
& (EF_MIPS_PIC
| EF_MIPS_CPIC
))
11593 elf_elfheader (obfd
)->e_flags
|= EF_MIPS_CPIC
;
11594 if (! (new_flags
& EF_MIPS_PIC
))
11595 elf_elfheader (obfd
)->e_flags
&= ~EF_MIPS_PIC
;
11597 new_flags
&= ~ (EF_MIPS_PIC
| EF_MIPS_CPIC
);
11598 old_flags
&= ~ (EF_MIPS_PIC
| EF_MIPS_CPIC
);
11600 /* Compare the ISAs. */
11601 if (mips_32bit_flags_p (old_flags
) != mips_32bit_flags_p (new_flags
))
11603 (*_bfd_error_handler
)
11604 (_("%B: linking 32-bit code with 64-bit code"),
11608 else if (!mips_mach_extends_p (bfd_get_mach (ibfd
), bfd_get_mach (obfd
)))
11610 /* OBFD's ISA isn't the same as, or an extension of, IBFD's. */
11611 if (mips_mach_extends_p (bfd_get_mach (obfd
), bfd_get_mach (ibfd
)))
11613 /* Copy the architecture info from IBFD to OBFD. Also copy
11614 the 32-bit flag (if set) so that we continue to recognise
11615 OBFD as a 32-bit binary. */
11616 bfd_set_arch_info (obfd
, bfd_get_arch_info (ibfd
));
11617 elf_elfheader (obfd
)->e_flags
&= ~(EF_MIPS_ARCH
| EF_MIPS_MACH
);
11618 elf_elfheader (obfd
)->e_flags
11619 |= new_flags
& (EF_MIPS_ARCH
| EF_MIPS_MACH
| EF_MIPS_32BITMODE
);
11621 /* Copy across the ABI flags if OBFD doesn't use them
11622 and if that was what caused us to treat IBFD as 32-bit. */
11623 if ((old_flags
& EF_MIPS_ABI
) == 0
11624 && mips_32bit_flags_p (new_flags
)
11625 && !mips_32bit_flags_p (new_flags
& ~EF_MIPS_ABI
))
11626 elf_elfheader (obfd
)->e_flags
|= new_flags
& EF_MIPS_ABI
;
11630 /* The ISAs aren't compatible. */
11631 (*_bfd_error_handler
)
11632 (_("%B: linking %s module with previous %s modules"),
11634 bfd_printable_name (ibfd
),
11635 bfd_printable_name (obfd
));
11640 new_flags
&= ~(EF_MIPS_ARCH
| EF_MIPS_MACH
| EF_MIPS_32BITMODE
);
11641 old_flags
&= ~(EF_MIPS_ARCH
| EF_MIPS_MACH
| EF_MIPS_32BITMODE
);
11643 /* Compare ABIs. The 64-bit ABI does not use EF_MIPS_ABI. But, it
11644 does set EI_CLASS differently from any 32-bit ABI. */
11645 if ((new_flags
& EF_MIPS_ABI
) != (old_flags
& EF_MIPS_ABI
)
11646 || (elf_elfheader (ibfd
)->e_ident
[EI_CLASS
]
11647 != elf_elfheader (obfd
)->e_ident
[EI_CLASS
]))
11649 /* Only error if both are set (to different values). */
11650 if (((new_flags
& EF_MIPS_ABI
) && (old_flags
& EF_MIPS_ABI
))
11651 || (elf_elfheader (ibfd
)->e_ident
[EI_CLASS
]
11652 != elf_elfheader (obfd
)->e_ident
[EI_CLASS
]))
11654 (*_bfd_error_handler
)
11655 (_("%B: ABI mismatch: linking %s module with previous %s modules"),
11657 elf_mips_abi_name (ibfd
),
11658 elf_mips_abi_name (obfd
));
11661 new_flags
&= ~EF_MIPS_ABI
;
11662 old_flags
&= ~EF_MIPS_ABI
;
11665 /* For now, allow arbitrary mixing of ASEs (retain the union). */
11666 if ((new_flags
& EF_MIPS_ARCH_ASE
) != (old_flags
& EF_MIPS_ARCH_ASE
))
11668 elf_elfheader (obfd
)->e_flags
|= new_flags
& EF_MIPS_ARCH_ASE
;
11670 new_flags
&= ~ EF_MIPS_ARCH_ASE
;
11671 old_flags
&= ~ EF_MIPS_ARCH_ASE
;
11674 /* Warn about any other mismatches */
11675 if (new_flags
!= old_flags
)
11677 (*_bfd_error_handler
)
11678 (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
11679 ibfd
, (unsigned long) new_flags
,
11680 (unsigned long) old_flags
);
11686 bfd_set_error (bfd_error_bad_value
);
11693 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */
11696 _bfd_mips_elf_set_private_flags (bfd
*abfd
, flagword flags
)
11698 BFD_ASSERT (!elf_flags_init (abfd
)
11699 || elf_elfheader (abfd
)->e_flags
== flags
);
11701 elf_elfheader (abfd
)->e_flags
= flags
;
11702 elf_flags_init (abfd
) = TRUE
;
11707 _bfd_mips_elf_get_target_dtag (bfd_vma dtag
)
11711 default: return "";
11712 case DT_MIPS_RLD_VERSION
:
11713 return "MIPS_RLD_VERSION";
11714 case DT_MIPS_TIME_STAMP
:
11715 return "MIPS_TIME_STAMP";
11716 case DT_MIPS_ICHECKSUM
:
11717 return "MIPS_ICHECKSUM";
11718 case DT_MIPS_IVERSION
:
11719 return "MIPS_IVERSION";
11720 case DT_MIPS_FLAGS
:
11721 return "MIPS_FLAGS";
11722 case DT_MIPS_BASE_ADDRESS
:
11723 return "MIPS_BASE_ADDRESS";
11725 return "MIPS_MSYM";
11726 case DT_MIPS_CONFLICT
:
11727 return "MIPS_CONFLICT";
11728 case DT_MIPS_LIBLIST
:
11729 return "MIPS_LIBLIST";
11730 case DT_MIPS_LOCAL_GOTNO
:
11731 return "MIPS_LOCAL_GOTNO";
11732 case DT_MIPS_CONFLICTNO
:
11733 return "MIPS_CONFLICTNO";
11734 case DT_MIPS_LIBLISTNO
:
11735 return "MIPS_LIBLISTNO";
11736 case DT_MIPS_SYMTABNO
:
11737 return "MIPS_SYMTABNO";
11738 case DT_MIPS_UNREFEXTNO
:
11739 return "MIPS_UNREFEXTNO";
11740 case DT_MIPS_GOTSYM
:
11741 return "MIPS_GOTSYM";
11742 case DT_MIPS_HIPAGENO
:
11743 return "MIPS_HIPAGENO";
11744 case DT_MIPS_RLD_MAP
:
11745 return "MIPS_RLD_MAP";
11746 case DT_MIPS_DELTA_CLASS
:
11747 return "MIPS_DELTA_CLASS";
11748 case DT_MIPS_DELTA_CLASS_NO
:
11749 return "MIPS_DELTA_CLASS_NO";
11750 case DT_MIPS_DELTA_INSTANCE
:
11751 return "MIPS_DELTA_INSTANCE";
11752 case DT_MIPS_DELTA_INSTANCE_NO
:
11753 return "MIPS_DELTA_INSTANCE_NO";
11754 case DT_MIPS_DELTA_RELOC
:
11755 return "MIPS_DELTA_RELOC";
11756 case DT_MIPS_DELTA_RELOC_NO
:
11757 return "MIPS_DELTA_RELOC_NO";
11758 case DT_MIPS_DELTA_SYM
:
11759 return "MIPS_DELTA_SYM";
11760 case DT_MIPS_DELTA_SYM_NO
:
11761 return "MIPS_DELTA_SYM_NO";
11762 case DT_MIPS_DELTA_CLASSSYM
:
11763 return "MIPS_DELTA_CLASSSYM";
11764 case DT_MIPS_DELTA_CLASSSYM_NO
:
11765 return "MIPS_DELTA_CLASSSYM_NO";
11766 case DT_MIPS_CXX_FLAGS
:
11767 return "MIPS_CXX_FLAGS";
11768 case DT_MIPS_PIXIE_INIT
:
11769 return "MIPS_PIXIE_INIT";
11770 case DT_MIPS_SYMBOL_LIB
:
11771 return "MIPS_SYMBOL_LIB";
11772 case DT_MIPS_LOCALPAGE_GOTIDX
:
11773 return "MIPS_LOCALPAGE_GOTIDX";
11774 case DT_MIPS_LOCAL_GOTIDX
:
11775 return "MIPS_LOCAL_GOTIDX";
11776 case DT_MIPS_HIDDEN_GOTIDX
:
11777 return "MIPS_HIDDEN_GOTIDX";
11778 case DT_MIPS_PROTECTED_GOTIDX
:
11779 return "MIPS_PROTECTED_GOT_IDX";
11780 case DT_MIPS_OPTIONS
:
11781 return "MIPS_OPTIONS";
11782 case DT_MIPS_INTERFACE
:
11783 return "MIPS_INTERFACE";
11784 case DT_MIPS_DYNSTR_ALIGN
:
11785 return "DT_MIPS_DYNSTR_ALIGN";
11786 case DT_MIPS_INTERFACE_SIZE
:
11787 return "DT_MIPS_INTERFACE_SIZE";
11788 case DT_MIPS_RLD_TEXT_RESOLVE_ADDR
:
11789 return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
11790 case DT_MIPS_PERF_SUFFIX
:
11791 return "DT_MIPS_PERF_SUFFIX";
11792 case DT_MIPS_COMPACT_SIZE
:
11793 return "DT_MIPS_COMPACT_SIZE";
11794 case DT_MIPS_GP_VALUE
:
11795 return "DT_MIPS_GP_VALUE";
11796 case DT_MIPS_AUX_DYNAMIC
:
11797 return "DT_MIPS_AUX_DYNAMIC";
11802 _bfd_mips_elf_print_private_bfd_data (bfd
*abfd
, void *ptr
)
11806 BFD_ASSERT (abfd
!= NULL
&& ptr
!= NULL
);
11808 /* Print normal ELF private data. */
11809 _bfd_elf_print_private_bfd_data (abfd
, ptr
);
11811 /* xgettext:c-format */
11812 fprintf (file
, _("private flags = %lx:"), elf_elfheader (abfd
)->e_flags
);
11814 if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ABI
) == E_MIPS_ABI_O32
)
11815 fprintf (file
, _(" [abi=O32]"));
11816 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ABI
) == E_MIPS_ABI_O64
)
11817 fprintf (file
, _(" [abi=O64]"));
11818 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ABI
) == E_MIPS_ABI_EABI32
)
11819 fprintf (file
, _(" [abi=EABI32]"));
11820 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ABI
) == E_MIPS_ABI_EABI64
)
11821 fprintf (file
, _(" [abi=EABI64]"));
11822 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ABI
))
11823 fprintf (file
, _(" [abi unknown]"));
11824 else if (ABI_N32_P (abfd
))
11825 fprintf (file
, _(" [abi=N32]"));
11826 else if (ABI_64_P (abfd
))
11827 fprintf (file
, _(" [abi=64]"));
11829 fprintf (file
, _(" [no abi set]"));
11831 if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_1
)
11832 fprintf (file
, " [mips1]");
11833 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_2
)
11834 fprintf (file
, " [mips2]");
11835 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_3
)
11836 fprintf (file
, " [mips3]");
11837 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_4
)
11838 fprintf (file
, " [mips4]");
11839 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_5
)
11840 fprintf (file
, " [mips5]");
11841 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_32
)
11842 fprintf (file
, " [mips32]");
11843 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_64
)
11844 fprintf (file
, " [mips64]");
11845 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_32R2
)
11846 fprintf (file
, " [mips32r2]");
11847 else if ((elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH
) == E_MIPS_ARCH_64R2
)
11848 fprintf (file
, " [mips64r2]");
11850 fprintf (file
, _(" [unknown ISA]"));
11852 if (elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH_ASE_MDMX
)
11853 fprintf (file
, " [mdmx]");
11855 if (elf_elfheader (abfd
)->e_flags
& EF_MIPS_ARCH_ASE_M16
)
11856 fprintf (file
, " [mips16]");
11858 if (elf_elfheader (abfd
)->e_flags
& EF_MIPS_32BITMODE
)
11859 fprintf (file
, " [32bitmode]");
11861 fprintf (file
, _(" [not 32bitmode]"));
11863 if (elf_elfheader (abfd
)->e_flags
& EF_MIPS_NOREORDER
)
11864 fprintf (file
, " [noreorder]");
11866 if (elf_elfheader (abfd
)->e_flags
& EF_MIPS_PIC
)
11867 fprintf (file
, " [PIC]");
11869 if (elf_elfheader (abfd
)->e_flags
& EF_MIPS_CPIC
)
11870 fprintf (file
, " [CPIC]");
11872 if (elf_elfheader (abfd
)->e_flags
& EF_MIPS_XGOT
)
11873 fprintf (file
, " [XGOT]");
11875 if (elf_elfheader (abfd
)->e_flags
& EF_MIPS_UCODE
)
11876 fprintf (file
, " [UCODE]");
11878 fputc ('\n', file
);
11883 const struct bfd_elf_special_section _bfd_mips_elf_special_sections
[] =
11885 { STRING_COMMA_LEN (".lit4"), 0, SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
+ SHF_MIPS_GPREL
},
11886 { STRING_COMMA_LEN (".lit8"), 0, SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
+ SHF_MIPS_GPREL
},
11887 { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG
, 0 },
11888 { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS
, SHF_ALLOC
+ SHF_WRITE
+ SHF_MIPS_GPREL
},
11889 { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
+ SHF_MIPS_GPREL
},
11890 { STRING_COMMA_LEN (".ucode"), 0, SHT_MIPS_UCODE
, 0 },
11891 { NULL
, 0, 0, 0, 0 }
11894 /* Merge non visibility st_other attributes. Ensure that the
11895 STO_OPTIONAL flag is copied into h->other, even if this is not a
11896 definiton of the symbol. */
11898 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry
*h
,
11899 const Elf_Internal_Sym
*isym
,
11900 bfd_boolean definition
,
11901 bfd_boolean dynamic ATTRIBUTE_UNUSED
)
11903 if ((isym
->st_other
& ~ELF_ST_VISIBILITY (-1)) != 0)
11905 unsigned char other
;
11907 other
= (definition
? isym
->st_other
: h
->other
);
11908 other
&= ~ELF_ST_VISIBILITY (-1);
11909 h
->other
= other
| ELF_ST_VISIBILITY (h
->other
);
11913 && ELF_MIPS_IS_OPTIONAL (isym
->st_other
))
11914 h
->other
|= STO_OPTIONAL
;
11917 /* Decide whether an undefined symbol is special and can be ignored.
11918 This is the case for OPTIONAL symbols on IRIX. */
11920 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry
*h
)
11922 return ELF_MIPS_IS_OPTIONAL (h
->other
) ? TRUE
: FALSE
;
11926 _bfd_mips_elf_common_definition (Elf_Internal_Sym
*sym
)
11928 return (sym
->st_shndx
== SHN_COMMON
11929 || sym
->st_shndx
== SHN_MIPS_ACOMMON
11930 || sym
->st_shndx
== SHN_MIPS_SCOMMON
);