1 /* MIPS-specific support for ELF 2 Copyright (C) 1993-2020 Free Software Foundation, Inc. 3 4 Most of the information added by Ian Lance Taylor, Cygnus Support, 5 <ian@cygnus.com>. 6 N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC. 7 <mark@codesourcery.com> 8 Traditional MIPS targets support added by Koundinya.K, Dansk Data 9 Elektronik & Operations Research Group. <kk@ddeorg.soft.net> 10 11 This file is part of BFD, the Binary File Descriptor library. 12 13 This program is free software; you can redistribute it and/or modify 14 it under the terms of the GNU General Public License as published by 15 the Free Software Foundation; either version 3 of the License, or 16 (at your option) any later version. 17 18 This program is distributed in the hope that it will be useful, 19 but WITHOUT ANY WARRANTY; without even the implied warranty of 20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 21 GNU General Public License for more details. 22 23 You should have received a copy of the GNU General Public License 24 along with this program; if not, write to the Free Software 25 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 26 MA 02110-1301, USA. */ 27 28 29 /* This file handles functionality common to the different MIPS ABI's. */ 30 31 #include "sysdep.h" 32 #include "bfd.h" 33 #include "libbfd.h" 34 #include "libiberty.h" 35 #include "elf-bfd.h" 36 #include "ecoff-bfd.h" 37 #include "elfxx-mips.h" 38 #include "elf/mips.h" 39 #include "elf-vxworks.h" 40 #include "dwarf2.h" 41 42 /* Get the ECOFF swapping routines. */ 43 #include "coff/sym.h" 44 #include "coff/symconst.h" 45 #include "coff/ecoff.h" 46 #include "coff/mips.h" 47 48 #include "hashtab.h" 49 50 /* Types of TLS GOT entry. */ 51 enum mips_got_tls_type { 52 GOT_TLS_NONE, 53 GOT_TLS_GD, 54 GOT_TLS_LDM, 55 GOT_TLS_IE 56 }; 57 58 /* This structure is used to hold information about one GOT entry. 59 There are four types of entry: 60 61 (1) an absolute address 62 requires: abfd == NULL 63 fields: d.address 64 65 (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd 66 requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM 67 fields: abfd, symndx, d.addend, tls_type 68 69 (3) a SYMBOL address, where SYMBOL is not local to an input bfd 70 requires: abfd != NULL, symndx == -1 71 fields: d.h, tls_type 72 73 (4) a TLS LDM slot 74 requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM 75 fields: none; there's only one of these per GOT. */ 76 struct mips_got_entry 77 { 78 /* One input bfd that needs the GOT entry. */ 79 bfd *abfd; 80 /* The index of the symbol, as stored in the relocation r_info, if 81 we have a local symbol; -1 otherwise. */ 82 long symndx; 83 union 84 { 85 /* If abfd == NULL, an address that must be stored in the got. */ 86 bfd_vma address; 87 /* If abfd != NULL && symndx != -1, the addend of the relocation 88 that should be added to the symbol value. */ 89 bfd_vma addend; 90 /* If abfd != NULL && symndx == -1, the hash table entry 91 corresponding to a symbol in the GOT. The symbol's entry 92 is in the local area if h->global_got_area is GGA_NONE, 93 otherwise it is in the global area. */ 94 struct mips_elf_link_hash_entry *h; 95 } d; 96 97 /* The TLS type of this GOT entry. An LDM GOT entry will be a local 98 symbol entry with r_symndx == 0. */ 99 unsigned char tls_type; 100 101 /* True if we have filled in the GOT contents for a TLS entry, 102 and created the associated relocations. */ 103 unsigned char tls_initialized; 104 105 /* The offset from the beginning of the .got section to the entry 106 corresponding to this symbol+addend. If it's a global symbol 107 whose offset is yet to be decided, it's going to be -1. */ 108 long gotidx; 109 }; 110 111 /* This structure represents a GOT page reference from an input bfd. 112 Each instance represents a symbol + ADDEND, where the representation 113 of the symbol depends on whether it is local to the input bfd. 114 If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD. 115 Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry. 116 117 Page references with SYMNDX >= 0 always become page references 118 in the output. Page references with SYMNDX < 0 only become page 119 references if the symbol binds locally; in other cases, the page 120 reference decays to a global GOT reference. */ 121 struct mips_got_page_ref 122 { 123 long symndx; 124 union 125 { 126 struct mips_elf_link_hash_entry *h; 127 bfd *abfd; 128 } u; 129 bfd_vma addend; 130 }; 131 132 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND]. 133 The structures form a non-overlapping list that is sorted by increasing 134 MIN_ADDEND. */ 135 struct mips_got_page_range 136 { 137 struct mips_got_page_range *next; 138 bfd_signed_vma min_addend; 139 bfd_signed_vma max_addend; 140 }; 141 142 /* This structure describes the range of addends that are applied to page 143 relocations against a given section. */ 144 struct mips_got_page_entry 145 { 146 /* The section that these entries are based on. */ 147 asection *sec; 148 /* The ranges for this page entry. */ 149 struct mips_got_page_range *ranges; 150 /* The maximum number of page entries needed for RANGES. */ 151 bfd_vma num_pages; 152 }; 153 154 /* This structure is used to hold .got information when linking. */ 155 156 struct mips_got_info 157 { 158 /* The number of global .got entries. */ 159 unsigned int global_gotno; 160 /* The number of global .got entries that are in the GGA_RELOC_ONLY area. */ 161 unsigned int reloc_only_gotno; 162 /* The number of .got slots used for TLS. */ 163 unsigned int tls_gotno; 164 /* The first unused TLS .got entry. Used only during 165 mips_elf_initialize_tls_index. */ 166 unsigned int tls_assigned_gotno; 167 /* The number of local .got entries, eventually including page entries. */ 168 unsigned int local_gotno; 169 /* The maximum number of page entries needed. */ 170 unsigned int page_gotno; 171 /* The number of relocations needed for the GOT entries. */ 172 unsigned int relocs; 173 /* The first unused local .got entry. */ 174 unsigned int assigned_low_gotno; 175 /* The last unused local .got entry. */ 176 unsigned int assigned_high_gotno; 177 /* A hash table holding members of the got. */ 178 struct htab *got_entries; 179 /* A hash table holding mips_got_page_ref structures. */ 180 struct htab *got_page_refs; 181 /* A hash table of mips_got_page_entry structures. */ 182 struct htab *got_page_entries; 183 /* In multi-got links, a pointer to the next got (err, rather, most 184 of the time, it points to the previous got). */ 185 struct mips_got_info *next; 186 }; 187 188 /* Structure passed when merging bfds' gots. */ 189 190 struct mips_elf_got_per_bfd_arg 191 { 192 /* The output bfd. */ 193 bfd *obfd; 194 /* The link information. */ 195 struct bfd_link_info *info; 196 /* A pointer to the primary got, i.e., the one that's going to get 197 the implicit relocations from DT_MIPS_LOCAL_GOTNO and 198 DT_MIPS_GOTSYM. */ 199 struct mips_got_info *primary; 200 /* A non-primary got we're trying to merge with other input bfd's 201 gots. */ 202 struct mips_got_info *current; 203 /* The maximum number of got entries that can be addressed with a 204 16-bit offset. */ 205 unsigned int max_count; 206 /* The maximum number of page entries needed by each got. */ 207 unsigned int max_pages; 208 /* The total number of global entries which will live in the 209 primary got and be automatically relocated. This includes 210 those not referenced by the primary GOT but included in 211 the "master" GOT. */ 212 unsigned int global_count; 213 }; 214 215 /* A structure used to pass information to htab_traverse callbacks 216 when laying out the GOT. */ 217 218 struct mips_elf_traverse_got_arg 219 { 220 struct bfd_link_info *info; 221 struct mips_got_info *g; 222 int value; 223 }; 224 225 struct _mips_elf_section_data 226 { 227 struct bfd_elf_section_data elf; 228 union 229 { 230 bfd_byte *tdata; 231 } u; 232 }; 233 234 #define mips_elf_section_data(sec) \ 235 ((struct _mips_elf_section_data *) elf_section_data (sec)) 236 237 #define is_mips_elf(bfd) \ 238 (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ 239 && elf_tdata (bfd) != NULL \ 240 && elf_object_id (bfd) == MIPS_ELF_DATA) 241 242 /* The ABI says that every symbol used by dynamic relocations must have 243 a global GOT entry. Among other things, this provides the dynamic 244 linker with a free, directly-indexed cache. The GOT can therefore 245 contain symbols that are not referenced by GOT relocations themselves 246 (in other words, it may have symbols that are not referenced by things 247 like R_MIPS_GOT16 and R_MIPS_GOT_PAGE). 248 249 GOT relocations are less likely to overflow if we put the associated 250 GOT entries towards the beginning. We therefore divide the global 251 GOT entries into two areas: "normal" and "reloc-only". Entries in 252 the first area can be used for both dynamic relocations and GP-relative 253 accesses, while those in the "reloc-only" area are for dynamic 254 relocations only. 255 256 These GGA_* ("Global GOT Area") values are organised so that lower 257 values are more general than higher values. Also, non-GGA_NONE 258 values are ordered by the position of the area in the GOT. */ 259 #define GGA_NORMAL 0 260 #define GGA_RELOC_ONLY 1 261 #define GGA_NONE 2 262 263 /* Information about a non-PIC interface to a PIC function. There are 264 two ways of creating these interfaces. The first is to add: 265 266 lui $25,%hi(func) 267 addiu $25,$25,%lo(func) 268 269 immediately before a PIC function "func". The second is to add: 270 271 lui $25,%hi(func) 272 j func 273 addiu $25,$25,%lo(func) 274 275 to a separate trampoline section. 276 277 Stubs of the first kind go in a new section immediately before the 278 target function. Stubs of the second kind go in a single section 279 pointed to by the hash table's "strampoline" field. */ 280 struct mips_elf_la25_stub { 281 /* The generated section that contains this stub. */ 282 asection *stub_section; 283 284 /* The offset of the stub from the start of STUB_SECTION. */ 285 bfd_vma offset; 286 287 /* One symbol for the original function. Its location is available 288 in H->root.root.u.def. */ 289 struct mips_elf_link_hash_entry *h; 290 }; 291 292 /* Macros for populating a mips_elf_la25_stub. */ 293 294 #define LA25_LUI(VAL) (0x3c190000 | (VAL)) /* lui t9,VAL */ 295 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */ 296 #define LA25_BC(VAL) (0xc8000000 | (((VAL) >> 2) & 0x3ffffff)) /* bc VAL */ 297 #define LA25_ADDIU(VAL) (0x27390000 | (VAL)) /* addiu t9,t9,VAL */ 298 #define LA25_LUI_MICROMIPS(VAL) \ 299 (0x41b90000 | (VAL)) /* lui t9,VAL */ 300 #define LA25_J_MICROMIPS(VAL) \ 301 (0xd4000000 | (((VAL) >> 1) & 0x3ffffff)) /* j VAL */ 302 #define LA25_ADDIU_MICROMIPS(VAL) \ 303 (0x33390000 | (VAL)) /* addiu t9,t9,VAL */ 304 305 /* This structure is passed to mips_elf_sort_hash_table_f when sorting 306 the dynamic symbols. */ 307 308 struct mips_elf_hash_sort_data 309 { 310 /* The symbol in the global GOT with the lowest dynamic symbol table 311 index. */ 312 struct elf_link_hash_entry *low; 313 /* The least dynamic symbol table index corresponding to a non-TLS 314 symbol with a GOT entry. */ 315 bfd_size_type min_got_dynindx; 316 /* The greatest dynamic symbol table index corresponding to a symbol 317 with a GOT entry that is not referenced (e.g., a dynamic symbol 318 with dynamic relocations pointing to it from non-primary GOTs). */ 319 bfd_size_type max_unref_got_dynindx; 320 /* The greatest dynamic symbol table index corresponding to a local 321 symbol. */ 322 bfd_size_type max_local_dynindx; 323 /* The greatest dynamic symbol table index corresponding to an external 324 symbol without a GOT entry. */ 325 bfd_size_type max_non_got_dynindx; 326 /* If non-NULL, output BFD for .MIPS.xhash finalization. */ 327 bfd *output_bfd; 328 /* If non-NULL, pointer to contents of .MIPS.xhash for filling in 329 real final dynindx. */ 330 bfd_byte *mipsxhash; 331 }; 332 333 /* We make up to two PLT entries if needed, one for standard MIPS code 334 and one for compressed code, either a MIPS16 or microMIPS one. We 335 keep a separate record of traditional lazy-binding stubs, for easier 336 processing. */ 337 338 struct plt_entry 339 { 340 /* Traditional SVR4 stub offset, or -1 if none. */ 341 bfd_vma stub_offset; 342 343 /* Standard PLT entry offset, or -1 if none. */ 344 bfd_vma mips_offset; 345 346 /* Compressed PLT entry offset, or -1 if none. */ 347 bfd_vma comp_offset; 348 349 /* The corresponding .got.plt index, or -1 if none. */ 350 bfd_vma gotplt_index; 351 352 /* Whether we need a standard PLT entry. */ 353 unsigned int need_mips : 1; 354 355 /* Whether we need a compressed PLT entry. */ 356 unsigned int need_comp : 1; 357 }; 358 359 /* The MIPS ELF linker needs additional information for each symbol in 360 the global hash table. */ 361 362 struct mips_elf_link_hash_entry 363 { 364 struct elf_link_hash_entry root; 365 366 /* External symbol information. */ 367 EXTR esym; 368 369 /* The la25 stub we have created for ths symbol, if any. */ 370 struct mips_elf_la25_stub *la25_stub; 371 372 /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against 373 this symbol. */ 374 unsigned int possibly_dynamic_relocs; 375 376 /* If there is a stub that 32 bit functions should use to call this 377 16 bit function, this points to the section containing the stub. */ 378 asection *fn_stub; 379 380 /* If there is a stub that 16 bit functions should use to call this 381 32 bit function, this points to the section containing the stub. */ 382 asection *call_stub; 383 384 /* This is like the call_stub field, but it is used if the function 385 being called returns a floating point value. */ 386 asection *call_fp_stub; 387 388 /* If non-zero, location in .MIPS.xhash to write real final dynindx. */ 389 bfd_vma mipsxhash_loc; 390 391 /* The highest GGA_* value that satisfies all references to this symbol. */ 392 unsigned int global_got_area : 2; 393 394 /* True if all GOT relocations against this symbol are for calls. This is 395 a looser condition than no_fn_stub below, because there may be other 396 non-call non-GOT relocations against the symbol. */ 397 unsigned int got_only_for_calls : 1; 398 399 /* True if one of the relocations described by possibly_dynamic_relocs 400 is against a readonly section. */ 401 unsigned int readonly_reloc : 1; 402 403 /* True if there is a relocation against this symbol that must be 404 resolved by the static linker (in other words, if the relocation 405 cannot possibly be made dynamic). */ 406 unsigned int has_static_relocs : 1; 407 408 /* True if we must not create a .MIPS.stubs entry for this symbol. 409 This is set, for example, if there are relocations related to 410 taking the function's address, i.e. any but R_MIPS_CALL*16 ones. 411 See "MIPS ABI Supplement, 3rd Edition", p. 4-20. */ 412 unsigned int no_fn_stub : 1; 413 414 /* Whether we need the fn_stub; this is true if this symbol appears 415 in any relocs other than a 16 bit call. */ 416 unsigned int need_fn_stub : 1; 417 418 /* True if this symbol is referenced by branch relocations from 419 any non-PIC input file. This is used to determine whether an 420 la25 stub is required. */ 421 unsigned int has_nonpic_branches : 1; 422 423 /* Does this symbol need a traditional MIPS lazy-binding stub 424 (as opposed to a PLT entry)? */ 425 unsigned int needs_lazy_stub : 1; 426 427 /* Does this symbol resolve to a PLT entry? */ 428 unsigned int use_plt_entry : 1; 429 }; 430 431 /* MIPS ELF linker hash table. */ 432 433 struct mips_elf_link_hash_table 434 { 435 struct elf_link_hash_table root; 436 437 /* The number of .rtproc entries. */ 438 bfd_size_type procedure_count; 439 440 /* The size of the .compact_rel section (if SGI_COMPAT). */ 441 bfd_size_type compact_rel_size; 442 443 /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry 444 is set to the address of __rld_obj_head as in IRIX5 and IRIX6. */ 445 bfd_boolean use_rld_obj_head; 446 447 /* The __rld_map or __rld_obj_head symbol. */ 448 struct elf_link_hash_entry *rld_symbol; 449 450 /* This is set if we see any mips16 stub sections. */ 451 bfd_boolean mips16_stubs_seen; 452 453 /* True if we can generate copy relocs and PLTs. */ 454 bfd_boolean use_plts_and_copy_relocs; 455 456 /* True if we can only use 32-bit microMIPS instructions. */ 457 bfd_boolean insn32; 458 459 /* True if we suppress checks for invalid branches between ISA modes. */ 460 bfd_boolean ignore_branch_isa; 461 462 /* True if we are targetting R6 compact branches. */ 463 bfd_boolean compact_branches; 464 465 /* True if we're generating code for VxWorks. */ 466 bfd_boolean is_vxworks; 467 468 /* True if we already reported the small-data section overflow. */ 469 bfd_boolean small_data_overflow_reported; 470 471 /* True if we use the special `__gnu_absolute_zero' symbol. */ 472 bfd_boolean use_absolute_zero; 473 474 /* True if we have been configured for a GNU target. */ 475 bfd_boolean gnu_target; 476 477 /* Shortcuts to some dynamic sections, or NULL if they are not 478 being used. */ 479 asection *srelplt2; 480 asection *sstubs; 481 482 /* The master GOT information. */ 483 struct mips_got_info *got_info; 484 485 /* The global symbol in the GOT with the lowest index in the dynamic 486 symbol table. */ 487 struct elf_link_hash_entry *global_gotsym; 488 489 /* The size of the PLT header in bytes. */ 490 bfd_vma plt_header_size; 491 492 /* The size of a standard PLT entry in bytes. */ 493 bfd_vma plt_mips_entry_size; 494 495 /* The size of a compressed PLT entry in bytes. */ 496 bfd_vma plt_comp_entry_size; 497 498 /* The offset of the next standard PLT entry to create. */ 499 bfd_vma plt_mips_offset; 500 501 /* The offset of the next compressed PLT entry to create. */ 502 bfd_vma plt_comp_offset; 503 504 /* The index of the next .got.plt entry to create. */ 505 bfd_vma plt_got_index; 506 507 /* The number of functions that need a lazy-binding stub. */ 508 bfd_vma lazy_stub_count; 509 510 /* The size of a function stub entry in bytes. */ 511 bfd_vma function_stub_size; 512 513 /* The number of reserved entries at the beginning of the GOT. */ 514 unsigned int reserved_gotno; 515 516 /* The section used for mips_elf_la25_stub trampolines. 517 See the comment above that structure for details. */ 518 asection *strampoline; 519 520 /* A table of mips_elf_la25_stubs, indexed by (input_section, offset) 521 pairs. */ 522 htab_t la25_stubs; 523 524 /* A function FN (NAME, IS, OS) that creates a new input section 525 called NAME and links it to output section OS. If IS is nonnull, 526 the new section should go immediately before it, otherwise it 527 should go at the (current) beginning of OS. 528 529 The function returns the new section on success, otherwise it 530 returns null. */ 531 asection *(*add_stub_section) (const char *, asection *, asection *); 532 533 /* Small local sym cache. */ 534 struct sym_cache sym_cache; 535 536 /* Is the PLT header compressed? */ 537 unsigned int plt_header_is_comp : 1; 538 }; 539 540 /* Get the MIPS ELF linker hash table from a link_info structure. */ 541 542 #define mips_elf_hash_table(p) \ 543 (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ 544 == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL) 545 546 /* A structure used to communicate with htab_traverse callbacks. */ 547 struct mips_htab_traverse_info 548 { 549 /* The usual link-wide information. */ 550 struct bfd_link_info *info; 551 bfd *output_bfd; 552 553 /* Starts off FALSE and is set to TRUE if the link should be aborted. */ 554 bfd_boolean error; 555 }; 556 557 /* MIPS ELF private object data. */ 558 559 struct mips_elf_obj_tdata 560 { 561 /* Generic ELF private object data. */ 562 struct elf_obj_tdata root; 563 564 /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output. */ 565 bfd *abi_fp_bfd; 566 567 /* Input BFD providing Tag_GNU_MIPS_ABI_MSA attribute for output. */ 568 bfd *abi_msa_bfd; 569 570 /* The abiflags for this object. */ 571 Elf_Internal_ABIFlags_v0 abiflags; 572 bfd_boolean abiflags_valid; 573 574 /* The GOT requirements of input bfds. */ 575 struct mips_got_info *got; 576 577 /* Used by _bfd_mips_elf_find_nearest_line. The structure could be 578 included directly in this one, but there's no point to wasting 579 the memory just for the infrequently called find_nearest_line. */ 580 struct mips_elf_find_line *find_line_info; 581 582 /* An array of stub sections indexed by symbol number. */ 583 asection **local_stubs; 584 asection **local_call_stubs; 585 586 /* The Irix 5 support uses two virtual sections, which represent 587 text/data symbols defined in dynamic objects. */ 588 asymbol *elf_data_symbol; 589 asymbol *elf_text_symbol; 590 asection *elf_data_section; 591 asection *elf_text_section; 592 }; 593 594 /* Get MIPS ELF private object data from BFD's tdata. */ 595 596 #define mips_elf_tdata(bfd) \ 597 ((struct mips_elf_obj_tdata *) (bfd)->tdata.any) 598 599 #define TLS_RELOC_P(r_type) \ 600 (r_type == R_MIPS_TLS_DTPMOD32 \ 601 || r_type == R_MIPS_TLS_DTPMOD64 \ 602 || r_type == R_MIPS_TLS_DTPREL32 \ 603 || r_type == R_MIPS_TLS_DTPREL64 \ 604 || r_type == R_MIPS_TLS_GD \ 605 || r_type == R_MIPS_TLS_LDM \ 606 || r_type == R_MIPS_TLS_DTPREL_HI16 \ 607 || r_type == R_MIPS_TLS_DTPREL_LO16 \ 608 || r_type == R_MIPS_TLS_GOTTPREL \ 609 || r_type == R_MIPS_TLS_TPREL32 \ 610 || r_type == R_MIPS_TLS_TPREL64 \ 611 || r_type == R_MIPS_TLS_TPREL_HI16 \ 612 || r_type == R_MIPS_TLS_TPREL_LO16 \ 613 || r_type == R_MIPS16_TLS_GD \ 614 || r_type == R_MIPS16_TLS_LDM \ 615 || r_type == R_MIPS16_TLS_DTPREL_HI16 \ 616 || r_type == R_MIPS16_TLS_DTPREL_LO16 \ 617 || r_type == R_MIPS16_TLS_GOTTPREL \ 618 || r_type == R_MIPS16_TLS_TPREL_HI16 \ 619 || r_type == R_MIPS16_TLS_TPREL_LO16 \ 620 || r_type == R_MICROMIPS_TLS_GD \ 621 || r_type == R_MICROMIPS_TLS_LDM \ 622 || r_type == R_MICROMIPS_TLS_DTPREL_HI16 \ 623 || r_type == R_MICROMIPS_TLS_DTPREL_LO16 \ 624 || r_type == R_MICROMIPS_TLS_GOTTPREL \ 625 || r_type == R_MICROMIPS_TLS_TPREL_HI16 \ 626 || r_type == R_MICROMIPS_TLS_TPREL_LO16) 627 628 /* Structure used to pass information to mips_elf_output_extsym. */ 629 630 struct extsym_info 631 { 632 bfd *abfd; 633 struct bfd_link_info *info; 634 struct ecoff_debug_info *debug; 635 const struct ecoff_debug_swap *swap; 636 bfd_boolean failed; 637 }; 638 639 /* The names of the runtime procedure table symbols used on IRIX5. */ 640 641 static const char * const mips_elf_dynsym_rtproc_names[] = 642 { 643 "_procedure_table", 644 "_procedure_string_table", 645 "_procedure_table_size", 646 NULL 647 }; 648 649 /* These structures are used to generate the .compact_rel section on 650 IRIX5. */ 651 652 typedef struct 653 { 654 unsigned long id1; /* Always one? */ 655 unsigned long num; /* Number of compact relocation entries. */ 656 unsigned long id2; /* Always two? */ 657 unsigned long offset; /* The file offset of the first relocation. */ 658 unsigned long reserved0; /* Zero? */ 659 unsigned long reserved1; /* Zero? */ 660 } Elf32_compact_rel; 661 662 typedef struct 663 { 664 bfd_byte id1[4]; 665 bfd_byte num[4]; 666 bfd_byte id2[4]; 667 bfd_byte offset[4]; 668 bfd_byte reserved0[4]; 669 bfd_byte reserved1[4]; 670 } Elf32_External_compact_rel; 671 672 typedef struct 673 { 674 unsigned int ctype : 1; /* 1: long 0: short format. See below. */ 675 unsigned int rtype : 4; /* Relocation types. See below. */ 676 unsigned int dist2to : 8; 677 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */ 678 unsigned long konst; /* KONST field. See below. */ 679 unsigned long vaddr; /* VADDR to be relocated. */ 680 } Elf32_crinfo; 681 682 typedef struct 683 { 684 unsigned int ctype : 1; /* 1: long 0: short format. See below. */ 685 unsigned int rtype : 4; /* Relocation types. See below. */ 686 unsigned int dist2to : 8; 687 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */ 688 unsigned long konst; /* KONST field. See below. */ 689 } Elf32_crinfo2; 690 691 typedef struct 692 { 693 bfd_byte info[4]; 694 bfd_byte konst[4]; 695 bfd_byte vaddr[4]; 696 } Elf32_External_crinfo; 697 698 typedef struct 699 { 700 bfd_byte info[4]; 701 bfd_byte konst[4]; 702 } Elf32_External_crinfo2; 703 704 /* These are the constants used to swap the bitfields in a crinfo. */ 705 706 #define CRINFO_CTYPE (0x1) 707 #define CRINFO_CTYPE_SH (31) 708 #define CRINFO_RTYPE (0xf) 709 #define CRINFO_RTYPE_SH (27) 710 #define CRINFO_DIST2TO (0xff) 711 #define CRINFO_DIST2TO_SH (19) 712 #define CRINFO_RELVADDR (0x7ffff) 713 #define CRINFO_RELVADDR_SH (0) 714 715 /* A compact relocation info has long (3 words) or short (2 words) 716 formats. A short format doesn't have VADDR field and relvaddr 717 fields contains ((VADDR - vaddr of the previous entry) >> 2). */ 718 #define CRF_MIPS_LONG 1 719 #define CRF_MIPS_SHORT 0 720 721 /* There are 4 types of compact relocation at least. The value KONST 722 has different meaning for each type: 723 724 (type) (konst) 725 CT_MIPS_REL32 Address in data 726 CT_MIPS_WORD Address in word (XXX) 727 CT_MIPS_GPHI_LO GP - vaddr 728 CT_MIPS_JMPAD Address to jump 729 */ 730 731 #define CRT_MIPS_REL32 0xa 732 #define CRT_MIPS_WORD 0xb 733 #define CRT_MIPS_GPHI_LO 0xc 734 #define CRT_MIPS_JMPAD 0xd 735 736 #define mips_elf_set_cr_format(x,format) ((x).ctype = (format)) 737 #define mips_elf_set_cr_type(x,type) ((x).rtype = (type)) 738 #define mips_elf_set_cr_dist2to(x,v) ((x).dist2to = (v)) 739 #define mips_elf_set_cr_relvaddr(x,d) ((x).relvaddr = (d)<<2) 740 741 /* The structure of the runtime procedure descriptor created by the 742 loader for use by the static exception system. */ 743 744 typedef struct runtime_pdr { 745 bfd_vma adr; /* Memory address of start of procedure. */ 746 long regmask; /* Save register mask. */ 747 long regoffset; /* Save register offset. */ 748 long fregmask; /* Save floating point register mask. */ 749 long fregoffset; /* Save floating point register offset. */ 750 long frameoffset; /* Frame size. */ 751 short framereg; /* Frame pointer register. */ 752 short pcreg; /* Offset or reg of return pc. */ 753 long irpss; /* Index into the runtime string table. */ 754 long reserved; 755 struct exception_info *exception_info;/* Pointer to exception array. */ 756 } RPDR, *pRPDR; 757 #define cbRPDR sizeof (RPDR) 758 #define rpdNil ((pRPDR) 0) 759 760 static struct mips_got_entry *mips_elf_create_local_got_entry 761 (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long, 762 struct mips_elf_link_hash_entry *, int); 763 static bfd_boolean mips_elf_sort_hash_table_f 764 (struct mips_elf_link_hash_entry *, void *); 765 static bfd_vma mips_elf_high 766 (bfd_vma); 767 static bfd_boolean mips_elf_create_dynamic_relocation 768 (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *, 769 struct mips_elf_link_hash_entry *, asection *, bfd_vma, 770 bfd_vma *, asection *); 771 static bfd_vma mips_elf_adjust_gp 772 (bfd *, struct mips_got_info *, bfd *); 773 774 /* This will be used when we sort the dynamic relocation records. */ 775 static bfd *reldyn_sorting_bfd; 776 777 /* True if ABFD is for CPUs with load interlocking that include 778 non-MIPS1 CPUs and R3900. */ 779 #define LOAD_INTERLOCKS_P(abfd) \ 780 ( ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \ 781 || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900)) 782 783 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL. 784 This should be safe for all architectures. We enable this predicate 785 for RM9000 for now. */ 786 #define JAL_TO_BAL_P(abfd) \ 787 ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000) 788 789 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL. 790 This should be safe for all architectures. We enable this predicate for 791 all CPUs. */ 792 #define JALR_TO_BAL_P(abfd) 1 793 794 /* True if ABFD is for CPUs that are faster if JR is converted to B. 795 This should be safe for all architectures. We enable this predicate for 796 all CPUs. */ 797 #define JR_TO_B_P(abfd) 1 798 799 /* True if ABFD is a PIC object. */ 800 #define PIC_OBJECT_P(abfd) \ 801 ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0) 802 803 /* Nonzero if ABFD is using the O32 ABI. */ 804 #define ABI_O32_P(abfd) \ 805 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32) 806 807 /* Nonzero if ABFD is using the N32 ABI. */ 808 #define ABI_N32_P(abfd) \ 809 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0) 810 811 /* Nonzero if ABFD is using the N64 ABI. */ 812 #define ABI_64_P(abfd) \ 813 (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64) 814 815 /* Nonzero if ABFD is using NewABI conventions. */ 816 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd)) 817 818 /* Nonzero if ABFD has microMIPS code. */ 819 #define MICROMIPS_P(abfd) \ 820 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0) 821 822 /* Nonzero if ABFD is MIPS R6. */ 823 #define MIPSR6_P(abfd) \ 824 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6 \ 825 || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6) 826 827 /* The IRIX compatibility level we are striving for. */ 828 #define IRIX_COMPAT(abfd) \ 829 (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd)) 830 831 /* Whether we are trying to be compatible with IRIX at all. */ 832 #define SGI_COMPAT(abfd) \ 833 (IRIX_COMPAT (abfd) != ict_none) 834 835 /* The name of the options section. */ 836 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \ 837 (NEWABI_P (abfd) ? ".MIPS.options" : ".options") 838 839 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section. 840 Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME. */ 841 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \ 842 (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0) 843 844 /* True if NAME is the recognized name of any SHT_MIPS_ABIFLAGS section. */ 845 #define MIPS_ELF_ABIFLAGS_SECTION_NAME_P(NAME) \ 846 (strcmp (NAME, ".MIPS.abiflags") == 0) 847 848 /* Whether the section is readonly. */ 849 #define MIPS_ELF_READONLY_SECTION(sec) \ 850 ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) \ 851 == (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) 852 853 /* The name of the stub section. */ 854 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs" 855 856 /* The size of an external REL relocation. */ 857 #define MIPS_ELF_REL_SIZE(abfd) \ 858 (get_elf_backend_data (abfd)->s->sizeof_rel) 859 860 /* The size of an external RELA relocation. */ 861 #define MIPS_ELF_RELA_SIZE(abfd) \ 862 (get_elf_backend_data (abfd)->s->sizeof_rela) 863 864 /* The size of an external dynamic table entry. */ 865 #define MIPS_ELF_DYN_SIZE(abfd) \ 866 (get_elf_backend_data (abfd)->s->sizeof_dyn) 867 868 /* The size of a GOT entry. */ 869 #define MIPS_ELF_GOT_SIZE(abfd) \ 870 (get_elf_backend_data (abfd)->s->arch_size / 8) 871 872 /* The size of the .rld_map section. */ 873 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \ 874 (get_elf_backend_data (abfd)->s->arch_size / 8) 875 876 /* The size of a symbol-table entry. */ 877 #define MIPS_ELF_SYM_SIZE(abfd) \ 878 (get_elf_backend_data (abfd)->s->sizeof_sym) 879 880 /* The default alignment for sections, as a power of two. */ 881 #define MIPS_ELF_LOG_FILE_ALIGN(abfd) \ 882 (get_elf_backend_data (abfd)->s->log_file_align) 883 884 /* Get word-sized data. */ 885 #define MIPS_ELF_GET_WORD(abfd, ptr) \ 886 (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr)) 887 888 /* Put out word-sized data. */ 889 #define MIPS_ELF_PUT_WORD(abfd, val, ptr) \ 890 (ABI_64_P (abfd) \ 891 ? bfd_put_64 (abfd, val, ptr) \ 892 : bfd_put_32 (abfd, val, ptr)) 893 894 /* The opcode for word-sized loads (LW or LD). */ 895 #define MIPS_ELF_LOAD_WORD(abfd) \ 896 (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000) 897 898 /* Add a dynamic symbol table-entry. */ 899 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \ 900 _bfd_elf_add_dynamic_entry (info, tag, val) 901 902 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela) \ 903 (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (abfd, rtype, rela)) 904 905 /* The name of the dynamic relocation section. */ 906 #define MIPS_ELF_REL_DYN_NAME(INFO) \ 907 (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn") 908 909 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value 910 from smaller values. Start with zero, widen, *then* decrement. */ 911 #define MINUS_ONE (((bfd_vma)0) - 1) 912 #define MINUS_TWO (((bfd_vma)0) - 2) 913 914 /* The value to write into got[1] for SVR4 targets, to identify it is 915 a GNU object. The dynamic linker can then use got[1] to store the 916 module pointer. */ 917 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \ 918 ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31)) 919 920 /* The offset of $gp from the beginning of the .got section. */ 921 #define ELF_MIPS_GP_OFFSET(INFO) \ 922 (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0) 923 924 /* The maximum size of the GOT for it to be addressable using 16-bit 925 offsets from $gp. */ 926 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff) 927 928 /* Instructions which appear in a stub. */ 929 #define STUB_LW(abfd) \ 930 ((ABI_64_P (abfd) \ 931 ? 0xdf998010 /* ld t9,0x8010(gp) */ \ 932 : 0x8f998010)) /* lw t9,0x8010(gp) */ 933 #define STUB_MOVE 0x03e07825 /* or t7,ra,zero */ 934 #define STUB_LUI(VAL) (0x3c180000 + (VAL)) /* lui t8,VAL */ 935 #define STUB_JALR 0x0320f809 /* jalr ra,t9 */ 936 #define STUB_JALRC 0xf8190000 /* jalrc ra,t9 */ 937 #define STUB_ORI(VAL) (0x37180000 + (VAL)) /* ori t8,t8,VAL */ 938 #define STUB_LI16U(VAL) (0x34180000 + (VAL)) /* ori t8,zero,VAL unsigned */ 939 #define STUB_LI16S(abfd, VAL) \ 940 ((ABI_64_P (abfd) \ 941 ? (0x64180000 + (VAL)) /* daddiu t8,zero,VAL sign extended */ \ 942 : (0x24180000 + (VAL)))) /* addiu t8,zero,VAL sign extended */ 943 944 /* Likewise for the microMIPS ASE. */ 945 #define STUB_LW_MICROMIPS(abfd) \ 946 (ABI_64_P (abfd) \ 947 ? 0xdf3c8010 /* ld t9,0x8010(gp) */ \ 948 : 0xff3c8010) /* lw t9,0x8010(gp) */ 949 #define STUB_MOVE_MICROMIPS 0x0dff /* move t7,ra */ 950 #define STUB_MOVE32_MICROMIPS 0x001f7a90 /* or t7,ra,zero */ 951 #define STUB_LUI_MICROMIPS(VAL) \ 952 (0x41b80000 + (VAL)) /* lui t8,VAL */ 953 #define STUB_JALR_MICROMIPS 0x45d9 /* jalr t9 */ 954 #define STUB_JALR32_MICROMIPS 0x03f90f3c /* jalr ra,t9 */ 955 #define STUB_ORI_MICROMIPS(VAL) \ 956 (0x53180000 + (VAL)) /* ori t8,t8,VAL */ 957 #define STUB_LI16U_MICROMIPS(VAL) \ 958 (0x53000000 + (VAL)) /* ori t8,zero,VAL unsigned */ 959 #define STUB_LI16S_MICROMIPS(abfd, VAL) \ 960 (ABI_64_P (abfd) \ 961 ? 0x5f000000 + (VAL) /* daddiu t8,zero,VAL sign extended */ \ 962 : 0x33000000 + (VAL)) /* addiu t8,zero,VAL sign extended */ 963 964 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16 965 #define MIPS_FUNCTION_STUB_BIG_SIZE 20 966 #define MICROMIPS_FUNCTION_STUB_NORMAL_SIZE 12 967 #define MICROMIPS_FUNCTION_STUB_BIG_SIZE 16 968 #define MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE 16 969 #define MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 20 970 971 /* The name of the dynamic interpreter. This is put in the .interp 972 section. */ 973 974 #define ELF_DYNAMIC_INTERPRETER(abfd) \ 975 (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" \ 976 : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" \ 977 : "/usr/lib/libc.so.1") 978 979 #ifdef BFD64 980 #define MNAME(bfd,pre,pos) \ 981 (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos)) 982 #define ELF_R_SYM(bfd, i) \ 983 (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i)) 984 #define ELF_R_TYPE(bfd, i) \ 985 (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i)) 986 #define ELF_R_INFO(bfd, s, t) \ 987 (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t)) 988 #else 989 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos) 990 #define ELF_R_SYM(bfd, i) \ 991 (ELF32_R_SYM (i)) 992 #define ELF_R_TYPE(bfd, i) \ 993 (ELF32_R_TYPE (i)) 994 #define ELF_R_INFO(bfd, s, t) \ 995 (ELF32_R_INFO (s, t)) 996 #endif 997 998 /* The mips16 compiler uses a couple of special sections to handle 999 floating point arguments. 1000 1001 Section names that look like .mips16.fn.FNNAME contain stubs that 1002 copy floating point arguments from the fp regs to the gp regs and 1003 then jump to FNNAME. If any 32 bit function calls FNNAME, the 1004 call should be redirected to the stub instead. If no 32 bit 1005 function calls FNNAME, the stub should be discarded. We need to 1006 consider any reference to the function, not just a call, because 1007 if the address of the function is taken we will need the stub, 1008 since the address might be passed to a 32 bit function. 1009 1010 Section names that look like .mips16.call.FNNAME contain stubs 1011 that copy floating point arguments from the gp regs to the fp 1012 regs and then jump to FNNAME. If FNNAME is a 32 bit function, 1013 then any 16 bit function that calls FNNAME should be redirected 1014 to the stub instead. If FNNAME is not a 32 bit function, the 1015 stub should be discarded. 1016 1017 .mips16.call.fp.FNNAME sections are similar, but contain stubs 1018 which call FNNAME and then copy the return value from the fp regs 1019 to the gp regs. These stubs store the return value in $18 while 1020 calling FNNAME; any function which might call one of these stubs 1021 must arrange to save $18 around the call. (This case is not 1022 needed for 32 bit functions that call 16 bit functions, because 1023 16 bit functions always return floating point values in both 1024 $f0/$f1 and $2/$3.) 1025 1026 Note that in all cases FNNAME might be defined statically. 1027 Therefore, FNNAME is not used literally. Instead, the relocation 1028 information will indicate which symbol the section is for. 1029 1030 We record any stubs that we find in the symbol table. */ 1031 1032 #define FN_STUB ".mips16.fn." 1033 #define CALL_STUB ".mips16.call." 1034 #define CALL_FP_STUB ".mips16.call.fp." 1035 1036 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB) 1037 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB) 1038 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB) 1039 1040 /* The format of the first PLT entry in an O32 executable. */ 1041 static const bfd_vma mips_o32_exec_plt0_entry[] = 1042 { 1043 0x3c1c0000, /* lui $28, %hi(&GOTPLT[0]) */ 1044 0x8f990000, /* lw $25, %lo(&GOTPLT[0])($28) */ 1045 0x279c0000, /* addiu $28, $28, %lo(&GOTPLT[0]) */ 1046 0x031cc023, /* subu $24, $24, $28 */ 1047 0x03e07825, /* or t7, ra, zero */ 1048 0x0018c082, /* srl $24, $24, 2 */ 1049 0x0320f809, /* jalr $25 */ 1050 0x2718fffe /* subu $24, $24, 2 */ 1051 }; 1052 1053 /* The format of the first PLT entry in an O32 executable using compact 1054 jumps. */ 1055 static const bfd_vma mipsr6_o32_exec_plt0_entry_compact[] = 1056 { 1057 0x3c1c0000, /* lui $28, %hi(&GOTPLT[0]) */ 1058 0x8f990000, /* lw $25, %lo(&GOTPLT[0])($28) */ 1059 0x279c0000, /* addiu $28, $28, %lo(&GOTPLT[0]) */ 1060 0x031cc023, /* subu $24, $24, $28 */ 1061 0x03e07821, /* move $15, $31 # 32-bit move (addu) */ 1062 0x0018c082, /* srl $24, $24, 2 */ 1063 0x2718fffe, /* subu $24, $24, 2 */ 1064 0xf8190000 /* jalrc $25 */ 1065 }; 1066 1067 /* The format of the first PLT entry in an N32 executable. Different 1068 because gp ($28) is not available; we use t2 ($14) instead. */ 1069 static const bfd_vma mips_n32_exec_plt0_entry[] = 1070 { 1071 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */ 1072 0x8dd90000, /* lw $25, %lo(&GOTPLT[0])($14) */ 1073 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */ 1074 0x030ec023, /* subu $24, $24, $14 */ 1075 0x03e07825, /* or t7, ra, zero */ 1076 0x0018c082, /* srl $24, $24, 2 */ 1077 0x0320f809, /* jalr $25 */ 1078 0x2718fffe /* subu $24, $24, 2 */ 1079 }; 1080 1081 /* The format of the first PLT entry in an N32 executable using compact 1082 jumps. Different because gp ($28) is not available; we use t2 ($14) 1083 instead. */ 1084 static const bfd_vma mipsr6_n32_exec_plt0_entry_compact[] = 1085 { 1086 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */ 1087 0x8dd90000, /* lw $25, %lo(&GOTPLT[0])($14) */ 1088 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */ 1089 0x030ec023, /* subu $24, $24, $14 */ 1090 0x03e07821, /* move $15, $31 # 32-bit move (addu) */ 1091 0x0018c082, /* srl $24, $24, 2 */ 1092 0x2718fffe, /* subu $24, $24, 2 */ 1093 0xf8190000 /* jalrc $25 */ 1094 }; 1095 1096 /* The format of the first PLT entry in an N64 executable. Different 1097 from N32 because of the increased size of GOT entries. */ 1098 static const bfd_vma mips_n64_exec_plt0_entry[] = 1099 { 1100 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */ 1101 0xddd90000, /* ld $25, %lo(&GOTPLT[0])($14) */ 1102 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */ 1103 0x030ec023, /* subu $24, $24, $14 */ 1104 0x03e07825, /* or t7, ra, zero */ 1105 0x0018c0c2, /* srl $24, $24, 3 */ 1106 0x0320f809, /* jalr $25 */ 1107 0x2718fffe /* subu $24, $24, 2 */ 1108 }; 1109 1110 /* The format of the first PLT entry in an N64 executable using compact 1111 jumps. Different from N32 because of the increased size of GOT 1112 entries. */ 1113 static const bfd_vma mipsr6_n64_exec_plt0_entry_compact[] = 1114 { 1115 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */ 1116 0xddd90000, /* ld $25, %lo(&GOTPLT[0])($14) */ 1117 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */ 1118 0x030ec023, /* subu $24, $24, $14 */ 1119 0x03e0782d, /* move $15, $31 # 64-bit move (daddu) */ 1120 0x0018c0c2, /* srl $24, $24, 3 */ 1121 0x2718fffe, /* subu $24, $24, 2 */ 1122 0xf8190000 /* jalrc $25 */ 1123 }; 1124 1125 1126 /* The format of the microMIPS first PLT entry in an O32 executable. 1127 We rely on v0 ($2) rather than t8 ($24) to contain the address 1128 of the GOTPLT entry handled, so this stub may only be used when 1129 all the subsequent PLT entries are microMIPS code too. 1130 1131 The trailing NOP is for alignment and correct disassembly only. */ 1132 static const bfd_vma micromips_o32_exec_plt0_entry[] = 1133 { 1134 0x7980, 0x0000, /* addiupc $3, (&GOTPLT[0]) - . */ 1135 0xff23, 0x0000, /* lw $25, 0($3) */ 1136 0x0535, /* subu $2, $2, $3 */ 1137 0x2525, /* srl $2, $2, 2 */ 1138 0x3302, 0xfffe, /* subu $24, $2, 2 */ 1139 0x0dff, /* move $15, $31 */ 1140 0x45f9, /* jalrs $25 */ 1141 0x0f83, /* move $28, $3 */ 1142 0x0c00 /* nop */ 1143 }; 1144 1145 /* The format of the microMIPS first PLT entry in an O32 executable 1146 in the insn32 mode. */ 1147 static const bfd_vma micromips_insn32_o32_exec_plt0_entry[] = 1148 { 1149 0x41bc, 0x0000, /* lui $28, %hi(&GOTPLT[0]) */ 1150 0xff3c, 0x0000, /* lw $25, %lo(&GOTPLT[0])($28) */ 1151 0x339c, 0x0000, /* addiu $28, $28, %lo(&GOTPLT[0]) */ 1152 0x0398, 0xc1d0, /* subu $24, $24, $28 */ 1153 0x001f, 0x7a90, /* or $15, $31, zero */ 1154 0x0318, 0x1040, /* srl $24, $24, 2 */ 1155 0x03f9, 0x0f3c, /* jalr $25 */ 1156 0x3318, 0xfffe /* subu $24, $24, 2 */ 1157 }; 1158 1159 /* The format of subsequent standard PLT entries. */ 1160 static const bfd_vma mips_exec_plt_entry[] = 1161 { 1162 0x3c0f0000, /* lui $15, %hi(.got.plt entry) */ 1163 0x01f90000, /* l[wd] $25, %lo(.got.plt entry)($15) */ 1164 0x25f80000, /* addiu $24, $15, %lo(.got.plt entry) */ 1165 0x03200008 /* jr $25 */ 1166 }; 1167 1168 static const bfd_vma mipsr6_exec_plt_entry[] = 1169 { 1170 0x3c0f0000, /* lui $15, %hi(.got.plt entry) */ 1171 0x01f90000, /* l[wd] $25, %lo(.got.plt entry)($15) */ 1172 0x25f80000, /* addiu $24, $15, %lo(.got.plt entry) */ 1173 0x03200009 /* jr $25 */ 1174 }; 1175 1176 static const bfd_vma mipsr6_exec_plt_entry_compact[] = 1177 { 1178 0x3c0f0000, /* lui $15, %hi(.got.plt entry) */ 1179 0x01f90000, /* l[wd] $25, %lo(.got.plt entry)($15) */ 1180 0x25f80000, /* addiu $24, $15, %lo(.got.plt entry) */ 1181 0xd8190000 /* jic $25, 0 */ 1182 }; 1183 1184 /* The format of subsequent MIPS16 o32 PLT entries. We use v0 ($2) 1185 and v1 ($3) as temporaries because t8 ($24) and t9 ($25) are not 1186 directly addressable. */ 1187 static const bfd_vma mips16_o32_exec_plt_entry[] = 1188 { 1189 0xb203, /* lw $2, 12($pc) */ 1190 0x9a60, /* lw $3, 0($2) */ 1191 0x651a, /* move $24, $2 */ 1192 0xeb00, /* jr $3 */ 1193 0x653b, /* move $25, $3 */ 1194 0x6500, /* nop */ 1195 0x0000, 0x0000 /* .word (.got.plt entry) */ 1196 }; 1197 1198 /* The format of subsequent microMIPS o32 PLT entries. We use v0 ($2) 1199 as a temporary because t8 ($24) is not addressable with ADDIUPC. */ 1200 static const bfd_vma micromips_o32_exec_plt_entry[] = 1201 { 1202 0x7900, 0x0000, /* addiupc $2, (.got.plt entry) - . */ 1203 0xff22, 0x0000, /* lw $25, 0($2) */ 1204 0x4599, /* jr $25 */ 1205 0x0f02 /* move $24, $2 */ 1206 }; 1207 1208 /* The format of subsequent microMIPS o32 PLT entries in the insn32 mode. */ 1209 static const bfd_vma micromips_insn32_o32_exec_plt_entry[] = 1210 { 1211 0x41af, 0x0000, /* lui $15, %hi(.got.plt entry) */ 1212 0xff2f, 0x0000, /* lw $25, %lo(.got.plt entry)($15) */ 1213 0x0019, 0x0f3c, /* jr $25 */ 1214 0x330f, 0x0000 /* addiu $24, $15, %lo(.got.plt entry) */ 1215 }; 1216 1217 /* The format of the first PLT entry in a VxWorks executable. */ 1218 static const bfd_vma mips_vxworks_exec_plt0_entry[] = 1219 { 1220 0x3c190000, /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_) */ 1221 0x27390000, /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_) */ 1222 0x8f390008, /* lw t9, 8(t9) */ 1223 0x00000000, /* nop */ 1224 0x03200008, /* jr t9 */ 1225 0x00000000 /* nop */ 1226 }; 1227 1228 /* The format of subsequent PLT entries. */ 1229 static const bfd_vma mips_vxworks_exec_plt_entry[] = 1230 { 1231 0x10000000, /* b .PLT_resolver */ 1232 0x24180000, /* li t8, <pltindex> */ 1233 0x3c190000, /* lui t9, %hi(<.got.plt slot>) */ 1234 0x27390000, /* addiu t9, t9, %lo(<.got.plt slot>) */ 1235 0x8f390000, /* lw t9, 0(t9) */ 1236 0x00000000, /* nop */ 1237 0x03200008, /* jr t9 */ 1238 0x00000000 /* nop */ 1239 }; 1240 1241 /* The format of the first PLT entry in a VxWorks shared object. */ 1242 static const bfd_vma mips_vxworks_shared_plt0_entry[] = 1243 { 1244 0x8f990008, /* lw t9, 8(gp) */ 1245 0x00000000, /* nop */ 1246 0x03200008, /* jr t9 */ 1247 0x00000000, /* nop */ 1248 0x00000000, /* nop */ 1249 0x00000000 /* nop */ 1250 }; 1251 1252 /* The format of subsequent PLT entries. */ 1253 static const bfd_vma mips_vxworks_shared_plt_entry[] = 1254 { 1255 0x10000000, /* b .PLT_resolver */ 1256 0x24180000 /* li t8, <pltindex> */ 1257 }; 1258 1259 /* microMIPS 32-bit opcode helper installer. */ 1260 1261 static void 1262 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr) 1263 { 1264 bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr); 1265 bfd_put_16 (abfd, opcode & 0xffff, ptr + 2); 1266 } 1267 1268 /* microMIPS 32-bit opcode helper retriever. */ 1269 1270 static bfd_vma 1271 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr) 1272 { 1273 return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2); 1274 } 1275 1276 /* Look up an entry in a MIPS ELF linker hash table. */ 1277 1278 #define mips_elf_link_hash_lookup(table, string, create, copy, follow) \ 1279 ((struct mips_elf_link_hash_entry *) \ 1280 elf_link_hash_lookup (&(table)->root, (string), (create), \ 1281 (copy), (follow))) 1282 1283 /* Traverse a MIPS ELF linker hash table. */ 1284 1285 #define mips_elf_link_hash_traverse(table, func, info) \ 1286 (elf_link_hash_traverse \ 1287 (&(table)->root, \ 1288 (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \ 1289 (info))) 1290 1291 /* Find the base offsets for thread-local storage in this object, 1292 for GD/LD and IE/LE respectively. */ 1293 1294 #define TP_OFFSET 0x7000 1295 #define DTP_OFFSET 0x8000 1296 1297 static bfd_vma 1298 dtprel_base (struct bfd_link_info *info) 1299 { 1300 /* If tls_sec is NULL, we should have signalled an error already. */ 1301 if (elf_hash_table (info)->tls_sec == NULL) 1302 return 0; 1303 return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET; 1304 } 1305 1306 static bfd_vma 1307 tprel_base (struct bfd_link_info *info) 1308 { 1309 /* If tls_sec is NULL, we should have signalled an error already. */ 1310 if (elf_hash_table (info)->tls_sec == NULL) 1311 return 0; 1312 return elf_hash_table (info)->tls_sec->vma + TP_OFFSET; 1313 } 1314 1315 /* Create an entry in a MIPS ELF linker hash table. */ 1316 1317 static struct bfd_hash_entry * 1318 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry, 1319 struct bfd_hash_table *table, const char *string) 1320 { 1321 struct mips_elf_link_hash_entry *ret = 1322 (struct mips_elf_link_hash_entry *) entry; 1323 1324 /* Allocate the structure if it has not already been allocated by a 1325 subclass. */ 1326 if (ret == NULL) 1327 ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry)); 1328 if (ret == NULL) 1329 return (struct bfd_hash_entry *) ret; 1330 1331 /* Call the allocation method of the superclass. */ 1332 ret = ((struct mips_elf_link_hash_entry *) 1333 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret, 1334 table, string)); 1335 if (ret != NULL) 1336 { 1337 /* Set local fields. */ 1338 memset (&ret->esym, 0, sizeof (EXTR)); 1339 /* We use -2 as a marker to indicate that the information has 1340 not been set. -1 means there is no associated ifd. */ 1341 ret->esym.ifd = -2; 1342 ret->la25_stub = 0; 1343 ret->possibly_dynamic_relocs = 0; 1344 ret->fn_stub = NULL; 1345 ret->call_stub = NULL; 1346 ret->call_fp_stub = NULL; 1347 ret->mipsxhash_loc = 0; 1348 ret->global_got_area = GGA_NONE; 1349 ret->got_only_for_calls = TRUE; 1350 ret->readonly_reloc = FALSE; 1351 ret->has_static_relocs = FALSE; 1352 ret->no_fn_stub = FALSE; 1353 ret->need_fn_stub = FALSE; 1354 ret->has_nonpic_branches = FALSE; 1355 ret->needs_lazy_stub = FALSE; 1356 ret->use_plt_entry = FALSE; 1357 } 1358 1359 return (struct bfd_hash_entry *) ret; 1360 } 1361 1362 /* Allocate MIPS ELF private object data. */ 1363 1364 bfd_boolean 1365 _bfd_mips_elf_mkobject (bfd *abfd) 1366 { 1367 return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata), 1368 MIPS_ELF_DATA); 1369 } 1370 1371 bfd_boolean 1372 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec) 1373 { 1374 if (!sec->used_by_bfd) 1375 { 1376 struct _mips_elf_section_data *sdata; 1377 bfd_size_type amt = sizeof (*sdata); 1378 1379 sdata = bfd_zalloc (abfd, amt); 1380 if (sdata == NULL) 1381 return FALSE; 1382 sec->used_by_bfd = sdata; 1383 } 1384 1385 return _bfd_elf_new_section_hook (abfd, sec); 1386 } 1387 1388 /* Read ECOFF debugging information from a .mdebug section into a 1389 ecoff_debug_info structure. */ 1390 1391 bfd_boolean 1392 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section, 1393 struct ecoff_debug_info *debug) 1394 { 1395 HDRR *symhdr; 1396 const struct ecoff_debug_swap *swap; 1397 char *ext_hdr; 1398 1399 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap; 1400 memset (debug, 0, sizeof (*debug)); 1401 1402 ext_hdr = bfd_malloc (swap->external_hdr_size); 1403 if (ext_hdr == NULL && swap->external_hdr_size != 0) 1404 goto error_return; 1405 1406 if (! bfd_get_section_contents (abfd, section, ext_hdr, 0, 1407 swap->external_hdr_size)) 1408 goto error_return; 1409 1410 symhdr = &debug->symbolic_header; 1411 (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr); 1412 1413 /* The symbolic header contains absolute file offsets and sizes to 1414 read. */ 1415 #define READ(ptr, offset, count, size, type) \ 1416 if (symhdr->count == 0) \ 1417 debug->ptr = NULL; \ 1418 else \ 1419 { \ 1420 bfd_size_type amt = (bfd_size_type) size * symhdr->count; \ 1421 debug->ptr = bfd_malloc (amt); \ 1422 if (debug->ptr == NULL) \ 1423 goto error_return; \ 1424 if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0 \ 1425 || bfd_bread (debug->ptr, amt, abfd) != amt) \ 1426 goto error_return; \ 1427 } 1428 1429 READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *); 1430 READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *); 1431 READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *); 1432 READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *); 1433 READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *); 1434 READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext), 1435 union aux_ext *); 1436 READ (ss, cbSsOffset, issMax, sizeof (char), char *); 1437 READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *); 1438 READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *); 1439 READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *); 1440 READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *); 1441 #undef READ 1442 1443 debug->fdr = NULL; 1444 1445 return TRUE; 1446 1447 error_return: 1448 if (ext_hdr != NULL) 1449 free (ext_hdr); 1450 if (debug->line != NULL) 1451 free (debug->line); 1452 if (debug->external_dnr != NULL) 1453 free (debug->external_dnr); 1454 if (debug->external_pdr != NULL) 1455 free (debug->external_pdr); 1456 if (debug->external_sym != NULL) 1457 free (debug->external_sym); 1458 if (debug->external_opt != NULL) 1459 free (debug->external_opt); 1460 if (debug->external_aux != NULL) 1461 free (debug->external_aux); 1462 if (debug->ss != NULL) 1463 free (debug->ss); 1464 if (debug->ssext != NULL) 1465 free (debug->ssext); 1466 if (debug->external_fdr != NULL) 1467 free (debug->external_fdr); 1468 if (debug->external_rfd != NULL) 1469 free (debug->external_rfd); 1470 if (debug->external_ext != NULL) 1471 free (debug->external_ext); 1472 return FALSE; 1473 } 1474 1475 /* Swap RPDR (runtime procedure table entry) for output. */ 1476 1477 static void 1478 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex) 1479 { 1480 H_PUT_S32 (abfd, in->adr, ex->p_adr); 1481 H_PUT_32 (abfd, in->regmask, ex->p_regmask); 1482 H_PUT_32 (abfd, in->regoffset, ex->p_regoffset); 1483 H_PUT_32 (abfd, in->fregmask, ex->p_fregmask); 1484 H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset); 1485 H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset); 1486 1487 H_PUT_16 (abfd, in->framereg, ex->p_framereg); 1488 H_PUT_16 (abfd, in->pcreg, ex->p_pcreg); 1489 1490 H_PUT_32 (abfd, in->irpss, ex->p_irpss); 1491 } 1492 1493 /* Create a runtime procedure table from the .mdebug section. */ 1494 1495 static bfd_boolean 1496 mips_elf_create_procedure_table (void *handle, bfd *abfd, 1497 struct bfd_link_info *info, asection *s, 1498 struct ecoff_debug_info *debug) 1499 { 1500 const struct ecoff_debug_swap *swap; 1501 HDRR *hdr = &debug->symbolic_header; 1502 RPDR *rpdr, *rp; 1503 struct rpdr_ext *erp; 1504 void *rtproc; 1505 struct pdr_ext *epdr; 1506 struct sym_ext *esym; 1507 char *ss, **sv; 1508 char *str; 1509 bfd_size_type size; 1510 bfd_size_type count; 1511 unsigned long sindex; 1512 unsigned long i; 1513 PDR pdr; 1514 SYMR sym; 1515 const char *no_name_func = _("static procedure (no name)"); 1516 1517 epdr = NULL; 1518 rpdr = NULL; 1519 esym = NULL; 1520 ss = NULL; 1521 sv = NULL; 1522 1523 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap; 1524 1525 sindex = strlen (no_name_func) + 1; 1526 count = hdr->ipdMax; 1527 if (count > 0) 1528 { 1529 size = swap->external_pdr_size; 1530 1531 epdr = bfd_malloc (size * count); 1532 if (epdr == NULL) 1533 goto error_return; 1534 1535 if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr)) 1536 goto error_return; 1537 1538 size = sizeof (RPDR); 1539 rp = rpdr = bfd_malloc (size * count); 1540 if (rpdr == NULL) 1541 goto error_return; 1542 1543 size = sizeof (char *); 1544 sv = bfd_malloc (size * count); 1545 if (sv == NULL) 1546 goto error_return; 1547 1548 count = hdr->isymMax; 1549 size = swap->external_sym_size; 1550 esym = bfd_malloc (size * count); 1551 if (esym == NULL) 1552 goto error_return; 1553 1554 if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym)) 1555 goto error_return; 1556 1557 count = hdr->issMax; 1558 ss = bfd_malloc (count); 1559 if (ss == NULL) 1560 goto error_return; 1561 if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss)) 1562 goto error_return; 1563 1564 count = hdr->ipdMax; 1565 for (i = 0; i < (unsigned long) count; i++, rp++) 1566 { 1567 (*swap->swap_pdr_in) (abfd, epdr + i, &pdr); 1568 (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym); 1569 rp->adr = sym.value; 1570 rp->regmask = pdr.regmask; 1571 rp->regoffset = pdr.regoffset; 1572 rp->fregmask = pdr.fregmask; 1573 rp->fregoffset = pdr.fregoffset; 1574 rp->frameoffset = pdr.frameoffset; 1575 rp->framereg = pdr.framereg; 1576 rp->pcreg = pdr.pcreg; 1577 rp->irpss = sindex; 1578 sv[i] = ss + sym.iss; 1579 sindex += strlen (sv[i]) + 1; 1580 } 1581 } 1582 1583 size = sizeof (struct rpdr_ext) * (count + 2) + sindex; 1584 size = BFD_ALIGN (size, 16); 1585 rtproc = bfd_alloc (abfd, size); 1586 if (rtproc == NULL) 1587 { 1588 mips_elf_hash_table (info)->procedure_count = 0; 1589 goto error_return; 1590 } 1591 1592 mips_elf_hash_table (info)->procedure_count = count + 2; 1593 1594 erp = rtproc; 1595 memset (erp, 0, sizeof (struct rpdr_ext)); 1596 erp++; 1597 str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2); 1598 strcpy (str, no_name_func); 1599 str += strlen (no_name_func) + 1; 1600 for (i = 0; i < count; i++) 1601 { 1602 ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i); 1603 strcpy (str, sv[i]); 1604 str += strlen (sv[i]) + 1; 1605 } 1606 H_PUT_S32 (abfd, -1, (erp + count)->p_adr); 1607 1608 /* Set the size and contents of .rtproc section. */ 1609 s->size = size; 1610 s->contents = rtproc; 1611 1612 /* Skip this section later on (I don't think this currently 1613 matters, but someday it might). */ 1614 s->map_head.link_order = NULL; 1615 1616 if (epdr != NULL) 1617 free (epdr); 1618 if (rpdr != NULL) 1619 free (rpdr); 1620 if (esym != NULL) 1621 free (esym); 1622 if (ss != NULL) 1623 free (ss); 1624 if (sv != NULL) 1625 free (sv); 1626 1627 return TRUE; 1628 1629 error_return: 1630 if (epdr != NULL) 1631 free (epdr); 1632 if (rpdr != NULL) 1633 free (rpdr); 1634 if (esym != NULL) 1635 free (esym); 1636 if (ss != NULL) 1637 free (ss); 1638 if (sv != NULL) 1639 free (sv); 1640 return FALSE; 1641 } 1642 1643 /* We're going to create a stub for H. Create a symbol for the stub's 1644 value and size, to help make the disassembly easier to read. */ 1645 1646 static bfd_boolean 1647 mips_elf_create_stub_symbol (struct bfd_link_info *info, 1648 struct mips_elf_link_hash_entry *h, 1649 const char *prefix, asection *s, bfd_vma value, 1650 bfd_vma size) 1651 { 1652 bfd_boolean micromips_p = ELF_ST_IS_MICROMIPS (h->root.other); 1653 struct bfd_link_hash_entry *bh; 1654 struct elf_link_hash_entry *elfh; 1655 char *name; 1656 bfd_boolean res; 1657 1658 if (micromips_p) 1659 value |= 1; 1660 1661 /* Create a new symbol. */ 1662 name = concat (prefix, h->root.root.root.string, NULL); 1663 bh = NULL; 1664 res = _bfd_generic_link_add_one_symbol (info, s->owner, name, 1665 BSF_LOCAL, s, value, NULL, 1666 TRUE, FALSE, &bh); 1667 free (name); 1668 if (! res) 1669 return FALSE; 1670 1671 /* Make it a local function. */ 1672 elfh = (struct elf_link_hash_entry *) bh; 1673 elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC); 1674 elfh->size = size; 1675 elfh->forced_local = 1; 1676 if (micromips_p) 1677 elfh->other = ELF_ST_SET_MICROMIPS (elfh->other); 1678 return TRUE; 1679 } 1680 1681 /* We're about to redefine H. Create a symbol to represent H's 1682 current value and size, to help make the disassembly easier 1683 to read. */ 1684 1685 static bfd_boolean 1686 mips_elf_create_shadow_symbol (struct bfd_link_info *info, 1687 struct mips_elf_link_hash_entry *h, 1688 const char *prefix) 1689 { 1690 struct bfd_link_hash_entry *bh; 1691 struct elf_link_hash_entry *elfh; 1692 char *name; 1693 asection *s; 1694 bfd_vma value; 1695 bfd_boolean res; 1696 1697 /* Read the symbol's value. */ 1698 BFD_ASSERT (h->root.root.type == bfd_link_hash_defined 1699 || h->root.root.type == bfd_link_hash_defweak); 1700 s = h->root.root.u.def.section; 1701 value = h->root.root.u.def.value; 1702 1703 /* Create a new symbol. */ 1704 name = concat (prefix, h->root.root.root.string, NULL); 1705 bh = NULL; 1706 res = _bfd_generic_link_add_one_symbol (info, s->owner, name, 1707 BSF_LOCAL, s, value, NULL, 1708 TRUE, FALSE, &bh); 1709 free (name); 1710 if (! res) 1711 return FALSE; 1712 1713 /* Make it local and copy the other attributes from H. */ 1714 elfh = (struct elf_link_hash_entry *) bh; 1715 elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type)); 1716 elfh->other = h->root.other; 1717 elfh->size = h->root.size; 1718 elfh->forced_local = 1; 1719 return TRUE; 1720 } 1721 1722 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16 1723 function rather than to a hard-float stub. */ 1724 1725 static bfd_boolean 1726 section_allows_mips16_refs_p (asection *section) 1727 { 1728 const char *name; 1729 1730 name = bfd_section_name (section); 1731 return (FN_STUB_P (name) 1732 || CALL_STUB_P (name) 1733 || CALL_FP_STUB_P (name) 1734 || strcmp (name, ".pdr") == 0); 1735 } 1736 1737 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16 1738 stub section of some kind. Return the R_SYMNDX of the target 1739 function, or 0 if we can't decide which function that is. */ 1740 1741 static unsigned long 1742 mips16_stub_symndx (const struct elf_backend_data *bed, 1743 asection *sec ATTRIBUTE_UNUSED, 1744 const Elf_Internal_Rela *relocs, 1745 const Elf_Internal_Rela *relend) 1746 { 1747 int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel; 1748 const Elf_Internal_Rela *rel; 1749 1750 /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent 1751 one in a compound relocation. */ 1752 for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel) 1753 if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE) 1754 return ELF_R_SYM (sec->owner, rel->r_info); 1755 1756 /* Otherwise trust the first relocation, whatever its kind. This is 1757 the traditional behavior. */ 1758 if (relocs < relend) 1759 return ELF_R_SYM (sec->owner, relocs->r_info); 1760 1761 return 0; 1762 } 1763 1764 /* Check the mips16 stubs for a particular symbol, and see if we can 1765 discard them. */ 1766 1767 static void 1768 mips_elf_check_mips16_stubs (struct bfd_link_info *info, 1769 struct mips_elf_link_hash_entry *h) 1770 { 1771 /* Dynamic symbols must use the standard call interface, in case other 1772 objects try to call them. */ 1773 if (h->fn_stub != NULL 1774 && h->root.dynindx != -1) 1775 { 1776 mips_elf_create_shadow_symbol (info, h, ".mips16."); 1777 h->need_fn_stub = TRUE; 1778 } 1779 1780 if (h->fn_stub != NULL 1781 && ! h->need_fn_stub) 1782 { 1783 /* We don't need the fn_stub; the only references to this symbol 1784 are 16 bit calls. Clobber the size to 0 to prevent it from 1785 being included in the link. */ 1786 h->fn_stub->size = 0; 1787 h->fn_stub->flags &= ~SEC_RELOC; 1788 h->fn_stub->reloc_count = 0; 1789 h->fn_stub->flags |= SEC_EXCLUDE; 1790 h->fn_stub->output_section = bfd_abs_section_ptr; 1791 } 1792 1793 if (h->call_stub != NULL 1794 && ELF_ST_IS_MIPS16 (h->root.other)) 1795 { 1796 /* We don't need the call_stub; this is a 16 bit function, so 1797 calls from other 16 bit functions are OK. Clobber the size 1798 to 0 to prevent it from being included in the link. */ 1799 h->call_stub->size = 0; 1800 h->call_stub->flags &= ~SEC_RELOC; 1801 h->call_stub->reloc_count = 0; 1802 h->call_stub->flags |= SEC_EXCLUDE; 1803 h->call_stub->output_section = bfd_abs_section_ptr; 1804 } 1805 1806 if (h->call_fp_stub != NULL 1807 && ELF_ST_IS_MIPS16 (h->root.other)) 1808 { 1809 /* We don't need the call_stub; this is a 16 bit function, so 1810 calls from other 16 bit functions are OK. Clobber the size 1811 to 0 to prevent it from being included in the link. */ 1812 h->call_fp_stub->size = 0; 1813 h->call_fp_stub->flags &= ~SEC_RELOC; 1814 h->call_fp_stub->reloc_count = 0; 1815 h->call_fp_stub->flags |= SEC_EXCLUDE; 1816 h->call_fp_stub->output_section = bfd_abs_section_ptr; 1817 } 1818 } 1819 1820 /* Hashtable callbacks for mips_elf_la25_stubs. */ 1821 1822 static hashval_t 1823 mips_elf_la25_stub_hash (const void *entry_) 1824 { 1825 const struct mips_elf_la25_stub *entry; 1826 1827 entry = (struct mips_elf_la25_stub *) entry_; 1828 return entry->h->root.root.u.def.section->id 1829 + entry->h->root.root.u.def.value; 1830 } 1831 1832 static int 1833 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_) 1834 { 1835 const struct mips_elf_la25_stub *entry1, *entry2; 1836 1837 entry1 = (struct mips_elf_la25_stub *) entry1_; 1838 entry2 = (struct mips_elf_la25_stub *) entry2_; 1839 return ((entry1->h->root.root.u.def.section 1840 == entry2->h->root.root.u.def.section) 1841 && (entry1->h->root.root.u.def.value 1842 == entry2->h->root.root.u.def.value)); 1843 } 1844 1845 /* Called by the linker to set up the la25 stub-creation code. FN is 1846 the linker's implementation of add_stub_function. Return true on 1847 success. */ 1848 1849 bfd_boolean 1850 _bfd_mips_elf_init_stubs (struct bfd_link_info *info, 1851 asection *(*fn) (const char *, asection *, 1852 asection *)) 1853 { 1854 struct mips_elf_link_hash_table *htab; 1855 1856 htab = mips_elf_hash_table (info); 1857 if (htab == NULL) 1858 return FALSE; 1859 1860 htab->add_stub_section = fn; 1861 htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash, 1862 mips_elf_la25_stub_eq, NULL); 1863 if (htab->la25_stubs == NULL) 1864 return FALSE; 1865 1866 return TRUE; 1867 } 1868 1869 /* Return true if H is a locally-defined PIC function, in the sense 1870 that it or its fn_stub might need $25 to be valid on entry. 1871 Note that MIPS16 functions set up $gp using PC-relative instructions, 1872 so they themselves never need $25 to be valid. Only non-MIPS16 1873 entry points are of interest here. */ 1874 1875 static bfd_boolean 1876 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h) 1877 { 1878 return ((h->root.root.type == bfd_link_hash_defined 1879 || h->root.root.type == bfd_link_hash_defweak) 1880 && h->root.def_regular 1881 && !bfd_is_abs_section (h->root.root.u.def.section) 1882 && !bfd_is_und_section (h->root.root.u.def.section) 1883 && (!ELF_ST_IS_MIPS16 (h->root.other) 1884 || (h->fn_stub && h->need_fn_stub)) 1885 && (PIC_OBJECT_P (h->root.root.u.def.section->owner) 1886 || ELF_ST_IS_MIPS_PIC (h->root.other))); 1887 } 1888 1889 /* Set *SEC to the input section that contains the target of STUB. 1890 Return the offset of the target from the start of that section. */ 1891 1892 static bfd_vma 1893 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub, 1894 asection **sec) 1895 { 1896 if (ELF_ST_IS_MIPS16 (stub->h->root.other)) 1897 { 1898 BFD_ASSERT (stub->h->need_fn_stub); 1899 *sec = stub->h->fn_stub; 1900 return 0; 1901 } 1902 else 1903 { 1904 *sec = stub->h->root.root.u.def.section; 1905 return stub->h->root.root.u.def.value; 1906 } 1907 } 1908 1909 /* STUB describes an la25 stub that we have decided to implement 1910 by inserting an LUI/ADDIU pair before the target function. 1911 Create the section and redirect the function symbol to it. */ 1912 1913 static bfd_boolean 1914 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub, 1915 struct bfd_link_info *info) 1916 { 1917 struct mips_elf_link_hash_table *htab; 1918 char *name; 1919 asection *s, *input_section; 1920 unsigned int align; 1921 1922 htab = mips_elf_hash_table (info); 1923 if (htab == NULL) 1924 return FALSE; 1925 1926 /* Create a unique name for the new section. */ 1927 name = bfd_malloc (11 + sizeof (".text.stub.")); 1928 if (name == NULL) 1929 return FALSE; 1930 sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs)); 1931 1932 /* Create the section. */ 1933 mips_elf_get_la25_target (stub, &input_section); 1934 s = htab->add_stub_section (name, input_section, 1935 input_section->output_section); 1936 if (s == NULL) 1937 return FALSE; 1938 1939 /* Make sure that any padding goes before the stub. */ 1940 align = input_section->alignment_power; 1941 if (!bfd_set_section_alignment (s, align)) 1942 return FALSE; 1943 if (align > 3) 1944 s->size = (1 << align) - 8; 1945 1946 /* Create a symbol for the stub. */ 1947 mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8); 1948 stub->stub_section = s; 1949 stub->offset = s->size; 1950 1951 /* Allocate room for it. */ 1952 s->size += 8; 1953 return TRUE; 1954 } 1955 1956 /* STUB describes an la25 stub that we have decided to implement 1957 with a separate trampoline. Allocate room for it and redirect 1958 the function symbol to it. */ 1959 1960 static bfd_boolean 1961 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub, 1962 struct bfd_link_info *info) 1963 { 1964 struct mips_elf_link_hash_table *htab; 1965 asection *s; 1966 1967 htab = mips_elf_hash_table (info); 1968 if (htab == NULL) 1969 return FALSE; 1970 1971 /* Create a trampoline section, if we haven't already. */ 1972 s = htab->strampoline; 1973 if (s == NULL) 1974 { 1975 asection *input_section = stub->h->root.root.u.def.section; 1976 s = htab->add_stub_section (".text", NULL, 1977 input_section->output_section); 1978 if (s == NULL || !bfd_set_section_alignment (s, 4)) 1979 return FALSE; 1980 htab->strampoline = s; 1981 } 1982 1983 /* Create a symbol for the stub. */ 1984 mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16); 1985 stub->stub_section = s; 1986 stub->offset = s->size; 1987 1988 /* Allocate room for it. */ 1989 s->size += 16; 1990 return TRUE; 1991 } 1992 1993 /* H describes a symbol that needs an la25 stub. Make sure that an 1994 appropriate stub exists and point H at it. */ 1995 1996 static bfd_boolean 1997 mips_elf_add_la25_stub (struct bfd_link_info *info, 1998 struct mips_elf_link_hash_entry *h) 1999 { 2000 struct mips_elf_link_hash_table *htab; 2001 struct mips_elf_la25_stub search, *stub; 2002 bfd_boolean use_trampoline_p; 2003 asection *s; 2004 bfd_vma value; 2005 void **slot; 2006 2007 /* Describe the stub we want. */ 2008 search.stub_section = NULL; 2009 search.offset = 0; 2010 search.h = h; 2011 2012 /* See if we've already created an equivalent stub. */ 2013 htab = mips_elf_hash_table (info); 2014 if (htab == NULL) 2015 return FALSE; 2016 2017 slot = htab_find_slot (htab->la25_stubs, &search, INSERT); 2018 if (slot == NULL) 2019 return FALSE; 2020 2021 stub = (struct mips_elf_la25_stub *) *slot; 2022 if (stub != NULL) 2023 { 2024 /* We can reuse the existing stub. */ 2025 h->la25_stub = stub; 2026 return TRUE; 2027 } 2028 2029 /* Create a permanent copy of ENTRY and add it to the hash table. */ 2030 stub = bfd_malloc (sizeof (search)); 2031 if (stub == NULL) 2032 return FALSE; 2033 *stub = search; 2034 *slot = stub; 2035 2036 /* Prefer to use LUI/ADDIU stubs if the function is at the beginning 2037 of the section and if we would need no more than 2 nops. */ 2038 value = mips_elf_get_la25_target (stub, &s); 2039 if (ELF_ST_IS_MICROMIPS (stub->h->root.other)) 2040 value &= ~1; 2041 use_trampoline_p = (value != 0 || s->alignment_power > 4); 2042 2043 h->la25_stub = stub; 2044 return (use_trampoline_p 2045 ? mips_elf_add_la25_trampoline (stub, info) 2046 : mips_elf_add_la25_intro (stub, info)); 2047 } 2048 2049 /* A mips_elf_link_hash_traverse callback that is called before sizing 2050 sections. DATA points to a mips_htab_traverse_info structure. */ 2051 2052 static bfd_boolean 2053 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data) 2054 { 2055 struct mips_htab_traverse_info *hti; 2056 2057 hti = (struct mips_htab_traverse_info *) data; 2058 if (!bfd_link_relocatable (hti->info)) 2059 mips_elf_check_mips16_stubs (hti->info, h); 2060 2061 if (mips_elf_local_pic_function_p (h)) 2062 { 2063 /* PR 12845: If H is in a section that has been garbage 2064 collected it will have its output section set to *ABS*. */ 2065 if (bfd_is_abs_section (h->root.root.u.def.section->output_section)) 2066 return TRUE; 2067 2068 /* H is a function that might need $25 to be valid on entry. 2069 If we're creating a non-PIC relocatable object, mark H as 2070 being PIC. If we're creating a non-relocatable object with 2071 non-PIC branches and jumps to H, make sure that H has an la25 2072 stub. */ 2073 if (bfd_link_relocatable (hti->info)) 2074 { 2075 if (!PIC_OBJECT_P (hti->output_bfd)) 2076 h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other); 2077 } 2078 else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h)) 2079 { 2080 hti->error = TRUE; 2081 return FALSE; 2082 } 2083 } 2084 return TRUE; 2085 } 2086 2087 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions. 2088 Most mips16 instructions are 16 bits, but these instructions 2089 are 32 bits. 2090 2091 The format of these instructions is: 2092 2093 +--------------+--------------------------------+ 2094 | JALX | X| Imm 20:16 | Imm 25:21 | 2095 +--------------+--------------------------------+ 2096 | Immediate 15:0 | 2097 +-----------------------------------------------+ 2098 2099 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx. 2100 Note that the immediate value in the first word is swapped. 2101 2102 When producing a relocatable object file, R_MIPS16_26 is 2103 handled mostly like R_MIPS_26. In particular, the addend is 2104 stored as a straight 26-bit value in a 32-bit instruction. 2105 (gas makes life simpler for itself by never adjusting a 2106 R_MIPS16_26 reloc to be against a section, so the addend is 2107 always zero). However, the 32 bit instruction is stored as 2 2108 16-bit values, rather than a single 32-bit value. In a 2109 big-endian file, the result is the same; in a little-endian 2110 file, the two 16-bit halves of the 32 bit value are swapped. 2111 This is so that a disassembler can recognize the jal 2112 instruction. 2113 2114 When doing a final link, R_MIPS16_26 is treated as a 32 bit 2115 instruction stored as two 16-bit values. The addend A is the 2116 contents of the targ26 field. The calculation is the same as 2117 R_MIPS_26. When storing the calculated value, reorder the 2118 immediate value as shown above, and don't forget to store the 2119 value as two 16-bit values. 2120 2121 To put it in MIPS ABI terms, the relocation field is T-targ26-16, 2122 defined as 2123 2124 big-endian: 2125 +--------+----------------------+ 2126 | | | 2127 | | targ26-16 | 2128 |31 26|25 0| 2129 +--------+----------------------+ 2130 2131 little-endian: 2132 +----------+------+-------------+ 2133 | | | | 2134 | sub1 | | sub2 | 2135 |0 9|10 15|16 31| 2136 +----------+--------------------+ 2137 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is 2138 ((sub1 << 16) | sub2)). 2139 2140 When producing a relocatable object file, the calculation is 2141 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2) 2142 When producing a fully linked file, the calculation is 2143 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2) 2144 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff) 2145 2146 The table below lists the other MIPS16 instruction relocations. 2147 Each one is calculated in the same way as the non-MIPS16 relocation 2148 given on the right, but using the extended MIPS16 layout of 16-bit 2149 immediate fields: 2150 2151 R_MIPS16_GPREL R_MIPS_GPREL16 2152 R_MIPS16_GOT16 R_MIPS_GOT16 2153 R_MIPS16_CALL16 R_MIPS_CALL16 2154 R_MIPS16_HI16 R_MIPS_HI16 2155 R_MIPS16_LO16 R_MIPS_LO16 2156 2157 A typical instruction will have a format like this: 2158 2159 +--------------+--------------------------------+ 2160 | EXTEND | Imm 10:5 | Imm 15:11 | 2161 +--------------+--------------------------------+ 2162 | Major | rx | ry | Imm 4:0 | 2163 +--------------+--------------------------------+ 2164 2165 EXTEND is the five bit value 11110. Major is the instruction 2166 opcode. 2167 2168 All we need to do here is shuffle the bits appropriately. 2169 As above, the two 16-bit halves must be swapped on a 2170 little-endian system. 2171 2172 Finally R_MIPS16_PC16_S1 corresponds to R_MIPS_PC16, however the 2173 relocatable field is shifted by 1 rather than 2 and the same bit 2174 shuffling is done as with the relocations above. */ 2175 2176 static inline bfd_boolean 2177 mips16_reloc_p (int r_type) 2178 { 2179 switch (r_type) 2180 { 2181 case R_MIPS16_26: 2182 case R_MIPS16_GPREL: 2183 case R_MIPS16_GOT16: 2184 case R_MIPS16_CALL16: 2185 case R_MIPS16_HI16: 2186 case R_MIPS16_LO16: 2187 case R_MIPS16_TLS_GD: 2188 case R_MIPS16_TLS_LDM: 2189 case R_MIPS16_TLS_DTPREL_HI16: 2190 case R_MIPS16_TLS_DTPREL_LO16: 2191 case R_MIPS16_TLS_GOTTPREL: 2192 case R_MIPS16_TLS_TPREL_HI16: 2193 case R_MIPS16_TLS_TPREL_LO16: 2194 case R_MIPS16_PC16_S1: 2195 return TRUE; 2196 2197 default: 2198 return FALSE; 2199 } 2200 } 2201 2202 /* Check if a microMIPS reloc. */ 2203 2204 static inline bfd_boolean 2205 micromips_reloc_p (unsigned int r_type) 2206 { 2207 return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max; 2208 } 2209 2210 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped 2211 on a little-endian system. This does not apply to R_MICROMIPS_PC7_S1 2212 and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions. */ 2213 2214 static inline bfd_boolean 2215 micromips_reloc_shuffle_p (unsigned int r_type) 2216 { 2217 return (micromips_reloc_p (r_type) 2218 && r_type != R_MICROMIPS_PC7_S1 2219 && r_type != R_MICROMIPS_PC10_S1); 2220 } 2221 2222 static inline bfd_boolean 2223 got16_reloc_p (int r_type) 2224 { 2225 return (r_type == R_MIPS_GOT16 2226 || r_type == R_MIPS16_GOT16 2227 || r_type == R_MICROMIPS_GOT16); 2228 } 2229 2230 static inline bfd_boolean 2231 call16_reloc_p (int r_type) 2232 { 2233 return (r_type == R_MIPS_CALL16 2234 || r_type == R_MIPS16_CALL16 2235 || r_type == R_MICROMIPS_CALL16); 2236 } 2237 2238 static inline bfd_boolean 2239 got_disp_reloc_p (unsigned int r_type) 2240 { 2241 return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP; 2242 } 2243 2244 static inline bfd_boolean 2245 got_page_reloc_p (unsigned int r_type) 2246 { 2247 return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE; 2248 } 2249 2250 static inline bfd_boolean 2251 got_lo16_reloc_p (unsigned int r_type) 2252 { 2253 return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16; 2254 } 2255 2256 static inline bfd_boolean 2257 call_hi16_reloc_p (unsigned int r_type) 2258 { 2259 return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16; 2260 } 2261 2262 static inline bfd_boolean 2263 call_lo16_reloc_p (unsigned int r_type) 2264 { 2265 return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16; 2266 } 2267 2268 static inline bfd_boolean 2269 hi16_reloc_p (int r_type) 2270 { 2271 return (r_type == R_MIPS_HI16 2272 || r_type == R_MIPS16_HI16 2273 || r_type == R_MICROMIPS_HI16 2274 || r_type == R_MIPS_PCHI16); 2275 } 2276 2277 static inline bfd_boolean 2278 lo16_reloc_p (int r_type) 2279 { 2280 return (r_type == R_MIPS_LO16 2281 || r_type == R_MIPS16_LO16 2282 || r_type == R_MICROMIPS_LO16 2283 || r_type == R_MIPS_PCLO16); 2284 } 2285 2286 static inline bfd_boolean 2287 mips16_call_reloc_p (int r_type) 2288 { 2289 return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16; 2290 } 2291 2292 static inline bfd_boolean 2293 jal_reloc_p (int r_type) 2294 { 2295 return (r_type == R_MIPS_26 2296 || r_type == R_MIPS16_26 2297 || r_type == R_MICROMIPS_26_S1); 2298 } 2299 2300 static inline bfd_boolean 2301 b_reloc_p (int r_type) 2302 { 2303 return (r_type == R_MIPS_PC26_S2 2304 || r_type == R_MIPS_PC21_S2 2305 || r_type == R_MIPS_PC16 2306 || r_type == R_MIPS_GNU_REL16_S2 2307 || r_type == R_MIPS16_PC16_S1 2308 || r_type == R_MICROMIPS_PC16_S1 2309 || r_type == R_MICROMIPS_PC10_S1 2310 || r_type == R_MICROMIPS_PC7_S1); 2311 } 2312 2313 static inline bfd_boolean 2314 aligned_pcrel_reloc_p (int r_type) 2315 { 2316 return (r_type == R_MIPS_PC18_S3 2317 || r_type == R_MIPS_PC19_S2); 2318 } 2319 2320 static inline bfd_boolean 2321 branch_reloc_p (int r_type) 2322 { 2323 return (r_type == R_MIPS_26 2324 || r_type == R_MIPS_PC26_S2 2325 || r_type == R_MIPS_PC21_S2 2326 || r_type == R_MIPS_PC16 2327 || r_type == R_MIPS_GNU_REL16_S2); 2328 } 2329 2330 static inline bfd_boolean 2331 mips16_branch_reloc_p (int r_type) 2332 { 2333 return (r_type == R_MIPS16_26 2334 || r_type == R_MIPS16_PC16_S1); 2335 } 2336 2337 static inline bfd_boolean 2338 micromips_branch_reloc_p (int r_type) 2339 { 2340 return (r_type == R_MICROMIPS_26_S1 2341 || r_type == R_MICROMIPS_PC16_S1 2342 || r_type == R_MICROMIPS_PC10_S1 2343 || r_type == R_MICROMIPS_PC7_S1); 2344 } 2345 2346 static inline bfd_boolean 2347 tls_gd_reloc_p (unsigned int r_type) 2348 { 2349 return (r_type == R_MIPS_TLS_GD 2350 || r_type == R_MIPS16_TLS_GD 2351 || r_type == R_MICROMIPS_TLS_GD); 2352 } 2353 2354 static inline bfd_boolean 2355 tls_ldm_reloc_p (unsigned int r_type) 2356 { 2357 return (r_type == R_MIPS_TLS_LDM 2358 || r_type == R_MIPS16_TLS_LDM 2359 || r_type == R_MICROMIPS_TLS_LDM); 2360 } 2361 2362 static inline bfd_boolean 2363 tls_gottprel_reloc_p (unsigned int r_type) 2364 { 2365 return (r_type == R_MIPS_TLS_GOTTPREL 2366 || r_type == R_MIPS16_TLS_GOTTPREL 2367 || r_type == R_MICROMIPS_TLS_GOTTPREL); 2368 } 2369 2370 void 2371 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type, 2372 bfd_boolean jal_shuffle, bfd_byte *data) 2373 { 2374 bfd_vma first, second, val; 2375 2376 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type)) 2377 return; 2378 2379 /* Pick up the first and second halfwords of the instruction. */ 2380 first = bfd_get_16 (abfd, data); 2381 second = bfd_get_16 (abfd, data + 2); 2382 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle)) 2383 val = first << 16 | second; 2384 else if (r_type != R_MIPS16_26) 2385 val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11) 2386 | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f)); 2387 else 2388 val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11) 2389 | ((first & 0x1f) << 21) | second); 2390 bfd_put_32 (abfd, val, data); 2391 } 2392 2393 void 2394 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type, 2395 bfd_boolean jal_shuffle, bfd_byte *data) 2396 { 2397 bfd_vma first, second, val; 2398 2399 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type)) 2400 return; 2401 2402 val = bfd_get_32 (abfd, data); 2403 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle)) 2404 { 2405 second = val & 0xffff; 2406 first = val >> 16; 2407 } 2408 else if (r_type != R_MIPS16_26) 2409 { 2410 second = ((val >> 11) & 0xffe0) | (val & 0x1f); 2411 first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0); 2412 } 2413 else 2414 { 2415 second = val & 0xffff; 2416 first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0) 2417 | ((val >> 21) & 0x1f); 2418 } 2419 bfd_put_16 (abfd, second, data + 2); 2420 bfd_put_16 (abfd, first, data); 2421 } 2422 2423 bfd_reloc_status_type 2424 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol, 2425 arelent *reloc_entry, asection *input_section, 2426 bfd_boolean relocatable, void *data, bfd_vma gp) 2427 { 2428 bfd_vma relocation; 2429 bfd_signed_vma val; 2430 bfd_reloc_status_type status; 2431 2432 if (bfd_is_com_section (symbol->section)) 2433 relocation = 0; 2434 else 2435 relocation = symbol->value; 2436 2437 relocation += symbol->section->output_section->vma; 2438 relocation += symbol->section->output_offset; 2439 2440 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 2441 return bfd_reloc_outofrange; 2442 2443 /* Set val to the offset into the section or symbol. */ 2444 val = reloc_entry->addend; 2445 2446 _bfd_mips_elf_sign_extend (val, 16); 2447 2448 /* Adjust val for the final section location and GP value. If we 2449 are producing relocatable output, we don't want to do this for 2450 an external symbol. */ 2451 if (! relocatable 2452 || (symbol->flags & BSF_SECTION_SYM) != 0) 2453 val += relocation - gp; 2454 2455 if (reloc_entry->howto->partial_inplace) 2456 { 2457 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val, 2458 (bfd_byte *) data 2459 + reloc_entry->address); 2460 if (status != bfd_reloc_ok) 2461 return status; 2462 } 2463 else 2464 reloc_entry->addend = val; 2465 2466 if (relocatable) 2467 reloc_entry->address += input_section->output_offset; 2468 2469 return bfd_reloc_ok; 2470 } 2471 2472 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or 2473 R_MIPS_GOT16. REL is the relocation, INPUT_SECTION is the section 2474 that contains the relocation field and DATA points to the start of 2475 INPUT_SECTION. */ 2476 2477 struct mips_hi16 2478 { 2479 struct mips_hi16 *next; 2480 bfd_byte *data; 2481 asection *input_section; 2482 arelent rel; 2483 }; 2484 2485 /* FIXME: This should not be a static variable. */ 2486 2487 static struct mips_hi16 *mips_hi16_list; 2488 2489 /* A howto special_function for REL *HI16 relocations. We can only 2490 calculate the correct value once we've seen the partnering 2491 *LO16 relocation, so just save the information for later. 2492 2493 The ABI requires that the *LO16 immediately follow the *HI16. 2494 However, as a GNU extension, we permit an arbitrary number of 2495 *HI16s to be associated with a single *LO16. This significantly 2496 simplies the relocation handling in gcc. */ 2497 2498 bfd_reloc_status_type 2499 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry, 2500 asymbol *symbol ATTRIBUTE_UNUSED, void *data, 2501 asection *input_section, bfd *output_bfd, 2502 char **error_message ATTRIBUTE_UNUSED) 2503 { 2504 struct mips_hi16 *n; 2505 2506 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 2507 return bfd_reloc_outofrange; 2508 2509 n = bfd_malloc (sizeof *n); 2510 if (n == NULL) 2511 return bfd_reloc_outofrange; 2512 2513 n->next = mips_hi16_list; 2514 n->data = data; 2515 n->input_section = input_section; 2516 n->rel = *reloc_entry; 2517 mips_hi16_list = n; 2518 2519 if (output_bfd != NULL) 2520 reloc_entry->address += input_section->output_offset; 2521 2522 return bfd_reloc_ok; 2523 } 2524 2525 /* A howto special_function for REL R_MIPS*_GOT16 relocations. This is just 2526 like any other 16-bit relocation when applied to global symbols, but is 2527 treated in the same as R_MIPS_HI16 when applied to local symbols. */ 2528 2529 bfd_reloc_status_type 2530 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, 2531 void *data, asection *input_section, 2532 bfd *output_bfd, char **error_message) 2533 { 2534 if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0 2535 || bfd_is_und_section (bfd_asymbol_section (symbol)) 2536 || bfd_is_com_section (bfd_asymbol_section (symbol))) 2537 /* The relocation is against a global symbol. */ 2538 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data, 2539 input_section, output_bfd, 2540 error_message); 2541 2542 return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data, 2543 input_section, output_bfd, error_message); 2544 } 2545 2546 /* A howto special_function for REL *LO16 relocations. The *LO16 itself 2547 is a straightforward 16 bit inplace relocation, but we must deal with 2548 any partnering high-part relocations as well. */ 2549 2550 bfd_reloc_status_type 2551 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, 2552 void *data, asection *input_section, 2553 bfd *output_bfd, char **error_message) 2554 { 2555 bfd_vma vallo; 2556 bfd_byte *location = (bfd_byte *) data + reloc_entry->address; 2557 2558 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 2559 return bfd_reloc_outofrange; 2560 2561 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE, 2562 location); 2563 vallo = bfd_get_32 (abfd, location); 2564 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE, 2565 location); 2566 2567 while (mips_hi16_list != NULL) 2568 { 2569 bfd_reloc_status_type ret; 2570 struct mips_hi16 *hi; 2571 2572 hi = mips_hi16_list; 2573 2574 /* R_MIPS*_GOT16 relocations are something of a special case. We 2575 want to install the addend in the same way as for a R_MIPS*_HI16 2576 relocation (with a rightshift of 16). However, since GOT16 2577 relocations can also be used with global symbols, their howto 2578 has a rightshift of 0. */ 2579 if (hi->rel.howto->type == R_MIPS_GOT16) 2580 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE); 2581 else if (hi->rel.howto->type == R_MIPS16_GOT16) 2582 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE); 2583 else if (hi->rel.howto->type == R_MICROMIPS_GOT16) 2584 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE); 2585 2586 /* VALLO is a signed 16-bit number. Bias it by 0x8000 so that any 2587 carry or borrow will induce a change of +1 or -1 in the high part. */ 2588 hi->rel.addend += (vallo + 0x8000) & 0xffff; 2589 2590 ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data, 2591 hi->input_section, output_bfd, 2592 error_message); 2593 if (ret != bfd_reloc_ok) 2594 return ret; 2595 2596 mips_hi16_list = hi->next; 2597 free (hi); 2598 } 2599 2600 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data, 2601 input_section, output_bfd, 2602 error_message); 2603 } 2604 2605 /* A generic howto special_function. This calculates and installs the 2606 relocation itself, thus avoiding the oft-discussed problems in 2607 bfd_perform_relocation and bfd_install_relocation. */ 2608 2609 bfd_reloc_status_type 2610 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry, 2611 asymbol *symbol, void *data ATTRIBUTE_UNUSED, 2612 asection *input_section, bfd *output_bfd, 2613 char **error_message ATTRIBUTE_UNUSED) 2614 { 2615 bfd_signed_vma val; 2616 bfd_reloc_status_type status; 2617 bfd_boolean relocatable; 2618 2619 relocatable = (output_bfd != NULL); 2620 2621 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 2622 return bfd_reloc_outofrange; 2623 2624 /* Build up the field adjustment in VAL. */ 2625 val = 0; 2626 if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0) 2627 { 2628 /* Either we're calculating the final field value or we have a 2629 relocation against a section symbol. Add in the section's 2630 offset or address. */ 2631 val += symbol->section->output_section->vma; 2632 val += symbol->section->output_offset; 2633 } 2634 2635 if (!relocatable) 2636 { 2637 /* We're calculating the final field value. Add in the symbol's value 2638 and, if pc-relative, subtract the address of the field itself. */ 2639 val += symbol->value; 2640 if (reloc_entry->howto->pc_relative) 2641 { 2642 val -= input_section->output_section->vma; 2643 val -= input_section->output_offset; 2644 val -= reloc_entry->address; 2645 } 2646 } 2647 2648 /* VAL is now the final adjustment. If we're keeping this relocation 2649 in the output file, and if the relocation uses a separate addend, 2650 we just need to add VAL to that addend. Otherwise we need to add 2651 VAL to the relocation field itself. */ 2652 if (relocatable && !reloc_entry->howto->partial_inplace) 2653 reloc_entry->addend += val; 2654 else 2655 { 2656 bfd_byte *location = (bfd_byte *) data + reloc_entry->address; 2657 2658 /* Add in the separate addend, if any. */ 2659 val += reloc_entry->addend; 2660 2661 /* Add VAL to the relocation field. */ 2662 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE, 2663 location); 2664 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val, 2665 location); 2666 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE, 2667 location); 2668 2669 if (status != bfd_reloc_ok) 2670 return status; 2671 } 2672 2673 if (relocatable) 2674 reloc_entry->address += input_section->output_offset; 2675 2676 return bfd_reloc_ok; 2677 } 2678 2679 /* Swap an entry in a .gptab section. Note that these routines rely 2680 on the equivalence of the two elements of the union. */ 2681 2682 static void 2683 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex, 2684 Elf32_gptab *in) 2685 { 2686 in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value); 2687 in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes); 2688 } 2689 2690 static void 2691 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in, 2692 Elf32_External_gptab *ex) 2693 { 2694 H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value); 2695 H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes); 2696 } 2697 2698 static void 2699 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in, 2700 Elf32_External_compact_rel *ex) 2701 { 2702 H_PUT_32 (abfd, in->id1, ex->id1); 2703 H_PUT_32 (abfd, in->num, ex->num); 2704 H_PUT_32 (abfd, in->id2, ex->id2); 2705 H_PUT_32 (abfd, in->offset, ex->offset); 2706 H_PUT_32 (abfd, in->reserved0, ex->reserved0); 2707 H_PUT_32 (abfd, in->reserved1, ex->reserved1); 2708 } 2709 2710 static void 2711 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in, 2712 Elf32_External_crinfo *ex) 2713 { 2714 unsigned long l; 2715 2716 l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH) 2717 | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH) 2718 | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH) 2719 | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH)); 2720 H_PUT_32 (abfd, l, ex->info); 2721 H_PUT_32 (abfd, in->konst, ex->konst); 2722 H_PUT_32 (abfd, in->vaddr, ex->vaddr); 2723 } 2724 2725 /* A .reginfo section holds a single Elf32_RegInfo structure. These 2726 routines swap this structure in and out. They are used outside of 2727 BFD, so they are globally visible. */ 2728 2729 void 2730 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex, 2731 Elf32_RegInfo *in) 2732 { 2733 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask); 2734 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]); 2735 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]); 2736 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]); 2737 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]); 2738 in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value); 2739 } 2740 2741 void 2742 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in, 2743 Elf32_External_RegInfo *ex) 2744 { 2745 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask); 2746 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]); 2747 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]); 2748 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]); 2749 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]); 2750 H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value); 2751 } 2752 2753 /* In the 64 bit ABI, the .MIPS.options section holds register 2754 information in an Elf64_Reginfo structure. These routines swap 2755 them in and out. They are globally visible because they are used 2756 outside of BFD. These routines are here so that gas can call them 2757 without worrying about whether the 64 bit ABI has been included. */ 2758 2759 void 2760 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex, 2761 Elf64_Internal_RegInfo *in) 2762 { 2763 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask); 2764 in->ri_pad = H_GET_32 (abfd, ex->ri_pad); 2765 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]); 2766 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]); 2767 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]); 2768 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]); 2769 in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value); 2770 } 2771 2772 void 2773 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in, 2774 Elf64_External_RegInfo *ex) 2775 { 2776 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask); 2777 H_PUT_32 (abfd, in->ri_pad, ex->ri_pad); 2778 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]); 2779 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]); 2780 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]); 2781 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]); 2782 H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value); 2783 } 2784 2785 /* Swap in an options header. */ 2786 2787 void 2788 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex, 2789 Elf_Internal_Options *in) 2790 { 2791 in->kind = H_GET_8 (abfd, ex->kind); 2792 in->size = H_GET_8 (abfd, ex->size); 2793 in->section = H_GET_16 (abfd, ex->section); 2794 in->info = H_GET_32 (abfd, ex->info); 2795 } 2796 2797 /* Swap out an options header. */ 2798 2799 void 2800 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in, 2801 Elf_External_Options *ex) 2802 { 2803 H_PUT_8 (abfd, in->kind, ex->kind); 2804 H_PUT_8 (abfd, in->size, ex->size); 2805 H_PUT_16 (abfd, in->section, ex->section); 2806 H_PUT_32 (abfd, in->info, ex->info); 2807 } 2808 2809 /* Swap in an abiflags structure. */ 2810 2811 void 2812 bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd, 2813 const Elf_External_ABIFlags_v0 *ex, 2814 Elf_Internal_ABIFlags_v0 *in) 2815 { 2816 in->version = H_GET_16 (abfd, ex->version); 2817 in->isa_level = H_GET_8 (abfd, ex->isa_level); 2818 in->isa_rev = H_GET_8 (abfd, ex->isa_rev); 2819 in->gpr_size = H_GET_8 (abfd, ex->gpr_size); 2820 in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size); 2821 in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size); 2822 in->fp_abi = H_GET_8 (abfd, ex->fp_abi); 2823 in->isa_ext = H_GET_32 (abfd, ex->isa_ext); 2824 in->ases = H_GET_32 (abfd, ex->ases); 2825 in->flags1 = H_GET_32 (abfd, ex->flags1); 2826 in->flags2 = H_GET_32 (abfd, ex->flags2); 2827 } 2828 2829 /* Swap out an abiflags structure. */ 2830 2831 void 2832 bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd, 2833 const Elf_Internal_ABIFlags_v0 *in, 2834 Elf_External_ABIFlags_v0 *ex) 2835 { 2836 H_PUT_16 (abfd, in->version, ex->version); 2837 H_PUT_8 (abfd, in->isa_level, ex->isa_level); 2838 H_PUT_8 (abfd, in->isa_rev, ex->isa_rev); 2839 H_PUT_8 (abfd, in->gpr_size, ex->gpr_size); 2840 H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size); 2841 H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size); 2842 H_PUT_8 (abfd, in->fp_abi, ex->fp_abi); 2843 H_PUT_32 (abfd, in->isa_ext, ex->isa_ext); 2844 H_PUT_32 (abfd, in->ases, ex->ases); 2845 H_PUT_32 (abfd, in->flags1, ex->flags1); 2846 H_PUT_32 (abfd, in->flags2, ex->flags2); 2847 } 2848 2849 /* This function is called via qsort() to sort the dynamic relocation 2850 entries by increasing r_symndx value. */ 2851 2852 static int 2853 sort_dynamic_relocs (const void *arg1, const void *arg2) 2854 { 2855 Elf_Internal_Rela int_reloc1; 2856 Elf_Internal_Rela int_reloc2; 2857 int diff; 2858 2859 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1); 2860 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2); 2861 2862 diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info); 2863 if (diff != 0) 2864 return diff; 2865 2866 if (int_reloc1.r_offset < int_reloc2.r_offset) 2867 return -1; 2868 if (int_reloc1.r_offset > int_reloc2.r_offset) 2869 return 1; 2870 return 0; 2871 } 2872 2873 /* Like sort_dynamic_relocs, but used for elf64 relocations. */ 2874 2875 static int 2876 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED, 2877 const void *arg2 ATTRIBUTE_UNUSED) 2878 { 2879 #ifdef BFD64 2880 Elf_Internal_Rela int_reloc1[3]; 2881 Elf_Internal_Rela int_reloc2[3]; 2882 2883 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in) 2884 (reldyn_sorting_bfd, arg1, int_reloc1); 2885 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in) 2886 (reldyn_sorting_bfd, arg2, int_reloc2); 2887 2888 if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info)) 2889 return -1; 2890 if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info)) 2891 return 1; 2892 2893 if (int_reloc1[0].r_offset < int_reloc2[0].r_offset) 2894 return -1; 2895 if (int_reloc1[0].r_offset > int_reloc2[0].r_offset) 2896 return 1; 2897 return 0; 2898 #else 2899 abort (); 2900 #endif 2901 } 2902 2903 2904 /* This routine is used to write out ECOFF debugging external symbol 2905 information. It is called via mips_elf_link_hash_traverse. The 2906 ECOFF external symbol information must match the ELF external 2907 symbol information. Unfortunately, at this point we don't know 2908 whether a symbol is required by reloc information, so the two 2909 tables may wind up being different. We must sort out the external 2910 symbol information before we can set the final size of the .mdebug 2911 section, and we must set the size of the .mdebug section before we 2912 can relocate any sections, and we can't know which symbols are 2913 required by relocation until we relocate the sections. 2914 Fortunately, it is relatively unlikely that any symbol will be 2915 stripped but required by a reloc. In particular, it can not happen 2916 when generating a final executable. */ 2917 2918 static bfd_boolean 2919 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data) 2920 { 2921 struct extsym_info *einfo = data; 2922 bfd_boolean strip; 2923 asection *sec, *output_section; 2924 2925 if (h->root.indx == -2) 2926 strip = FALSE; 2927 else if ((h->root.def_dynamic 2928 || h->root.ref_dynamic 2929 || h->root.type == bfd_link_hash_new) 2930 && !h->root.def_regular 2931 && !h->root.ref_regular) 2932 strip = TRUE; 2933 else if (einfo->info->strip == strip_all 2934 || (einfo->info->strip == strip_some 2935 && bfd_hash_lookup (einfo->info->keep_hash, 2936 h->root.root.root.string, 2937 FALSE, FALSE) == NULL)) 2938 strip = TRUE; 2939 else 2940 strip = FALSE; 2941 2942 if (strip) 2943 return TRUE; 2944 2945 if (h->esym.ifd == -2) 2946 { 2947 h->esym.jmptbl = 0; 2948 h->esym.cobol_main = 0; 2949 h->esym.weakext = 0; 2950 h->esym.reserved = 0; 2951 h->esym.ifd = ifdNil; 2952 h->esym.asym.value = 0; 2953 h->esym.asym.st = stGlobal; 2954 2955 if (h->root.root.type == bfd_link_hash_undefined 2956 || h->root.root.type == bfd_link_hash_undefweak) 2957 { 2958 const char *name; 2959 2960 /* Use undefined class. Also, set class and type for some 2961 special symbols. */ 2962 name = h->root.root.root.string; 2963 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0 2964 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0) 2965 { 2966 h->esym.asym.sc = scData; 2967 h->esym.asym.st = stLabel; 2968 h->esym.asym.value = 0; 2969 } 2970 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0) 2971 { 2972 h->esym.asym.sc = scAbs; 2973 h->esym.asym.st = stLabel; 2974 h->esym.asym.value = 2975 mips_elf_hash_table (einfo->info)->procedure_count; 2976 } 2977 else 2978 h->esym.asym.sc = scUndefined; 2979 } 2980 else if (h->root.root.type != bfd_link_hash_defined 2981 && h->root.root.type != bfd_link_hash_defweak) 2982 h->esym.asym.sc = scAbs; 2983 else 2984 { 2985 const char *name; 2986 2987 sec = h->root.root.u.def.section; 2988 output_section = sec->output_section; 2989 2990 /* When making a shared library and symbol h is the one from 2991 the another shared library, OUTPUT_SECTION may be null. */ 2992 if (output_section == NULL) 2993 h->esym.asym.sc = scUndefined; 2994 else 2995 { 2996 name = bfd_section_name (output_section); 2997 2998 if (strcmp (name, ".text") == 0) 2999 h->esym.asym.sc = scText; 3000 else if (strcmp (name, ".data") == 0) 3001 h->esym.asym.sc = scData; 3002 else if (strcmp (name, ".sdata") == 0) 3003 h->esym.asym.sc = scSData; 3004 else if (strcmp (name, ".rodata") == 0 3005 || strcmp (name, ".rdata") == 0) 3006 h->esym.asym.sc = scRData; 3007 else if (strcmp (name, ".bss") == 0) 3008 h->esym.asym.sc = scBss; 3009 else if (strcmp (name, ".sbss") == 0) 3010 h->esym.asym.sc = scSBss; 3011 else if (strcmp (name, ".init") == 0) 3012 h->esym.asym.sc = scInit; 3013 else if (strcmp (name, ".fini") == 0) 3014 h->esym.asym.sc = scFini; 3015 else 3016 h->esym.asym.sc = scAbs; 3017 } 3018 } 3019 3020 h->esym.asym.reserved = 0; 3021 h->esym.asym.index = indexNil; 3022 } 3023 3024 if (h->root.root.type == bfd_link_hash_common) 3025 h->esym.asym.value = h->root.root.u.c.size; 3026 else if (h->root.root.type == bfd_link_hash_defined 3027 || h->root.root.type == bfd_link_hash_defweak) 3028 { 3029 if (h->esym.asym.sc == scCommon) 3030 h->esym.asym.sc = scBss; 3031 else if (h->esym.asym.sc == scSCommon) 3032 h->esym.asym.sc = scSBss; 3033 3034 sec = h->root.root.u.def.section; 3035 output_section = sec->output_section; 3036 if (output_section != NULL) 3037 h->esym.asym.value = (h->root.root.u.def.value 3038 + sec->output_offset 3039 + output_section->vma); 3040 else 3041 h->esym.asym.value = 0; 3042 } 3043 else 3044 { 3045 struct mips_elf_link_hash_entry *hd = h; 3046 3047 while (hd->root.root.type == bfd_link_hash_indirect) 3048 hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link; 3049 3050 if (hd->needs_lazy_stub) 3051 { 3052 BFD_ASSERT (hd->root.plt.plist != NULL); 3053 BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE); 3054 /* Set type and value for a symbol with a function stub. */ 3055 h->esym.asym.st = stProc; 3056 sec = hd->root.root.u.def.section; 3057 if (sec == NULL) 3058 h->esym.asym.value = 0; 3059 else 3060 { 3061 output_section = sec->output_section; 3062 if (output_section != NULL) 3063 h->esym.asym.value = (hd->root.plt.plist->stub_offset 3064 + sec->output_offset 3065 + output_section->vma); 3066 else 3067 h->esym.asym.value = 0; 3068 } 3069 } 3070 } 3071 3072 if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap, 3073 h->root.root.root.string, 3074 &h->esym)) 3075 { 3076 einfo->failed = TRUE; 3077 return FALSE; 3078 } 3079 3080 return TRUE; 3081 } 3082 3083 /* A comparison routine used to sort .gptab entries. */ 3084 3085 static int 3086 gptab_compare (const void *p1, const void *p2) 3087 { 3088 const Elf32_gptab *a1 = p1; 3089 const Elf32_gptab *a2 = p2; 3090 3091 return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value; 3092 } 3093 3094 /* Functions to manage the got entry hash table. */ 3095 3096 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit 3097 hash number. */ 3098 3099 static INLINE hashval_t 3100 mips_elf_hash_bfd_vma (bfd_vma addr) 3101 { 3102 #ifdef BFD64 3103 return addr + (addr >> 32); 3104 #else 3105 return addr; 3106 #endif 3107 } 3108 3109 static hashval_t 3110 mips_elf_got_entry_hash (const void *entry_) 3111 { 3112 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_; 3113 3114 return (entry->symndx 3115 + ((entry->tls_type == GOT_TLS_LDM) << 18) 3116 + (entry->tls_type == GOT_TLS_LDM ? 0 3117 : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address) 3118 : entry->symndx >= 0 ? (entry->abfd->id 3119 + mips_elf_hash_bfd_vma (entry->d.addend)) 3120 : entry->d.h->root.root.root.hash)); 3121 } 3122 3123 static int 3124 mips_elf_got_entry_eq (const void *entry1, const void *entry2) 3125 { 3126 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1; 3127 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2; 3128 3129 return (e1->symndx == e2->symndx 3130 && e1->tls_type == e2->tls_type 3131 && (e1->tls_type == GOT_TLS_LDM ? TRUE 3132 : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address 3133 : e1->symndx >= 0 ? (e1->abfd == e2->abfd 3134 && e1->d.addend == e2->d.addend) 3135 : e2->abfd && e1->d.h == e2->d.h)); 3136 } 3137 3138 static hashval_t 3139 mips_got_page_ref_hash (const void *ref_) 3140 { 3141 const struct mips_got_page_ref *ref; 3142 3143 ref = (const struct mips_got_page_ref *) ref_; 3144 return ((ref->symndx >= 0 3145 ? (hashval_t) (ref->u.abfd->id + ref->symndx) 3146 : ref->u.h->root.root.root.hash) 3147 + mips_elf_hash_bfd_vma (ref->addend)); 3148 } 3149 3150 static int 3151 mips_got_page_ref_eq (const void *ref1_, const void *ref2_) 3152 { 3153 const struct mips_got_page_ref *ref1, *ref2; 3154 3155 ref1 = (const struct mips_got_page_ref *) ref1_; 3156 ref2 = (const struct mips_got_page_ref *) ref2_; 3157 return (ref1->symndx == ref2->symndx 3158 && (ref1->symndx < 0 3159 ? ref1->u.h == ref2->u.h 3160 : ref1->u.abfd == ref2->u.abfd) 3161 && ref1->addend == ref2->addend); 3162 } 3163 3164 static hashval_t 3165 mips_got_page_entry_hash (const void *entry_) 3166 { 3167 const struct mips_got_page_entry *entry; 3168 3169 entry = (const struct mips_got_page_entry *) entry_; 3170 return entry->sec->id; 3171 } 3172 3173 static int 3174 mips_got_page_entry_eq (const void *entry1_, const void *entry2_) 3175 { 3176 const struct mips_got_page_entry *entry1, *entry2; 3177 3178 entry1 = (const struct mips_got_page_entry *) entry1_; 3179 entry2 = (const struct mips_got_page_entry *) entry2_; 3180 return entry1->sec == entry2->sec; 3181 } 3182 3183 /* Create and return a new mips_got_info structure. */ 3184 3185 static struct mips_got_info * 3186 mips_elf_create_got_info (bfd *abfd) 3187 { 3188 struct mips_got_info *g; 3189 3190 g = bfd_zalloc (abfd, sizeof (struct mips_got_info)); 3191 if (g == NULL) 3192 return NULL; 3193 3194 g->got_entries = htab_try_create (1, mips_elf_got_entry_hash, 3195 mips_elf_got_entry_eq, NULL); 3196 if (g->got_entries == NULL) 3197 return NULL; 3198 3199 g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash, 3200 mips_got_page_ref_eq, NULL); 3201 if (g->got_page_refs == NULL) 3202 return NULL; 3203 3204 return g; 3205 } 3206 3207 /* Return the GOT info for input bfd ABFD, trying to create a new one if 3208 CREATE_P and if ABFD doesn't already have a GOT. */ 3209 3210 static struct mips_got_info * 3211 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p) 3212 { 3213 struct mips_elf_obj_tdata *tdata; 3214 3215 if (!is_mips_elf (abfd)) 3216 return NULL; 3217 3218 tdata = mips_elf_tdata (abfd); 3219 if (!tdata->got && create_p) 3220 tdata->got = mips_elf_create_got_info (abfd); 3221 return tdata->got; 3222 } 3223 3224 /* Record that ABFD should use output GOT G. */ 3225 3226 static void 3227 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g) 3228 { 3229 struct mips_elf_obj_tdata *tdata; 3230 3231 BFD_ASSERT (is_mips_elf (abfd)); 3232 tdata = mips_elf_tdata (abfd); 3233 if (tdata->got) 3234 { 3235 /* The GOT structure itself and the hash table entries are 3236 allocated to a bfd, but the hash tables aren't. */ 3237 htab_delete (tdata->got->got_entries); 3238 htab_delete (tdata->got->got_page_refs); 3239 if (tdata->got->got_page_entries) 3240 htab_delete (tdata->got->got_page_entries); 3241 } 3242 tdata->got = g; 3243 } 3244 3245 /* Return the dynamic relocation section. If it doesn't exist, try to 3246 create a new it if CREATE_P, otherwise return NULL. Also return NULL 3247 if creation fails. */ 3248 3249 static asection * 3250 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p) 3251 { 3252 const char *dname; 3253 asection *sreloc; 3254 bfd *dynobj; 3255 3256 dname = MIPS_ELF_REL_DYN_NAME (info); 3257 dynobj = elf_hash_table (info)->dynobj; 3258 sreloc = bfd_get_linker_section (dynobj, dname); 3259 if (sreloc == NULL && create_p) 3260 { 3261 sreloc = bfd_make_section_anyway_with_flags (dynobj, dname, 3262 (SEC_ALLOC 3263 | SEC_LOAD 3264 | SEC_HAS_CONTENTS 3265 | SEC_IN_MEMORY 3266 | SEC_LINKER_CREATED 3267 | SEC_READONLY)); 3268 if (sreloc == NULL 3269 || !bfd_set_section_alignment (sreloc, 3270 MIPS_ELF_LOG_FILE_ALIGN (dynobj))) 3271 return NULL; 3272 } 3273 return sreloc; 3274 } 3275 3276 /* Return the GOT_TLS_* type required by relocation type R_TYPE. */ 3277 3278 static int 3279 mips_elf_reloc_tls_type (unsigned int r_type) 3280 { 3281 if (tls_gd_reloc_p (r_type)) 3282 return GOT_TLS_GD; 3283 3284 if (tls_ldm_reloc_p (r_type)) 3285 return GOT_TLS_LDM; 3286 3287 if (tls_gottprel_reloc_p (r_type)) 3288 return GOT_TLS_IE; 3289 3290 return GOT_TLS_NONE; 3291 } 3292 3293 /* Return the number of GOT slots needed for GOT TLS type TYPE. */ 3294 3295 static int 3296 mips_tls_got_entries (unsigned int type) 3297 { 3298 switch (type) 3299 { 3300 case GOT_TLS_GD: 3301 case GOT_TLS_LDM: 3302 return 2; 3303 3304 case GOT_TLS_IE: 3305 return 1; 3306 3307 case GOT_TLS_NONE: 3308 return 0; 3309 } 3310 abort (); 3311 } 3312 3313 /* Count the number of relocations needed for a TLS GOT entry, with 3314 access types from TLS_TYPE, and symbol H (or a local symbol if H 3315 is NULL). */ 3316 3317 static int 3318 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type, 3319 struct elf_link_hash_entry *h) 3320 { 3321 int indx = 0; 3322 bfd_boolean need_relocs = FALSE; 3323 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; 3324 3325 if (h != NULL 3326 && h->dynindx != -1 3327 && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) 3328 && (bfd_link_dll (info) || !SYMBOL_REFERENCES_LOCAL (info, h))) 3329 indx = h->dynindx; 3330 3331 if ((bfd_link_dll (info) || indx != 0) 3332 && (h == NULL 3333 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT 3334 || h->root.type != bfd_link_hash_undefweak)) 3335 need_relocs = TRUE; 3336 3337 if (!need_relocs) 3338 return 0; 3339 3340 switch (tls_type) 3341 { 3342 case GOT_TLS_GD: 3343 return indx != 0 ? 2 : 1; 3344 3345 case GOT_TLS_IE: 3346 return 1; 3347 3348 case GOT_TLS_LDM: 3349 return bfd_link_dll (info) ? 1 : 0; 3350 3351 default: 3352 return 0; 3353 } 3354 } 3355 3356 /* Add the number of GOT entries and TLS relocations required by ENTRY 3357 to G. */ 3358 3359 static void 3360 mips_elf_count_got_entry (struct bfd_link_info *info, 3361 struct mips_got_info *g, 3362 struct mips_got_entry *entry) 3363 { 3364 if (entry->tls_type) 3365 { 3366 g->tls_gotno += mips_tls_got_entries (entry->tls_type); 3367 g->relocs += mips_tls_got_relocs (info, entry->tls_type, 3368 entry->symndx < 0 3369 ? &entry->d.h->root : NULL); 3370 } 3371 else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE) 3372 g->local_gotno += 1; 3373 else 3374 g->global_gotno += 1; 3375 } 3376 3377 /* Output a simple dynamic relocation into SRELOC. */ 3378 3379 static void 3380 mips_elf_output_dynamic_relocation (bfd *output_bfd, 3381 asection *sreloc, 3382 unsigned long reloc_index, 3383 unsigned long indx, 3384 int r_type, 3385 bfd_vma offset) 3386 { 3387 Elf_Internal_Rela rel[3]; 3388 3389 memset (rel, 0, sizeof (rel)); 3390 3391 rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type); 3392 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset; 3393 3394 if (ABI_64_P (output_bfd)) 3395 { 3396 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out) 3397 (output_bfd, &rel[0], 3398 (sreloc->contents 3399 + reloc_index * sizeof (Elf64_Mips_External_Rel))); 3400 } 3401 else 3402 bfd_elf32_swap_reloc_out 3403 (output_bfd, &rel[0], 3404 (sreloc->contents 3405 + reloc_index * sizeof (Elf32_External_Rel))); 3406 } 3407 3408 /* Initialize a set of TLS GOT entries for one symbol. */ 3409 3410 static void 3411 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info, 3412 struct mips_got_entry *entry, 3413 struct mips_elf_link_hash_entry *h, 3414 bfd_vma value) 3415 { 3416 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; 3417 struct mips_elf_link_hash_table *htab; 3418 int indx; 3419 asection *sreloc, *sgot; 3420 bfd_vma got_offset, got_offset2; 3421 bfd_boolean need_relocs = FALSE; 3422 3423 htab = mips_elf_hash_table (info); 3424 if (htab == NULL) 3425 return; 3426 3427 sgot = htab->root.sgot; 3428 3429 indx = 0; 3430 if (h != NULL 3431 && h->root.dynindx != -1 3432 && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), &h->root) 3433 && (bfd_link_dll (info) || !SYMBOL_REFERENCES_LOCAL (info, &h->root))) 3434 indx = h->root.dynindx; 3435 3436 if (entry->tls_initialized) 3437 return; 3438 3439 if ((bfd_link_dll (info) || indx != 0) 3440 && (h == NULL 3441 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT 3442 || h->root.type != bfd_link_hash_undefweak)) 3443 need_relocs = TRUE; 3444 3445 /* MINUS_ONE means the symbol is not defined in this object. It may not 3446 be defined at all; assume that the value doesn't matter in that 3447 case. Otherwise complain if we would use the value. */ 3448 BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs) 3449 || h->root.root.type == bfd_link_hash_undefweak); 3450 3451 /* Emit necessary relocations. */ 3452 sreloc = mips_elf_rel_dyn_section (info, FALSE); 3453 got_offset = entry->gotidx; 3454 3455 switch (entry->tls_type) 3456 { 3457 case GOT_TLS_GD: 3458 /* General Dynamic. */ 3459 got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd); 3460 3461 if (need_relocs) 3462 { 3463 mips_elf_output_dynamic_relocation 3464 (abfd, sreloc, sreloc->reloc_count++, indx, 3465 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32, 3466 sgot->output_offset + sgot->output_section->vma + got_offset); 3467 3468 if (indx) 3469 mips_elf_output_dynamic_relocation 3470 (abfd, sreloc, sreloc->reloc_count++, indx, 3471 ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32, 3472 sgot->output_offset + sgot->output_section->vma + got_offset2); 3473 else 3474 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info), 3475 sgot->contents + got_offset2); 3476 } 3477 else 3478 { 3479 MIPS_ELF_PUT_WORD (abfd, 1, 3480 sgot->contents + got_offset); 3481 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info), 3482 sgot->contents + got_offset2); 3483 } 3484 break; 3485 3486 case GOT_TLS_IE: 3487 /* Initial Exec model. */ 3488 if (need_relocs) 3489 { 3490 if (indx == 0) 3491 MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma, 3492 sgot->contents + got_offset); 3493 else 3494 MIPS_ELF_PUT_WORD (abfd, 0, 3495 sgot->contents + got_offset); 3496 3497 mips_elf_output_dynamic_relocation 3498 (abfd, sreloc, sreloc->reloc_count++, indx, 3499 ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32, 3500 sgot->output_offset + sgot->output_section->vma + got_offset); 3501 } 3502 else 3503 MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info), 3504 sgot->contents + got_offset); 3505 break; 3506 3507 case GOT_TLS_LDM: 3508 /* The initial offset is zero, and the LD offsets will include the 3509 bias by DTP_OFFSET. */ 3510 MIPS_ELF_PUT_WORD (abfd, 0, 3511 sgot->contents + got_offset 3512 + MIPS_ELF_GOT_SIZE (abfd)); 3513 3514 if (!bfd_link_dll (info)) 3515 MIPS_ELF_PUT_WORD (abfd, 1, 3516 sgot->contents + got_offset); 3517 else 3518 mips_elf_output_dynamic_relocation 3519 (abfd, sreloc, sreloc->reloc_count++, indx, 3520 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32, 3521 sgot->output_offset + sgot->output_section->vma + got_offset); 3522 break; 3523 3524 default: 3525 abort (); 3526 } 3527 3528 entry->tls_initialized = TRUE; 3529 } 3530 3531 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry 3532 for global symbol H. .got.plt comes before the GOT, so the offset 3533 will be negative. */ 3534 3535 static bfd_vma 3536 mips_elf_gotplt_index (struct bfd_link_info *info, 3537 struct elf_link_hash_entry *h) 3538 { 3539 bfd_vma got_address, got_value; 3540 struct mips_elf_link_hash_table *htab; 3541 3542 htab = mips_elf_hash_table (info); 3543 BFD_ASSERT (htab != NULL); 3544 3545 BFD_ASSERT (h->plt.plist != NULL); 3546 BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE); 3547 3548 /* Calculate the address of the associated .got.plt entry. */ 3549 got_address = (htab->root.sgotplt->output_section->vma 3550 + htab->root.sgotplt->output_offset 3551 + (h->plt.plist->gotplt_index 3552 * MIPS_ELF_GOT_SIZE (info->output_bfd))); 3553 3554 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */ 3555 got_value = (htab->root.hgot->root.u.def.section->output_section->vma 3556 + htab->root.hgot->root.u.def.section->output_offset 3557 + htab->root.hgot->root.u.def.value); 3558 3559 return got_address - got_value; 3560 } 3561 3562 /* Return the GOT offset for address VALUE. If there is not yet a GOT 3563 entry for this value, create one. If R_SYMNDX refers to a TLS symbol, 3564 create a TLS GOT entry instead. Return -1 if no satisfactory GOT 3565 offset can be found. */ 3566 3567 static bfd_vma 3568 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, 3569 bfd_vma value, unsigned long r_symndx, 3570 struct mips_elf_link_hash_entry *h, int r_type) 3571 { 3572 struct mips_elf_link_hash_table *htab; 3573 struct mips_got_entry *entry; 3574 3575 htab = mips_elf_hash_table (info); 3576 BFD_ASSERT (htab != NULL); 3577 3578 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 3579 r_symndx, h, r_type); 3580 if (!entry) 3581 return MINUS_ONE; 3582 3583 if (entry->tls_type) 3584 mips_elf_initialize_tls_slots (abfd, info, entry, h, value); 3585 return entry->gotidx; 3586 } 3587 3588 /* Return the GOT index of global symbol H in the primary GOT. */ 3589 3590 static bfd_vma 3591 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info, 3592 struct elf_link_hash_entry *h) 3593 { 3594 struct mips_elf_link_hash_table *htab; 3595 long global_got_dynindx; 3596 struct mips_got_info *g; 3597 bfd_vma got_index; 3598 3599 htab = mips_elf_hash_table (info); 3600 BFD_ASSERT (htab != NULL); 3601 3602 global_got_dynindx = 0; 3603 if (htab->global_gotsym != NULL) 3604 global_got_dynindx = htab->global_gotsym->dynindx; 3605 3606 /* Once we determine the global GOT entry with the lowest dynamic 3607 symbol table index, we must put all dynamic symbols with greater 3608 indices into the primary GOT. That makes it easy to calculate the 3609 GOT offset. */ 3610 BFD_ASSERT (h->dynindx >= global_got_dynindx); 3611 g = mips_elf_bfd_got (obfd, FALSE); 3612 got_index = ((h->dynindx - global_got_dynindx + g->local_gotno) 3613 * MIPS_ELF_GOT_SIZE (obfd)); 3614 BFD_ASSERT (got_index < htab->root.sgot->size); 3615 3616 return got_index; 3617 } 3618 3619 /* Return the GOT index for the global symbol indicated by H, which is 3620 referenced by a relocation of type R_TYPE in IBFD. */ 3621 3622 static bfd_vma 3623 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd, 3624 struct elf_link_hash_entry *h, int r_type) 3625 { 3626 struct mips_elf_link_hash_table *htab; 3627 struct mips_got_info *g; 3628 struct mips_got_entry lookup, *entry; 3629 bfd_vma gotidx; 3630 3631 htab = mips_elf_hash_table (info); 3632 BFD_ASSERT (htab != NULL); 3633 3634 g = mips_elf_bfd_got (ibfd, FALSE); 3635 BFD_ASSERT (g); 3636 3637 lookup.tls_type = mips_elf_reloc_tls_type (r_type); 3638 if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE)) 3639 return mips_elf_primary_global_got_index (obfd, info, h); 3640 3641 lookup.abfd = ibfd; 3642 lookup.symndx = -1; 3643 lookup.d.h = (struct mips_elf_link_hash_entry *) h; 3644 entry = htab_find (g->got_entries, &lookup); 3645 BFD_ASSERT (entry); 3646 3647 gotidx = entry->gotidx; 3648 BFD_ASSERT (gotidx > 0 && gotidx < htab->root.sgot->size); 3649 3650 if (lookup.tls_type) 3651 { 3652 bfd_vma value = MINUS_ONE; 3653 3654 if ((h->root.type == bfd_link_hash_defined 3655 || h->root.type == bfd_link_hash_defweak) 3656 && h->root.u.def.section->output_section) 3657 value = (h->root.u.def.value 3658 + h->root.u.def.section->output_offset 3659 + h->root.u.def.section->output_section->vma); 3660 3661 mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value); 3662 } 3663 return gotidx; 3664 } 3665 3666 /* Find a GOT page entry that points to within 32KB of VALUE. These 3667 entries are supposed to be placed at small offsets in the GOT, i.e., 3668 within 32KB of GP. Return the index of the GOT entry, or -1 if no 3669 entry could be created. If OFFSETP is nonnull, use it to return the 3670 offset of the GOT entry from VALUE. */ 3671 3672 static bfd_vma 3673 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, 3674 bfd_vma value, bfd_vma *offsetp) 3675 { 3676 bfd_vma page, got_index; 3677 struct mips_got_entry *entry; 3678 3679 page = (value + 0x8000) & ~(bfd_vma) 0xffff; 3680 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0, 3681 NULL, R_MIPS_GOT_PAGE); 3682 3683 if (!entry) 3684 return MINUS_ONE; 3685 3686 got_index = entry->gotidx; 3687 3688 if (offsetp) 3689 *offsetp = value - entry->d.address; 3690 3691 return got_index; 3692 } 3693 3694 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE. 3695 EXTERNAL is true if the relocation was originally against a global 3696 symbol that binds locally. */ 3697 3698 static bfd_vma 3699 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, 3700 bfd_vma value, bfd_boolean external) 3701 { 3702 struct mips_got_entry *entry; 3703 3704 /* GOT16 relocations against local symbols are followed by a LO16 3705 relocation; those against global symbols are not. Thus if the 3706 symbol was originally local, the GOT16 relocation should load the 3707 equivalent of %hi(VALUE), otherwise it should load VALUE itself. */ 3708 if (! external) 3709 value = mips_elf_high (value) << 16; 3710 3711 /* It doesn't matter whether the original relocation was R_MIPS_GOT16, 3712 R_MIPS16_GOT16, R_MIPS_CALL16, etc. The format of the entry is the 3713 same in all cases. */ 3714 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0, 3715 NULL, R_MIPS_GOT16); 3716 if (entry) 3717 return entry->gotidx; 3718 else 3719 return MINUS_ONE; 3720 } 3721 3722 /* Returns the offset for the entry at the INDEXth position 3723 in the GOT. */ 3724 3725 static bfd_vma 3726 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd, 3727 bfd *input_bfd, bfd_vma got_index) 3728 { 3729 struct mips_elf_link_hash_table *htab; 3730 asection *sgot; 3731 bfd_vma gp; 3732 3733 htab = mips_elf_hash_table (info); 3734 BFD_ASSERT (htab != NULL); 3735 3736 sgot = htab->root.sgot; 3737 gp = _bfd_get_gp_value (output_bfd) 3738 + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd); 3739 3740 return sgot->output_section->vma + sgot->output_offset + got_index - gp; 3741 } 3742 3743 /* Create and return a local GOT entry for VALUE, which was calculated 3744 from a symbol belonging to INPUT_SECTON. Return NULL if it could not 3745 be created. If R_SYMNDX refers to a TLS symbol, create a TLS entry 3746 instead. */ 3747 3748 static struct mips_got_entry * 3749 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info, 3750 bfd *ibfd, bfd_vma value, 3751 unsigned long r_symndx, 3752 struct mips_elf_link_hash_entry *h, 3753 int r_type) 3754 { 3755 struct mips_got_entry lookup, *entry; 3756 void **loc; 3757 struct mips_got_info *g; 3758 struct mips_elf_link_hash_table *htab; 3759 bfd_vma gotidx; 3760 3761 htab = mips_elf_hash_table (info); 3762 BFD_ASSERT (htab != NULL); 3763 3764 g = mips_elf_bfd_got (ibfd, FALSE); 3765 if (g == NULL) 3766 { 3767 g = mips_elf_bfd_got (abfd, FALSE); 3768 BFD_ASSERT (g != NULL); 3769 } 3770 3771 /* This function shouldn't be called for symbols that live in the global 3772 area of the GOT. */ 3773 BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE); 3774 3775 lookup.tls_type = mips_elf_reloc_tls_type (r_type); 3776 if (lookup.tls_type) 3777 { 3778 lookup.abfd = ibfd; 3779 if (tls_ldm_reloc_p (r_type)) 3780 { 3781 lookup.symndx = 0; 3782 lookup.d.addend = 0; 3783 } 3784 else if (h == NULL) 3785 { 3786 lookup.symndx = r_symndx; 3787 lookup.d.addend = 0; 3788 } 3789 else 3790 { 3791 lookup.symndx = -1; 3792 lookup.d.h = h; 3793 } 3794 3795 entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup); 3796 BFD_ASSERT (entry); 3797 3798 gotidx = entry->gotidx; 3799 BFD_ASSERT (gotidx > 0 && gotidx < htab->root.sgot->size); 3800 3801 return entry; 3802 } 3803 3804 lookup.abfd = NULL; 3805 lookup.symndx = -1; 3806 lookup.d.address = value; 3807 loc = htab_find_slot (g->got_entries, &lookup, INSERT); 3808 if (!loc) 3809 return NULL; 3810 3811 entry = (struct mips_got_entry *) *loc; 3812 if (entry) 3813 return entry; 3814 3815 if (g->assigned_low_gotno > g->assigned_high_gotno) 3816 { 3817 /* We didn't allocate enough space in the GOT. */ 3818 _bfd_error_handler 3819 (_("not enough GOT space for local GOT entries")); 3820 bfd_set_error (bfd_error_bad_value); 3821 return NULL; 3822 } 3823 3824 entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry)); 3825 if (!entry) 3826 return NULL; 3827 3828 if (got16_reloc_p (r_type) 3829 || call16_reloc_p (r_type) 3830 || got_page_reloc_p (r_type) 3831 || got_disp_reloc_p (r_type)) 3832 lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++; 3833 else 3834 lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--; 3835 3836 *entry = lookup; 3837 *loc = entry; 3838 3839 MIPS_ELF_PUT_WORD (abfd, value, htab->root.sgot->contents + entry->gotidx); 3840 3841 /* These GOT entries need a dynamic relocation on VxWorks. */ 3842 if (htab->is_vxworks) 3843 { 3844 Elf_Internal_Rela outrel; 3845 asection *s; 3846 bfd_byte *rloc; 3847 bfd_vma got_address; 3848 3849 s = mips_elf_rel_dyn_section (info, FALSE); 3850 got_address = (htab->root.sgot->output_section->vma 3851 + htab->root.sgot->output_offset 3852 + entry->gotidx); 3853 3854 rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela)); 3855 outrel.r_offset = got_address; 3856 outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32); 3857 outrel.r_addend = value; 3858 bfd_elf32_swap_reloca_out (abfd, &outrel, rloc); 3859 } 3860 3861 return entry; 3862 } 3863 3864 /* Return the number of dynamic section symbols required by OUTPUT_BFD. 3865 The number might be exact or a worst-case estimate, depending on how 3866 much information is available to elf_backend_omit_section_dynsym at 3867 the current linking stage. */ 3868 3869 static bfd_size_type 3870 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info) 3871 { 3872 bfd_size_type count; 3873 3874 count = 0; 3875 if (bfd_link_pic (info) 3876 || elf_hash_table (info)->is_relocatable_executable) 3877 { 3878 asection *p; 3879 const struct elf_backend_data *bed; 3880 3881 bed = get_elf_backend_data (output_bfd); 3882 for (p = output_bfd->sections; p ; p = p->next) 3883 if ((p->flags & SEC_EXCLUDE) == 0 3884 && (p->flags & SEC_ALLOC) != 0 3885 && elf_hash_table (info)->dynamic_relocs 3886 && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p)) 3887 ++count; 3888 } 3889 return count; 3890 } 3891 3892 /* Sort the dynamic symbol table so that symbols that need GOT entries 3893 appear towards the end. */ 3894 3895 static bfd_boolean 3896 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info) 3897 { 3898 struct mips_elf_link_hash_table *htab; 3899 struct mips_elf_hash_sort_data hsd; 3900 struct mips_got_info *g; 3901 3902 htab = mips_elf_hash_table (info); 3903 BFD_ASSERT (htab != NULL); 3904 3905 if (htab->root.dynsymcount == 0) 3906 return TRUE; 3907 3908 g = htab->got_info; 3909 if (g == NULL) 3910 return TRUE; 3911 3912 hsd.low = NULL; 3913 hsd.max_unref_got_dynindx 3914 = hsd.min_got_dynindx 3915 = (htab->root.dynsymcount - g->reloc_only_gotno); 3916 /* Add 1 to local symbol indices to account for the mandatory NULL entry 3917 at the head of the table; see `_bfd_elf_link_renumber_dynsyms'. */ 3918 hsd.max_local_dynindx = count_section_dynsyms (abfd, info) + 1; 3919 hsd.max_non_got_dynindx = htab->root.local_dynsymcount + 1; 3920 hsd.output_bfd = abfd; 3921 if (htab->root.dynobj != NULL 3922 && htab->root.dynamic_sections_created 3923 && info->emit_gnu_hash) 3924 { 3925 asection *s = bfd_get_linker_section (htab->root.dynobj, ".MIPS.xhash"); 3926 BFD_ASSERT (s != NULL); 3927 hsd.mipsxhash = s->contents; 3928 BFD_ASSERT (hsd.mipsxhash != NULL); 3929 } 3930 else 3931 hsd.mipsxhash = NULL; 3932 mips_elf_link_hash_traverse (htab, mips_elf_sort_hash_table_f, &hsd); 3933 3934 /* There should have been enough room in the symbol table to 3935 accommodate both the GOT and non-GOT symbols. */ 3936 BFD_ASSERT (hsd.max_local_dynindx <= htab->root.local_dynsymcount + 1); 3937 BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx); 3938 BFD_ASSERT (hsd.max_unref_got_dynindx == htab->root.dynsymcount); 3939 BFD_ASSERT (htab->root.dynsymcount - hsd.min_got_dynindx == g->global_gotno); 3940 3941 /* Now we know which dynamic symbol has the lowest dynamic symbol 3942 table index in the GOT. */ 3943 htab->global_gotsym = hsd.low; 3944 3945 return TRUE; 3946 } 3947 3948 /* If H needs a GOT entry, assign it the highest available dynamic 3949 index. Otherwise, assign it the lowest available dynamic 3950 index. */ 3951 3952 static bfd_boolean 3953 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data) 3954 { 3955 struct mips_elf_hash_sort_data *hsd = data; 3956 3957 /* Symbols without dynamic symbol table entries aren't interesting 3958 at all. */ 3959 if (h->root.dynindx == -1) 3960 return TRUE; 3961 3962 switch (h->global_got_area) 3963 { 3964 case GGA_NONE: 3965 if (h->root.forced_local) 3966 h->root.dynindx = hsd->max_local_dynindx++; 3967 else 3968 h->root.dynindx = hsd->max_non_got_dynindx++; 3969 break; 3970 3971 case GGA_NORMAL: 3972 h->root.dynindx = --hsd->min_got_dynindx; 3973 hsd->low = (struct elf_link_hash_entry *) h; 3974 break; 3975 3976 case GGA_RELOC_ONLY: 3977 if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx) 3978 hsd->low = (struct elf_link_hash_entry *) h; 3979 h->root.dynindx = hsd->max_unref_got_dynindx++; 3980 break; 3981 } 3982 3983 /* Populate the .MIPS.xhash translation table entry with 3984 the symbol dynindx. */ 3985 if (h->mipsxhash_loc != 0 && hsd->mipsxhash != NULL) 3986 bfd_put_32 (hsd->output_bfd, h->root.dynindx, 3987 hsd->mipsxhash + h->mipsxhash_loc); 3988 3989 return TRUE; 3990 } 3991 3992 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP 3993 (which is owned by the caller and shouldn't be added to the 3994 hash table directly). */ 3995 3996 static bfd_boolean 3997 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd, 3998 struct mips_got_entry *lookup) 3999 { 4000 struct mips_elf_link_hash_table *htab; 4001 struct mips_got_entry *entry; 4002 struct mips_got_info *g; 4003 void **loc, **bfd_loc; 4004 4005 /* Make sure there's a slot for this entry in the master GOT. */ 4006 htab = mips_elf_hash_table (info); 4007 g = htab->got_info; 4008 loc = htab_find_slot (g->got_entries, lookup, INSERT); 4009 if (!loc) 4010 return FALSE; 4011 4012 /* Populate the entry if it isn't already. */ 4013 entry = (struct mips_got_entry *) *loc; 4014 if (!entry) 4015 { 4016 entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry)); 4017 if (!entry) 4018 return FALSE; 4019 4020 lookup->tls_initialized = FALSE; 4021 lookup->gotidx = -1; 4022 *entry = *lookup; 4023 *loc = entry; 4024 } 4025 4026 /* Reuse the same GOT entry for the BFD's GOT. */ 4027 g = mips_elf_bfd_got (abfd, TRUE); 4028 if (!g) 4029 return FALSE; 4030 4031 bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT); 4032 if (!bfd_loc) 4033 return FALSE; 4034 4035 if (!*bfd_loc) 4036 *bfd_loc = entry; 4037 return TRUE; 4038 } 4039 4040 /* ABFD has a GOT relocation of type R_TYPE against H. Reserve a GOT 4041 entry for it. FOR_CALL is true if the caller is only interested in 4042 using the GOT entry for calls. */ 4043 4044 static bfd_boolean 4045 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h, 4046 bfd *abfd, struct bfd_link_info *info, 4047 bfd_boolean for_call, int r_type) 4048 { 4049 struct mips_elf_link_hash_table *htab; 4050 struct mips_elf_link_hash_entry *hmips; 4051 struct mips_got_entry entry; 4052 unsigned char tls_type; 4053 4054 htab = mips_elf_hash_table (info); 4055 BFD_ASSERT (htab != NULL); 4056 4057 hmips = (struct mips_elf_link_hash_entry *) h; 4058 if (!for_call) 4059 hmips->got_only_for_calls = FALSE; 4060 4061 /* A global symbol in the GOT must also be in the dynamic symbol 4062 table. */ 4063 if (h->dynindx == -1) 4064 { 4065 switch (ELF_ST_VISIBILITY (h->other)) 4066 { 4067 case STV_INTERNAL: 4068 case STV_HIDDEN: 4069 _bfd_mips_elf_hide_symbol (info, h, TRUE); 4070 break; 4071 } 4072 if (!bfd_elf_link_record_dynamic_symbol (info, h)) 4073 return FALSE; 4074 } 4075 4076 tls_type = mips_elf_reloc_tls_type (r_type); 4077 if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL) 4078 hmips->global_got_area = GGA_NORMAL; 4079 4080 entry.abfd = abfd; 4081 entry.symndx = -1; 4082 entry.d.h = (struct mips_elf_link_hash_entry *) h; 4083 entry.tls_type = tls_type; 4084 return mips_elf_record_got_entry (info, abfd, &entry); 4085 } 4086 4087 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND, 4088 where SYMNDX is a local symbol. Reserve a GOT entry for it. */ 4089 4090 static bfd_boolean 4091 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend, 4092 struct bfd_link_info *info, int r_type) 4093 { 4094 struct mips_elf_link_hash_table *htab; 4095 struct mips_got_info *g; 4096 struct mips_got_entry entry; 4097 4098 htab = mips_elf_hash_table (info); 4099 BFD_ASSERT (htab != NULL); 4100 4101 g = htab->got_info; 4102 BFD_ASSERT (g != NULL); 4103 4104 entry.abfd = abfd; 4105 entry.symndx = symndx; 4106 entry.d.addend = addend; 4107 entry.tls_type = mips_elf_reloc_tls_type (r_type); 4108 return mips_elf_record_got_entry (info, abfd, &entry); 4109 } 4110 4111 /* Record that ABFD has a page relocation against SYMNDX + ADDEND. 4112 H is the symbol's hash table entry, or null if SYMNDX is local 4113 to ABFD. */ 4114 4115 static bfd_boolean 4116 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd, 4117 long symndx, struct elf_link_hash_entry *h, 4118 bfd_signed_vma addend) 4119 { 4120 struct mips_elf_link_hash_table *htab; 4121 struct mips_got_info *g1, *g2; 4122 struct mips_got_page_ref lookup, *entry; 4123 void **loc, **bfd_loc; 4124 4125 htab = mips_elf_hash_table (info); 4126 BFD_ASSERT (htab != NULL); 4127 4128 g1 = htab->got_info; 4129 BFD_ASSERT (g1 != NULL); 4130 4131 if (h) 4132 { 4133 lookup.symndx = -1; 4134 lookup.u.h = (struct mips_elf_link_hash_entry *) h; 4135 } 4136 else 4137 { 4138 lookup.symndx = symndx; 4139 lookup.u.abfd = abfd; 4140 } 4141 lookup.addend = addend; 4142 loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT); 4143 if (loc == NULL) 4144 return FALSE; 4145 4146 entry = (struct mips_got_page_ref *) *loc; 4147 if (!entry) 4148 { 4149 entry = bfd_alloc (abfd, sizeof (*entry)); 4150 if (!entry) 4151 return FALSE; 4152 4153 *entry = lookup; 4154 *loc = entry; 4155 } 4156 4157 /* Add the same entry to the BFD's GOT. */ 4158 g2 = mips_elf_bfd_got (abfd, TRUE); 4159 if (!g2) 4160 return FALSE; 4161 4162 bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT); 4163 if (!bfd_loc) 4164 return FALSE; 4165 4166 if (!*bfd_loc) 4167 *bfd_loc = entry; 4168 4169 return TRUE; 4170 } 4171 4172 /* Add room for N relocations to the .rel(a).dyn section in ABFD. */ 4173 4174 static void 4175 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info, 4176 unsigned int n) 4177 { 4178 asection *s; 4179 struct mips_elf_link_hash_table *htab; 4180 4181 htab = mips_elf_hash_table (info); 4182 BFD_ASSERT (htab != NULL); 4183 4184 s = mips_elf_rel_dyn_section (info, FALSE); 4185 BFD_ASSERT (s != NULL); 4186 4187 if (htab->is_vxworks) 4188 s->size += n * MIPS_ELF_RELA_SIZE (abfd); 4189 else 4190 { 4191 if (s->size == 0) 4192 { 4193 /* Make room for a null element. */ 4194 s->size += MIPS_ELF_REL_SIZE (abfd); 4195 ++s->reloc_count; 4196 } 4197 s->size += n * MIPS_ELF_REL_SIZE (abfd); 4198 } 4199 } 4200 4201 /* A htab_traverse callback for GOT entries, with DATA pointing to a 4202 mips_elf_traverse_got_arg structure. Count the number of GOT 4203 entries and TLS relocs. Set DATA->value to true if we need 4204 to resolve indirect or warning symbols and then recreate the GOT. */ 4205 4206 static int 4207 mips_elf_check_recreate_got (void **entryp, void *data) 4208 { 4209 struct mips_got_entry *entry; 4210 struct mips_elf_traverse_got_arg *arg; 4211 4212 entry = (struct mips_got_entry *) *entryp; 4213 arg = (struct mips_elf_traverse_got_arg *) data; 4214 if (entry->abfd != NULL && entry->symndx == -1) 4215 { 4216 struct mips_elf_link_hash_entry *h; 4217 4218 h = entry->d.h; 4219 if (h->root.root.type == bfd_link_hash_indirect 4220 || h->root.root.type == bfd_link_hash_warning) 4221 { 4222 arg->value = TRUE; 4223 return 0; 4224 } 4225 } 4226 mips_elf_count_got_entry (arg->info, arg->g, entry); 4227 return 1; 4228 } 4229 4230 /* A htab_traverse callback for GOT entries, with DATA pointing to a 4231 mips_elf_traverse_got_arg structure. Add all entries to DATA->g, 4232 converting entries for indirect and warning symbols into entries 4233 for the target symbol. Set DATA->g to null on error. */ 4234 4235 static int 4236 mips_elf_recreate_got (void **entryp, void *data) 4237 { 4238 struct mips_got_entry new_entry, *entry; 4239 struct mips_elf_traverse_got_arg *arg; 4240 void **slot; 4241 4242 entry = (struct mips_got_entry *) *entryp; 4243 arg = (struct mips_elf_traverse_got_arg *) data; 4244 if (entry->abfd != NULL 4245 && entry->symndx == -1 4246 && (entry->d.h->root.root.type == bfd_link_hash_indirect 4247 || entry->d.h->root.root.type == bfd_link_hash_warning)) 4248 { 4249 struct mips_elf_link_hash_entry *h; 4250 4251 new_entry = *entry; 4252 entry = &new_entry; 4253 h = entry->d.h; 4254 do 4255 { 4256 BFD_ASSERT (h->global_got_area == GGA_NONE); 4257 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 4258 } 4259 while (h->root.root.type == bfd_link_hash_indirect 4260 || h->root.root.type == bfd_link_hash_warning); 4261 entry->d.h = h; 4262 } 4263 slot = htab_find_slot (arg->g->got_entries, entry, INSERT); 4264 if (slot == NULL) 4265 { 4266 arg->g = NULL; 4267 return 0; 4268 } 4269 if (*slot == NULL) 4270 { 4271 if (entry == &new_entry) 4272 { 4273 entry = bfd_alloc (entry->abfd, sizeof (*entry)); 4274 if (!entry) 4275 { 4276 arg->g = NULL; 4277 return 0; 4278 } 4279 *entry = new_entry; 4280 } 4281 *slot = entry; 4282 mips_elf_count_got_entry (arg->info, arg->g, entry); 4283 } 4284 return 1; 4285 } 4286 4287 /* Return the maximum number of GOT page entries required for RANGE. */ 4288 4289 static bfd_vma 4290 mips_elf_pages_for_range (const struct mips_got_page_range *range) 4291 { 4292 return (range->max_addend - range->min_addend + 0x1ffff) >> 16; 4293 } 4294 4295 /* Record that G requires a page entry that can reach SEC + ADDEND. */ 4296 4297 static bfd_boolean 4298 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg, 4299 asection *sec, bfd_signed_vma addend) 4300 { 4301 struct mips_got_info *g = arg->g; 4302 struct mips_got_page_entry lookup, *entry; 4303 struct mips_got_page_range **range_ptr, *range; 4304 bfd_vma old_pages, new_pages; 4305 void **loc; 4306 4307 /* Find the mips_got_page_entry hash table entry for this section. */ 4308 lookup.sec = sec; 4309 loc = htab_find_slot (g->got_page_entries, &lookup, INSERT); 4310 if (loc == NULL) 4311 return FALSE; 4312 4313 /* Create a mips_got_page_entry if this is the first time we've 4314 seen the section. */ 4315 entry = (struct mips_got_page_entry *) *loc; 4316 if (!entry) 4317 { 4318 entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry)); 4319 if (!entry) 4320 return FALSE; 4321 4322 entry->sec = sec; 4323 *loc = entry; 4324 } 4325 4326 /* Skip over ranges whose maximum extent cannot share a page entry 4327 with ADDEND. */ 4328 range_ptr = &entry->ranges; 4329 while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff) 4330 range_ptr = &(*range_ptr)->next; 4331 4332 /* If we scanned to the end of the list, or found a range whose 4333 minimum extent cannot share a page entry with ADDEND, create 4334 a new singleton range. */ 4335 range = *range_ptr; 4336 if (!range || addend < range->min_addend - 0xffff) 4337 { 4338 range = bfd_zalloc (arg->info->output_bfd, sizeof (*range)); 4339 if (!range) 4340 return FALSE; 4341 4342 range->next = *range_ptr; 4343 range->min_addend = addend; 4344 range->max_addend = addend; 4345 4346 *range_ptr = range; 4347 entry->num_pages++; 4348 g->page_gotno++; 4349 return TRUE; 4350 } 4351 4352 /* Remember how many pages the old range contributed. */ 4353 old_pages = mips_elf_pages_for_range (range); 4354 4355 /* Update the ranges. */ 4356 if (addend < range->min_addend) 4357 range->min_addend = addend; 4358 else if (addend > range->max_addend) 4359 { 4360 if (range->next && addend >= range->next->min_addend - 0xffff) 4361 { 4362 old_pages += mips_elf_pages_for_range (range->next); 4363 range->max_addend = range->next->max_addend; 4364 range->next = range->next->next; 4365 } 4366 else 4367 range->max_addend = addend; 4368 } 4369 4370 /* Record any change in the total estimate. */ 4371 new_pages = mips_elf_pages_for_range (range); 4372 if (old_pages != new_pages) 4373 { 4374 entry->num_pages += new_pages - old_pages; 4375 g->page_gotno += new_pages - old_pages; 4376 } 4377 4378 return TRUE; 4379 } 4380 4381 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref 4382 and for which DATA points to a mips_elf_traverse_got_arg. Work out 4383 whether the page reference described by *REFP needs a GOT page entry, 4384 and record that entry in DATA->g if so. Set DATA->g to null on failure. */ 4385 4386 static bfd_boolean 4387 mips_elf_resolve_got_page_ref (void **refp, void *data) 4388 { 4389 struct mips_got_page_ref *ref; 4390 struct mips_elf_traverse_got_arg *arg; 4391 struct mips_elf_link_hash_table *htab; 4392 asection *sec; 4393 bfd_vma addend; 4394 4395 ref = (struct mips_got_page_ref *) *refp; 4396 arg = (struct mips_elf_traverse_got_arg *) data; 4397 htab = mips_elf_hash_table (arg->info); 4398 4399 if (ref->symndx < 0) 4400 { 4401 struct mips_elf_link_hash_entry *h; 4402 4403 /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries. */ 4404 h = ref->u.h; 4405 if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root)) 4406 return 1; 4407 4408 /* Ignore undefined symbols; we'll issue an error later if 4409 appropriate. */ 4410 if (!((h->root.root.type == bfd_link_hash_defined 4411 || h->root.root.type == bfd_link_hash_defweak) 4412 && h->root.root.u.def.section)) 4413 return 1; 4414 4415 sec = h->root.root.u.def.section; 4416 addend = h->root.root.u.def.value + ref->addend; 4417 } 4418 else 4419 { 4420 Elf_Internal_Sym *isym; 4421 4422 /* Read in the symbol. */ 4423 isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd, 4424 ref->symndx); 4425 if (isym == NULL) 4426 { 4427 arg->g = NULL; 4428 return 0; 4429 } 4430 4431 /* Get the associated input section. */ 4432 sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx); 4433 if (sec == NULL) 4434 { 4435 arg->g = NULL; 4436 return 0; 4437 } 4438 4439 /* If this is a mergable section, work out the section and offset 4440 of the merged data. For section symbols, the addend specifies 4441 of the offset _of_ the first byte in the data, otherwise it 4442 specifies the offset _from_ the first byte. */ 4443 if (sec->flags & SEC_MERGE) 4444 { 4445 void *secinfo; 4446 4447 secinfo = elf_section_data (sec)->sec_info; 4448 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION) 4449 addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo, 4450 isym->st_value + ref->addend); 4451 else 4452 addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo, 4453 isym->st_value) + ref->addend; 4454 } 4455 else 4456 addend = isym->st_value + ref->addend; 4457 } 4458 if (!mips_elf_record_got_page_entry (arg, sec, addend)) 4459 { 4460 arg->g = NULL; 4461 return 0; 4462 } 4463 return 1; 4464 } 4465 4466 /* If any entries in G->got_entries are for indirect or warning symbols, 4467 replace them with entries for the target symbol. Convert g->got_page_refs 4468 into got_page_entry structures and estimate the number of page entries 4469 that they require. */ 4470 4471 static bfd_boolean 4472 mips_elf_resolve_final_got_entries (struct bfd_link_info *info, 4473 struct mips_got_info *g) 4474 { 4475 struct mips_elf_traverse_got_arg tga; 4476 struct mips_got_info oldg; 4477 4478 oldg = *g; 4479 4480 tga.info = info; 4481 tga.g = g; 4482 tga.value = FALSE; 4483 htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga); 4484 if (tga.value) 4485 { 4486 *g = oldg; 4487 g->got_entries = htab_create (htab_size (oldg.got_entries), 4488 mips_elf_got_entry_hash, 4489 mips_elf_got_entry_eq, NULL); 4490 if (!g->got_entries) 4491 return FALSE; 4492 4493 htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga); 4494 if (!tga.g) 4495 return FALSE; 4496 4497 htab_delete (oldg.got_entries); 4498 } 4499 4500 g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash, 4501 mips_got_page_entry_eq, NULL); 4502 if (g->got_page_entries == NULL) 4503 return FALSE; 4504 4505 tga.info = info; 4506 tga.g = g; 4507 htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga); 4508 4509 return TRUE; 4510 } 4511 4512 /* Return true if a GOT entry for H should live in the local rather than 4513 global GOT area. */ 4514 4515 static bfd_boolean 4516 mips_use_local_got_p (struct bfd_link_info *info, 4517 struct mips_elf_link_hash_entry *h) 4518 { 4519 /* Symbols that aren't in the dynamic symbol table must live in the 4520 local GOT. This includes symbols that are completely undefined 4521 and which therefore don't bind locally. We'll report undefined 4522 symbols later if appropriate. */ 4523 if (h->root.dynindx == -1) 4524 return TRUE; 4525 4526 /* Absolute symbols, if ever they need a GOT entry, cannot ever go 4527 to the local GOT, as they would be implicitly relocated by the 4528 base address by the dynamic loader. */ 4529 if (bfd_is_abs_symbol (&h->root.root)) 4530 return FALSE; 4531 4532 /* Symbols that bind locally can (and in the case of forced-local 4533 symbols, must) live in the local GOT. */ 4534 if (h->got_only_for_calls 4535 ? SYMBOL_CALLS_LOCAL (info, &h->root) 4536 : SYMBOL_REFERENCES_LOCAL (info, &h->root)) 4537 return TRUE; 4538 4539 /* If this is an executable that must provide a definition of the symbol, 4540 either though PLTs or copy relocations, then that address should go in 4541 the local rather than global GOT. */ 4542 if (bfd_link_executable (info) && h->has_static_relocs) 4543 return TRUE; 4544 4545 return FALSE; 4546 } 4547 4548 /* A mips_elf_link_hash_traverse callback for which DATA points to the 4549 link_info structure. Decide whether the hash entry needs an entry in 4550 the global part of the primary GOT, setting global_got_area accordingly. 4551 Count the number of global symbols that are in the primary GOT only 4552 because they have relocations against them (reloc_only_gotno). */ 4553 4554 static int 4555 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data) 4556 { 4557 struct bfd_link_info *info; 4558 struct mips_elf_link_hash_table *htab; 4559 struct mips_got_info *g; 4560 4561 info = (struct bfd_link_info *) data; 4562 htab = mips_elf_hash_table (info); 4563 g = htab->got_info; 4564 if (h->global_got_area != GGA_NONE) 4565 { 4566 /* Make a final decision about whether the symbol belongs in the 4567 local or global GOT. */ 4568 if (mips_use_local_got_p (info, h)) 4569 /* The symbol belongs in the local GOT. We no longer need this 4570 entry if it was only used for relocations; those relocations 4571 will be against the null or section symbol instead of H. */ 4572 h->global_got_area = GGA_NONE; 4573 else if (htab->is_vxworks 4574 && h->got_only_for_calls 4575 && h->root.plt.plist->mips_offset != MINUS_ONE) 4576 /* On VxWorks, calls can refer directly to the .got.plt entry; 4577 they don't need entries in the regular GOT. .got.plt entries 4578 will be allocated by _bfd_mips_elf_adjust_dynamic_symbol. */ 4579 h->global_got_area = GGA_NONE; 4580 else if (h->global_got_area == GGA_RELOC_ONLY) 4581 { 4582 g->reloc_only_gotno++; 4583 g->global_gotno++; 4584 } 4585 } 4586 return 1; 4587 } 4588 4589 /* A htab_traverse callback for GOT entries. Add each one to the GOT 4590 given in mips_elf_traverse_got_arg DATA. Clear DATA->G on error. */ 4591 4592 static int 4593 mips_elf_add_got_entry (void **entryp, void *data) 4594 { 4595 struct mips_got_entry *entry; 4596 struct mips_elf_traverse_got_arg *arg; 4597 void **slot; 4598 4599 entry = (struct mips_got_entry *) *entryp; 4600 arg = (struct mips_elf_traverse_got_arg *) data; 4601 slot = htab_find_slot (arg->g->got_entries, entry, INSERT); 4602 if (!slot) 4603 { 4604 arg->g = NULL; 4605 return 0; 4606 } 4607 if (!*slot) 4608 { 4609 *slot = entry; 4610 mips_elf_count_got_entry (arg->info, arg->g, entry); 4611 } 4612 return 1; 4613 } 4614 4615 /* A htab_traverse callback for GOT page entries. Add each one to the GOT 4616 given in mips_elf_traverse_got_arg DATA. Clear DATA->G on error. */ 4617 4618 static int 4619 mips_elf_add_got_page_entry (void **entryp, void *data) 4620 { 4621 struct mips_got_page_entry *entry; 4622 struct mips_elf_traverse_got_arg *arg; 4623 void **slot; 4624 4625 entry = (struct mips_got_page_entry *) *entryp; 4626 arg = (struct mips_elf_traverse_got_arg *) data; 4627 slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT); 4628 if (!slot) 4629 { 4630 arg->g = NULL; 4631 return 0; 4632 } 4633 if (!*slot) 4634 { 4635 *slot = entry; 4636 arg->g->page_gotno += entry->num_pages; 4637 } 4638 return 1; 4639 } 4640 4641 /* Consider merging FROM, which is ABFD's GOT, into TO. Return -1 if 4642 this would lead to overflow, 1 if they were merged successfully, 4643 and 0 if a merge failed due to lack of memory. (These values are chosen 4644 so that nonnegative return values can be returned by a htab_traverse 4645 callback.) */ 4646 4647 static int 4648 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from, 4649 struct mips_got_info *to, 4650 struct mips_elf_got_per_bfd_arg *arg) 4651 { 4652 struct mips_elf_traverse_got_arg tga; 4653 unsigned int estimate; 4654 4655 /* Work out how many page entries we would need for the combined GOT. */ 4656 estimate = arg->max_pages; 4657 if (estimate >= from->page_gotno + to->page_gotno) 4658 estimate = from->page_gotno + to->page_gotno; 4659 4660 /* And conservatively estimate how many local and TLS entries 4661 would be needed. */ 4662 estimate += from->local_gotno + to->local_gotno; 4663 estimate += from->tls_gotno + to->tls_gotno; 4664 4665 /* If we're merging with the primary got, any TLS relocations will 4666 come after the full set of global entries. Otherwise estimate those 4667 conservatively as well. */ 4668 if (to == arg->primary && from->tls_gotno + to->tls_gotno) 4669 estimate += arg->global_count; 4670 else 4671 estimate += from->global_gotno + to->global_gotno; 4672 4673 /* Bail out if the combined GOT might be too big. */ 4674 if (estimate > arg->max_count) 4675 return -1; 4676 4677 /* Transfer the bfd's got information from FROM to TO. */ 4678 tga.info = arg->info; 4679 tga.g = to; 4680 htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga); 4681 if (!tga.g) 4682 return 0; 4683 4684 htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga); 4685 if (!tga.g) 4686 return 0; 4687 4688 mips_elf_replace_bfd_got (abfd, to); 4689 return 1; 4690 } 4691 4692 /* Attempt to merge GOT G, which belongs to ABFD. Try to use as much 4693 as possible of the primary got, since it doesn't require explicit 4694 dynamic relocations, but don't use bfds that would reference global 4695 symbols out of the addressable range. Failing the primary got, 4696 attempt to merge with the current got, or finish the current got 4697 and then make make the new got current. */ 4698 4699 static bfd_boolean 4700 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g, 4701 struct mips_elf_got_per_bfd_arg *arg) 4702 { 4703 unsigned int estimate; 4704 int result; 4705 4706 if (!mips_elf_resolve_final_got_entries (arg->info, g)) 4707 return FALSE; 4708 4709 /* Work out the number of page, local and TLS entries. */ 4710 estimate = arg->max_pages; 4711 if (estimate > g->page_gotno) 4712 estimate = g->page_gotno; 4713 estimate += g->local_gotno + g->tls_gotno; 4714 4715 /* We place TLS GOT entries after both locals and globals. The globals 4716 for the primary GOT may overflow the normal GOT size limit, so be 4717 sure not to merge a GOT which requires TLS with the primary GOT in that 4718 case. This doesn't affect non-primary GOTs. */ 4719 estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno); 4720 4721 if (estimate <= arg->max_count) 4722 { 4723 /* If we don't have a primary GOT, use it as 4724 a starting point for the primary GOT. */ 4725 if (!arg->primary) 4726 { 4727 arg->primary = g; 4728 return TRUE; 4729 } 4730 4731 /* Try merging with the primary GOT. */ 4732 result = mips_elf_merge_got_with (abfd, g, arg->primary, arg); 4733 if (result >= 0) 4734 return result; 4735 } 4736 4737 /* If we can merge with the last-created got, do it. */ 4738 if (arg->current) 4739 { 4740 result = mips_elf_merge_got_with (abfd, g, arg->current, arg); 4741 if (result >= 0) 4742 return result; 4743 } 4744 4745 /* Well, we couldn't merge, so create a new GOT. Don't check if it 4746 fits; if it turns out that it doesn't, we'll get relocation 4747 overflows anyway. */ 4748 g->next = arg->current; 4749 arg->current = g; 4750 4751 return TRUE; 4752 } 4753 4754 /* ENTRYP is a hash table entry for a mips_got_entry. Set its gotidx 4755 to GOTIDX, duplicating the entry if it has already been assigned 4756 an index in a different GOT. */ 4757 4758 static bfd_boolean 4759 mips_elf_set_gotidx (void **entryp, long gotidx) 4760 { 4761 struct mips_got_entry *entry; 4762 4763 entry = (struct mips_got_entry *) *entryp; 4764 if (entry->gotidx > 0) 4765 { 4766 struct mips_got_entry *new_entry; 4767 4768 new_entry = bfd_alloc (entry->abfd, sizeof (*entry)); 4769 if (!new_entry) 4770 return FALSE; 4771 4772 *new_entry = *entry; 4773 *entryp = new_entry; 4774 entry = new_entry; 4775 } 4776 entry->gotidx = gotidx; 4777 return TRUE; 4778 } 4779 4780 /* Set the TLS GOT index for the GOT entry in ENTRYP. DATA points to a 4781 mips_elf_traverse_got_arg in which DATA->value is the size of one 4782 GOT entry. Set DATA->g to null on failure. */ 4783 4784 static int 4785 mips_elf_initialize_tls_index (void **entryp, void *data) 4786 { 4787 struct mips_got_entry *entry; 4788 struct mips_elf_traverse_got_arg *arg; 4789 4790 /* We're only interested in TLS symbols. */ 4791 entry = (struct mips_got_entry *) *entryp; 4792 if (entry->tls_type == GOT_TLS_NONE) 4793 return 1; 4794 4795 arg = (struct mips_elf_traverse_got_arg *) data; 4796 if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno)) 4797 { 4798 arg->g = NULL; 4799 return 0; 4800 } 4801 4802 /* Account for the entries we've just allocated. */ 4803 arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type); 4804 return 1; 4805 } 4806 4807 /* A htab_traverse callback for GOT entries, where DATA points to a 4808 mips_elf_traverse_got_arg. Set the global_got_area of each global 4809 symbol to DATA->value. */ 4810 4811 static int 4812 mips_elf_set_global_got_area (void **entryp, void *data) 4813 { 4814 struct mips_got_entry *entry; 4815 struct mips_elf_traverse_got_arg *arg; 4816 4817 entry = (struct mips_got_entry *) *entryp; 4818 arg = (struct mips_elf_traverse_got_arg *) data; 4819 if (entry->abfd != NULL 4820 && entry->symndx == -1 4821 && entry->d.h->global_got_area != GGA_NONE) 4822 entry->d.h->global_got_area = arg->value; 4823 return 1; 4824 } 4825 4826 /* A htab_traverse callback for secondary GOT entries, where DATA points 4827 to a mips_elf_traverse_got_arg. Assign GOT indices to global entries 4828 and record the number of relocations they require. DATA->value is 4829 the size of one GOT entry. Set DATA->g to null on failure. */ 4830 4831 static int 4832 mips_elf_set_global_gotidx (void **entryp, void *data) 4833 { 4834 struct mips_got_entry *entry; 4835 struct mips_elf_traverse_got_arg *arg; 4836 4837 entry = (struct mips_got_entry *) *entryp; 4838 arg = (struct mips_elf_traverse_got_arg *) data; 4839 if (entry->abfd != NULL 4840 && entry->symndx == -1 4841 && entry->d.h->global_got_area != GGA_NONE) 4842 { 4843 if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno)) 4844 { 4845 arg->g = NULL; 4846 return 0; 4847 } 4848 arg->g->assigned_low_gotno += 1; 4849 4850 if (bfd_link_pic (arg->info) 4851 || (elf_hash_table (arg->info)->dynamic_sections_created 4852 && entry->d.h->root.def_dynamic 4853 && !entry->d.h->root.def_regular)) 4854 arg->g->relocs += 1; 4855 } 4856 4857 return 1; 4858 } 4859 4860 /* A htab_traverse callback for GOT entries for which DATA is the 4861 bfd_link_info. Forbid any global symbols from having traditional 4862 lazy-binding stubs. */ 4863 4864 static int 4865 mips_elf_forbid_lazy_stubs (void **entryp, void *data) 4866 { 4867 struct bfd_link_info *info; 4868 struct mips_elf_link_hash_table *htab; 4869 struct mips_got_entry *entry; 4870 4871 entry = (struct mips_got_entry *) *entryp; 4872 info = (struct bfd_link_info *) data; 4873 htab = mips_elf_hash_table (info); 4874 BFD_ASSERT (htab != NULL); 4875 4876 if (entry->abfd != NULL 4877 && entry->symndx == -1 4878 && entry->d.h->needs_lazy_stub) 4879 { 4880 entry->d.h->needs_lazy_stub = FALSE; 4881 htab->lazy_stub_count--; 4882 } 4883 4884 return 1; 4885 } 4886 4887 /* Return the offset of an input bfd IBFD's GOT from the beginning of 4888 the primary GOT. */ 4889 static bfd_vma 4890 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd) 4891 { 4892 if (!g->next) 4893 return 0; 4894 4895 g = mips_elf_bfd_got (ibfd, FALSE); 4896 if (! g) 4897 return 0; 4898 4899 BFD_ASSERT (g->next); 4900 4901 g = g->next; 4902 4903 return (g->local_gotno + g->global_gotno + g->tls_gotno) 4904 * MIPS_ELF_GOT_SIZE (abfd); 4905 } 4906 4907 /* Turn a single GOT that is too big for 16-bit addressing into 4908 a sequence of GOTs, each one 16-bit addressable. */ 4909 4910 static bfd_boolean 4911 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, 4912 asection *got, bfd_size_type pages) 4913 { 4914 struct mips_elf_link_hash_table *htab; 4915 struct mips_elf_got_per_bfd_arg got_per_bfd_arg; 4916 struct mips_elf_traverse_got_arg tga; 4917 struct mips_got_info *g, *gg; 4918 unsigned int assign, needed_relocs; 4919 bfd *dynobj, *ibfd; 4920 4921 dynobj = elf_hash_table (info)->dynobj; 4922 htab = mips_elf_hash_table (info); 4923 BFD_ASSERT (htab != NULL); 4924 4925 g = htab->got_info; 4926 4927 got_per_bfd_arg.obfd = abfd; 4928 got_per_bfd_arg.info = info; 4929 got_per_bfd_arg.current = NULL; 4930 got_per_bfd_arg.primary = NULL; 4931 got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info) 4932 / MIPS_ELF_GOT_SIZE (abfd)) 4933 - htab->reserved_gotno); 4934 got_per_bfd_arg.max_pages = pages; 4935 /* The number of globals that will be included in the primary GOT. 4936 See the calls to mips_elf_set_global_got_area below for more 4937 information. */ 4938 got_per_bfd_arg.global_count = g->global_gotno; 4939 4940 /* Try to merge the GOTs of input bfds together, as long as they 4941 don't seem to exceed the maximum GOT size, choosing one of them 4942 to be the primary GOT. */ 4943 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next) 4944 { 4945 gg = mips_elf_bfd_got (ibfd, FALSE); 4946 if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg)) 4947 return FALSE; 4948 } 4949 4950 /* If we do not find any suitable primary GOT, create an empty one. */ 4951 if (got_per_bfd_arg.primary == NULL) 4952 g->next = mips_elf_create_got_info (abfd); 4953 else 4954 g->next = got_per_bfd_arg.primary; 4955 g->next->next = got_per_bfd_arg.current; 4956 4957 /* GG is now the master GOT, and G is the primary GOT. */ 4958 gg = g; 4959 g = g->next; 4960 4961 /* Map the output bfd to the primary got. That's what we're going 4962 to use for bfds that use GOT16 or GOT_PAGE relocations that we 4963 didn't mark in check_relocs, and we want a quick way to find it. 4964 We can't just use gg->next because we're going to reverse the 4965 list. */ 4966 mips_elf_replace_bfd_got (abfd, g); 4967 4968 /* Every symbol that is referenced in a dynamic relocation must be 4969 present in the primary GOT, so arrange for them to appear after 4970 those that are actually referenced. */ 4971 gg->reloc_only_gotno = gg->global_gotno - g->global_gotno; 4972 g->global_gotno = gg->global_gotno; 4973 4974 tga.info = info; 4975 tga.value = GGA_RELOC_ONLY; 4976 htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga); 4977 tga.value = GGA_NORMAL; 4978 htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga); 4979 4980 /* Now go through the GOTs assigning them offset ranges. 4981 [assigned_low_gotno, local_gotno[ will be set to the range of local 4982 entries in each GOT. We can then compute the end of a GOT by 4983 adding local_gotno to global_gotno. We reverse the list and make 4984 it circular since then we'll be able to quickly compute the 4985 beginning of a GOT, by computing the end of its predecessor. To 4986 avoid special cases for the primary GOT, while still preserving 4987 assertions that are valid for both single- and multi-got links, 4988 we arrange for the main got struct to have the right number of 4989 global entries, but set its local_gotno such that the initial 4990 offset of the primary GOT is zero. Remember that the primary GOT 4991 will become the last item in the circular linked list, so it 4992 points back to the master GOT. */ 4993 gg->local_gotno = -g->global_gotno; 4994 gg->global_gotno = g->global_gotno; 4995 gg->tls_gotno = 0; 4996 assign = 0; 4997 gg->next = gg; 4998 4999 do 5000 { 5001 struct mips_got_info *gn; 5002 5003 assign += htab->reserved_gotno; 5004 g->assigned_low_gotno = assign; 5005 g->local_gotno += assign; 5006 g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno); 5007 g->assigned_high_gotno = g->local_gotno - 1; 5008 assign = g->local_gotno + g->global_gotno + g->tls_gotno; 5009 5010 /* Take g out of the direct list, and push it onto the reversed 5011 list that gg points to. g->next is guaranteed to be nonnull after 5012 this operation, as required by mips_elf_initialize_tls_index. */ 5013 gn = g->next; 5014 g->next = gg->next; 5015 gg->next = g; 5016 5017 /* Set up any TLS entries. We always place the TLS entries after 5018 all non-TLS entries. */ 5019 g->tls_assigned_gotno = g->local_gotno + g->global_gotno; 5020 tga.g = g; 5021 tga.value = MIPS_ELF_GOT_SIZE (abfd); 5022 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga); 5023 if (!tga.g) 5024 return FALSE; 5025 BFD_ASSERT (g->tls_assigned_gotno == assign); 5026 5027 /* Move onto the next GOT. It will be a secondary GOT if nonull. */ 5028 g = gn; 5029 5030 /* Forbid global symbols in every non-primary GOT from having 5031 lazy-binding stubs. */ 5032 if (g) 5033 htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info); 5034 } 5035 while (g); 5036 5037 got->size = assign * MIPS_ELF_GOT_SIZE (abfd); 5038 5039 needed_relocs = 0; 5040 for (g = gg->next; g && g->next != gg; g = g->next) 5041 { 5042 unsigned int save_assign; 5043 5044 /* Assign offsets to global GOT entries and count how many 5045 relocations they need. */ 5046 save_assign = g->assigned_low_gotno; 5047 g->assigned_low_gotno = g->local_gotno; 5048 tga.info = info; 5049 tga.value = MIPS_ELF_GOT_SIZE (abfd); 5050 tga.g = g; 5051 htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga); 5052 if (!tga.g) 5053 return FALSE; 5054 BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno); 5055 g->assigned_low_gotno = save_assign; 5056 5057 if (bfd_link_pic (info)) 5058 { 5059 g->relocs += g->local_gotno - g->assigned_low_gotno; 5060 BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno 5061 + g->next->global_gotno 5062 + g->next->tls_gotno 5063 + htab->reserved_gotno); 5064 } 5065 needed_relocs += g->relocs; 5066 } 5067 needed_relocs += g->relocs; 5068 5069 if (needed_relocs) 5070 mips_elf_allocate_dynamic_relocations (dynobj, info, 5071 needed_relocs); 5072 5073 return TRUE; 5074 } 5075 5076 5077 /* Returns the first relocation of type r_type found, beginning with 5078 RELOCATION. RELEND is one-past-the-end of the relocation table. */ 5079 5080 static const Elf_Internal_Rela * 5081 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type, 5082 const Elf_Internal_Rela *relocation, 5083 const Elf_Internal_Rela *relend) 5084 { 5085 unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info); 5086 5087 while (relocation < relend) 5088 { 5089 if (ELF_R_TYPE (abfd, relocation->r_info) == r_type 5090 && ELF_R_SYM (abfd, relocation->r_info) == r_symndx) 5091 return relocation; 5092 5093 ++relocation; 5094 } 5095 5096 /* We didn't find it. */ 5097 return NULL; 5098 } 5099 5100 /* Return whether an input relocation is against a local symbol. */ 5101 5102 static bfd_boolean 5103 mips_elf_local_relocation_p (bfd *input_bfd, 5104 const Elf_Internal_Rela *relocation, 5105 asection **local_sections) 5106 { 5107 unsigned long r_symndx; 5108 Elf_Internal_Shdr *symtab_hdr; 5109 size_t extsymoff; 5110 5111 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info); 5112 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; 5113 extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info; 5114 5115 if (r_symndx < extsymoff) 5116 return TRUE; 5117 if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL) 5118 return TRUE; 5119 5120 return FALSE; 5121 } 5122 5123 /* Sign-extend VALUE, which has the indicated number of BITS. */ 5124 5125 bfd_vma 5126 _bfd_mips_elf_sign_extend (bfd_vma value, int bits) 5127 { 5128 if (value & ((bfd_vma) 1 << (bits - 1))) 5129 /* VALUE is negative. */ 5130 value |= ((bfd_vma) - 1) << bits; 5131 5132 return value; 5133 } 5134 5135 /* Return non-zero if the indicated VALUE has overflowed the maximum 5136 range expressible by a signed number with the indicated number of 5137 BITS. */ 5138 5139 static bfd_boolean 5140 mips_elf_overflow_p (bfd_vma value, int bits) 5141 { 5142 bfd_signed_vma svalue = (bfd_signed_vma) value; 5143 5144 if (svalue > (1 << (bits - 1)) - 1) 5145 /* The value is too big. */ 5146 return TRUE; 5147 else if (svalue < -(1 << (bits - 1))) 5148 /* The value is too small. */ 5149 return TRUE; 5150 5151 /* All is well. */ 5152 return FALSE; 5153 } 5154 5155 /* Calculate the %high function. */ 5156 5157 static bfd_vma 5158 mips_elf_high (bfd_vma value) 5159 { 5160 return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff; 5161 } 5162 5163 /* Calculate the %higher function. */ 5164 5165 static bfd_vma 5166 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED) 5167 { 5168 #ifdef BFD64 5169 return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff; 5170 #else 5171 abort (); 5172 return MINUS_ONE; 5173 #endif 5174 } 5175 5176 /* Calculate the %highest function. */ 5177 5178 static bfd_vma 5179 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED) 5180 { 5181 #ifdef BFD64 5182 return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff; 5183 #else 5184 abort (); 5185 return MINUS_ONE; 5186 #endif 5187 } 5188 5189 /* Create the .compact_rel section. */ 5190 5191 static bfd_boolean 5192 mips_elf_create_compact_rel_section 5193 (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED) 5194 { 5195 flagword flags; 5196 register asection *s; 5197 5198 if (bfd_get_linker_section (abfd, ".compact_rel") == NULL) 5199 { 5200 flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED 5201 | SEC_READONLY); 5202 5203 s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags); 5204 if (s == NULL 5205 || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd))) 5206 return FALSE; 5207 5208 s->size = sizeof (Elf32_External_compact_rel); 5209 } 5210 5211 return TRUE; 5212 } 5213 5214 /* Create the .got section to hold the global offset table. */ 5215 5216 static bfd_boolean 5217 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) 5218 { 5219 flagword flags; 5220 register asection *s; 5221 struct elf_link_hash_entry *h; 5222 struct bfd_link_hash_entry *bh; 5223 struct mips_elf_link_hash_table *htab; 5224 5225 htab = mips_elf_hash_table (info); 5226 BFD_ASSERT (htab != NULL); 5227 5228 /* This function may be called more than once. */ 5229 if (htab->root.sgot) 5230 return TRUE; 5231 5232 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY 5233 | SEC_LINKER_CREATED); 5234 5235 /* We have to use an alignment of 2**4 here because this is hardcoded 5236 in the function stub generation and in the linker script. */ 5237 s = bfd_make_section_anyway_with_flags (abfd, ".got", flags); 5238 if (s == NULL 5239 || !bfd_set_section_alignment (s, 4)) 5240 return FALSE; 5241 htab->root.sgot = s; 5242 5243 /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the 5244 linker script because we don't want to define the symbol if we 5245 are not creating a global offset table. */ 5246 bh = NULL; 5247 if (! (_bfd_generic_link_add_one_symbol 5248 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s, 5249 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) 5250 return FALSE; 5251 5252 h = (struct elf_link_hash_entry *) bh; 5253 h->non_elf = 0; 5254 h->def_regular = 1; 5255 h->type = STT_OBJECT; 5256 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN; 5257 elf_hash_table (info)->hgot = h; 5258 5259 if (bfd_link_pic (info) 5260 && ! bfd_elf_link_record_dynamic_symbol (info, h)) 5261 return FALSE; 5262 5263 htab->got_info = mips_elf_create_got_info (abfd); 5264 mips_elf_section_data (s)->elf.this_hdr.sh_flags 5265 |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; 5266 5267 /* We also need a .got.plt section when generating PLTs. */ 5268 s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", 5269 SEC_ALLOC | SEC_LOAD 5270 | SEC_HAS_CONTENTS 5271 | SEC_IN_MEMORY 5272 | SEC_LINKER_CREATED); 5273 if (s == NULL) 5274 return FALSE; 5275 htab->root.sgotplt = s; 5276 5277 return TRUE; 5278 } 5279 5280 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or 5281 __GOTT_INDEX__ symbols. These symbols are only special for 5282 shared objects; they are not used in executables. */ 5283 5284 static bfd_boolean 5285 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h) 5286 { 5287 return (mips_elf_hash_table (info)->is_vxworks 5288 && bfd_link_pic (info) 5289 && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0 5290 || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0)); 5291 } 5292 5293 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might 5294 require an la25 stub. See also mips_elf_local_pic_function_p, 5295 which determines whether the destination function ever requires a 5296 stub. */ 5297 5298 static bfd_boolean 5299 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type, 5300 bfd_boolean target_is_16_bit_code_p) 5301 { 5302 /* We specifically ignore branches and jumps from EF_PIC objects, 5303 where the onus is on the compiler or programmer to perform any 5304 necessary initialization of $25. Sometimes such initialization 5305 is unnecessary; for example, -mno-shared functions do not use 5306 the incoming value of $25, and may therefore be called directly. */ 5307 if (PIC_OBJECT_P (input_bfd)) 5308 return FALSE; 5309 5310 switch (r_type) 5311 { 5312 case R_MIPS_26: 5313 case R_MIPS_PC16: 5314 case R_MIPS_PC21_S2: 5315 case R_MIPS_PC26_S2: 5316 case R_MICROMIPS_26_S1: 5317 case R_MICROMIPS_PC7_S1: 5318 case R_MICROMIPS_PC10_S1: 5319 case R_MICROMIPS_PC16_S1: 5320 case R_MICROMIPS_PC23_S2: 5321 return TRUE; 5322 5323 case R_MIPS16_26: 5324 return !target_is_16_bit_code_p; 5325 5326 default: 5327 return FALSE; 5328 } 5329 } 5330 5331 /* Obtain the field relocated by RELOCATION. */ 5332 5333 static bfd_vma 5334 mips_elf_obtain_contents (reloc_howto_type *howto, 5335 const Elf_Internal_Rela *relocation, 5336 bfd *input_bfd, bfd_byte *contents) 5337 { 5338 bfd_vma x = 0; 5339 bfd_byte *location = contents + relocation->r_offset; 5340 unsigned int size = bfd_get_reloc_size (howto); 5341 5342 /* Obtain the bytes. */ 5343 if (size != 0) 5344 x = bfd_get (8 * size, input_bfd, location); 5345 5346 return x; 5347 } 5348 5349 /* Store the field relocated by RELOCATION. */ 5350 5351 static void 5352 mips_elf_store_contents (reloc_howto_type *howto, 5353 const Elf_Internal_Rela *relocation, 5354 bfd *input_bfd, bfd_byte *contents, bfd_vma x) 5355 { 5356 bfd_byte *location = contents + relocation->r_offset; 5357 unsigned int size = bfd_get_reloc_size (howto); 5358 5359 /* Put the value into the output. */ 5360 if (size != 0) 5361 bfd_put (8 * size, input_bfd, x, location); 5362 } 5363 5364 /* Try to patch a load from GOT instruction in CONTENTS pointed to by 5365 RELOCATION described by HOWTO, with a move of 0 to the load target 5366 register, returning TRUE if that is successful and FALSE otherwise. 5367 If DOIT is FALSE, then only determine it patching is possible and 5368 return status without actually changing CONTENTS. 5369 */ 5370 5371 static bfd_boolean 5372 mips_elf_nullify_got_load (bfd *input_bfd, bfd_byte *contents, 5373 const Elf_Internal_Rela *relocation, 5374 reloc_howto_type *howto, bfd_boolean doit) 5375 { 5376 int r_type = ELF_R_TYPE (input_bfd, relocation->r_info); 5377 bfd_byte *location = contents + relocation->r_offset; 5378 bfd_boolean nullified = TRUE; 5379 bfd_vma x; 5380 5381 _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location); 5382 5383 /* Obtain the current value. */ 5384 x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents); 5385 5386 /* Note that in the unshuffled MIPS16 encoding RX is at bits [21:19] 5387 while RY is at bits [18:16] of the combined 32-bit instruction word. */ 5388 if (mips16_reloc_p (r_type) 5389 && (((x >> 22) & 0x3ff) == 0x3d3 /* LW */ 5390 || ((x >> 22) & 0x3ff) == 0x3c7)) /* LD */ 5391 x = (0x3cd << 22) | (x & (7 << 16)) << 3; /* LI */ 5392 else if (micromips_reloc_p (r_type) 5393 && ((x >> 26) & 0x37) == 0x37) /* LW/LD */ 5394 x = (0xc << 26) | (x & (0x1f << 21)); /* ADDIU */ 5395 else if (((x >> 26) & 0x3f) == 0x23 /* LW */ 5396 || ((x >> 26) & 0x3f) == 0x37) /* LD */ 5397 x = (0x9 << 26) | (x & (0x1f << 16)); /* ADDIU */ 5398 else 5399 nullified = FALSE; 5400 5401 /* Put the value into the output. */ 5402 if (doit && nullified) 5403 mips_elf_store_contents (howto, relocation, input_bfd, contents, x); 5404 5405 _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, FALSE, location); 5406 5407 return nullified; 5408 } 5409 5410 /* Calculate the value produced by the RELOCATION (which comes from 5411 the INPUT_BFD). The ADDEND is the addend to use for this 5412 RELOCATION; RELOCATION->R_ADDEND is ignored. 5413 5414 The result of the relocation calculation is stored in VALUEP. 5415 On exit, set *CROSS_MODE_JUMP_P to true if the relocation field 5416 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa. 5417 5418 This function returns bfd_reloc_continue if the caller need take no 5419 further action regarding this relocation, bfd_reloc_notsupported if 5420 something goes dramatically wrong, bfd_reloc_overflow if an 5421 overflow occurs, and bfd_reloc_ok to indicate success. */ 5422 5423 static bfd_reloc_status_type 5424 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, 5425 asection *input_section, bfd_byte *contents, 5426 struct bfd_link_info *info, 5427 const Elf_Internal_Rela *relocation, 5428 bfd_vma addend, reloc_howto_type *howto, 5429 Elf_Internal_Sym *local_syms, 5430 asection **local_sections, bfd_vma *valuep, 5431 const char **namep, 5432 bfd_boolean *cross_mode_jump_p, 5433 bfd_boolean save_addend) 5434 { 5435 /* The eventual value we will return. */ 5436 bfd_vma value; 5437 /* The address of the symbol against which the relocation is 5438 occurring. */ 5439 bfd_vma symbol = 0; 5440 /* The final GP value to be used for the relocatable, executable, or 5441 shared object file being produced. */ 5442 bfd_vma gp; 5443 /* The place (section offset or address) of the storage unit being 5444 relocated. */ 5445 bfd_vma p; 5446 /* The value of GP used to create the relocatable object. */ 5447 bfd_vma gp0; 5448 /* The offset into the global offset table at which the address of 5449 the relocation entry symbol, adjusted by the addend, resides 5450 during execution. */ 5451 bfd_vma g = MINUS_ONE; 5452 /* The section in which the symbol referenced by the relocation is 5453 located. */ 5454 asection *sec = NULL; 5455 struct mips_elf_link_hash_entry *h = NULL; 5456 /* TRUE if the symbol referred to by this relocation is a local 5457 symbol. */ 5458 bfd_boolean local_p, was_local_p; 5459 /* TRUE if the symbol referred to by this relocation is a section 5460 symbol. */ 5461 bfd_boolean section_p = FALSE; 5462 /* TRUE if the symbol referred to by this relocation is "_gp_disp". */ 5463 bfd_boolean gp_disp_p = FALSE; 5464 /* TRUE if the symbol referred to by this relocation is 5465 "__gnu_local_gp". */ 5466 bfd_boolean gnu_local_gp_p = FALSE; 5467 Elf_Internal_Shdr *symtab_hdr; 5468 size_t extsymoff; 5469 unsigned long r_symndx; 5470 int r_type; 5471 /* TRUE if overflow occurred during the calculation of the 5472 relocation value. */ 5473 bfd_boolean overflowed_p; 5474 /* TRUE if this relocation refers to a MIPS16 function. */ 5475 bfd_boolean target_is_16_bit_code_p = FALSE; 5476 bfd_boolean target_is_micromips_code_p = FALSE; 5477 struct mips_elf_link_hash_table *htab; 5478 bfd *dynobj; 5479 bfd_boolean resolved_to_zero; 5480 5481 dynobj = elf_hash_table (info)->dynobj; 5482 htab = mips_elf_hash_table (info); 5483 BFD_ASSERT (htab != NULL); 5484 5485 /* Parse the relocation. */ 5486 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info); 5487 r_type = ELF_R_TYPE (input_bfd, relocation->r_info); 5488 p = (input_section->output_section->vma 5489 + input_section->output_offset 5490 + relocation->r_offset); 5491 5492 /* Assume that there will be no overflow. */ 5493 overflowed_p = FALSE; 5494 5495 /* Figure out whether or not the symbol is local, and get the offset 5496 used in the array of hash table entries. */ 5497 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; 5498 local_p = mips_elf_local_relocation_p (input_bfd, relocation, 5499 local_sections); 5500 was_local_p = local_p; 5501 if (! elf_bad_symtab (input_bfd)) 5502 extsymoff = symtab_hdr->sh_info; 5503 else 5504 { 5505 /* The symbol table does not follow the rule that local symbols 5506 must come before globals. */ 5507 extsymoff = 0; 5508 } 5509 5510 /* Figure out the value of the symbol. */ 5511 if (local_p) 5512 { 5513 bfd_boolean micromips_p = MICROMIPS_P (abfd); 5514 Elf_Internal_Sym *sym; 5515 5516 sym = local_syms + r_symndx; 5517 sec = local_sections[r_symndx]; 5518 5519 section_p = ELF_ST_TYPE (sym->st_info) == STT_SECTION; 5520 5521 symbol = sec->output_section->vma + sec->output_offset; 5522 if (!section_p || (sec->flags & SEC_MERGE)) 5523 symbol += sym->st_value; 5524 if ((sec->flags & SEC_MERGE) && section_p) 5525 { 5526 addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend); 5527 addend -= symbol; 5528 addend += sec->output_section->vma + sec->output_offset; 5529 } 5530 5531 /* MIPS16/microMIPS text labels should be treated as odd. */ 5532 if (ELF_ST_IS_COMPRESSED (sym->st_other)) 5533 ++symbol; 5534 5535 /* Record the name of this symbol, for our caller. */ 5536 *namep = bfd_elf_string_from_elf_section (input_bfd, 5537 symtab_hdr->sh_link, 5538 sym->st_name); 5539 if (*namep == NULL || **namep == '\0') 5540 *namep = bfd_section_name (sec); 5541 5542 /* For relocations against a section symbol and ones against no 5543 symbol (absolute relocations) infer the ISA mode from the addend. */ 5544 if (section_p || r_symndx == STN_UNDEF) 5545 { 5546 target_is_16_bit_code_p = (addend & 1) && !micromips_p; 5547 target_is_micromips_code_p = (addend & 1) && micromips_p; 5548 } 5549 /* For relocations against an absolute symbol infer the ISA mode 5550 from the value of the symbol plus addend. */ 5551 else if (bfd_is_abs_section (sec)) 5552 { 5553 target_is_16_bit_code_p = ((symbol + addend) & 1) && !micromips_p; 5554 target_is_micromips_code_p = ((symbol + addend) & 1) && micromips_p; 5555 } 5556 /* Otherwise just use the regular symbol annotation available. */ 5557 else 5558 { 5559 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other); 5560 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other); 5561 } 5562 } 5563 else 5564 { 5565 /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ? */ 5566 5567 /* For global symbols we look up the symbol in the hash-table. */ 5568 h = ((struct mips_elf_link_hash_entry *) 5569 elf_sym_hashes (input_bfd) [r_symndx - extsymoff]); 5570 /* Find the real hash-table entry for this symbol. */ 5571 while (h->root.root.type == bfd_link_hash_indirect 5572 || h->root.root.type == bfd_link_hash_warning) 5573 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 5574 5575 /* Record the name of this symbol, for our caller. */ 5576 *namep = h->root.root.root.string; 5577 5578 /* See if this is the special _gp_disp symbol. Note that such a 5579 symbol must always be a global symbol. */ 5580 if (strcmp (*namep, "_gp_disp") == 0 5581 && ! NEWABI_P (input_bfd)) 5582 { 5583 /* Relocations against _gp_disp are permitted only with 5584 R_MIPS_HI16 and R_MIPS_LO16 relocations. */ 5585 if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type)) 5586 return bfd_reloc_notsupported; 5587 5588 gp_disp_p = TRUE; 5589 } 5590 /* See if this is the special _gp symbol. Note that such a 5591 symbol must always be a global symbol. */ 5592 else if (strcmp (*namep, "__gnu_local_gp") == 0) 5593 gnu_local_gp_p = TRUE; 5594 5595 5596 /* If this symbol is defined, calculate its address. Note that 5597 _gp_disp is a magic symbol, always implicitly defined by the 5598 linker, so it's inappropriate to check to see whether or not 5599 its defined. */ 5600 else if ((h->root.root.type == bfd_link_hash_defined 5601 || h->root.root.type == bfd_link_hash_defweak) 5602 && h->root.root.u.def.section) 5603 { 5604 sec = h->root.root.u.def.section; 5605 if (sec->output_section) 5606 symbol = (h->root.root.u.def.value 5607 + sec->output_section->vma 5608 + sec->output_offset); 5609 else 5610 symbol = h->root.root.u.def.value; 5611 } 5612 else if (h->root.root.type == bfd_link_hash_undefweak) 5613 /* We allow relocations against undefined weak symbols, giving 5614 it the value zero, so that you can undefined weak functions 5615 and check to see if they exist by looking at their 5616 addresses. */ 5617 symbol = 0; 5618 else if (info->unresolved_syms_in_objects == RM_IGNORE 5619 && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT) 5620 symbol = 0; 5621 else if (strcmp (*namep, SGI_COMPAT (input_bfd) 5622 ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0) 5623 { 5624 /* If this is a dynamic link, we should have created a 5625 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol 5626 in _bfd_mips_elf_create_dynamic_sections. 5627 Otherwise, we should define the symbol with a value of 0. 5628 FIXME: It should probably get into the symbol table 5629 somehow as well. */ 5630 BFD_ASSERT (! bfd_link_pic (info)); 5631 BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL); 5632 symbol = 0; 5633 } 5634 else if (ELF_MIPS_IS_OPTIONAL (h->root.other)) 5635 { 5636 /* This is an optional symbol - an Irix specific extension to the 5637 ELF spec. Ignore it for now. 5638 XXX - FIXME - there is more to the spec for OPTIONAL symbols 5639 than simply ignoring them, but we do not handle this for now. 5640 For information see the "64-bit ELF Object File Specification" 5641 which is available from here: 5642 http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */ 5643 symbol = 0; 5644 } 5645 else 5646 { 5647 bfd_boolean reject_undefined 5648 = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR 5649 || ELF_ST_VISIBILITY (h->root.other) != STV_DEFAULT); 5650 5651 (*info->callbacks->undefined_symbol) 5652 (info, h->root.root.root.string, input_bfd, 5653 input_section, relocation->r_offset, reject_undefined); 5654 5655 if (reject_undefined) 5656 return bfd_reloc_undefined; 5657 5658 symbol = 0; 5659 } 5660 5661 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other); 5662 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other); 5663 } 5664 5665 /* If this is a reference to a 16-bit function with a stub, we need 5666 to redirect the relocation to the stub unless: 5667 5668 (a) the relocation is for a MIPS16 JAL; 5669 5670 (b) the relocation is for a MIPS16 PIC call, and there are no 5671 non-MIPS16 uses of the GOT slot; or 5672 5673 (c) the section allows direct references to MIPS16 functions. */ 5674 if (r_type != R_MIPS16_26 5675 && !bfd_link_relocatable (info) 5676 && ((h != NULL 5677 && h->fn_stub != NULL 5678 && (r_type != R_MIPS16_CALL16 || h->need_fn_stub)) 5679 || (local_p 5680 && mips_elf_tdata (input_bfd)->local_stubs != NULL 5681 && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL)) 5682 && !section_allows_mips16_refs_p (input_section)) 5683 { 5684 /* This is a 32- or 64-bit call to a 16-bit function. We should 5685 have already noticed that we were going to need the 5686 stub. */ 5687 if (local_p) 5688 { 5689 sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx]; 5690 value = 0; 5691 } 5692 else 5693 { 5694 BFD_ASSERT (h->need_fn_stub); 5695 if (h->la25_stub) 5696 { 5697 /* If a LA25 header for the stub itself exists, point to the 5698 prepended LUI/ADDIU sequence. */ 5699 sec = h->la25_stub->stub_section; 5700 value = h->la25_stub->offset; 5701 } 5702 else 5703 { 5704 sec = h->fn_stub; 5705 value = 0; 5706 } 5707 } 5708 5709 symbol = sec->output_section->vma + sec->output_offset + value; 5710 /* The target is 16-bit, but the stub isn't. */ 5711 target_is_16_bit_code_p = FALSE; 5712 } 5713 /* If this is a MIPS16 call with a stub, that is made through the PLT or 5714 to a standard MIPS function, we need to redirect the call to the stub. 5715 Note that we specifically exclude R_MIPS16_CALL16 from this behavior; 5716 indirect calls should use an indirect stub instead. */ 5717 else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info) 5718 && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL)) 5719 || (local_p 5720 && mips_elf_tdata (input_bfd)->local_call_stubs != NULL 5721 && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL)) 5722 && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p)) 5723 { 5724 if (local_p) 5725 sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx]; 5726 else 5727 { 5728 /* If both call_stub and call_fp_stub are defined, we can figure 5729 out which one to use by checking which one appears in the input 5730 file. */ 5731 if (h->call_stub != NULL && h->call_fp_stub != NULL) 5732 { 5733 asection *o; 5734 5735 sec = NULL; 5736 for (o = input_bfd->sections; o != NULL; o = o->next) 5737 { 5738 if (CALL_FP_STUB_P (bfd_section_name (o))) 5739 { 5740 sec = h->call_fp_stub; 5741 break; 5742 } 5743 } 5744 if (sec == NULL) 5745 sec = h->call_stub; 5746 } 5747 else if (h->call_stub != NULL) 5748 sec = h->call_stub; 5749 else 5750 sec = h->call_fp_stub; 5751 } 5752 5753 BFD_ASSERT (sec->size > 0); 5754 symbol = sec->output_section->vma + sec->output_offset; 5755 } 5756 /* If this is a direct call to a PIC function, redirect to the 5757 non-PIC stub. */ 5758 else if (h != NULL && h->la25_stub 5759 && mips_elf_relocation_needs_la25_stub (input_bfd, r_type, 5760 target_is_16_bit_code_p)) 5761 { 5762 symbol = (h->la25_stub->stub_section->output_section->vma 5763 + h->la25_stub->stub_section->output_offset 5764 + h->la25_stub->offset); 5765 if (ELF_ST_IS_MICROMIPS (h->root.other)) 5766 symbol |= 1; 5767 } 5768 /* For direct MIPS16 and microMIPS calls make sure the compressed PLT 5769 entry is used if a standard PLT entry has also been made. In this 5770 case the symbol will have been set by mips_elf_set_plt_sym_value 5771 to point to the standard PLT entry, so redirect to the compressed 5772 one. */ 5773 else if ((mips16_branch_reloc_p (r_type) 5774 || micromips_branch_reloc_p (r_type)) 5775 && !bfd_link_relocatable (info) 5776 && h != NULL 5777 && h->use_plt_entry 5778 && h->root.plt.plist->comp_offset != MINUS_ONE 5779 && h->root.plt.plist->mips_offset != MINUS_ONE) 5780 { 5781 bfd_boolean micromips_p = MICROMIPS_P (abfd); 5782 5783 sec = htab->root.splt; 5784 symbol = (sec->output_section->vma 5785 + sec->output_offset 5786 + htab->plt_header_size 5787 + htab->plt_mips_offset 5788 + h->root.plt.plist->comp_offset 5789 + 1); 5790 5791 target_is_16_bit_code_p = !micromips_p; 5792 target_is_micromips_code_p = micromips_p; 5793 } 5794 5795 /* Make sure MIPS16 and microMIPS are not used together. */ 5796 if ((mips16_branch_reloc_p (r_type) && target_is_micromips_code_p) 5797 || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p)) 5798 { 5799 _bfd_error_handler 5800 (_("MIPS16 and microMIPS functions cannot call each other")); 5801 return bfd_reloc_notsupported; 5802 } 5803 5804 /* Calls from 16-bit code to 32-bit code and vice versa require the 5805 mode change. However, we can ignore calls to undefined weak symbols, 5806 which should never be executed at runtime. This exception is important 5807 because the assembly writer may have "known" that any definition of the 5808 symbol would be 16-bit code, and that direct jumps were therefore 5809 acceptable. */ 5810 *cross_mode_jump_p = (!bfd_link_relocatable (info) 5811 && !(h && h->root.root.type == bfd_link_hash_undefweak) 5812 && ((mips16_branch_reloc_p (r_type) 5813 && !target_is_16_bit_code_p) 5814 || (micromips_branch_reloc_p (r_type) 5815 && !target_is_micromips_code_p) 5816 || ((branch_reloc_p (r_type) 5817 || r_type == R_MIPS_JALR) 5818 && (target_is_16_bit_code_p 5819 || target_is_micromips_code_p)))); 5820 5821 resolved_to_zero = (h != NULL 5822 && UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->root)); 5823 5824 switch (r_type) 5825 { 5826 case R_MIPS16_CALL16: 5827 case R_MIPS16_GOT16: 5828 case R_MIPS_CALL16: 5829 case R_MIPS_GOT16: 5830 case R_MIPS_GOT_PAGE: 5831 case R_MIPS_GOT_DISP: 5832 case R_MIPS_GOT_LO16: 5833 case R_MIPS_CALL_LO16: 5834 case R_MICROMIPS_CALL16: 5835 case R_MICROMIPS_GOT16: 5836 case R_MICROMIPS_GOT_PAGE: 5837 case R_MICROMIPS_GOT_DISP: 5838 case R_MICROMIPS_GOT_LO16: 5839 case R_MICROMIPS_CALL_LO16: 5840 if (resolved_to_zero 5841 && !bfd_link_relocatable (info) 5842 && mips_elf_nullify_got_load (input_bfd, contents, 5843 relocation, howto, TRUE)) 5844 return bfd_reloc_continue; 5845 5846 /* Fall through. */ 5847 case R_MIPS_GOT_HI16: 5848 case R_MIPS_CALL_HI16: 5849 case R_MICROMIPS_GOT_HI16: 5850 case R_MICROMIPS_CALL_HI16: 5851 if (resolved_to_zero 5852 && htab->use_absolute_zero 5853 && bfd_link_pic (info)) 5854 { 5855 /* Redirect to the special `__gnu_absolute_zero' symbol. */ 5856 h = mips_elf_link_hash_lookup (htab, "__gnu_absolute_zero", 5857 FALSE, FALSE, FALSE); 5858 BFD_ASSERT (h != NULL); 5859 } 5860 break; 5861 } 5862 5863 local_p = (h == NULL || mips_use_local_got_p (info, h)); 5864 5865 gp0 = _bfd_get_gp_value (input_bfd); 5866 gp = _bfd_get_gp_value (abfd); 5867 if (htab->got_info) 5868 gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd); 5869 5870 if (gnu_local_gp_p) 5871 symbol = gp; 5872 5873 /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent 5874 to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP. The addend is applied by the 5875 corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST. */ 5876 if (got_page_reloc_p (r_type) && !local_p) 5877 { 5878 r_type = (micromips_reloc_p (r_type) 5879 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP); 5880 addend = 0; 5881 } 5882 5883 /* If we haven't already determined the GOT offset, and we're going 5884 to need it, get it now. */ 5885 switch (r_type) 5886 { 5887 case R_MIPS16_CALL16: 5888 case R_MIPS16_GOT16: 5889 case R_MIPS_CALL16: 5890 case R_MIPS_GOT16: 5891 case R_MIPS_GOT_DISP: 5892 case R_MIPS_GOT_HI16: 5893 case R_MIPS_CALL_HI16: 5894 case R_MIPS_GOT_LO16: 5895 case R_MIPS_CALL_LO16: 5896 case R_MICROMIPS_CALL16: 5897 case R_MICROMIPS_GOT16: 5898 case R_MICROMIPS_GOT_DISP: 5899 case R_MICROMIPS_GOT_HI16: 5900 case R_MICROMIPS_CALL_HI16: 5901 case R_MICROMIPS_GOT_LO16: 5902 case R_MICROMIPS_CALL_LO16: 5903 case R_MIPS_TLS_GD: 5904 case R_MIPS_TLS_GOTTPREL: 5905 case R_MIPS_TLS_LDM: 5906 case R_MIPS16_TLS_GD: 5907 case R_MIPS16_TLS_GOTTPREL: 5908 case R_MIPS16_TLS_LDM: 5909 case R_MICROMIPS_TLS_GD: 5910 case R_MICROMIPS_TLS_GOTTPREL: 5911 case R_MICROMIPS_TLS_LDM: 5912 /* Find the index into the GOT where this value is located. */ 5913 if (tls_ldm_reloc_p (r_type)) 5914 { 5915 g = mips_elf_local_got_index (abfd, input_bfd, info, 5916 0, 0, NULL, r_type); 5917 if (g == MINUS_ONE) 5918 return bfd_reloc_outofrange; 5919 } 5920 else if (!local_p) 5921 { 5922 /* On VxWorks, CALL relocations should refer to the .got.plt 5923 entry, which is initialized to point at the PLT stub. */ 5924 if (htab->is_vxworks 5925 && (call_hi16_reloc_p (r_type) 5926 || call_lo16_reloc_p (r_type) 5927 || call16_reloc_p (r_type))) 5928 { 5929 BFD_ASSERT (addend == 0); 5930 BFD_ASSERT (h->root.needs_plt); 5931 g = mips_elf_gotplt_index (info, &h->root); 5932 } 5933 else 5934 { 5935 BFD_ASSERT (addend == 0); 5936 g = mips_elf_global_got_index (abfd, info, input_bfd, 5937 &h->root, r_type); 5938 if (!TLS_RELOC_P (r_type) 5939 && !elf_hash_table (info)->dynamic_sections_created) 5940 /* This is a static link. We must initialize the GOT entry. */ 5941 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->root.sgot->contents + g); 5942 } 5943 } 5944 else if (!htab->is_vxworks 5945 && (call16_reloc_p (r_type) || got16_reloc_p (r_type))) 5946 /* The calculation below does not involve "g". */ 5947 break; 5948 else 5949 { 5950 g = mips_elf_local_got_index (abfd, input_bfd, info, 5951 symbol + addend, r_symndx, h, r_type); 5952 if (g == MINUS_ONE) 5953 return bfd_reloc_outofrange; 5954 } 5955 5956 /* Convert GOT indices to actual offsets. */ 5957 g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g); 5958 break; 5959 } 5960 5961 /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__ 5962 symbols are resolved by the loader. Add them to .rela.dyn. */ 5963 if (h != NULL && is_gott_symbol (info, &h->root)) 5964 { 5965 Elf_Internal_Rela outrel; 5966 bfd_byte *loc; 5967 asection *s; 5968 5969 s = mips_elf_rel_dyn_section (info, FALSE); 5970 loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela); 5971 5972 outrel.r_offset = (input_section->output_section->vma 5973 + input_section->output_offset 5974 + relocation->r_offset); 5975 outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type); 5976 outrel.r_addend = addend; 5977 bfd_elf32_swap_reloca_out (abfd, &outrel, loc); 5978 5979 /* If we've written this relocation for a readonly section, 5980 we need to set DF_TEXTREL again, so that we do not delete the 5981 DT_TEXTREL tag. */ 5982 if (MIPS_ELF_READONLY_SECTION (input_section)) 5983 info->flags |= DF_TEXTREL; 5984 5985 *valuep = 0; 5986 return bfd_reloc_ok; 5987 } 5988 5989 /* Figure out what kind of relocation is being performed. */ 5990 switch (r_type) 5991 { 5992 case R_MIPS_NONE: 5993 return bfd_reloc_continue; 5994 5995 case R_MIPS_16: 5996 if (howto->partial_inplace) 5997 addend = _bfd_mips_elf_sign_extend (addend, 16); 5998 value = symbol + addend; 5999 overflowed_p = mips_elf_overflow_p (value, 16); 6000 break; 6001 6002 case R_MIPS_32: 6003 case R_MIPS_REL32: 6004 case R_MIPS_64: 6005 if ((bfd_link_pic (info) 6006 || (htab->root.dynamic_sections_created 6007 && h != NULL 6008 && h->root.def_dynamic 6009 && !h->root.def_regular 6010 && !h->has_static_relocs)) 6011 && r_symndx != STN_UNDEF 6012 && (h == NULL 6013 || h->root.root.type != bfd_link_hash_undefweak 6014 || (ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT 6015 && !resolved_to_zero)) 6016 && (input_section->flags & SEC_ALLOC) != 0) 6017 { 6018 /* If we're creating a shared library, then we can't know 6019 where the symbol will end up. So, we create a relocation 6020 record in the output, and leave the job up to the dynamic 6021 linker. We must do the same for executable references to 6022 shared library symbols, unless we've decided to use copy 6023 relocs or PLTs instead. */ 6024 value = addend; 6025 if (!mips_elf_create_dynamic_relocation (abfd, 6026 info, 6027 relocation, 6028 h, 6029 sec, 6030 symbol, 6031 &value, 6032 input_section)) 6033 return bfd_reloc_undefined; 6034 } 6035 else 6036 { 6037 if (r_type != R_MIPS_REL32) 6038 value = symbol + addend; 6039 else 6040 value = addend; 6041 } 6042 value &= howto->dst_mask; 6043 break; 6044 6045 case R_MIPS_PC32: 6046 value = symbol + addend - p; 6047 value &= howto->dst_mask; 6048 break; 6049 6050 case R_MIPS16_26: 6051 /* The calculation for R_MIPS16_26 is just the same as for an 6052 R_MIPS_26. It's only the storage of the relocated field into 6053 the output file that's different. That's handled in 6054 mips_elf_perform_relocation. So, we just fall through to the 6055 R_MIPS_26 case here. */ 6056 case R_MIPS_26: 6057 case R_MICROMIPS_26_S1: 6058 { 6059 unsigned int shift; 6060 6061 /* Shift is 2, unusually, for microMIPS JALX. */ 6062 shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2; 6063 6064 if (howto->partial_inplace && !section_p) 6065 value = _bfd_mips_elf_sign_extend (addend, 26 + shift); 6066 else 6067 value = addend; 6068 value += symbol; 6069 6070 /* Make sure the target of a jump is suitably aligned. Bit 0 must 6071 be the correct ISA mode selector except for weak undefined 6072 symbols. */ 6073 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6074 && (*cross_mode_jump_p 6075 ? (value & 3) != (r_type == R_MIPS_26) 6076 : (value & ((1 << shift) - 1)) != (r_type != R_MIPS_26))) 6077 return bfd_reloc_outofrange; 6078 6079 value >>= shift; 6080 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6081 overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift)); 6082 value &= howto->dst_mask; 6083 } 6084 break; 6085 6086 case R_MIPS_TLS_DTPREL_HI16: 6087 case R_MIPS16_TLS_DTPREL_HI16: 6088 case R_MICROMIPS_TLS_DTPREL_HI16: 6089 value = (mips_elf_high (addend + symbol - dtprel_base (info)) 6090 & howto->dst_mask); 6091 break; 6092 6093 case R_MIPS_TLS_DTPREL_LO16: 6094 case R_MIPS_TLS_DTPREL32: 6095 case R_MIPS_TLS_DTPREL64: 6096 case R_MIPS16_TLS_DTPREL_LO16: 6097 case R_MICROMIPS_TLS_DTPREL_LO16: 6098 value = (symbol + addend - dtprel_base (info)) & howto->dst_mask; 6099 break; 6100 6101 case R_MIPS_TLS_TPREL_HI16: 6102 case R_MIPS16_TLS_TPREL_HI16: 6103 case R_MICROMIPS_TLS_TPREL_HI16: 6104 value = (mips_elf_high (addend + symbol - tprel_base (info)) 6105 & howto->dst_mask); 6106 break; 6107 6108 case R_MIPS_TLS_TPREL_LO16: 6109 case R_MIPS_TLS_TPREL32: 6110 case R_MIPS_TLS_TPREL64: 6111 case R_MIPS16_TLS_TPREL_LO16: 6112 case R_MICROMIPS_TLS_TPREL_LO16: 6113 value = (symbol + addend - tprel_base (info)) & howto->dst_mask; 6114 break; 6115 6116 case R_MIPS_HI16: 6117 case R_MIPS16_HI16: 6118 case R_MICROMIPS_HI16: 6119 if (!gp_disp_p) 6120 { 6121 value = mips_elf_high (addend + symbol); 6122 value &= howto->dst_mask; 6123 } 6124 else 6125 { 6126 /* For MIPS16 ABI code we generate this sequence 6127 0: li $v0,%hi(_gp_disp) 6128 4: addiupc $v1,%lo(_gp_disp) 6129 8: sll $v0,16 6130 12: addu $v0,$v1 6131 14: move $gp,$v0 6132 So the offsets of hi and lo relocs are the same, but the 6133 base $pc is that used by the ADDIUPC instruction at $t9 + 4. 6134 ADDIUPC clears the low two bits of the instruction address, 6135 so the base is ($t9 + 4) & ~3. */ 6136 if (r_type == R_MIPS16_HI16) 6137 value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3)); 6138 /* The microMIPS .cpload sequence uses the same assembly 6139 instructions as the traditional psABI version, but the 6140 incoming $t9 has the low bit set. */ 6141 else if (r_type == R_MICROMIPS_HI16) 6142 value = mips_elf_high (addend + gp - p - 1); 6143 else 6144 value = mips_elf_high (addend + gp - p); 6145 } 6146 break; 6147 6148 case R_MIPS_LO16: 6149 case R_MIPS16_LO16: 6150 case R_MICROMIPS_LO16: 6151 case R_MICROMIPS_HI0_LO16: 6152 if (!gp_disp_p) 6153 value = (symbol + addend) & howto->dst_mask; 6154 else 6155 { 6156 /* See the comment for R_MIPS16_HI16 above for the reason 6157 for this conditional. */ 6158 if (r_type == R_MIPS16_LO16) 6159 value = addend + gp - (p & ~(bfd_vma) 0x3); 6160 else if (r_type == R_MICROMIPS_LO16 6161 || r_type == R_MICROMIPS_HI0_LO16) 6162 value = addend + gp - p + 3; 6163 else 6164 value = addend + gp - p + 4; 6165 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation 6166 for overflow. But, on, say, IRIX5, relocations against 6167 _gp_disp are normally generated from the .cpload 6168 pseudo-op. It generates code that normally looks like 6169 this: 6170 6171 lui $gp,%hi(_gp_disp) 6172 addiu $gp,$gp,%lo(_gp_disp) 6173 addu $gp,$gp,$t9 6174 6175 Here $t9 holds the address of the function being called, 6176 as required by the MIPS ELF ABI. The R_MIPS_LO16 6177 relocation can easily overflow in this situation, but the 6178 R_MIPS_HI16 relocation will handle the overflow. 6179 Therefore, we consider this a bug in the MIPS ABI, and do 6180 not check for overflow here. */ 6181 } 6182 break; 6183 6184 case R_MIPS_LITERAL: 6185 case R_MICROMIPS_LITERAL: 6186 /* Because we don't merge literal sections, we can handle this 6187 just like R_MIPS_GPREL16. In the long run, we should merge 6188 shared literals, and then we will need to additional work 6189 here. */ 6190 6191 /* Fall through. */ 6192 6193 case R_MIPS16_GPREL: 6194 /* The R_MIPS16_GPREL performs the same calculation as 6195 R_MIPS_GPREL16, but stores the relocated bits in a different 6196 order. We don't need to do anything special here; the 6197 differences are handled in mips_elf_perform_relocation. */ 6198 case R_MIPS_GPREL16: 6199 case R_MICROMIPS_GPREL7_S2: 6200 case R_MICROMIPS_GPREL16: 6201 /* Only sign-extend the addend if it was extracted from the 6202 instruction. If the addend was separate, leave it alone, 6203 otherwise we may lose significant bits. */ 6204 if (howto->partial_inplace) 6205 addend = _bfd_mips_elf_sign_extend (addend, 16); 6206 value = symbol + addend - gp; 6207 /* If the symbol was local, any earlier relocatable links will 6208 have adjusted its addend with the gp offset, so compensate 6209 for that now. Don't do it for symbols forced local in this 6210 link, though, since they won't have had the gp offset applied 6211 to them before. */ 6212 if (was_local_p) 6213 value += gp0; 6214 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6215 overflowed_p = mips_elf_overflow_p (value, 16); 6216 break; 6217 6218 case R_MIPS16_GOT16: 6219 case R_MIPS16_CALL16: 6220 case R_MIPS_GOT16: 6221 case R_MIPS_CALL16: 6222 case R_MICROMIPS_GOT16: 6223 case R_MICROMIPS_CALL16: 6224 /* VxWorks does not have separate local and global semantics for 6225 R_MIPS*_GOT16; every relocation evaluates to "G". */ 6226 if (!htab->is_vxworks && local_p) 6227 { 6228 value = mips_elf_got16_entry (abfd, input_bfd, info, 6229 symbol + addend, !was_local_p); 6230 if (value == MINUS_ONE) 6231 return bfd_reloc_outofrange; 6232 value 6233 = mips_elf_got_offset_from_index (info, abfd, input_bfd, value); 6234 overflowed_p = mips_elf_overflow_p (value, 16); 6235 break; 6236 } 6237 6238 /* Fall through. */ 6239 6240 case R_MIPS_TLS_GD: 6241 case R_MIPS_TLS_GOTTPREL: 6242 case R_MIPS_TLS_LDM: 6243 case R_MIPS_GOT_DISP: 6244 case R_MIPS16_TLS_GD: 6245 case R_MIPS16_TLS_GOTTPREL: 6246 case R_MIPS16_TLS_LDM: 6247 case R_MICROMIPS_TLS_GD: 6248 case R_MICROMIPS_TLS_GOTTPREL: 6249 case R_MICROMIPS_TLS_LDM: 6250 case R_MICROMIPS_GOT_DISP: 6251 value = g; 6252 overflowed_p = mips_elf_overflow_p (value, 16); 6253 break; 6254 6255 case R_MIPS_GPREL32: 6256 value = (addend + symbol + gp0 - gp); 6257 if (!save_addend) 6258 value &= howto->dst_mask; 6259 break; 6260 6261 case R_MIPS_PC16: 6262 case R_MIPS_GNU_REL16_S2: 6263 if (howto->partial_inplace) 6264 addend = _bfd_mips_elf_sign_extend (addend, 18); 6265 6266 /* No need to exclude weak undefined symbols here as they resolve 6267 to 0 and never set `*cross_mode_jump_p', so this alignment check 6268 will never trigger for them. */ 6269 if (*cross_mode_jump_p 6270 ? ((symbol + addend) & 3) != 1 6271 : ((symbol + addend) & 3) != 0) 6272 return bfd_reloc_outofrange; 6273 6274 value = symbol + addend - p; 6275 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6276 overflowed_p = mips_elf_overflow_p (value, 18); 6277 value >>= howto->rightshift; 6278 value &= howto->dst_mask; 6279 break; 6280 6281 case R_MIPS16_PC16_S1: 6282 if (howto->partial_inplace) 6283 addend = _bfd_mips_elf_sign_extend (addend, 17); 6284 6285 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6286 && (*cross_mode_jump_p 6287 ? ((symbol + addend) & 3) != 0 6288 : ((symbol + addend) & 1) == 0)) 6289 return bfd_reloc_outofrange; 6290 6291 value = symbol + addend - p; 6292 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6293 overflowed_p = mips_elf_overflow_p (value, 17); 6294 value >>= howto->rightshift; 6295 value &= howto->dst_mask; 6296 break; 6297 6298 case R_MIPS_PC21_S2: 6299 if (howto->partial_inplace) 6300 addend = _bfd_mips_elf_sign_extend (addend, 23); 6301 6302 if ((symbol + addend) & 3) 6303 return bfd_reloc_outofrange; 6304 6305 value = symbol + addend - p; 6306 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6307 overflowed_p = mips_elf_overflow_p (value, 23); 6308 value >>= howto->rightshift; 6309 value &= howto->dst_mask; 6310 break; 6311 6312 case R_MIPS_PC26_S2: 6313 if (howto->partial_inplace) 6314 addend = _bfd_mips_elf_sign_extend (addend, 28); 6315 6316 if ((symbol + addend) & 3) 6317 return bfd_reloc_outofrange; 6318 6319 value = symbol + addend - p; 6320 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6321 overflowed_p = mips_elf_overflow_p (value, 28); 6322 value >>= howto->rightshift; 6323 value &= howto->dst_mask; 6324 break; 6325 6326 case R_MIPS_PC18_S3: 6327 if (howto->partial_inplace) 6328 addend = _bfd_mips_elf_sign_extend (addend, 21); 6329 6330 if ((symbol + addend) & 7) 6331 return bfd_reloc_outofrange; 6332 6333 value = symbol + addend - ((p | 7) ^ 7); 6334 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6335 overflowed_p = mips_elf_overflow_p (value, 21); 6336 value >>= howto->rightshift; 6337 value &= howto->dst_mask; 6338 break; 6339 6340 case R_MIPS_PC19_S2: 6341 if (howto->partial_inplace) 6342 addend = _bfd_mips_elf_sign_extend (addend, 21); 6343 6344 if ((symbol + addend) & 3) 6345 return bfd_reloc_outofrange; 6346 6347 value = symbol + addend - p; 6348 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6349 overflowed_p = mips_elf_overflow_p (value, 21); 6350 value >>= howto->rightshift; 6351 value &= howto->dst_mask; 6352 break; 6353 6354 case R_MIPS_PCHI16: 6355 value = mips_elf_high (symbol + addend - p); 6356 value &= howto->dst_mask; 6357 break; 6358 6359 case R_MIPS_PCLO16: 6360 if (howto->partial_inplace) 6361 addend = _bfd_mips_elf_sign_extend (addend, 16); 6362 value = symbol + addend - p; 6363 value &= howto->dst_mask; 6364 break; 6365 6366 case R_MICROMIPS_PC7_S1: 6367 if (howto->partial_inplace) 6368 addend = _bfd_mips_elf_sign_extend (addend, 8); 6369 6370 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6371 && (*cross_mode_jump_p 6372 ? ((symbol + addend + 2) & 3) != 0 6373 : ((symbol + addend + 2) & 1) == 0)) 6374 return bfd_reloc_outofrange; 6375 6376 value = symbol + addend - p; 6377 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6378 overflowed_p = mips_elf_overflow_p (value, 8); 6379 value >>= howto->rightshift; 6380 value &= howto->dst_mask; 6381 break; 6382 6383 case R_MICROMIPS_PC10_S1: 6384 if (howto->partial_inplace) 6385 addend = _bfd_mips_elf_sign_extend (addend, 11); 6386 6387 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6388 && (*cross_mode_jump_p 6389 ? ((symbol + addend + 2) & 3) != 0 6390 : ((symbol + addend + 2) & 1) == 0)) 6391 return bfd_reloc_outofrange; 6392 6393 value = symbol + addend - p; 6394 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6395 overflowed_p = mips_elf_overflow_p (value, 11); 6396 value >>= howto->rightshift; 6397 value &= howto->dst_mask; 6398 break; 6399 6400 case R_MICROMIPS_PC16_S1: 6401 if (howto->partial_inplace) 6402 addend = _bfd_mips_elf_sign_extend (addend, 17); 6403 6404 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6405 && (*cross_mode_jump_p 6406 ? ((symbol + addend) & 3) != 0 6407 : ((symbol + addend) & 1) == 0)) 6408 return bfd_reloc_outofrange; 6409 6410 value = symbol + addend - p; 6411 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6412 overflowed_p = mips_elf_overflow_p (value, 17); 6413 value >>= howto->rightshift; 6414 value &= howto->dst_mask; 6415 break; 6416 6417 case R_MICROMIPS_PC23_S2: 6418 if (howto->partial_inplace) 6419 addend = _bfd_mips_elf_sign_extend (addend, 25); 6420 value = symbol + addend - ((p | 3) ^ 3); 6421 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) 6422 overflowed_p = mips_elf_overflow_p (value, 25); 6423 value >>= howto->rightshift; 6424 value &= howto->dst_mask; 6425 break; 6426 6427 case R_MIPS_GOT_HI16: 6428 case R_MIPS_CALL_HI16: 6429 case R_MICROMIPS_GOT_HI16: 6430 case R_MICROMIPS_CALL_HI16: 6431 /* We're allowed to handle these two relocations identically. 6432 The dynamic linker is allowed to handle the CALL relocations 6433 differently by creating a lazy evaluation stub. */ 6434 value = g; 6435 value = mips_elf_high (value); 6436 value &= howto->dst_mask; 6437 break; 6438 6439 case R_MIPS_GOT_LO16: 6440 case R_MIPS_CALL_LO16: 6441 case R_MICROMIPS_GOT_LO16: 6442 case R_MICROMIPS_CALL_LO16: 6443 value = g & howto->dst_mask; 6444 break; 6445 6446 case R_MIPS_GOT_PAGE: 6447 case R_MICROMIPS_GOT_PAGE: 6448 value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL); 6449 if (value == MINUS_ONE) 6450 return bfd_reloc_outofrange; 6451 value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value); 6452 overflowed_p = mips_elf_overflow_p (value, 16); 6453 break; 6454 6455 case R_MIPS_GOT_OFST: 6456 case R_MICROMIPS_GOT_OFST: 6457 if (local_p) 6458 mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value); 6459 else 6460 value = addend; 6461 overflowed_p = mips_elf_overflow_p (value, 16); 6462 break; 6463 6464 case R_MIPS_SUB: 6465 case R_MICROMIPS_SUB: 6466 value = symbol - addend; 6467 value &= howto->dst_mask; 6468 break; 6469 6470 case R_MIPS_HIGHER: 6471 case R_MICROMIPS_HIGHER: 6472 value = mips_elf_higher (addend + symbol); 6473 value &= howto->dst_mask; 6474 break; 6475 6476 case R_MIPS_HIGHEST: 6477 case R_MICROMIPS_HIGHEST: 6478 value = mips_elf_highest (addend + symbol); 6479 value &= howto->dst_mask; 6480 break; 6481 6482 case R_MIPS_SCN_DISP: 6483 case R_MICROMIPS_SCN_DISP: 6484 value = symbol + addend - sec->output_offset; 6485 value &= howto->dst_mask; 6486 break; 6487 6488 case R_MIPS_JALR: 6489 case R_MICROMIPS_JALR: 6490 /* This relocation is only a hint. In some cases, we optimize 6491 it into a bal instruction. But we don't try to optimize 6492 when the symbol does not resolve locally. */ 6493 if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root)) 6494 return bfd_reloc_continue; 6495 /* We can't optimize cross-mode jumps either. */ 6496 if (*cross_mode_jump_p) 6497 return bfd_reloc_continue; 6498 value = symbol + addend; 6499 /* Neither we can non-instruction-aligned targets. */ 6500 if (r_type == R_MIPS_JALR ? (value & 3) != 0 : (value & 1) == 0) 6501 return bfd_reloc_continue; 6502 break; 6503 6504 case R_MIPS_PJUMP: 6505 case R_MIPS_GNU_VTINHERIT: 6506 case R_MIPS_GNU_VTENTRY: 6507 /* We don't do anything with these at present. */ 6508 return bfd_reloc_continue; 6509 6510 default: 6511 /* An unrecognized relocation type. */ 6512 return bfd_reloc_notsupported; 6513 } 6514 6515 /* Store the VALUE for our caller. */ 6516 *valuep = value; 6517 return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok; 6518 } 6519 6520 /* It has been determined that the result of the RELOCATION is the 6521 VALUE. Use HOWTO to place VALUE into the output file at the 6522 appropriate position. The SECTION is the section to which the 6523 relocation applies. 6524 CROSS_MODE_JUMP_P is true if the relocation field 6525 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa. 6526 6527 Returns FALSE if anything goes wrong. */ 6528 6529 static bfd_boolean 6530 mips_elf_perform_relocation (struct bfd_link_info *info, 6531 reloc_howto_type *howto, 6532 const Elf_Internal_Rela *relocation, 6533 bfd_vma value, bfd *input_bfd, 6534 asection *input_section, bfd_byte *contents, 6535 bfd_boolean cross_mode_jump_p) 6536 { 6537 bfd_vma x; 6538 bfd_byte *location; 6539 int r_type = ELF_R_TYPE (input_bfd, relocation->r_info); 6540 6541 /* Figure out where the relocation is occurring. */ 6542 location = contents + relocation->r_offset; 6543 6544 _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location); 6545 6546 /* Obtain the current value. */ 6547 x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents); 6548 6549 /* Clear the field we are setting. */ 6550 x &= ~howto->dst_mask; 6551 6552 /* Set the field. */ 6553 x |= (value & howto->dst_mask); 6554 6555 /* Detect incorrect JALX usage. If required, turn JAL or BAL into JALX. */ 6556 if (!cross_mode_jump_p && jal_reloc_p (r_type)) 6557 { 6558 bfd_vma opcode = x >> 26; 6559 6560 if (r_type == R_MIPS16_26 ? opcode == 0x7 6561 : r_type == R_MICROMIPS_26_S1 ? opcode == 0x3c 6562 : opcode == 0x1d) 6563 { 6564 info->callbacks->einfo 6565 (_("%X%H: unsupported JALX to the same ISA mode\n"), 6566 input_bfd, input_section, relocation->r_offset); 6567 return TRUE; 6568 } 6569 } 6570 if (cross_mode_jump_p && jal_reloc_p (r_type)) 6571 { 6572 bfd_boolean ok; 6573 bfd_vma opcode = x >> 26; 6574 bfd_vma jalx_opcode; 6575 6576 /* Check to see if the opcode is already JAL or JALX. */ 6577 if (r_type == R_MIPS16_26) 6578 { 6579 ok = ((opcode == 0x6) || (opcode == 0x7)); 6580 jalx_opcode = 0x7; 6581 } 6582 else if (r_type == R_MICROMIPS_26_S1) 6583 { 6584 ok = ((opcode == 0x3d) || (opcode == 0x3c)); 6585 jalx_opcode = 0x3c; 6586 } 6587 else 6588 { 6589 ok = ((opcode == 0x3) || (opcode == 0x1d)); 6590 jalx_opcode = 0x1d; 6591 } 6592 6593 /* If the opcode is not JAL or JALX, there's a problem. We cannot 6594 convert J or JALS to JALX. */ 6595 if (!ok) 6596 { 6597 info->callbacks->einfo 6598 (_("%X%H: unsupported jump between ISA modes; " 6599 "consider recompiling with interlinking enabled\n"), 6600 input_bfd, input_section, relocation->r_offset); 6601 return TRUE; 6602 } 6603 6604 /* Make this the JALX opcode. */ 6605 x = (x & ~(0x3fu << 26)) | (jalx_opcode << 26); 6606 } 6607 else if (cross_mode_jump_p && b_reloc_p (r_type)) 6608 { 6609 bfd_boolean ok = FALSE; 6610 bfd_vma opcode = x >> 16; 6611 bfd_vma jalx_opcode = 0; 6612 bfd_vma sign_bit = 0; 6613 bfd_vma addr; 6614 bfd_vma dest; 6615 6616 if (r_type == R_MICROMIPS_PC16_S1) 6617 { 6618 ok = opcode == 0x4060; 6619 jalx_opcode = 0x3c; 6620 sign_bit = 0x10000; 6621 value <<= 1; 6622 } 6623 else if (r_type == R_MIPS_PC16 || r_type == R_MIPS_GNU_REL16_S2) 6624 { 6625 ok = opcode == 0x411; 6626 jalx_opcode = 0x1d; 6627 sign_bit = 0x20000; 6628 value <<= 2; 6629 } 6630 6631 if (ok && !bfd_link_pic (info)) 6632 { 6633 addr = (input_section->output_section->vma 6634 + input_section->output_offset 6635 + relocation->r_offset 6636 + 4); 6637 dest = (addr 6638 + (((value & ((sign_bit << 1) - 1)) ^ sign_bit) - sign_bit)); 6639 6640 if ((addr >> 28) << 28 != (dest >> 28) << 28) 6641 { 6642 info->callbacks->einfo 6643 (_("%X%H: cannot convert branch between ISA modes " 6644 "to JALX: relocation out of range\n"), 6645 input_bfd, input_section, relocation->r_offset); 6646 return TRUE; 6647 } 6648 6649 /* Make this the JALX opcode. */ 6650 x = ((dest >> 2) & 0x3ffffff) | jalx_opcode << 26; 6651 } 6652 else if (!mips_elf_hash_table (info)->ignore_branch_isa) 6653 { 6654 info->callbacks->einfo 6655 (_("%X%H: unsupported branch between ISA modes\n"), 6656 input_bfd, input_section, relocation->r_offset); 6657 return TRUE; 6658 } 6659 } 6660 6661 /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in 6662 range. */ 6663 if (!bfd_link_relocatable (info) 6664 && !cross_mode_jump_p 6665 && ((JAL_TO_BAL_P (input_bfd) 6666 && r_type == R_MIPS_26 6667 && (x >> 26) == 0x3) /* jal addr */ 6668 || (JALR_TO_BAL_P (input_bfd) 6669 && r_type == R_MIPS_JALR 6670 && x == 0x0320f809) /* jalr t9 */ 6671 || (JR_TO_B_P (input_bfd) 6672 && r_type == R_MIPS_JALR 6673 && (x & ~1) == 0x03200008))) /* jr t9 / jalr zero, t9 */ 6674 { 6675 bfd_vma addr; 6676 bfd_vma dest; 6677 bfd_signed_vma off; 6678 6679 addr = (input_section->output_section->vma 6680 + input_section->output_offset 6681 + relocation->r_offset 6682 + 4); 6683 if (r_type == R_MIPS_26) 6684 dest = (value << 2) | ((addr >> 28) << 28); 6685 else 6686 dest = value; 6687 off = dest - addr; 6688 if (off <= 0x1ffff && off >= -0x20000) 6689 { 6690 if ((x & ~1) == 0x03200008) /* jr t9 / jalr zero, t9 */ 6691 x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff); /* b addr */ 6692 else 6693 x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff); /* bal addr */ 6694 } 6695 } 6696 6697 /* Put the value into the output. */ 6698 mips_elf_store_contents (howto, relocation, input_bfd, contents, x); 6699 6700 _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info), 6701 location); 6702 6703 return TRUE; 6704 } 6705 6706 /* Create a rel.dyn relocation for the dynamic linker to resolve. REL 6707 is the original relocation, which is now being transformed into a 6708 dynamic relocation. The ADDENDP is adjusted if necessary; the 6709 caller should store the result in place of the original addend. */ 6710 6711 static bfd_boolean 6712 mips_elf_create_dynamic_relocation (bfd *output_bfd, 6713 struct bfd_link_info *info, 6714 const Elf_Internal_Rela *rel, 6715 struct mips_elf_link_hash_entry *h, 6716 asection *sec, bfd_vma symbol, 6717 bfd_vma *addendp, asection *input_section) 6718 { 6719 Elf_Internal_Rela outrel[3]; 6720 asection *sreloc; 6721 bfd *dynobj; 6722 int r_type; 6723 long indx; 6724 bfd_boolean defined_p; 6725 struct mips_elf_link_hash_table *htab; 6726 6727 htab = mips_elf_hash_table (info); 6728 BFD_ASSERT (htab != NULL); 6729 6730 r_type = ELF_R_TYPE (output_bfd, rel->r_info); 6731 dynobj = elf_hash_table (info)->dynobj; 6732 sreloc = mips_elf_rel_dyn_section (info, FALSE); 6733 BFD_ASSERT (sreloc != NULL); 6734 BFD_ASSERT (sreloc->contents != NULL); 6735 BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd) 6736 < sreloc->size); 6737 6738 outrel[0].r_offset = 6739 _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset); 6740 if (ABI_64_P (output_bfd)) 6741 { 6742 outrel[1].r_offset = 6743 _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset); 6744 outrel[2].r_offset = 6745 _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset); 6746 } 6747 6748 if (outrel[0].r_offset == MINUS_ONE) 6749 /* The relocation field has been deleted. */ 6750 return TRUE; 6751 6752 if (outrel[0].r_offset == MINUS_TWO) 6753 { 6754 /* The relocation field has been converted into a relative value of 6755 some sort. Functions like _bfd_elf_write_section_eh_frame expect 6756 the field to be fully relocated, so add in the symbol's value. */ 6757 *addendp += symbol; 6758 return TRUE; 6759 } 6760 6761 /* We must now calculate the dynamic symbol table index to use 6762 in the relocation. */ 6763 if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root)) 6764 { 6765 BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE); 6766 indx = h->root.dynindx; 6767 if (SGI_COMPAT (output_bfd)) 6768 defined_p = h->root.def_regular; 6769 else 6770 /* ??? glibc's ld.so just adds the final GOT entry to the 6771 relocation field. It therefore treats relocs against 6772 defined symbols in the same way as relocs against 6773 undefined symbols. */ 6774 defined_p = FALSE; 6775 } 6776 else 6777 { 6778 if (sec != NULL && bfd_is_abs_section (sec)) 6779 indx = 0; 6780 else if (sec == NULL || sec->owner == NULL) 6781 { 6782 bfd_set_error (bfd_error_bad_value); 6783 return FALSE; 6784 } 6785 else 6786 { 6787 indx = elf_section_data (sec->output_section)->dynindx; 6788 if (indx == 0) 6789 { 6790 asection *osec = htab->root.text_index_section; 6791 indx = elf_section_data (osec)->dynindx; 6792 } 6793 if (indx == 0) 6794 abort (); 6795 } 6796 6797 /* Instead of generating a relocation using the section 6798 symbol, we may as well make it a fully relative 6799 relocation. We want to avoid generating relocations to 6800 local symbols because we used to generate them 6801 incorrectly, without adding the original symbol value, 6802 which is mandated by the ABI for section symbols. In 6803 order to give dynamic loaders and applications time to 6804 phase out the incorrect use, we refrain from emitting 6805 section-relative relocations. It's not like they're 6806 useful, after all. This should be a bit more efficient 6807 as well. */ 6808 /* ??? Although this behavior is compatible with glibc's ld.so, 6809 the ABI says that relocations against STN_UNDEF should have 6810 a symbol value of 0. Irix rld honors this, so relocations 6811 against STN_UNDEF have no effect. */ 6812 if (!SGI_COMPAT (output_bfd)) 6813 indx = 0; 6814 defined_p = TRUE; 6815 } 6816 6817 /* If the relocation was previously an absolute relocation and 6818 this symbol will not be referred to by the relocation, we must 6819 adjust it by the value we give it in the dynamic symbol table. 6820 Otherwise leave the job up to the dynamic linker. */ 6821 if (defined_p && r_type != R_MIPS_REL32) 6822 *addendp += symbol; 6823 6824 if (htab->is_vxworks) 6825 /* VxWorks uses non-relative relocations for this. */ 6826 outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32); 6827 else 6828 /* The relocation is always an REL32 relocation because we don't 6829 know where the shared library will wind up at load-time. */ 6830 outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx, 6831 R_MIPS_REL32); 6832 6833 /* For strict adherence to the ABI specification, we should 6834 generate a R_MIPS_64 relocation record by itself before the 6835 _REL32/_64 record as well, such that the addend is read in as 6836 a 64-bit value (REL32 is a 32-bit relocation, after all). 6837 However, since none of the existing ELF64 MIPS dynamic 6838 loaders seems to care, we don't waste space with these 6839 artificial relocations. If this turns out to not be true, 6840 mips_elf_allocate_dynamic_relocation() should be tweaked so 6841 as to make room for a pair of dynamic relocations per 6842 invocation if ABI_64_P, and here we should generate an 6843 additional relocation record with R_MIPS_64 by itself for a 6844 NULL symbol before this relocation record. */ 6845 outrel[1].r_info = ELF_R_INFO (output_bfd, 0, 6846 ABI_64_P (output_bfd) 6847 ? R_MIPS_64 6848 : R_MIPS_NONE); 6849 outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE); 6850 6851 /* Adjust the output offset of the relocation to reference the 6852 correct location in the output file. */ 6853 outrel[0].r_offset += (input_section->output_section->vma 6854 + input_section->output_offset); 6855 outrel[1].r_offset += (input_section->output_section->vma 6856 + input_section->output_offset); 6857 outrel[2].r_offset += (input_section->output_section->vma 6858 + input_section->output_offset); 6859 6860 /* Put the relocation back out. We have to use the special 6861 relocation outputter in the 64-bit case since the 64-bit 6862 relocation format is non-standard. */ 6863 if (ABI_64_P (output_bfd)) 6864 { 6865 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out) 6866 (output_bfd, &outrel[0], 6867 (sreloc->contents 6868 + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel))); 6869 } 6870 else if (htab->is_vxworks) 6871 { 6872 /* VxWorks uses RELA rather than REL dynamic relocations. */ 6873 outrel[0].r_addend = *addendp; 6874 bfd_elf32_swap_reloca_out 6875 (output_bfd, &outrel[0], 6876 (sreloc->contents 6877 + sreloc->reloc_count * sizeof (Elf32_External_Rela))); 6878 } 6879 else 6880 bfd_elf32_swap_reloc_out 6881 (output_bfd, &outrel[0], 6882 (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel))); 6883 6884 /* We've now added another relocation. */ 6885 ++sreloc->reloc_count; 6886 6887 /* Make sure the output section is writable. The dynamic linker 6888 will be writing to it. */ 6889 elf_section_data (input_section->output_section)->this_hdr.sh_flags 6890 |= SHF_WRITE; 6891 6892 /* On IRIX5, make an entry of compact relocation info. */ 6893 if (IRIX_COMPAT (output_bfd) == ict_irix5) 6894 { 6895 asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel"); 6896 bfd_byte *cr; 6897 6898 if (scpt) 6899 { 6900 Elf32_crinfo cptrel; 6901 6902 mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG); 6903 cptrel.vaddr = (rel->r_offset 6904 + input_section->output_section->vma 6905 + input_section->output_offset); 6906 if (r_type == R_MIPS_REL32) 6907 mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32); 6908 else 6909 mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD); 6910 mips_elf_set_cr_dist2to (cptrel, 0); 6911 cptrel.konst = *addendp; 6912 6913 cr = (scpt->contents 6914 + sizeof (Elf32_External_compact_rel)); 6915 mips_elf_set_cr_relvaddr (cptrel, 0); 6916 bfd_elf32_swap_crinfo_out (output_bfd, &cptrel, 6917 ((Elf32_External_crinfo *) cr 6918 + scpt->reloc_count)); 6919 ++scpt->reloc_count; 6920 } 6921 } 6922 6923 /* If we've written this relocation for a readonly section, 6924 we need to set DF_TEXTREL again, so that we do not delete the 6925 DT_TEXTREL tag. */ 6926 if (MIPS_ELF_READONLY_SECTION (input_section)) 6927 info->flags |= DF_TEXTREL; 6928 6929 return TRUE; 6930 } 6931 6932 /* Return the MACH for a MIPS e_flags value. */ 6933 6934 unsigned long 6935 _bfd_elf_mips_mach (flagword flags) 6936 { 6937 switch (flags & EF_MIPS_MACH) 6938 { 6939 case E_MIPS_MACH_3900: 6940 return bfd_mach_mips3900; 6941 6942 case E_MIPS_MACH_4010: 6943 return bfd_mach_mips4010; 6944 6945 case E_MIPS_MACH_4100: 6946 return bfd_mach_mips4100; 6947 6948 case E_MIPS_MACH_4111: 6949 return bfd_mach_mips4111; 6950 6951 case E_MIPS_MACH_4120: 6952 return bfd_mach_mips4120; 6953 6954 case E_MIPS_MACH_4650: 6955 return bfd_mach_mips4650; 6956 6957 case E_MIPS_MACH_5400: 6958 return bfd_mach_mips5400; 6959 6960 case E_MIPS_MACH_5500: 6961 return bfd_mach_mips5500; 6962 6963 case E_MIPS_MACH_5900: 6964 return bfd_mach_mips5900; 6965 6966 case E_MIPS_MACH_9000: 6967 return bfd_mach_mips9000; 6968 6969 case E_MIPS_MACH_SB1: 6970 return bfd_mach_mips_sb1; 6971 6972 case E_MIPS_MACH_LS2E: 6973 return bfd_mach_mips_loongson_2e; 6974 6975 case E_MIPS_MACH_LS2F: 6976 return bfd_mach_mips_loongson_2f; 6977 6978 case E_MIPS_MACH_GS464: 6979 return bfd_mach_mips_gs464; 6980 6981 case E_MIPS_MACH_GS464E: 6982 return bfd_mach_mips_gs464e; 6983 6984 case E_MIPS_MACH_GS264E: 6985 return bfd_mach_mips_gs264e; 6986 6987 case E_MIPS_MACH_OCTEON3: 6988 return bfd_mach_mips_octeon3; 6989 6990 case E_MIPS_MACH_OCTEON2: 6991 return bfd_mach_mips_octeon2; 6992 6993 case E_MIPS_MACH_OCTEON: 6994 return bfd_mach_mips_octeon; 6995 6996 case E_MIPS_MACH_XLR: 6997 return bfd_mach_mips_xlr; 6998 6999 case E_MIPS_MACH_IAMR2: 7000 return bfd_mach_mips_interaptiv_mr2; 7001 7002 default: 7003 switch (flags & EF_MIPS_ARCH) 7004 { 7005 default: 7006 case E_MIPS_ARCH_1: 7007 return bfd_mach_mips3000; 7008 7009 case E_MIPS_ARCH_2: 7010 return bfd_mach_mips6000; 7011 7012 case E_MIPS_ARCH_3: 7013 return bfd_mach_mips4000; 7014 7015 case E_MIPS_ARCH_4: 7016 return bfd_mach_mips8000; 7017 7018 case E_MIPS_ARCH_5: 7019 return bfd_mach_mips5; 7020 7021 case E_MIPS_ARCH_32: 7022 return bfd_mach_mipsisa32; 7023 7024 case E_MIPS_ARCH_64: 7025 return bfd_mach_mipsisa64; 7026 7027 case E_MIPS_ARCH_32R2: 7028 return bfd_mach_mipsisa32r2; 7029 7030 case E_MIPS_ARCH_64R2: 7031 return bfd_mach_mipsisa64r2; 7032 7033 case E_MIPS_ARCH_32R6: 7034 return bfd_mach_mipsisa32r6; 7035 7036 case E_MIPS_ARCH_64R6: 7037 return bfd_mach_mipsisa64r6; 7038 } 7039 } 7040 7041 return 0; 7042 } 7043 7044 /* Return printable name for ABI. */ 7045 7046 static INLINE char * 7047 elf_mips_abi_name (bfd *abfd) 7048 { 7049 flagword flags; 7050 7051 flags = elf_elfheader (abfd)->e_flags; 7052 switch (flags & EF_MIPS_ABI) 7053 { 7054 case 0: 7055 if (ABI_N32_P (abfd)) 7056 return "N32"; 7057 else if (ABI_64_P (abfd)) 7058 return "64"; 7059 else 7060 return "none"; 7061 case E_MIPS_ABI_O32: 7062 return "O32"; 7063 case E_MIPS_ABI_O64: 7064 return "O64"; 7065 case E_MIPS_ABI_EABI32: 7066 return "EABI32"; 7067 case E_MIPS_ABI_EABI64: 7068 return "EABI64"; 7069 default: 7070 return "unknown abi"; 7071 } 7072 } 7073 7074 /* MIPS ELF uses two common sections. One is the usual one, and the 7075 other is for small objects. All the small objects are kept 7076 together, and then referenced via the gp pointer, which yields 7077 faster assembler code. This is what we use for the small common 7078 section. This approach is copied from ecoff.c. */ 7079 static asection mips_elf_scom_section; 7080 static asymbol mips_elf_scom_symbol; 7081 static asymbol *mips_elf_scom_symbol_ptr; 7082 7083 /* MIPS ELF also uses an acommon section, which represents an 7084 allocated common symbol which may be overridden by a 7085 definition in a shared library. */ 7086 static asection mips_elf_acom_section; 7087 static asymbol mips_elf_acom_symbol; 7088 static asymbol *mips_elf_acom_symbol_ptr; 7089 7090 /* This is used for both the 32-bit and the 64-bit ABI. */ 7091 7092 void 7093 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym) 7094 { 7095 elf_symbol_type *elfsym; 7096 7097 /* Handle the special MIPS section numbers that a symbol may use. */ 7098 elfsym = (elf_symbol_type *) asym; 7099 switch (elfsym->internal_elf_sym.st_shndx) 7100 { 7101 case SHN_MIPS_ACOMMON: 7102 /* This section is used in a dynamically linked executable file. 7103 It is an allocated common section. The dynamic linker can 7104 either resolve these symbols to something in a shared 7105 library, or it can just leave them here. For our purposes, 7106 we can consider these symbols to be in a new section. */ 7107 if (mips_elf_acom_section.name == NULL) 7108 { 7109 /* Initialize the acommon section. */ 7110 mips_elf_acom_section.name = ".acommon"; 7111 mips_elf_acom_section.flags = SEC_ALLOC; 7112 mips_elf_acom_section.output_section = &mips_elf_acom_section; 7113 mips_elf_acom_section.symbol = &mips_elf_acom_symbol; 7114 mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr; 7115 mips_elf_acom_symbol.name = ".acommon"; 7116 mips_elf_acom_symbol.flags = BSF_SECTION_SYM; 7117 mips_elf_acom_symbol.section = &mips_elf_acom_section; 7118 mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol; 7119 } 7120 asym->section = &mips_elf_acom_section; 7121 break; 7122 7123 case SHN_COMMON: 7124 /* Common symbols less than the GP size are automatically 7125 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */ 7126 if (asym->value > elf_gp_size (abfd) 7127 || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS 7128 || IRIX_COMPAT (abfd) == ict_irix6) 7129 break; 7130 /* Fall through. */ 7131 case SHN_MIPS_SCOMMON: 7132 if (mips_elf_scom_section.name == NULL) 7133 { 7134 /* Initialize the small common section. */ 7135 mips_elf_scom_section.name = ".scommon"; 7136 mips_elf_scom_section.flags = SEC_IS_COMMON; 7137 mips_elf_scom_section.output_section = &mips_elf_scom_section; 7138 mips_elf_scom_section.symbol = &mips_elf_scom_symbol; 7139 mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr; 7140 mips_elf_scom_symbol.name = ".scommon"; 7141 mips_elf_scom_symbol.flags = BSF_SECTION_SYM; 7142 mips_elf_scom_symbol.section = &mips_elf_scom_section; 7143 mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol; 7144 } 7145 asym->section = &mips_elf_scom_section; 7146 asym->value = elfsym->internal_elf_sym.st_size; 7147 break; 7148 7149 case SHN_MIPS_SUNDEFINED: 7150 asym->section = bfd_und_section_ptr; 7151 break; 7152 7153 case SHN_MIPS_TEXT: 7154 { 7155 asection *section = bfd_get_section_by_name (abfd, ".text"); 7156 7157 if (section != NULL) 7158 { 7159 asym->section = section; 7160 /* MIPS_TEXT is a bit special, the address is not an offset 7161 to the base of the .text section. So subtract the section 7162 base address to make it an offset. */ 7163 asym->value -= section->vma; 7164 } 7165 } 7166 break; 7167 7168 case SHN_MIPS_DATA: 7169 { 7170 asection *section = bfd_get_section_by_name (abfd, ".data"); 7171 7172 if (section != NULL) 7173 { 7174 asym->section = section; 7175 /* MIPS_DATA is a bit special, the address is not an offset 7176 to the base of the .data section. So subtract the section 7177 base address to make it an offset. */ 7178 asym->value -= section->vma; 7179 } 7180 } 7181 break; 7182 } 7183 7184 /* If this is an odd-valued function symbol, assume it's a MIPS16 7185 or microMIPS one. */ 7186 if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC 7187 && (asym->value & 1) != 0) 7188 { 7189 asym->value--; 7190 if (MICROMIPS_P (abfd)) 7191 elfsym->internal_elf_sym.st_other 7192 = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other); 7193 else 7194 elfsym->internal_elf_sym.st_other 7195 = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other); 7196 } 7197 } 7198 7199 /* Implement elf_backend_eh_frame_address_size. This differs from 7200 the default in the way it handles EABI64. 7201 7202 EABI64 was originally specified as an LP64 ABI, and that is what 7203 -mabi=eabi normally gives on a 64-bit target. However, gcc has 7204 historically accepted the combination of -mabi=eabi and -mlong32, 7205 and this ILP32 variation has become semi-official over time. 7206 Both forms use elf32 and have pointer-sized FDE addresses. 7207 7208 If an EABI object was generated by GCC 4.0 or above, it will have 7209 an empty .gcc_compiled_longXX section, where XX is the size of longs 7210 in bits. Unfortunately, ILP32 objects generated by earlier compilers 7211 have no special marking to distinguish them from LP64 objects. 7212 7213 We don't want users of the official LP64 ABI to be punished for the 7214 existence of the ILP32 variant, but at the same time, we don't want 7215 to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects. 7216 We therefore take the following approach: 7217 7218 - If ABFD contains a .gcc_compiled_longXX section, use it to 7219 determine the pointer size. 7220 7221 - Otherwise check the type of the first relocation. Assume that 7222 the LP64 ABI is being used if the relocation is of type R_MIPS_64. 7223 7224 - Otherwise punt. 7225 7226 The second check is enough to detect LP64 objects generated by pre-4.0 7227 compilers because, in the kind of output generated by those compilers, 7228 the first relocation will be associated with either a CIE personality 7229 routine or an FDE start address. Furthermore, the compilers never 7230 used a special (non-pointer) encoding for this ABI. 7231 7232 Checking the relocation type should also be safe because there is no 7233 reason to use R_MIPS_64 in an ILP32 object. Pre-4.0 compilers never 7234 did so. */ 7235 7236 unsigned int 7237 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, const asection *sec) 7238 { 7239 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64) 7240 return 8; 7241 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64) 7242 { 7243 bfd_boolean long32_p, long64_p; 7244 7245 long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0; 7246 long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0; 7247 if (long32_p && long64_p) 7248 return 0; 7249 if (long32_p) 7250 return 4; 7251 if (long64_p) 7252 return 8; 7253 7254 if (sec->reloc_count > 0 7255 && elf_section_data (sec)->relocs != NULL 7256 && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info) 7257 == R_MIPS_64)) 7258 return 8; 7259 7260 return 0; 7261 } 7262 return 4; 7263 } 7264 7265 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP 7266 relocations against two unnamed section symbols to resolve to the 7267 same address. For example, if we have code like: 7268 7269 lw $4,%got_disp(.data)($gp) 7270 lw $25,%got_disp(.text)($gp) 7271 jalr $25 7272 7273 then the linker will resolve both relocations to .data and the program 7274 will jump there rather than to .text. 7275 7276 We can work around this problem by giving names to local section symbols. 7277 This is also what the MIPSpro tools do. */ 7278 7279 bfd_boolean 7280 _bfd_mips_elf_name_local_section_symbols (bfd *abfd) 7281 { 7282 return SGI_COMPAT (abfd); 7283 } 7284 7285 /* Work over a section just before writing it out. This routine is 7286 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize 7287 sections that need the SHF_MIPS_GPREL flag by name; there has to be 7288 a better way. */ 7289 7290 bfd_boolean 7291 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr) 7292 { 7293 if (hdr->sh_type == SHT_MIPS_REGINFO 7294 && hdr->sh_size > 0) 7295 { 7296 bfd_byte buf[4]; 7297 7298 BFD_ASSERT (hdr->contents == NULL); 7299 7300 if (hdr->sh_size != sizeof (Elf32_External_RegInfo)) 7301 { 7302 _bfd_error_handler 7303 (_("%pB: incorrect `.reginfo' section size; " 7304 "expected %" PRIu64 ", got %" PRIu64), 7305 abfd, (uint64_t) sizeof (Elf32_External_RegInfo), 7306 (uint64_t) hdr->sh_size); 7307 bfd_set_error (bfd_error_bad_value); 7308 return FALSE; 7309 } 7310 7311 if (bfd_seek (abfd, 7312 hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4, 7313 SEEK_SET) != 0) 7314 return FALSE; 7315 H_PUT_32 (abfd, elf_gp (abfd), buf); 7316 if (bfd_bwrite (buf, 4, abfd) != 4) 7317 return FALSE; 7318 } 7319 7320 if (hdr->sh_type == SHT_MIPS_OPTIONS 7321 && hdr->bfd_section != NULL 7322 && mips_elf_section_data (hdr->bfd_section) != NULL 7323 && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL) 7324 { 7325 bfd_byte *contents, *l, *lend; 7326 7327 /* We stored the section contents in the tdata field in the 7328 set_section_contents routine. We save the section contents 7329 so that we don't have to read them again. 7330 At this point we know that elf_gp is set, so we can look 7331 through the section contents to see if there is an 7332 ODK_REGINFO structure. */ 7333 7334 contents = mips_elf_section_data (hdr->bfd_section)->u.tdata; 7335 l = contents; 7336 lend = contents + hdr->sh_size; 7337 while (l + sizeof (Elf_External_Options) <= lend) 7338 { 7339 Elf_Internal_Options intopt; 7340 7341 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l, 7342 &intopt); 7343 if (intopt.size < sizeof (Elf_External_Options)) 7344 { 7345 _bfd_error_handler 7346 /* xgettext:c-format */ 7347 (_("%pB: warning: bad `%s' option size %u smaller than" 7348 " its header"), 7349 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size); 7350 break; 7351 } 7352 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO) 7353 { 7354 bfd_byte buf[8]; 7355 7356 if (bfd_seek (abfd, 7357 (hdr->sh_offset 7358 + (l - contents) 7359 + sizeof (Elf_External_Options) 7360 + (sizeof (Elf64_External_RegInfo) - 8)), 7361 SEEK_SET) != 0) 7362 return FALSE; 7363 H_PUT_64 (abfd, elf_gp (abfd), buf); 7364 if (bfd_bwrite (buf, 8, abfd) != 8) 7365 return FALSE; 7366 } 7367 else if (intopt.kind == ODK_REGINFO) 7368 { 7369 bfd_byte buf[4]; 7370 7371 if (bfd_seek (abfd, 7372 (hdr->sh_offset 7373 + (l - contents) 7374 + sizeof (Elf_External_Options) 7375 + (sizeof (Elf32_External_RegInfo) - 4)), 7376 SEEK_SET) != 0) 7377 return FALSE; 7378 H_PUT_32 (abfd, elf_gp (abfd), buf); 7379 if (bfd_bwrite (buf, 4, abfd) != 4) 7380 return FALSE; 7381 } 7382 l += intopt.size; 7383 } 7384 } 7385 7386 if (hdr->bfd_section != NULL) 7387 { 7388 const char *name = bfd_section_name (hdr->bfd_section); 7389 7390 /* .sbss is not handled specially here because the GNU/Linux 7391 prelinker can convert .sbss from NOBITS to PROGBITS and 7392 changing it back to NOBITS breaks the binary. The entry in 7393 _bfd_mips_elf_special_sections will ensure the correct flags 7394 are set on .sbss if BFD creates it without reading it from an 7395 input file, and without special handling here the flags set 7396 on it in an input file will be followed. */ 7397 if (strcmp (name, ".sdata") == 0 7398 || strcmp (name, ".lit8") == 0 7399 || strcmp (name, ".lit4") == 0) 7400 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; 7401 else if (strcmp (name, ".srdata") == 0) 7402 hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL; 7403 else if (strcmp (name, ".compact_rel") == 0) 7404 hdr->sh_flags = 0; 7405 else if (strcmp (name, ".rtproc") == 0) 7406 { 7407 if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0) 7408 { 7409 unsigned int adjust; 7410 7411 adjust = hdr->sh_size % hdr->sh_addralign; 7412 if (adjust != 0) 7413 hdr->sh_size += hdr->sh_addralign - adjust; 7414 } 7415 } 7416 } 7417 7418 return TRUE; 7419 } 7420 7421 /* Handle a MIPS specific section when reading an object file. This 7422 is called when elfcode.h finds a section with an unknown type. 7423 This routine supports both the 32-bit and 64-bit ELF ABI. 7424 7425 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure 7426 how to. */ 7427 7428 bfd_boolean 7429 _bfd_mips_elf_section_from_shdr (bfd *abfd, 7430 Elf_Internal_Shdr *hdr, 7431 const char *name, 7432 int shindex) 7433 { 7434 flagword flags = 0; 7435 7436 /* There ought to be a place to keep ELF backend specific flags, but 7437 at the moment there isn't one. We just keep track of the 7438 sections by their name, instead. Fortunately, the ABI gives 7439 suggested names for all the MIPS specific sections, so we will 7440 probably get away with this. */ 7441 switch (hdr->sh_type) 7442 { 7443 case SHT_MIPS_LIBLIST: 7444 if (strcmp (name, ".liblist") != 0) 7445 return FALSE; 7446 break; 7447 case SHT_MIPS_MSYM: 7448 if (strcmp (name, ".msym") != 0) 7449 return FALSE; 7450 break; 7451 case SHT_MIPS_CONFLICT: 7452 if (strcmp (name, ".conflict") != 0) 7453 return FALSE; 7454 break; 7455 case SHT_MIPS_GPTAB: 7456 if (! CONST_STRNEQ (name, ".gptab.")) 7457 return FALSE; 7458 break; 7459 case SHT_MIPS_UCODE: 7460 if (strcmp (name, ".ucode") != 0) 7461 return FALSE; 7462 break; 7463 case SHT_MIPS_DEBUG: 7464 if (strcmp (name, ".mdebug") != 0) 7465 return FALSE; 7466 flags = SEC_DEBUGGING; 7467 break; 7468 case SHT_MIPS_REGINFO: 7469 if (strcmp (name, ".reginfo") != 0 7470 || hdr->sh_size != sizeof (Elf32_External_RegInfo)) 7471 return FALSE; 7472 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE); 7473 break; 7474 case SHT_MIPS_IFACE: 7475 if (strcmp (name, ".MIPS.interfaces") != 0) 7476 return FALSE; 7477 break; 7478 case SHT_MIPS_CONTENT: 7479 if (! CONST_STRNEQ (name, ".MIPS.content")) 7480 return FALSE; 7481 break; 7482 case SHT_MIPS_OPTIONS: 7483 if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name)) 7484 return FALSE; 7485 break; 7486 case SHT_MIPS_ABIFLAGS: 7487 if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name)) 7488 return FALSE; 7489 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE); 7490 break; 7491 case SHT_MIPS_DWARF: 7492 if (! CONST_STRNEQ (name, ".debug_") 7493 && ! CONST_STRNEQ (name, ".zdebug_")) 7494 return FALSE; 7495 break; 7496 case SHT_MIPS_SYMBOL_LIB: 7497 if (strcmp (name, ".MIPS.symlib") != 0) 7498 return FALSE; 7499 break; 7500 case SHT_MIPS_EVENTS: 7501 if (! CONST_STRNEQ (name, ".MIPS.events") 7502 && ! CONST_STRNEQ (name, ".MIPS.post_rel")) 7503 return FALSE; 7504 break; 7505 case SHT_MIPS_XHASH: 7506 if (strcmp (name, ".MIPS.xhash") != 0) 7507 return FALSE; 7508 default: 7509 break; 7510 } 7511 7512 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) 7513 return FALSE; 7514 7515 if (flags) 7516 { 7517 if (!bfd_set_section_flags (hdr->bfd_section, 7518 (bfd_section_flags (hdr->bfd_section) 7519 | flags))) 7520 return FALSE; 7521 } 7522 7523 if (hdr->sh_type == SHT_MIPS_ABIFLAGS) 7524 { 7525 Elf_External_ABIFlags_v0 ext; 7526 7527 if (! bfd_get_section_contents (abfd, hdr->bfd_section, 7528 &ext, 0, sizeof ext)) 7529 return FALSE; 7530 bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext, 7531 &mips_elf_tdata (abfd)->abiflags); 7532 if (mips_elf_tdata (abfd)->abiflags.version != 0) 7533 return FALSE; 7534 mips_elf_tdata (abfd)->abiflags_valid = TRUE; 7535 } 7536 7537 /* FIXME: We should record sh_info for a .gptab section. */ 7538 7539 /* For a .reginfo section, set the gp value in the tdata information 7540 from the contents of this section. We need the gp value while 7541 processing relocs, so we just get it now. The .reginfo section 7542 is not used in the 64-bit MIPS ELF ABI. */ 7543 if (hdr->sh_type == SHT_MIPS_REGINFO) 7544 { 7545 Elf32_External_RegInfo ext; 7546 Elf32_RegInfo s; 7547 7548 if (! bfd_get_section_contents (abfd, hdr->bfd_section, 7549 &ext, 0, sizeof ext)) 7550 return FALSE; 7551 bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s); 7552 elf_gp (abfd) = s.ri_gp_value; 7553 } 7554 7555 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and 7556 set the gp value based on what we find. We may see both 7557 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case, 7558 they should agree. */ 7559 if (hdr->sh_type == SHT_MIPS_OPTIONS) 7560 { 7561 bfd_byte *contents, *l, *lend; 7562 7563 contents = bfd_malloc (hdr->sh_size); 7564 if (contents == NULL) 7565 return FALSE; 7566 if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents, 7567 0, hdr->sh_size)) 7568 { 7569 free (contents); 7570 return FALSE; 7571 } 7572 l = contents; 7573 lend = contents + hdr->sh_size; 7574 while (l + sizeof (Elf_External_Options) <= lend) 7575 { 7576 Elf_Internal_Options intopt; 7577 7578 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l, 7579 &intopt); 7580 if (intopt.size < sizeof (Elf_External_Options)) 7581 { 7582 _bfd_error_handler 7583 /* xgettext:c-format */ 7584 (_("%pB: warning: bad `%s' option size %u smaller than" 7585 " its header"), 7586 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size); 7587 break; 7588 } 7589 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO) 7590 { 7591 Elf64_Internal_RegInfo intreg; 7592 7593 bfd_mips_elf64_swap_reginfo_in 7594 (abfd, 7595 ((Elf64_External_RegInfo *) 7596 (l + sizeof (Elf_External_Options))), 7597 &intreg); 7598 elf_gp (abfd) = intreg.ri_gp_value; 7599 } 7600 else if (intopt.kind == ODK_REGINFO) 7601 { 7602 Elf32_RegInfo intreg; 7603 7604 bfd_mips_elf32_swap_reginfo_in 7605 (abfd, 7606 ((Elf32_External_RegInfo *) 7607 (l + sizeof (Elf_External_Options))), 7608 &intreg); 7609 elf_gp (abfd) = intreg.ri_gp_value; 7610 } 7611 l += intopt.size; 7612 } 7613 free (contents); 7614 } 7615 7616 return TRUE; 7617 } 7618 7619 /* Set the correct type for a MIPS ELF section. We do this by the 7620 section name, which is a hack, but ought to work. This routine is 7621 used by both the 32-bit and the 64-bit ABI. */ 7622 7623 bfd_boolean 7624 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec) 7625 { 7626 const char *name = bfd_section_name (sec); 7627 7628 if (strcmp (name, ".liblist") == 0) 7629 { 7630 hdr->sh_type = SHT_MIPS_LIBLIST; 7631 hdr->sh_info = sec->size / sizeof (Elf32_Lib); 7632 /* The sh_link field is set in final_write_processing. */ 7633 } 7634 else if (strcmp (name, ".conflict") == 0) 7635 hdr->sh_type = SHT_MIPS_CONFLICT; 7636 else if (CONST_STRNEQ (name, ".gptab.")) 7637 { 7638 hdr->sh_type = SHT_MIPS_GPTAB; 7639 hdr->sh_entsize = sizeof (Elf32_External_gptab); 7640 /* The sh_info field is set in final_write_processing. */ 7641 } 7642 else if (strcmp (name, ".ucode") == 0) 7643 hdr->sh_type = SHT_MIPS_UCODE; 7644 else if (strcmp (name, ".mdebug") == 0) 7645 { 7646 hdr->sh_type = SHT_MIPS_DEBUG; 7647 /* In a shared object on IRIX 5.3, the .mdebug section has an 7648 entsize of 0. FIXME: Does this matter? */ 7649 if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0) 7650 hdr->sh_entsize = 0; 7651 else 7652 hdr->sh_entsize = 1; 7653 } 7654 else if (strcmp (name, ".reginfo") == 0) 7655 { 7656 hdr->sh_type = SHT_MIPS_REGINFO; 7657 /* In a shared object on IRIX 5.3, the .reginfo section has an 7658 entsize of 0x18. FIXME: Does this matter? */ 7659 if (SGI_COMPAT (abfd)) 7660 { 7661 if ((abfd->flags & DYNAMIC) != 0) 7662 hdr->sh_entsize = sizeof (Elf32_External_RegInfo); 7663 else 7664 hdr->sh_entsize = 1; 7665 } 7666 else 7667 hdr->sh_entsize = sizeof (Elf32_External_RegInfo); 7668 } 7669 else if (SGI_COMPAT (abfd) 7670 && (strcmp (name, ".hash") == 0 7671 || strcmp (name, ".dynamic") == 0 7672 || strcmp (name, ".dynstr") == 0)) 7673 { 7674 if (SGI_COMPAT (abfd)) 7675 hdr->sh_entsize = 0; 7676 #if 0 7677 /* This isn't how the IRIX6 linker behaves. */ 7678 hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES; 7679 #endif 7680 } 7681 else if (strcmp (name, ".got") == 0 7682 || strcmp (name, ".srdata") == 0 7683 || strcmp (name, ".sdata") == 0 7684 || strcmp (name, ".sbss") == 0 7685 || strcmp (name, ".lit4") == 0 7686 || strcmp (name, ".lit8") == 0) 7687 hdr->sh_flags |= SHF_MIPS_GPREL; 7688 else if (strcmp (name, ".MIPS.interfaces") == 0) 7689 { 7690 hdr->sh_type = SHT_MIPS_IFACE; 7691 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 7692 } 7693 else if (CONST_STRNEQ (name, ".MIPS.content")) 7694 { 7695 hdr->sh_type = SHT_MIPS_CONTENT; 7696 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 7697 /* The sh_info field is set in final_write_processing. */ 7698 } 7699 else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name)) 7700 { 7701 hdr->sh_type = SHT_MIPS_OPTIONS; 7702 hdr->sh_entsize = 1; 7703 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 7704 } 7705 else if (CONST_STRNEQ (name, ".MIPS.abiflags")) 7706 { 7707 hdr->sh_type = SHT_MIPS_ABIFLAGS; 7708 hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0); 7709 } 7710 else if (CONST_STRNEQ (name, ".debug_") 7711 || CONST_STRNEQ (name, ".zdebug_")) 7712 { 7713 hdr->sh_type = SHT_MIPS_DWARF; 7714 7715 /* Irix facilities such as libexc expect a single .debug_frame 7716 per executable, the system ones have NOSTRIP set and the linker 7717 doesn't merge sections with different flags so ... */ 7718 if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame")) 7719 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 7720 } 7721 else if (strcmp (name, ".MIPS.symlib") == 0) 7722 { 7723 hdr->sh_type = SHT_MIPS_SYMBOL_LIB; 7724 /* The sh_link and sh_info fields are set in 7725 final_write_processing. */ 7726 } 7727 else if (CONST_STRNEQ (name, ".MIPS.events") 7728 || CONST_STRNEQ (name, ".MIPS.post_rel")) 7729 { 7730 hdr->sh_type = SHT_MIPS_EVENTS; 7731 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 7732 /* The sh_link field is set in final_write_processing. */ 7733 } 7734 else if (strcmp (name, ".msym") == 0) 7735 { 7736 hdr->sh_type = SHT_MIPS_MSYM; 7737 hdr->sh_flags |= SHF_ALLOC; 7738 hdr->sh_entsize = 8; 7739 } 7740 else if (strcmp (name, ".MIPS.xhash") == 0) 7741 { 7742 hdr->sh_type = SHT_MIPS_XHASH; 7743 hdr->sh_flags |= SHF_ALLOC; 7744 hdr->sh_entsize = get_elf_backend_data(abfd)->s->arch_size == 64 ? 0 : 4; 7745 } 7746 7747 /* The generic elf_fake_sections will set up REL_HDR using the default 7748 kind of relocations. We used to set up a second header for the 7749 non-default kind of relocations here, but only NewABI would use 7750 these, and the IRIX ld doesn't like resulting empty RELA sections. 7751 Thus we create those header only on demand now. */ 7752 7753 return TRUE; 7754 } 7755 7756 /* Given a BFD section, try to locate the corresponding ELF section 7757 index. This is used by both the 32-bit and the 64-bit ABI. 7758 Actually, it's not clear to me that the 64-bit ABI supports these, 7759 but for non-PIC objects we will certainly want support for at least 7760 the .scommon section. */ 7761 7762 bfd_boolean 7763 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED, 7764 asection *sec, int *retval) 7765 { 7766 if (strcmp (bfd_section_name (sec), ".scommon") == 0) 7767 { 7768 *retval = SHN_MIPS_SCOMMON; 7769 return TRUE; 7770 } 7771 if (strcmp (bfd_section_name (sec), ".acommon") == 0) 7772 { 7773 *retval = SHN_MIPS_ACOMMON; 7774 return TRUE; 7775 } 7776 return FALSE; 7777 } 7778 7779 /* Hook called by the linker routine which adds symbols from an object 7780 file. We must handle the special MIPS section numbers here. */ 7781 7782 bfd_boolean 7783 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, 7784 Elf_Internal_Sym *sym, const char **namep, 7785 flagword *flagsp ATTRIBUTE_UNUSED, 7786 asection **secp, bfd_vma *valp) 7787 { 7788 if (SGI_COMPAT (abfd) 7789 && (abfd->flags & DYNAMIC) != 0 7790 && strcmp (*namep, "_rld_new_interface") == 0) 7791 { 7792 /* Skip IRIX5 rld entry name. */ 7793 *namep = NULL; 7794 return TRUE; 7795 } 7796 7797 /* Shared objects may have a dynamic symbol '_gp_disp' defined as 7798 a SECTION *ABS*. This causes ld to think it can resolve _gp_disp 7799 by setting a DT_NEEDED for the shared object. Since _gp_disp is 7800 a magic symbol resolved by the linker, we ignore this bogus definition 7801 of _gp_disp. New ABI objects do not suffer from this problem so this 7802 is not done for them. */ 7803 if (!NEWABI_P(abfd) 7804 && (sym->st_shndx == SHN_ABS) 7805 && (strcmp (*namep, "_gp_disp") == 0)) 7806 { 7807 *namep = NULL; 7808 return TRUE; 7809 } 7810 7811 switch (sym->st_shndx) 7812 { 7813 case SHN_COMMON: 7814 /* Common symbols less than the GP size are automatically 7815 treated as SHN_MIPS_SCOMMON symbols. */ 7816 if (sym->st_size > elf_gp_size (abfd) 7817 || ELF_ST_TYPE (sym->st_info) == STT_TLS 7818 || IRIX_COMPAT (abfd) == ict_irix6) 7819 break; 7820 /* Fall through. */ 7821 case SHN_MIPS_SCOMMON: 7822 *secp = bfd_make_section_old_way (abfd, ".scommon"); 7823 (*secp)->flags |= SEC_IS_COMMON; 7824 *valp = sym->st_size; 7825 break; 7826 7827 case SHN_MIPS_TEXT: 7828 /* This section is used in a shared object. */ 7829 if (mips_elf_tdata (abfd)->elf_text_section == NULL) 7830 { 7831 asymbol *elf_text_symbol; 7832 asection *elf_text_section; 7833 bfd_size_type amt = sizeof (asection); 7834 7835 elf_text_section = bfd_zalloc (abfd, amt); 7836 if (elf_text_section == NULL) 7837 return FALSE; 7838 7839 amt = sizeof (asymbol); 7840 elf_text_symbol = bfd_zalloc (abfd, amt); 7841 if (elf_text_symbol == NULL) 7842 return FALSE; 7843 7844 /* Initialize the section. */ 7845 7846 mips_elf_tdata (abfd)->elf_text_section = elf_text_section; 7847 mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol; 7848 7849 elf_text_section->symbol = elf_text_symbol; 7850 elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol; 7851 7852 elf_text_section->name = ".text"; 7853 elf_text_section->flags = SEC_NO_FLAGS; 7854 elf_text_section->output_section = NULL; 7855 elf_text_section->owner = abfd; 7856 elf_text_symbol->name = ".text"; 7857 elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC; 7858 elf_text_symbol->section = elf_text_section; 7859 } 7860 /* This code used to do *secp = bfd_und_section_ptr if 7861 bfd_link_pic (info). I don't know why, and that doesn't make sense, 7862 so I took it out. */ 7863 *secp = mips_elf_tdata (abfd)->elf_text_section; 7864 break; 7865 7866 case SHN_MIPS_ACOMMON: 7867 /* Fall through. XXX Can we treat this as allocated data? */ 7868 case SHN_MIPS_DATA: 7869 /* This section is used in a shared object. */ 7870 if (mips_elf_tdata (abfd)->elf_data_section == NULL) 7871 { 7872 asymbol *elf_data_symbol; 7873 asection *elf_data_section; 7874 bfd_size_type amt = sizeof (asection); 7875 7876 elf_data_section = bfd_zalloc (abfd, amt); 7877 if (elf_data_section == NULL) 7878 return FALSE; 7879 7880 amt = sizeof (asymbol); 7881 elf_data_symbol = bfd_zalloc (abfd, amt); 7882 if (elf_data_symbol == NULL) 7883 return FALSE; 7884 7885 /* Initialize the section. */ 7886 7887 mips_elf_tdata (abfd)->elf_data_section = elf_data_section; 7888 mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol; 7889 7890 elf_data_section->symbol = elf_data_symbol; 7891 elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol; 7892 7893 elf_data_section->name = ".data"; 7894 elf_data_section->flags = SEC_NO_FLAGS; 7895 elf_data_section->output_section = NULL; 7896 elf_data_section->owner = abfd; 7897 elf_data_symbol->name = ".data"; 7898 elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC; 7899 elf_data_symbol->section = elf_data_section; 7900 } 7901 /* This code used to do *secp = bfd_und_section_ptr if 7902 bfd_link_pic (info). I don't know why, and that doesn't make sense, 7903 so I took it out. */ 7904 *secp = mips_elf_tdata (abfd)->elf_data_section; 7905 break; 7906 7907 case SHN_MIPS_SUNDEFINED: 7908 *secp = bfd_und_section_ptr; 7909 break; 7910 } 7911 7912 if (SGI_COMPAT (abfd) 7913 && ! bfd_link_pic (info) 7914 && info->output_bfd->xvec == abfd->xvec 7915 && strcmp (*namep, "__rld_obj_head") == 0) 7916 { 7917 struct elf_link_hash_entry *h; 7918 struct bfd_link_hash_entry *bh; 7919 7920 /* Mark __rld_obj_head as dynamic. */ 7921 bh = NULL; 7922 if (! (_bfd_generic_link_add_one_symbol 7923 (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE, 7924 get_elf_backend_data (abfd)->collect, &bh))) 7925 return FALSE; 7926 7927 h = (struct elf_link_hash_entry *) bh; 7928 h->non_elf = 0; 7929 h->def_regular = 1; 7930 h->type = STT_OBJECT; 7931 7932 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 7933 return FALSE; 7934 7935 mips_elf_hash_table (info)->use_rld_obj_head = TRUE; 7936 mips_elf_hash_table (info)->rld_symbol = h; 7937 } 7938 7939 /* If this is a mips16 text symbol, add 1 to the value to make it 7940 odd. This will cause something like .word SYM to come up with 7941 the right value when it is loaded into the PC. */ 7942 if (ELF_ST_IS_COMPRESSED (sym->st_other)) 7943 ++*valp; 7944 7945 return TRUE; 7946 } 7947 7948 /* This hook function is called before the linker writes out a global 7949 symbol. We mark symbols as small common if appropriate. This is 7950 also where we undo the increment of the value for a mips16 symbol. */ 7951 7952 int 7953 _bfd_mips_elf_link_output_symbol_hook 7954 (struct bfd_link_info *info ATTRIBUTE_UNUSED, 7955 const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym, 7956 asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED) 7957 { 7958 /* If we see a common symbol, which implies a relocatable link, then 7959 if a symbol was small common in an input file, mark it as small 7960 common in the output file. */ 7961 if (sym->st_shndx == SHN_COMMON 7962 && strcmp (input_sec->name, ".scommon") == 0) 7963 sym->st_shndx = SHN_MIPS_SCOMMON; 7964 7965 if (ELF_ST_IS_COMPRESSED (sym->st_other)) 7966 sym->st_value &= ~1; 7967 7968 return 1; 7969 } 7970 7971 /* Functions for the dynamic linker. */ 7972 7973 /* Create dynamic sections when linking against a dynamic object. */ 7974 7975 bfd_boolean 7976 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) 7977 { 7978 struct elf_link_hash_entry *h; 7979 struct bfd_link_hash_entry *bh; 7980 flagword flags; 7981 register asection *s; 7982 const char * const *namep; 7983 struct mips_elf_link_hash_table *htab; 7984 7985 htab = mips_elf_hash_table (info); 7986 BFD_ASSERT (htab != NULL); 7987 7988 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY 7989 | SEC_LINKER_CREATED | SEC_READONLY); 7990 7991 /* The psABI requires a read-only .dynamic section, but the VxWorks 7992 EABI doesn't. */ 7993 if (!htab->is_vxworks) 7994 { 7995 s = bfd_get_linker_section (abfd, ".dynamic"); 7996 if (s != NULL) 7997 { 7998 if (!bfd_set_section_flags (s, flags)) 7999 return FALSE; 8000 } 8001 } 8002 8003 /* We need to create .got section. */ 8004 if (!mips_elf_create_got_section (abfd, info)) 8005 return FALSE; 8006 8007 if (! mips_elf_rel_dyn_section (info, TRUE)) 8008 return FALSE; 8009 8010 /* Create .stub section. */ 8011 s = bfd_make_section_anyway_with_flags (abfd, 8012 MIPS_ELF_STUB_SECTION_NAME (abfd), 8013 flags | SEC_CODE); 8014 if (s == NULL 8015 || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd))) 8016 return FALSE; 8017 htab->sstubs = s; 8018 8019 if (!mips_elf_hash_table (info)->use_rld_obj_head 8020 && bfd_link_executable (info) 8021 && bfd_get_linker_section (abfd, ".rld_map") == NULL) 8022 { 8023 s = bfd_make_section_anyway_with_flags (abfd, ".rld_map", 8024 flags &~ (flagword) SEC_READONLY); 8025 if (s == NULL 8026 || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd))) 8027 return FALSE; 8028 } 8029 8030 /* Create .MIPS.xhash section. */ 8031 if (info->emit_gnu_hash) 8032 s = bfd_make_section_anyway_with_flags (abfd, ".MIPS.xhash", 8033 flags | SEC_READONLY); 8034 8035 /* On IRIX5, we adjust add some additional symbols and change the 8036 alignments of several sections. There is no ABI documentation 8037 indicating that this is necessary on IRIX6, nor any evidence that 8038 the linker takes such action. */ 8039 if (IRIX_COMPAT (abfd) == ict_irix5) 8040 { 8041 for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++) 8042 { 8043 bh = NULL; 8044 if (! (_bfd_generic_link_add_one_symbol 8045 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0, 8046 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) 8047 return FALSE; 8048 8049 h = (struct elf_link_hash_entry *) bh; 8050 h->mark = 1; 8051 h->non_elf = 0; 8052 h->def_regular = 1; 8053 h->type = STT_SECTION; 8054 8055 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 8056 return FALSE; 8057 } 8058 8059 /* We need to create a .compact_rel section. */ 8060 if (SGI_COMPAT (abfd)) 8061 { 8062 if (!mips_elf_create_compact_rel_section (abfd, info)) 8063 return FALSE; 8064 } 8065 8066 /* Change alignments of some sections. */ 8067 s = bfd_get_linker_section (abfd, ".hash"); 8068 if (s != NULL) 8069 bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 8070 8071 s = bfd_get_linker_section (abfd, ".dynsym"); 8072 if (s != NULL) 8073 bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 8074 8075 s = bfd_get_linker_section (abfd, ".dynstr"); 8076 if (s != NULL) 8077 bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 8078 8079 /* ??? */ 8080 s = bfd_get_section_by_name (abfd, ".reginfo"); 8081 if (s != NULL) 8082 bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 8083 8084 s = bfd_get_linker_section (abfd, ".dynamic"); 8085 if (s != NULL) 8086 bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 8087 } 8088 8089 if (bfd_link_executable (info)) 8090 { 8091 const char *name; 8092 8093 name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING"; 8094 bh = NULL; 8095 if (!(_bfd_generic_link_add_one_symbol 8096 (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0, 8097 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) 8098 return FALSE; 8099 8100 h = (struct elf_link_hash_entry *) bh; 8101 h->non_elf = 0; 8102 h->def_regular = 1; 8103 h->type = STT_SECTION; 8104 8105 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 8106 return FALSE; 8107 8108 if (! mips_elf_hash_table (info)->use_rld_obj_head) 8109 { 8110 /* __rld_map is a four byte word located in the .data section 8111 and is filled in by the rtld to contain a pointer to 8112 the _r_debug structure. Its symbol value will be set in 8113 _bfd_mips_elf_finish_dynamic_symbol. */ 8114 s = bfd_get_linker_section (abfd, ".rld_map"); 8115 BFD_ASSERT (s != NULL); 8116 8117 name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP"; 8118 bh = NULL; 8119 if (!(_bfd_generic_link_add_one_symbol 8120 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE, 8121 get_elf_backend_data (abfd)->collect, &bh))) 8122 return FALSE; 8123 8124 h = (struct elf_link_hash_entry *) bh; 8125 h->non_elf = 0; 8126 h->def_regular = 1; 8127 h->type = STT_OBJECT; 8128 8129 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 8130 return FALSE; 8131 mips_elf_hash_table (info)->rld_symbol = h; 8132 } 8133 } 8134 8135 /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections. 8136 Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol. */ 8137 if (!_bfd_elf_create_dynamic_sections (abfd, info)) 8138 return FALSE; 8139 8140 /* Do the usual VxWorks handling. */ 8141 if (htab->is_vxworks 8142 && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2)) 8143 return FALSE; 8144 8145 return TRUE; 8146 } 8147 8148 /* Return true if relocation REL against section SEC is a REL rather than 8149 RELA relocation. RELOCS is the first relocation in the section and 8150 ABFD is the bfd that contains SEC. */ 8151 8152 static bfd_boolean 8153 mips_elf_rel_relocation_p (bfd *abfd, asection *sec, 8154 const Elf_Internal_Rela *relocs, 8155 const Elf_Internal_Rela *rel) 8156 { 8157 Elf_Internal_Shdr *rel_hdr; 8158 const struct elf_backend_data *bed; 8159 8160 /* To determine which flavor of relocation this is, we depend on the 8161 fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR. */ 8162 rel_hdr = elf_section_data (sec)->rel.hdr; 8163 if (rel_hdr == NULL) 8164 return FALSE; 8165 bed = get_elf_backend_data (abfd); 8166 return ((size_t) (rel - relocs) 8167 < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel); 8168 } 8169 8170 /* Read the addend for REL relocation REL, which belongs to bfd ABFD. 8171 HOWTO is the relocation's howto and CONTENTS points to the contents 8172 of the section that REL is against. */ 8173 8174 static bfd_vma 8175 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel, 8176 reloc_howto_type *howto, bfd_byte *contents) 8177 { 8178 bfd_byte *location; 8179 unsigned int r_type; 8180 bfd_vma addend; 8181 bfd_vma bytes; 8182 8183 r_type = ELF_R_TYPE (abfd, rel->r_info); 8184 location = contents + rel->r_offset; 8185 8186 /* Get the addend, which is stored in the input file. */ 8187 _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location); 8188 bytes = mips_elf_obtain_contents (howto, rel, abfd, contents); 8189 _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location); 8190 8191 addend = bytes & howto->src_mask; 8192 8193 /* Shift is 2, unusually, for microMIPS JALX. Adjust the addend 8194 accordingly. */ 8195 if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c) 8196 addend <<= 1; 8197 8198 return addend; 8199 } 8200 8201 /* REL is a relocation in ABFD that needs a partnering LO16 relocation 8202 and *ADDEND is the addend for REL itself. Look for the LO16 relocation 8203 and update *ADDEND with the final addend. Return true on success 8204 or false if the LO16 could not be found. RELEND is the exclusive 8205 upper bound on the relocations for REL's section. */ 8206 8207 static bfd_boolean 8208 mips_elf_add_lo16_rel_addend (bfd *abfd, 8209 const Elf_Internal_Rela *rel, 8210 const Elf_Internal_Rela *relend, 8211 bfd_byte *contents, bfd_vma *addend) 8212 { 8213 unsigned int r_type, lo16_type; 8214 const Elf_Internal_Rela *lo16_relocation; 8215 reloc_howto_type *lo16_howto; 8216 bfd_vma l; 8217 8218 r_type = ELF_R_TYPE (abfd, rel->r_info); 8219 if (mips16_reloc_p (r_type)) 8220 lo16_type = R_MIPS16_LO16; 8221 else if (micromips_reloc_p (r_type)) 8222 lo16_type = R_MICROMIPS_LO16; 8223 else if (r_type == R_MIPS_PCHI16) 8224 lo16_type = R_MIPS_PCLO16; 8225 else 8226 lo16_type = R_MIPS_LO16; 8227 8228 /* The combined value is the sum of the HI16 addend, left-shifted by 8229 sixteen bits, and the LO16 addend, sign extended. (Usually, the 8230 code does a `lui' of the HI16 value, and then an `addiu' of the 8231 LO16 value.) 8232 8233 Scan ahead to find a matching LO16 relocation. 8234 8235 According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must 8236 be immediately following. However, for the IRIX6 ABI, the next 8237 relocation may be a composed relocation consisting of several 8238 relocations for the same address. In that case, the R_MIPS_LO16 8239 relocation may occur as one of these. We permit a similar 8240 extension in general, as that is useful for GCC. 8241 8242 In some cases GCC dead code elimination removes the LO16 but keeps 8243 the corresponding HI16. This is strictly speaking a violation of 8244 the ABI but not immediately harmful. */ 8245 lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend); 8246 if (lo16_relocation == NULL) 8247 return FALSE; 8248 8249 /* Obtain the addend kept there. */ 8250 lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE); 8251 l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents); 8252 8253 l <<= lo16_howto->rightshift; 8254 l = _bfd_mips_elf_sign_extend (l, 16); 8255 8256 *addend <<= 16; 8257 *addend += l; 8258 return TRUE; 8259 } 8260 8261 /* Try to read the contents of section SEC in bfd ABFD. Return true and 8262 store the contents in *CONTENTS on success. Assume that *CONTENTS 8263 already holds the contents if it is nonull on entry. */ 8264 8265 static bfd_boolean 8266 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents) 8267 { 8268 if (*contents) 8269 return TRUE; 8270 8271 /* Get cached copy if it exists. */ 8272 if (elf_section_data (sec)->this_hdr.contents != NULL) 8273 { 8274 *contents = elf_section_data (sec)->this_hdr.contents; 8275 return TRUE; 8276 } 8277 8278 return bfd_malloc_and_get_section (abfd, sec, contents); 8279 } 8280 8281 /* Make a new PLT record to keep internal data. */ 8282 8283 static struct plt_entry * 8284 mips_elf_make_plt_record (bfd *abfd) 8285 { 8286 struct plt_entry *entry; 8287 8288 entry = bfd_zalloc (abfd, sizeof (*entry)); 8289 if (entry == NULL) 8290 return NULL; 8291 8292 entry->stub_offset = MINUS_ONE; 8293 entry->mips_offset = MINUS_ONE; 8294 entry->comp_offset = MINUS_ONE; 8295 entry->gotplt_index = MINUS_ONE; 8296 return entry; 8297 } 8298 8299 /* Define the special `__gnu_absolute_zero' symbol. We only need this 8300 for PIC code, as otherwise there is no load-time relocation involved 8301 and local GOT entries whose value is zero at static link time will 8302 retain their value at load time. */ 8303 8304 static bfd_boolean 8305 mips_elf_define_absolute_zero (bfd *abfd, struct bfd_link_info *info, 8306 struct mips_elf_link_hash_table *htab, 8307 unsigned int r_type) 8308 { 8309 union 8310 { 8311 struct elf_link_hash_entry *eh; 8312 struct bfd_link_hash_entry *bh; 8313 } 8314 hzero; 8315 8316 BFD_ASSERT (!htab->use_absolute_zero); 8317 BFD_ASSERT (bfd_link_pic (info)); 8318 8319 hzero.bh = NULL; 8320 if (!_bfd_generic_link_add_one_symbol (info, abfd, "__gnu_absolute_zero", 8321 BSF_GLOBAL, bfd_abs_section_ptr, 0, 8322 NULL, FALSE, FALSE, &hzero.bh)) 8323 return FALSE; 8324 8325 BFD_ASSERT (hzero.bh != NULL); 8326 hzero.eh->size = 0; 8327 hzero.eh->type = STT_NOTYPE; 8328 hzero.eh->other = STV_PROTECTED; 8329 hzero.eh->def_regular = 1; 8330 hzero.eh->non_elf = 0; 8331 8332 if (!mips_elf_record_global_got_symbol (hzero.eh, abfd, info, TRUE, r_type)) 8333 return FALSE; 8334 8335 htab->use_absolute_zero = TRUE; 8336 8337 return TRUE; 8338 } 8339 8340 /* Look through the relocs for a section during the first phase, and 8341 allocate space in the global offset table and record the need for 8342 standard MIPS and compressed procedure linkage table entries. */ 8343 8344 bfd_boolean 8345 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, 8346 asection *sec, const Elf_Internal_Rela *relocs) 8347 { 8348 const char *name; 8349 bfd *dynobj; 8350 Elf_Internal_Shdr *symtab_hdr; 8351 struct elf_link_hash_entry **sym_hashes; 8352 size_t extsymoff; 8353 const Elf_Internal_Rela *rel; 8354 const Elf_Internal_Rela *rel_end; 8355 asection *sreloc; 8356 const struct elf_backend_data *bed; 8357 struct mips_elf_link_hash_table *htab; 8358 bfd_byte *contents; 8359 bfd_vma addend; 8360 reloc_howto_type *howto; 8361 8362 if (bfd_link_relocatable (info)) 8363 return TRUE; 8364 8365 htab = mips_elf_hash_table (info); 8366 BFD_ASSERT (htab != NULL); 8367 8368 dynobj = elf_hash_table (info)->dynobj; 8369 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 8370 sym_hashes = elf_sym_hashes (abfd); 8371 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info; 8372 8373 bed = get_elf_backend_data (abfd); 8374 rel_end = relocs + sec->reloc_count; 8375 8376 /* Check for the mips16 stub sections. */ 8377 8378 name = bfd_section_name (sec); 8379 if (FN_STUB_P (name)) 8380 { 8381 unsigned long r_symndx; 8382 8383 /* Look at the relocation information to figure out which symbol 8384 this is for. */ 8385 8386 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end); 8387 if (r_symndx == 0) 8388 { 8389 _bfd_error_handler 8390 /* xgettext:c-format */ 8391 (_("%pB: warning: cannot determine the target function for" 8392 " stub section `%s'"), 8393 abfd, name); 8394 bfd_set_error (bfd_error_bad_value); 8395 return FALSE; 8396 } 8397 8398 if (r_symndx < extsymoff 8399 || sym_hashes[r_symndx - extsymoff] == NULL) 8400 { 8401 asection *o; 8402 8403 /* This stub is for a local symbol. This stub will only be 8404 needed if there is some relocation in this BFD, other 8405 than a 16 bit function call, which refers to this symbol. */ 8406 for (o = abfd->sections; o != NULL; o = o->next) 8407 { 8408 Elf_Internal_Rela *sec_relocs; 8409 const Elf_Internal_Rela *r, *rend; 8410 8411 /* We can ignore stub sections when looking for relocs. */ 8412 if ((o->flags & SEC_RELOC) == 0 8413 || o->reloc_count == 0 8414 || section_allows_mips16_refs_p (o)) 8415 continue; 8416 8417 sec_relocs 8418 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, 8419 info->keep_memory); 8420 if (sec_relocs == NULL) 8421 return FALSE; 8422 8423 rend = sec_relocs + o->reloc_count; 8424 for (r = sec_relocs; r < rend; r++) 8425 if (ELF_R_SYM (abfd, r->r_info) == r_symndx 8426 && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info))) 8427 break; 8428 8429 if (elf_section_data (o)->relocs != sec_relocs) 8430 free (sec_relocs); 8431 8432 if (r < rend) 8433 break; 8434 } 8435 8436 if (o == NULL) 8437 { 8438 /* There is no non-call reloc for this stub, so we do 8439 not need it. Since this function is called before 8440 the linker maps input sections to output sections, we 8441 can easily discard it by setting the SEC_EXCLUDE 8442 flag. */ 8443 sec->flags |= SEC_EXCLUDE; 8444 return TRUE; 8445 } 8446 8447 /* Record this stub in an array of local symbol stubs for 8448 this BFD. */ 8449 if (mips_elf_tdata (abfd)->local_stubs == NULL) 8450 { 8451 unsigned long symcount; 8452 asection **n; 8453 bfd_size_type amt; 8454 8455 if (elf_bad_symtab (abfd)) 8456 symcount = NUM_SHDR_ENTRIES (symtab_hdr); 8457 else 8458 symcount = symtab_hdr->sh_info; 8459 amt = symcount * sizeof (asection *); 8460 n = bfd_zalloc (abfd, amt); 8461 if (n == NULL) 8462 return FALSE; 8463 mips_elf_tdata (abfd)->local_stubs = n; 8464 } 8465 8466 sec->flags |= SEC_KEEP; 8467 mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec; 8468 8469 /* We don't need to set mips16_stubs_seen in this case. 8470 That flag is used to see whether we need to look through 8471 the global symbol table for stubs. We don't need to set 8472 it here, because we just have a local stub. */ 8473 } 8474 else 8475 { 8476 struct mips_elf_link_hash_entry *h; 8477 8478 h = ((struct mips_elf_link_hash_entry *) 8479 sym_hashes[r_symndx - extsymoff]); 8480 8481 while (h->root.root.type == bfd_link_hash_indirect 8482 || h->root.root.type == bfd_link_hash_warning) 8483 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 8484 8485 /* H is the symbol this stub is for. */ 8486 8487 /* If we already have an appropriate stub for this function, we 8488 don't need another one, so we can discard this one. Since 8489 this function is called before the linker maps input sections 8490 to output sections, we can easily discard it by setting the 8491 SEC_EXCLUDE flag. */ 8492 if (h->fn_stub != NULL) 8493 { 8494 sec->flags |= SEC_EXCLUDE; 8495 return TRUE; 8496 } 8497 8498 sec->flags |= SEC_KEEP; 8499 h->fn_stub = sec; 8500 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE; 8501 } 8502 } 8503 else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name)) 8504 { 8505 unsigned long r_symndx; 8506 struct mips_elf_link_hash_entry *h; 8507 asection **loc; 8508 8509 /* Look at the relocation information to figure out which symbol 8510 this is for. */ 8511 8512 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end); 8513 if (r_symndx == 0) 8514 { 8515 _bfd_error_handler 8516 /* xgettext:c-format */ 8517 (_("%pB: warning: cannot determine the target function for" 8518 " stub section `%s'"), 8519 abfd, name); 8520 bfd_set_error (bfd_error_bad_value); 8521 return FALSE; 8522 } 8523 8524 if (r_symndx < extsymoff 8525 || sym_hashes[r_symndx - extsymoff] == NULL) 8526 { 8527 asection *o; 8528 8529 /* This stub is for a local symbol. This stub will only be 8530 needed if there is some relocation (R_MIPS16_26) in this BFD 8531 that refers to this symbol. */ 8532 for (o = abfd->sections; o != NULL; o = o->next) 8533 { 8534 Elf_Internal_Rela *sec_relocs; 8535 const Elf_Internal_Rela *r, *rend; 8536 8537 /* We can ignore stub sections when looking for relocs. */ 8538 if ((o->flags & SEC_RELOC) == 0 8539 || o->reloc_count == 0 8540 || section_allows_mips16_refs_p (o)) 8541 continue; 8542 8543 sec_relocs 8544 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, 8545 info->keep_memory); 8546 if (sec_relocs == NULL) 8547 return FALSE; 8548 8549 rend = sec_relocs + o->reloc_count; 8550 for (r = sec_relocs; r < rend; r++) 8551 if (ELF_R_SYM (abfd, r->r_info) == r_symndx 8552 && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26) 8553 break; 8554 8555 if (elf_section_data (o)->relocs != sec_relocs) 8556 free (sec_relocs); 8557 8558 if (r < rend) 8559 break; 8560 } 8561 8562 if (o == NULL) 8563 { 8564 /* There is no non-call reloc for this stub, so we do 8565 not need it. Since this function is called before 8566 the linker maps input sections to output sections, we 8567 can easily discard it by setting the SEC_EXCLUDE 8568 flag. */ 8569 sec->flags |= SEC_EXCLUDE; 8570 return TRUE; 8571 } 8572 8573 /* Record this stub in an array of local symbol call_stubs for 8574 this BFD. */ 8575 if (mips_elf_tdata (abfd)->local_call_stubs == NULL) 8576 { 8577 unsigned long symcount; 8578 asection **n; 8579 bfd_size_type amt; 8580 8581 if (elf_bad_symtab (abfd)) 8582 symcount = NUM_SHDR_ENTRIES (symtab_hdr); 8583 else 8584 symcount = symtab_hdr->sh_info; 8585 amt = symcount * sizeof (asection *); 8586 n = bfd_zalloc (abfd, amt); 8587 if (n == NULL) 8588 return FALSE; 8589 mips_elf_tdata (abfd)->local_call_stubs = n; 8590 } 8591 8592 sec->flags |= SEC_KEEP; 8593 mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec; 8594 8595 /* We don't need to set mips16_stubs_seen in this case. 8596 That flag is used to see whether we need to look through 8597 the global symbol table for stubs. We don't need to set 8598 it here, because we just have a local stub. */ 8599 } 8600 else 8601 { 8602 h = ((struct mips_elf_link_hash_entry *) 8603 sym_hashes[r_symndx - extsymoff]); 8604 8605 /* H is the symbol this stub is for. */ 8606 8607 if (CALL_FP_STUB_P (name)) 8608 loc = &h->call_fp_stub; 8609 else 8610 loc = &h->call_stub; 8611 8612 /* If we already have an appropriate stub for this function, we 8613 don't need another one, so we can discard this one. Since 8614 this function is called before the linker maps input sections 8615 to output sections, we can easily discard it by setting the 8616 SEC_EXCLUDE flag. */ 8617 if (*loc != NULL) 8618 { 8619 sec->flags |= SEC_EXCLUDE; 8620 return TRUE; 8621 } 8622 8623 sec->flags |= SEC_KEEP; 8624 *loc = sec; 8625 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE; 8626 } 8627 } 8628 8629 sreloc = NULL; 8630 contents = NULL; 8631 for (rel = relocs; rel < rel_end; ++rel) 8632 { 8633 unsigned long r_symndx; 8634 unsigned int r_type; 8635 struct elf_link_hash_entry *h; 8636 bfd_boolean can_make_dynamic_p; 8637 bfd_boolean call_reloc_p; 8638 bfd_boolean constrain_symbol_p; 8639 8640 r_symndx = ELF_R_SYM (abfd, rel->r_info); 8641 r_type = ELF_R_TYPE (abfd, rel->r_info); 8642 8643 if (r_symndx < extsymoff) 8644 h = NULL; 8645 else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr)) 8646 { 8647 _bfd_error_handler 8648 /* xgettext:c-format */ 8649 (_("%pB: malformed reloc detected for section %s"), 8650 abfd, name); 8651 bfd_set_error (bfd_error_bad_value); 8652 return FALSE; 8653 } 8654 else 8655 { 8656 h = sym_hashes[r_symndx - extsymoff]; 8657 if (h != NULL) 8658 { 8659 while (h->root.type == bfd_link_hash_indirect 8660 || h->root.type == bfd_link_hash_warning) 8661 h = (struct elf_link_hash_entry *) h->root.u.i.link; 8662 } 8663 } 8664 8665 /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this 8666 relocation into a dynamic one. */ 8667 can_make_dynamic_p = FALSE; 8668 8669 /* Set CALL_RELOC_P to true if the relocation is for a call, 8670 and if pointer equality therefore doesn't matter. */ 8671 call_reloc_p = FALSE; 8672 8673 /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation 8674 into account when deciding how to define the symbol. 8675 Relocations in nonallocatable sections such as .pdr and 8676 .debug* should have no effect. */ 8677 constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0); 8678 8679 switch (r_type) 8680 { 8681 case R_MIPS_CALL16: 8682 case R_MIPS_CALL_HI16: 8683 case R_MIPS_CALL_LO16: 8684 case R_MIPS16_CALL16: 8685 case R_MICROMIPS_CALL16: 8686 case R_MICROMIPS_CALL_HI16: 8687 case R_MICROMIPS_CALL_LO16: 8688 call_reloc_p = TRUE; 8689 /* Fall through. */ 8690 8691 case R_MIPS_GOT16: 8692 case R_MIPS_GOT_LO16: 8693 case R_MIPS_GOT_PAGE: 8694 case R_MIPS_GOT_DISP: 8695 case R_MIPS16_GOT16: 8696 case R_MICROMIPS_GOT16: 8697 case R_MICROMIPS_GOT_LO16: 8698 case R_MICROMIPS_GOT_PAGE: 8699 case R_MICROMIPS_GOT_DISP: 8700 /* If we have a symbol that will resolve to zero at static link 8701 time and it is used by a GOT relocation applied to code we 8702 cannot relax to an immediate zero load, then we will be using 8703 the special `__gnu_absolute_zero' symbol whose value is zero 8704 at dynamic load time. We ignore HI16-type GOT relocations at 8705 this stage, because their handling will depend entirely on 8706 the corresponding LO16-type GOT relocation. */ 8707 if (!call_hi16_reloc_p (r_type) 8708 && h != NULL 8709 && bfd_link_pic (info) 8710 && !htab->use_absolute_zero 8711 && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) 8712 { 8713 bfd_boolean rel_reloc; 8714 8715 if (!mips_elf_get_section_contents (abfd, sec, &contents)) 8716 return FALSE; 8717 8718 rel_reloc = mips_elf_rel_relocation_p (abfd, sec, relocs, rel); 8719 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, !rel_reloc); 8720 8721 if (!mips_elf_nullify_got_load (abfd, contents, rel, howto, 8722 FALSE)) 8723 if (!mips_elf_define_absolute_zero (abfd, info, htab, r_type)) 8724 return FALSE; 8725 } 8726 8727 /* Fall through. */ 8728 case R_MIPS_GOT_HI16: 8729 case R_MIPS_GOT_OFST: 8730 case R_MIPS_TLS_GOTTPREL: 8731 case R_MIPS_TLS_GD: 8732 case R_MIPS_TLS_LDM: 8733 case R_MIPS16_TLS_GOTTPREL: 8734 case R_MIPS16_TLS_GD: 8735 case R_MIPS16_TLS_LDM: 8736 case R_MICROMIPS_GOT_HI16: 8737 case R_MICROMIPS_GOT_OFST: 8738 case R_MICROMIPS_TLS_GOTTPREL: 8739 case R_MICROMIPS_TLS_GD: 8740 case R_MICROMIPS_TLS_LDM: 8741 if (dynobj == NULL) 8742 elf_hash_table (info)->dynobj = dynobj = abfd; 8743 if (!mips_elf_create_got_section (dynobj, info)) 8744 return FALSE; 8745 if (htab->is_vxworks && !bfd_link_pic (info)) 8746 { 8747 _bfd_error_handler 8748 /* xgettext:c-format */ 8749 (_("%pB: GOT reloc at %#" PRIx64 " not expected in executables"), 8750 abfd, (uint64_t) rel->r_offset); 8751 bfd_set_error (bfd_error_bad_value); 8752 return FALSE; 8753 } 8754 can_make_dynamic_p = TRUE; 8755 break; 8756 8757 case R_MIPS_NONE: 8758 case R_MIPS_JALR: 8759 case R_MICROMIPS_JALR: 8760 /* These relocations have empty fields and are purely there to 8761 provide link information. The symbol value doesn't matter. */ 8762 constrain_symbol_p = FALSE; 8763 break; 8764 8765 case R_MIPS_GPREL16: 8766 case R_MIPS_GPREL32: 8767 case R_MIPS16_GPREL: 8768 case R_MICROMIPS_GPREL16: 8769 /* GP-relative relocations always resolve to a definition in a 8770 regular input file, ignoring the one-definition rule. This is 8771 important for the GP setup sequence in NewABI code, which 8772 always resolves to a local function even if other relocations 8773 against the symbol wouldn't. */ 8774 constrain_symbol_p = FALSE; 8775 break; 8776 8777 case R_MIPS_32: 8778 case R_MIPS_REL32: 8779 case R_MIPS_64: 8780 /* In VxWorks executables, references to external symbols 8781 must be handled using copy relocs or PLT entries; it is not 8782 possible to convert this relocation into a dynamic one. 8783 8784 For executables that use PLTs and copy-relocs, we have a 8785 choice between converting the relocation into a dynamic 8786 one or using copy relocations or PLT entries. It is 8787 usually better to do the former, unless the relocation is 8788 against a read-only section. */ 8789 if ((bfd_link_pic (info) 8790 || (h != NULL 8791 && !htab->is_vxworks 8792 && strcmp (h->root.root.string, "__gnu_local_gp") != 0 8793 && !(!info->nocopyreloc 8794 && !PIC_OBJECT_P (abfd) 8795 && MIPS_ELF_READONLY_SECTION (sec)))) 8796 && (sec->flags & SEC_ALLOC) != 0) 8797 { 8798 can_make_dynamic_p = TRUE; 8799 if (dynobj == NULL) 8800 elf_hash_table (info)->dynobj = dynobj = abfd; 8801 } 8802 break; 8803 8804 case R_MIPS_26: 8805 case R_MIPS_PC16: 8806 case R_MIPS_PC21_S2: 8807 case R_MIPS_PC26_S2: 8808 case R_MIPS16_26: 8809 case R_MIPS16_PC16_S1: 8810 case R_MICROMIPS_26_S1: 8811 case R_MICROMIPS_PC7_S1: 8812 case R_MICROMIPS_PC10_S1: 8813 case R_MICROMIPS_PC16_S1: 8814 case R_MICROMIPS_PC23_S2: 8815 call_reloc_p = TRUE; 8816 break; 8817 } 8818 8819 if (h) 8820 { 8821 if (constrain_symbol_p) 8822 { 8823 if (!can_make_dynamic_p) 8824 ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1; 8825 8826 if (!call_reloc_p) 8827 h->pointer_equality_needed = 1; 8828 8829 /* We must not create a stub for a symbol that has 8830 relocations related to taking the function's address. 8831 This doesn't apply to VxWorks, where CALL relocs refer 8832 to a .got.plt entry instead of a normal .got entry. */ 8833 if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p)) 8834 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE; 8835 } 8836 8837 /* Relocations against the special VxWorks __GOTT_BASE__ and 8838 __GOTT_INDEX__ symbols must be left to the loader. Allocate 8839 room for them in .rela.dyn. */ 8840 if (is_gott_symbol (info, h)) 8841 { 8842 if (sreloc == NULL) 8843 { 8844 sreloc = mips_elf_rel_dyn_section (info, TRUE); 8845 if (sreloc == NULL) 8846 return FALSE; 8847 } 8848 mips_elf_allocate_dynamic_relocations (dynobj, info, 1); 8849 if (MIPS_ELF_READONLY_SECTION (sec)) 8850 /* We tell the dynamic linker that there are 8851 relocations against the text segment. */ 8852 info->flags |= DF_TEXTREL; 8853 } 8854 } 8855 else if (call_lo16_reloc_p (r_type) 8856 || got_lo16_reloc_p (r_type) 8857 || got_disp_reloc_p (r_type) 8858 || (got16_reloc_p (r_type) && htab->is_vxworks)) 8859 { 8860 /* We may need a local GOT entry for this relocation. We 8861 don't count R_MIPS_GOT_PAGE because we can estimate the 8862 maximum number of pages needed by looking at the size of 8863 the segment. Similar comments apply to R_MIPS*_GOT16 and 8864 R_MIPS*_CALL16, except on VxWorks, where GOT relocations 8865 always evaluate to "G". We don't count R_MIPS_GOT_HI16, or 8866 R_MIPS_CALL_HI16 because these are always followed by an 8867 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */ 8868 if (!mips_elf_record_local_got_symbol (abfd, r_symndx, 8869 rel->r_addend, info, r_type)) 8870 return FALSE; 8871 } 8872 8873 if (h != NULL 8874 && mips_elf_relocation_needs_la25_stub (abfd, r_type, 8875 ELF_ST_IS_MIPS16 (h->other))) 8876 ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE; 8877 8878 switch (r_type) 8879 { 8880 case R_MIPS_CALL16: 8881 case R_MIPS16_CALL16: 8882 case R_MICROMIPS_CALL16: 8883 if (h == NULL) 8884 { 8885 _bfd_error_handler 8886 /* xgettext:c-format */ 8887 (_("%pB: CALL16 reloc at %#" PRIx64 " not against global symbol"), 8888 abfd, (uint64_t) rel->r_offset); 8889 bfd_set_error (bfd_error_bad_value); 8890 return FALSE; 8891 } 8892 /* Fall through. */ 8893 8894 case R_MIPS_CALL_HI16: 8895 case R_MIPS_CALL_LO16: 8896 case R_MICROMIPS_CALL_HI16: 8897 case R_MICROMIPS_CALL_LO16: 8898 if (h != NULL) 8899 { 8900 /* Make sure there is room in the regular GOT to hold the 8901 function's address. We may eliminate it in favour of 8902 a .got.plt entry later; see mips_elf_count_got_symbols. */ 8903 if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE, 8904 r_type)) 8905 return FALSE; 8906 8907 /* We need a stub, not a plt entry for the undefined 8908 function. But we record it as if it needs plt. See 8909 _bfd_elf_adjust_dynamic_symbol. */ 8910 h->needs_plt = 1; 8911 h->type = STT_FUNC; 8912 } 8913 break; 8914 8915 case R_MIPS_GOT_PAGE: 8916 case R_MICROMIPS_GOT_PAGE: 8917 case R_MIPS16_GOT16: 8918 case R_MIPS_GOT16: 8919 case R_MIPS_GOT_HI16: 8920 case R_MIPS_GOT_LO16: 8921 case R_MICROMIPS_GOT16: 8922 case R_MICROMIPS_GOT_HI16: 8923 case R_MICROMIPS_GOT_LO16: 8924 if (!h || got_page_reloc_p (r_type)) 8925 { 8926 /* This relocation needs (or may need, if h != NULL) a 8927 page entry in the GOT. For R_MIPS_GOT_PAGE we do not 8928 know for sure until we know whether the symbol is 8929 preemptible. */ 8930 if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel)) 8931 { 8932 if (!mips_elf_get_section_contents (abfd, sec, &contents)) 8933 return FALSE; 8934 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE); 8935 addend = mips_elf_read_rel_addend (abfd, rel, 8936 howto, contents); 8937 if (got16_reloc_p (r_type)) 8938 mips_elf_add_lo16_rel_addend (abfd, rel, rel_end, 8939 contents, &addend); 8940 else 8941 addend <<= howto->rightshift; 8942 } 8943 else 8944 addend = rel->r_addend; 8945 if (!mips_elf_record_got_page_ref (info, abfd, r_symndx, 8946 h, addend)) 8947 return FALSE; 8948 8949 if (h) 8950 { 8951 struct mips_elf_link_hash_entry *hmips = 8952 (struct mips_elf_link_hash_entry *) h; 8953 8954 /* This symbol is definitely not overridable. */ 8955 if (hmips->root.def_regular 8956 && ! (bfd_link_pic (info) && ! info->symbolic 8957 && ! hmips->root.forced_local)) 8958 h = NULL; 8959 } 8960 } 8961 /* If this is a global, overridable symbol, GOT_PAGE will 8962 decay to GOT_DISP, so we'll need a GOT entry for it. */ 8963 /* Fall through. */ 8964 8965 case R_MIPS_GOT_DISP: 8966 case R_MICROMIPS_GOT_DISP: 8967 if (h && !mips_elf_record_global_got_symbol (h, abfd, info, 8968 FALSE, r_type)) 8969 return FALSE; 8970 break; 8971 8972 case R_MIPS_TLS_GOTTPREL: 8973 case R_MIPS16_TLS_GOTTPREL: 8974 case R_MICROMIPS_TLS_GOTTPREL: 8975 if (bfd_link_pic (info)) 8976 info->flags |= DF_STATIC_TLS; 8977 /* Fall through */ 8978 8979 case R_MIPS_TLS_LDM: 8980 case R_MIPS16_TLS_LDM: 8981 case R_MICROMIPS_TLS_LDM: 8982 if (tls_ldm_reloc_p (r_type)) 8983 { 8984 r_symndx = STN_UNDEF; 8985 h = NULL; 8986 } 8987 /* Fall through */ 8988 8989 case R_MIPS_TLS_GD: 8990 case R_MIPS16_TLS_GD: 8991 case R_MICROMIPS_TLS_GD: 8992 /* This symbol requires a global offset table entry, or two 8993 for TLS GD relocations. */ 8994 if (h != NULL) 8995 { 8996 if (!mips_elf_record_global_got_symbol (h, abfd, info, 8997 FALSE, r_type)) 8998 return FALSE; 8999 } 9000 else 9001 { 9002 if (!mips_elf_record_local_got_symbol (abfd, r_symndx, 9003 rel->r_addend, 9004 info, r_type)) 9005 return FALSE; 9006 } 9007 break; 9008 9009 case R_MIPS_32: 9010 case R_MIPS_REL32: 9011 case R_MIPS_64: 9012 /* In VxWorks executables, references to external symbols 9013 are handled using copy relocs or PLT stubs, so there's 9014 no need to add a .rela.dyn entry for this relocation. */ 9015 if (can_make_dynamic_p) 9016 { 9017 if (sreloc == NULL) 9018 { 9019 sreloc = mips_elf_rel_dyn_section (info, TRUE); 9020 if (sreloc == NULL) 9021 return FALSE; 9022 } 9023 if (bfd_link_pic (info) && h == NULL) 9024 { 9025 /* When creating a shared object, we must copy these 9026 reloc types into the output file as R_MIPS_REL32 9027 relocs. Make room for this reloc in .rel(a).dyn. */ 9028 mips_elf_allocate_dynamic_relocations (dynobj, info, 1); 9029 /* In the N32 and 64-bit ABIs there may be multiple 9030 consecutive relocations for the same offset. If we have 9031 a R_MIPS_GPREL32 followed by a R_MIPS_64 then that 9032 relocation is complete and needs no futher adjustment. 9033 9034 Silently ignore absolute relocations in the .eh_frame 9035 section, they will be dropped latter. 9036 */ 9037 if ((rel == relocs 9038 || rel[-1].r_offset != rel->r_offset 9039 || r_type != R_MIPS_64 9040 || ELF_R_TYPE(abfd, rel[-1].r_info) != R_MIPS_GPREL32) 9041 && MIPS_ELF_READONLY_SECTION (sec) 9042 && !((r_type == R_MIPS_32 || r_type == R_MIPS_64) 9043 && strcmp(sec->name, ".eh_frame") == 0)) 9044 { 9045 /* We tell the dynamic linker that there are 9046 relocations against the text segment. */ 9047 info->flags |= DF_TEXTREL; 9048 info->callbacks->warning 9049 (info, 9050 _("relocation emitted against readonly section"), 9051 NULL, abfd, sec, rel->r_offset); 9052 } 9053 } 9054 else 9055 { 9056 struct mips_elf_link_hash_entry *hmips; 9057 9058 /* For a shared object, we must copy this relocation 9059 unless the symbol turns out to be undefined and 9060 weak with non-default visibility, in which case 9061 it will be left as zero. 9062 9063 We could elide R_MIPS_REL32 for locally binding symbols 9064 in shared libraries, but do not yet do so. 9065 9066 For an executable, we only need to copy this 9067 reloc if the symbol is defined in a dynamic 9068 object. */ 9069 hmips = (struct mips_elf_link_hash_entry *) h; 9070 ++hmips->possibly_dynamic_relocs; 9071 if (MIPS_ELF_READONLY_SECTION (sec)) 9072 /* We need it to tell the dynamic linker if there 9073 are relocations against the text segment. */ 9074 hmips->readonly_reloc = TRUE; 9075 } 9076 } 9077 9078 if (SGI_COMPAT (abfd)) 9079 mips_elf_hash_table (info)->compact_rel_size += 9080 sizeof (Elf32_External_crinfo); 9081 break; 9082 9083 case R_MIPS_26: 9084 case R_MIPS_GPREL16: 9085 case R_MIPS_LITERAL: 9086 case R_MIPS_GPREL32: 9087 case R_MICROMIPS_26_S1: 9088 case R_MICROMIPS_GPREL16: 9089 case R_MICROMIPS_LITERAL: 9090 case R_MICROMIPS_GPREL7_S2: 9091 if (SGI_COMPAT (abfd)) 9092 mips_elf_hash_table (info)->compact_rel_size += 9093 sizeof (Elf32_External_crinfo); 9094 break; 9095 9096 /* This relocation describes the C++ object vtable hierarchy. 9097 Reconstruct it for later use during GC. */ 9098 case R_MIPS_GNU_VTINHERIT: 9099 if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) 9100 return FALSE; 9101 break; 9102 9103 /* This relocation describes which C++ vtable entries are actually 9104 used. Record for later use during GC. */ 9105 case R_MIPS_GNU_VTENTRY: 9106 if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) 9107 return FALSE; 9108 break; 9109 9110 default: 9111 break; 9112 } 9113 9114 /* Record the need for a PLT entry. At this point we don't know 9115 yet if we are going to create a PLT in the first place, but 9116 we only record whether the relocation requires a standard MIPS 9117 or a compressed code entry anyway. If we don't make a PLT after 9118 all, then we'll just ignore these arrangements. Likewise if 9119 a PLT entry is not created because the symbol is satisfied 9120 locally. */ 9121 if (h != NULL 9122 && (branch_reloc_p (r_type) 9123 || mips16_branch_reloc_p (r_type) 9124 || micromips_branch_reloc_p (r_type)) 9125 && !SYMBOL_CALLS_LOCAL (info, h)) 9126 { 9127 if (h->plt.plist == NULL) 9128 h->plt.plist = mips_elf_make_plt_record (abfd); 9129 if (h->plt.plist == NULL) 9130 return FALSE; 9131 9132 if (branch_reloc_p (r_type)) 9133 h->plt.plist->need_mips = TRUE; 9134 else 9135 h->plt.plist->need_comp = TRUE; 9136 } 9137 9138 /* See if this reloc would need to refer to a MIPS16 hard-float stub, 9139 if there is one. We only need to handle global symbols here; 9140 we decide whether to keep or delete stubs for local symbols 9141 when processing the stub's relocations. */ 9142 if (h != NULL 9143 && !mips16_call_reloc_p (r_type) 9144 && !section_allows_mips16_refs_p (sec)) 9145 { 9146 struct mips_elf_link_hash_entry *mh; 9147 9148 mh = (struct mips_elf_link_hash_entry *) h; 9149 mh->need_fn_stub = TRUE; 9150 } 9151 9152 /* Refuse some position-dependent relocations when creating a 9153 shared library. Do not refuse R_MIPS_32 / R_MIPS_64; they're 9154 not PIC, but we can create dynamic relocations and the result 9155 will be fine. Also do not refuse R_MIPS_LO16, which can be 9156 combined with R_MIPS_GOT16. */ 9157 if (bfd_link_pic (info)) 9158 { 9159 switch (r_type) 9160 { 9161 case R_MIPS_TLS_TPREL_HI16: 9162 case R_MIPS16_TLS_TPREL_HI16: 9163 case R_MICROMIPS_TLS_TPREL_HI16: 9164 case R_MIPS_TLS_TPREL_LO16: 9165 case R_MIPS16_TLS_TPREL_LO16: 9166 case R_MICROMIPS_TLS_TPREL_LO16: 9167 /* These are okay in PIE, but not in a shared library. */ 9168 if (bfd_link_executable (info)) 9169 break; 9170 9171 /* FALLTHROUGH */ 9172 9173 case R_MIPS16_HI16: 9174 case R_MIPS_HI16: 9175 case R_MIPS_HIGHER: 9176 case R_MIPS_HIGHEST: 9177 case R_MICROMIPS_HI16: 9178 case R_MICROMIPS_HIGHER: 9179 case R_MICROMIPS_HIGHEST: 9180 /* Don't refuse a high part relocation if it's against 9181 no symbol (e.g. part of a compound relocation). */ 9182 if (r_symndx == STN_UNDEF) 9183 break; 9184 9185 /* Likewise an absolute symbol. */ 9186 if (h != NULL && bfd_is_abs_symbol (&h->root)) 9187 break; 9188 9189 /* R_MIPS_HI16 against _gp_disp is used for $gp setup, 9190 and has a special meaning. */ 9191 if (!NEWABI_P (abfd) && h != NULL 9192 && strcmp (h->root.root.string, "_gp_disp") == 0) 9193 break; 9194 9195 /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks. */ 9196 if (is_gott_symbol (info, h)) 9197 break; 9198 9199 /* FALLTHROUGH */ 9200 9201 case R_MIPS16_26: 9202 case R_MIPS_26: 9203 case R_MICROMIPS_26_S1: 9204 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, NEWABI_P (abfd)); 9205 /* An error for unsupported relocations is raised as part 9206 of the above search, so we can skip the following. */ 9207 if (howto != NULL) 9208 info->callbacks->einfo 9209 /* xgettext:c-format */ 9210 (_("%X%H: relocation %s against `%s' cannot be used" 9211 " when making a shared object; recompile with -fPIC\n"), 9212 abfd, sec, rel->r_offset, howto->name, 9213 (h) ? h->root.root.string : "a local symbol"); 9214 break; 9215 default: 9216 break; 9217 } 9218 } 9219 } 9220 9221 return TRUE; 9222 } 9223 9224 /* Allocate space for global sym dynamic relocs. */ 9225 9226 static bfd_boolean 9227 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) 9228 { 9229 struct bfd_link_info *info = inf; 9230 bfd *dynobj; 9231 struct mips_elf_link_hash_entry *hmips; 9232 struct mips_elf_link_hash_table *htab; 9233 9234 htab = mips_elf_hash_table (info); 9235 BFD_ASSERT (htab != NULL); 9236 9237 dynobj = elf_hash_table (info)->dynobj; 9238 hmips = (struct mips_elf_link_hash_entry *) h; 9239 9240 /* VxWorks executables are handled elsewhere; we only need to 9241 allocate relocations in shared objects. */ 9242 if (htab->is_vxworks && !bfd_link_pic (info)) 9243 return TRUE; 9244 9245 /* Ignore indirect symbols. All relocations against such symbols 9246 will be redirected to the target symbol. */ 9247 if (h->root.type == bfd_link_hash_indirect) 9248 return TRUE; 9249 9250 /* If this symbol is defined in a dynamic object, or we are creating 9251 a shared library, we will need to copy any R_MIPS_32 or 9252 R_MIPS_REL32 relocs against it into the output file. */ 9253 if (! bfd_link_relocatable (info) 9254 && hmips->possibly_dynamic_relocs != 0 9255 && (h->root.type == bfd_link_hash_defweak 9256 || (!h->def_regular && !ELF_COMMON_DEF_P (h)) 9257 || bfd_link_pic (info))) 9258 { 9259 bfd_boolean do_copy = TRUE; 9260 9261 if (h->root.type == bfd_link_hash_undefweak) 9262 { 9263 /* Do not copy relocations for undefined weak symbols that 9264 we are not going to export. */ 9265 if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) 9266 do_copy = FALSE; 9267 9268 /* Make sure undefined weak symbols are output as a dynamic 9269 symbol in PIEs. */ 9270 else if (h->dynindx == -1 && !h->forced_local) 9271 { 9272 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 9273 return FALSE; 9274 } 9275 } 9276 9277 if (do_copy) 9278 { 9279 /* Even though we don't directly need a GOT entry for this symbol, 9280 the SVR4 psABI requires it to have a dynamic symbol table 9281 index greater that DT_MIPS_GOTSYM if there are dynamic 9282 relocations against it. 9283 9284 VxWorks does not enforce the same mapping between the GOT 9285 and the symbol table, so the same requirement does not 9286 apply there. */ 9287 if (!htab->is_vxworks) 9288 { 9289 if (hmips->global_got_area > GGA_RELOC_ONLY) 9290 hmips->global_got_area = GGA_RELOC_ONLY; 9291 hmips->got_only_for_calls = FALSE; 9292 } 9293 9294 mips_elf_allocate_dynamic_relocations 9295 (dynobj, info, hmips->possibly_dynamic_relocs); 9296 if (hmips->readonly_reloc) 9297 /* We tell the dynamic linker that there are relocations 9298 against the text segment. */ 9299 info->flags |= DF_TEXTREL; 9300 } 9301 } 9302 9303 return TRUE; 9304 } 9305 9306 /* Adjust a symbol defined by a dynamic object and referenced by a 9307 regular object. The current definition is in some section of the 9308 dynamic object, but we're not including those sections. We have to 9309 change the definition to something the rest of the link can 9310 understand. */ 9311 9312 bfd_boolean 9313 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info, 9314 struct elf_link_hash_entry *h) 9315 { 9316 bfd *dynobj; 9317 struct mips_elf_link_hash_entry *hmips; 9318 struct mips_elf_link_hash_table *htab; 9319 asection *s, *srel; 9320 9321 htab = mips_elf_hash_table (info); 9322 BFD_ASSERT (htab != NULL); 9323 9324 dynobj = elf_hash_table (info)->dynobj; 9325 hmips = (struct mips_elf_link_hash_entry *) h; 9326 9327 /* Make sure we know what is going on here. */ 9328 BFD_ASSERT (dynobj != NULL 9329 && (h->needs_plt 9330 || h->type == STT_GNU_IFUNC 9331 || h->is_weakalias 9332 || (h->def_dynamic 9333 && h->ref_regular 9334 && !h->def_regular))); 9335 9336 hmips = (struct mips_elf_link_hash_entry *) h; 9337 9338 /* If there are call relocations against an externally-defined symbol, 9339 see whether we can create a MIPS lazy-binding stub for it. We can 9340 only do this if all references to the function are through call 9341 relocations, and in that case, the traditional lazy-binding stubs 9342 are much more efficient than PLT entries. 9343 9344 Traditional stubs are only available on SVR4 psABI-based systems; 9345 VxWorks always uses PLTs instead. */ 9346 if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub) 9347 { 9348 if (! elf_hash_table (info)->dynamic_sections_created) 9349 return TRUE; 9350 9351 /* If this symbol is not defined in a regular file, then set 9352 the symbol to the stub location. This is required to make 9353 function pointers compare as equal between the normal 9354 executable and the shared library. */ 9355 if (!h->def_regular 9356 && !bfd_is_abs_section (htab->sstubs->output_section)) 9357 { 9358 hmips->needs_lazy_stub = TRUE; 9359 htab->lazy_stub_count++; 9360 return TRUE; 9361 } 9362 } 9363 /* As above, VxWorks requires PLT entries for externally-defined 9364 functions that are only accessed through call relocations. 9365 9366 Both VxWorks and non-VxWorks targets also need PLT entries if there 9367 are static-only relocations against an externally-defined function. 9368 This can technically occur for shared libraries if there are 9369 branches to the symbol, although it is unlikely that this will be 9370 used in practice due to the short ranges involved. It can occur 9371 for any relative or absolute relocation in executables; in that 9372 case, the PLT entry becomes the function's canonical address. */ 9373 else if (((h->needs_plt && !hmips->no_fn_stub) 9374 || (h->type == STT_FUNC && hmips->has_static_relocs)) 9375 && htab->use_plts_and_copy_relocs 9376 && !SYMBOL_CALLS_LOCAL (info, h) 9377 && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT 9378 && h->root.type == bfd_link_hash_undefweak)) 9379 { 9380 bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd); 9381 bfd_boolean newabi_p = NEWABI_P (info->output_bfd); 9382 9383 /* If this is the first symbol to need a PLT entry, then make some 9384 basic setup. Also work out PLT entry sizes. We'll need them 9385 for PLT offset calculations. */ 9386 if (htab->plt_mips_offset + htab->plt_comp_offset == 0) 9387 { 9388 BFD_ASSERT (htab->root.sgotplt->size == 0); 9389 BFD_ASSERT (htab->plt_got_index == 0); 9390 9391 /* If we're using the PLT additions to the psABI, each PLT 9392 entry is 16 bytes and the PLT0 entry is 32 bytes. 9393 Encourage better cache usage by aligning. We do this 9394 lazily to avoid pessimizing traditional objects. */ 9395 if (!htab->is_vxworks 9396 && !bfd_set_section_alignment (htab->root.splt, 5)) 9397 return FALSE; 9398 9399 /* Make sure that .got.plt is word-aligned. We do this lazily 9400 for the same reason as above. */ 9401 if (!bfd_set_section_alignment (htab->root.sgotplt, 9402 MIPS_ELF_LOG_FILE_ALIGN (dynobj))) 9403 return FALSE; 9404 9405 /* On non-VxWorks targets, the first two entries in .got.plt 9406 are reserved. */ 9407 if (!htab->is_vxworks) 9408 htab->plt_got_index 9409 += (get_elf_backend_data (dynobj)->got_header_size 9410 / MIPS_ELF_GOT_SIZE (dynobj)); 9411 9412 /* On VxWorks, also allocate room for the header's 9413 .rela.plt.unloaded entries. */ 9414 if (htab->is_vxworks && !bfd_link_pic (info)) 9415 htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela); 9416 9417 /* Now work out the sizes of individual PLT entries. */ 9418 if (htab->is_vxworks && bfd_link_pic (info)) 9419 htab->plt_mips_entry_size 9420 = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry); 9421 else if (htab->is_vxworks) 9422 htab->plt_mips_entry_size 9423 = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry); 9424 else if (newabi_p) 9425 htab->plt_mips_entry_size 9426 = 4 * ARRAY_SIZE (mips_exec_plt_entry); 9427 else if (!micromips_p) 9428 { 9429 htab->plt_mips_entry_size 9430 = 4 * ARRAY_SIZE (mips_exec_plt_entry); 9431 htab->plt_comp_entry_size 9432 = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry); 9433 } 9434 else if (htab->insn32) 9435 { 9436 htab->plt_mips_entry_size 9437 = 4 * ARRAY_SIZE (mips_exec_plt_entry); 9438 htab->plt_comp_entry_size 9439 = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry); 9440 } 9441 else 9442 { 9443 htab->plt_mips_entry_size 9444 = 4 * ARRAY_SIZE (mips_exec_plt_entry); 9445 htab->plt_comp_entry_size 9446 = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry); 9447 } 9448 } 9449 9450 if (h->plt.plist == NULL) 9451 h->plt.plist = mips_elf_make_plt_record (dynobj); 9452 if (h->plt.plist == NULL) 9453 return FALSE; 9454 9455 /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks, 9456 n32 or n64, so always use a standard entry there. 9457 9458 If the symbol has a MIPS16 call stub and gets a PLT entry, then 9459 all MIPS16 calls will go via that stub, and there is no benefit 9460 to having a MIPS16 entry. And in the case of call_stub a 9461 standard entry actually has to be used as the stub ends with a J 9462 instruction. */ 9463 if (newabi_p 9464 || htab->is_vxworks 9465 || hmips->call_stub 9466 || hmips->call_fp_stub) 9467 { 9468 h->plt.plist->need_mips = TRUE; 9469 h->plt.plist->need_comp = FALSE; 9470 } 9471 9472 /* Otherwise, if there are no direct calls to the function, we 9473 have a free choice of whether to use standard or compressed 9474 entries. Prefer microMIPS entries if the object is known to 9475 contain microMIPS code, so that it becomes possible to create 9476 pure microMIPS binaries. Prefer standard entries otherwise, 9477 because MIPS16 ones are no smaller and are usually slower. */ 9478 if (!h->plt.plist->need_mips && !h->plt.plist->need_comp) 9479 { 9480 if (micromips_p) 9481 h->plt.plist->need_comp = TRUE; 9482 else 9483 h->plt.plist->need_mips = TRUE; 9484 } 9485 9486 if (h->plt.plist->need_mips) 9487 { 9488 h->plt.plist->mips_offset = htab->plt_mips_offset; 9489 htab->plt_mips_offset += htab->plt_mips_entry_size; 9490 } 9491 if (h->plt.plist->need_comp) 9492 { 9493 h->plt.plist->comp_offset = htab->plt_comp_offset; 9494 htab->plt_comp_offset += htab->plt_comp_entry_size; 9495 } 9496 9497 /* Reserve the corresponding .got.plt entry now too. */ 9498 h->plt.plist->gotplt_index = htab->plt_got_index++; 9499 9500 /* If the output file has no definition of the symbol, set the 9501 symbol's value to the address of the stub. */ 9502 if (!bfd_link_pic (info) && !h->def_regular) 9503 hmips->use_plt_entry = TRUE; 9504 9505 /* Make room for the R_MIPS_JUMP_SLOT relocation. */ 9506 htab->root.srelplt->size += (htab->is_vxworks 9507 ? MIPS_ELF_RELA_SIZE (dynobj) 9508 : MIPS_ELF_REL_SIZE (dynobj)); 9509 9510 /* Make room for the .rela.plt.unloaded relocations. */ 9511 if (htab->is_vxworks && !bfd_link_pic (info)) 9512 htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela); 9513 9514 /* All relocations against this symbol that could have been made 9515 dynamic will now refer to the PLT entry instead. */ 9516 hmips->possibly_dynamic_relocs = 0; 9517 9518 return TRUE; 9519 } 9520 9521 /* If this is a weak symbol, and there is a real definition, the 9522 processor independent code will have arranged for us to see the 9523 real definition first, and we can just use the same value. */ 9524 if (h->is_weakalias) 9525 { 9526 struct elf_link_hash_entry *def = weakdef (h); 9527 BFD_ASSERT (def->root.type == bfd_link_hash_defined); 9528 h->root.u.def.section = def->root.u.def.section; 9529 h->root.u.def.value = def->root.u.def.value; 9530 return TRUE; 9531 } 9532 9533 /* Otherwise, there is nothing further to do for symbols defined 9534 in regular objects. */ 9535 if (h->def_regular) 9536 return TRUE; 9537 9538 /* There's also nothing more to do if we'll convert all relocations 9539 against this symbol into dynamic relocations. */ 9540 if (!hmips->has_static_relocs) 9541 return TRUE; 9542 9543 /* We're now relying on copy relocations. Complain if we have 9544 some that we can't convert. */ 9545 if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info)) 9546 { 9547 _bfd_error_handler (_("non-dynamic relocations refer to " 9548 "dynamic symbol %s"), 9549 h->root.root.string); 9550 bfd_set_error (bfd_error_bad_value); 9551 return FALSE; 9552 } 9553 9554 /* We must allocate the symbol in our .dynbss section, which will 9555 become part of the .bss section of the executable. There will be 9556 an entry for this symbol in the .dynsym section. The dynamic 9557 object will contain position independent code, so all references 9558 from the dynamic object to this symbol will go through the global 9559 offset table. The dynamic linker will use the .dynsym entry to 9560 determine the address it must put in the global offset table, so 9561 both the dynamic object and the regular object will refer to the 9562 same memory location for the variable. */ 9563 9564 if ((h->root.u.def.section->flags & SEC_READONLY) != 0) 9565 { 9566 s = htab->root.sdynrelro; 9567 srel = htab->root.sreldynrelro; 9568 } 9569 else 9570 { 9571 s = htab->root.sdynbss; 9572 srel = htab->root.srelbss; 9573 } 9574 if ((h->root.u.def.section->flags & SEC_ALLOC) != 0) 9575 { 9576 if (htab->is_vxworks) 9577 srel->size += sizeof (Elf32_External_Rela); 9578 else 9579 mips_elf_allocate_dynamic_relocations (dynobj, info, 1); 9580 h->needs_copy = 1; 9581 } 9582 9583 /* All relocations against this symbol that could have been made 9584 dynamic will now refer to the local copy instead. */ 9585 hmips->possibly_dynamic_relocs = 0; 9586 9587 return _bfd_elf_adjust_dynamic_copy (info, h, s); 9588 } 9589 9590 /* This function is called after all the input files have been read, 9591 and the input sections have been assigned to output sections. We 9592 check for any mips16 stub sections that we can discard. */ 9593 9594 bfd_boolean 9595 _bfd_mips_elf_always_size_sections (bfd *output_bfd, 9596 struct bfd_link_info *info) 9597 { 9598 asection *sect; 9599 struct mips_elf_link_hash_table *htab; 9600 struct mips_htab_traverse_info hti; 9601 9602 htab = mips_elf_hash_table (info); 9603 BFD_ASSERT (htab != NULL); 9604 9605 /* The .reginfo section has a fixed size. */ 9606 sect = bfd_get_section_by_name (output_bfd, ".reginfo"); 9607 if (sect != NULL) 9608 { 9609 bfd_set_section_size (sect, sizeof (Elf32_External_RegInfo)); 9610 sect->flags |= SEC_FIXED_SIZE | SEC_HAS_CONTENTS; 9611 } 9612 9613 /* The .MIPS.abiflags section has a fixed size. */ 9614 sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags"); 9615 if (sect != NULL) 9616 { 9617 bfd_set_section_size (sect, sizeof (Elf_External_ABIFlags_v0)); 9618 sect->flags |= SEC_FIXED_SIZE | SEC_HAS_CONTENTS; 9619 } 9620 9621 hti.info = info; 9622 hti.output_bfd = output_bfd; 9623 hti.error = FALSE; 9624 mips_elf_link_hash_traverse (mips_elf_hash_table (info), 9625 mips_elf_check_symbols, &hti); 9626 if (hti.error) 9627 return FALSE; 9628 9629 return TRUE; 9630 } 9631 9632 /* If the link uses a GOT, lay it out and work out its size. */ 9633 9634 static bfd_boolean 9635 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info) 9636 { 9637 bfd *dynobj; 9638 asection *s; 9639 struct mips_got_info *g; 9640 bfd_size_type loadable_size = 0; 9641 bfd_size_type page_gotno; 9642 bfd *ibfd; 9643 struct mips_elf_traverse_got_arg tga; 9644 struct mips_elf_link_hash_table *htab; 9645 9646 htab = mips_elf_hash_table (info); 9647 BFD_ASSERT (htab != NULL); 9648 9649 s = htab->root.sgot; 9650 if (s == NULL) 9651 return TRUE; 9652 9653 dynobj = elf_hash_table (info)->dynobj; 9654 g = htab->got_info; 9655 9656 /* Allocate room for the reserved entries. VxWorks always reserves 9657 3 entries; other objects only reserve 2 entries. */ 9658 BFD_ASSERT (g->assigned_low_gotno == 0); 9659 if (htab->is_vxworks) 9660 htab->reserved_gotno = 3; 9661 else 9662 htab->reserved_gotno = 2; 9663 g->local_gotno += htab->reserved_gotno; 9664 g->assigned_low_gotno = htab->reserved_gotno; 9665 9666 /* Decide which symbols need to go in the global part of the GOT and 9667 count the number of reloc-only GOT symbols. */ 9668 mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info); 9669 9670 if (!mips_elf_resolve_final_got_entries (info, g)) 9671 return FALSE; 9672 9673 /* Calculate the total loadable size of the output. That 9674 will give us the maximum number of GOT_PAGE entries 9675 required. */ 9676 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next) 9677 { 9678 asection *subsection; 9679 9680 for (subsection = ibfd->sections; 9681 subsection; 9682 subsection = subsection->next) 9683 { 9684 if ((subsection->flags & SEC_ALLOC) == 0) 9685 continue; 9686 loadable_size += ((subsection->size + 0xf) 9687 &~ (bfd_size_type) 0xf); 9688 } 9689 } 9690 9691 if (htab->is_vxworks) 9692 /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16 9693 relocations against local symbols evaluate to "G", and the EABI does 9694 not include R_MIPS_GOT_PAGE. */ 9695 page_gotno = 0; 9696 else 9697 /* Assume there are two loadable segments consisting of contiguous 9698 sections. Is 5 enough? */ 9699 page_gotno = (loadable_size >> 16) + 5; 9700 9701 /* Choose the smaller of the two page estimates; both are intended to be 9702 conservative. */ 9703 if (page_gotno > g->page_gotno) 9704 page_gotno = g->page_gotno; 9705 9706 g->local_gotno += page_gotno; 9707 g->assigned_high_gotno = g->local_gotno - 1; 9708 9709 s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd); 9710 s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd); 9711 s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd); 9712 9713 /* VxWorks does not support multiple GOTs. It initializes $gp to 9714 __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the 9715 dynamic loader. */ 9716 if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info)) 9717 { 9718 if (!mips_elf_multi_got (output_bfd, info, s, page_gotno)) 9719 return FALSE; 9720 } 9721 else 9722 { 9723 /* Record that all bfds use G. This also has the effect of freeing 9724 the per-bfd GOTs, which we no longer need. */ 9725 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next) 9726 if (mips_elf_bfd_got (ibfd, FALSE)) 9727 mips_elf_replace_bfd_got (ibfd, g); 9728 mips_elf_replace_bfd_got (output_bfd, g); 9729 9730 /* Set up TLS entries. */ 9731 g->tls_assigned_gotno = g->global_gotno + g->local_gotno; 9732 tga.info = info; 9733 tga.g = g; 9734 tga.value = MIPS_ELF_GOT_SIZE (output_bfd); 9735 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga); 9736 if (!tga.g) 9737 return FALSE; 9738 BFD_ASSERT (g->tls_assigned_gotno 9739 == g->global_gotno + g->local_gotno + g->tls_gotno); 9740 9741 /* Each VxWorks GOT entry needs an explicit relocation. */ 9742 if (htab->is_vxworks && bfd_link_pic (info)) 9743 g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno; 9744 9745 /* Allocate room for the TLS relocations. */ 9746 if (g->relocs) 9747 mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs); 9748 } 9749 9750 return TRUE; 9751 } 9752 9753 /* Estimate the size of the .MIPS.stubs section. */ 9754 9755 static void 9756 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info) 9757 { 9758 struct mips_elf_link_hash_table *htab; 9759 bfd_size_type dynsymcount; 9760 9761 htab = mips_elf_hash_table (info); 9762 BFD_ASSERT (htab != NULL); 9763 9764 if (htab->lazy_stub_count == 0) 9765 return; 9766 9767 /* IRIX rld assumes that a function stub isn't at the end of the .text 9768 section, so add a dummy entry to the end. */ 9769 htab->lazy_stub_count++; 9770 9771 /* Get a worst-case estimate of the number of dynamic symbols needed. 9772 At this point, dynsymcount does not account for section symbols 9773 and count_section_dynsyms may overestimate the number that will 9774 be needed. */ 9775 dynsymcount = (elf_hash_table (info)->dynsymcount 9776 + count_section_dynsyms (output_bfd, info)); 9777 9778 /* Determine the size of one stub entry. There's no disadvantage 9779 from using microMIPS code here, so for the sake of pure-microMIPS 9780 binaries we prefer it whenever there's any microMIPS code in 9781 output produced at all. This has a benefit of stubs being 9782 shorter by 4 bytes each too, unless in the insn32 mode. */ 9783 if (!MICROMIPS_P (output_bfd)) 9784 htab->function_stub_size = (dynsymcount > 0x10000 9785 ? MIPS_FUNCTION_STUB_BIG_SIZE 9786 : MIPS_FUNCTION_STUB_NORMAL_SIZE); 9787 else if (htab->insn32) 9788 htab->function_stub_size = (dynsymcount > 0x10000 9789 ? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 9790 : MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE); 9791 else 9792 htab->function_stub_size = (dynsymcount > 0x10000 9793 ? MICROMIPS_FUNCTION_STUB_BIG_SIZE 9794 : MICROMIPS_FUNCTION_STUB_NORMAL_SIZE); 9795 9796 htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size; 9797 } 9798 9799 /* A mips_elf_link_hash_traverse callback for which DATA points to a 9800 mips_htab_traverse_info. If H needs a traditional MIPS lazy-binding 9801 stub, allocate an entry in the stubs section. */ 9802 9803 static bfd_boolean 9804 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data) 9805 { 9806 struct mips_htab_traverse_info *hti = data; 9807 struct mips_elf_link_hash_table *htab; 9808 struct bfd_link_info *info; 9809 bfd *output_bfd; 9810 9811 info = hti->info; 9812 output_bfd = hti->output_bfd; 9813 htab = mips_elf_hash_table (info); 9814 BFD_ASSERT (htab != NULL); 9815 9816 if (h->needs_lazy_stub) 9817 { 9818 bfd_boolean micromips_p = MICROMIPS_P (output_bfd); 9819 unsigned int other = micromips_p ? STO_MICROMIPS : 0; 9820 bfd_vma isa_bit = micromips_p; 9821 9822 BFD_ASSERT (htab->root.dynobj != NULL); 9823 if (h->root.plt.plist == NULL) 9824 h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner); 9825 if (h->root.plt.plist == NULL) 9826 { 9827 hti->error = TRUE; 9828 return FALSE; 9829 } 9830 h->root.root.u.def.section = htab->sstubs; 9831 h->root.root.u.def.value = htab->sstubs->size + isa_bit; 9832 h->root.plt.plist->stub_offset = htab->sstubs->size; 9833 h->root.other = other; 9834 htab->sstubs->size += htab->function_stub_size; 9835 } 9836 return TRUE; 9837 } 9838 9839 /* Allocate offsets in the stubs section to each symbol that needs one. 9840 Set the final size of the .MIPS.stub section. */ 9841 9842 static bfd_boolean 9843 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info) 9844 { 9845 bfd *output_bfd = info->output_bfd; 9846 bfd_boolean micromips_p = MICROMIPS_P (output_bfd); 9847 unsigned int other = micromips_p ? STO_MICROMIPS : 0; 9848 bfd_vma isa_bit = micromips_p; 9849 struct mips_elf_link_hash_table *htab; 9850 struct mips_htab_traverse_info hti; 9851 struct elf_link_hash_entry *h; 9852 bfd *dynobj; 9853 9854 htab = mips_elf_hash_table (info); 9855 BFD_ASSERT (htab != NULL); 9856 9857 if (htab->lazy_stub_count == 0) 9858 return TRUE; 9859 9860 htab->sstubs->size = 0; 9861 hti.info = info; 9862 hti.output_bfd = output_bfd; 9863 hti.error = FALSE; 9864 mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti); 9865 if (hti.error) 9866 return FALSE; 9867 htab->sstubs->size += htab->function_stub_size; 9868 BFD_ASSERT (htab->sstubs->size 9869 == htab->lazy_stub_count * htab->function_stub_size); 9870 9871 dynobj = elf_hash_table (info)->dynobj; 9872 BFD_ASSERT (dynobj != NULL); 9873 h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_"); 9874 if (h == NULL) 9875 return FALSE; 9876 h->root.u.def.value = isa_bit; 9877 h->other = other; 9878 h->type = STT_FUNC; 9879 9880 return TRUE; 9881 } 9882 9883 /* A mips_elf_link_hash_traverse callback for which DATA points to a 9884 bfd_link_info. If H uses the address of a PLT entry as the value 9885 of the symbol, then set the entry in the symbol table now. Prefer 9886 a standard MIPS PLT entry. */ 9887 9888 static bfd_boolean 9889 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data) 9890 { 9891 struct bfd_link_info *info = data; 9892 bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd); 9893 struct mips_elf_link_hash_table *htab; 9894 unsigned int other; 9895 bfd_vma isa_bit; 9896 bfd_vma val; 9897 9898 htab = mips_elf_hash_table (info); 9899 BFD_ASSERT (htab != NULL); 9900 9901 if (h->use_plt_entry) 9902 { 9903 BFD_ASSERT (h->root.plt.plist != NULL); 9904 BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE 9905 || h->root.plt.plist->comp_offset != MINUS_ONE); 9906 9907 val = htab->plt_header_size; 9908 if (h->root.plt.plist->mips_offset != MINUS_ONE) 9909 { 9910 isa_bit = 0; 9911 val += h->root.plt.plist->mips_offset; 9912 other = 0; 9913 } 9914 else 9915 { 9916 isa_bit = 1; 9917 val += htab->plt_mips_offset + h->root.plt.plist->comp_offset; 9918 other = micromips_p ? STO_MICROMIPS : STO_MIPS16; 9919 } 9920 val += isa_bit; 9921 /* For VxWorks, point at the PLT load stub rather than the lazy 9922 resolution stub; this stub will become the canonical function 9923 address. */ 9924 if (htab->is_vxworks) 9925 val += 8; 9926 9927 h->root.root.u.def.section = htab->root.splt; 9928 h->root.root.u.def.value = val; 9929 h->root.other = other; 9930 } 9931 9932 return TRUE; 9933 } 9934 9935 /* Set the sizes of the dynamic sections. */ 9936 9937 bfd_boolean 9938 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, 9939 struct bfd_link_info *info) 9940 { 9941 bfd *dynobj; 9942 asection *s, *sreldyn; 9943 bfd_boolean reltext; 9944 struct mips_elf_link_hash_table *htab; 9945 9946 htab = mips_elf_hash_table (info); 9947 BFD_ASSERT (htab != NULL); 9948 dynobj = elf_hash_table (info)->dynobj; 9949 BFD_ASSERT (dynobj != NULL); 9950 9951 if (elf_hash_table (info)->dynamic_sections_created) 9952 { 9953 /* Set the contents of the .interp section to the interpreter. */ 9954 if (bfd_link_executable (info) && !info->nointerp) 9955 { 9956 s = bfd_get_linker_section (dynobj, ".interp"); 9957 BFD_ASSERT (s != NULL); 9958 s->size 9959 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1; 9960 s->contents 9961 = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd); 9962 } 9963 9964 /* Figure out the size of the PLT header if we know that we 9965 are using it. For the sake of cache alignment always use 9966 a standard header whenever any standard entries are present 9967 even if microMIPS entries are present as well. This also 9968 lets the microMIPS header rely on the value of $v0 only set 9969 by microMIPS entries, for a small size reduction. 9970 9971 Set symbol table entry values for symbols that use the 9972 address of their PLT entry now that we can calculate it. 9973 9974 Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we 9975 haven't already in _bfd_elf_create_dynamic_sections. */ 9976 if (htab->root.splt && htab->plt_mips_offset + htab->plt_comp_offset != 0) 9977 { 9978 bfd_boolean micromips_p = (MICROMIPS_P (output_bfd) 9979 && !htab->plt_mips_offset); 9980 unsigned int other = micromips_p ? STO_MICROMIPS : 0; 9981 bfd_vma isa_bit = micromips_p; 9982 struct elf_link_hash_entry *h; 9983 bfd_vma size; 9984 9985 BFD_ASSERT (htab->use_plts_and_copy_relocs); 9986 BFD_ASSERT (htab->root.sgotplt->size == 0); 9987 BFD_ASSERT (htab->root.splt->size == 0); 9988 9989 if (htab->is_vxworks && bfd_link_pic (info)) 9990 size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry); 9991 else if (htab->is_vxworks) 9992 size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry); 9993 else if (ABI_64_P (output_bfd)) 9994 size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry); 9995 else if (ABI_N32_P (output_bfd)) 9996 size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry); 9997 else if (!micromips_p) 9998 size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry); 9999 else if (htab->insn32) 10000 size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); 10001 else 10002 size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry); 10003 10004 htab->plt_header_is_comp = micromips_p; 10005 htab->plt_header_size = size; 10006 htab->root.splt->size = (size 10007 + htab->plt_mips_offset 10008 + htab->plt_comp_offset); 10009 htab->root.sgotplt->size = (htab->plt_got_index 10010 * MIPS_ELF_GOT_SIZE (dynobj)); 10011 10012 mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info); 10013 10014 if (htab->root.hplt == NULL) 10015 { 10016 h = _bfd_elf_define_linkage_sym (dynobj, info, htab->root.splt, 10017 "_PROCEDURE_LINKAGE_TABLE_"); 10018 htab->root.hplt = h; 10019 if (h == NULL) 10020 return FALSE; 10021 } 10022 10023 h = htab->root.hplt; 10024 h->root.u.def.value = isa_bit; 10025 h->other = other; 10026 h->type = STT_FUNC; 10027 } 10028 } 10029 10030 /* Allocate space for global sym dynamic relocs. */ 10031 elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info); 10032 10033 mips_elf_estimate_stub_size (output_bfd, info); 10034 10035 if (!mips_elf_lay_out_got (output_bfd, info)) 10036 return FALSE; 10037 10038 mips_elf_lay_out_lazy_stubs (info); 10039 10040 /* The check_relocs and adjust_dynamic_symbol entry points have 10041 determined the sizes of the various dynamic sections. Allocate 10042 memory for them. */ 10043 reltext = FALSE; 10044 for (s = dynobj->sections; s != NULL; s = s->next) 10045 { 10046 const char *name; 10047 10048 /* It's OK to base decisions on the section name, because none 10049 of the dynobj section names depend upon the input files. */ 10050 name = bfd_section_name (s); 10051 10052 if ((s->flags & SEC_LINKER_CREATED) == 0) 10053 continue; 10054 10055 if (CONST_STRNEQ (name, ".rel")) 10056 { 10057 if (s->size != 0) 10058 { 10059 const char *outname; 10060 asection *target; 10061 10062 /* If this relocation section applies to a read only 10063 section, then we probably need a DT_TEXTREL entry. 10064 If the relocation section is .rel(a).dyn, we always 10065 assert a DT_TEXTREL entry rather than testing whether 10066 there exists a relocation to a read only section or 10067 not. */ 10068 outname = bfd_section_name (s->output_section); 10069 target = bfd_get_section_by_name (output_bfd, outname + 4); 10070 if ((target != NULL 10071 && (target->flags & SEC_READONLY) != 0 10072 && (target->flags & SEC_ALLOC) != 0) 10073 || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0) 10074 reltext = TRUE; 10075 10076 /* We use the reloc_count field as a counter if we need 10077 to copy relocs into the output file. */ 10078 if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0) 10079 s->reloc_count = 0; 10080 10081 /* If combreloc is enabled, elf_link_sort_relocs() will 10082 sort relocations, but in a different way than we do, 10083 and before we're done creating relocations. Also, it 10084 will move them around between input sections' 10085 relocation's contents, so our sorting would be 10086 broken, so don't let it run. */ 10087 info->combreloc = 0; 10088 } 10089 } 10090 else if (bfd_link_executable (info) 10091 && ! mips_elf_hash_table (info)->use_rld_obj_head 10092 && CONST_STRNEQ (name, ".rld_map")) 10093 { 10094 /* We add a room for __rld_map. It will be filled in by the 10095 rtld to contain a pointer to the _r_debug structure. */ 10096 s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd); 10097 } 10098 else if (SGI_COMPAT (output_bfd) 10099 && CONST_STRNEQ (name, ".compact_rel")) 10100 s->size += mips_elf_hash_table (info)->compact_rel_size; 10101 else if (s == htab->root.splt) 10102 { 10103 /* If the last PLT entry has a branch delay slot, allocate 10104 room for an extra nop to fill the delay slot. This is 10105 for CPUs without load interlocking. */ 10106 if (! LOAD_INTERLOCKS_P (output_bfd) 10107 && ! htab->is_vxworks && s->size > 0) 10108 s->size += 4; 10109 } 10110 else if (! CONST_STRNEQ (name, ".init") 10111 && s != htab->root.sgot 10112 && s != htab->root.sgotplt 10113 && s != htab->sstubs 10114 && s != htab->root.sdynbss 10115 && s != htab->root.sdynrelro) 10116 { 10117 /* It's not one of our sections, so don't allocate space. */ 10118 continue; 10119 } 10120 10121 if (s->size == 0) 10122 { 10123 s->flags |= SEC_EXCLUDE; 10124 continue; 10125 } 10126 10127 if ((s->flags & SEC_HAS_CONTENTS) == 0) 10128 continue; 10129 10130 /* Allocate memory for the section contents. */ 10131 s->contents = bfd_zalloc (dynobj, s->size); 10132 if (s->contents == NULL) 10133 { 10134 bfd_set_error (bfd_error_no_memory); 10135 return FALSE; 10136 } 10137 } 10138 10139 if (elf_hash_table (info)->dynamic_sections_created) 10140 { 10141 /* Add some entries to the .dynamic section. We fill in the 10142 values later, in _bfd_mips_elf_finish_dynamic_sections, but we 10143 must add the entries now so that we get the correct size for 10144 the .dynamic section. */ 10145 10146 /* SGI object has the equivalence of DT_DEBUG in the 10147 DT_MIPS_RLD_MAP entry. This must come first because glibc 10148 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools 10149 may only look at the first one they see. */ 10150 if (!bfd_link_pic (info) 10151 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0)) 10152 return FALSE; 10153 10154 if (bfd_link_executable (info) 10155 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0)) 10156 return FALSE; 10157 10158 /* The DT_DEBUG entry may be filled in by the dynamic linker and 10159 used by the debugger. */ 10160 if (bfd_link_executable (info) 10161 && !SGI_COMPAT (output_bfd) 10162 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0)) 10163 return FALSE; 10164 10165 if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks)) 10166 info->flags |= DF_TEXTREL; 10167 10168 if ((info->flags & DF_TEXTREL) != 0) 10169 { 10170 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0)) 10171 return FALSE; 10172 10173 /* Clear the DF_TEXTREL flag. It will be set again if we 10174 write out an actual text relocation; we may not, because 10175 at this point we do not know whether e.g. any .eh_frame 10176 absolute relocations have been converted to PC-relative. */ 10177 info->flags &= ~DF_TEXTREL; 10178 } 10179 10180 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0)) 10181 return FALSE; 10182 10183 sreldyn = mips_elf_rel_dyn_section (info, FALSE); 10184 if (htab->is_vxworks) 10185 { 10186 /* VxWorks uses .rela.dyn instead of .rel.dyn. It does not 10187 use any of the DT_MIPS_* tags. */ 10188 if (sreldyn && sreldyn->size > 0) 10189 { 10190 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0)) 10191 return FALSE; 10192 10193 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0)) 10194 return FALSE; 10195 10196 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0)) 10197 return FALSE; 10198 } 10199 } 10200 else 10201 { 10202 if (sreldyn && sreldyn->size > 0 10203 && !bfd_is_abs_section (sreldyn->output_section)) 10204 { 10205 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0)) 10206 return FALSE; 10207 10208 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0)) 10209 return FALSE; 10210 10211 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0)) 10212 return FALSE; 10213 } 10214 10215 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0)) 10216 return FALSE; 10217 10218 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0)) 10219 return FALSE; 10220 10221 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0)) 10222 return FALSE; 10223 10224 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0)) 10225 return FALSE; 10226 10227 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0)) 10228 return FALSE; 10229 10230 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0)) 10231 return FALSE; 10232 10233 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0)) 10234 return FALSE; 10235 10236 if (info->emit_gnu_hash 10237 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_XHASH, 0)) 10238 return FALSE; 10239 10240 if (IRIX_COMPAT (dynobj) == ict_irix5 10241 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0)) 10242 return FALSE; 10243 10244 if (IRIX_COMPAT (dynobj) == ict_irix6 10245 && (bfd_get_section_by_name 10246 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj))) 10247 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0)) 10248 return FALSE; 10249 } 10250 if (htab->root.splt->size > 0) 10251 { 10252 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0)) 10253 return FALSE; 10254 10255 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0)) 10256 return FALSE; 10257 10258 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0)) 10259 return FALSE; 10260 10261 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0)) 10262 return FALSE; 10263 } 10264 if (htab->is_vxworks 10265 && !elf_vxworks_add_dynamic_entries (output_bfd, info)) 10266 return FALSE; 10267 } 10268 10269 return TRUE; 10270 } 10271 10272 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD. 10273 Adjust its R_ADDEND field so that it is correct for the output file. 10274 LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols 10275 and sections respectively; both use symbol indexes. */ 10276 10277 static void 10278 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info, 10279 bfd *input_bfd, Elf_Internal_Sym *local_syms, 10280 asection **local_sections, Elf_Internal_Rela *rel) 10281 { 10282 unsigned int r_type, r_symndx; 10283 Elf_Internal_Sym *sym; 10284 asection *sec; 10285 10286 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections)) 10287 { 10288 r_type = ELF_R_TYPE (output_bfd, rel->r_info); 10289 if (gprel16_reloc_p (r_type) 10290 || r_type == R_MIPS_GPREL32 10291 || literal_reloc_p (r_type)) 10292 { 10293 rel->r_addend += _bfd_get_gp_value (input_bfd); 10294 rel->r_addend -= _bfd_get_gp_value (output_bfd); 10295 } 10296 10297 r_symndx = ELF_R_SYM (output_bfd, rel->r_info); 10298 sym = local_syms + r_symndx; 10299 10300 /* Adjust REL's addend to account for section merging. */ 10301 if (!bfd_link_relocatable (info)) 10302 { 10303 sec = local_sections[r_symndx]; 10304 _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); 10305 } 10306 10307 /* This would normally be done by the rela_normal code in elflink.c. */ 10308 if (ELF_ST_TYPE (sym->st_info) == STT_SECTION) 10309 rel->r_addend += local_sections[r_symndx]->output_offset; 10310 } 10311 } 10312 10313 /* Handle relocations against symbols from removed linkonce sections, 10314 or sections discarded by a linker script. We use this wrapper around 10315 RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs 10316 on 64-bit ELF targets. In this case for any relocation handled, which 10317 always be the first in a triplet, the remaining two have to be processed 10318 together with the first, even if they are R_MIPS_NONE. It is the symbol 10319 index referred by the first reloc that applies to all the three and the 10320 remaining two never refer to an object symbol. And it is the final 10321 relocation (the last non-null one) that determines the output field of 10322 the whole relocation so retrieve the corresponding howto structure for 10323 the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION. 10324 10325 Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue" 10326 and therefore requires to be pasted in a loop. It also defines a block 10327 and does not protect any of its arguments, hence the extra brackets. */ 10328 10329 static void 10330 mips_reloc_against_discarded_section (bfd *output_bfd, 10331 struct bfd_link_info *info, 10332 bfd *input_bfd, asection *input_section, 10333 Elf_Internal_Rela **rel, 10334 const Elf_Internal_Rela **relend, 10335 bfd_boolean rel_reloc, 10336 reloc_howto_type *howto, 10337 bfd_byte *contents) 10338 { 10339 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); 10340 int count = bed->s->int_rels_per_ext_rel; 10341 unsigned int r_type; 10342 int i; 10343 10344 for (i = count - 1; i > 0; i--) 10345 { 10346 r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info); 10347 if (r_type != R_MIPS_NONE) 10348 { 10349 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc); 10350 break; 10351 } 10352 } 10353 do 10354 { 10355 RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, 10356 (*rel), count, (*relend), 10357 howto, i, contents); 10358 } 10359 while (0); 10360 } 10361 10362 /* Relocate a MIPS ELF section. */ 10363 10364 bfd_boolean 10365 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, 10366 bfd *input_bfd, asection *input_section, 10367 bfd_byte *contents, Elf_Internal_Rela *relocs, 10368 Elf_Internal_Sym *local_syms, 10369 asection **local_sections) 10370 { 10371 Elf_Internal_Rela *rel; 10372 const Elf_Internal_Rela *relend; 10373 bfd_vma addend = 0; 10374 bfd_boolean use_saved_addend_p = FALSE; 10375 10376 relend = relocs + input_section->reloc_count; 10377 for (rel = relocs; rel < relend; ++rel) 10378 { 10379 const char *name; 10380 bfd_vma value = 0; 10381 reloc_howto_type *howto; 10382 bfd_boolean cross_mode_jump_p = FALSE; 10383 /* TRUE if the relocation is a RELA relocation, rather than a 10384 REL relocation. */ 10385 bfd_boolean rela_relocation_p = TRUE; 10386 unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info); 10387 const char *msg; 10388 unsigned long r_symndx; 10389 asection *sec; 10390 Elf_Internal_Shdr *symtab_hdr; 10391 struct elf_link_hash_entry *h; 10392 bfd_boolean rel_reloc; 10393 10394 rel_reloc = (NEWABI_P (input_bfd) 10395 && mips_elf_rel_relocation_p (input_bfd, input_section, 10396 relocs, rel)); 10397 /* Find the relocation howto for this relocation. */ 10398 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc); 10399 10400 r_symndx = ELF_R_SYM (input_bfd, rel->r_info); 10401 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; 10402 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections)) 10403 { 10404 sec = local_sections[r_symndx]; 10405 h = NULL; 10406 } 10407 else 10408 { 10409 unsigned long extsymoff; 10410 10411 extsymoff = 0; 10412 if (!elf_bad_symtab (input_bfd)) 10413 extsymoff = symtab_hdr->sh_info; 10414 h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff]; 10415 while (h->root.type == bfd_link_hash_indirect 10416 || h->root.type == bfd_link_hash_warning) 10417 h = (struct elf_link_hash_entry *) h->root.u.i.link; 10418 10419 sec = NULL; 10420 if (h->root.type == bfd_link_hash_defined 10421 || h->root.type == bfd_link_hash_defweak) 10422 sec = h->root.u.def.section; 10423 } 10424 10425 if (sec != NULL && discarded_section (sec)) 10426 { 10427 mips_reloc_against_discarded_section (output_bfd, info, input_bfd, 10428 input_section, &rel, &relend, 10429 rel_reloc, howto, contents); 10430 continue; 10431 } 10432 10433 if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd)) 10434 { 10435 /* Some 32-bit code uses R_MIPS_64. In particular, people use 10436 64-bit code, but make sure all their addresses are in the 10437 lowermost or uppermost 32-bit section of the 64-bit address 10438 space. Thus, when they use an R_MIPS_64 they mean what is 10439 usually meant by R_MIPS_32, with the exception that the 10440 stored value is sign-extended to 64 bits. */ 10441 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE); 10442 10443 /* On big-endian systems, we need to lie about the position 10444 of the reloc. */ 10445 if (bfd_big_endian (input_bfd)) 10446 rel->r_offset += 4; 10447 } 10448 10449 if (!use_saved_addend_p) 10450 { 10451 /* If these relocations were originally of the REL variety, 10452 we must pull the addend out of the field that will be 10453 relocated. Otherwise, we simply use the contents of the 10454 RELA relocation. */ 10455 if (mips_elf_rel_relocation_p (input_bfd, input_section, 10456 relocs, rel)) 10457 { 10458 rela_relocation_p = FALSE; 10459 addend = mips_elf_read_rel_addend (input_bfd, rel, 10460 howto, contents); 10461 if (hi16_reloc_p (r_type) 10462 || (got16_reloc_p (r_type) 10463 && mips_elf_local_relocation_p (input_bfd, rel, 10464 local_sections))) 10465 { 10466 if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend, 10467 contents, &addend)) 10468 { 10469 if (h) 10470 name = h->root.root.string; 10471 else 10472 name = bfd_elf_sym_name (input_bfd, symtab_hdr, 10473 local_syms + r_symndx, 10474 sec); 10475 _bfd_error_handler 10476 /* xgettext:c-format */ 10477 (_("%pB: can't find matching LO16 reloc against `%s'" 10478 " for %s at %#" PRIx64 " in section `%pA'"), 10479 input_bfd, name, 10480 howto->name, (uint64_t) rel->r_offset, input_section); 10481 } 10482 } 10483 else 10484 addend <<= howto->rightshift; 10485 } 10486 else 10487 addend = rel->r_addend; 10488 mips_elf_adjust_addend (output_bfd, info, input_bfd, 10489 local_syms, local_sections, rel); 10490 } 10491 10492 if (bfd_link_relocatable (info)) 10493 { 10494 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd) 10495 && bfd_big_endian (input_bfd)) 10496 rel->r_offset -= 4; 10497 10498 if (!rela_relocation_p && rel->r_addend) 10499 { 10500 addend += rel->r_addend; 10501 if (hi16_reloc_p (r_type) || got16_reloc_p (r_type)) 10502 addend = mips_elf_high (addend); 10503 else if (r_type == R_MIPS_HIGHER) 10504 addend = mips_elf_higher (addend); 10505 else if (r_type == R_MIPS_HIGHEST) 10506 addend = mips_elf_highest (addend); 10507 else 10508 addend >>= howto->rightshift; 10509 10510 /* We use the source mask, rather than the destination 10511 mask because the place to which we are writing will be 10512 source of the addend in the final link. */ 10513 addend &= howto->src_mask; 10514 10515 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)) 10516 /* See the comment above about using R_MIPS_64 in the 32-bit 10517 ABI. Here, we need to update the addend. It would be 10518 possible to get away with just using the R_MIPS_32 reloc 10519 but for endianness. */ 10520 { 10521 bfd_vma sign_bits; 10522 bfd_vma low_bits; 10523 bfd_vma high_bits; 10524 10525 if (addend & ((bfd_vma) 1 << 31)) 10526 #ifdef BFD64 10527 sign_bits = ((bfd_vma) 1 << 32) - 1; 10528 #else 10529 sign_bits = -1; 10530 #endif 10531 else 10532 sign_bits = 0; 10533 10534 /* If we don't know that we have a 64-bit type, 10535 do two separate stores. */ 10536 if (bfd_big_endian (input_bfd)) 10537 { 10538 /* Store the sign-bits (which are most significant) 10539 first. */ 10540 low_bits = sign_bits; 10541 high_bits = addend; 10542 } 10543 else 10544 { 10545 low_bits = addend; 10546 high_bits = sign_bits; 10547 } 10548 bfd_put_32 (input_bfd, low_bits, 10549 contents + rel->r_offset); 10550 bfd_put_32 (input_bfd, high_bits, 10551 contents + rel->r_offset + 4); 10552 continue; 10553 } 10554 10555 if (! mips_elf_perform_relocation (info, howto, rel, addend, 10556 input_bfd, input_section, 10557 contents, FALSE)) 10558 return FALSE; 10559 } 10560 10561 /* Go on to the next relocation. */ 10562 continue; 10563 } 10564 10565 /* In the N32 and 64-bit ABIs there may be multiple consecutive 10566 relocations for the same offset. In that case we are 10567 supposed to treat the output of each relocation as the addend 10568 for the next. */ 10569 if (rel + 1 < relend 10570 && rel->r_offset == rel[1].r_offset 10571 && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE) 10572 use_saved_addend_p = TRUE; 10573 else 10574 use_saved_addend_p = FALSE; 10575 10576 /* Figure out what value we are supposed to relocate. */ 10577 switch (mips_elf_calculate_relocation (output_bfd, input_bfd, 10578 input_section, contents, 10579 info, rel, addend, howto, 10580 local_syms, local_sections, 10581 &value, &name, &cross_mode_jump_p, 10582 use_saved_addend_p)) 10583 { 10584 case bfd_reloc_continue: 10585 /* There's nothing to do. */ 10586 continue; 10587 10588 case bfd_reloc_undefined: 10589 /* mips_elf_calculate_relocation already called the 10590 undefined_symbol callback. There's no real point in 10591 trying to perform the relocation at this point, so we 10592 just skip ahead to the next relocation. */ 10593 continue; 10594 10595 case bfd_reloc_notsupported: 10596 msg = _("internal error: unsupported relocation error"); 10597 info->callbacks->warning 10598 (info, msg, name, input_bfd, input_section, rel->r_offset); 10599 return FALSE; 10600 10601 case bfd_reloc_overflow: 10602 if (use_saved_addend_p) 10603 /* Ignore overflow until we reach the last relocation for 10604 a given location. */ 10605 ; 10606 else 10607 { 10608 struct mips_elf_link_hash_table *htab; 10609 10610 htab = mips_elf_hash_table (info); 10611 BFD_ASSERT (htab != NULL); 10612 BFD_ASSERT (name != NULL); 10613 if (!htab->small_data_overflow_reported 10614 && (gprel16_reloc_p (howto->type) 10615 || literal_reloc_p (howto->type))) 10616 { 10617 msg = _("small-data section exceeds 64KB;" 10618 " lower small-data size limit (see option -G)"); 10619 10620 htab->small_data_overflow_reported = TRUE; 10621 (*info->callbacks->einfo) ("%P: %s\n", msg); 10622 } 10623 (*info->callbacks->reloc_overflow) 10624 (info, NULL, name, howto->name, (bfd_vma) 0, 10625 input_bfd, input_section, rel->r_offset); 10626 } 10627 break; 10628 10629 case bfd_reloc_ok: 10630 break; 10631 10632 case bfd_reloc_outofrange: 10633 msg = NULL; 10634 if (jal_reloc_p (howto->type)) 10635 msg = (cross_mode_jump_p 10636 ? _("cannot convert a jump to JALX " 10637 "for a non-word-aligned address") 10638 : (howto->type == R_MIPS16_26 10639 ? _("jump to a non-word-aligned address") 10640 : _("jump to a non-instruction-aligned address"))); 10641 else if (b_reloc_p (howto->type)) 10642 msg = (cross_mode_jump_p 10643 ? _("cannot convert a branch to JALX " 10644 "for a non-word-aligned address") 10645 : _("branch to a non-instruction-aligned address")); 10646 else if (aligned_pcrel_reloc_p (howto->type)) 10647 msg = _("PC-relative load from unaligned address"); 10648 if (msg) 10649 { 10650 info->callbacks->einfo 10651 ("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg); 10652 break; 10653 } 10654 /* Fall through. */ 10655 10656 default: 10657 abort (); 10658 break; 10659 } 10660 10661 /* If we've got another relocation for the address, keep going 10662 until we reach the last one. */ 10663 if (use_saved_addend_p) 10664 { 10665 addend = value; 10666 continue; 10667 } 10668 10669 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)) 10670 /* See the comment above about using R_MIPS_64 in the 32-bit 10671 ABI. Until now, we've been using the HOWTO for R_MIPS_32; 10672 that calculated the right value. Now, however, we 10673 sign-extend the 32-bit result to 64-bits, and store it as a 10674 64-bit value. We are especially generous here in that we 10675 go to extreme lengths to support this usage on systems with 10676 only a 32-bit VMA. */ 10677 { 10678 bfd_vma sign_bits; 10679 bfd_vma low_bits; 10680 bfd_vma high_bits; 10681 10682 if (value & ((bfd_vma) 1 << 31)) 10683 #ifdef BFD64 10684 sign_bits = ((bfd_vma) 1 << 32) - 1; 10685 #else 10686 sign_bits = -1; 10687 #endif 10688 else 10689 sign_bits = 0; 10690 10691 /* If we don't know that we have a 64-bit type, 10692 do two separate stores. */ 10693 if (bfd_big_endian (input_bfd)) 10694 { 10695 /* Undo what we did above. */ 10696 rel->r_offset -= 4; 10697 /* Store the sign-bits (which are most significant) 10698 first. */ 10699 low_bits = sign_bits; 10700 high_bits = value; 10701 } 10702 else 10703 { 10704 low_bits = value; 10705 high_bits = sign_bits; 10706 } 10707 bfd_put_32 (input_bfd, low_bits, 10708 contents + rel->r_offset); 10709 bfd_put_32 (input_bfd, high_bits, 10710 contents + rel->r_offset + 4); 10711 continue; 10712 } 10713 10714 /* Actually perform the relocation. */ 10715 if (! mips_elf_perform_relocation (info, howto, rel, value, 10716 input_bfd, input_section, 10717 contents, cross_mode_jump_p)) 10718 return FALSE; 10719 } 10720 10721 return TRUE; 10722 } 10723 10724 /* A function that iterates over each entry in la25_stubs and fills 10725 in the code for each one. DATA points to a mips_htab_traverse_info. */ 10726 10727 static int 10728 mips_elf_create_la25_stub (void **slot, void *data) 10729 { 10730 struct mips_htab_traverse_info *hti; 10731 struct mips_elf_link_hash_table *htab; 10732 struct mips_elf_la25_stub *stub; 10733 asection *s; 10734 bfd_byte *loc; 10735 bfd_vma offset, target, target_high, target_low; 10736 bfd_vma branch_pc; 10737 bfd_signed_vma pcrel_offset = 0; 10738 10739 stub = (struct mips_elf_la25_stub *) *slot; 10740 hti = (struct mips_htab_traverse_info *) data; 10741 htab = mips_elf_hash_table (hti->info); 10742 BFD_ASSERT (htab != NULL); 10743 10744 /* Create the section contents, if we haven't already. */ 10745 s = stub->stub_section; 10746 loc = s->contents; 10747 if (loc == NULL) 10748 { 10749 loc = bfd_malloc (s->size); 10750 if (loc == NULL) 10751 { 10752 hti->error = TRUE; 10753 return FALSE; 10754 } 10755 s->contents = loc; 10756 } 10757 10758 /* Work out where in the section this stub should go. */ 10759 offset = stub->offset; 10760 10761 /* We add 8 here to account for the LUI/ADDIU instructions 10762 before the branch instruction. This cannot be moved down to 10763 where pcrel_offset is calculated as 's' is updated in 10764 mips_elf_get_la25_target. */ 10765 branch_pc = s->output_section->vma + s->output_offset + offset + 8; 10766 10767 /* Work out the target address. */ 10768 target = mips_elf_get_la25_target (stub, &s); 10769 target += s->output_section->vma + s->output_offset; 10770 10771 target_high = ((target + 0x8000) >> 16) & 0xffff; 10772 target_low = (target & 0xffff); 10773 10774 /* Calculate the PC of the compact branch instruction (for the case where 10775 compact branches are used for either microMIPSR6 or MIPSR6 with 10776 compact branches. Add 4-bytes to account for BC using the PC of the 10777 next instruction as the base. */ 10778 pcrel_offset = target - (branch_pc + 4); 10779 10780 if (stub->stub_section != htab->strampoline) 10781 { 10782 /* This is a simple LUI/ADDIU stub. Zero out the beginning 10783 of the section and write the two instructions at the end. */ 10784 memset (loc, 0, offset); 10785 loc += offset; 10786 if (ELF_ST_IS_MICROMIPS (stub->h->root.other)) 10787 { 10788 bfd_put_micromips_32 (hti->output_bfd, 10789 LA25_LUI_MICROMIPS (target_high), 10790 loc); 10791 bfd_put_micromips_32 (hti->output_bfd, 10792 LA25_ADDIU_MICROMIPS (target_low), 10793 loc + 4); 10794 } 10795 else 10796 { 10797 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc); 10798 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4); 10799 } 10800 } 10801 else 10802 { 10803 /* This is trampoline. */ 10804 loc += offset; 10805 if (ELF_ST_IS_MICROMIPS (stub->h->root.other)) 10806 { 10807 bfd_put_micromips_32 (hti->output_bfd, 10808 LA25_LUI_MICROMIPS (target_high), loc); 10809 bfd_put_micromips_32 (hti->output_bfd, 10810 LA25_J_MICROMIPS (target), loc + 4); 10811 bfd_put_micromips_32 (hti->output_bfd, 10812 LA25_ADDIU_MICROMIPS (target_low), loc + 8); 10813 bfd_put_32 (hti->output_bfd, 0, loc + 12); 10814 } 10815 else 10816 { 10817 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc); 10818 if (MIPSR6_P (hti->output_bfd) && htab->compact_branches) 10819 { 10820 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4); 10821 bfd_put_32 (hti->output_bfd, LA25_BC (pcrel_offset), loc + 8); 10822 } 10823 else 10824 { 10825 bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4); 10826 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8); 10827 } 10828 bfd_put_32 (hti->output_bfd, 0, loc + 12); 10829 } 10830 } 10831 return TRUE; 10832 } 10833 10834 /* If NAME is one of the special IRIX6 symbols defined by the linker, 10835 adjust it appropriately now. */ 10836 10837 static void 10838 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED, 10839 const char *name, Elf_Internal_Sym *sym) 10840 { 10841 /* The linker script takes care of providing names and values for 10842 these, but we must place them into the right sections. */ 10843 static const char* const text_section_symbols[] = { 10844 "_ftext", 10845 "_etext", 10846 "__dso_displacement", 10847 "__elf_header", 10848 "__program_header_table", 10849 NULL 10850 }; 10851 10852 static const char* const data_section_symbols[] = { 10853 "_fdata", 10854 "_edata", 10855 "_end", 10856 "_fbss", 10857 NULL 10858 }; 10859 10860 const char* const *p; 10861 int i; 10862 10863 for (i = 0; i < 2; ++i) 10864 for (p = (i == 0) ? text_section_symbols : data_section_symbols; 10865 *p; 10866 ++p) 10867 if (strcmp (*p, name) == 0) 10868 { 10869 /* All of these symbols are given type STT_SECTION by the 10870 IRIX6 linker. */ 10871 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 10872 sym->st_other = STO_PROTECTED; 10873 10874 /* The IRIX linker puts these symbols in special sections. */ 10875 if (i == 0) 10876 sym->st_shndx = SHN_MIPS_TEXT; 10877 else 10878 sym->st_shndx = SHN_MIPS_DATA; 10879 10880 break; 10881 } 10882 } 10883 10884 /* Finish up dynamic symbol handling. We set the contents of various 10885 dynamic sections here. */ 10886 10887 bfd_boolean 10888 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, 10889 struct bfd_link_info *info, 10890 struct elf_link_hash_entry *h, 10891 Elf_Internal_Sym *sym) 10892 { 10893 bfd *dynobj; 10894 asection *sgot; 10895 struct mips_got_info *g, *gg; 10896 const char *name; 10897 int idx; 10898 struct mips_elf_link_hash_table *htab; 10899 struct mips_elf_link_hash_entry *hmips; 10900 10901 htab = mips_elf_hash_table (info); 10902 BFD_ASSERT (htab != NULL); 10903 dynobj = elf_hash_table (info)->dynobj; 10904 hmips = (struct mips_elf_link_hash_entry *) h; 10905 10906 BFD_ASSERT (!htab->is_vxworks); 10907 10908 if (h->plt.plist != NULL 10909 && (h->plt.plist->mips_offset != MINUS_ONE 10910 || h->plt.plist->comp_offset != MINUS_ONE)) 10911 { 10912 /* We've decided to create a PLT entry for this symbol. */ 10913 bfd_byte *loc; 10914 bfd_vma header_address, got_address; 10915 bfd_vma got_address_high, got_address_low, load; 10916 bfd_vma got_index; 10917 bfd_vma isa_bit; 10918 10919 got_index = h->plt.plist->gotplt_index; 10920 10921 BFD_ASSERT (htab->use_plts_and_copy_relocs); 10922 BFD_ASSERT (h->dynindx != -1); 10923 BFD_ASSERT (htab->root.splt != NULL); 10924 BFD_ASSERT (got_index != MINUS_ONE); 10925 BFD_ASSERT (!h->def_regular); 10926 10927 /* Calculate the address of the PLT header. */ 10928 isa_bit = htab->plt_header_is_comp; 10929 header_address = (htab->root.splt->output_section->vma 10930 + htab->root.splt->output_offset + isa_bit); 10931 10932 /* Calculate the address of the .got.plt entry. */ 10933 got_address = (htab->root.sgotplt->output_section->vma 10934 + htab->root.sgotplt->output_offset 10935 + got_index * MIPS_ELF_GOT_SIZE (dynobj)); 10936 10937 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff; 10938 got_address_low = got_address & 0xffff; 10939 10940 /* The PLT sequence is not safe for N64 if .got.plt entry's address 10941 cannot be loaded in two instructions. */ 10942 if (ABI_64_P (output_bfd) 10943 && ((got_address + 0x80008000) & ~(bfd_vma) 0xffffffff) != 0) 10944 { 10945 _bfd_error_handler 10946 /* xgettext:c-format */ 10947 (_("%pB: `%pA' entry VMA of %#" PRIx64 " outside the 32-bit range " 10948 "supported; consider using `-Ttext-segment=...'"), 10949 output_bfd, 10950 htab->root.sgotplt->output_section, 10951 (int64_t) got_address); 10952 bfd_set_error (bfd_error_no_error); 10953 return FALSE; 10954 } 10955 10956 /* Initially point the .got.plt entry at the PLT header. */ 10957 loc = (htab->root.sgotplt->contents 10958 + got_index * MIPS_ELF_GOT_SIZE (dynobj)); 10959 if (ABI_64_P (output_bfd)) 10960 bfd_put_64 (output_bfd, header_address, loc); 10961 else 10962 bfd_put_32 (output_bfd, header_address, loc); 10963 10964 /* Now handle the PLT itself. First the standard entry (the order 10965 does not matter, we just have to pick one). */ 10966 if (h->plt.plist->mips_offset != MINUS_ONE) 10967 { 10968 const bfd_vma *plt_entry; 10969 bfd_vma plt_offset; 10970 10971 plt_offset = htab->plt_header_size + h->plt.plist->mips_offset; 10972 10973 BFD_ASSERT (plt_offset <= htab->root.splt->size); 10974 10975 /* Find out where the .plt entry should go. */ 10976 loc = htab->root.splt->contents + plt_offset; 10977 10978 /* Pick the load opcode. */ 10979 load = MIPS_ELF_LOAD_WORD (output_bfd); 10980 10981 /* Fill in the PLT entry itself. */ 10982 10983 if (MIPSR6_P (output_bfd)) 10984 plt_entry = htab->compact_branches ? mipsr6_exec_plt_entry_compact 10985 : mipsr6_exec_plt_entry; 10986 else 10987 plt_entry = mips_exec_plt_entry; 10988 bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc); 10989 bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, 10990 loc + 4); 10991 10992 if (! LOAD_INTERLOCKS_P (output_bfd) 10993 || (MIPSR6_P (output_bfd) && htab->compact_branches)) 10994 { 10995 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8); 10996 bfd_put_32 (output_bfd, plt_entry[3], loc + 12); 10997 } 10998 else 10999 { 11000 bfd_put_32 (output_bfd, plt_entry[3], loc + 8); 11001 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, 11002 loc + 12); 11003 } 11004 } 11005 11006 /* Now the compressed entry. They come after any standard ones. */ 11007 if (h->plt.plist->comp_offset != MINUS_ONE) 11008 { 11009 bfd_vma plt_offset; 11010 11011 plt_offset = (htab->plt_header_size + htab->plt_mips_offset 11012 + h->plt.plist->comp_offset); 11013 11014 BFD_ASSERT (plt_offset <= htab->root.splt->size); 11015 11016 /* Find out where the .plt entry should go. */ 11017 loc = htab->root.splt->contents + plt_offset; 11018 11019 /* Fill in the PLT entry itself. */ 11020 if (!MICROMIPS_P (output_bfd)) 11021 { 11022 const bfd_vma *plt_entry = mips16_o32_exec_plt_entry; 11023 11024 bfd_put_16 (output_bfd, plt_entry[0], loc); 11025 bfd_put_16 (output_bfd, plt_entry[1], loc + 2); 11026 bfd_put_16 (output_bfd, plt_entry[2], loc + 4); 11027 bfd_put_16 (output_bfd, plt_entry[3], loc + 6); 11028 bfd_put_16 (output_bfd, plt_entry[4], loc + 8); 11029 bfd_put_16 (output_bfd, plt_entry[5], loc + 10); 11030 bfd_put_32 (output_bfd, got_address, loc + 12); 11031 } 11032 else if (htab->insn32) 11033 { 11034 const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry; 11035 11036 bfd_put_16 (output_bfd, plt_entry[0], loc); 11037 bfd_put_16 (output_bfd, got_address_high, loc + 2); 11038 bfd_put_16 (output_bfd, plt_entry[2], loc + 4); 11039 bfd_put_16 (output_bfd, got_address_low, loc + 6); 11040 bfd_put_16 (output_bfd, plt_entry[4], loc + 8); 11041 bfd_put_16 (output_bfd, plt_entry[5], loc + 10); 11042 bfd_put_16 (output_bfd, plt_entry[6], loc + 12); 11043 bfd_put_16 (output_bfd, got_address_low, loc + 14); 11044 } 11045 else 11046 { 11047 const bfd_vma *plt_entry = micromips_o32_exec_plt_entry; 11048 bfd_signed_vma gotpc_offset; 11049 bfd_vma loc_address; 11050 11051 BFD_ASSERT (got_address % 4 == 0); 11052 11053 loc_address = (htab->root.splt->output_section->vma 11054 + htab->root.splt->output_offset + plt_offset); 11055 gotpc_offset = got_address - ((loc_address | 3) ^ 3); 11056 11057 /* ADDIUPC has a span of +/-16MB, check we're in range. */ 11058 if (gotpc_offset + 0x1000000 >= 0x2000000) 11059 { 11060 _bfd_error_handler 11061 /* xgettext:c-format */ 11062 (_("%pB: `%pA' offset of %" PRId64 " from `%pA' " 11063 "beyond the range of ADDIUPC"), 11064 output_bfd, 11065 htab->root.sgotplt->output_section, 11066 (int64_t) gotpc_offset, 11067 htab->root.splt->output_section); 11068 bfd_set_error (bfd_error_no_error); 11069 return FALSE; 11070 } 11071 bfd_put_16 (output_bfd, 11072 plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc); 11073 bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2); 11074 bfd_put_16 (output_bfd, plt_entry[2], loc + 4); 11075 bfd_put_16 (output_bfd, plt_entry[3], loc + 6); 11076 bfd_put_16 (output_bfd, plt_entry[4], loc + 8); 11077 bfd_put_16 (output_bfd, plt_entry[5], loc + 10); 11078 } 11079 } 11080 11081 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */ 11082 mips_elf_output_dynamic_relocation (output_bfd, htab->root.srelplt, 11083 got_index - 2, h->dynindx, 11084 R_MIPS_JUMP_SLOT, got_address); 11085 11086 /* We distinguish between PLT entries and lazy-binding stubs by 11087 giving the former an st_other value of STO_MIPS_PLT. Set the 11088 flag and leave the value if there are any relocations in the 11089 binary where pointer equality matters. */ 11090 sym->st_shndx = SHN_UNDEF; 11091 if (h->pointer_equality_needed) 11092 sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other); 11093 else 11094 { 11095 sym->st_value = 0; 11096 sym->st_other = 0; 11097 } 11098 } 11099 11100 if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE) 11101 { 11102 /* We've decided to create a lazy-binding stub. */ 11103 bfd_boolean micromips_p = MICROMIPS_P (output_bfd); 11104 unsigned int other = micromips_p ? STO_MICROMIPS : 0; 11105 bfd_vma stub_size = htab->function_stub_size; 11106 bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE]; 11107 bfd_vma isa_bit = micromips_p; 11108 bfd_vma stub_big_size; 11109 11110 if (!micromips_p) 11111 stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE; 11112 else if (htab->insn32) 11113 stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE; 11114 else 11115 stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE; 11116 11117 /* This symbol has a stub. Set it up. */ 11118 11119 BFD_ASSERT (h->dynindx != -1); 11120 11121 BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff); 11122 11123 /* Values up to 2^31 - 1 are allowed. Larger values would cause 11124 sign extension at runtime in the stub, resulting in a negative 11125 index value. */ 11126 if (h->dynindx & ~0x7fffffff) 11127 return FALSE; 11128 11129 /* Fill the stub. */ 11130 if (micromips_p) 11131 { 11132 idx = 0; 11133 bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd), 11134 stub + idx); 11135 idx += 4; 11136 if (htab->insn32) 11137 { 11138 bfd_put_micromips_32 (output_bfd, 11139 STUB_MOVE32_MICROMIPS, stub + idx); 11140 idx += 4; 11141 } 11142 else 11143 { 11144 bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx); 11145 idx += 2; 11146 } 11147 if (stub_size == stub_big_size) 11148 { 11149 long dynindx_hi = (h->dynindx >> 16) & 0x7fff; 11150 11151 bfd_put_micromips_32 (output_bfd, 11152 STUB_LUI_MICROMIPS (dynindx_hi), 11153 stub + idx); 11154 idx += 4; 11155 } 11156 if (htab->insn32) 11157 { 11158 bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS, 11159 stub + idx); 11160 idx += 4; 11161 } 11162 else 11163 { 11164 bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx); 11165 idx += 2; 11166 } 11167 11168 /* If a large stub is not required and sign extension is not a 11169 problem, then use legacy code in the stub. */ 11170 if (stub_size == stub_big_size) 11171 bfd_put_micromips_32 (output_bfd, 11172 STUB_ORI_MICROMIPS (h->dynindx & 0xffff), 11173 stub + idx); 11174 else if (h->dynindx & ~0x7fff) 11175 bfd_put_micromips_32 (output_bfd, 11176 STUB_LI16U_MICROMIPS (h->dynindx & 0xffff), 11177 stub + idx); 11178 else 11179 bfd_put_micromips_32 (output_bfd, 11180 STUB_LI16S_MICROMIPS (output_bfd, 11181 h->dynindx), 11182 stub + idx); 11183 } 11184 else 11185 { 11186 idx = 0; 11187 bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx); 11188 idx += 4; 11189 bfd_put_32 (output_bfd, STUB_MOVE, stub + idx); 11190 idx += 4; 11191 if (stub_size == stub_big_size) 11192 { 11193 bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff), 11194 stub + idx); 11195 idx += 4; 11196 } 11197 11198 if (!(MIPSR6_P (output_bfd) && htab->compact_branches)) 11199 { 11200 bfd_put_32 (output_bfd, STUB_JALR, stub + idx); 11201 idx += 4; 11202 } 11203 11204 /* If a large stub is not required and sign extension is not a 11205 problem, then use legacy code in the stub. */ 11206 if (stub_size == stub_big_size) 11207 bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), 11208 stub + idx); 11209 else if (h->dynindx & ~0x7fff) 11210 bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), 11211 stub + idx); 11212 else 11213 bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx), 11214 stub + idx); 11215 idx += 4; 11216 11217 if (MIPSR6_P (output_bfd) && htab->compact_branches) 11218 bfd_put_32 (output_bfd, STUB_JALRC, stub + idx); 11219 } 11220 11221 BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size); 11222 memcpy (htab->sstubs->contents + h->plt.plist->stub_offset, 11223 stub, stub_size); 11224 11225 /* Mark the symbol as undefined. stub_offset != -1 occurs 11226 only for the referenced symbol. */ 11227 sym->st_shndx = SHN_UNDEF; 11228 11229 /* The run-time linker uses the st_value field of the symbol 11230 to reset the global offset table entry for this external 11231 to its stub address when unlinking a shared object. */ 11232 sym->st_value = (htab->sstubs->output_section->vma 11233 + htab->sstubs->output_offset 11234 + h->plt.plist->stub_offset 11235 + isa_bit); 11236 sym->st_other = other; 11237 } 11238 11239 /* If we have a MIPS16 function with a stub, the dynamic symbol must 11240 refer to the stub, since only the stub uses the standard calling 11241 conventions. */ 11242 if (h->dynindx != -1 && hmips->fn_stub != NULL) 11243 { 11244 BFD_ASSERT (hmips->need_fn_stub); 11245 sym->st_value = (hmips->fn_stub->output_section->vma 11246 + hmips->fn_stub->output_offset); 11247 sym->st_size = hmips->fn_stub->size; 11248 sym->st_other = ELF_ST_VISIBILITY (sym->st_other); 11249 } 11250 11251 BFD_ASSERT (h->dynindx != -1 11252 || h->forced_local); 11253 11254 sgot = htab->root.sgot; 11255 g = htab->got_info; 11256 BFD_ASSERT (g != NULL); 11257 11258 /* Run through the global symbol table, creating GOT entries for all 11259 the symbols that need them. */ 11260 if (hmips->global_got_area != GGA_NONE) 11261 { 11262 bfd_vma offset; 11263 bfd_vma value; 11264 11265 value = sym->st_value; 11266 offset = mips_elf_primary_global_got_index (output_bfd, info, h); 11267 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset); 11268 } 11269 11270 if (hmips->global_got_area != GGA_NONE && g->next) 11271 { 11272 struct mips_got_entry e, *p; 11273 bfd_vma entry; 11274 bfd_vma offset; 11275 11276 gg = g; 11277 11278 e.abfd = output_bfd; 11279 e.symndx = -1; 11280 e.d.h = hmips; 11281 e.tls_type = GOT_TLS_NONE; 11282 11283 for (g = g->next; g->next != gg; g = g->next) 11284 { 11285 if (g->got_entries 11286 && (p = (struct mips_got_entry *) htab_find (g->got_entries, 11287 &e))) 11288 { 11289 offset = p->gotidx; 11290 BFD_ASSERT (offset > 0 && offset < htab->root.sgot->size); 11291 if (bfd_link_pic (info) 11292 || (elf_hash_table (info)->dynamic_sections_created 11293 && p->d.h != NULL 11294 && p->d.h->root.def_dynamic 11295 && !p->d.h->root.def_regular)) 11296 { 11297 /* Create an R_MIPS_REL32 relocation for this entry. Due to 11298 the various compatibility problems, it's easier to mock 11299 up an R_MIPS_32 or R_MIPS_64 relocation and leave 11300 mips_elf_create_dynamic_relocation to calculate the 11301 appropriate addend. */ 11302 Elf_Internal_Rela rel[3]; 11303 11304 memset (rel, 0, sizeof (rel)); 11305 if (ABI_64_P (output_bfd)) 11306 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64); 11307 else 11308 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32); 11309 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset; 11310 11311 entry = 0; 11312 if (! (mips_elf_create_dynamic_relocation 11313 (output_bfd, info, rel, 11314 e.d.h, NULL, sym->st_value, &entry, sgot))) 11315 return FALSE; 11316 } 11317 else 11318 entry = sym->st_value; 11319 MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset); 11320 } 11321 } 11322 } 11323 11324 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */ 11325 name = h->root.root.string; 11326 if (h == elf_hash_table (info)->hdynamic 11327 || h == elf_hash_table (info)->hgot) 11328 sym->st_shndx = SHN_ABS; 11329 else if (strcmp (name, "_DYNAMIC_LINK") == 0 11330 || strcmp (name, "_DYNAMIC_LINKING") == 0) 11331 { 11332 sym->st_shndx = SHN_ABS; 11333 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 11334 sym->st_value = 1; 11335 } 11336 else if (SGI_COMPAT (output_bfd)) 11337 { 11338 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0 11339 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0) 11340 { 11341 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 11342 sym->st_other = STO_PROTECTED; 11343 sym->st_value = 0; 11344 sym->st_shndx = SHN_MIPS_DATA; 11345 } 11346 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0) 11347 { 11348 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 11349 sym->st_other = STO_PROTECTED; 11350 sym->st_value = mips_elf_hash_table (info)->procedure_count; 11351 sym->st_shndx = SHN_ABS; 11352 } 11353 else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS) 11354 { 11355 if (h->type == STT_FUNC) 11356 sym->st_shndx = SHN_MIPS_TEXT; 11357 else if (h->type == STT_OBJECT) 11358 sym->st_shndx = SHN_MIPS_DATA; 11359 } 11360 } 11361 11362 /* Emit a copy reloc, if needed. */ 11363 if (h->needs_copy) 11364 { 11365 asection *s; 11366 bfd_vma symval; 11367 11368 BFD_ASSERT (h->dynindx != -1); 11369 BFD_ASSERT (htab->use_plts_and_copy_relocs); 11370 11371 s = mips_elf_rel_dyn_section (info, FALSE); 11372 symval = (h->root.u.def.section->output_section->vma 11373 + h->root.u.def.section->output_offset 11374 + h->root.u.def.value); 11375 mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++, 11376 h->dynindx, R_MIPS_COPY, symval); 11377 } 11378 11379 /* Handle the IRIX6-specific symbols. */ 11380 if (IRIX_COMPAT (output_bfd) == ict_irix6) 11381 mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym); 11382 11383 /* Keep dynamic compressed symbols odd. This allows the dynamic linker 11384 to treat compressed symbols like any other. */ 11385 if (ELF_ST_IS_MIPS16 (sym->st_other)) 11386 { 11387 BFD_ASSERT (sym->st_value & 1); 11388 sym->st_other -= STO_MIPS16; 11389 } 11390 else if (ELF_ST_IS_MICROMIPS (sym->st_other)) 11391 { 11392 BFD_ASSERT (sym->st_value & 1); 11393 sym->st_other -= STO_MICROMIPS; 11394 } 11395 11396 return TRUE; 11397 } 11398 11399 /* Likewise, for VxWorks. */ 11400 11401 bfd_boolean 11402 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd, 11403 struct bfd_link_info *info, 11404 struct elf_link_hash_entry *h, 11405 Elf_Internal_Sym *sym) 11406 { 11407 bfd *dynobj; 11408 asection *sgot; 11409 struct mips_got_info *g; 11410 struct mips_elf_link_hash_table *htab; 11411 struct mips_elf_link_hash_entry *hmips; 11412 11413 htab = mips_elf_hash_table (info); 11414 BFD_ASSERT (htab != NULL); 11415 dynobj = elf_hash_table (info)->dynobj; 11416 hmips = (struct mips_elf_link_hash_entry *) h; 11417 11418 if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE) 11419 { 11420 bfd_byte *loc; 11421 bfd_vma plt_address, got_address, got_offset, branch_offset; 11422 Elf_Internal_Rela rel; 11423 static const bfd_vma *plt_entry; 11424 bfd_vma gotplt_index; 11425 bfd_vma plt_offset; 11426 11427 plt_offset = htab->plt_header_size + h->plt.plist->mips_offset; 11428 gotplt_index = h->plt.plist->gotplt_index; 11429 11430 BFD_ASSERT (h->dynindx != -1); 11431 BFD_ASSERT (htab->root.splt != NULL); 11432 BFD_ASSERT (gotplt_index != MINUS_ONE); 11433 BFD_ASSERT (plt_offset <= htab->root.splt->size); 11434 11435 /* Calculate the address of the .plt entry. */ 11436 plt_address = (htab->root.splt->output_section->vma 11437 + htab->root.splt->output_offset 11438 + plt_offset); 11439 11440 /* Calculate the address of the .got.plt entry. */ 11441 got_address = (htab->root.sgotplt->output_section->vma 11442 + htab->root.sgotplt->output_offset 11443 + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)); 11444 11445 /* Calculate the offset of the .got.plt entry from 11446 _GLOBAL_OFFSET_TABLE_. */ 11447 got_offset = mips_elf_gotplt_index (info, h); 11448 11449 /* Calculate the offset for the branch at the start of the PLT 11450 entry. The branch jumps to the beginning of .plt. */ 11451 branch_offset = -(plt_offset / 4 + 1) & 0xffff; 11452 11453 /* Fill in the initial value of the .got.plt entry. */ 11454 bfd_put_32 (output_bfd, plt_address, 11455 (htab->root.sgotplt->contents 11456 + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd))); 11457 11458 /* Find out where the .plt entry should go. */ 11459 loc = htab->root.splt->contents + plt_offset; 11460 11461 if (bfd_link_pic (info)) 11462 { 11463 plt_entry = mips_vxworks_shared_plt_entry; 11464 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc); 11465 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4); 11466 } 11467 else 11468 { 11469 bfd_vma got_address_high, got_address_low; 11470 11471 plt_entry = mips_vxworks_exec_plt_entry; 11472 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff; 11473 got_address_low = got_address & 0xffff; 11474 11475 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc); 11476 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4); 11477 bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8); 11478 bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12); 11479 bfd_put_32 (output_bfd, plt_entry[4], loc + 16); 11480 bfd_put_32 (output_bfd, plt_entry[5], loc + 20); 11481 bfd_put_32 (output_bfd, plt_entry[6], loc + 24); 11482 bfd_put_32 (output_bfd, plt_entry[7], loc + 28); 11483 11484 loc = (htab->srelplt2->contents 11485 + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela)); 11486 11487 /* Emit a relocation for the .got.plt entry. */ 11488 rel.r_offset = got_address; 11489 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32); 11490 rel.r_addend = plt_offset; 11491 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 11492 11493 /* Emit a relocation for the lui of %hi(<.got.plt slot>). */ 11494 loc += sizeof (Elf32_External_Rela); 11495 rel.r_offset = plt_address + 8; 11496 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16); 11497 rel.r_addend = got_offset; 11498 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 11499 11500 /* Emit a relocation for the addiu of %lo(<.got.plt slot>). */ 11501 loc += sizeof (Elf32_External_Rela); 11502 rel.r_offset += 4; 11503 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16); 11504 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 11505 } 11506 11507 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */ 11508 loc = (htab->root.srelplt->contents 11509 + gotplt_index * sizeof (Elf32_External_Rela)); 11510 rel.r_offset = got_address; 11511 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT); 11512 rel.r_addend = 0; 11513 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 11514 11515 if (!h->def_regular) 11516 sym->st_shndx = SHN_UNDEF; 11517 } 11518 11519 BFD_ASSERT (h->dynindx != -1 || h->forced_local); 11520 11521 sgot = htab->root.sgot; 11522 g = htab->got_info; 11523 BFD_ASSERT (g != NULL); 11524 11525 /* See if this symbol has an entry in the GOT. */ 11526 if (hmips->global_got_area != GGA_NONE) 11527 { 11528 bfd_vma offset; 11529 Elf_Internal_Rela outrel; 11530 bfd_byte *loc; 11531 asection *s; 11532 11533 /* Install the symbol value in the GOT. */ 11534 offset = mips_elf_primary_global_got_index (output_bfd, info, h); 11535 MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset); 11536 11537 /* Add a dynamic relocation for it. */ 11538 s = mips_elf_rel_dyn_section (info, FALSE); 11539 loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela)); 11540 outrel.r_offset = (sgot->output_section->vma 11541 + sgot->output_offset 11542 + offset); 11543 outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32); 11544 outrel.r_addend = 0; 11545 bfd_elf32_swap_reloca_out (dynobj, &outrel, loc); 11546 } 11547 11548 /* Emit a copy reloc, if needed. */ 11549 if (h->needs_copy) 11550 { 11551 Elf_Internal_Rela rel; 11552 asection *srel; 11553 bfd_byte *loc; 11554 11555 BFD_ASSERT (h->dynindx != -1); 11556 11557 rel.r_offset = (h->root.u.def.section->output_section->vma 11558 + h->root.u.def.section->output_offset 11559 + h->root.u.def.value); 11560 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY); 11561 rel.r_addend = 0; 11562 if (h->root.u.def.section == htab->root.sdynrelro) 11563 srel = htab->root.sreldynrelro; 11564 else 11565 srel = htab->root.srelbss; 11566 loc = srel->contents + srel->reloc_count * sizeof (Elf32_External_Rela); 11567 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 11568 ++srel->reloc_count; 11569 } 11570 11571 /* If this is a mips16/microMIPS symbol, force the value to be even. */ 11572 if (ELF_ST_IS_COMPRESSED (sym->st_other)) 11573 sym->st_value &= ~1; 11574 11575 return TRUE; 11576 } 11577 11578 /* Write out a plt0 entry to the beginning of .plt. */ 11579 11580 static bfd_boolean 11581 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info) 11582 { 11583 bfd_byte *loc; 11584 bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low; 11585 static const bfd_vma *plt_entry; 11586 struct mips_elf_link_hash_table *htab; 11587 11588 htab = mips_elf_hash_table (info); 11589 BFD_ASSERT (htab != NULL); 11590 11591 if (ABI_64_P (output_bfd)) 11592 plt_entry = (htab->compact_branches 11593 ? mipsr6_n64_exec_plt0_entry_compact 11594 : mips_n64_exec_plt0_entry); 11595 else if (ABI_N32_P (output_bfd)) 11596 plt_entry = (htab->compact_branches 11597 ? mipsr6_n32_exec_plt0_entry_compact 11598 : mips_n32_exec_plt0_entry); 11599 else if (!htab->plt_header_is_comp) 11600 plt_entry = (htab->compact_branches 11601 ? mipsr6_o32_exec_plt0_entry_compact 11602 : mips_o32_exec_plt0_entry); 11603 else if (htab->insn32) 11604 plt_entry = micromips_insn32_o32_exec_plt0_entry; 11605 else 11606 plt_entry = micromips_o32_exec_plt0_entry; 11607 11608 /* Calculate the value of .got.plt. */ 11609 gotplt_value = (htab->root.sgotplt->output_section->vma 11610 + htab->root.sgotplt->output_offset); 11611 gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff; 11612 gotplt_value_low = gotplt_value & 0xffff; 11613 11614 /* The PLT sequence is not safe for N64 if .got.plt's address can 11615 not be loaded in two instructions. */ 11616 if (ABI_64_P (output_bfd) 11617 && ((gotplt_value + 0x80008000) & ~(bfd_vma) 0xffffffff) != 0) 11618 { 11619 _bfd_error_handler 11620 /* xgettext:c-format */ 11621 (_("%pB: `%pA' start VMA of %#" PRIx64 " outside the 32-bit range " 11622 "supported; consider using `-Ttext-segment=...'"), 11623 output_bfd, 11624 htab->root.sgotplt->output_section, 11625 (int64_t) gotplt_value); 11626 bfd_set_error (bfd_error_no_error); 11627 return FALSE; 11628 } 11629 11630 /* Install the PLT header. */ 11631 loc = htab->root.splt->contents; 11632 if (plt_entry == micromips_o32_exec_plt0_entry) 11633 { 11634 bfd_vma gotpc_offset; 11635 bfd_vma loc_address; 11636 size_t i; 11637 11638 BFD_ASSERT (gotplt_value % 4 == 0); 11639 11640 loc_address = (htab->root.splt->output_section->vma 11641 + htab->root.splt->output_offset); 11642 gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3); 11643 11644 /* ADDIUPC has a span of +/-16MB, check we're in range. */ 11645 if (gotpc_offset + 0x1000000 >= 0x2000000) 11646 { 11647 _bfd_error_handler 11648 /* xgettext:c-format */ 11649 (_("%pB: `%pA' offset of %" PRId64 " from `%pA' " 11650 "beyond the range of ADDIUPC"), 11651 output_bfd, 11652 htab->root.sgotplt->output_section, 11653 (int64_t) gotpc_offset, 11654 htab->root.splt->output_section); 11655 bfd_set_error (bfd_error_no_error); 11656 return FALSE; 11657 } 11658 bfd_put_16 (output_bfd, 11659 plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc); 11660 bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2); 11661 for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++) 11662 bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2)); 11663 } 11664 else if (plt_entry == micromips_insn32_o32_exec_plt0_entry) 11665 { 11666 size_t i; 11667 11668 bfd_put_16 (output_bfd, plt_entry[0], loc); 11669 bfd_put_16 (output_bfd, gotplt_value_high, loc + 2); 11670 bfd_put_16 (output_bfd, plt_entry[2], loc + 4); 11671 bfd_put_16 (output_bfd, gotplt_value_low, loc + 6); 11672 bfd_put_16 (output_bfd, plt_entry[4], loc + 8); 11673 bfd_put_16 (output_bfd, gotplt_value_low, loc + 10); 11674 for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++) 11675 bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2)); 11676 } 11677 else 11678 { 11679 bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc); 11680 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4); 11681 bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8); 11682 bfd_put_32 (output_bfd, plt_entry[3], loc + 12); 11683 bfd_put_32 (output_bfd, plt_entry[4], loc + 16); 11684 bfd_put_32 (output_bfd, plt_entry[5], loc + 20); 11685 bfd_put_32 (output_bfd, plt_entry[6], loc + 24); 11686 bfd_put_32 (output_bfd, plt_entry[7], loc + 28); 11687 } 11688 11689 return TRUE; 11690 } 11691 11692 /* Install the PLT header for a VxWorks executable and finalize the 11693 contents of .rela.plt.unloaded. */ 11694 11695 static void 11696 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info) 11697 { 11698 Elf_Internal_Rela rela; 11699 bfd_byte *loc; 11700 bfd_vma got_value, got_value_high, got_value_low, plt_address; 11701 static const bfd_vma *plt_entry; 11702 struct mips_elf_link_hash_table *htab; 11703 11704 htab = mips_elf_hash_table (info); 11705 BFD_ASSERT (htab != NULL); 11706 11707 plt_entry = mips_vxworks_exec_plt0_entry; 11708 11709 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */ 11710 got_value = (htab->root.hgot->root.u.def.section->output_section->vma 11711 + htab->root.hgot->root.u.def.section->output_offset 11712 + htab->root.hgot->root.u.def.value); 11713 11714 got_value_high = ((got_value + 0x8000) >> 16) & 0xffff; 11715 got_value_low = got_value & 0xffff; 11716 11717 /* Calculate the address of the PLT header. */ 11718 plt_address = (htab->root.splt->output_section->vma 11719 + htab->root.splt->output_offset); 11720 11721 /* Install the PLT header. */ 11722 loc = htab->root.splt->contents; 11723 bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc); 11724 bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4); 11725 bfd_put_32 (output_bfd, plt_entry[2], loc + 8); 11726 bfd_put_32 (output_bfd, plt_entry[3], loc + 12); 11727 bfd_put_32 (output_bfd, plt_entry[4], loc + 16); 11728 bfd_put_32 (output_bfd, plt_entry[5], loc + 20); 11729 11730 /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_). */ 11731 loc = htab->srelplt2->contents; 11732 rela.r_offset = plt_address; 11733 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16); 11734 rela.r_addend = 0; 11735 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); 11736 loc += sizeof (Elf32_External_Rela); 11737 11738 /* Output the relocation for the following addiu of 11739 %lo(_GLOBAL_OFFSET_TABLE_). */ 11740 rela.r_offset += 4; 11741 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16); 11742 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); 11743 loc += sizeof (Elf32_External_Rela); 11744 11745 /* Fix up the remaining relocations. They may have the wrong 11746 symbol index for _G_O_T_ or _P_L_T_ depending on the order 11747 in which symbols were output. */ 11748 while (loc < htab->srelplt2->contents + htab->srelplt2->size) 11749 { 11750 Elf_Internal_Rela rel; 11751 11752 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel); 11753 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32); 11754 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 11755 loc += sizeof (Elf32_External_Rela); 11756 11757 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel); 11758 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16); 11759 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 11760 loc += sizeof (Elf32_External_Rela); 11761 11762 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel); 11763 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16); 11764 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 11765 loc += sizeof (Elf32_External_Rela); 11766 } 11767 } 11768 11769 /* Install the PLT header for a VxWorks shared library. */ 11770 11771 static void 11772 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info) 11773 { 11774 unsigned int i; 11775 struct mips_elf_link_hash_table *htab; 11776 11777 htab = mips_elf_hash_table (info); 11778 BFD_ASSERT (htab != NULL); 11779 11780 /* We just need to copy the entry byte-by-byte. */ 11781 for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++) 11782 bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i], 11783 htab->root.splt->contents + i * 4); 11784 } 11785 11786 /* Finish up the dynamic sections. */ 11787 11788 bfd_boolean 11789 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, 11790 struct bfd_link_info *info) 11791 { 11792 bfd *dynobj; 11793 asection *sdyn; 11794 asection *sgot; 11795 struct mips_got_info *gg, *g; 11796 struct mips_elf_link_hash_table *htab; 11797 11798 htab = mips_elf_hash_table (info); 11799 BFD_ASSERT (htab != NULL); 11800 11801 dynobj = elf_hash_table (info)->dynobj; 11802 11803 sdyn = bfd_get_linker_section (dynobj, ".dynamic"); 11804 11805 sgot = htab->root.sgot; 11806 gg = htab->got_info; 11807 11808 if (elf_hash_table (info)->dynamic_sections_created) 11809 { 11810 bfd_byte *b; 11811 int dyn_to_skip = 0, dyn_skipped = 0; 11812 11813 BFD_ASSERT (sdyn != NULL); 11814 BFD_ASSERT (gg != NULL); 11815 11816 g = mips_elf_bfd_got (output_bfd, FALSE); 11817 BFD_ASSERT (g != NULL); 11818 11819 for (b = sdyn->contents; 11820 b < sdyn->contents + sdyn->size; 11821 b += MIPS_ELF_DYN_SIZE (dynobj)) 11822 { 11823 Elf_Internal_Dyn dyn; 11824 const char *name; 11825 size_t elemsize; 11826 asection *s; 11827 bfd_boolean swap_out_p; 11828 11829 /* Read in the current dynamic entry. */ 11830 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn); 11831 11832 /* Assume that we're going to modify it and write it out. */ 11833 swap_out_p = TRUE; 11834 11835 switch (dyn.d_tag) 11836 { 11837 case DT_RELENT: 11838 dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj); 11839 break; 11840 11841 case DT_RELAENT: 11842 BFD_ASSERT (htab->is_vxworks); 11843 dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj); 11844 break; 11845 11846 case DT_STRSZ: 11847 /* Rewrite DT_STRSZ. */ 11848 dyn.d_un.d_val = 11849 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr); 11850 break; 11851 11852 case DT_PLTGOT: 11853 s = htab->root.sgot; 11854 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; 11855 break; 11856 11857 case DT_MIPS_PLTGOT: 11858 s = htab->root.sgotplt; 11859 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; 11860 break; 11861 11862 case DT_MIPS_RLD_VERSION: 11863 dyn.d_un.d_val = 1; /* XXX */ 11864 break; 11865 11866 case DT_MIPS_FLAGS: 11867 dyn.d_un.d_val = RHF_NOTPOT; /* XXX */ 11868 break; 11869 11870 case DT_MIPS_TIME_STAMP: 11871 { 11872 time_t t; 11873 time (&t); 11874 dyn.d_un.d_val = t; 11875 } 11876 break; 11877 11878 case DT_MIPS_ICHECKSUM: 11879 /* XXX FIXME: */ 11880 swap_out_p = FALSE; 11881 break; 11882 11883 case DT_MIPS_IVERSION: 11884 /* XXX FIXME: */ 11885 swap_out_p = FALSE; 11886 break; 11887 11888 case DT_MIPS_BASE_ADDRESS: 11889 s = output_bfd->sections; 11890 BFD_ASSERT (s != NULL); 11891 dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff; 11892 break; 11893 11894 case DT_MIPS_LOCAL_GOTNO: 11895 dyn.d_un.d_val = g->local_gotno; 11896 break; 11897 11898 case DT_MIPS_UNREFEXTNO: 11899 /* The index into the dynamic symbol table which is the 11900 entry of the first external symbol that is not 11901 referenced within the same object. */ 11902 dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1; 11903 break; 11904 11905 case DT_MIPS_GOTSYM: 11906 if (htab->global_gotsym) 11907 { 11908 dyn.d_un.d_val = htab->global_gotsym->dynindx; 11909 break; 11910 } 11911 /* In case if we don't have global got symbols we default 11912 to setting DT_MIPS_GOTSYM to the same value as 11913 DT_MIPS_SYMTABNO. */ 11914 /* Fall through. */ 11915 11916 case DT_MIPS_SYMTABNO: 11917 name = ".dynsym"; 11918 elemsize = MIPS_ELF_SYM_SIZE (output_bfd); 11919 s = bfd_get_linker_section (dynobj, name); 11920 11921 if (s != NULL) 11922 dyn.d_un.d_val = s->size / elemsize; 11923 else 11924 dyn.d_un.d_val = 0; 11925 break; 11926 11927 case DT_MIPS_HIPAGENO: 11928 dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno; 11929 break; 11930 11931 case DT_MIPS_RLD_MAP: 11932 { 11933 struct elf_link_hash_entry *h; 11934 h = mips_elf_hash_table (info)->rld_symbol; 11935 if (!h) 11936 { 11937 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj); 11938 swap_out_p = FALSE; 11939 break; 11940 } 11941 s = h->root.u.def.section; 11942 11943 /* The MIPS_RLD_MAP tag stores the absolute address of the 11944 debug pointer. */ 11945 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset 11946 + h->root.u.def.value); 11947 } 11948 break; 11949 11950 case DT_MIPS_RLD_MAP_REL: 11951 { 11952 struct elf_link_hash_entry *h; 11953 bfd_vma dt_addr, rld_addr; 11954 h = mips_elf_hash_table (info)->rld_symbol; 11955 if (!h) 11956 { 11957 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj); 11958 swap_out_p = FALSE; 11959 break; 11960 } 11961 s = h->root.u.def.section; 11962 11963 /* The MIPS_RLD_MAP_REL tag stores the offset to the debug 11964 pointer, relative to the address of the tag. */ 11965 dt_addr = (sdyn->output_section->vma + sdyn->output_offset 11966 + (b - sdyn->contents)); 11967 rld_addr = (s->output_section->vma + s->output_offset 11968 + h->root.u.def.value); 11969 dyn.d_un.d_ptr = rld_addr - dt_addr; 11970 } 11971 break; 11972 11973 case DT_MIPS_OPTIONS: 11974 s = (bfd_get_section_by_name 11975 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd))); 11976 dyn.d_un.d_ptr = s->vma; 11977 break; 11978 11979 case DT_PLTREL: 11980 BFD_ASSERT (htab->use_plts_and_copy_relocs); 11981 if (htab->is_vxworks) 11982 dyn.d_un.d_val = DT_RELA; 11983 else 11984 dyn.d_un.d_val = DT_REL; 11985 break; 11986 11987 case DT_PLTRELSZ: 11988 BFD_ASSERT (htab->use_plts_and_copy_relocs); 11989 dyn.d_un.d_val = htab->root.srelplt->size; 11990 break; 11991 11992 case DT_JMPREL: 11993 BFD_ASSERT (htab->use_plts_and_copy_relocs); 11994 dyn.d_un.d_ptr = (htab->root.srelplt->output_section->vma 11995 + htab->root.srelplt->output_offset); 11996 break; 11997 11998 case DT_TEXTREL: 11999 /* If we didn't need any text relocations after all, delete 12000 the dynamic tag. */ 12001 if (!(info->flags & DF_TEXTREL)) 12002 { 12003 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj); 12004 swap_out_p = FALSE; 12005 } 12006 break; 12007 12008 case DT_FLAGS: 12009 /* If we didn't need any text relocations after all, clear 12010 DF_TEXTREL from DT_FLAGS. */ 12011 if (!(info->flags & DF_TEXTREL)) 12012 dyn.d_un.d_val &= ~DF_TEXTREL; 12013 else 12014 swap_out_p = FALSE; 12015 break; 12016 12017 case DT_MIPS_XHASH: 12018 name = ".MIPS.xhash"; 12019 s = bfd_get_linker_section (dynobj, name); 12020 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; 12021 break; 12022 12023 default: 12024 swap_out_p = FALSE; 12025 if (htab->is_vxworks 12026 && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) 12027 swap_out_p = TRUE; 12028 break; 12029 } 12030 12031 if (swap_out_p || dyn_skipped) 12032 (*get_elf_backend_data (dynobj)->s->swap_dyn_out) 12033 (dynobj, &dyn, b - dyn_skipped); 12034 12035 if (dyn_to_skip) 12036 { 12037 dyn_skipped += dyn_to_skip; 12038 dyn_to_skip = 0; 12039 } 12040 } 12041 12042 /* Wipe out any trailing entries if we shifted down a dynamic tag. */ 12043 if (dyn_skipped > 0) 12044 memset (b - dyn_skipped, 0, dyn_skipped); 12045 } 12046 12047 if (sgot != NULL && sgot->size > 0 12048 && !bfd_is_abs_section (sgot->output_section)) 12049 { 12050 if (htab->is_vxworks) 12051 { 12052 /* The first entry of the global offset table points to the 12053 ".dynamic" section. The second is initialized by the 12054 loader and contains the shared library identifier. 12055 The third is also initialized by the loader and points 12056 to the lazy resolution stub. */ 12057 MIPS_ELF_PUT_WORD (output_bfd, 12058 sdyn->output_offset + sdyn->output_section->vma, 12059 sgot->contents); 12060 MIPS_ELF_PUT_WORD (output_bfd, 0, 12061 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd)); 12062 MIPS_ELF_PUT_WORD (output_bfd, 0, 12063 sgot->contents 12064 + 2 * MIPS_ELF_GOT_SIZE (output_bfd)); 12065 } 12066 else 12067 { 12068 /* The first entry of the global offset table will be filled at 12069 runtime. The second entry will be used by some runtime loaders. 12070 This isn't the case of IRIX rld. */ 12071 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents); 12072 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd), 12073 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd)); 12074 } 12075 12076 elf_section_data (sgot->output_section)->this_hdr.sh_entsize 12077 = MIPS_ELF_GOT_SIZE (output_bfd); 12078 } 12079 12080 /* Generate dynamic relocations for the non-primary gots. */ 12081 if (gg != NULL && gg->next) 12082 { 12083 Elf_Internal_Rela rel[3]; 12084 bfd_vma addend = 0; 12085 12086 memset (rel, 0, sizeof (rel)); 12087 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32); 12088 12089 for (g = gg->next; g->next != gg; g = g->next) 12090 { 12091 bfd_vma got_index = g->next->local_gotno + g->next->global_gotno 12092 + g->next->tls_gotno; 12093 12094 MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents 12095 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd)); 12096 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd), 12097 sgot->contents 12098 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd)); 12099 12100 if (! bfd_link_pic (info)) 12101 continue; 12102 12103 for (; got_index < g->local_gotno; got_index++) 12104 { 12105 if (got_index >= g->assigned_low_gotno 12106 && got_index <= g->assigned_high_gotno) 12107 continue; 12108 12109 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset 12110 = got_index * MIPS_ELF_GOT_SIZE (output_bfd); 12111 if (!(mips_elf_create_dynamic_relocation 12112 (output_bfd, info, rel, NULL, 12113 bfd_abs_section_ptr, 12114 0, &addend, sgot))) 12115 return FALSE; 12116 BFD_ASSERT (addend == 0); 12117 } 12118 } 12119 } 12120 12121 /* The generation of dynamic relocations for the non-primary gots 12122 adds more dynamic relocations. We cannot count them until 12123 here. */ 12124 12125 if (elf_hash_table (info)->dynamic_sections_created) 12126 { 12127 bfd_byte *b; 12128 bfd_boolean swap_out_p; 12129 12130 BFD_ASSERT (sdyn != NULL); 12131 12132 for (b = sdyn->contents; 12133 b < sdyn->contents + sdyn->size; 12134 b += MIPS_ELF_DYN_SIZE (dynobj)) 12135 { 12136 Elf_Internal_Dyn dyn; 12137 asection *s; 12138 12139 /* Read in the current dynamic entry. */ 12140 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn); 12141 12142 /* Assume that we're going to modify it and write it out. */ 12143 swap_out_p = TRUE; 12144 12145 switch (dyn.d_tag) 12146 { 12147 case DT_RELSZ: 12148 /* Reduce DT_RELSZ to account for any relocations we 12149 decided not to make. This is for the n64 irix rld, 12150 which doesn't seem to apply any relocations if there 12151 are trailing null entries. */ 12152 s = mips_elf_rel_dyn_section (info, FALSE); 12153 dyn.d_un.d_val = (s->reloc_count 12154 * (ABI_64_P (output_bfd) 12155 ? sizeof (Elf64_Mips_External_Rel) 12156 : sizeof (Elf32_External_Rel))); 12157 /* Adjust the section size too. Tools like the prelinker 12158 can reasonably expect the values to the same. */ 12159 BFD_ASSERT (!bfd_is_abs_section (s->output_section)); 12160 elf_section_data (s->output_section)->this_hdr.sh_size 12161 = dyn.d_un.d_val; 12162 break; 12163 12164 default: 12165 swap_out_p = FALSE; 12166 break; 12167 } 12168 12169 if (swap_out_p) 12170 (*get_elf_backend_data (dynobj)->s->swap_dyn_out) 12171 (dynobj, &dyn, b); 12172 } 12173 } 12174 12175 { 12176 asection *s; 12177 Elf32_compact_rel cpt; 12178 12179 if (SGI_COMPAT (output_bfd)) 12180 { 12181 /* Write .compact_rel section out. */ 12182 s = bfd_get_linker_section (dynobj, ".compact_rel"); 12183 if (s != NULL) 12184 { 12185 cpt.id1 = 1; 12186 cpt.num = s->reloc_count; 12187 cpt.id2 = 2; 12188 cpt.offset = (s->output_section->filepos 12189 + sizeof (Elf32_External_compact_rel)); 12190 cpt.reserved0 = 0; 12191 cpt.reserved1 = 0; 12192 bfd_elf32_swap_compact_rel_out (output_bfd, &cpt, 12193 ((Elf32_External_compact_rel *) 12194 s->contents)); 12195 12196 /* Clean up a dummy stub function entry in .text. */ 12197 if (htab->sstubs != NULL) 12198 { 12199 file_ptr dummy_offset; 12200 12201 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size); 12202 dummy_offset = htab->sstubs->size - htab->function_stub_size; 12203 memset (htab->sstubs->contents + dummy_offset, 0, 12204 htab->function_stub_size); 12205 } 12206 } 12207 } 12208 12209 /* The psABI says that the dynamic relocations must be sorted in 12210 increasing order of r_symndx. The VxWorks EABI doesn't require 12211 this, and because the code below handles REL rather than RELA 12212 relocations, using it for VxWorks would be outright harmful. */ 12213 if (!htab->is_vxworks) 12214 { 12215 s = mips_elf_rel_dyn_section (info, FALSE); 12216 if (s != NULL 12217 && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd)) 12218 { 12219 reldyn_sorting_bfd = output_bfd; 12220 12221 if (ABI_64_P (output_bfd)) 12222 qsort ((Elf64_External_Rel *) s->contents + 1, 12223 s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel), 12224 sort_dynamic_relocs_64); 12225 else 12226 qsort ((Elf32_External_Rel *) s->contents + 1, 12227 s->reloc_count - 1, sizeof (Elf32_External_Rel), 12228 sort_dynamic_relocs); 12229 } 12230 } 12231 } 12232 12233 if (htab->root.splt && htab->root.splt->size > 0) 12234 { 12235 if (htab->is_vxworks) 12236 { 12237 if (bfd_link_pic (info)) 12238 mips_vxworks_finish_shared_plt (output_bfd, info); 12239 else 12240 mips_vxworks_finish_exec_plt (output_bfd, info); 12241 } 12242 else 12243 { 12244 BFD_ASSERT (!bfd_link_pic (info)); 12245 if (!mips_finish_exec_plt (output_bfd, info)) 12246 return FALSE; 12247 } 12248 } 12249 return TRUE; 12250 } 12251 12252 12253 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags. */ 12254 12255 static void 12256 mips_set_isa_flags (bfd *abfd) 12257 { 12258 flagword val; 12259 12260 switch (bfd_get_mach (abfd)) 12261 { 12262 default: 12263 if (ABI_N32_P (abfd) || ABI_64_P (abfd)) 12264 val = E_MIPS_ARCH_3; 12265 else 12266 val = E_MIPS_ARCH_1; 12267 break; 12268 12269 case bfd_mach_mips3000: 12270 val = E_MIPS_ARCH_1; 12271 break; 12272 12273 case bfd_mach_mips3900: 12274 val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900; 12275 break; 12276 12277 case bfd_mach_mips6000: 12278 val = E_MIPS_ARCH_2; 12279 break; 12280 12281 case bfd_mach_mips4010: 12282 val = E_MIPS_ARCH_2 | E_MIPS_MACH_4010; 12283 break; 12284 12285 case bfd_mach_mips4000: 12286 case bfd_mach_mips4300: 12287 case bfd_mach_mips4400: 12288 case bfd_mach_mips4600: 12289 val = E_MIPS_ARCH_3; 12290 break; 12291 12292 case bfd_mach_mips4100: 12293 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100; 12294 break; 12295 12296 case bfd_mach_mips4111: 12297 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111; 12298 break; 12299 12300 case bfd_mach_mips4120: 12301 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120; 12302 break; 12303 12304 case bfd_mach_mips4650: 12305 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650; 12306 break; 12307 12308 case bfd_mach_mips5400: 12309 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400; 12310 break; 12311 12312 case bfd_mach_mips5500: 12313 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500; 12314 break; 12315 12316 case bfd_mach_mips5900: 12317 val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900; 12318 break; 12319 12320 case bfd_mach_mips9000: 12321 val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000; 12322 break; 12323 12324 case bfd_mach_mips5000: 12325 case bfd_mach_mips7000: 12326 case bfd_mach_mips8000: 12327 case bfd_mach_mips10000: 12328 case bfd_mach_mips12000: 12329 case bfd_mach_mips14000: 12330 case bfd_mach_mips16000: 12331 val = E_MIPS_ARCH_4; 12332 break; 12333 12334 case bfd_mach_mips5: 12335 val = E_MIPS_ARCH_5; 12336 break; 12337 12338 case bfd_mach_mips_loongson_2e: 12339 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E; 12340 break; 12341 12342 case bfd_mach_mips_loongson_2f: 12343 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F; 12344 break; 12345 12346 case bfd_mach_mips_sb1: 12347 val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1; 12348 break; 12349 12350 case bfd_mach_mips_gs464: 12351 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464; 12352 break; 12353 12354 case bfd_mach_mips_gs464e: 12355 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464E; 12356 break; 12357 12358 case bfd_mach_mips_gs264e: 12359 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS264E; 12360 break; 12361 12362 case bfd_mach_mips_octeon: 12363 case bfd_mach_mips_octeonp: 12364 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON; 12365 break; 12366 12367 case bfd_mach_mips_octeon3: 12368 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3; 12369 break; 12370 12371 case bfd_mach_mips_xlr: 12372 val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR; 12373 break; 12374 12375 case bfd_mach_mips_octeon2: 12376 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2; 12377 break; 12378 12379 case bfd_mach_mipsisa32: 12380 val = E_MIPS_ARCH_32; 12381 break; 12382 12383 case bfd_mach_mipsisa64: 12384 val = E_MIPS_ARCH_64; 12385 break; 12386 12387 case bfd_mach_mipsisa32r2: 12388 case bfd_mach_mipsisa32r3: 12389 case bfd_mach_mipsisa32r5: 12390 val = E_MIPS_ARCH_32R2; 12391 break; 12392 12393 case bfd_mach_mips_interaptiv_mr2: 12394 val = E_MIPS_ARCH_32R2 | E_MIPS_MACH_IAMR2; 12395 break; 12396 12397 case bfd_mach_mipsisa64r2: 12398 case bfd_mach_mipsisa64r3: 12399 case bfd_mach_mipsisa64r5: 12400 val = E_MIPS_ARCH_64R2; 12401 break; 12402 12403 case bfd_mach_mipsisa32r6: 12404 val = E_MIPS_ARCH_32R6; 12405 break; 12406 12407 case bfd_mach_mipsisa64r6: 12408 val = E_MIPS_ARCH_64R6; 12409 break; 12410 } 12411 elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH); 12412 elf_elfheader (abfd)->e_flags |= val; 12413 12414 } 12415 12416 12417 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset. 12418 Don't do so for code sections. We want to keep ordering of HI16/LO16 12419 as is. On the other hand, elf-eh-frame.c processing requires .eh_frame 12420 relocs to be sorted. */ 12421 12422 bfd_boolean 12423 _bfd_mips_elf_sort_relocs_p (asection *sec) 12424 { 12425 return (sec->flags & SEC_CODE) == 0; 12426 } 12427 12428 12429 /* The final processing done just before writing out a MIPS ELF object 12430 file. This gets the MIPS architecture right based on the machine 12431 number. This is used by both the 32-bit and the 64-bit ABI. */ 12432 12433 void 12434 _bfd_mips_final_write_processing (bfd *abfd) 12435 { 12436 unsigned int i; 12437 Elf_Internal_Shdr **hdrpp; 12438 const char *name; 12439 asection *sec; 12440 12441 /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former 12442 is nonzero. This is for compatibility with old objects, which used 12443 a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH. */ 12444 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0) 12445 mips_set_isa_flags (abfd); 12446 12447 /* Set the sh_info field for .gptab sections and other appropriate 12448 info for each special section. */ 12449 for (i = 1, hdrpp = elf_elfsections (abfd) + 1; 12450 i < elf_numsections (abfd); 12451 i++, hdrpp++) 12452 { 12453 switch ((*hdrpp)->sh_type) 12454 { 12455 case SHT_MIPS_MSYM: 12456 case SHT_MIPS_LIBLIST: 12457 sec = bfd_get_section_by_name (abfd, ".dynstr"); 12458 if (sec != NULL) 12459 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 12460 break; 12461 12462 case SHT_MIPS_GPTAB: 12463 BFD_ASSERT ((*hdrpp)->bfd_section != NULL); 12464 name = bfd_section_name ((*hdrpp)->bfd_section); 12465 BFD_ASSERT (name != NULL 12466 && CONST_STRNEQ (name, ".gptab.")); 12467 sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1); 12468 BFD_ASSERT (sec != NULL); 12469 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx; 12470 break; 12471 12472 case SHT_MIPS_CONTENT: 12473 BFD_ASSERT ((*hdrpp)->bfd_section != NULL); 12474 name = bfd_section_name ((*hdrpp)->bfd_section); 12475 BFD_ASSERT (name != NULL 12476 && CONST_STRNEQ (name, ".MIPS.content")); 12477 sec = bfd_get_section_by_name (abfd, 12478 name + sizeof ".MIPS.content" - 1); 12479 BFD_ASSERT (sec != NULL); 12480 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 12481 break; 12482 12483 case SHT_MIPS_SYMBOL_LIB: 12484 sec = bfd_get_section_by_name (abfd, ".dynsym"); 12485 if (sec != NULL) 12486 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 12487 sec = bfd_get_section_by_name (abfd, ".liblist"); 12488 if (sec != NULL) 12489 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx; 12490 break; 12491 12492 case SHT_MIPS_EVENTS: 12493 BFD_ASSERT ((*hdrpp)->bfd_section != NULL); 12494 name = bfd_section_name ((*hdrpp)->bfd_section); 12495 BFD_ASSERT (name != NULL); 12496 if (CONST_STRNEQ (name, ".MIPS.events")) 12497 sec = bfd_get_section_by_name (abfd, 12498 name + sizeof ".MIPS.events" - 1); 12499 else 12500 { 12501 BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel")); 12502 sec = bfd_get_section_by_name (abfd, 12503 (name 12504 + sizeof ".MIPS.post_rel" - 1)); 12505 } 12506 BFD_ASSERT (sec != NULL); 12507 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 12508 break; 12509 12510 case SHT_MIPS_XHASH: 12511 sec = bfd_get_section_by_name (abfd, ".dynsym"); 12512 if (sec != NULL) 12513 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 12514 } 12515 } 12516 } 12517 12518 bfd_boolean 12519 _bfd_mips_elf_final_write_processing (bfd *abfd) 12520 { 12521 _bfd_mips_final_write_processing (abfd); 12522 return _bfd_elf_final_write_processing (abfd); 12523 } 12524 12525 /* When creating an IRIX5 executable, we need REGINFO and RTPROC 12526 segments. */ 12527 12528 int 12529 _bfd_mips_elf_additional_program_headers (bfd *abfd, 12530 struct bfd_link_info *info ATTRIBUTE_UNUSED) 12531 { 12532 asection *s; 12533 int ret = 0; 12534 12535 /* See if we need a PT_MIPS_REGINFO segment. */ 12536 s = bfd_get_section_by_name (abfd, ".reginfo"); 12537 if (s && (s->flags & SEC_LOAD)) 12538 ++ret; 12539 12540 /* See if we need a PT_MIPS_ABIFLAGS segment. */ 12541 if (bfd_get_section_by_name (abfd, ".MIPS.abiflags")) 12542 ++ret; 12543 12544 /* See if we need a PT_MIPS_OPTIONS segment. */ 12545 if (IRIX_COMPAT (abfd) == ict_irix6 12546 && bfd_get_section_by_name (abfd, 12547 MIPS_ELF_OPTIONS_SECTION_NAME (abfd))) 12548 ++ret; 12549 12550 /* See if we need a PT_MIPS_RTPROC segment. */ 12551 if (IRIX_COMPAT (abfd) == ict_irix5 12552 && bfd_get_section_by_name (abfd, ".dynamic") 12553 && bfd_get_section_by_name (abfd, ".mdebug")) 12554 ++ret; 12555 12556 /* Allocate a PT_NULL header in dynamic objects. See 12557 _bfd_mips_elf_modify_segment_map for details. */ 12558 if (!SGI_COMPAT (abfd) 12559 && bfd_get_section_by_name (abfd, ".dynamic")) 12560 ++ret; 12561 12562 return ret; 12563 } 12564 12565 /* Modify the segment map for an IRIX5 executable. */ 12566 12567 bfd_boolean 12568 _bfd_mips_elf_modify_segment_map (bfd *abfd, 12569 struct bfd_link_info *info) 12570 { 12571 asection *s; 12572 struct elf_segment_map *m, **pm; 12573 bfd_size_type amt; 12574 12575 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO 12576 segment. */ 12577 s = bfd_get_section_by_name (abfd, ".reginfo"); 12578 if (s != NULL && (s->flags & SEC_LOAD) != 0) 12579 { 12580 for (m = elf_seg_map (abfd); m != NULL; m = m->next) 12581 if (m->p_type == PT_MIPS_REGINFO) 12582 break; 12583 if (m == NULL) 12584 { 12585 amt = sizeof *m; 12586 m = bfd_zalloc (abfd, amt); 12587 if (m == NULL) 12588 return FALSE; 12589 12590 m->p_type = PT_MIPS_REGINFO; 12591 m->count = 1; 12592 m->sections[0] = s; 12593 12594 /* We want to put it after the PHDR and INTERP segments. */ 12595 pm = &elf_seg_map (abfd); 12596 while (*pm != NULL 12597 && ((*pm)->p_type == PT_PHDR 12598 || (*pm)->p_type == PT_INTERP)) 12599 pm = &(*pm)->next; 12600 12601 m->next = *pm; 12602 *pm = m; 12603 } 12604 } 12605 12606 /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS 12607 segment. */ 12608 s = bfd_get_section_by_name (abfd, ".MIPS.abiflags"); 12609 if (s != NULL && (s->flags & SEC_LOAD) != 0) 12610 { 12611 for (m = elf_seg_map (abfd); m != NULL; m = m->next) 12612 if (m->p_type == PT_MIPS_ABIFLAGS) 12613 break; 12614 if (m == NULL) 12615 { 12616 amt = sizeof *m; 12617 m = bfd_zalloc (abfd, amt); 12618 if (m == NULL) 12619 return FALSE; 12620 12621 m->p_type = PT_MIPS_ABIFLAGS; 12622 m->count = 1; 12623 m->sections[0] = s; 12624 12625 /* We want to put it after the PHDR and INTERP segments. */ 12626 pm = &elf_seg_map (abfd); 12627 while (*pm != NULL 12628 && ((*pm)->p_type == PT_PHDR 12629 || (*pm)->p_type == PT_INTERP)) 12630 pm = &(*pm)->next; 12631 12632 m->next = *pm; 12633 *pm = m; 12634 } 12635 } 12636 12637 /* For IRIX 6, we don't have .mdebug sections, nor does anything but 12638 .dynamic end up in PT_DYNAMIC. However, we do have to insert a 12639 PT_MIPS_OPTIONS segment immediately following the program header 12640 table. */ 12641 if (NEWABI_P (abfd) 12642 /* On non-IRIX6 new abi, we'll have already created a segment 12643 for this section, so don't create another. I'm not sure this 12644 is not also the case for IRIX 6, but I can't test it right 12645 now. */ 12646 && IRIX_COMPAT (abfd) == ict_irix6) 12647 { 12648 for (s = abfd->sections; s; s = s->next) 12649 if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS) 12650 break; 12651 12652 if (s) 12653 { 12654 struct elf_segment_map *options_segment; 12655 12656 pm = &elf_seg_map (abfd); 12657 while (*pm != NULL 12658 && ((*pm)->p_type == PT_PHDR 12659 || (*pm)->p_type == PT_INTERP)) 12660 pm = &(*pm)->next; 12661 12662 if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS) 12663 { 12664 amt = sizeof (struct elf_segment_map); 12665 options_segment = bfd_zalloc (abfd, amt); 12666 options_segment->next = *pm; 12667 options_segment->p_type = PT_MIPS_OPTIONS; 12668 options_segment->p_flags = PF_R; 12669 options_segment->p_flags_valid = TRUE; 12670 options_segment->count = 1; 12671 options_segment->sections[0] = s; 12672 *pm = options_segment; 12673 } 12674 } 12675 } 12676 else 12677 { 12678 if (IRIX_COMPAT (abfd) == ict_irix5) 12679 { 12680 /* If there are .dynamic and .mdebug sections, we make a room 12681 for the RTPROC header. FIXME: Rewrite without section names. */ 12682 if (bfd_get_section_by_name (abfd, ".interp") == NULL 12683 && bfd_get_section_by_name (abfd, ".dynamic") != NULL 12684 && bfd_get_section_by_name (abfd, ".mdebug") != NULL) 12685 { 12686 for (m = elf_seg_map (abfd); m != NULL; m = m->next) 12687 if (m->p_type == PT_MIPS_RTPROC) 12688 break; 12689 if (m == NULL) 12690 { 12691 amt = sizeof *m; 12692 m = bfd_zalloc (abfd, amt); 12693 if (m == NULL) 12694 return FALSE; 12695 12696 m->p_type = PT_MIPS_RTPROC; 12697 12698 s = bfd_get_section_by_name (abfd, ".rtproc"); 12699 if (s == NULL) 12700 { 12701 m->count = 0; 12702 m->p_flags = 0; 12703 m->p_flags_valid = 1; 12704 } 12705 else 12706 { 12707 m->count = 1; 12708 m->sections[0] = s; 12709 } 12710 12711 /* We want to put it after the DYNAMIC segment. */ 12712 pm = &elf_seg_map (abfd); 12713 while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC) 12714 pm = &(*pm)->next; 12715 if (*pm != NULL) 12716 pm = &(*pm)->next; 12717 12718 m->next = *pm; 12719 *pm = m; 12720 } 12721 } 12722 } 12723 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic, 12724 .dynstr, .dynsym, and .hash sections, and everything in 12725 between. */ 12726 for (pm = &elf_seg_map (abfd); *pm != NULL; 12727 pm = &(*pm)->next) 12728 if ((*pm)->p_type == PT_DYNAMIC) 12729 break; 12730 m = *pm; 12731 /* GNU/Linux binaries do not need the extended PT_DYNAMIC section. 12732 glibc's dynamic linker has traditionally derived the number of 12733 tags from the p_filesz field, and sometimes allocates stack 12734 arrays of that size. An overly-big PT_DYNAMIC segment can 12735 be actively harmful in such cases. Making PT_DYNAMIC contain 12736 other sections can also make life hard for the prelinker, 12737 which might move one of the other sections to a different 12738 PT_LOAD segment. */ 12739 if (SGI_COMPAT (abfd) 12740 && m != NULL 12741 && m->count == 1 12742 && strcmp (m->sections[0]->name, ".dynamic") == 0) 12743 { 12744 static const char *sec_names[] = 12745 { 12746 ".dynamic", ".dynstr", ".dynsym", ".hash" 12747 }; 12748 bfd_vma low, high; 12749 unsigned int i, c; 12750 struct elf_segment_map *n; 12751 12752 low = ~(bfd_vma) 0; 12753 high = 0; 12754 for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++) 12755 { 12756 s = bfd_get_section_by_name (abfd, sec_names[i]); 12757 if (s != NULL && (s->flags & SEC_LOAD) != 0) 12758 { 12759 bfd_size_type sz; 12760 12761 if (low > s->vma) 12762 low = s->vma; 12763 sz = s->size; 12764 if (high < s->vma + sz) 12765 high = s->vma + sz; 12766 } 12767 } 12768 12769 c = 0; 12770 for (s = abfd->sections; s != NULL; s = s->next) 12771 if ((s->flags & SEC_LOAD) != 0 12772 && s->vma >= low 12773 && s->vma + s->size <= high) 12774 ++c; 12775 12776 amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *); 12777 n = bfd_zalloc (abfd, amt); 12778 if (n == NULL) 12779 return FALSE; 12780 *n = *m; 12781 n->count = c; 12782 12783 i = 0; 12784 for (s = abfd->sections; s != NULL; s = s->next) 12785 { 12786 if ((s->flags & SEC_LOAD) != 0 12787 && s->vma >= low 12788 && s->vma + s->size <= high) 12789 { 12790 n->sections[i] = s; 12791 ++i; 12792 } 12793 } 12794 12795 *pm = n; 12796 } 12797 } 12798 12799 /* Allocate a spare program header in dynamic objects so that tools 12800 like the prelinker can add an extra PT_LOAD entry. 12801 12802 If the prelinker needs to make room for a new PT_LOAD entry, its 12803 standard procedure is to move the first (read-only) sections into 12804 the new (writable) segment. However, the MIPS ABI requires 12805 .dynamic to be in a read-only segment, and the section will often 12806 start within sizeof (ElfNN_Phdr) bytes of the last program header. 12807 12808 Although the prelinker could in principle move .dynamic to a 12809 writable segment, it seems better to allocate a spare program 12810 header instead, and avoid the need to move any sections. 12811 There is a long tradition of allocating spare dynamic tags, 12812 so allocating a spare program header seems like a natural 12813 extension. 12814 12815 If INFO is NULL, we may be copying an already prelinked binary 12816 with objcopy or strip, so do not add this header. */ 12817 if (info != NULL 12818 && !SGI_COMPAT (abfd) 12819 && bfd_get_section_by_name (abfd, ".dynamic")) 12820 { 12821 for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next) 12822 if ((*pm)->p_type == PT_NULL) 12823 break; 12824 if (*pm == NULL) 12825 { 12826 m = bfd_zalloc (abfd, sizeof (*m)); 12827 if (m == NULL) 12828 return FALSE; 12829 12830 m->p_type = PT_NULL; 12831 *pm = m; 12832 } 12833 } 12834 12835 return TRUE; 12836 } 12837 12838 /* Return the section that should be marked against GC for a given 12839 relocation. */ 12840 12841 asection * 12842 _bfd_mips_elf_gc_mark_hook (asection *sec, 12843 struct bfd_link_info *info, 12844 Elf_Internal_Rela *rel, 12845 struct elf_link_hash_entry *h, 12846 Elf_Internal_Sym *sym) 12847 { 12848 /* ??? Do mips16 stub sections need to be handled special? */ 12849 12850 if (h != NULL) 12851 switch (ELF_R_TYPE (sec->owner, rel->r_info)) 12852 { 12853 case R_MIPS_GNU_VTINHERIT: 12854 case R_MIPS_GNU_VTENTRY: 12855 return NULL; 12856 } 12857 12858 return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); 12859 } 12860 12861 /* Prevent .MIPS.abiflags from being discarded with --gc-sections. */ 12862 12863 bfd_boolean 12864 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info, 12865 elf_gc_mark_hook_fn gc_mark_hook) 12866 { 12867 bfd *sub; 12868 12869 _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook); 12870 12871 for (sub = info->input_bfds; sub != NULL; sub = sub->link.next) 12872 { 12873 asection *o; 12874 12875 if (! is_mips_elf (sub)) 12876 continue; 12877 12878 for (o = sub->sections; o != NULL; o = o->next) 12879 if (!o->gc_mark 12880 && MIPS_ELF_ABIFLAGS_SECTION_NAME_P (bfd_section_name (o))) 12881 { 12882 if (!_bfd_elf_gc_mark (info, o, gc_mark_hook)) 12883 return FALSE; 12884 } 12885 } 12886 12887 return TRUE; 12888 } 12889 12890 /* Copy data from a MIPS ELF indirect symbol to its direct symbol, 12891 hiding the old indirect symbol. Process additional relocation 12892 information. Also called for weakdefs, in which case we just let 12893 _bfd_elf_link_hash_copy_indirect copy the flags for us. */ 12894 12895 void 12896 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info, 12897 struct elf_link_hash_entry *dir, 12898 struct elf_link_hash_entry *ind) 12899 { 12900 struct mips_elf_link_hash_entry *dirmips, *indmips; 12901 12902 _bfd_elf_link_hash_copy_indirect (info, dir, ind); 12903 12904 dirmips = (struct mips_elf_link_hash_entry *) dir; 12905 indmips = (struct mips_elf_link_hash_entry *) ind; 12906 /* Any absolute non-dynamic relocations against an indirect or weak 12907 definition will be against the target symbol. */ 12908 if (indmips->has_static_relocs) 12909 dirmips->has_static_relocs = TRUE; 12910 12911 if (ind->root.type != bfd_link_hash_indirect) 12912 return; 12913 12914 dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs; 12915 if (indmips->readonly_reloc) 12916 dirmips->readonly_reloc = TRUE; 12917 if (indmips->no_fn_stub) 12918 dirmips->no_fn_stub = TRUE; 12919 if (indmips->fn_stub) 12920 { 12921 dirmips->fn_stub = indmips->fn_stub; 12922 indmips->fn_stub = NULL; 12923 } 12924 if (indmips->need_fn_stub) 12925 { 12926 dirmips->need_fn_stub = TRUE; 12927 indmips->need_fn_stub = FALSE; 12928 } 12929 if (indmips->call_stub) 12930 { 12931 dirmips->call_stub = indmips->call_stub; 12932 indmips->call_stub = NULL; 12933 } 12934 if (indmips->call_fp_stub) 12935 { 12936 dirmips->call_fp_stub = indmips->call_fp_stub; 12937 indmips->call_fp_stub = NULL; 12938 } 12939 if (indmips->global_got_area < dirmips->global_got_area) 12940 dirmips->global_got_area = indmips->global_got_area; 12941 if (indmips->global_got_area < GGA_NONE) 12942 indmips->global_got_area = GGA_NONE; 12943 if (indmips->has_nonpic_branches) 12944 dirmips->has_nonpic_branches = TRUE; 12945 } 12946 12947 /* Take care of the special `__gnu_absolute_zero' symbol and ignore attempts 12948 to hide it. It has to remain global (it will also be protected) so as to 12949 be assigned a global GOT entry, which will then remain unchanged at load 12950 time. */ 12951 12952 void 12953 _bfd_mips_elf_hide_symbol (struct bfd_link_info *info, 12954 struct elf_link_hash_entry *entry, 12955 bfd_boolean force_local) 12956 { 12957 struct mips_elf_link_hash_table *htab; 12958 12959 htab = mips_elf_hash_table (info); 12960 BFD_ASSERT (htab != NULL); 12961 if (htab->use_absolute_zero 12962 && strcmp (entry->root.root.string, "__gnu_absolute_zero") == 0) 12963 return; 12964 12965 _bfd_elf_link_hash_hide_symbol (info, entry, force_local); 12966 } 12967 12968 #define PDR_SIZE 32 12969 12970 bfd_boolean 12971 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie, 12972 struct bfd_link_info *info) 12973 { 12974 asection *o; 12975 bfd_boolean ret = FALSE; 12976 unsigned char *tdata; 12977 size_t i, skip; 12978 12979 o = bfd_get_section_by_name (abfd, ".pdr"); 12980 if (! o) 12981 return FALSE; 12982 if (o->size == 0) 12983 return FALSE; 12984 if (o->size % PDR_SIZE != 0) 12985 return FALSE; 12986 if (o->output_section != NULL 12987 && bfd_is_abs_section (o->output_section)) 12988 return FALSE; 12989 12990 tdata = bfd_zmalloc (o->size / PDR_SIZE); 12991 if (! tdata) 12992 return FALSE; 12993 12994 cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, 12995 info->keep_memory); 12996 if (!cookie->rels) 12997 { 12998 free (tdata); 12999 return FALSE; 13000 } 13001 13002 cookie->rel = cookie->rels; 13003 cookie->relend = cookie->rels + o->reloc_count; 13004 13005 for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++) 13006 { 13007 if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie)) 13008 { 13009 tdata[i] = 1; 13010 skip ++; 13011 } 13012 } 13013 13014 if (skip != 0) 13015 { 13016 mips_elf_section_data (o)->u.tdata = tdata; 13017 if (o->rawsize == 0) 13018 o->rawsize = o->size; 13019 o->size -= skip * PDR_SIZE; 13020 ret = TRUE; 13021 } 13022 else 13023 free (tdata); 13024 13025 if (! info->keep_memory) 13026 free (cookie->rels); 13027 13028 return ret; 13029 } 13030 13031 bfd_boolean 13032 _bfd_mips_elf_ignore_discarded_relocs (asection *sec) 13033 { 13034 if (strcmp (sec->name, ".pdr") == 0) 13035 return TRUE; 13036 return FALSE; 13037 } 13038 13039 bfd_boolean 13040 _bfd_mips_elf_write_section (bfd *output_bfd, 13041 struct bfd_link_info *link_info ATTRIBUTE_UNUSED, 13042 asection *sec, bfd_byte *contents) 13043 { 13044 bfd_byte *to, *from, *end; 13045 int i; 13046 13047 if (strcmp (sec->name, ".pdr") != 0) 13048 return FALSE; 13049 13050 if (mips_elf_section_data (sec)->u.tdata == NULL) 13051 return FALSE; 13052 13053 to = contents; 13054 end = contents + sec->size; 13055 for (from = contents, i = 0; 13056 from < end; 13057 from += PDR_SIZE, i++) 13058 { 13059 if ((mips_elf_section_data (sec)->u.tdata)[i] == 1) 13060 continue; 13061 if (to != from) 13062 memcpy (to, from, PDR_SIZE); 13063 to += PDR_SIZE; 13064 } 13065 bfd_set_section_contents (output_bfd, sec->output_section, contents, 13066 sec->output_offset, sec->size); 13067 return TRUE; 13068 } 13069 13070 /* microMIPS code retains local labels for linker relaxation. Omit them 13071 from output by default for clarity. */ 13072 13073 bfd_boolean 13074 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym) 13075 { 13076 return _bfd_elf_is_local_label_name (abfd, sym->name); 13077 } 13078 13079 /* MIPS ELF uses a special find_nearest_line routine in order the 13080 handle the ECOFF debugging information. */ 13081 13082 struct mips_elf_find_line 13083 { 13084 struct ecoff_debug_info d; 13085 struct ecoff_find_line i; 13086 }; 13087 13088 bfd_boolean 13089 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols, 13090 asection *section, bfd_vma offset, 13091 const char **filename_ptr, 13092 const char **functionname_ptr, 13093 unsigned int *line_ptr, 13094 unsigned int *discriminator_ptr) 13095 { 13096 asection *msec; 13097 13098 if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset, 13099 filename_ptr, functionname_ptr, 13100 line_ptr, discriminator_ptr, 13101 dwarf_debug_sections, 13102 &elf_tdata (abfd)->dwarf2_find_line_info) 13103 == 1) 13104 return TRUE; 13105 13106 if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset, 13107 filename_ptr, functionname_ptr, 13108 line_ptr)) 13109 { 13110 if (!*functionname_ptr) 13111 _bfd_elf_find_function (abfd, symbols, section, offset, 13112 *filename_ptr ? NULL : filename_ptr, 13113 functionname_ptr); 13114 return TRUE; 13115 } 13116 13117 msec = bfd_get_section_by_name (abfd, ".mdebug"); 13118 if (msec != NULL) 13119 { 13120 flagword origflags; 13121 struct mips_elf_find_line *fi; 13122 const struct ecoff_debug_swap * const swap = 13123 get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap; 13124 13125 /* If we are called during a link, mips_elf_final_link may have 13126 cleared the SEC_HAS_CONTENTS field. We force it back on here 13127 if appropriate (which it normally will be). */ 13128 origflags = msec->flags; 13129 if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS) 13130 msec->flags |= SEC_HAS_CONTENTS; 13131 13132 fi = mips_elf_tdata (abfd)->find_line_info; 13133 if (fi == NULL) 13134 { 13135 bfd_size_type external_fdr_size; 13136 char *fraw_src; 13137 char *fraw_end; 13138 struct fdr *fdr_ptr; 13139 bfd_size_type amt = sizeof (struct mips_elf_find_line); 13140 13141 fi = bfd_zalloc (abfd, amt); 13142 if (fi == NULL) 13143 { 13144 msec->flags = origflags; 13145 return FALSE; 13146 } 13147 13148 if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d)) 13149 { 13150 msec->flags = origflags; 13151 return FALSE; 13152 } 13153 13154 /* Swap in the FDR information. */ 13155 amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr); 13156 fi->d.fdr = bfd_alloc (abfd, amt); 13157 if (fi->d.fdr == NULL) 13158 { 13159 msec->flags = origflags; 13160 return FALSE; 13161 } 13162 external_fdr_size = swap->external_fdr_size; 13163 fdr_ptr = fi->d.fdr; 13164 fraw_src = (char *) fi->d.external_fdr; 13165 fraw_end = (fraw_src 13166 + fi->d.symbolic_header.ifdMax * external_fdr_size); 13167 for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++) 13168 (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr); 13169 13170 mips_elf_tdata (abfd)->find_line_info = fi; 13171 13172 /* Note that we don't bother to ever free this information. 13173 find_nearest_line is either called all the time, as in 13174 objdump -l, so the information should be saved, or it is 13175 rarely called, as in ld error messages, so the memory 13176 wasted is unimportant. Still, it would probably be a 13177 good idea for free_cached_info to throw it away. */ 13178 } 13179 13180 if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap, 13181 &fi->i, filename_ptr, functionname_ptr, 13182 line_ptr)) 13183 { 13184 msec->flags = origflags; 13185 return TRUE; 13186 } 13187 13188 msec->flags = origflags; 13189 } 13190 13191 /* Fall back on the generic ELF find_nearest_line routine. */ 13192 13193 return _bfd_elf_find_nearest_line (abfd, symbols, section, offset, 13194 filename_ptr, functionname_ptr, 13195 line_ptr, discriminator_ptr); 13196 } 13197 13198 bfd_boolean 13199 _bfd_mips_elf_find_inliner_info (bfd *abfd, 13200 const char **filename_ptr, 13201 const char **functionname_ptr, 13202 unsigned int *line_ptr) 13203 { 13204 bfd_boolean found; 13205 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr, 13206 functionname_ptr, line_ptr, 13207 & elf_tdata (abfd)->dwarf2_find_line_info); 13208 return found; 13209 } 13210 13211 13212 /* When are writing out the .options or .MIPS.options section, 13213 remember the bytes we are writing out, so that we can install the 13214 GP value in the section_processing routine. */ 13215 13216 bfd_boolean 13217 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section, 13218 const void *location, 13219 file_ptr offset, bfd_size_type count) 13220 { 13221 if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name)) 13222 { 13223 bfd_byte *c; 13224 13225 if (elf_section_data (section) == NULL) 13226 { 13227 bfd_size_type amt = sizeof (struct bfd_elf_section_data); 13228 section->used_by_bfd = bfd_zalloc (abfd, amt); 13229 if (elf_section_data (section) == NULL) 13230 return FALSE; 13231 } 13232 c = mips_elf_section_data (section)->u.tdata; 13233 if (c == NULL) 13234 { 13235 c = bfd_zalloc (abfd, section->size); 13236 if (c == NULL) 13237 return FALSE; 13238 mips_elf_section_data (section)->u.tdata = c; 13239 } 13240 13241 memcpy (c + offset, location, count); 13242 } 13243 13244 return _bfd_elf_set_section_contents (abfd, section, location, offset, 13245 count); 13246 } 13247 13248 /* This is almost identical to bfd_generic_get_... except that some 13249 MIPS relocations need to be handled specially. Sigh. */ 13250 13251 bfd_byte * 13252 _bfd_elf_mips_get_relocated_section_contents 13253 (bfd *abfd, 13254 struct bfd_link_info *link_info, 13255 struct bfd_link_order *link_order, 13256 bfd_byte *data, 13257 bfd_boolean relocatable, 13258 asymbol **symbols) 13259 { 13260 /* Get enough memory to hold the stuff */ 13261 bfd *input_bfd = link_order->u.indirect.section->owner; 13262 asection *input_section = link_order->u.indirect.section; 13263 bfd_size_type sz; 13264 13265 long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section); 13266 arelent **reloc_vector = NULL; 13267 long reloc_count; 13268 13269 if (reloc_size < 0) 13270 goto error_return; 13271 13272 reloc_vector = bfd_malloc (reloc_size); 13273 if (reloc_vector == NULL && reloc_size != 0) 13274 goto error_return; 13275 13276 /* read in the section */ 13277 sz = input_section->rawsize ? input_section->rawsize : input_section->size; 13278 if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz)) 13279 goto error_return; 13280 13281 reloc_count = bfd_canonicalize_reloc (input_bfd, 13282 input_section, 13283 reloc_vector, 13284 symbols); 13285 if (reloc_count < 0) 13286 goto error_return; 13287 13288 if (reloc_count > 0) 13289 { 13290 arelent **parent; 13291 /* for mips */ 13292 int gp_found; 13293 bfd_vma gp = 0x12345678; /* initialize just to shut gcc up */ 13294 13295 { 13296 struct bfd_hash_entry *h; 13297 struct bfd_link_hash_entry *lh; 13298 /* Skip all this stuff if we aren't mixing formats. */ 13299 if (abfd && input_bfd 13300 && abfd->xvec == input_bfd->xvec) 13301 lh = 0; 13302 else 13303 { 13304 h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE); 13305 lh = (struct bfd_link_hash_entry *) h; 13306 } 13307 lookup: 13308 if (lh) 13309 { 13310 switch (lh->type) 13311 { 13312 case bfd_link_hash_undefined: 13313 case bfd_link_hash_undefweak: 13314 case bfd_link_hash_common: 13315 gp_found = 0; 13316 break; 13317 case bfd_link_hash_defined: 13318 case bfd_link_hash_defweak: 13319 gp_found = 1; 13320 gp = lh->u.def.value; 13321 break; 13322 case bfd_link_hash_indirect: 13323 case bfd_link_hash_warning: 13324 lh = lh->u.i.link; 13325 /* @@FIXME ignoring warning for now */ 13326 goto lookup; 13327 case bfd_link_hash_new: 13328 default: 13329 abort (); 13330 } 13331 } 13332 else 13333 gp_found = 0; 13334 } 13335 /* end mips */ 13336 for (parent = reloc_vector; *parent != NULL; parent++) 13337 { 13338 char *error_message = NULL; 13339 bfd_reloc_status_type r; 13340 13341 /* Specific to MIPS: Deal with relocation types that require 13342 knowing the gp of the output bfd. */ 13343 asymbol *sym = *(*parent)->sym_ptr_ptr; 13344 13345 /* If we've managed to find the gp and have a special 13346 function for the relocation then go ahead, else default 13347 to the generic handling. */ 13348 if (gp_found 13349 && (*parent)->howto->special_function 13350 == _bfd_mips_elf32_gprel16_reloc) 13351 r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent, 13352 input_section, relocatable, 13353 data, gp); 13354 else 13355 r = bfd_perform_relocation (input_bfd, *parent, data, 13356 input_section, 13357 relocatable ? abfd : NULL, 13358 &error_message); 13359 13360 if (relocatable) 13361 { 13362 asection *os = input_section->output_section; 13363 13364 /* A partial link, so keep the relocs */ 13365 os->orelocation[os->reloc_count] = *parent; 13366 os->reloc_count++; 13367 } 13368 13369 if (r != bfd_reloc_ok) 13370 { 13371 switch (r) 13372 { 13373 case bfd_reloc_undefined: 13374 (*link_info->callbacks->undefined_symbol) 13375 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), 13376 input_bfd, input_section, (*parent)->address, TRUE); 13377 break; 13378 case bfd_reloc_dangerous: 13379 BFD_ASSERT (error_message != NULL); 13380 (*link_info->callbacks->reloc_dangerous) 13381 (link_info, error_message, 13382 input_bfd, input_section, (*parent)->address); 13383 break; 13384 case bfd_reloc_overflow: 13385 (*link_info->callbacks->reloc_overflow) 13386 (link_info, NULL, 13387 bfd_asymbol_name (*(*parent)->sym_ptr_ptr), 13388 (*parent)->howto->name, (*parent)->addend, 13389 input_bfd, input_section, (*parent)->address); 13390 break; 13391 case bfd_reloc_outofrange: 13392 default: 13393 abort (); 13394 break; 13395 } 13396 13397 } 13398 } 13399 } 13400 if (reloc_vector != NULL) 13401 free (reloc_vector); 13402 return data; 13403 13404 error_return: 13405 if (reloc_vector != NULL) 13406 free (reloc_vector); 13407 return NULL; 13408 } 13409 13410 static bfd_boolean 13411 mips_elf_relax_delete_bytes (bfd *abfd, 13412 asection *sec, bfd_vma addr, int count) 13413 { 13414 Elf_Internal_Shdr *symtab_hdr; 13415 unsigned int sec_shndx; 13416 bfd_byte *contents; 13417 Elf_Internal_Rela *irel, *irelend; 13418 Elf_Internal_Sym *isym; 13419 Elf_Internal_Sym *isymend; 13420 struct elf_link_hash_entry **sym_hashes; 13421 struct elf_link_hash_entry **end_hashes; 13422 struct elf_link_hash_entry **start_hashes; 13423 unsigned int symcount; 13424 13425 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); 13426 contents = elf_section_data (sec)->this_hdr.contents; 13427 13428 irel = elf_section_data (sec)->relocs; 13429 irelend = irel + sec->reloc_count; 13430 13431 /* Actually delete the bytes. */ 13432 memmove (contents + addr, contents + addr + count, 13433 (size_t) (sec->size - addr - count)); 13434 sec->size -= count; 13435 13436 /* Adjust all the relocs. */ 13437 for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++) 13438 { 13439 /* Get the new reloc address. */ 13440 if (irel->r_offset > addr) 13441 irel->r_offset -= count; 13442 } 13443 13444 BFD_ASSERT (addr % 2 == 0); 13445 BFD_ASSERT (count % 2 == 0); 13446 13447 /* Adjust the local symbols defined in this section. */ 13448 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 13449 isym = (Elf_Internal_Sym *) symtab_hdr->contents; 13450 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++) 13451 if (isym->st_shndx == sec_shndx && isym->st_value > addr) 13452 isym->st_value -= count; 13453 13454 /* Now adjust the global symbols defined in this section. */ 13455 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym) 13456 - symtab_hdr->sh_info); 13457 sym_hashes = start_hashes = elf_sym_hashes (abfd); 13458 end_hashes = sym_hashes + symcount; 13459 13460 for (; sym_hashes < end_hashes; sym_hashes++) 13461 { 13462 struct elf_link_hash_entry *sym_hash = *sym_hashes; 13463 13464 if ((sym_hash->root.type == bfd_link_hash_defined 13465 || sym_hash->root.type == bfd_link_hash_defweak) 13466 && sym_hash->root.u.def.section == sec) 13467 { 13468 bfd_vma value = sym_hash->root.u.def.value; 13469 13470 if (ELF_ST_IS_MICROMIPS (sym_hash->other)) 13471 value &= MINUS_TWO; 13472 if (value > addr) 13473 sym_hash->root.u.def.value -= count; 13474 } 13475 } 13476 13477 return TRUE; 13478 } 13479 13480 13481 /* Opcodes needed for microMIPS relaxation as found in 13482 opcodes/micromips-opc.c. */ 13483 13484 struct opcode_descriptor { 13485 unsigned long match; 13486 unsigned long mask; 13487 }; 13488 13489 /* The $ra register aka $31. */ 13490 13491 #define RA 31 13492 13493 /* 32-bit instruction format register fields. */ 13494 13495 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f) 13496 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f) 13497 13498 /* Check if a 5-bit register index can be abbreviated to 3 bits. */ 13499 13500 #define OP16_VALID_REG(r) \ 13501 ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17)) 13502 13503 13504 /* 32-bit and 16-bit branches. */ 13505 13506 static const struct opcode_descriptor b_insns_32[] = { 13507 { /* "b", "p", */ 0x40400000, 0xffff0000 }, /* bgez 0 */ 13508 { /* "b", "p", */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */ 13509 { 0, 0 } /* End marker for find_match(). */ 13510 }; 13511 13512 static const struct opcode_descriptor bc_insn_32 = 13513 { /* "bc(1|2)(ft)", "N,p", */ 0x42800000, 0xfec30000 }; 13514 13515 static const struct opcode_descriptor bz_insn_32 = 13516 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 }; 13517 13518 static const struct opcode_descriptor bzal_insn_32 = 13519 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 }; 13520 13521 static const struct opcode_descriptor beq_insn_32 = 13522 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 }; 13523 13524 static const struct opcode_descriptor b_insn_16 = 13525 { /* "b", "mD", */ 0xcc00, 0xfc00 }; 13526 13527 static const struct opcode_descriptor bz_insn_16 = 13528 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 }; 13529 13530 13531 /* 32-bit and 16-bit branch EQ and NE zero. */ 13532 13533 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the 13534 eq and second the ne. This convention is used when replacing a 13535 32-bit BEQ/BNE with the 16-bit version. */ 13536 13537 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16) 13538 13539 static const struct opcode_descriptor bz_rs_insns_32[] = { 13540 { /* "beqz", "s,p", */ 0x94000000, 0xffe00000 }, 13541 { /* "bnez", "s,p", */ 0xb4000000, 0xffe00000 }, 13542 { 0, 0 } /* End marker for find_match(). */ 13543 }; 13544 13545 static const struct opcode_descriptor bz_rt_insns_32[] = { 13546 { /* "beqz", "t,p", */ 0x94000000, 0xfc01f000 }, 13547 { /* "bnez", "t,p", */ 0xb4000000, 0xfc01f000 }, 13548 { 0, 0 } /* End marker for find_match(). */ 13549 }; 13550 13551 static const struct opcode_descriptor bzc_insns_32[] = { 13552 { /* "beqzc", "s,p", */ 0x40e00000, 0xffe00000 }, 13553 { /* "bnezc", "s,p", */ 0x40a00000, 0xffe00000 }, 13554 { 0, 0 } /* End marker for find_match(). */ 13555 }; 13556 13557 static const struct opcode_descriptor bz_insns_16[] = { 13558 { /* "beqz", "md,mE", */ 0x8c00, 0xfc00 }, 13559 { /* "bnez", "md,mE", */ 0xac00, 0xfc00 }, 13560 { 0, 0 } /* End marker for find_match(). */ 13561 }; 13562 13563 /* Switch between a 5-bit register index and its 3-bit shorthand. */ 13564 13565 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2) 13566 #define BZ16_REG_FIELD(r) (((r) & 7) << 7) 13567 13568 13569 /* 32-bit instructions with a delay slot. */ 13570 13571 static const struct opcode_descriptor jal_insn_32_bd16 = 13572 { /* "jals", "a", */ 0x74000000, 0xfc000000 }; 13573 13574 static const struct opcode_descriptor jal_insn_32_bd32 = 13575 { /* "jal", "a", */ 0xf4000000, 0xfc000000 }; 13576 13577 static const struct opcode_descriptor jal_x_insn_32_bd32 = 13578 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 }; 13579 13580 static const struct opcode_descriptor j_insn_32 = 13581 { /* "j", "a", */ 0xd4000000, 0xfc000000 }; 13582 13583 static const struct opcode_descriptor jalr_insn_32 = 13584 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff }; 13585 13586 /* This table can be compacted, because no opcode replacement is made. */ 13587 13588 static const struct opcode_descriptor ds_insns_32_bd16[] = { 13589 { /* "jals", "a", */ 0x74000000, 0xfc000000 }, 13590 13591 { /* "jalrs[.hb]", "t,s", */ 0x00004f3c, 0xfc00efff }, 13592 { /* "b(ge|lt)zals", "s,p", */ 0x42200000, 0xffa00000 }, 13593 13594 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 }, 13595 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 }, 13596 { /* "j", "a", */ 0xd4000000, 0xfc000000 }, 13597 { 0, 0 } /* End marker for find_match(). */ 13598 }; 13599 13600 /* This table can be compacted, because no opcode replacement is made. */ 13601 13602 static const struct opcode_descriptor ds_insns_32_bd32[] = { 13603 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 }, 13604 13605 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff }, 13606 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 }, 13607 { 0, 0 } /* End marker for find_match(). */ 13608 }; 13609 13610 13611 /* 16-bit instructions with a delay slot. */ 13612 13613 static const struct opcode_descriptor jalr_insn_16_bd16 = 13614 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 }; 13615 13616 static const struct opcode_descriptor jalr_insn_16_bd32 = 13617 { /* "jalr", "my,mj", */ 0x45c0, 0xffe0 }; 13618 13619 static const struct opcode_descriptor jr_insn_16 = 13620 { /* "jr", "mj", */ 0x4580, 0xffe0 }; 13621 13622 #define JR16_REG(opcode) ((opcode) & 0x1f) 13623 13624 /* This table can be compacted, because no opcode replacement is made. */ 13625 13626 static const struct opcode_descriptor ds_insns_16_bd16[] = { 13627 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 }, 13628 13629 { /* "b", "mD", */ 0xcc00, 0xfc00 }, 13630 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 }, 13631 { /* "jr", "mj", */ 0x4580, 0xffe0 }, 13632 { 0, 0 } /* End marker for find_match(). */ 13633 }; 13634 13635 13636 /* LUI instruction. */ 13637 13638 static const struct opcode_descriptor lui_insn = 13639 { /* "lui", "s,u", */ 0x41a00000, 0xffe00000 }; 13640 13641 13642 /* ADDIU instruction. */ 13643 13644 static const struct opcode_descriptor addiu_insn = 13645 { /* "addiu", "t,r,j", */ 0x30000000, 0xfc000000 }; 13646 13647 static const struct opcode_descriptor addiupc_insn = 13648 { /* "addiu", "mb,$pc,mQ", */ 0x78000000, 0xfc000000 }; 13649 13650 #define ADDIUPC_REG_FIELD(r) \ 13651 (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23) 13652 13653 13654 /* Relaxable instructions in a JAL delay slot: MOVE. */ 13655 13656 /* The 16-bit move has rd in 9:5 and rs in 4:0. The 32-bit moves 13657 (ADDU, OR) have rd in 15:11 and rs in 10:16. */ 13658 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f) 13659 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f) 13660 13661 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5) 13662 #define MOVE16_RS_FIELD(r) (((r) & 0x1f) ) 13663 13664 static const struct opcode_descriptor move_insns_32[] = { 13665 { /* "move", "d,s", */ 0x00000290, 0xffe007ff }, /* or d,s,$0 */ 13666 { /* "move", "d,s", */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */ 13667 { 0, 0 } /* End marker for find_match(). */ 13668 }; 13669 13670 static const struct opcode_descriptor move_insn_16 = 13671 { /* "move", "mp,mj", */ 0x0c00, 0xfc00 }; 13672 13673 13674 /* NOP instructions. */ 13675 13676 static const struct opcode_descriptor nop_insn_32 = 13677 { /* "nop", "", */ 0x00000000, 0xffffffff }; 13678 13679 static const struct opcode_descriptor nop_insn_16 = 13680 { /* "nop", "", */ 0x0c00, 0xffff }; 13681 13682 13683 /* Instruction match support. */ 13684 13685 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match) 13686 13687 static int 13688 find_match (unsigned long opcode, const struct opcode_descriptor insn[]) 13689 { 13690 unsigned long indx; 13691 13692 for (indx = 0; insn[indx].mask != 0; indx++) 13693 if (MATCH (opcode, insn[indx])) 13694 return indx; 13695 13696 return -1; 13697 } 13698 13699 13700 /* Branch and delay slot decoding support. */ 13701 13702 /* If PTR points to what *might* be a 16-bit branch or jump, then 13703 return the minimum length of its delay slot, otherwise return 0. 13704 Non-zero results are not definitive as we might be checking against 13705 the second half of another instruction. */ 13706 13707 static int 13708 check_br16_dslot (bfd *abfd, bfd_byte *ptr) 13709 { 13710 unsigned long opcode; 13711 int bdsize; 13712 13713 opcode = bfd_get_16 (abfd, ptr); 13714 if (MATCH (opcode, jalr_insn_16_bd32) != 0) 13715 /* 16-bit branch/jump with a 32-bit delay slot. */ 13716 bdsize = 4; 13717 else if (MATCH (opcode, jalr_insn_16_bd16) != 0 13718 || find_match (opcode, ds_insns_16_bd16) >= 0) 13719 /* 16-bit branch/jump with a 16-bit delay slot. */ 13720 bdsize = 2; 13721 else 13722 /* No delay slot. */ 13723 bdsize = 0; 13724 13725 return bdsize; 13726 } 13727 13728 /* If PTR points to what *might* be a 32-bit branch or jump, then 13729 return the minimum length of its delay slot, otherwise return 0. 13730 Non-zero results are not definitive as we might be checking against 13731 the second half of another instruction. */ 13732 13733 static int 13734 check_br32_dslot (bfd *abfd, bfd_byte *ptr) 13735 { 13736 unsigned long opcode; 13737 int bdsize; 13738 13739 opcode = bfd_get_micromips_32 (abfd, ptr); 13740 if (find_match (opcode, ds_insns_32_bd32) >= 0) 13741 /* 32-bit branch/jump with a 32-bit delay slot. */ 13742 bdsize = 4; 13743 else if (find_match (opcode, ds_insns_32_bd16) >= 0) 13744 /* 32-bit branch/jump with a 16-bit delay slot. */ 13745 bdsize = 2; 13746 else 13747 /* No delay slot. */ 13748 bdsize = 0; 13749 13750 return bdsize; 13751 } 13752 13753 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot 13754 that doesn't fiddle with REG, then return TRUE, otherwise FALSE. */ 13755 13756 static bfd_boolean 13757 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg) 13758 { 13759 unsigned long opcode; 13760 13761 opcode = bfd_get_16 (abfd, ptr); 13762 if (MATCH (opcode, b_insn_16) 13763 /* B16 */ 13764 || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode)) 13765 /* JR16 */ 13766 || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode)) 13767 /* BEQZ16, BNEZ16 */ 13768 || (MATCH (opcode, jalr_insn_16_bd32) 13769 /* JALR16 */ 13770 && reg != JR16_REG (opcode) && reg != RA)) 13771 return TRUE; 13772 13773 return FALSE; 13774 } 13775 13776 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG, 13777 then return TRUE, otherwise FALSE. */ 13778 13779 static bfd_boolean 13780 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg) 13781 { 13782 unsigned long opcode; 13783 13784 opcode = bfd_get_micromips_32 (abfd, ptr); 13785 if (MATCH (opcode, j_insn_32) 13786 /* J */ 13787 || MATCH (opcode, bc_insn_32) 13788 /* BC1F, BC1T, BC2F, BC2T */ 13789 || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA) 13790 /* JAL, JALX */ 13791 || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode)) 13792 /* BGEZ, BGTZ, BLEZ, BLTZ */ 13793 || (MATCH (opcode, bzal_insn_32) 13794 /* BGEZAL, BLTZAL */ 13795 && reg != OP32_SREG (opcode) && reg != RA) 13796 || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32)) 13797 /* JALR, JALR.HB, BEQ, BNE */ 13798 && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode))) 13799 return TRUE; 13800 13801 return FALSE; 13802 } 13803 13804 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS, 13805 IRELEND) at OFFSET indicate that there must be a compact branch there, 13806 then return TRUE, otherwise FALSE. */ 13807 13808 static bfd_boolean 13809 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset, 13810 const Elf_Internal_Rela *internal_relocs, 13811 const Elf_Internal_Rela *irelend) 13812 { 13813 const Elf_Internal_Rela *irel; 13814 unsigned long opcode; 13815 13816 opcode = bfd_get_micromips_32 (abfd, ptr); 13817 if (find_match (opcode, bzc_insns_32) < 0) 13818 return FALSE; 13819 13820 for (irel = internal_relocs; irel < irelend; irel++) 13821 if (irel->r_offset == offset 13822 && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1) 13823 return TRUE; 13824 13825 return FALSE; 13826 } 13827 13828 /* Bitsize checking. */ 13829 #define IS_BITSIZE(val, N) \ 13830 (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1))) \ 13831 - (1ULL << ((N) - 1))) == (val)) 13832 13833 13834 bfd_boolean 13835 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec, 13836 struct bfd_link_info *link_info, 13837 bfd_boolean *again) 13838 { 13839 bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32; 13840 Elf_Internal_Shdr *symtab_hdr; 13841 Elf_Internal_Rela *internal_relocs; 13842 Elf_Internal_Rela *irel, *irelend; 13843 bfd_byte *contents = NULL; 13844 Elf_Internal_Sym *isymbuf = NULL; 13845 13846 /* Assume nothing changes. */ 13847 *again = FALSE; 13848 13849 /* We don't have to do anything for a relocatable link, if 13850 this section does not have relocs, or if this is not a 13851 code section. */ 13852 13853 if (bfd_link_relocatable (link_info) 13854 || (sec->flags & SEC_RELOC) == 0 13855 || sec->reloc_count == 0 13856 || (sec->flags & SEC_CODE) == 0) 13857 return TRUE; 13858 13859 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 13860 13861 /* Get a copy of the native relocations. */ 13862 internal_relocs = (_bfd_elf_link_read_relocs 13863 (abfd, sec, NULL, (Elf_Internal_Rela *) NULL, 13864 link_info->keep_memory)); 13865 if (internal_relocs == NULL) 13866 goto error_return; 13867 13868 /* Walk through them looking for relaxing opportunities. */ 13869 irelend = internal_relocs + sec->reloc_count; 13870 for (irel = internal_relocs; irel < irelend; irel++) 13871 { 13872 unsigned long r_symndx = ELF32_R_SYM (irel->r_info); 13873 unsigned int r_type = ELF32_R_TYPE (irel->r_info); 13874 bfd_boolean target_is_micromips_code_p; 13875 unsigned long opcode; 13876 bfd_vma symval; 13877 bfd_vma pcrval; 13878 bfd_byte *ptr; 13879 int fndopc; 13880 13881 /* The number of bytes to delete for relaxation and from where 13882 to delete these bytes starting at irel->r_offset. */ 13883 int delcnt = 0; 13884 int deloff = 0; 13885 13886 /* If this isn't something that can be relaxed, then ignore 13887 this reloc. */ 13888 if (r_type != R_MICROMIPS_HI16 13889 && r_type != R_MICROMIPS_PC16_S1 13890 && r_type != R_MICROMIPS_26_S1) 13891 continue; 13892 13893 /* Get the section contents if we haven't done so already. */ 13894 if (contents == NULL) 13895 { 13896 /* Get cached copy if it exists. */ 13897 if (elf_section_data (sec)->this_hdr.contents != NULL) 13898 contents = elf_section_data (sec)->this_hdr.contents; 13899 /* Go get them off disk. */ 13900 else if (!bfd_malloc_and_get_section (abfd, sec, &contents)) 13901 goto error_return; 13902 } 13903 ptr = contents + irel->r_offset; 13904 13905 /* Read this BFD's local symbols if we haven't done so already. */ 13906 if (isymbuf == NULL && symtab_hdr->sh_info != 0) 13907 { 13908 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; 13909 if (isymbuf == NULL) 13910 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr, 13911 symtab_hdr->sh_info, 0, 13912 NULL, NULL, NULL); 13913 if (isymbuf == NULL) 13914 goto error_return; 13915 } 13916 13917 /* Get the value of the symbol referred to by the reloc. */ 13918 if (r_symndx < symtab_hdr->sh_info) 13919 { 13920 /* A local symbol. */ 13921 Elf_Internal_Sym *isym; 13922 asection *sym_sec; 13923 13924 isym = isymbuf + r_symndx; 13925 if (isym->st_shndx == SHN_UNDEF) 13926 sym_sec = bfd_und_section_ptr; 13927 else if (isym->st_shndx == SHN_ABS) 13928 sym_sec = bfd_abs_section_ptr; 13929 else if (isym->st_shndx == SHN_COMMON) 13930 sym_sec = bfd_com_section_ptr; 13931 else 13932 sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx); 13933 symval = (isym->st_value 13934 + sym_sec->output_section->vma 13935 + sym_sec->output_offset); 13936 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other); 13937 } 13938 else 13939 { 13940 unsigned long indx; 13941 struct elf_link_hash_entry *h; 13942 13943 /* An external symbol. */ 13944 indx = r_symndx - symtab_hdr->sh_info; 13945 h = elf_sym_hashes (abfd)[indx]; 13946 BFD_ASSERT (h != NULL); 13947 13948 if (h->root.type != bfd_link_hash_defined 13949 && h->root.type != bfd_link_hash_defweak) 13950 /* This appears to be a reference to an undefined 13951 symbol. Just ignore it -- it will be caught by the 13952 regular reloc processing. */ 13953 continue; 13954 13955 symval = (h->root.u.def.value 13956 + h->root.u.def.section->output_section->vma 13957 + h->root.u.def.section->output_offset); 13958 target_is_micromips_code_p = (!h->needs_plt 13959 && ELF_ST_IS_MICROMIPS (h->other)); 13960 } 13961 13962 13963 /* For simplicity of coding, we are going to modify the 13964 section contents, the section relocs, and the BFD symbol 13965 table. We must tell the rest of the code not to free up this 13966 information. It would be possible to instead create a table 13967 of changes which have to be made, as is done in coff-mips.c; 13968 that would be more work, but would require less memory when 13969 the linker is run. */ 13970 13971 /* Only 32-bit instructions relaxed. */ 13972 if (irel->r_offset + 4 > sec->size) 13973 continue; 13974 13975 opcode = bfd_get_micromips_32 (abfd, ptr); 13976 13977 /* This is the pc-relative distance from the instruction the 13978 relocation is applied to, to the symbol referred. */ 13979 pcrval = (symval 13980 - (sec->output_section->vma + sec->output_offset) 13981 - irel->r_offset); 13982 13983 /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation 13984 of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or 13985 R_MICROMIPS_PC23_S2. The R_MICROMIPS_PC23_S2 condition is 13986 13987 (symval % 4 == 0 && IS_BITSIZE (pcrval, 25)) 13988 13989 where pcrval has first to be adjusted to apply against the LO16 13990 location (we make the adjustment later on, when we have figured 13991 out the offset). */ 13992 if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn)) 13993 { 13994 bfd_boolean bzc = FALSE; 13995 unsigned long nextopc; 13996 unsigned long reg; 13997 bfd_vma offset; 13998 13999 /* Give up if the previous reloc was a HI16 against this symbol 14000 too. */ 14001 if (irel > internal_relocs 14002 && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16 14003 && ELF32_R_SYM (irel[-1].r_info) == r_symndx) 14004 continue; 14005 14006 /* Or if the next reloc is not a LO16 against this symbol. */ 14007 if (irel + 1 >= irelend 14008 || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16 14009 || ELF32_R_SYM (irel[1].r_info) != r_symndx) 14010 continue; 14011 14012 /* Or if the second next reloc is a LO16 against this symbol too. */ 14013 if (irel + 2 >= irelend 14014 && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16 14015 && ELF32_R_SYM (irel[2].r_info) == r_symndx) 14016 continue; 14017 14018 /* See if the LUI instruction *might* be in a branch delay slot. 14019 We check whether what looks like a 16-bit branch or jump is 14020 actually an immediate argument to a compact branch, and let 14021 it through if so. */ 14022 if (irel->r_offset >= 2 14023 && check_br16_dslot (abfd, ptr - 2) 14024 && !(irel->r_offset >= 4 14025 && (bzc = check_relocated_bzc (abfd, 14026 ptr - 4, irel->r_offset - 4, 14027 internal_relocs, irelend)))) 14028 continue; 14029 if (irel->r_offset >= 4 14030 && !bzc 14031 && check_br32_dslot (abfd, ptr - 4)) 14032 continue; 14033 14034 reg = OP32_SREG (opcode); 14035 14036 /* We only relax adjacent instructions or ones separated with 14037 a branch or jump that has a delay slot. The branch or jump 14038 must not fiddle with the register used to hold the address. 14039 Subtract 4 for the LUI itself. */ 14040 offset = irel[1].r_offset - irel[0].r_offset; 14041 switch (offset - 4) 14042 { 14043 case 0: 14044 break; 14045 case 2: 14046 if (check_br16 (abfd, ptr + 4, reg)) 14047 break; 14048 continue; 14049 case 4: 14050 if (check_br32 (abfd, ptr + 4, reg)) 14051 break; 14052 continue; 14053 default: 14054 continue; 14055 } 14056 14057 nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset); 14058 14059 /* Give up unless the same register is used with both 14060 relocations. */ 14061 if (OP32_SREG (nextopc) != reg) 14062 continue; 14063 14064 /* Now adjust pcrval, subtracting the offset to the LO16 reloc 14065 and rounding up to take masking of the two LSBs into account. */ 14066 pcrval = ((pcrval - offset + 3) | 3) ^ 3; 14067 14068 /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16. */ 14069 if (IS_BITSIZE (symval, 16)) 14070 { 14071 /* Fix the relocation's type. */ 14072 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16); 14073 14074 /* Instructions using R_MICROMIPS_LO16 have the base or 14075 source register in bits 20:16. This register becomes $0 14076 (zero) as the result of the R_MICROMIPS_HI16 being 0. */ 14077 nextopc &= ~0x001f0000; 14078 bfd_put_16 (abfd, (nextopc >> 16) & 0xffff, 14079 contents + irel[1].r_offset); 14080 } 14081 14082 /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2. 14083 We add 4 to take LUI deletion into account while checking 14084 the PC-relative distance. */ 14085 else if (symval % 4 == 0 14086 && IS_BITSIZE (pcrval + 4, 25) 14087 && MATCH (nextopc, addiu_insn) 14088 && OP32_TREG (nextopc) == OP32_SREG (nextopc) 14089 && OP16_VALID_REG (OP32_TREG (nextopc))) 14090 { 14091 /* Fix the relocation's type. */ 14092 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2); 14093 14094 /* Replace ADDIU with the ADDIUPC version. */ 14095 nextopc = (addiupc_insn.match 14096 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc))); 14097 14098 bfd_put_micromips_32 (abfd, nextopc, 14099 contents + irel[1].r_offset); 14100 } 14101 14102 /* Can't do anything, give up, sigh... */ 14103 else 14104 continue; 14105 14106 /* Fix the relocation's type. */ 14107 irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE); 14108 14109 /* Delete the LUI instruction: 4 bytes at irel->r_offset. */ 14110 delcnt = 4; 14111 deloff = 0; 14112 } 14113 14114 /* Compact branch relaxation -- due to the multitude of macros 14115 employed by the compiler/assembler, compact branches are not 14116 always generated. Obviously, this can/will be fixed elsewhere, 14117 but there is no drawback in double checking it here. */ 14118 else if (r_type == R_MICROMIPS_PC16_S1 14119 && irel->r_offset + 5 < sec->size 14120 && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0 14121 || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0) 14122 && ((!insn32 14123 && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4), 14124 nop_insn_16) ? 2 : 0)) 14125 || (irel->r_offset + 7 < sec->size 14126 && (delcnt = MATCH (bfd_get_micromips_32 (abfd, 14127 ptr + 4), 14128 nop_insn_32) ? 4 : 0)))) 14129 { 14130 unsigned long reg; 14131 14132 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode); 14133 14134 /* Replace BEQZ/BNEZ with the compact version. */ 14135 opcode = (bzc_insns_32[fndopc].match 14136 | BZC32_REG_FIELD (reg) 14137 | (opcode & 0xffff)); /* Addend value. */ 14138 14139 bfd_put_micromips_32 (abfd, opcode, ptr); 14140 14141 /* Delete the delay slot NOP: two or four bytes from 14142 irel->offset + 4; delcnt has already been set above. */ 14143 deloff = 4; 14144 } 14145 14146 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1. We need 14147 to check the distance from the next instruction, so subtract 2. */ 14148 else if (!insn32 14149 && r_type == R_MICROMIPS_PC16_S1 14150 && IS_BITSIZE (pcrval - 2, 11) 14151 && find_match (opcode, b_insns_32) >= 0) 14152 { 14153 /* Fix the relocation's type. */ 14154 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1); 14155 14156 /* Replace the 32-bit opcode with a 16-bit opcode. */ 14157 bfd_put_16 (abfd, 14158 (b_insn_16.match 14159 | (opcode & 0x3ff)), /* Addend value. */ 14160 ptr); 14161 14162 /* Delete 2 bytes from irel->r_offset + 2. */ 14163 delcnt = 2; 14164 deloff = 2; 14165 } 14166 14167 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1. We need 14168 to check the distance from the next instruction, so subtract 2. */ 14169 else if (!insn32 14170 && r_type == R_MICROMIPS_PC16_S1 14171 && IS_BITSIZE (pcrval - 2, 8) 14172 && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0 14173 && OP16_VALID_REG (OP32_SREG (opcode))) 14174 || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0 14175 && OP16_VALID_REG (OP32_TREG (opcode))))) 14176 { 14177 unsigned long reg; 14178 14179 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode); 14180 14181 /* Fix the relocation's type. */ 14182 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1); 14183 14184 /* Replace the 32-bit opcode with a 16-bit opcode. */ 14185 bfd_put_16 (abfd, 14186 (bz_insns_16[fndopc].match 14187 | BZ16_REG_FIELD (reg) 14188 | (opcode & 0x7f)), /* Addend value. */ 14189 ptr); 14190 14191 /* Delete 2 bytes from irel->r_offset + 2. */ 14192 delcnt = 2; 14193 deloff = 2; 14194 } 14195 14196 /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets. */ 14197 else if (!insn32 14198 && r_type == R_MICROMIPS_26_S1 14199 && target_is_micromips_code_p 14200 && irel->r_offset + 7 < sec->size 14201 && MATCH (opcode, jal_insn_32_bd32)) 14202 { 14203 unsigned long n32opc; 14204 bfd_boolean relaxed = FALSE; 14205 14206 n32opc = bfd_get_micromips_32 (abfd, ptr + 4); 14207 14208 if (MATCH (n32opc, nop_insn_32)) 14209 { 14210 /* Replace delay slot 32-bit NOP with a 16-bit NOP. */ 14211 bfd_put_16 (abfd, nop_insn_16.match, ptr + 4); 14212 14213 relaxed = TRUE; 14214 } 14215 else if (find_match (n32opc, move_insns_32) >= 0) 14216 { 14217 /* Replace delay slot 32-bit MOVE with 16-bit MOVE. */ 14218 bfd_put_16 (abfd, 14219 (move_insn_16.match 14220 | MOVE16_RD_FIELD (MOVE32_RD (n32opc)) 14221 | MOVE16_RS_FIELD (MOVE32_RS (n32opc))), 14222 ptr + 4); 14223 14224 relaxed = TRUE; 14225 } 14226 /* Other 32-bit instructions relaxable to 16-bit 14227 instructions will be handled here later. */ 14228 14229 if (relaxed) 14230 { 14231 /* JAL with 32-bit delay slot that is changed to a JALS 14232 with 16-bit delay slot. */ 14233 bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr); 14234 14235 /* Delete 2 bytes from irel->r_offset + 6. */ 14236 delcnt = 2; 14237 deloff = 6; 14238 } 14239 } 14240 14241 if (delcnt != 0) 14242 { 14243 /* Note that we've changed the relocs, section contents, etc. */ 14244 elf_section_data (sec)->relocs = internal_relocs; 14245 elf_section_data (sec)->this_hdr.contents = contents; 14246 symtab_hdr->contents = (unsigned char *) isymbuf; 14247 14248 /* Delete bytes depending on the delcnt and deloff. */ 14249 if (!mips_elf_relax_delete_bytes (abfd, sec, 14250 irel->r_offset + deloff, delcnt)) 14251 goto error_return; 14252 14253 /* That will change things, so we should relax again. 14254 Note that this is not required, and it may be slow. */ 14255 *again = TRUE; 14256 } 14257 } 14258 14259 if (isymbuf != NULL 14260 && symtab_hdr->contents != (unsigned char *) isymbuf) 14261 { 14262 if (! link_info->keep_memory) 14263 free (isymbuf); 14264 else 14265 { 14266 /* Cache the symbols for elf_link_input_bfd. */ 14267 symtab_hdr->contents = (unsigned char *) isymbuf; 14268 } 14269 } 14270 14271 if (contents != NULL 14272 && elf_section_data (sec)->this_hdr.contents != contents) 14273 { 14274 if (! link_info->keep_memory) 14275 free (contents); 14276 else 14277 { 14278 /* Cache the section contents for elf_link_input_bfd. */ 14279 elf_section_data (sec)->this_hdr.contents = contents; 14280 } 14281 } 14282 14283 if (internal_relocs != NULL 14284 && elf_section_data (sec)->relocs != internal_relocs) 14285 free (internal_relocs); 14286 14287 return TRUE; 14288 14289 error_return: 14290 if (isymbuf != NULL 14291 && symtab_hdr->contents != (unsigned char *) isymbuf) 14292 free (isymbuf); 14293 if (contents != NULL 14294 && elf_section_data (sec)->this_hdr.contents != contents) 14295 free (contents); 14296 if (internal_relocs != NULL 14297 && elf_section_data (sec)->relocs != internal_relocs) 14298 free (internal_relocs); 14299 14300 return FALSE; 14301 } 14302 14303 /* Create a MIPS ELF linker hash table. */ 14304 14305 struct bfd_link_hash_table * 14306 _bfd_mips_elf_link_hash_table_create (bfd *abfd) 14307 { 14308 struct mips_elf_link_hash_table *ret; 14309 bfd_size_type amt = sizeof (struct mips_elf_link_hash_table); 14310 14311 ret = bfd_zmalloc (amt); 14312 if (ret == NULL) 14313 return NULL; 14314 14315 if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, 14316 mips_elf_link_hash_newfunc, 14317 sizeof (struct mips_elf_link_hash_entry), 14318 MIPS_ELF_DATA)) 14319 { 14320 free (ret); 14321 return NULL; 14322 } 14323 ret->root.init_plt_refcount.plist = NULL; 14324 ret->root.init_plt_offset.plist = NULL; 14325 14326 return &ret->root.root; 14327 } 14328 14329 /* Likewise, but indicate that the target is VxWorks. */ 14330 14331 struct bfd_link_hash_table * 14332 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd) 14333 { 14334 struct bfd_link_hash_table *ret; 14335 14336 ret = _bfd_mips_elf_link_hash_table_create (abfd); 14337 if (ret) 14338 { 14339 struct mips_elf_link_hash_table *htab; 14340 14341 htab = (struct mips_elf_link_hash_table *) ret; 14342 htab->use_plts_and_copy_relocs = TRUE; 14343 htab->is_vxworks = TRUE; 14344 } 14345 return ret; 14346 } 14347 14348 /* A function that the linker calls if we are allowed to use PLTs 14349 and copy relocs. */ 14350 14351 void 14352 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info) 14353 { 14354 mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE; 14355 } 14356 14357 /* A function that the linker calls to select between all or only 14358 32-bit microMIPS instructions, and between making or ignoring 14359 branch relocation checks for invalid transitions between ISA modes. 14360 Also record whether we have been configured for a GNU target. */ 14361 14362 void 14363 _bfd_mips_elf_linker_flags (struct bfd_link_info *info, bfd_boolean insn32, 14364 bfd_boolean ignore_branch_isa, 14365 bfd_boolean gnu_target) 14366 { 14367 mips_elf_hash_table (info)->insn32 = insn32; 14368 mips_elf_hash_table (info)->ignore_branch_isa = ignore_branch_isa; 14369 mips_elf_hash_table (info)->gnu_target = gnu_target; 14370 } 14371 14372 /* A function that the linker calls to enable use of compact branches in 14373 linker generated code for MIPSR6. */ 14374 14375 void 14376 _bfd_mips_elf_compact_branches (struct bfd_link_info *info, bfd_boolean on) 14377 { 14378 mips_elf_hash_table (info)->compact_branches = on; 14379 } 14380 14381 14382 /* Structure for saying that BFD machine EXTENSION extends BASE. */ 14383 14384 struct mips_mach_extension 14385 { 14386 unsigned long extension, base; 14387 }; 14388 14389 14390 /* An array describing how BFD machines relate to one another. The entries 14391 are ordered topologically with MIPS I extensions listed last. */ 14392 14393 static const struct mips_mach_extension mips_mach_extensions[] = 14394 { 14395 /* MIPS64r2 extensions. */ 14396 { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 }, 14397 { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp }, 14398 { bfd_mach_mips_octeonp, bfd_mach_mips_octeon }, 14399 { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 }, 14400 { bfd_mach_mips_gs264e, bfd_mach_mips_gs464e }, 14401 { bfd_mach_mips_gs464e, bfd_mach_mips_gs464 }, 14402 { bfd_mach_mips_gs464, bfd_mach_mipsisa64r2 }, 14403 14404 /* MIPS64 extensions. */ 14405 { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 }, 14406 { bfd_mach_mips_sb1, bfd_mach_mipsisa64 }, 14407 { bfd_mach_mips_xlr, bfd_mach_mipsisa64 }, 14408 14409 /* MIPS V extensions. */ 14410 { bfd_mach_mipsisa64, bfd_mach_mips5 }, 14411 14412 /* R10000 extensions. */ 14413 { bfd_mach_mips12000, bfd_mach_mips10000 }, 14414 { bfd_mach_mips14000, bfd_mach_mips10000 }, 14415 { bfd_mach_mips16000, bfd_mach_mips10000 }, 14416 14417 /* R5000 extensions. Note: the vr5500 ISA is an extension of the core 14418 vr5400 ISA, but doesn't include the multimedia stuff. It seems 14419 better to allow vr5400 and vr5500 code to be merged anyway, since 14420 many libraries will just use the core ISA. Perhaps we could add 14421 some sort of ASE flag if this ever proves a problem. */ 14422 { bfd_mach_mips5500, bfd_mach_mips5400 }, 14423 { bfd_mach_mips5400, bfd_mach_mips5000 }, 14424 14425 /* MIPS IV extensions. */ 14426 { bfd_mach_mips5, bfd_mach_mips8000 }, 14427 { bfd_mach_mips10000, bfd_mach_mips8000 }, 14428 { bfd_mach_mips5000, bfd_mach_mips8000 }, 14429 { bfd_mach_mips7000, bfd_mach_mips8000 }, 14430 { bfd_mach_mips9000, bfd_mach_mips8000 }, 14431 14432 /* VR4100 extensions. */ 14433 { bfd_mach_mips4120, bfd_mach_mips4100 }, 14434 { bfd_mach_mips4111, bfd_mach_mips4100 }, 14435 14436 /* MIPS III extensions. */ 14437 { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 }, 14438 { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 }, 14439 { bfd_mach_mips8000, bfd_mach_mips4000 }, 14440 { bfd_mach_mips4650, bfd_mach_mips4000 }, 14441 { bfd_mach_mips4600, bfd_mach_mips4000 }, 14442 { bfd_mach_mips4400, bfd_mach_mips4000 }, 14443 { bfd_mach_mips4300, bfd_mach_mips4000 }, 14444 { bfd_mach_mips4100, bfd_mach_mips4000 }, 14445 { bfd_mach_mips5900, bfd_mach_mips4000 }, 14446 14447 /* MIPS32r3 extensions. */ 14448 { bfd_mach_mips_interaptiv_mr2, bfd_mach_mipsisa32r3 }, 14449 14450 /* MIPS32r2 extensions. */ 14451 { bfd_mach_mipsisa32r3, bfd_mach_mipsisa32r2 }, 14452 14453 /* MIPS32 extensions. */ 14454 { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 }, 14455 14456 /* MIPS II extensions. */ 14457 { bfd_mach_mips4000, bfd_mach_mips6000 }, 14458 { bfd_mach_mipsisa32, bfd_mach_mips6000 }, 14459 { bfd_mach_mips4010, bfd_mach_mips6000 }, 14460 14461 /* MIPS I extensions. */ 14462 { bfd_mach_mips6000, bfd_mach_mips3000 }, 14463 { bfd_mach_mips3900, bfd_mach_mips3000 } 14464 }; 14465 14466 /* Return true if bfd machine EXTENSION is an extension of machine BASE. */ 14467 14468 static bfd_boolean 14469 mips_mach_extends_p (unsigned long base, unsigned long extension) 14470 { 14471 size_t i; 14472 14473 if (extension == base) 14474 return TRUE; 14475 14476 if (base == bfd_mach_mipsisa32 14477 && mips_mach_extends_p (bfd_mach_mipsisa64, extension)) 14478 return TRUE; 14479 14480 if (base == bfd_mach_mipsisa32r2 14481 && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension)) 14482 return TRUE; 14483 14484 for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++) 14485 if (extension == mips_mach_extensions[i].extension) 14486 { 14487 extension = mips_mach_extensions[i].base; 14488 if (extension == base) 14489 return TRUE; 14490 } 14491 14492 return FALSE; 14493 } 14494 14495 /* Return the BFD mach for each .MIPS.abiflags ISA Extension. */ 14496 14497 static unsigned long 14498 bfd_mips_isa_ext_mach (unsigned int isa_ext) 14499 { 14500 switch (isa_ext) 14501 { 14502 case AFL_EXT_3900: return bfd_mach_mips3900; 14503 case AFL_EXT_4010: return bfd_mach_mips4010; 14504 case AFL_EXT_4100: return bfd_mach_mips4100; 14505 case AFL_EXT_4111: return bfd_mach_mips4111; 14506 case AFL_EXT_4120: return bfd_mach_mips4120; 14507 case AFL_EXT_4650: return bfd_mach_mips4650; 14508 case AFL_EXT_5400: return bfd_mach_mips5400; 14509 case AFL_EXT_5500: return bfd_mach_mips5500; 14510 case AFL_EXT_5900: return bfd_mach_mips5900; 14511 case AFL_EXT_10000: return bfd_mach_mips10000; 14512 case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e; 14513 case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f; 14514 case AFL_EXT_SB1: return bfd_mach_mips_sb1; 14515 case AFL_EXT_OCTEON: return bfd_mach_mips_octeon; 14516 case AFL_EXT_OCTEONP: return bfd_mach_mips_octeonp; 14517 case AFL_EXT_OCTEON2: return bfd_mach_mips_octeon2; 14518 case AFL_EXT_XLR: return bfd_mach_mips_xlr; 14519 default: return bfd_mach_mips3000; 14520 } 14521 } 14522 14523 /* Return the .MIPS.abiflags value representing each ISA Extension. */ 14524 14525 unsigned int 14526 bfd_mips_isa_ext (bfd *abfd) 14527 { 14528 switch (bfd_get_mach (abfd)) 14529 { 14530 case bfd_mach_mips3900: return AFL_EXT_3900; 14531 case bfd_mach_mips4010: return AFL_EXT_4010; 14532 case bfd_mach_mips4100: return AFL_EXT_4100; 14533 case bfd_mach_mips4111: return AFL_EXT_4111; 14534 case bfd_mach_mips4120: return AFL_EXT_4120; 14535 case bfd_mach_mips4650: return AFL_EXT_4650; 14536 case bfd_mach_mips5400: return AFL_EXT_5400; 14537 case bfd_mach_mips5500: return AFL_EXT_5500; 14538 case bfd_mach_mips5900: return AFL_EXT_5900; 14539 case bfd_mach_mips10000: return AFL_EXT_10000; 14540 case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E; 14541 case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F; 14542 case bfd_mach_mips_sb1: return AFL_EXT_SB1; 14543 case bfd_mach_mips_octeon: return AFL_EXT_OCTEON; 14544 case bfd_mach_mips_octeonp: return AFL_EXT_OCTEONP; 14545 case bfd_mach_mips_octeon3: return AFL_EXT_OCTEON3; 14546 case bfd_mach_mips_octeon2: return AFL_EXT_OCTEON2; 14547 case bfd_mach_mips_xlr: return AFL_EXT_XLR; 14548 case bfd_mach_mips_interaptiv_mr2: 14549 return AFL_EXT_INTERAPTIV_MR2; 14550 default: return 0; 14551 } 14552 } 14553 14554 /* Encode ISA level and revision as a single value. */ 14555 #define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV)) 14556 14557 /* Decode a single value into level and revision. */ 14558 #define ISA_LEVEL(LEVREV) ((LEVREV) >> 3) 14559 #define ISA_REV(LEVREV) ((LEVREV) & 0x7) 14560 14561 /* Update the isa_level, isa_rev, isa_ext fields of abiflags. */ 14562 14563 static void 14564 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags) 14565 { 14566 int new_isa = 0; 14567 switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) 14568 { 14569 case E_MIPS_ARCH_1: new_isa = LEVEL_REV (1, 0); break; 14570 case E_MIPS_ARCH_2: new_isa = LEVEL_REV (2, 0); break; 14571 case E_MIPS_ARCH_3: new_isa = LEVEL_REV (3, 0); break; 14572 case E_MIPS_ARCH_4: new_isa = LEVEL_REV (4, 0); break; 14573 case E_MIPS_ARCH_5: new_isa = LEVEL_REV (5, 0); break; 14574 case E_MIPS_ARCH_32: new_isa = LEVEL_REV (32, 1); break; 14575 case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break; 14576 case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break; 14577 case E_MIPS_ARCH_64: new_isa = LEVEL_REV (64, 1); break; 14578 case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break; 14579 case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break; 14580 default: 14581 _bfd_error_handler 14582 /* xgettext:c-format */ 14583 (_("%pB: unknown architecture %s"), 14584 abfd, bfd_printable_name (abfd)); 14585 } 14586 14587 if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev)) 14588 { 14589 abiflags->isa_level = ISA_LEVEL (new_isa); 14590 abiflags->isa_rev = ISA_REV (new_isa); 14591 } 14592 14593 /* Update the isa_ext if ABFD describes a further extension. */ 14594 if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext), 14595 bfd_get_mach (abfd))) 14596 abiflags->isa_ext = bfd_mips_isa_ext (abfd); 14597 } 14598 14599 /* Return true if the given ELF header flags describe a 32-bit binary. */ 14600 14601 static bfd_boolean 14602 mips_32bit_flags_p (flagword flags) 14603 { 14604 return ((flags & EF_MIPS_32BITMODE) != 0 14605 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32 14606 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32 14607 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1 14608 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2 14609 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32 14610 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2 14611 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6); 14612 } 14613 14614 /* Infer the content of the ABI flags based on the elf header. */ 14615 14616 static void 14617 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags) 14618 { 14619 obj_attribute *in_attr; 14620 14621 memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0)); 14622 update_mips_abiflags_isa (abfd, abiflags); 14623 14624 if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags)) 14625 abiflags->gpr_size = AFL_REG_32; 14626 else 14627 abiflags->gpr_size = AFL_REG_64; 14628 14629 abiflags->cpr1_size = AFL_REG_NONE; 14630 14631 in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU]; 14632 abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i; 14633 14634 if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE 14635 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX 14636 || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE 14637 && abiflags->gpr_size == AFL_REG_32)) 14638 abiflags->cpr1_size = AFL_REG_32; 14639 else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE 14640 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64 14641 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A) 14642 abiflags->cpr1_size = AFL_REG_64; 14643 14644 abiflags->cpr2_size = AFL_REG_NONE; 14645 14646 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX) 14647 abiflags->ases |= AFL_ASE_MDMX; 14648 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16) 14649 abiflags->ases |= AFL_ASE_MIPS16; 14650 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) 14651 abiflags->ases |= AFL_ASE_MICROMIPS; 14652 14653 if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY 14654 && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT 14655 && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A 14656 && abiflags->isa_level >= 32 14657 && abiflags->ases != AFL_ASE_LOONGSON_EXT) 14658 abiflags->flags1 |= AFL_FLAGS1_ODDSPREG; 14659 } 14660 14661 /* We need to use a special link routine to handle the .reginfo and 14662 the .mdebug sections. We need to merge all instances of these 14663 sections together, not write them all out sequentially. */ 14664 14665 bfd_boolean 14666 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info) 14667 { 14668 asection *o; 14669 struct bfd_link_order *p; 14670 asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec; 14671 asection *rtproc_sec, *abiflags_sec; 14672 Elf32_RegInfo reginfo; 14673 struct ecoff_debug_info debug; 14674 struct mips_htab_traverse_info hti; 14675 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 14676 const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap; 14677 HDRR *symhdr = &debug.symbolic_header; 14678 void *mdebug_handle = NULL; 14679 asection *s; 14680 EXTR esym; 14681 unsigned int i; 14682 bfd_size_type amt; 14683 struct mips_elf_link_hash_table *htab; 14684 14685 static const char * const secname[] = 14686 { 14687 ".text", ".init", ".fini", ".data", 14688 ".rodata", ".sdata", ".sbss", ".bss" 14689 }; 14690 static const int sc[] = 14691 { 14692 scText, scInit, scFini, scData, 14693 scRData, scSData, scSBss, scBss 14694 }; 14695 14696 htab = mips_elf_hash_table (info); 14697 BFD_ASSERT (htab != NULL); 14698 14699 /* Sort the dynamic symbols so that those with GOT entries come after 14700 those without. */ 14701 if (!mips_elf_sort_hash_table (abfd, info)) 14702 return FALSE; 14703 14704 /* Create any scheduled LA25 stubs. */ 14705 hti.info = info; 14706 hti.output_bfd = abfd; 14707 hti.error = FALSE; 14708 htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti); 14709 if (hti.error) 14710 return FALSE; 14711 14712 /* Get a value for the GP register. */ 14713 if (elf_gp (abfd) == 0) 14714 { 14715 struct bfd_link_hash_entry *h; 14716 14717 h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE); 14718 if (h != NULL && h->type == bfd_link_hash_defined) 14719 elf_gp (abfd) = (h->u.def.value 14720 + h->u.def.section->output_section->vma 14721 + h->u.def.section->output_offset); 14722 else if (htab->is_vxworks 14723 && (h = bfd_link_hash_lookup (info->hash, 14724 "_GLOBAL_OFFSET_TABLE_", 14725 FALSE, FALSE, TRUE)) 14726 && h->type == bfd_link_hash_defined) 14727 elf_gp (abfd) = (h->u.def.section->output_section->vma 14728 + h->u.def.section->output_offset 14729 + h->u.def.value); 14730 else if (bfd_link_relocatable (info)) 14731 { 14732 bfd_vma lo = MINUS_ONE; 14733 14734 /* Find the GP-relative section with the lowest offset. */ 14735 for (o = abfd->sections; o != NULL; o = o->next) 14736 if (o->vma < lo 14737 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL)) 14738 lo = o->vma; 14739 14740 /* And calculate GP relative to that. */ 14741 elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info); 14742 } 14743 else 14744 { 14745 /* If the relocate_section function needs to do a reloc 14746 involving the GP value, it should make a reloc_dangerous 14747 callback to warn that GP is not defined. */ 14748 } 14749 } 14750 14751 /* Go through the sections and collect the .reginfo and .mdebug 14752 information. */ 14753 abiflags_sec = NULL; 14754 reginfo_sec = NULL; 14755 mdebug_sec = NULL; 14756 gptab_data_sec = NULL; 14757 gptab_bss_sec = NULL; 14758 for (o = abfd->sections; o != NULL; o = o->next) 14759 { 14760 if (strcmp (o->name, ".MIPS.abiflags") == 0) 14761 { 14762 /* We have found the .MIPS.abiflags section in the output file. 14763 Look through all the link_orders comprising it and remove them. 14764 The data is merged in _bfd_mips_elf_merge_private_bfd_data. */ 14765 for (p = o->map_head.link_order; p != NULL; p = p->next) 14766 { 14767 asection *input_section; 14768 14769 if (p->type != bfd_indirect_link_order) 14770 { 14771 if (p->type == bfd_data_link_order) 14772 continue; 14773 abort (); 14774 } 14775 14776 input_section = p->u.indirect.section; 14777 14778 /* Hack: reset the SEC_HAS_CONTENTS flag so that 14779 elf_link_input_bfd ignores this section. */ 14780 input_section->flags &= ~SEC_HAS_CONTENTS; 14781 } 14782 14783 /* Size has been set in _bfd_mips_elf_always_size_sections. */ 14784 BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0)); 14785 14786 /* Skip this section later on (I don't think this currently 14787 matters, but someday it might). */ 14788 o->map_head.link_order = NULL; 14789 14790 abiflags_sec = o; 14791 } 14792 14793 if (strcmp (o->name, ".reginfo") == 0) 14794 { 14795 memset (®info, 0, sizeof reginfo); 14796 14797 /* We have found the .reginfo section in the output file. 14798 Look through all the link_orders comprising it and merge 14799 the information together. */ 14800 for (p = o->map_head.link_order; p != NULL; p = p->next) 14801 { 14802 asection *input_section; 14803 bfd *input_bfd; 14804 Elf32_External_RegInfo ext; 14805 Elf32_RegInfo sub; 14806 bfd_size_type sz; 14807 14808 if (p->type != bfd_indirect_link_order) 14809 { 14810 if (p->type == bfd_data_link_order) 14811 continue; 14812 abort (); 14813 } 14814 14815 input_section = p->u.indirect.section; 14816 input_bfd = input_section->owner; 14817 14818 sz = (input_section->size < sizeof (ext) 14819 ? input_section->size : sizeof (ext)); 14820 memset (&ext, 0, sizeof (ext)); 14821 if (! bfd_get_section_contents (input_bfd, input_section, 14822 &ext, 0, sz)) 14823 return FALSE; 14824 14825 bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub); 14826 14827 reginfo.ri_gprmask |= sub.ri_gprmask; 14828 reginfo.ri_cprmask[0] |= sub.ri_cprmask[0]; 14829 reginfo.ri_cprmask[1] |= sub.ri_cprmask[1]; 14830 reginfo.ri_cprmask[2] |= sub.ri_cprmask[2]; 14831 reginfo.ri_cprmask[3] |= sub.ri_cprmask[3]; 14832 14833 /* ri_gp_value is set by the function 14834 `_bfd_mips_elf_section_processing' when the section is 14835 finally written out. */ 14836 14837 /* Hack: reset the SEC_HAS_CONTENTS flag so that 14838 elf_link_input_bfd ignores this section. */ 14839 input_section->flags &= ~SEC_HAS_CONTENTS; 14840 } 14841 14842 /* Size has been set in _bfd_mips_elf_always_size_sections. */ 14843 BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo)); 14844 14845 /* Skip this section later on (I don't think this currently 14846 matters, but someday it might). */ 14847 o->map_head.link_order = NULL; 14848 14849 reginfo_sec = o; 14850 } 14851 14852 if (strcmp (o->name, ".mdebug") == 0) 14853 { 14854 struct extsym_info einfo; 14855 bfd_vma last; 14856 14857 /* We have found the .mdebug section in the output file. 14858 Look through all the link_orders comprising it and merge 14859 the information together. */ 14860 symhdr->magic = swap->sym_magic; 14861 /* FIXME: What should the version stamp be? */ 14862 symhdr->vstamp = 0; 14863 symhdr->ilineMax = 0; 14864 symhdr->cbLine = 0; 14865 symhdr->idnMax = 0; 14866 symhdr->ipdMax = 0; 14867 symhdr->isymMax = 0; 14868 symhdr->ioptMax = 0; 14869 symhdr->iauxMax = 0; 14870 symhdr->issMax = 0; 14871 symhdr->issExtMax = 0; 14872 symhdr->ifdMax = 0; 14873 symhdr->crfd = 0; 14874 symhdr->iextMax = 0; 14875 14876 /* We accumulate the debugging information itself in the 14877 debug_info structure. */ 14878 debug.line = NULL; 14879 debug.external_dnr = NULL; 14880 debug.external_pdr = NULL; 14881 debug.external_sym = NULL; 14882 debug.external_opt = NULL; 14883 debug.external_aux = NULL; 14884 debug.ss = NULL; 14885 debug.ssext = debug.ssext_end = NULL; 14886 debug.external_fdr = NULL; 14887 debug.external_rfd = NULL; 14888 debug.external_ext = debug.external_ext_end = NULL; 14889 14890 mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info); 14891 if (mdebug_handle == NULL) 14892 return FALSE; 14893 14894 esym.jmptbl = 0; 14895 esym.cobol_main = 0; 14896 esym.weakext = 0; 14897 esym.reserved = 0; 14898 esym.ifd = ifdNil; 14899 esym.asym.iss = issNil; 14900 esym.asym.st = stLocal; 14901 esym.asym.reserved = 0; 14902 esym.asym.index = indexNil; 14903 last = 0; 14904 for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++) 14905 { 14906 esym.asym.sc = sc[i]; 14907 s = bfd_get_section_by_name (abfd, secname[i]); 14908 if (s != NULL) 14909 { 14910 esym.asym.value = s->vma; 14911 last = s->vma + s->size; 14912 } 14913 else 14914 esym.asym.value = last; 14915 if (!bfd_ecoff_debug_one_external (abfd, &debug, swap, 14916 secname[i], &esym)) 14917 return FALSE; 14918 } 14919 14920 for (p = o->map_head.link_order; p != NULL; p = p->next) 14921 { 14922 asection *input_section; 14923 bfd *input_bfd; 14924 const struct ecoff_debug_swap *input_swap; 14925 struct ecoff_debug_info input_debug; 14926 char *eraw_src; 14927 char *eraw_end; 14928 14929 if (p->type != bfd_indirect_link_order) 14930 { 14931 if (p->type == bfd_data_link_order) 14932 continue; 14933 abort (); 14934 } 14935 14936 input_section = p->u.indirect.section; 14937 input_bfd = input_section->owner; 14938 14939 if (!is_mips_elf (input_bfd)) 14940 { 14941 /* I don't know what a non MIPS ELF bfd would be 14942 doing with a .mdebug section, but I don't really 14943 want to deal with it. */ 14944 continue; 14945 } 14946 14947 input_swap = (get_elf_backend_data (input_bfd) 14948 ->elf_backend_ecoff_debug_swap); 14949 14950 BFD_ASSERT (p->size == input_section->size); 14951 14952 /* The ECOFF linking code expects that we have already 14953 read in the debugging information and set up an 14954 ecoff_debug_info structure, so we do that now. */ 14955 if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section, 14956 &input_debug)) 14957 return FALSE; 14958 14959 if (! (bfd_ecoff_debug_accumulate 14960 (mdebug_handle, abfd, &debug, swap, input_bfd, 14961 &input_debug, input_swap, info))) 14962 return FALSE; 14963 14964 /* Loop through the external symbols. For each one with 14965 interesting information, try to find the symbol in 14966 the linker global hash table and save the information 14967 for the output external symbols. */ 14968 eraw_src = input_debug.external_ext; 14969 eraw_end = (eraw_src 14970 + (input_debug.symbolic_header.iextMax 14971 * input_swap->external_ext_size)); 14972 for (; 14973 eraw_src < eraw_end; 14974 eraw_src += input_swap->external_ext_size) 14975 { 14976 EXTR ext; 14977 const char *name; 14978 struct mips_elf_link_hash_entry *h; 14979 14980 (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext); 14981 if (ext.asym.sc == scNil 14982 || ext.asym.sc == scUndefined 14983 || ext.asym.sc == scSUndefined) 14984 continue; 14985 14986 name = input_debug.ssext + ext.asym.iss; 14987 h = mips_elf_link_hash_lookup (mips_elf_hash_table (info), 14988 name, FALSE, FALSE, TRUE); 14989 if (h == NULL || h->esym.ifd != -2) 14990 continue; 14991 14992 if (ext.ifd != -1) 14993 { 14994 BFD_ASSERT (ext.ifd 14995 < input_debug.symbolic_header.ifdMax); 14996 ext.ifd = input_debug.ifdmap[ext.ifd]; 14997 } 14998 14999 h->esym = ext; 15000 } 15001 15002 /* Free up the information we just read. */ 15003 free (input_debug.line); 15004 free (input_debug.external_dnr); 15005 free (input_debug.external_pdr); 15006 free (input_debug.external_sym); 15007 free (input_debug.external_opt); 15008 free (input_debug.external_aux); 15009 free (input_debug.ss); 15010 free (input_debug.ssext); 15011 free (input_debug.external_fdr); 15012 free (input_debug.external_rfd); 15013 free (input_debug.external_ext); 15014 15015 /* Hack: reset the SEC_HAS_CONTENTS flag so that 15016 elf_link_input_bfd ignores this section. */ 15017 input_section->flags &= ~SEC_HAS_CONTENTS; 15018 } 15019 15020 if (SGI_COMPAT (abfd) && bfd_link_pic (info)) 15021 { 15022 /* Create .rtproc section. */ 15023 rtproc_sec = bfd_get_linker_section (abfd, ".rtproc"); 15024 if (rtproc_sec == NULL) 15025 { 15026 flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY 15027 | SEC_LINKER_CREATED | SEC_READONLY); 15028 15029 rtproc_sec = bfd_make_section_anyway_with_flags (abfd, 15030 ".rtproc", 15031 flags); 15032 if (rtproc_sec == NULL 15033 || !bfd_set_section_alignment (rtproc_sec, 4)) 15034 return FALSE; 15035 } 15036 15037 if (! mips_elf_create_procedure_table (mdebug_handle, abfd, 15038 info, rtproc_sec, 15039 &debug)) 15040 return FALSE; 15041 } 15042 15043 /* Build the external symbol information. */ 15044 einfo.abfd = abfd; 15045 einfo.info = info; 15046 einfo.debug = &debug; 15047 einfo.swap = swap; 15048 einfo.failed = FALSE; 15049 mips_elf_link_hash_traverse (mips_elf_hash_table (info), 15050 mips_elf_output_extsym, &einfo); 15051 if (einfo.failed) 15052 return FALSE; 15053 15054 /* Set the size of the .mdebug section. */ 15055 o->size = bfd_ecoff_debug_size (abfd, &debug, swap); 15056 15057 /* Skip this section later on (I don't think this currently 15058 matters, but someday it might). */ 15059 o->map_head.link_order = NULL; 15060 15061 mdebug_sec = o; 15062 } 15063 15064 if (CONST_STRNEQ (o->name, ".gptab.")) 15065 { 15066 const char *subname; 15067 unsigned int c; 15068 Elf32_gptab *tab; 15069 Elf32_External_gptab *ext_tab; 15070 unsigned int j; 15071 15072 /* The .gptab.sdata and .gptab.sbss sections hold 15073 information describing how the small data area would 15074 change depending upon the -G switch. These sections 15075 not used in executables files. */ 15076 if (! bfd_link_relocatable (info)) 15077 { 15078 for (p = o->map_head.link_order; p != NULL; p = p->next) 15079 { 15080 asection *input_section; 15081 15082 if (p->type != bfd_indirect_link_order) 15083 { 15084 if (p->type == bfd_data_link_order) 15085 continue; 15086 abort (); 15087 } 15088 15089 input_section = p->u.indirect.section; 15090 15091 /* Hack: reset the SEC_HAS_CONTENTS flag so that 15092 elf_link_input_bfd ignores this section. */ 15093 input_section->flags &= ~SEC_HAS_CONTENTS; 15094 } 15095 15096 /* Skip this section later on (I don't think this 15097 currently matters, but someday it might). */ 15098 o->map_head.link_order = NULL; 15099 15100 /* Really remove the section. */ 15101 bfd_section_list_remove (abfd, o); 15102 --abfd->section_count; 15103 15104 continue; 15105 } 15106 15107 /* There is one gptab for initialized data, and one for 15108 uninitialized data. */ 15109 if (strcmp (o->name, ".gptab.sdata") == 0) 15110 gptab_data_sec = o; 15111 else if (strcmp (o->name, ".gptab.sbss") == 0) 15112 gptab_bss_sec = o; 15113 else 15114 { 15115 _bfd_error_handler 15116 /* xgettext:c-format */ 15117 (_("%pB: illegal section name `%pA'"), abfd, o); 15118 bfd_set_error (bfd_error_nonrepresentable_section); 15119 return FALSE; 15120 } 15121 15122 /* The linker script always combines .gptab.data and 15123 .gptab.sdata into .gptab.sdata, and likewise for 15124 .gptab.bss and .gptab.sbss. It is possible that there is 15125 no .sdata or .sbss section in the output file, in which 15126 case we must change the name of the output section. */ 15127 subname = o->name + sizeof ".gptab" - 1; 15128 if (bfd_get_section_by_name (abfd, subname) == NULL) 15129 { 15130 if (o == gptab_data_sec) 15131 o->name = ".gptab.data"; 15132 else 15133 o->name = ".gptab.bss"; 15134 subname = o->name + sizeof ".gptab" - 1; 15135 BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL); 15136 } 15137 15138 /* Set up the first entry. */ 15139 c = 1; 15140 amt = c * sizeof (Elf32_gptab); 15141 tab = bfd_malloc (amt); 15142 if (tab == NULL) 15143 return FALSE; 15144 tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd); 15145 tab[0].gt_header.gt_unused = 0; 15146 15147 /* Combine the input sections. */ 15148 for (p = o->map_head.link_order; p != NULL; p = p->next) 15149 { 15150 asection *input_section; 15151 bfd *input_bfd; 15152 bfd_size_type size; 15153 unsigned long last; 15154 bfd_size_type gpentry; 15155 15156 if (p->type != bfd_indirect_link_order) 15157 { 15158 if (p->type == bfd_data_link_order) 15159 continue; 15160 abort (); 15161 } 15162 15163 input_section = p->u.indirect.section; 15164 input_bfd = input_section->owner; 15165 15166 /* Combine the gptab entries for this input section one 15167 by one. We know that the input gptab entries are 15168 sorted by ascending -G value. */ 15169 size = input_section->size; 15170 last = 0; 15171 for (gpentry = sizeof (Elf32_External_gptab); 15172 gpentry < size; 15173 gpentry += sizeof (Elf32_External_gptab)) 15174 { 15175 Elf32_External_gptab ext_gptab; 15176 Elf32_gptab int_gptab; 15177 unsigned long val; 15178 unsigned long add; 15179 bfd_boolean exact; 15180 unsigned int look; 15181 15182 if (! (bfd_get_section_contents 15183 (input_bfd, input_section, &ext_gptab, gpentry, 15184 sizeof (Elf32_External_gptab)))) 15185 { 15186 free (tab); 15187 return FALSE; 15188 } 15189 15190 bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab, 15191 &int_gptab); 15192 val = int_gptab.gt_entry.gt_g_value; 15193 add = int_gptab.gt_entry.gt_bytes - last; 15194 15195 exact = FALSE; 15196 for (look = 1; look < c; look++) 15197 { 15198 if (tab[look].gt_entry.gt_g_value >= val) 15199 tab[look].gt_entry.gt_bytes += add; 15200 15201 if (tab[look].gt_entry.gt_g_value == val) 15202 exact = TRUE; 15203 } 15204 15205 if (! exact) 15206 { 15207 Elf32_gptab *new_tab; 15208 unsigned int max; 15209 15210 /* We need a new table entry. */ 15211 amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab); 15212 new_tab = bfd_realloc (tab, amt); 15213 if (new_tab == NULL) 15214 { 15215 free (tab); 15216 return FALSE; 15217 } 15218 tab = new_tab; 15219 tab[c].gt_entry.gt_g_value = val; 15220 tab[c].gt_entry.gt_bytes = add; 15221 15222 /* Merge in the size for the next smallest -G 15223 value, since that will be implied by this new 15224 value. */ 15225 max = 0; 15226 for (look = 1; look < c; look++) 15227 { 15228 if (tab[look].gt_entry.gt_g_value < val 15229 && (max == 0 15230 || (tab[look].gt_entry.gt_g_value 15231 > tab[max].gt_entry.gt_g_value))) 15232 max = look; 15233 } 15234 if (max != 0) 15235 tab[c].gt_entry.gt_bytes += 15236 tab[max].gt_entry.gt_bytes; 15237 15238 ++c; 15239 } 15240 15241 last = int_gptab.gt_entry.gt_bytes; 15242 } 15243 15244 /* Hack: reset the SEC_HAS_CONTENTS flag so that 15245 elf_link_input_bfd ignores this section. */ 15246 input_section->flags &= ~SEC_HAS_CONTENTS; 15247 } 15248 15249 /* The table must be sorted by -G value. */ 15250 if (c > 2) 15251 qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare); 15252 15253 /* Swap out the table. */ 15254 amt = (bfd_size_type) c * sizeof (Elf32_External_gptab); 15255 ext_tab = bfd_alloc (abfd, amt); 15256 if (ext_tab == NULL) 15257 { 15258 free (tab); 15259 return FALSE; 15260 } 15261 15262 for (j = 0; j < c; j++) 15263 bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j); 15264 free (tab); 15265 15266 o->size = c * sizeof (Elf32_External_gptab); 15267 o->contents = (bfd_byte *) ext_tab; 15268 15269 /* Skip this section later on (I don't think this currently 15270 matters, but someday it might). */ 15271 o->map_head.link_order = NULL; 15272 } 15273 } 15274 15275 /* Invoke the regular ELF backend linker to do all the work. */ 15276 if (!bfd_elf_final_link (abfd, info)) 15277 return FALSE; 15278 15279 /* Now write out the computed sections. */ 15280 15281 if (abiflags_sec != NULL) 15282 { 15283 Elf_External_ABIFlags_v0 ext; 15284 Elf_Internal_ABIFlags_v0 *abiflags; 15285 15286 abiflags = &mips_elf_tdata (abfd)->abiflags; 15287 15288 /* Set up the abiflags if no valid input sections were found. */ 15289 if (!mips_elf_tdata (abfd)->abiflags_valid) 15290 { 15291 infer_mips_abiflags (abfd, abiflags); 15292 mips_elf_tdata (abfd)->abiflags_valid = TRUE; 15293 } 15294 bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext); 15295 if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext)) 15296 return FALSE; 15297 } 15298 15299 if (reginfo_sec != NULL) 15300 { 15301 Elf32_External_RegInfo ext; 15302 15303 bfd_mips_elf32_swap_reginfo_out (abfd, ®info, &ext); 15304 if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext)) 15305 return FALSE; 15306 } 15307 15308 if (mdebug_sec != NULL) 15309 { 15310 BFD_ASSERT (abfd->output_has_begun); 15311 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug, 15312 swap, info, 15313 mdebug_sec->filepos)) 15314 return FALSE; 15315 15316 bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info); 15317 } 15318 15319 if (gptab_data_sec != NULL) 15320 { 15321 if (! bfd_set_section_contents (abfd, gptab_data_sec, 15322 gptab_data_sec->contents, 15323 0, gptab_data_sec->size)) 15324 return FALSE; 15325 } 15326 15327 if (gptab_bss_sec != NULL) 15328 { 15329 if (! bfd_set_section_contents (abfd, gptab_bss_sec, 15330 gptab_bss_sec->contents, 15331 0, gptab_bss_sec->size)) 15332 return FALSE; 15333 } 15334 15335 if (SGI_COMPAT (abfd)) 15336 { 15337 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc"); 15338 if (rtproc_sec != NULL) 15339 { 15340 if (! bfd_set_section_contents (abfd, rtproc_sec, 15341 rtproc_sec->contents, 15342 0, rtproc_sec->size)) 15343 return FALSE; 15344 } 15345 } 15346 15347 return TRUE; 15348 } 15349 15350 /* Merge object file header flags from IBFD into OBFD. Raise an error 15351 if there are conflicting settings. */ 15352 15353 static bfd_boolean 15354 mips_elf_merge_obj_e_flags (bfd *ibfd, struct bfd_link_info *info) 15355 { 15356 bfd *obfd = info->output_bfd; 15357 struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd); 15358 flagword old_flags; 15359 flagword new_flags; 15360 bfd_boolean ok; 15361 15362 new_flags = elf_elfheader (ibfd)->e_flags; 15363 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER; 15364 old_flags = elf_elfheader (obfd)->e_flags; 15365 15366 /* Check flag compatibility. */ 15367 15368 new_flags &= ~EF_MIPS_NOREORDER; 15369 old_flags &= ~EF_MIPS_NOREORDER; 15370 15371 /* Some IRIX 6 BSD-compatibility objects have this bit set. It 15372 doesn't seem to matter. */ 15373 new_flags &= ~EF_MIPS_XGOT; 15374 old_flags &= ~EF_MIPS_XGOT; 15375 15376 /* MIPSpro generates ucode info in n64 objects. Again, we should 15377 just be able to ignore this. */ 15378 new_flags &= ~EF_MIPS_UCODE; 15379 old_flags &= ~EF_MIPS_UCODE; 15380 15381 /* DSOs should only be linked with CPIC code. */ 15382 if ((ibfd->flags & DYNAMIC) != 0) 15383 new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC; 15384 15385 if (new_flags == old_flags) 15386 return TRUE; 15387 15388 ok = TRUE; 15389 15390 if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0) 15391 != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)) 15392 { 15393 _bfd_error_handler 15394 (_("%pB: warning: linking abicalls files with non-abicalls files"), 15395 ibfd); 15396 ok = TRUE; 15397 } 15398 15399 if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) 15400 elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC; 15401 if (! (new_flags & EF_MIPS_PIC)) 15402 elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC; 15403 15404 new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC); 15405 old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC); 15406 15407 /* Compare the ISAs. */ 15408 if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags)) 15409 { 15410 _bfd_error_handler 15411 (_("%pB: linking 32-bit code with 64-bit code"), 15412 ibfd); 15413 ok = FALSE; 15414 } 15415 else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd))) 15416 { 15417 /* OBFD's ISA isn't the same as, or an extension of, IBFD's. */ 15418 if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd))) 15419 { 15420 /* Copy the architecture info from IBFD to OBFD. Also copy 15421 the 32-bit flag (if set) so that we continue to recognise 15422 OBFD as a 32-bit binary. */ 15423 bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd)); 15424 elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH); 15425 elf_elfheader (obfd)->e_flags 15426 |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE); 15427 15428 /* Update the ABI flags isa_level, isa_rev, isa_ext fields. */ 15429 update_mips_abiflags_isa (obfd, &out_tdata->abiflags); 15430 15431 /* Copy across the ABI flags if OBFD doesn't use them 15432 and if that was what caused us to treat IBFD as 32-bit. */ 15433 if ((old_flags & EF_MIPS_ABI) == 0 15434 && mips_32bit_flags_p (new_flags) 15435 && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI)) 15436 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI; 15437 } 15438 else 15439 { 15440 /* The ISAs aren't compatible. */ 15441 _bfd_error_handler 15442 /* xgettext:c-format */ 15443 (_("%pB: linking %s module with previous %s modules"), 15444 ibfd, 15445 bfd_printable_name (ibfd), 15446 bfd_printable_name (obfd)); 15447 ok = FALSE; 15448 } 15449 } 15450 15451 new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE); 15452 old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE); 15453 15454 /* Compare ABIs. The 64-bit ABI does not use EF_MIPS_ABI. But, it 15455 does set EI_CLASS differently from any 32-bit ABI. */ 15456 if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI) 15457 || (elf_elfheader (ibfd)->e_ident[EI_CLASS] 15458 != elf_elfheader (obfd)->e_ident[EI_CLASS])) 15459 { 15460 /* Only error if both are set (to different values). */ 15461 if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI)) 15462 || (elf_elfheader (ibfd)->e_ident[EI_CLASS] 15463 != elf_elfheader (obfd)->e_ident[EI_CLASS])) 15464 { 15465 _bfd_error_handler 15466 /* xgettext:c-format */ 15467 (_("%pB: ABI mismatch: linking %s module with previous %s modules"), 15468 ibfd, 15469 elf_mips_abi_name (ibfd), 15470 elf_mips_abi_name (obfd)); 15471 ok = FALSE; 15472 } 15473 new_flags &= ~EF_MIPS_ABI; 15474 old_flags &= ~EF_MIPS_ABI; 15475 } 15476 15477 /* Compare ASEs. Forbid linking MIPS16 and microMIPS ASE modules together 15478 and allow arbitrary mixing of the remaining ASEs (retain the union). */ 15479 if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE)) 15480 { 15481 int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS; 15482 int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS; 15483 int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16; 15484 int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16; 15485 int micro_mis = old_m16 && new_micro; 15486 int m16_mis = old_micro && new_m16; 15487 15488 if (m16_mis || micro_mis) 15489 { 15490 _bfd_error_handler 15491 /* xgettext:c-format */ 15492 (_("%pB: ASE mismatch: linking %s module with previous %s modules"), 15493 ibfd, 15494 m16_mis ? "MIPS16" : "microMIPS", 15495 m16_mis ? "microMIPS" : "MIPS16"); 15496 ok = FALSE; 15497 } 15498 15499 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE; 15500 15501 new_flags &= ~ EF_MIPS_ARCH_ASE; 15502 old_flags &= ~ EF_MIPS_ARCH_ASE; 15503 } 15504 15505 /* Compare NaN encodings. */ 15506 if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008)) 15507 { 15508 /* xgettext:c-format */ 15509 _bfd_error_handler (_("%pB: linking %s module with previous %s modules"), 15510 ibfd, 15511 (new_flags & EF_MIPS_NAN2008 15512 ? "-mnan=2008" : "-mnan=legacy"), 15513 (old_flags & EF_MIPS_NAN2008 15514 ? "-mnan=2008" : "-mnan=legacy")); 15515 ok = FALSE; 15516 new_flags &= ~EF_MIPS_NAN2008; 15517 old_flags &= ~EF_MIPS_NAN2008; 15518 } 15519 15520 /* Compare FP64 state. */ 15521 if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64)) 15522 { 15523 /* xgettext:c-format */ 15524 _bfd_error_handler (_("%pB: linking %s module with previous %s modules"), 15525 ibfd, 15526 (new_flags & EF_MIPS_FP64 15527 ? "-mfp64" : "-mfp32"), 15528 (old_flags & EF_MIPS_FP64 15529 ? "-mfp64" : "-mfp32")); 15530 ok = FALSE; 15531 new_flags &= ~EF_MIPS_FP64; 15532 old_flags &= ~EF_MIPS_FP64; 15533 } 15534 15535 /* Warn about any other mismatches */ 15536 if (new_flags != old_flags) 15537 { 15538 /* xgettext:c-format */ 15539 _bfd_error_handler 15540 (_("%pB: uses different e_flags (%#x) fields than previous modules " 15541 "(%#x)"), 15542 ibfd, new_flags, old_flags); 15543 ok = FALSE; 15544 } 15545 15546 return ok; 15547 } 15548 15549 /* Merge object attributes from IBFD into OBFD. Raise an error if 15550 there are conflicting attributes. */ 15551 static bfd_boolean 15552 mips_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info) 15553 { 15554 bfd *obfd = info->output_bfd; 15555 obj_attribute *in_attr; 15556 obj_attribute *out_attr; 15557 bfd *abi_fp_bfd; 15558 bfd *abi_msa_bfd; 15559 15560 abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd; 15561 in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU]; 15562 if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY) 15563 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd; 15564 15565 abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd; 15566 if (!abi_msa_bfd 15567 && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY) 15568 mips_elf_tdata (obfd)->abi_msa_bfd = ibfd; 15569 15570 if (!elf_known_obj_attributes_proc (obfd)[0].i) 15571 { 15572 /* This is the first object. Copy the attributes. */ 15573 _bfd_elf_copy_obj_attributes (ibfd, obfd); 15574 15575 /* Use the Tag_null value to indicate the attributes have been 15576 initialized. */ 15577 elf_known_obj_attributes_proc (obfd)[0].i = 1; 15578 15579 return TRUE; 15580 } 15581 15582 /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge 15583 non-conflicting ones. */ 15584 out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU]; 15585 if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i) 15586 { 15587 int out_fp, in_fp; 15588 15589 out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i; 15590 in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i; 15591 out_attr[Tag_GNU_MIPS_ABI_FP].type = 1; 15592 if (out_fp == Val_GNU_MIPS_ABI_FP_ANY) 15593 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp; 15594 else if (out_fp == Val_GNU_MIPS_ABI_FP_XX 15595 && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE 15596 || in_fp == Val_GNU_MIPS_ABI_FP_64 15597 || in_fp == Val_GNU_MIPS_ABI_FP_64A)) 15598 { 15599 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd; 15600 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i; 15601 } 15602 else if (in_fp == Val_GNU_MIPS_ABI_FP_XX 15603 && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE 15604 || out_fp == Val_GNU_MIPS_ABI_FP_64 15605 || out_fp == Val_GNU_MIPS_ABI_FP_64A)) 15606 /* Keep the current setting. */; 15607 else if (out_fp == Val_GNU_MIPS_ABI_FP_64A 15608 && in_fp == Val_GNU_MIPS_ABI_FP_64) 15609 { 15610 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd; 15611 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i; 15612 } 15613 else if (in_fp == Val_GNU_MIPS_ABI_FP_64A 15614 && out_fp == Val_GNU_MIPS_ABI_FP_64) 15615 /* Keep the current setting. */; 15616 else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY) 15617 { 15618 const char *out_string, *in_string; 15619 15620 out_string = _bfd_mips_fp_abi_string (out_fp); 15621 in_string = _bfd_mips_fp_abi_string (in_fp); 15622 /* First warn about cases involving unrecognised ABIs. */ 15623 if (!out_string && !in_string) 15624 /* xgettext:c-format */ 15625 _bfd_error_handler 15626 (_("warning: %pB uses unknown floating point ABI %d " 15627 "(set by %pB), %pB uses unknown floating point ABI %d"), 15628 obfd, out_fp, abi_fp_bfd, ibfd, in_fp); 15629 else if (!out_string) 15630 _bfd_error_handler 15631 /* xgettext:c-format */ 15632 (_("warning: %pB uses unknown floating point ABI %d " 15633 "(set by %pB), %pB uses %s"), 15634 obfd, out_fp, abi_fp_bfd, ibfd, in_string); 15635 else if (!in_string) 15636 _bfd_error_handler 15637 /* xgettext:c-format */ 15638 (_("warning: %pB uses %s (set by %pB), " 15639 "%pB uses unknown floating point ABI %d"), 15640 obfd, out_string, abi_fp_bfd, ibfd, in_fp); 15641 else 15642 { 15643 /* If one of the bfds is soft-float, the other must be 15644 hard-float. The exact choice of hard-float ABI isn't 15645 really relevant to the error message. */ 15646 if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT) 15647 out_string = "-mhard-float"; 15648 else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT) 15649 in_string = "-mhard-float"; 15650 _bfd_error_handler 15651 /* xgettext:c-format */ 15652 (_("warning: %pB uses %s (set by %pB), %pB uses %s"), 15653 obfd, out_string, abi_fp_bfd, ibfd, in_string); 15654 } 15655 } 15656 } 15657 15658 /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge 15659 non-conflicting ones. */ 15660 if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i) 15661 { 15662 out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1; 15663 if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY) 15664 out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i; 15665 else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY) 15666 switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i) 15667 { 15668 case Val_GNU_MIPS_ABI_MSA_128: 15669 _bfd_error_handler 15670 /* xgettext:c-format */ 15671 (_("warning: %pB uses %s (set by %pB), " 15672 "%pB uses unknown MSA ABI %d"), 15673 obfd, "-mmsa", abi_msa_bfd, 15674 ibfd, in_attr[Tag_GNU_MIPS_ABI_MSA].i); 15675 break; 15676 15677 default: 15678 switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i) 15679 { 15680 case Val_GNU_MIPS_ABI_MSA_128: 15681 _bfd_error_handler 15682 /* xgettext:c-format */ 15683 (_("warning: %pB uses unknown MSA ABI %d " 15684 "(set by %pB), %pB uses %s"), 15685 obfd, out_attr[Tag_GNU_MIPS_ABI_MSA].i, 15686 abi_msa_bfd, ibfd, "-mmsa"); 15687 break; 15688 15689 default: 15690 _bfd_error_handler 15691 /* xgettext:c-format */ 15692 (_("warning: %pB uses unknown MSA ABI %d " 15693 "(set by %pB), %pB uses unknown MSA ABI %d"), 15694 obfd, out_attr[Tag_GNU_MIPS_ABI_MSA].i, 15695 abi_msa_bfd, ibfd, in_attr[Tag_GNU_MIPS_ABI_MSA].i); 15696 break; 15697 } 15698 } 15699 } 15700 15701 /* Merge Tag_compatibility attributes and any common GNU ones. */ 15702 return _bfd_elf_merge_object_attributes (ibfd, info); 15703 } 15704 15705 /* Merge object ABI flags from IBFD into OBFD. Raise an error if 15706 there are conflicting settings. */ 15707 15708 static bfd_boolean 15709 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd) 15710 { 15711 obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU]; 15712 struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd); 15713 struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd); 15714 15715 /* Update the output abiflags fp_abi using the computed fp_abi. */ 15716 out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i; 15717 15718 #define max(a, b) ((a) > (b) ? (a) : (b)) 15719 /* Merge abiflags. */ 15720 out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level, 15721 in_tdata->abiflags.isa_level); 15722 out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev, 15723 in_tdata->abiflags.isa_rev); 15724 out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size, 15725 in_tdata->abiflags.gpr_size); 15726 out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size, 15727 in_tdata->abiflags.cpr1_size); 15728 out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size, 15729 in_tdata->abiflags.cpr2_size); 15730 #undef max 15731 out_tdata->abiflags.ases |= in_tdata->abiflags.ases; 15732 out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1; 15733 15734 return TRUE; 15735 } 15736 15737 /* Merge backend specific data from an object file to the output 15738 object file when linking. */ 15739 15740 bfd_boolean 15741 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) 15742 { 15743 bfd *obfd = info->output_bfd; 15744 struct mips_elf_obj_tdata *out_tdata; 15745 struct mips_elf_obj_tdata *in_tdata; 15746 bfd_boolean null_input_bfd = TRUE; 15747 asection *sec; 15748 bfd_boolean ok; 15749 15750 /* Check if we have the same endianness. */ 15751 if (! _bfd_generic_verify_endian_match (ibfd, info)) 15752 { 15753 _bfd_error_handler 15754 (_("%pB: endianness incompatible with that of the selected emulation"), 15755 ibfd); 15756 return FALSE; 15757 } 15758 15759 if (!is_mips_elf (ibfd) || !is_mips_elf (obfd)) 15760 return TRUE; 15761 15762 in_tdata = mips_elf_tdata (ibfd); 15763 out_tdata = mips_elf_tdata (obfd); 15764 15765 if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0) 15766 { 15767 _bfd_error_handler 15768 (_("%pB: ABI is incompatible with that of the selected emulation"), 15769 ibfd); 15770 return FALSE; 15771 } 15772 15773 /* Check to see if the input BFD actually contains any sections. If not, 15774 then it has no attributes, and its flags may not have been initialized 15775 either, but it cannot actually cause any incompatibility. */ 15776 for (sec = ibfd->sections; sec != NULL; sec = sec->next) 15777 { 15778 /* Ignore synthetic sections and empty .text, .data and .bss sections 15779 which are automatically generated by gas. Also ignore fake 15780 (s)common sections, since merely defining a common symbol does 15781 not affect compatibility. */ 15782 if ((sec->flags & SEC_IS_COMMON) == 0 15783 && strcmp (sec->name, ".reginfo") 15784 && strcmp (sec->name, ".mdebug") 15785 && (sec->size != 0 15786 || (strcmp (sec->name, ".text") 15787 && strcmp (sec->name, ".data") 15788 && strcmp (sec->name, ".bss")))) 15789 { 15790 null_input_bfd = FALSE; 15791 break; 15792 } 15793 } 15794 if (null_input_bfd) 15795 return TRUE; 15796 15797 /* Populate abiflags using existing information. */ 15798 if (in_tdata->abiflags_valid) 15799 { 15800 obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU]; 15801 Elf_Internal_ABIFlags_v0 in_abiflags; 15802 Elf_Internal_ABIFlags_v0 abiflags; 15803 15804 /* Set up the FP ABI attribute from the abiflags if it is not already 15805 set. */ 15806 if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY) 15807 in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi; 15808 15809 infer_mips_abiflags (ibfd, &abiflags); 15810 in_abiflags = in_tdata->abiflags; 15811 15812 /* It is not possible to infer the correct ISA revision 15813 for R3 or R5 so drop down to R2 for the checks. */ 15814 if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5) 15815 in_abiflags.isa_rev = 2; 15816 15817 if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev) 15818 < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev)) 15819 _bfd_error_handler 15820 (_("%pB: warning: inconsistent ISA between e_flags and " 15821 ".MIPS.abiflags"), ibfd); 15822 if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY 15823 && in_abiflags.fp_abi != abiflags.fp_abi) 15824 _bfd_error_handler 15825 (_("%pB: warning: inconsistent FP ABI between .gnu.attributes and " 15826 ".MIPS.abiflags"), ibfd); 15827 if ((in_abiflags.ases & abiflags.ases) != abiflags.ases) 15828 _bfd_error_handler 15829 (_("%pB: warning: inconsistent ASEs between e_flags and " 15830 ".MIPS.abiflags"), ibfd); 15831 /* The isa_ext is allowed to be an extension of what can be inferred 15832 from e_flags. */ 15833 if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext), 15834 bfd_mips_isa_ext_mach (in_abiflags.isa_ext))) 15835 _bfd_error_handler 15836 (_("%pB: warning: inconsistent ISA extensions between e_flags and " 15837 ".MIPS.abiflags"), ibfd); 15838 if (in_abiflags.flags2 != 0) 15839 _bfd_error_handler 15840 (_("%pB: warning: unexpected flag in the flags2 field of " 15841 ".MIPS.abiflags (0x%lx)"), ibfd, 15842 in_abiflags.flags2); 15843 } 15844 else 15845 { 15846 infer_mips_abiflags (ibfd, &in_tdata->abiflags); 15847 in_tdata->abiflags_valid = TRUE; 15848 } 15849 15850 if (!out_tdata->abiflags_valid) 15851 { 15852 /* Copy input abiflags if output abiflags are not already valid. */ 15853 out_tdata->abiflags = in_tdata->abiflags; 15854 out_tdata->abiflags_valid = TRUE; 15855 } 15856 15857 if (! elf_flags_init (obfd)) 15858 { 15859 elf_flags_init (obfd) = TRUE; 15860 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags; 15861 elf_elfheader (obfd)->e_ident[EI_CLASS] 15862 = elf_elfheader (ibfd)->e_ident[EI_CLASS]; 15863 15864 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd) 15865 && (bfd_get_arch_info (obfd)->the_default 15866 || mips_mach_extends_p (bfd_get_mach (obfd), 15867 bfd_get_mach (ibfd)))) 15868 { 15869 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), 15870 bfd_get_mach (ibfd))) 15871 return FALSE; 15872 15873 /* Update the ABI flags isa_level, isa_rev and isa_ext fields. */ 15874 update_mips_abiflags_isa (obfd, &out_tdata->abiflags); 15875 } 15876 15877 ok = TRUE; 15878 } 15879 else 15880 ok = mips_elf_merge_obj_e_flags (ibfd, info); 15881 15882 ok = mips_elf_merge_obj_attributes (ibfd, info) && ok; 15883 15884 ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok; 15885 15886 if (!ok) 15887 { 15888 bfd_set_error (bfd_error_bad_value); 15889 return FALSE; 15890 } 15891 15892 return TRUE; 15893 } 15894 15895 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */ 15896 15897 bfd_boolean 15898 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags) 15899 { 15900 BFD_ASSERT (!elf_flags_init (abfd) 15901 || elf_elfheader (abfd)->e_flags == flags); 15902 15903 elf_elfheader (abfd)->e_flags = flags; 15904 elf_flags_init (abfd) = TRUE; 15905 return TRUE; 15906 } 15907 15908 char * 15909 _bfd_mips_elf_get_target_dtag (bfd_vma dtag) 15910 { 15911 switch (dtag) 15912 { 15913 default: return ""; 15914 case DT_MIPS_RLD_VERSION: 15915 return "MIPS_RLD_VERSION"; 15916 case DT_MIPS_TIME_STAMP: 15917 return "MIPS_TIME_STAMP"; 15918 case DT_MIPS_ICHECKSUM: 15919 return "MIPS_ICHECKSUM"; 15920 case DT_MIPS_IVERSION: 15921 return "MIPS_IVERSION"; 15922 case DT_MIPS_FLAGS: 15923 return "MIPS_FLAGS"; 15924 case DT_MIPS_BASE_ADDRESS: 15925 return "MIPS_BASE_ADDRESS"; 15926 case DT_MIPS_MSYM: 15927 return "MIPS_MSYM"; 15928 case DT_MIPS_CONFLICT: 15929 return "MIPS_CONFLICT"; 15930 case DT_MIPS_LIBLIST: 15931 return "MIPS_LIBLIST"; 15932 case DT_MIPS_LOCAL_GOTNO: 15933 return "MIPS_LOCAL_GOTNO"; 15934 case DT_MIPS_CONFLICTNO: 15935 return "MIPS_CONFLICTNO"; 15936 case DT_MIPS_LIBLISTNO: 15937 return "MIPS_LIBLISTNO"; 15938 case DT_MIPS_SYMTABNO: 15939 return "MIPS_SYMTABNO"; 15940 case DT_MIPS_UNREFEXTNO: 15941 return "MIPS_UNREFEXTNO"; 15942 case DT_MIPS_GOTSYM: 15943 return "MIPS_GOTSYM"; 15944 case DT_MIPS_HIPAGENO: 15945 return "MIPS_HIPAGENO"; 15946 case DT_MIPS_RLD_MAP: 15947 return "MIPS_RLD_MAP"; 15948 case DT_MIPS_RLD_MAP_REL: 15949 return "MIPS_RLD_MAP_REL"; 15950 case DT_MIPS_DELTA_CLASS: 15951 return "MIPS_DELTA_CLASS"; 15952 case DT_MIPS_DELTA_CLASS_NO: 15953 return "MIPS_DELTA_CLASS_NO"; 15954 case DT_MIPS_DELTA_INSTANCE: 15955 return "MIPS_DELTA_INSTANCE"; 15956 case DT_MIPS_DELTA_INSTANCE_NO: 15957 return "MIPS_DELTA_INSTANCE_NO"; 15958 case DT_MIPS_DELTA_RELOC: 15959 return "MIPS_DELTA_RELOC"; 15960 case DT_MIPS_DELTA_RELOC_NO: 15961 return "MIPS_DELTA_RELOC_NO"; 15962 case DT_MIPS_DELTA_SYM: 15963 return "MIPS_DELTA_SYM"; 15964 case DT_MIPS_DELTA_SYM_NO: 15965 return "MIPS_DELTA_SYM_NO"; 15966 case DT_MIPS_DELTA_CLASSSYM: 15967 return "MIPS_DELTA_CLASSSYM"; 15968 case DT_MIPS_DELTA_CLASSSYM_NO: 15969 return "MIPS_DELTA_CLASSSYM_NO"; 15970 case DT_MIPS_CXX_FLAGS: 15971 return "MIPS_CXX_FLAGS"; 15972 case DT_MIPS_PIXIE_INIT: 15973 return "MIPS_PIXIE_INIT"; 15974 case DT_MIPS_SYMBOL_LIB: 15975 return "MIPS_SYMBOL_LIB"; 15976 case DT_MIPS_LOCALPAGE_GOTIDX: 15977 return "MIPS_LOCALPAGE_GOTIDX"; 15978 case DT_MIPS_LOCAL_GOTIDX: 15979 return "MIPS_LOCAL_GOTIDX"; 15980 case DT_MIPS_HIDDEN_GOTIDX: 15981 return "MIPS_HIDDEN_GOTIDX"; 15982 case DT_MIPS_PROTECTED_GOTIDX: 15983 return "MIPS_PROTECTED_GOT_IDX"; 15984 case DT_MIPS_OPTIONS: 15985 return "MIPS_OPTIONS"; 15986 case DT_MIPS_INTERFACE: 15987 return "MIPS_INTERFACE"; 15988 case DT_MIPS_DYNSTR_ALIGN: 15989 return "DT_MIPS_DYNSTR_ALIGN"; 15990 case DT_MIPS_INTERFACE_SIZE: 15991 return "DT_MIPS_INTERFACE_SIZE"; 15992 case DT_MIPS_RLD_TEXT_RESOLVE_ADDR: 15993 return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR"; 15994 case DT_MIPS_PERF_SUFFIX: 15995 return "DT_MIPS_PERF_SUFFIX"; 15996 case DT_MIPS_COMPACT_SIZE: 15997 return "DT_MIPS_COMPACT_SIZE"; 15998 case DT_MIPS_GP_VALUE: 15999 return "DT_MIPS_GP_VALUE"; 16000 case DT_MIPS_AUX_DYNAMIC: 16001 return "DT_MIPS_AUX_DYNAMIC"; 16002 case DT_MIPS_PLTGOT: 16003 return "DT_MIPS_PLTGOT"; 16004 case DT_MIPS_RWPLT: 16005 return "DT_MIPS_RWPLT"; 16006 case DT_MIPS_XHASH: 16007 return "DT_MIPS_XHASH"; 16008 } 16009 } 16010 16011 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if 16012 not known. */ 16013 16014 const char * 16015 _bfd_mips_fp_abi_string (int fp) 16016 { 16017 switch (fp) 16018 { 16019 /* These strings aren't translated because they're simply 16020 option lists. */ 16021 case Val_GNU_MIPS_ABI_FP_DOUBLE: 16022 return "-mdouble-float"; 16023 16024 case Val_GNU_MIPS_ABI_FP_SINGLE: 16025 return "-msingle-float"; 16026 16027 case Val_GNU_MIPS_ABI_FP_SOFT: 16028 return "-msoft-float"; 16029 16030 case Val_GNU_MIPS_ABI_FP_OLD_64: 16031 return _("-mips32r2 -mfp64 (12 callee-saved)"); 16032 16033 case Val_GNU_MIPS_ABI_FP_XX: 16034 return "-mfpxx"; 16035 16036 case Val_GNU_MIPS_ABI_FP_64: 16037 return "-mgp32 -mfp64"; 16038 16039 case Val_GNU_MIPS_ABI_FP_64A: 16040 return "-mgp32 -mfp64 -mno-odd-spreg"; 16041 16042 default: 16043 return 0; 16044 } 16045 } 16046 16047 static void 16048 print_mips_ases (FILE *file, unsigned int mask) 16049 { 16050 if (mask & AFL_ASE_DSP) 16051 fputs ("\n\tDSP ASE", file); 16052 if (mask & AFL_ASE_DSPR2) 16053 fputs ("\n\tDSP R2 ASE", file); 16054 if (mask & AFL_ASE_DSPR3) 16055 fputs ("\n\tDSP R3 ASE", file); 16056 if (mask & AFL_ASE_EVA) 16057 fputs ("\n\tEnhanced VA Scheme", file); 16058 if (mask & AFL_ASE_MCU) 16059 fputs ("\n\tMCU (MicroController) ASE", file); 16060 if (mask & AFL_ASE_MDMX) 16061 fputs ("\n\tMDMX ASE", file); 16062 if (mask & AFL_ASE_MIPS3D) 16063 fputs ("\n\tMIPS-3D ASE", file); 16064 if (mask & AFL_ASE_MT) 16065 fputs ("\n\tMT ASE", file); 16066 if (mask & AFL_ASE_SMARTMIPS) 16067 fputs ("\n\tSmartMIPS ASE", file); 16068 if (mask & AFL_ASE_VIRT) 16069 fputs ("\n\tVZ ASE", file); 16070 if (mask & AFL_ASE_MSA) 16071 fputs ("\n\tMSA ASE", file); 16072 if (mask & AFL_ASE_MIPS16) 16073 fputs ("\n\tMIPS16 ASE", file); 16074 if (mask & AFL_ASE_MICROMIPS) 16075 fputs ("\n\tMICROMIPS ASE", file); 16076 if (mask & AFL_ASE_XPA) 16077 fputs ("\n\tXPA ASE", file); 16078 if (mask & AFL_ASE_MIPS16E2) 16079 fputs ("\n\tMIPS16e2 ASE", file); 16080 if (mask & AFL_ASE_CRC) 16081 fputs ("\n\tCRC ASE", file); 16082 if (mask & AFL_ASE_GINV) 16083 fputs ("\n\tGINV ASE", file); 16084 if (mask & AFL_ASE_LOONGSON_MMI) 16085 fputs ("\n\tLoongson MMI ASE", file); 16086 if (mask & AFL_ASE_LOONGSON_CAM) 16087 fputs ("\n\tLoongson CAM ASE", file); 16088 if (mask & AFL_ASE_LOONGSON_EXT) 16089 fputs ("\n\tLoongson EXT ASE", file); 16090 if (mask & AFL_ASE_LOONGSON_EXT2) 16091 fputs ("\n\tLoongson EXT2 ASE", file); 16092 if (mask == 0) 16093 fprintf (file, "\n\t%s", _("None")); 16094 else if ((mask & ~AFL_ASE_MASK) != 0) 16095 fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK); 16096 } 16097 16098 static void 16099 print_mips_isa_ext (FILE *file, unsigned int isa_ext) 16100 { 16101 switch (isa_ext) 16102 { 16103 case 0: 16104 fputs (_("None"), file); 16105 break; 16106 case AFL_EXT_XLR: 16107 fputs ("RMI XLR", file); 16108 break; 16109 case AFL_EXT_OCTEON3: 16110 fputs ("Cavium Networks Octeon3", file); 16111 break; 16112 case AFL_EXT_OCTEON2: 16113 fputs ("Cavium Networks Octeon2", file); 16114 break; 16115 case AFL_EXT_OCTEONP: 16116 fputs ("Cavium Networks OcteonP", file); 16117 break; 16118 case AFL_EXT_OCTEON: 16119 fputs ("Cavium Networks Octeon", file); 16120 break; 16121 case AFL_EXT_5900: 16122 fputs ("Toshiba R5900", file); 16123 break; 16124 case AFL_EXT_4650: 16125 fputs ("MIPS R4650", file); 16126 break; 16127 case AFL_EXT_4010: 16128 fputs ("LSI R4010", file); 16129 break; 16130 case AFL_EXT_4100: 16131 fputs ("NEC VR4100", file); 16132 break; 16133 case AFL_EXT_3900: 16134 fputs ("Toshiba R3900", file); 16135 break; 16136 case AFL_EXT_10000: 16137 fputs ("MIPS R10000", file); 16138 break; 16139 case AFL_EXT_SB1: 16140 fputs ("Broadcom SB-1", file); 16141 break; 16142 case AFL_EXT_4111: 16143 fputs ("NEC VR4111/VR4181", file); 16144 break; 16145 case AFL_EXT_4120: 16146 fputs ("NEC VR4120", file); 16147 break; 16148 case AFL_EXT_5400: 16149 fputs ("NEC VR5400", file); 16150 break; 16151 case AFL_EXT_5500: 16152 fputs ("NEC VR5500", file); 16153 break; 16154 case AFL_EXT_LOONGSON_2E: 16155 fputs ("ST Microelectronics Loongson 2E", file); 16156 break; 16157 case AFL_EXT_LOONGSON_2F: 16158 fputs ("ST Microelectronics Loongson 2F", file); 16159 break; 16160 case AFL_EXT_INTERAPTIV_MR2: 16161 fputs ("Imagination interAptiv MR2", file); 16162 break; 16163 default: 16164 fprintf (file, "%s (%d)", _("Unknown"), isa_ext); 16165 break; 16166 } 16167 } 16168 16169 static void 16170 print_mips_fp_abi_value (FILE *file, int val) 16171 { 16172 switch (val) 16173 { 16174 case Val_GNU_MIPS_ABI_FP_ANY: 16175 fprintf (file, _("Hard or soft float\n")); 16176 break; 16177 case Val_GNU_MIPS_ABI_FP_DOUBLE: 16178 fprintf (file, _("Hard float (double precision)\n")); 16179 break; 16180 case Val_GNU_MIPS_ABI_FP_SINGLE: 16181 fprintf (file, _("Hard float (single precision)\n")); 16182 break; 16183 case Val_GNU_MIPS_ABI_FP_SOFT: 16184 fprintf (file, _("Soft float\n")); 16185 break; 16186 case Val_GNU_MIPS_ABI_FP_OLD_64: 16187 fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n")); 16188 break; 16189 case Val_GNU_MIPS_ABI_FP_XX: 16190 fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n")); 16191 break; 16192 case Val_GNU_MIPS_ABI_FP_64: 16193 fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n")); 16194 break; 16195 case Val_GNU_MIPS_ABI_FP_64A: 16196 fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n")); 16197 break; 16198 default: 16199 fprintf (file, "??? (%d)\n", val); 16200 break; 16201 } 16202 } 16203 16204 static int 16205 get_mips_reg_size (int reg_size) 16206 { 16207 return (reg_size == AFL_REG_NONE) ? 0 16208 : (reg_size == AFL_REG_32) ? 32 16209 : (reg_size == AFL_REG_64) ? 64 16210 : (reg_size == AFL_REG_128) ? 128 16211 : -1; 16212 } 16213 16214 bfd_boolean 16215 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr) 16216 { 16217 FILE *file = ptr; 16218 16219 BFD_ASSERT (abfd != NULL && ptr != NULL); 16220 16221 /* Print normal ELF private data. */ 16222 _bfd_elf_print_private_bfd_data (abfd, ptr); 16223 16224 /* xgettext:c-format */ 16225 fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags); 16226 16227 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32) 16228 fprintf (file, _(" [abi=O32]")); 16229 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64) 16230 fprintf (file, _(" [abi=O64]")); 16231 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32) 16232 fprintf (file, _(" [abi=EABI32]")); 16233 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64) 16234 fprintf (file, _(" [abi=EABI64]")); 16235 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI)) 16236 fprintf (file, _(" [abi unknown]")); 16237 else if (ABI_N32_P (abfd)) 16238 fprintf (file, _(" [abi=N32]")); 16239 else if (ABI_64_P (abfd)) 16240 fprintf (file, _(" [abi=64]")); 16241 else 16242 fprintf (file, _(" [no abi set]")); 16243 16244 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1) 16245 fprintf (file, " [mips1]"); 16246 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2) 16247 fprintf (file, " [mips2]"); 16248 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3) 16249 fprintf (file, " [mips3]"); 16250 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4) 16251 fprintf (file, " [mips4]"); 16252 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5) 16253 fprintf (file, " [mips5]"); 16254 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32) 16255 fprintf (file, " [mips32]"); 16256 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64) 16257 fprintf (file, " [mips64]"); 16258 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2) 16259 fprintf (file, " [mips32r2]"); 16260 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2) 16261 fprintf (file, " [mips64r2]"); 16262 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6) 16263 fprintf (file, " [mips32r6]"); 16264 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6) 16265 fprintf (file, " [mips64r6]"); 16266 else 16267 fprintf (file, _(" [unknown ISA]")); 16268 16269 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX) 16270 fprintf (file, " [mdmx]"); 16271 16272 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16) 16273 fprintf (file, " [mips16]"); 16274 16275 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) 16276 fprintf (file, " [micromips]"); 16277 16278 if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008) 16279 fprintf (file, " [nan2008]"); 16280 16281 if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64) 16282 fprintf (file, " [old fp64]"); 16283 16284 if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE) 16285 fprintf (file, " [32bitmode]"); 16286 else 16287 fprintf (file, _(" [not 32bitmode]")); 16288 16289 if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER) 16290 fprintf (file, " [noreorder]"); 16291 16292 if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) 16293 fprintf (file, " [PIC]"); 16294 16295 if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC) 16296 fprintf (file, " [CPIC]"); 16297 16298 if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT) 16299 fprintf (file, " [XGOT]"); 16300 16301 if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE) 16302 fprintf (file, " [UCODE]"); 16303 16304 fputc ('\n', file); 16305 16306 if (mips_elf_tdata (abfd)->abiflags_valid) 16307 { 16308 Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags; 16309 fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version); 16310 fprintf (file, "\nISA: MIPS%d", abiflags->isa_level); 16311 if (abiflags->isa_rev > 1) 16312 fprintf (file, "r%d", abiflags->isa_rev); 16313 fprintf (file, "\nGPR size: %d", 16314 get_mips_reg_size (abiflags->gpr_size)); 16315 fprintf (file, "\nCPR1 size: %d", 16316 get_mips_reg_size (abiflags->cpr1_size)); 16317 fprintf (file, "\nCPR2 size: %d", 16318 get_mips_reg_size (abiflags->cpr2_size)); 16319 fputs ("\nFP ABI: ", file); 16320 print_mips_fp_abi_value (file, abiflags->fp_abi); 16321 fputs ("ISA Extension: ", file); 16322 print_mips_isa_ext (file, abiflags->isa_ext); 16323 fputs ("\nASEs:", file); 16324 print_mips_ases (file, abiflags->ases); 16325 fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1); 16326 fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2); 16327 fputc ('\n', file); 16328 } 16329 16330 return TRUE; 16331 } 16332 16333 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] = 16334 { 16335 { STRING_COMMA_LEN (".lit4"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 16336 { STRING_COMMA_LEN (".lit8"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 16337 { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 }, 16338 { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 16339 { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 16340 { STRING_COMMA_LEN (".ucode"), 0, SHT_MIPS_UCODE, 0 }, 16341 { STRING_COMMA_LEN (".MIPS.xhash"), 0, SHT_MIPS_XHASH, SHF_ALLOC }, 16342 { NULL, 0, 0, 0, 0 } 16343 }; 16344 16345 /* Merge non visibility st_other attributes. Ensure that the 16346 STO_OPTIONAL flag is copied into h->other, even if this is not a 16347 definiton of the symbol. */ 16348 void 16349 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h, 16350 const Elf_Internal_Sym *isym, 16351 bfd_boolean definition, 16352 bfd_boolean dynamic ATTRIBUTE_UNUSED) 16353 { 16354 if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0) 16355 { 16356 unsigned char other; 16357 16358 other = (definition ? isym->st_other : h->other); 16359 other &= ~ELF_ST_VISIBILITY (-1); 16360 h->other = other | ELF_ST_VISIBILITY (h->other); 16361 } 16362 16363 if (!definition 16364 && ELF_MIPS_IS_OPTIONAL (isym->st_other)) 16365 h->other |= STO_OPTIONAL; 16366 } 16367 16368 /* Decide whether an undefined symbol is special and can be ignored. 16369 This is the case for OPTIONAL symbols on IRIX. */ 16370 bfd_boolean 16371 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h) 16372 { 16373 return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE; 16374 } 16375 16376 bfd_boolean 16377 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym) 16378 { 16379 return (sym->st_shndx == SHN_COMMON 16380 || sym->st_shndx == SHN_MIPS_ACOMMON 16381 || sym->st_shndx == SHN_MIPS_SCOMMON); 16382 } 16383 16384 /* Return address for Ith PLT stub in section PLT, for relocation REL 16385 or (bfd_vma) -1 if it should not be included. */ 16386 16387 bfd_vma 16388 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt, 16389 const arelent *rel ATTRIBUTE_UNUSED) 16390 { 16391 return (plt->vma 16392 + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry) 16393 + i * 4 * ARRAY_SIZE (mips_exec_plt_entry)); 16394 } 16395 16396 /* Build a table of synthetic symbols to represent the PLT. As with MIPS16 16397 and microMIPS PLT slots we may have a many-to-one mapping between .plt 16398 and .got.plt and also the slots may be of a different size each we walk 16399 the PLT manually fetching instructions and matching them against known 16400 patterns. To make things easier standard MIPS slots, if any, always come 16401 first. As we don't create proper ELF symbols we use the UDATA.I member 16402 of ASYMBOL to carry ISA annotation. The encoding used is the same as 16403 with the ST_OTHER member of the ELF symbol. */ 16404 16405 long 16406 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd, 16407 long symcount ATTRIBUTE_UNUSED, 16408 asymbol **syms ATTRIBUTE_UNUSED, 16409 long dynsymcount, asymbol **dynsyms, 16410 asymbol **ret) 16411 { 16412 static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_"; 16413 static const char microsuffix[] = "@micromipsplt"; 16414 static const char m16suffix[] = "@mips16plt"; 16415 static const char mipssuffix[] = "@plt"; 16416 16417 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean); 16418 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 16419 bfd_boolean micromips_p = MICROMIPS_P (abfd); 16420 Elf_Internal_Shdr *hdr; 16421 bfd_byte *plt_data; 16422 bfd_vma plt_offset; 16423 unsigned int other; 16424 bfd_vma entry_size; 16425 bfd_vma plt0_size; 16426 asection *relplt; 16427 bfd_vma opcode; 16428 asection *plt; 16429 asymbol *send; 16430 size_t size; 16431 char *names; 16432 long counti; 16433 arelent *p; 16434 asymbol *s; 16435 char *nend; 16436 long count; 16437 long pi; 16438 long i; 16439 long n; 16440 16441 *ret = NULL; 16442 16443 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0) 16444 return 0; 16445 16446 relplt = bfd_get_section_by_name (abfd, ".rel.plt"); 16447 if (relplt == NULL) 16448 return 0; 16449 16450 hdr = &elf_section_data (relplt)->this_hdr; 16451 if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL) 16452 return 0; 16453 16454 plt = bfd_get_section_by_name (abfd, ".plt"); 16455 if (plt == NULL) 16456 return 0; 16457 16458 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table; 16459 if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE)) 16460 return -1; 16461 p = relplt->relocation; 16462 16463 /* Calculating the exact amount of space required for symbols would 16464 require two passes over the PLT, so just pessimise assuming two 16465 PLT slots per relocation. */ 16466 count = relplt->size / hdr->sh_entsize; 16467 counti = count * bed->s->int_rels_per_ext_rel; 16468 size = 2 * count * sizeof (asymbol); 16469 size += count * (sizeof (mipssuffix) + 16470 (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix))); 16471 for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel) 16472 size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name); 16473 16474 /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too. */ 16475 size += sizeof (asymbol) + sizeof (pltname); 16476 16477 if (!bfd_malloc_and_get_section (abfd, plt, &plt_data)) 16478 return -1; 16479 16480 if (plt->size < 16) 16481 return -1; 16482 16483 s = *ret = bfd_malloc (size); 16484 if (s == NULL) 16485 return -1; 16486 send = s + 2 * count + 1; 16487 16488 names = (char *) send; 16489 nend = (char *) s + size; 16490 n = 0; 16491 16492 opcode = bfd_get_micromips_32 (abfd, plt_data + 12); 16493 if (opcode == 0x3302fffe) 16494 { 16495 if (!micromips_p) 16496 return -1; 16497 plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry); 16498 other = STO_MICROMIPS; 16499 } 16500 else if (opcode == 0x0398c1d0) 16501 { 16502 if (!micromips_p) 16503 return -1; 16504 plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); 16505 other = STO_MICROMIPS; 16506 } 16507 else 16508 { 16509 plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry); 16510 other = 0; 16511 } 16512 16513 s->the_bfd = abfd; 16514 s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL; 16515 s->section = plt; 16516 s->value = 0; 16517 s->name = names; 16518 s->udata.i = other; 16519 memcpy (names, pltname, sizeof (pltname)); 16520 names += sizeof (pltname); 16521 ++s, ++n; 16522 16523 pi = 0; 16524 for (plt_offset = plt0_size; 16525 plt_offset + 8 <= plt->size && s < send; 16526 plt_offset += entry_size) 16527 { 16528 bfd_vma gotplt_addr; 16529 const char *suffix; 16530 bfd_vma gotplt_hi; 16531 bfd_vma gotplt_lo; 16532 size_t suffixlen; 16533 16534 opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4); 16535 16536 /* Check if the second word matches the expected MIPS16 instruction. */ 16537 if (opcode == 0x651aeb00) 16538 { 16539 if (micromips_p) 16540 return -1; 16541 /* Truncated table??? */ 16542 if (plt_offset + 16 > plt->size) 16543 break; 16544 gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12); 16545 entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry); 16546 suffixlen = sizeof (m16suffix); 16547 suffix = m16suffix; 16548 other = STO_MIPS16; 16549 } 16550 /* Likewise the expected microMIPS instruction (no insn32 mode). */ 16551 else if (opcode == 0xff220000) 16552 { 16553 if (!micromips_p) 16554 return -1; 16555 gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f; 16556 gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff; 16557 gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18; 16558 gotplt_lo <<= 2; 16559 gotplt_addr = gotplt_hi + gotplt_lo; 16560 gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3; 16561 entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry); 16562 suffixlen = sizeof (microsuffix); 16563 suffix = microsuffix; 16564 other = STO_MICROMIPS; 16565 } 16566 /* Likewise the expected microMIPS instruction (insn32 mode). */ 16567 else if ((opcode & 0xffff0000) == 0xff2f0000) 16568 { 16569 gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff; 16570 gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff; 16571 gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16; 16572 gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000; 16573 gotplt_addr = gotplt_hi + gotplt_lo; 16574 entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry); 16575 suffixlen = sizeof (microsuffix); 16576 suffix = microsuffix; 16577 other = STO_MICROMIPS; 16578 } 16579 /* Otherwise assume standard MIPS code. */ 16580 else 16581 { 16582 gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff; 16583 gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff; 16584 gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16; 16585 gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000; 16586 gotplt_addr = gotplt_hi + gotplt_lo; 16587 entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry); 16588 suffixlen = sizeof (mipssuffix); 16589 suffix = mipssuffix; 16590 other = 0; 16591 } 16592 /* Truncated table??? */ 16593 if (plt_offset + entry_size > plt->size) 16594 break; 16595 16596 for (i = 0; 16597 i < count && p[pi].address != gotplt_addr; 16598 i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti); 16599 16600 if (i < count) 16601 { 16602 size_t namelen; 16603 size_t len; 16604 16605 *s = **p[pi].sym_ptr_ptr; 16606 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since 16607 we are defining a symbol, ensure one of them is set. */ 16608 if ((s->flags & BSF_LOCAL) == 0) 16609 s->flags |= BSF_GLOBAL; 16610 s->flags |= BSF_SYNTHETIC; 16611 s->section = plt; 16612 s->value = plt_offset; 16613 s->name = names; 16614 s->udata.i = other; 16615 16616 len = strlen ((*p[pi].sym_ptr_ptr)->name); 16617 namelen = len + suffixlen; 16618 if (names + namelen > nend) 16619 break; 16620 16621 memcpy (names, (*p[pi].sym_ptr_ptr)->name, len); 16622 names += len; 16623 memcpy (names, suffix, suffixlen); 16624 names += suffixlen; 16625 16626 ++s, ++n; 16627 pi = (pi + bed->s->int_rels_per_ext_rel) % counti; 16628 } 16629 } 16630 16631 free (plt_data); 16632 16633 return n; 16634 } 16635 16636 /* Return the ABI flags associated with ABFD if available. */ 16637 16638 Elf_Internal_ABIFlags_v0 * 16639 bfd_mips_elf_get_abiflags (bfd *abfd) 16640 { 16641 struct mips_elf_obj_tdata *tdata = mips_elf_tdata (abfd); 16642 16643 return tdata->abiflags_valid ? &tdata->abiflags : NULL; 16644 } 16645 16646 /* MIPS libc ABI versions, used with the EI_ABIVERSION ELF file header 16647 field. Taken from `libc-abis.h' generated at GNU libc build time. 16648 Using a MIPS_ prefix as other libc targets use different values. */ 16649 enum 16650 { 16651 MIPS_LIBC_ABI_DEFAULT = 0, 16652 MIPS_LIBC_ABI_MIPS_PLT, 16653 MIPS_LIBC_ABI_UNIQUE, 16654 MIPS_LIBC_ABI_MIPS_O32_FP64, 16655 MIPS_LIBC_ABI_ABSOLUTE, 16656 MIPS_LIBC_ABI_XHASH, 16657 MIPS_LIBC_ABI_MAX 16658 }; 16659 16660 bfd_boolean 16661 _bfd_mips_init_file_header (bfd *abfd, struct bfd_link_info *link_info) 16662 { 16663 struct mips_elf_link_hash_table *htab = NULL; 16664 Elf_Internal_Ehdr *i_ehdrp; 16665 16666 if (!_bfd_elf_init_file_header (abfd, link_info)) 16667 return FALSE; 16668 16669 i_ehdrp = elf_elfheader (abfd); 16670 if (link_info) 16671 { 16672 htab = mips_elf_hash_table (link_info); 16673 BFD_ASSERT (htab != NULL); 16674 } 16675 16676 if (htab != NULL && htab->use_plts_and_copy_relocs && !htab->is_vxworks) 16677 i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_MIPS_PLT; 16678 16679 if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64 16680 || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A) 16681 i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_MIPS_O32_FP64; 16682 16683 /* Mark that we need support for absolute symbols in the dynamic loader. */ 16684 if (htab != NULL && htab->use_absolute_zero && htab->gnu_target) 16685 i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_ABSOLUTE; 16686 16687 /* Mark that we need support for .MIPS.xhash in the dynamic linker, 16688 if it is the only hash section that will be created. */ 16689 if (link_info && link_info->emit_gnu_hash && !link_info->emit_hash) 16690 i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_XHASH; 16691 return TRUE; 16692 } 16693 16694 int 16695 _bfd_mips_elf_compact_eh_encoding 16696 (struct bfd_link_info *link_info ATTRIBUTE_UNUSED) 16697 { 16698 return DW_EH_PE_pcrel | DW_EH_PE_sdata4; 16699 } 16700 16701 /* Return the opcode for can't unwind. */ 16702 16703 int 16704 _bfd_mips_elf_cant_unwind_opcode 16705 (struct bfd_link_info *link_info ATTRIBUTE_UNUSED) 16706 { 16707 return COMPACT_EH_CANT_UNWIND_OPCODE; 16708 } 16709 16710 /* Record a position XLAT_LOC in the xlat translation table, associated with 16711 the hash entry H. The entry in the translation table will later be 16712 populated with the real symbol dynindx. */ 16713 16714 void 16715 _bfd_mips_elf_record_xhash_symbol (struct elf_link_hash_entry *h, 16716 bfd_vma xlat_loc) 16717 { 16718 struct mips_elf_link_hash_entry *hmips; 16719 16720 hmips = (struct mips_elf_link_hash_entry *) h; 16721 hmips->mipsxhash_loc = xlat_loc; 16722 } 16723