1 /* MIPS-specific support for ELF 2 Copyright 1993-2013 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 "elfxx-mips.h" 37 #include "elf/mips.h" 38 #include "elf-vxworks.h" 39 40 /* Get the ECOFF swapping routines. */ 41 #include "coff/sym.h" 42 #include "coff/symconst.h" 43 #include "coff/ecoff.h" 44 #include "coff/mips.h" 45 46 #include "hashtab.h" 47 48 /* Types of TLS GOT entry. */ 49 enum mips_got_tls_type { 50 GOT_TLS_NONE, 51 GOT_TLS_GD, 52 GOT_TLS_LDM, 53 GOT_TLS_IE 54 }; 55 56 /* This structure is used to hold information about one GOT entry. 57 There are four types of entry: 58 59 (1) an absolute address 60 requires: abfd == NULL 61 fields: d.address 62 63 (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd 64 requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM 65 fields: abfd, symndx, d.addend, tls_type 66 67 (3) a SYMBOL address, where SYMBOL is not local to an input bfd 68 requires: abfd != NULL, symndx == -1 69 fields: d.h, tls_type 70 71 (4) a TLS LDM slot 72 requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM 73 fields: none; there's only one of these per GOT. */ 74 struct mips_got_entry 75 { 76 /* One input bfd that needs the GOT entry. */ 77 bfd *abfd; 78 /* The index of the symbol, as stored in the relocation r_info, if 79 we have a local symbol; -1 otherwise. */ 80 long symndx; 81 union 82 { 83 /* If abfd == NULL, an address that must be stored in the got. */ 84 bfd_vma address; 85 /* If abfd != NULL && symndx != -1, the addend of the relocation 86 that should be added to the symbol value. */ 87 bfd_vma addend; 88 /* If abfd != NULL && symndx == -1, the hash table entry 89 corresponding to a symbol in the GOT. The symbol's entry 90 is in the local area if h->global_got_area is GGA_NONE, 91 otherwise it is in the global area. */ 92 struct mips_elf_link_hash_entry *h; 93 } d; 94 95 /* The TLS type of this GOT entry. An LDM GOT entry will be a local 96 symbol entry with r_symndx == 0. */ 97 unsigned char tls_type; 98 99 /* True if we have filled in the GOT contents for a TLS entry, 100 and created the associated relocations. */ 101 unsigned char tls_initialized; 102 103 /* The offset from the beginning of the .got section to the entry 104 corresponding to this symbol+addend. If it's a global symbol 105 whose offset is yet to be decided, it's going to be -1. */ 106 long gotidx; 107 }; 108 109 /* This structure represents a GOT page reference from an input bfd. 110 Each instance represents a symbol + ADDEND, where the representation 111 of the symbol depends on whether it is local to the input bfd. 112 If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD. 113 Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry. 114 115 Page references with SYMNDX >= 0 always become page references 116 in the output. Page references with SYMNDX < 0 only become page 117 references if the symbol binds locally; in other cases, the page 118 reference decays to a global GOT reference. */ 119 struct mips_got_page_ref 120 { 121 long symndx; 122 union 123 { 124 struct mips_elf_link_hash_entry *h; 125 bfd *abfd; 126 } u; 127 bfd_vma addend; 128 }; 129 130 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND]. 131 The structures form a non-overlapping list that is sorted by increasing 132 MIN_ADDEND. */ 133 struct mips_got_page_range 134 { 135 struct mips_got_page_range *next; 136 bfd_signed_vma min_addend; 137 bfd_signed_vma max_addend; 138 }; 139 140 /* This structure describes the range of addends that are applied to page 141 relocations against a given section. */ 142 struct mips_got_page_entry 143 { 144 /* The section that these entries are based on. */ 145 asection *sec; 146 /* The ranges for this page entry. */ 147 struct mips_got_page_range *ranges; 148 /* The maximum number of page entries needed for RANGES. */ 149 bfd_vma num_pages; 150 }; 151 152 /* This structure is used to hold .got information when linking. */ 153 154 struct mips_got_info 155 { 156 /* The number of global .got entries. */ 157 unsigned int global_gotno; 158 /* The number of global .got entries that are in the GGA_RELOC_ONLY area. */ 159 unsigned int reloc_only_gotno; 160 /* The number of .got slots used for TLS. */ 161 unsigned int tls_gotno; 162 /* The first unused TLS .got entry. Used only during 163 mips_elf_initialize_tls_index. */ 164 unsigned int tls_assigned_gotno; 165 /* The number of local .got entries, eventually including page entries. */ 166 unsigned int local_gotno; 167 /* The maximum number of page entries needed. */ 168 unsigned int page_gotno; 169 /* The number of relocations needed for the GOT entries. */ 170 unsigned int relocs; 171 /* The number of local .got entries we have used. */ 172 unsigned int assigned_gotno; 173 /* A hash table holding members of the got. */ 174 struct htab *got_entries; 175 /* A hash table holding mips_got_page_ref structures. */ 176 struct htab *got_page_refs; 177 /* A hash table of mips_got_page_entry structures. */ 178 struct htab *got_page_entries; 179 /* In multi-got links, a pointer to the next got (err, rather, most 180 of the time, it points to the previous got). */ 181 struct mips_got_info *next; 182 }; 183 184 /* Structure passed when merging bfds' gots. */ 185 186 struct mips_elf_got_per_bfd_arg 187 { 188 /* The output bfd. */ 189 bfd *obfd; 190 /* The link information. */ 191 struct bfd_link_info *info; 192 /* A pointer to the primary got, i.e., the one that's going to get 193 the implicit relocations from DT_MIPS_LOCAL_GOTNO and 194 DT_MIPS_GOTSYM. */ 195 struct mips_got_info *primary; 196 /* A non-primary got we're trying to merge with other input bfd's 197 gots. */ 198 struct mips_got_info *current; 199 /* The maximum number of got entries that can be addressed with a 200 16-bit offset. */ 201 unsigned int max_count; 202 /* The maximum number of page entries needed by each got. */ 203 unsigned int max_pages; 204 /* The total number of global entries which will live in the 205 primary got and be automatically relocated. This includes 206 those not referenced by the primary GOT but included in 207 the "master" GOT. */ 208 unsigned int global_count; 209 }; 210 211 /* A structure used to pass information to htab_traverse callbacks 212 when laying out the GOT. */ 213 214 struct mips_elf_traverse_got_arg 215 { 216 struct bfd_link_info *info; 217 struct mips_got_info *g; 218 int value; 219 }; 220 221 struct _mips_elf_section_data 222 { 223 struct bfd_elf_section_data elf; 224 union 225 { 226 bfd_byte *tdata; 227 } u; 228 }; 229 230 #define mips_elf_section_data(sec) \ 231 ((struct _mips_elf_section_data *) elf_section_data (sec)) 232 233 #define is_mips_elf(bfd) \ 234 (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ 235 && elf_tdata (bfd) != NULL \ 236 && elf_object_id (bfd) == MIPS_ELF_DATA) 237 238 /* The ABI says that every symbol used by dynamic relocations must have 239 a global GOT entry. Among other things, this provides the dynamic 240 linker with a free, directly-indexed cache. The GOT can therefore 241 contain symbols that are not referenced by GOT relocations themselves 242 (in other words, it may have symbols that are not referenced by things 243 like R_MIPS_GOT16 and R_MIPS_GOT_PAGE). 244 245 GOT relocations are less likely to overflow if we put the associated 246 GOT entries towards the beginning. We therefore divide the global 247 GOT entries into two areas: "normal" and "reloc-only". Entries in 248 the first area can be used for both dynamic relocations and GP-relative 249 accesses, while those in the "reloc-only" area are for dynamic 250 relocations only. 251 252 These GGA_* ("Global GOT Area") values are organised so that lower 253 values are more general than higher values. Also, non-GGA_NONE 254 values are ordered by the position of the area in the GOT. */ 255 #define GGA_NORMAL 0 256 #define GGA_RELOC_ONLY 1 257 #define GGA_NONE 2 258 259 /* Information about a non-PIC interface to a PIC function. There are 260 two ways of creating these interfaces. The first is to add: 261 262 lui $25,%hi(func) 263 addiu $25,$25,%lo(func) 264 265 immediately before a PIC function "func". The second is to add: 266 267 lui $25,%hi(func) 268 j func 269 addiu $25,$25,%lo(func) 270 271 to a separate trampoline section. 272 273 Stubs of the first kind go in a new section immediately before the 274 target function. Stubs of the second kind go in a single section 275 pointed to by the hash table's "strampoline" field. */ 276 struct mips_elf_la25_stub { 277 /* The generated section that contains this stub. */ 278 asection *stub_section; 279 280 /* The offset of the stub from the start of STUB_SECTION. */ 281 bfd_vma offset; 282 283 /* One symbol for the original function. Its location is available 284 in H->root.root.u.def. */ 285 struct mips_elf_link_hash_entry *h; 286 }; 287 288 /* Macros for populating a mips_elf_la25_stub. */ 289 290 #define LA25_LUI(VAL) (0x3c190000 | (VAL)) /* lui t9,VAL */ 291 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */ 292 #define LA25_ADDIU(VAL) (0x27390000 | (VAL)) /* addiu t9,t9,VAL */ 293 #define LA25_LUI_MICROMIPS(VAL) \ 294 (0x41b90000 | (VAL)) /* lui t9,VAL */ 295 #define LA25_J_MICROMIPS(VAL) \ 296 (0xd4000000 | (((VAL) >> 1) & 0x3ffffff)) /* j VAL */ 297 #define LA25_ADDIU_MICROMIPS(VAL) \ 298 (0x33390000 | (VAL)) /* addiu t9,t9,VAL */ 299 300 /* This structure is passed to mips_elf_sort_hash_table_f when sorting 301 the dynamic symbols. */ 302 303 struct mips_elf_hash_sort_data 304 { 305 /* The symbol in the global GOT with the lowest dynamic symbol table 306 index. */ 307 struct elf_link_hash_entry *low; 308 /* The least dynamic symbol table index corresponding to a non-TLS 309 symbol with a GOT entry. */ 310 long min_got_dynindx; 311 /* The greatest dynamic symbol table index corresponding to a symbol 312 with a GOT entry that is not referenced (e.g., a dynamic symbol 313 with dynamic relocations pointing to it from non-primary GOTs). */ 314 long max_unref_got_dynindx; 315 /* The greatest dynamic symbol table index not corresponding to a 316 symbol without a GOT entry. */ 317 long max_non_got_dynindx; 318 }; 319 320 /* We make up to two PLT entries if needed, one for standard MIPS code 321 and one for compressed code, either a MIPS16 or microMIPS one. We 322 keep a separate record of traditional lazy-binding stubs, for easier 323 processing. */ 324 325 struct plt_entry 326 { 327 /* Traditional SVR4 stub offset, or -1 if none. */ 328 bfd_vma stub_offset; 329 330 /* Standard PLT entry offset, or -1 if none. */ 331 bfd_vma mips_offset; 332 333 /* Compressed PLT entry offset, or -1 if none. */ 334 bfd_vma comp_offset; 335 336 /* The corresponding .got.plt index, or -1 if none. */ 337 bfd_vma gotplt_index; 338 339 /* Whether we need a standard PLT entry. */ 340 unsigned int need_mips : 1; 341 342 /* Whether we need a compressed PLT entry. */ 343 unsigned int need_comp : 1; 344 }; 345 346 /* The MIPS ELF linker needs additional information for each symbol in 347 the global hash table. */ 348 349 struct mips_elf_link_hash_entry 350 { 351 struct elf_link_hash_entry root; 352 353 /* External symbol information. */ 354 EXTR esym; 355 356 /* The la25 stub we have created for ths symbol, if any. */ 357 struct mips_elf_la25_stub *la25_stub; 358 359 /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against 360 this symbol. */ 361 unsigned int possibly_dynamic_relocs; 362 363 /* If there is a stub that 32 bit functions should use to call this 364 16 bit function, this points to the section containing the stub. */ 365 asection *fn_stub; 366 367 /* If there is a stub that 16 bit functions should use to call this 368 32 bit function, this points to the section containing the stub. */ 369 asection *call_stub; 370 371 /* This is like the call_stub field, but it is used if the function 372 being called returns a floating point value. */ 373 asection *call_fp_stub; 374 375 /* The highest GGA_* value that satisfies all references to this symbol. */ 376 unsigned int global_got_area : 2; 377 378 /* True if all GOT relocations against this symbol are for calls. This is 379 a looser condition than no_fn_stub below, because there may be other 380 non-call non-GOT relocations against the symbol. */ 381 unsigned int got_only_for_calls : 1; 382 383 /* True if one of the relocations described by possibly_dynamic_relocs 384 is against a readonly section. */ 385 unsigned int readonly_reloc : 1; 386 387 /* True if there is a relocation against this symbol that must be 388 resolved by the static linker (in other words, if the relocation 389 cannot possibly be made dynamic). */ 390 unsigned int has_static_relocs : 1; 391 392 /* True if we must not create a .MIPS.stubs entry for this symbol. 393 This is set, for example, if there are relocations related to 394 taking the function's address, i.e. any but R_MIPS_CALL*16 ones. 395 See "MIPS ABI Supplement, 3rd Edition", p. 4-20. */ 396 unsigned int no_fn_stub : 1; 397 398 /* Whether we need the fn_stub; this is true if this symbol appears 399 in any relocs other than a 16 bit call. */ 400 unsigned int need_fn_stub : 1; 401 402 /* True if this symbol is referenced by branch relocations from 403 any non-PIC input file. This is used to determine whether an 404 la25 stub is required. */ 405 unsigned int has_nonpic_branches : 1; 406 407 /* Does this symbol need a traditional MIPS lazy-binding stub 408 (as opposed to a PLT entry)? */ 409 unsigned int needs_lazy_stub : 1; 410 411 /* Does this symbol resolve to a PLT entry? */ 412 unsigned int use_plt_entry : 1; 413 }; 414 415 /* MIPS ELF linker hash table. */ 416 417 struct mips_elf_link_hash_table 418 { 419 struct elf_link_hash_table root; 420 421 /* The number of .rtproc entries. */ 422 bfd_size_type procedure_count; 423 424 /* The size of the .compact_rel section (if SGI_COMPAT). */ 425 bfd_size_type compact_rel_size; 426 427 /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry 428 is set to the address of __rld_obj_head as in IRIX5 and IRIX6. */ 429 bfd_boolean use_rld_obj_head; 430 431 /* The __rld_map or __rld_obj_head symbol. */ 432 struct elf_link_hash_entry *rld_symbol; 433 434 /* This is set if we see any mips16 stub sections. */ 435 bfd_boolean mips16_stubs_seen; 436 437 /* True if we can generate copy relocs and PLTs. */ 438 bfd_boolean use_plts_and_copy_relocs; 439 440 /* True if we can only use 32-bit microMIPS instructions. */ 441 bfd_boolean insn32; 442 443 /* True if we're generating code for VxWorks. */ 444 bfd_boolean is_vxworks; 445 446 /* True if we already reported the small-data section overflow. */ 447 bfd_boolean small_data_overflow_reported; 448 449 /* Shortcuts to some dynamic sections, or NULL if they are not 450 being used. */ 451 asection *srelbss; 452 asection *sdynbss; 453 asection *srelplt; 454 asection *srelplt2; 455 asection *sgotplt; 456 asection *splt; 457 asection *sstubs; 458 asection *sgot; 459 460 /* The master GOT information. */ 461 struct mips_got_info *got_info; 462 463 /* The global symbol in the GOT with the lowest index in the dynamic 464 symbol table. */ 465 struct elf_link_hash_entry *global_gotsym; 466 467 /* The size of the PLT header in bytes. */ 468 bfd_vma plt_header_size; 469 470 /* The size of a standard PLT entry in bytes. */ 471 bfd_vma plt_mips_entry_size; 472 473 /* The size of a compressed PLT entry in bytes. */ 474 bfd_vma plt_comp_entry_size; 475 476 /* The offset of the next standard PLT entry to create. */ 477 bfd_vma plt_mips_offset; 478 479 /* The offset of the next compressed PLT entry to create. */ 480 bfd_vma plt_comp_offset; 481 482 /* The index of the next .got.plt entry to create. */ 483 bfd_vma plt_got_index; 484 485 /* The number of functions that need a lazy-binding stub. */ 486 bfd_vma lazy_stub_count; 487 488 /* The size of a function stub entry in bytes. */ 489 bfd_vma function_stub_size; 490 491 /* The number of reserved entries at the beginning of the GOT. */ 492 unsigned int reserved_gotno; 493 494 /* The section used for mips_elf_la25_stub trampolines. 495 See the comment above that structure for details. */ 496 asection *strampoline; 497 498 /* A table of mips_elf_la25_stubs, indexed by (input_section, offset) 499 pairs. */ 500 htab_t la25_stubs; 501 502 /* A function FN (NAME, IS, OS) that creates a new input section 503 called NAME and links it to output section OS. If IS is nonnull, 504 the new section should go immediately before it, otherwise it 505 should go at the (current) beginning of OS. 506 507 The function returns the new section on success, otherwise it 508 returns null. */ 509 asection *(*add_stub_section) (const char *, asection *, asection *); 510 511 /* Small local sym cache. */ 512 struct sym_cache sym_cache; 513 514 /* Is the PLT header compressed? */ 515 unsigned int plt_header_is_comp : 1; 516 }; 517 518 /* Get the MIPS ELF linker hash table from a link_info structure. */ 519 520 #define mips_elf_hash_table(p) \ 521 (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ 522 == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL) 523 524 /* A structure used to communicate with htab_traverse callbacks. */ 525 struct mips_htab_traverse_info 526 { 527 /* The usual link-wide information. */ 528 struct bfd_link_info *info; 529 bfd *output_bfd; 530 531 /* Starts off FALSE and is set to TRUE if the link should be aborted. */ 532 bfd_boolean error; 533 }; 534 535 /* MIPS ELF private object data. */ 536 537 struct mips_elf_obj_tdata 538 { 539 /* Generic ELF private object data. */ 540 struct elf_obj_tdata root; 541 542 /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output. */ 543 bfd *abi_fp_bfd; 544 545 /* Input BFD providing Tag_GNU_MIPS_ABI_MSA attribute for output. */ 546 bfd *abi_msa_bfd; 547 548 /* The GOT requirements of input bfds. */ 549 struct mips_got_info *got; 550 551 /* Used by _bfd_mips_elf_find_nearest_line. The structure could be 552 included directly in this one, but there's no point to wasting 553 the memory just for the infrequently called find_nearest_line. */ 554 struct mips_elf_find_line *find_line_info; 555 556 /* An array of stub sections indexed by symbol number. */ 557 asection **local_stubs; 558 asection **local_call_stubs; 559 560 /* The Irix 5 support uses two virtual sections, which represent 561 text/data symbols defined in dynamic objects. */ 562 asymbol *elf_data_symbol; 563 asymbol *elf_text_symbol; 564 asection *elf_data_section; 565 asection *elf_text_section; 566 }; 567 568 /* Get MIPS ELF private object data from BFD's tdata. */ 569 570 #define mips_elf_tdata(bfd) \ 571 ((struct mips_elf_obj_tdata *) (bfd)->tdata.any) 572 573 #define TLS_RELOC_P(r_type) \ 574 (r_type == R_MIPS_TLS_DTPMOD32 \ 575 || r_type == R_MIPS_TLS_DTPMOD64 \ 576 || r_type == R_MIPS_TLS_DTPREL32 \ 577 || r_type == R_MIPS_TLS_DTPREL64 \ 578 || r_type == R_MIPS_TLS_GD \ 579 || r_type == R_MIPS_TLS_LDM \ 580 || r_type == R_MIPS_TLS_DTPREL_HI16 \ 581 || r_type == R_MIPS_TLS_DTPREL_LO16 \ 582 || r_type == R_MIPS_TLS_GOTTPREL \ 583 || r_type == R_MIPS_TLS_TPREL32 \ 584 || r_type == R_MIPS_TLS_TPREL64 \ 585 || r_type == R_MIPS_TLS_TPREL_HI16 \ 586 || r_type == R_MIPS_TLS_TPREL_LO16 \ 587 || r_type == R_MIPS16_TLS_GD \ 588 || r_type == R_MIPS16_TLS_LDM \ 589 || r_type == R_MIPS16_TLS_DTPREL_HI16 \ 590 || r_type == R_MIPS16_TLS_DTPREL_LO16 \ 591 || r_type == R_MIPS16_TLS_GOTTPREL \ 592 || r_type == R_MIPS16_TLS_TPREL_HI16 \ 593 || r_type == R_MIPS16_TLS_TPREL_LO16 \ 594 || r_type == R_MICROMIPS_TLS_GD \ 595 || r_type == R_MICROMIPS_TLS_LDM \ 596 || r_type == R_MICROMIPS_TLS_DTPREL_HI16 \ 597 || r_type == R_MICROMIPS_TLS_DTPREL_LO16 \ 598 || r_type == R_MICROMIPS_TLS_GOTTPREL \ 599 || r_type == R_MICROMIPS_TLS_TPREL_HI16 \ 600 || r_type == R_MICROMIPS_TLS_TPREL_LO16) 601 602 /* Structure used to pass information to mips_elf_output_extsym. */ 603 604 struct extsym_info 605 { 606 bfd *abfd; 607 struct bfd_link_info *info; 608 struct ecoff_debug_info *debug; 609 const struct ecoff_debug_swap *swap; 610 bfd_boolean failed; 611 }; 612 613 /* The names of the runtime procedure table symbols used on IRIX5. */ 614 615 static const char * const mips_elf_dynsym_rtproc_names[] = 616 { 617 "_procedure_table", 618 "_procedure_string_table", 619 "_procedure_table_size", 620 NULL 621 }; 622 623 /* These structures are used to generate the .compact_rel section on 624 IRIX5. */ 625 626 typedef struct 627 { 628 unsigned long id1; /* Always one? */ 629 unsigned long num; /* Number of compact relocation entries. */ 630 unsigned long id2; /* Always two? */ 631 unsigned long offset; /* The file offset of the first relocation. */ 632 unsigned long reserved0; /* Zero? */ 633 unsigned long reserved1; /* Zero? */ 634 } Elf32_compact_rel; 635 636 typedef struct 637 { 638 bfd_byte id1[4]; 639 bfd_byte num[4]; 640 bfd_byte id2[4]; 641 bfd_byte offset[4]; 642 bfd_byte reserved0[4]; 643 bfd_byte reserved1[4]; 644 } Elf32_External_compact_rel; 645 646 typedef struct 647 { 648 unsigned int ctype : 1; /* 1: long 0: short format. See below. */ 649 unsigned int rtype : 4; /* Relocation types. See below. */ 650 unsigned int dist2to : 8; 651 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */ 652 unsigned long konst; /* KONST field. See below. */ 653 unsigned long vaddr; /* VADDR to be relocated. */ 654 } Elf32_crinfo; 655 656 typedef struct 657 { 658 unsigned int ctype : 1; /* 1: long 0: short format. See below. */ 659 unsigned int rtype : 4; /* Relocation types. See below. */ 660 unsigned int dist2to : 8; 661 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */ 662 unsigned long konst; /* KONST field. See below. */ 663 } Elf32_crinfo2; 664 665 typedef struct 666 { 667 bfd_byte info[4]; 668 bfd_byte konst[4]; 669 bfd_byte vaddr[4]; 670 } Elf32_External_crinfo; 671 672 typedef struct 673 { 674 bfd_byte info[4]; 675 bfd_byte konst[4]; 676 } Elf32_External_crinfo2; 677 678 /* These are the constants used to swap the bitfields in a crinfo. */ 679 680 #define CRINFO_CTYPE (0x1) 681 #define CRINFO_CTYPE_SH (31) 682 #define CRINFO_RTYPE (0xf) 683 #define CRINFO_RTYPE_SH (27) 684 #define CRINFO_DIST2TO (0xff) 685 #define CRINFO_DIST2TO_SH (19) 686 #define CRINFO_RELVADDR (0x7ffff) 687 #define CRINFO_RELVADDR_SH (0) 688 689 /* A compact relocation info has long (3 words) or short (2 words) 690 formats. A short format doesn't have VADDR field and relvaddr 691 fields contains ((VADDR - vaddr of the previous entry) >> 2). */ 692 #define CRF_MIPS_LONG 1 693 #define CRF_MIPS_SHORT 0 694 695 /* There are 4 types of compact relocation at least. The value KONST 696 has different meaning for each type: 697 698 (type) (konst) 699 CT_MIPS_REL32 Address in data 700 CT_MIPS_WORD Address in word (XXX) 701 CT_MIPS_GPHI_LO GP - vaddr 702 CT_MIPS_JMPAD Address to jump 703 */ 704 705 #define CRT_MIPS_REL32 0xa 706 #define CRT_MIPS_WORD 0xb 707 #define CRT_MIPS_GPHI_LO 0xc 708 #define CRT_MIPS_JMPAD 0xd 709 710 #define mips_elf_set_cr_format(x,format) ((x).ctype = (format)) 711 #define mips_elf_set_cr_type(x,type) ((x).rtype = (type)) 712 #define mips_elf_set_cr_dist2to(x,v) ((x).dist2to = (v)) 713 #define mips_elf_set_cr_relvaddr(x,d) ((x).relvaddr = (d)<<2) 714 715 /* The structure of the runtime procedure descriptor created by the 716 loader for use by the static exception system. */ 717 718 typedef struct runtime_pdr { 719 bfd_vma adr; /* Memory address of start of procedure. */ 720 long regmask; /* Save register mask. */ 721 long regoffset; /* Save register offset. */ 722 long fregmask; /* Save floating point register mask. */ 723 long fregoffset; /* Save floating point register offset. */ 724 long frameoffset; /* Frame size. */ 725 short framereg; /* Frame pointer register. */ 726 short pcreg; /* Offset or reg of return pc. */ 727 long irpss; /* Index into the runtime string table. */ 728 long reserved; 729 struct exception_info *exception_info;/* Pointer to exception array. */ 730 } RPDR, *pRPDR; 731 #define cbRPDR sizeof (RPDR) 732 #define rpdNil ((pRPDR) 0) 733 734 static struct mips_got_entry *mips_elf_create_local_got_entry 735 (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long, 736 struct mips_elf_link_hash_entry *, int); 737 static bfd_boolean mips_elf_sort_hash_table_f 738 (struct mips_elf_link_hash_entry *, void *); 739 static bfd_vma mips_elf_high 740 (bfd_vma); 741 static bfd_boolean mips_elf_create_dynamic_relocation 742 (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *, 743 struct mips_elf_link_hash_entry *, asection *, bfd_vma, 744 bfd_vma *, asection *); 745 static bfd_vma mips_elf_adjust_gp 746 (bfd *, struct mips_got_info *, bfd *); 747 748 /* This will be used when we sort the dynamic relocation records. */ 749 static bfd *reldyn_sorting_bfd; 750 751 /* True if ABFD is for CPUs with load interlocking that include 752 non-MIPS1 CPUs and R3900. */ 753 #define LOAD_INTERLOCKS_P(abfd) \ 754 ( ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \ 755 || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900)) 756 757 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL. 758 This should be safe for all architectures. We enable this predicate 759 for RM9000 for now. */ 760 #define JAL_TO_BAL_P(abfd) \ 761 ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000) 762 763 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL. 764 This should be safe for all architectures. We enable this predicate for 765 all CPUs. */ 766 #define JALR_TO_BAL_P(abfd) 1 767 768 /* True if ABFD is for CPUs that are faster if JR is converted to B. 769 This should be safe for all architectures. We enable this predicate for 770 all CPUs. */ 771 #define JR_TO_B_P(abfd) 1 772 773 /* True if ABFD is a PIC object. */ 774 #define PIC_OBJECT_P(abfd) \ 775 ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0) 776 777 /* Nonzero if ABFD is using the N32 ABI. */ 778 #define ABI_N32_P(abfd) \ 779 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0) 780 781 /* Nonzero if ABFD is using the N64 ABI. */ 782 #define ABI_64_P(abfd) \ 783 (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64) 784 785 /* Nonzero if ABFD is using NewABI conventions. */ 786 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd)) 787 788 /* Nonzero if ABFD has microMIPS code. */ 789 #define MICROMIPS_P(abfd) \ 790 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0) 791 792 /* The IRIX compatibility level we are striving for. */ 793 #define IRIX_COMPAT(abfd) \ 794 (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd)) 795 796 /* Whether we are trying to be compatible with IRIX at all. */ 797 #define SGI_COMPAT(abfd) \ 798 (IRIX_COMPAT (abfd) != ict_none) 799 800 /* The name of the options section. */ 801 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \ 802 (NEWABI_P (abfd) ? ".MIPS.options" : ".options") 803 804 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section. 805 Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME. */ 806 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \ 807 (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0) 808 809 /* Whether the section is readonly. */ 810 #define MIPS_ELF_READONLY_SECTION(sec) \ 811 ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) \ 812 == (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) 813 814 /* The name of the stub section. */ 815 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs" 816 817 /* The size of an external REL relocation. */ 818 #define MIPS_ELF_REL_SIZE(abfd) \ 819 (get_elf_backend_data (abfd)->s->sizeof_rel) 820 821 /* The size of an external RELA relocation. */ 822 #define MIPS_ELF_RELA_SIZE(abfd) \ 823 (get_elf_backend_data (abfd)->s->sizeof_rela) 824 825 /* The size of an external dynamic table entry. */ 826 #define MIPS_ELF_DYN_SIZE(abfd) \ 827 (get_elf_backend_data (abfd)->s->sizeof_dyn) 828 829 /* The size of a GOT entry. */ 830 #define MIPS_ELF_GOT_SIZE(abfd) \ 831 (get_elf_backend_data (abfd)->s->arch_size / 8) 832 833 /* The size of the .rld_map section. */ 834 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \ 835 (get_elf_backend_data (abfd)->s->arch_size / 8) 836 837 /* The size of a symbol-table entry. */ 838 #define MIPS_ELF_SYM_SIZE(abfd) \ 839 (get_elf_backend_data (abfd)->s->sizeof_sym) 840 841 /* The default alignment for sections, as a power of two. */ 842 #define MIPS_ELF_LOG_FILE_ALIGN(abfd) \ 843 (get_elf_backend_data (abfd)->s->log_file_align) 844 845 /* Get word-sized data. */ 846 #define MIPS_ELF_GET_WORD(abfd, ptr) \ 847 (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr)) 848 849 /* Put out word-sized data. */ 850 #define MIPS_ELF_PUT_WORD(abfd, val, ptr) \ 851 (ABI_64_P (abfd) \ 852 ? bfd_put_64 (abfd, val, ptr) \ 853 : bfd_put_32 (abfd, val, ptr)) 854 855 /* The opcode for word-sized loads (LW or LD). */ 856 #define MIPS_ELF_LOAD_WORD(abfd) \ 857 (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000) 858 859 /* Add a dynamic symbol table-entry. */ 860 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \ 861 _bfd_elf_add_dynamic_entry (info, tag, val) 862 863 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela) \ 864 (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela)) 865 866 /* The name of the dynamic relocation section. */ 867 #define MIPS_ELF_REL_DYN_NAME(INFO) \ 868 (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn") 869 870 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value 871 from smaller values. Start with zero, widen, *then* decrement. */ 872 #define MINUS_ONE (((bfd_vma)0) - 1) 873 #define MINUS_TWO (((bfd_vma)0) - 2) 874 875 /* The value to write into got[1] for SVR4 targets, to identify it is 876 a GNU object. The dynamic linker can then use got[1] to store the 877 module pointer. */ 878 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \ 879 ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31)) 880 881 /* The offset of $gp from the beginning of the .got section. */ 882 #define ELF_MIPS_GP_OFFSET(INFO) \ 883 (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0) 884 885 /* The maximum size of the GOT for it to be addressable using 16-bit 886 offsets from $gp. */ 887 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff) 888 889 /* Instructions which appear in a stub. */ 890 #define STUB_LW(abfd) \ 891 ((ABI_64_P (abfd) \ 892 ? 0xdf998010 /* ld t9,0x8010(gp) */ \ 893 : 0x8f998010)) /* lw t9,0x8010(gp) */ 894 #define STUB_MOVE(abfd) \ 895 ((ABI_64_P (abfd) \ 896 ? 0x03e0782d /* daddu t7,ra */ \ 897 : 0x03e07821)) /* addu t7,ra */ 898 #define STUB_LUI(VAL) (0x3c180000 + (VAL)) /* lui t8,VAL */ 899 #define STUB_JALR 0x0320f809 /* jalr t9,ra */ 900 #define STUB_ORI(VAL) (0x37180000 + (VAL)) /* ori t8,t8,VAL */ 901 #define STUB_LI16U(VAL) (0x34180000 + (VAL)) /* ori t8,zero,VAL unsigned */ 902 #define STUB_LI16S(abfd, VAL) \ 903 ((ABI_64_P (abfd) \ 904 ? (0x64180000 + (VAL)) /* daddiu t8,zero,VAL sign extended */ \ 905 : (0x24180000 + (VAL)))) /* addiu t8,zero,VAL sign extended */ 906 907 /* Likewise for the microMIPS ASE. */ 908 #define STUB_LW_MICROMIPS(abfd) \ 909 (ABI_64_P (abfd) \ 910 ? 0xdf3c8010 /* ld t9,0x8010(gp) */ \ 911 : 0xff3c8010) /* lw t9,0x8010(gp) */ 912 #define STUB_MOVE_MICROMIPS 0x0dff /* move t7,ra */ 913 #define STUB_MOVE32_MICROMIPS(abfd) \ 914 (ABI_64_P (abfd) \ 915 ? 0x581f7950 /* daddu t7,ra,zero */ \ 916 : 0x001f7950) /* addu t7,ra,zero */ 917 #define STUB_LUI_MICROMIPS(VAL) \ 918 (0x41b80000 + (VAL)) /* lui t8,VAL */ 919 #define STUB_JALR_MICROMIPS 0x45d9 /* jalr t9 */ 920 #define STUB_JALR32_MICROMIPS 0x03f90f3c /* jalr ra,t9 */ 921 #define STUB_ORI_MICROMIPS(VAL) \ 922 (0x53180000 + (VAL)) /* ori t8,t8,VAL */ 923 #define STUB_LI16U_MICROMIPS(VAL) \ 924 (0x53000000 + (VAL)) /* ori t8,zero,VAL unsigned */ 925 #define STUB_LI16S_MICROMIPS(abfd, VAL) \ 926 (ABI_64_P (abfd) \ 927 ? 0x5f000000 + (VAL) /* daddiu t8,zero,VAL sign extended */ \ 928 : 0x33000000 + (VAL)) /* addiu t8,zero,VAL sign extended */ 929 930 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16 931 #define MIPS_FUNCTION_STUB_BIG_SIZE 20 932 #define MICROMIPS_FUNCTION_STUB_NORMAL_SIZE 12 933 #define MICROMIPS_FUNCTION_STUB_BIG_SIZE 16 934 #define MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE 16 935 #define MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 20 936 937 /* The name of the dynamic interpreter. This is put in the .interp 938 section. */ 939 940 #define ELF_DYNAMIC_INTERPRETER(abfd) \ 941 (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" \ 942 : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" \ 943 : "/usr/lib/libc.so.1") 944 945 #ifdef BFD64 946 #define MNAME(bfd,pre,pos) \ 947 (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos)) 948 #define ELF_R_SYM(bfd, i) \ 949 (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i)) 950 #define ELF_R_TYPE(bfd, i) \ 951 (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i)) 952 #define ELF_R_INFO(bfd, s, t) \ 953 (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t)) 954 #else 955 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos) 956 #define ELF_R_SYM(bfd, i) \ 957 (ELF32_R_SYM (i)) 958 #define ELF_R_TYPE(bfd, i) \ 959 (ELF32_R_TYPE (i)) 960 #define ELF_R_INFO(bfd, s, t) \ 961 (ELF32_R_INFO (s, t)) 962 #endif 963 964 /* The mips16 compiler uses a couple of special sections to handle 965 floating point arguments. 966 967 Section names that look like .mips16.fn.FNNAME contain stubs that 968 copy floating point arguments from the fp regs to the gp regs and 969 then jump to FNNAME. If any 32 bit function calls FNNAME, the 970 call should be redirected to the stub instead. If no 32 bit 971 function calls FNNAME, the stub should be discarded. We need to 972 consider any reference to the function, not just a call, because 973 if the address of the function is taken we will need the stub, 974 since the address might be passed to a 32 bit function. 975 976 Section names that look like .mips16.call.FNNAME contain stubs 977 that copy floating point arguments from the gp regs to the fp 978 regs and then jump to FNNAME. If FNNAME is a 32 bit function, 979 then any 16 bit function that calls FNNAME should be redirected 980 to the stub instead. If FNNAME is not a 32 bit function, the 981 stub should be discarded. 982 983 .mips16.call.fp.FNNAME sections are similar, but contain stubs 984 which call FNNAME and then copy the return value from the fp regs 985 to the gp regs. These stubs store the return value in $18 while 986 calling FNNAME; any function which might call one of these stubs 987 must arrange to save $18 around the call. (This case is not 988 needed for 32 bit functions that call 16 bit functions, because 989 16 bit functions always return floating point values in both 990 $f0/$f1 and $2/$3.) 991 992 Note that in all cases FNNAME might be defined statically. 993 Therefore, FNNAME is not used literally. Instead, the relocation 994 information will indicate which symbol the section is for. 995 996 We record any stubs that we find in the symbol table. */ 997 998 #define FN_STUB ".mips16.fn." 999 #define CALL_STUB ".mips16.call." 1000 #define CALL_FP_STUB ".mips16.call.fp." 1001 1002 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB) 1003 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB) 1004 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB) 1005 1006 /* The format of the first PLT entry in an O32 executable. */ 1007 static const bfd_vma mips_o32_exec_plt0_entry[] = 1008 { 1009 0x3c1c0000, /* lui $28, %hi(&GOTPLT[0]) */ 1010 0x8f990000, /* lw $25, %lo(&GOTPLT[0])($28) */ 1011 0x279c0000, /* addiu $28, $28, %lo(&GOTPLT[0]) */ 1012 0x031cc023, /* subu $24, $24, $28 */ 1013 0x03e07821, /* move $15, $31 # 32-bit move (addu) */ 1014 0x0018c082, /* srl $24, $24, 2 */ 1015 0x0320f809, /* jalr $25 */ 1016 0x2718fffe /* subu $24, $24, 2 */ 1017 }; 1018 1019 /* The format of the first PLT entry in an N32 executable. Different 1020 because gp ($28) is not available; we use t2 ($14) instead. */ 1021 static const bfd_vma mips_n32_exec_plt0_entry[] = 1022 { 1023 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */ 1024 0x8dd90000, /* lw $25, %lo(&GOTPLT[0])($14) */ 1025 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */ 1026 0x030ec023, /* subu $24, $24, $14 */ 1027 0x03e07821, /* move $15, $31 # 32-bit move (addu) */ 1028 0x0018c082, /* srl $24, $24, 2 */ 1029 0x0320f809, /* jalr $25 */ 1030 0x2718fffe /* subu $24, $24, 2 */ 1031 }; 1032 1033 /* The format of the first PLT entry in an N64 executable. Different 1034 from N32 because of the increased size of GOT entries. */ 1035 static const bfd_vma mips_n64_exec_plt0_entry[] = 1036 { 1037 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */ 1038 0xddd90000, /* ld $25, %lo(&GOTPLT[0])($14) */ 1039 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */ 1040 0x030ec023, /* subu $24, $24, $14 */ 1041 0x03e0782d, /* move $15, $31 # 64-bit move (daddu) */ 1042 0x0018c0c2, /* srl $24, $24, 3 */ 1043 0x0320f809, /* jalr $25 */ 1044 0x2718fffe /* subu $24, $24, 2 */ 1045 }; 1046 1047 /* The format of the microMIPS first PLT entry in an O32 executable. 1048 We rely on v0 ($2) rather than t8 ($24) to contain the address 1049 of the GOTPLT entry handled, so this stub may only be used when 1050 all the subsequent PLT entries are microMIPS code too. 1051 1052 The trailing NOP is for alignment and correct disassembly only. */ 1053 static const bfd_vma micromips_o32_exec_plt0_entry[] = 1054 { 1055 0x7980, 0x0000, /* addiupc $3, (&GOTPLT[0]) - . */ 1056 0xff23, 0x0000, /* lw $25, 0($3) */ 1057 0x0535, /* subu $2, $2, $3 */ 1058 0x2525, /* srl $2, $2, 2 */ 1059 0x3302, 0xfffe, /* subu $24, $2, 2 */ 1060 0x0dff, /* move $15, $31 */ 1061 0x45f9, /* jalrs $25 */ 1062 0x0f83, /* move $28, $3 */ 1063 0x0c00 /* nop */ 1064 }; 1065 1066 /* The format of the microMIPS first PLT entry in an O32 executable 1067 in the insn32 mode. */ 1068 static const bfd_vma micromips_insn32_o32_exec_plt0_entry[] = 1069 { 1070 0x41bc, 0x0000, /* lui $28, %hi(&GOTPLT[0]) */ 1071 0xff3c, 0x0000, /* lw $25, %lo(&GOTPLT[0])($28) */ 1072 0x339c, 0x0000, /* addiu $28, $28, %lo(&GOTPLT[0]) */ 1073 0x0398, 0xc1d0, /* subu $24, $24, $28 */ 1074 0x001f, 0x7950, /* move $15, $31 */ 1075 0x0318, 0x1040, /* srl $24, $24, 2 */ 1076 0x03f9, 0x0f3c, /* jalr $25 */ 1077 0x3318, 0xfffe /* subu $24, $24, 2 */ 1078 }; 1079 1080 /* The format of subsequent standard PLT entries. */ 1081 static const bfd_vma mips_exec_plt_entry[] = 1082 { 1083 0x3c0f0000, /* lui $15, %hi(.got.plt entry) */ 1084 0x01f90000, /* l[wd] $25, %lo(.got.plt entry)($15) */ 1085 0x25f80000, /* addiu $24, $15, %lo(.got.plt entry) */ 1086 0x03200008 /* jr $25 */ 1087 }; 1088 1089 /* The format of subsequent MIPS16 o32 PLT entries. We use v0 ($2) 1090 and v1 ($3) as temporaries because t8 ($24) and t9 ($25) are not 1091 directly addressable. */ 1092 static const bfd_vma mips16_o32_exec_plt_entry[] = 1093 { 1094 0xb203, /* lw $2, 12($pc) */ 1095 0x9a60, /* lw $3, 0($2) */ 1096 0x651a, /* move $24, $2 */ 1097 0xeb00, /* jr $3 */ 1098 0x653b, /* move $25, $3 */ 1099 0x6500, /* nop */ 1100 0x0000, 0x0000 /* .word (.got.plt entry) */ 1101 }; 1102 1103 /* The format of subsequent microMIPS o32 PLT entries. We use v0 ($2) 1104 as a temporary because t8 ($24) is not addressable with ADDIUPC. */ 1105 static const bfd_vma micromips_o32_exec_plt_entry[] = 1106 { 1107 0x7900, 0x0000, /* addiupc $2, (.got.plt entry) - . */ 1108 0xff22, 0x0000, /* lw $25, 0($2) */ 1109 0x4599, /* jr $25 */ 1110 0x0f02 /* move $24, $2 */ 1111 }; 1112 1113 /* The format of subsequent microMIPS o32 PLT entries in the insn32 mode. */ 1114 static const bfd_vma micromips_insn32_o32_exec_plt_entry[] = 1115 { 1116 0x41af, 0x0000, /* lui $15, %hi(.got.plt entry) */ 1117 0xff2f, 0x0000, /* lw $25, %lo(.got.plt entry)($15) */ 1118 0x0019, 0x0f3c, /* jr $25 */ 1119 0x330f, 0x0000 /* addiu $24, $15, %lo(.got.plt entry) */ 1120 }; 1121 1122 /* The format of the first PLT entry in a VxWorks executable. */ 1123 static const bfd_vma mips_vxworks_exec_plt0_entry[] = 1124 { 1125 0x3c190000, /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_) */ 1126 0x27390000, /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_) */ 1127 0x8f390008, /* lw t9, 8(t9) */ 1128 0x00000000, /* nop */ 1129 0x03200008, /* jr t9 */ 1130 0x00000000 /* nop */ 1131 }; 1132 1133 /* The format of subsequent PLT entries. */ 1134 static const bfd_vma mips_vxworks_exec_plt_entry[] = 1135 { 1136 0x10000000, /* b .PLT_resolver */ 1137 0x24180000, /* li t8, <pltindex> */ 1138 0x3c190000, /* lui t9, %hi(<.got.plt slot>) */ 1139 0x27390000, /* addiu t9, t9, %lo(<.got.plt slot>) */ 1140 0x8f390000, /* lw t9, 0(t9) */ 1141 0x00000000, /* nop */ 1142 0x03200008, /* jr t9 */ 1143 0x00000000 /* nop */ 1144 }; 1145 1146 /* The format of the first PLT entry in a VxWorks shared object. */ 1147 static const bfd_vma mips_vxworks_shared_plt0_entry[] = 1148 { 1149 0x8f990008, /* lw t9, 8(gp) */ 1150 0x00000000, /* nop */ 1151 0x03200008, /* jr t9 */ 1152 0x00000000, /* nop */ 1153 0x00000000, /* nop */ 1154 0x00000000 /* nop */ 1155 }; 1156 1157 /* The format of subsequent PLT entries. */ 1158 static const bfd_vma mips_vxworks_shared_plt_entry[] = 1159 { 1160 0x10000000, /* b .PLT_resolver */ 1161 0x24180000 /* li t8, <pltindex> */ 1162 }; 1163 1164 /* microMIPS 32-bit opcode helper installer. */ 1165 1166 static void 1167 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr) 1168 { 1169 bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr); 1170 bfd_put_16 (abfd, opcode & 0xffff, ptr + 2); 1171 } 1172 1173 /* microMIPS 32-bit opcode helper retriever. */ 1174 1175 static bfd_vma 1176 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr) 1177 { 1178 return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2); 1179 } 1180 1181 /* Look up an entry in a MIPS ELF linker hash table. */ 1182 1183 #define mips_elf_link_hash_lookup(table, string, create, copy, follow) \ 1184 ((struct mips_elf_link_hash_entry *) \ 1185 elf_link_hash_lookup (&(table)->root, (string), (create), \ 1186 (copy), (follow))) 1187 1188 /* Traverse a MIPS ELF linker hash table. */ 1189 1190 #define mips_elf_link_hash_traverse(table, func, info) \ 1191 (elf_link_hash_traverse \ 1192 (&(table)->root, \ 1193 (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \ 1194 (info))) 1195 1196 /* Find the base offsets for thread-local storage in this object, 1197 for GD/LD and IE/LE respectively. */ 1198 1199 #define TP_OFFSET 0x7000 1200 #define DTP_OFFSET 0x8000 1201 1202 static bfd_vma 1203 dtprel_base (struct bfd_link_info *info) 1204 { 1205 /* If tls_sec is NULL, we should have signalled an error already. */ 1206 if (elf_hash_table (info)->tls_sec == NULL) 1207 return 0; 1208 return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET; 1209 } 1210 1211 static bfd_vma 1212 tprel_base (struct bfd_link_info *info) 1213 { 1214 /* If tls_sec is NULL, we should have signalled an error already. */ 1215 if (elf_hash_table (info)->tls_sec == NULL) 1216 return 0; 1217 return elf_hash_table (info)->tls_sec->vma + TP_OFFSET; 1218 } 1219 1220 /* Create an entry in a MIPS ELF linker hash table. */ 1221 1222 static struct bfd_hash_entry * 1223 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry, 1224 struct bfd_hash_table *table, const char *string) 1225 { 1226 struct mips_elf_link_hash_entry *ret = 1227 (struct mips_elf_link_hash_entry *) entry; 1228 1229 /* Allocate the structure if it has not already been allocated by a 1230 subclass. */ 1231 if (ret == NULL) 1232 ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry)); 1233 if (ret == NULL) 1234 return (struct bfd_hash_entry *) ret; 1235 1236 /* Call the allocation method of the superclass. */ 1237 ret = ((struct mips_elf_link_hash_entry *) 1238 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret, 1239 table, string)); 1240 if (ret != NULL) 1241 { 1242 /* Set local fields. */ 1243 memset (&ret->esym, 0, sizeof (EXTR)); 1244 /* We use -2 as a marker to indicate that the information has 1245 not been set. -1 means there is no associated ifd. */ 1246 ret->esym.ifd = -2; 1247 ret->la25_stub = 0; 1248 ret->possibly_dynamic_relocs = 0; 1249 ret->fn_stub = NULL; 1250 ret->call_stub = NULL; 1251 ret->call_fp_stub = NULL; 1252 ret->global_got_area = GGA_NONE; 1253 ret->got_only_for_calls = TRUE; 1254 ret->readonly_reloc = FALSE; 1255 ret->has_static_relocs = FALSE; 1256 ret->no_fn_stub = FALSE; 1257 ret->need_fn_stub = FALSE; 1258 ret->has_nonpic_branches = FALSE; 1259 ret->needs_lazy_stub = FALSE; 1260 ret->use_plt_entry = FALSE; 1261 } 1262 1263 return (struct bfd_hash_entry *) ret; 1264 } 1265 1266 /* Allocate MIPS ELF private object data. */ 1267 1268 bfd_boolean 1269 _bfd_mips_elf_mkobject (bfd *abfd) 1270 { 1271 return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata), 1272 MIPS_ELF_DATA); 1273 } 1274 1275 bfd_boolean 1276 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec) 1277 { 1278 if (!sec->used_by_bfd) 1279 { 1280 struct _mips_elf_section_data *sdata; 1281 bfd_size_type amt = sizeof (*sdata); 1282 1283 sdata = bfd_zalloc (abfd, amt); 1284 if (sdata == NULL) 1285 return FALSE; 1286 sec->used_by_bfd = sdata; 1287 } 1288 1289 return _bfd_elf_new_section_hook (abfd, sec); 1290 } 1291 1292 /* Read ECOFF debugging information from a .mdebug section into a 1293 ecoff_debug_info structure. */ 1294 1295 bfd_boolean 1296 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section, 1297 struct ecoff_debug_info *debug) 1298 { 1299 HDRR *symhdr; 1300 const struct ecoff_debug_swap *swap; 1301 char *ext_hdr; 1302 1303 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap; 1304 memset (debug, 0, sizeof (*debug)); 1305 1306 ext_hdr = bfd_malloc (swap->external_hdr_size); 1307 if (ext_hdr == NULL && swap->external_hdr_size != 0) 1308 goto error_return; 1309 1310 if (! bfd_get_section_contents (abfd, section, ext_hdr, 0, 1311 swap->external_hdr_size)) 1312 goto error_return; 1313 1314 symhdr = &debug->symbolic_header; 1315 (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr); 1316 1317 /* The symbolic header contains absolute file offsets and sizes to 1318 read. */ 1319 #define READ(ptr, offset, count, size, type) \ 1320 if (symhdr->count == 0) \ 1321 debug->ptr = NULL; \ 1322 else \ 1323 { \ 1324 bfd_size_type amt = (bfd_size_type) size * symhdr->count; \ 1325 debug->ptr = bfd_malloc (amt); \ 1326 if (debug->ptr == NULL) \ 1327 goto error_return; \ 1328 if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0 \ 1329 || bfd_bread (debug->ptr, amt, abfd) != amt) \ 1330 goto error_return; \ 1331 } 1332 1333 READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *); 1334 READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *); 1335 READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *); 1336 READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *); 1337 READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *); 1338 READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext), 1339 union aux_ext *); 1340 READ (ss, cbSsOffset, issMax, sizeof (char), char *); 1341 READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *); 1342 READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *); 1343 READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *); 1344 READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *); 1345 #undef READ 1346 1347 debug->fdr = NULL; 1348 1349 return TRUE; 1350 1351 error_return: 1352 if (ext_hdr != NULL) 1353 free (ext_hdr); 1354 if (debug->line != NULL) 1355 free (debug->line); 1356 if (debug->external_dnr != NULL) 1357 free (debug->external_dnr); 1358 if (debug->external_pdr != NULL) 1359 free (debug->external_pdr); 1360 if (debug->external_sym != NULL) 1361 free (debug->external_sym); 1362 if (debug->external_opt != NULL) 1363 free (debug->external_opt); 1364 if (debug->external_aux != NULL) 1365 free (debug->external_aux); 1366 if (debug->ss != NULL) 1367 free (debug->ss); 1368 if (debug->ssext != NULL) 1369 free (debug->ssext); 1370 if (debug->external_fdr != NULL) 1371 free (debug->external_fdr); 1372 if (debug->external_rfd != NULL) 1373 free (debug->external_rfd); 1374 if (debug->external_ext != NULL) 1375 free (debug->external_ext); 1376 return FALSE; 1377 } 1378 1379 /* Swap RPDR (runtime procedure table entry) for output. */ 1380 1381 static void 1382 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex) 1383 { 1384 H_PUT_S32 (abfd, in->adr, ex->p_adr); 1385 H_PUT_32 (abfd, in->regmask, ex->p_regmask); 1386 H_PUT_32 (abfd, in->regoffset, ex->p_regoffset); 1387 H_PUT_32 (abfd, in->fregmask, ex->p_fregmask); 1388 H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset); 1389 H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset); 1390 1391 H_PUT_16 (abfd, in->framereg, ex->p_framereg); 1392 H_PUT_16 (abfd, in->pcreg, ex->p_pcreg); 1393 1394 H_PUT_32 (abfd, in->irpss, ex->p_irpss); 1395 } 1396 1397 /* Create a runtime procedure table from the .mdebug section. */ 1398 1399 static bfd_boolean 1400 mips_elf_create_procedure_table (void *handle, bfd *abfd, 1401 struct bfd_link_info *info, asection *s, 1402 struct ecoff_debug_info *debug) 1403 { 1404 const struct ecoff_debug_swap *swap; 1405 HDRR *hdr = &debug->symbolic_header; 1406 RPDR *rpdr, *rp; 1407 struct rpdr_ext *erp; 1408 void *rtproc; 1409 struct pdr_ext *epdr; 1410 struct sym_ext *esym; 1411 char *ss, **sv; 1412 char *str; 1413 bfd_size_type size; 1414 bfd_size_type count; 1415 unsigned long sindex; 1416 unsigned long i; 1417 PDR pdr; 1418 SYMR sym; 1419 const char *no_name_func = _("static procedure (no name)"); 1420 1421 epdr = NULL; 1422 rpdr = NULL; 1423 esym = NULL; 1424 ss = NULL; 1425 sv = NULL; 1426 1427 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap; 1428 1429 sindex = strlen (no_name_func) + 1; 1430 count = hdr->ipdMax; 1431 if (count > 0) 1432 { 1433 size = swap->external_pdr_size; 1434 1435 epdr = bfd_malloc (size * count); 1436 if (epdr == NULL) 1437 goto error_return; 1438 1439 if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr)) 1440 goto error_return; 1441 1442 size = sizeof (RPDR); 1443 rp = rpdr = bfd_malloc (size * count); 1444 if (rpdr == NULL) 1445 goto error_return; 1446 1447 size = sizeof (char *); 1448 sv = bfd_malloc (size * count); 1449 if (sv == NULL) 1450 goto error_return; 1451 1452 count = hdr->isymMax; 1453 size = swap->external_sym_size; 1454 esym = bfd_malloc (size * count); 1455 if (esym == NULL) 1456 goto error_return; 1457 1458 if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym)) 1459 goto error_return; 1460 1461 count = hdr->issMax; 1462 ss = bfd_malloc (count); 1463 if (ss == NULL) 1464 goto error_return; 1465 if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss)) 1466 goto error_return; 1467 1468 count = hdr->ipdMax; 1469 for (i = 0; i < (unsigned long) count; i++, rp++) 1470 { 1471 (*swap->swap_pdr_in) (abfd, epdr + i, &pdr); 1472 (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym); 1473 rp->adr = sym.value; 1474 rp->regmask = pdr.regmask; 1475 rp->regoffset = pdr.regoffset; 1476 rp->fregmask = pdr.fregmask; 1477 rp->fregoffset = pdr.fregoffset; 1478 rp->frameoffset = pdr.frameoffset; 1479 rp->framereg = pdr.framereg; 1480 rp->pcreg = pdr.pcreg; 1481 rp->irpss = sindex; 1482 sv[i] = ss + sym.iss; 1483 sindex += strlen (sv[i]) + 1; 1484 } 1485 } 1486 1487 size = sizeof (struct rpdr_ext) * (count + 2) + sindex; 1488 size = BFD_ALIGN (size, 16); 1489 rtproc = bfd_alloc (abfd, size); 1490 if (rtproc == NULL) 1491 { 1492 mips_elf_hash_table (info)->procedure_count = 0; 1493 goto error_return; 1494 } 1495 1496 mips_elf_hash_table (info)->procedure_count = count + 2; 1497 1498 erp = rtproc; 1499 memset (erp, 0, sizeof (struct rpdr_ext)); 1500 erp++; 1501 str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2); 1502 strcpy (str, no_name_func); 1503 str += strlen (no_name_func) + 1; 1504 for (i = 0; i < count; i++) 1505 { 1506 ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i); 1507 strcpy (str, sv[i]); 1508 str += strlen (sv[i]) + 1; 1509 } 1510 H_PUT_S32 (abfd, -1, (erp + count)->p_adr); 1511 1512 /* Set the size and contents of .rtproc section. */ 1513 s->size = size; 1514 s->contents = rtproc; 1515 1516 /* Skip this section later on (I don't think this currently 1517 matters, but someday it might). */ 1518 s->map_head.link_order = NULL; 1519 1520 if (epdr != NULL) 1521 free (epdr); 1522 if (rpdr != NULL) 1523 free (rpdr); 1524 if (esym != NULL) 1525 free (esym); 1526 if (ss != NULL) 1527 free (ss); 1528 if (sv != NULL) 1529 free (sv); 1530 1531 return TRUE; 1532 1533 error_return: 1534 if (epdr != NULL) 1535 free (epdr); 1536 if (rpdr != NULL) 1537 free (rpdr); 1538 if (esym != NULL) 1539 free (esym); 1540 if (ss != NULL) 1541 free (ss); 1542 if (sv != NULL) 1543 free (sv); 1544 return FALSE; 1545 } 1546 1547 /* We're going to create a stub for H. Create a symbol for the stub's 1548 value and size, to help make the disassembly easier to read. */ 1549 1550 static bfd_boolean 1551 mips_elf_create_stub_symbol (struct bfd_link_info *info, 1552 struct mips_elf_link_hash_entry *h, 1553 const char *prefix, asection *s, bfd_vma value, 1554 bfd_vma size) 1555 { 1556 struct bfd_link_hash_entry *bh; 1557 struct elf_link_hash_entry *elfh; 1558 const char *name; 1559 1560 if (ELF_ST_IS_MICROMIPS (h->root.other)) 1561 value |= 1; 1562 1563 /* Create a new symbol. */ 1564 name = ACONCAT ((prefix, h->root.root.root.string, NULL)); 1565 bh = NULL; 1566 if (!_bfd_generic_link_add_one_symbol (info, s->owner, name, 1567 BSF_LOCAL, s, value, NULL, 1568 TRUE, FALSE, &bh)) 1569 return FALSE; 1570 1571 /* Make it a local function. */ 1572 elfh = (struct elf_link_hash_entry *) bh; 1573 elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC); 1574 elfh->size = size; 1575 elfh->forced_local = 1; 1576 return TRUE; 1577 } 1578 1579 /* We're about to redefine H. Create a symbol to represent H's 1580 current value and size, to help make the disassembly easier 1581 to read. */ 1582 1583 static bfd_boolean 1584 mips_elf_create_shadow_symbol (struct bfd_link_info *info, 1585 struct mips_elf_link_hash_entry *h, 1586 const char *prefix) 1587 { 1588 struct bfd_link_hash_entry *bh; 1589 struct elf_link_hash_entry *elfh; 1590 const char *name; 1591 asection *s; 1592 bfd_vma value; 1593 1594 /* Read the symbol's value. */ 1595 BFD_ASSERT (h->root.root.type == bfd_link_hash_defined 1596 || h->root.root.type == bfd_link_hash_defweak); 1597 s = h->root.root.u.def.section; 1598 value = h->root.root.u.def.value; 1599 1600 /* Create a new symbol. */ 1601 name = ACONCAT ((prefix, h->root.root.root.string, NULL)); 1602 bh = NULL; 1603 if (!_bfd_generic_link_add_one_symbol (info, s->owner, name, 1604 BSF_LOCAL, s, value, NULL, 1605 TRUE, FALSE, &bh)) 1606 return FALSE; 1607 1608 /* Make it local and copy the other attributes from H. */ 1609 elfh = (struct elf_link_hash_entry *) bh; 1610 elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type)); 1611 elfh->other = h->root.other; 1612 elfh->size = h->root.size; 1613 elfh->forced_local = 1; 1614 return TRUE; 1615 } 1616 1617 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16 1618 function rather than to a hard-float stub. */ 1619 1620 static bfd_boolean 1621 section_allows_mips16_refs_p (asection *section) 1622 { 1623 const char *name; 1624 1625 name = bfd_get_section_name (section->owner, section); 1626 return (FN_STUB_P (name) 1627 || CALL_STUB_P (name) 1628 || CALL_FP_STUB_P (name) 1629 || strcmp (name, ".pdr") == 0); 1630 } 1631 1632 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16 1633 stub section of some kind. Return the R_SYMNDX of the target 1634 function, or 0 if we can't decide which function that is. */ 1635 1636 static unsigned long 1637 mips16_stub_symndx (const struct elf_backend_data *bed, 1638 asection *sec ATTRIBUTE_UNUSED, 1639 const Elf_Internal_Rela *relocs, 1640 const Elf_Internal_Rela *relend) 1641 { 1642 int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel; 1643 const Elf_Internal_Rela *rel; 1644 1645 /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent 1646 one in a compound relocation. */ 1647 for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel) 1648 if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE) 1649 return ELF_R_SYM (sec->owner, rel->r_info); 1650 1651 /* Otherwise trust the first relocation, whatever its kind. This is 1652 the traditional behavior. */ 1653 if (relocs < relend) 1654 return ELF_R_SYM (sec->owner, relocs->r_info); 1655 1656 return 0; 1657 } 1658 1659 /* Check the mips16 stubs for a particular symbol, and see if we can 1660 discard them. */ 1661 1662 static void 1663 mips_elf_check_mips16_stubs (struct bfd_link_info *info, 1664 struct mips_elf_link_hash_entry *h) 1665 { 1666 /* Dynamic symbols must use the standard call interface, in case other 1667 objects try to call them. */ 1668 if (h->fn_stub != NULL 1669 && h->root.dynindx != -1) 1670 { 1671 mips_elf_create_shadow_symbol (info, h, ".mips16."); 1672 h->need_fn_stub = TRUE; 1673 } 1674 1675 if (h->fn_stub != NULL 1676 && ! h->need_fn_stub) 1677 { 1678 /* We don't need the fn_stub; the only references to this symbol 1679 are 16 bit calls. Clobber the size to 0 to prevent it from 1680 being included in the link. */ 1681 h->fn_stub->size = 0; 1682 h->fn_stub->flags &= ~SEC_RELOC; 1683 h->fn_stub->reloc_count = 0; 1684 h->fn_stub->flags |= SEC_EXCLUDE; 1685 } 1686 1687 if (h->call_stub != NULL 1688 && ELF_ST_IS_MIPS16 (h->root.other)) 1689 { 1690 /* We don't need the call_stub; this is a 16 bit function, so 1691 calls from other 16 bit functions are OK. Clobber the size 1692 to 0 to prevent it from being included in the link. */ 1693 h->call_stub->size = 0; 1694 h->call_stub->flags &= ~SEC_RELOC; 1695 h->call_stub->reloc_count = 0; 1696 h->call_stub->flags |= SEC_EXCLUDE; 1697 } 1698 1699 if (h->call_fp_stub != NULL 1700 && ELF_ST_IS_MIPS16 (h->root.other)) 1701 { 1702 /* We don't need the call_stub; this is a 16 bit function, so 1703 calls from other 16 bit functions are OK. Clobber the size 1704 to 0 to prevent it from being included in the link. */ 1705 h->call_fp_stub->size = 0; 1706 h->call_fp_stub->flags &= ~SEC_RELOC; 1707 h->call_fp_stub->reloc_count = 0; 1708 h->call_fp_stub->flags |= SEC_EXCLUDE; 1709 } 1710 } 1711 1712 /* Hashtable callbacks for mips_elf_la25_stubs. */ 1713 1714 static hashval_t 1715 mips_elf_la25_stub_hash (const void *entry_) 1716 { 1717 const struct mips_elf_la25_stub *entry; 1718 1719 entry = (struct mips_elf_la25_stub *) entry_; 1720 return entry->h->root.root.u.def.section->id 1721 + entry->h->root.root.u.def.value; 1722 } 1723 1724 static int 1725 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_) 1726 { 1727 const struct mips_elf_la25_stub *entry1, *entry2; 1728 1729 entry1 = (struct mips_elf_la25_stub *) entry1_; 1730 entry2 = (struct mips_elf_la25_stub *) entry2_; 1731 return ((entry1->h->root.root.u.def.section 1732 == entry2->h->root.root.u.def.section) 1733 && (entry1->h->root.root.u.def.value 1734 == entry2->h->root.root.u.def.value)); 1735 } 1736 1737 /* Called by the linker to set up the la25 stub-creation code. FN is 1738 the linker's implementation of add_stub_function. Return true on 1739 success. */ 1740 1741 bfd_boolean 1742 _bfd_mips_elf_init_stubs (struct bfd_link_info *info, 1743 asection *(*fn) (const char *, asection *, 1744 asection *)) 1745 { 1746 struct mips_elf_link_hash_table *htab; 1747 1748 htab = mips_elf_hash_table (info); 1749 if (htab == NULL) 1750 return FALSE; 1751 1752 htab->add_stub_section = fn; 1753 htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash, 1754 mips_elf_la25_stub_eq, NULL); 1755 if (htab->la25_stubs == NULL) 1756 return FALSE; 1757 1758 return TRUE; 1759 } 1760 1761 /* Return true if H is a locally-defined PIC function, in the sense 1762 that it or its fn_stub might need $25 to be valid on entry. 1763 Note that MIPS16 functions set up $gp using PC-relative instructions, 1764 so they themselves never need $25 to be valid. Only non-MIPS16 1765 entry points are of interest here. */ 1766 1767 static bfd_boolean 1768 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h) 1769 { 1770 return ((h->root.root.type == bfd_link_hash_defined 1771 || h->root.root.type == bfd_link_hash_defweak) 1772 && h->root.def_regular 1773 && !bfd_is_abs_section (h->root.root.u.def.section) 1774 && (!ELF_ST_IS_MIPS16 (h->root.other) 1775 || (h->fn_stub && h->need_fn_stub)) 1776 && (PIC_OBJECT_P (h->root.root.u.def.section->owner) 1777 || ELF_ST_IS_MIPS_PIC (h->root.other))); 1778 } 1779 1780 /* Set *SEC to the input section that contains the target of STUB. 1781 Return the offset of the target from the start of that section. */ 1782 1783 static bfd_vma 1784 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub, 1785 asection **sec) 1786 { 1787 if (ELF_ST_IS_MIPS16 (stub->h->root.other)) 1788 { 1789 BFD_ASSERT (stub->h->need_fn_stub); 1790 *sec = stub->h->fn_stub; 1791 return 0; 1792 } 1793 else 1794 { 1795 *sec = stub->h->root.root.u.def.section; 1796 return stub->h->root.root.u.def.value; 1797 } 1798 } 1799 1800 /* STUB describes an la25 stub that we have decided to implement 1801 by inserting an LUI/ADDIU pair before the target function. 1802 Create the section and redirect the function symbol to it. */ 1803 1804 static bfd_boolean 1805 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub, 1806 struct bfd_link_info *info) 1807 { 1808 struct mips_elf_link_hash_table *htab; 1809 char *name; 1810 asection *s, *input_section; 1811 unsigned int align; 1812 1813 htab = mips_elf_hash_table (info); 1814 if (htab == NULL) 1815 return FALSE; 1816 1817 /* Create a unique name for the new section. */ 1818 name = bfd_malloc (11 + sizeof (".text.stub.")); 1819 if (name == NULL) 1820 return FALSE; 1821 sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs)); 1822 1823 /* Create the section. */ 1824 mips_elf_get_la25_target (stub, &input_section); 1825 s = htab->add_stub_section (name, input_section, 1826 input_section->output_section); 1827 if (s == NULL) 1828 return FALSE; 1829 1830 /* Make sure that any padding goes before the stub. */ 1831 align = input_section->alignment_power; 1832 if (!bfd_set_section_alignment (s->owner, s, align)) 1833 return FALSE; 1834 if (align > 3) 1835 s->size = (1 << align) - 8; 1836 1837 /* Create a symbol for the stub. */ 1838 mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8); 1839 stub->stub_section = s; 1840 stub->offset = s->size; 1841 1842 /* Allocate room for it. */ 1843 s->size += 8; 1844 return TRUE; 1845 } 1846 1847 /* STUB describes an la25 stub that we have decided to implement 1848 with a separate trampoline. Allocate room for it and redirect 1849 the function symbol to it. */ 1850 1851 static bfd_boolean 1852 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub, 1853 struct bfd_link_info *info) 1854 { 1855 struct mips_elf_link_hash_table *htab; 1856 asection *s; 1857 1858 htab = mips_elf_hash_table (info); 1859 if (htab == NULL) 1860 return FALSE; 1861 1862 /* Create a trampoline section, if we haven't already. */ 1863 s = htab->strampoline; 1864 if (s == NULL) 1865 { 1866 asection *input_section = stub->h->root.root.u.def.section; 1867 s = htab->add_stub_section (".text", NULL, 1868 input_section->output_section); 1869 if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4)) 1870 return FALSE; 1871 htab->strampoline = s; 1872 } 1873 1874 /* Create a symbol for the stub. */ 1875 mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16); 1876 stub->stub_section = s; 1877 stub->offset = s->size; 1878 1879 /* Allocate room for it. */ 1880 s->size += 16; 1881 return TRUE; 1882 } 1883 1884 /* H describes a symbol that needs an la25 stub. Make sure that an 1885 appropriate stub exists and point H at it. */ 1886 1887 static bfd_boolean 1888 mips_elf_add_la25_stub (struct bfd_link_info *info, 1889 struct mips_elf_link_hash_entry *h) 1890 { 1891 struct mips_elf_link_hash_table *htab; 1892 struct mips_elf_la25_stub search, *stub; 1893 bfd_boolean use_trampoline_p; 1894 asection *s; 1895 bfd_vma value; 1896 void **slot; 1897 1898 /* Describe the stub we want. */ 1899 search.stub_section = NULL; 1900 search.offset = 0; 1901 search.h = h; 1902 1903 /* See if we've already created an equivalent stub. */ 1904 htab = mips_elf_hash_table (info); 1905 if (htab == NULL) 1906 return FALSE; 1907 1908 slot = htab_find_slot (htab->la25_stubs, &search, INSERT); 1909 if (slot == NULL) 1910 return FALSE; 1911 1912 stub = (struct mips_elf_la25_stub *) *slot; 1913 if (stub != NULL) 1914 { 1915 /* We can reuse the existing stub. */ 1916 h->la25_stub = stub; 1917 return TRUE; 1918 } 1919 1920 /* Create a permanent copy of ENTRY and add it to the hash table. */ 1921 stub = bfd_malloc (sizeof (search)); 1922 if (stub == NULL) 1923 return FALSE; 1924 *stub = search; 1925 *slot = stub; 1926 1927 /* Prefer to use LUI/ADDIU stubs if the function is at the beginning 1928 of the section and if we would need no more than 2 nops. */ 1929 value = mips_elf_get_la25_target (stub, &s); 1930 use_trampoline_p = (value != 0 || s->alignment_power > 4); 1931 1932 h->la25_stub = stub; 1933 return (use_trampoline_p 1934 ? mips_elf_add_la25_trampoline (stub, info) 1935 : mips_elf_add_la25_intro (stub, info)); 1936 } 1937 1938 /* A mips_elf_link_hash_traverse callback that is called before sizing 1939 sections. DATA points to a mips_htab_traverse_info structure. */ 1940 1941 static bfd_boolean 1942 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data) 1943 { 1944 struct mips_htab_traverse_info *hti; 1945 1946 hti = (struct mips_htab_traverse_info *) data; 1947 if (!hti->info->relocatable) 1948 mips_elf_check_mips16_stubs (hti->info, h); 1949 1950 if (mips_elf_local_pic_function_p (h)) 1951 { 1952 /* PR 12845: If H is in a section that has been garbage 1953 collected it will have its output section set to *ABS*. */ 1954 if (bfd_is_abs_section (h->root.root.u.def.section->output_section)) 1955 return TRUE; 1956 1957 /* H is a function that might need $25 to be valid on entry. 1958 If we're creating a non-PIC relocatable object, mark H as 1959 being PIC. If we're creating a non-relocatable object with 1960 non-PIC branches and jumps to H, make sure that H has an la25 1961 stub. */ 1962 if (hti->info->relocatable) 1963 { 1964 if (!PIC_OBJECT_P (hti->output_bfd)) 1965 h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other); 1966 } 1967 else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h)) 1968 { 1969 hti->error = TRUE; 1970 return FALSE; 1971 } 1972 } 1973 return TRUE; 1974 } 1975 1976 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions. 1977 Most mips16 instructions are 16 bits, but these instructions 1978 are 32 bits. 1979 1980 The format of these instructions is: 1981 1982 +--------------+--------------------------------+ 1983 | JALX | X| Imm 20:16 | Imm 25:21 | 1984 +--------------+--------------------------------+ 1985 | Immediate 15:0 | 1986 +-----------------------------------------------+ 1987 1988 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx. 1989 Note that the immediate value in the first word is swapped. 1990 1991 When producing a relocatable object file, R_MIPS16_26 is 1992 handled mostly like R_MIPS_26. In particular, the addend is 1993 stored as a straight 26-bit value in a 32-bit instruction. 1994 (gas makes life simpler for itself by never adjusting a 1995 R_MIPS16_26 reloc to be against a section, so the addend is 1996 always zero). However, the 32 bit instruction is stored as 2 1997 16-bit values, rather than a single 32-bit value. In a 1998 big-endian file, the result is the same; in a little-endian 1999 file, the two 16-bit halves of the 32 bit value are swapped. 2000 This is so that a disassembler can recognize the jal 2001 instruction. 2002 2003 When doing a final link, R_MIPS16_26 is treated as a 32 bit 2004 instruction stored as two 16-bit values. The addend A is the 2005 contents of the targ26 field. The calculation is the same as 2006 R_MIPS_26. When storing the calculated value, reorder the 2007 immediate value as shown above, and don't forget to store the 2008 value as two 16-bit values. 2009 2010 To put it in MIPS ABI terms, the relocation field is T-targ26-16, 2011 defined as 2012 2013 big-endian: 2014 +--------+----------------------+ 2015 | | | 2016 | | targ26-16 | 2017 |31 26|25 0| 2018 +--------+----------------------+ 2019 2020 little-endian: 2021 +----------+------+-------------+ 2022 | | | | 2023 | sub1 | | sub2 | 2024 |0 9|10 15|16 31| 2025 +----------+--------------------+ 2026 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is 2027 ((sub1 << 16) | sub2)). 2028 2029 When producing a relocatable object file, the calculation is 2030 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2) 2031 When producing a fully linked file, the calculation is 2032 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2) 2033 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff) 2034 2035 The table below lists the other MIPS16 instruction relocations. 2036 Each one is calculated in the same way as the non-MIPS16 relocation 2037 given on the right, but using the extended MIPS16 layout of 16-bit 2038 immediate fields: 2039 2040 R_MIPS16_GPREL R_MIPS_GPREL16 2041 R_MIPS16_GOT16 R_MIPS_GOT16 2042 R_MIPS16_CALL16 R_MIPS_CALL16 2043 R_MIPS16_HI16 R_MIPS_HI16 2044 R_MIPS16_LO16 R_MIPS_LO16 2045 2046 A typical instruction will have a format like this: 2047 2048 +--------------+--------------------------------+ 2049 | EXTEND | Imm 10:5 | Imm 15:11 | 2050 +--------------+--------------------------------+ 2051 | Major | rx | ry | Imm 4:0 | 2052 +--------------+--------------------------------+ 2053 2054 EXTEND is the five bit value 11110. Major is the instruction 2055 opcode. 2056 2057 All we need to do here is shuffle the bits appropriately. 2058 As above, the two 16-bit halves must be swapped on a 2059 little-endian system. */ 2060 2061 static inline bfd_boolean 2062 mips16_reloc_p (int r_type) 2063 { 2064 switch (r_type) 2065 { 2066 case R_MIPS16_26: 2067 case R_MIPS16_GPREL: 2068 case R_MIPS16_GOT16: 2069 case R_MIPS16_CALL16: 2070 case R_MIPS16_HI16: 2071 case R_MIPS16_LO16: 2072 case R_MIPS16_TLS_GD: 2073 case R_MIPS16_TLS_LDM: 2074 case R_MIPS16_TLS_DTPREL_HI16: 2075 case R_MIPS16_TLS_DTPREL_LO16: 2076 case R_MIPS16_TLS_GOTTPREL: 2077 case R_MIPS16_TLS_TPREL_HI16: 2078 case R_MIPS16_TLS_TPREL_LO16: 2079 return TRUE; 2080 2081 default: 2082 return FALSE; 2083 } 2084 } 2085 2086 /* Check if a microMIPS reloc. */ 2087 2088 static inline bfd_boolean 2089 micromips_reloc_p (unsigned int r_type) 2090 { 2091 return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max; 2092 } 2093 2094 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped 2095 on a little-endian system. This does not apply to R_MICROMIPS_PC7_S1 2096 and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions. */ 2097 2098 static inline bfd_boolean 2099 micromips_reloc_shuffle_p (unsigned int r_type) 2100 { 2101 return (micromips_reloc_p (r_type) 2102 && r_type != R_MICROMIPS_PC7_S1 2103 && r_type != R_MICROMIPS_PC10_S1); 2104 } 2105 2106 static inline bfd_boolean 2107 got16_reloc_p (int r_type) 2108 { 2109 return (r_type == R_MIPS_GOT16 2110 || r_type == R_MIPS16_GOT16 2111 || r_type == R_MICROMIPS_GOT16); 2112 } 2113 2114 static inline bfd_boolean 2115 call16_reloc_p (int r_type) 2116 { 2117 return (r_type == R_MIPS_CALL16 2118 || r_type == R_MIPS16_CALL16 2119 || r_type == R_MICROMIPS_CALL16); 2120 } 2121 2122 static inline bfd_boolean 2123 got_disp_reloc_p (unsigned int r_type) 2124 { 2125 return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP; 2126 } 2127 2128 static inline bfd_boolean 2129 got_page_reloc_p (unsigned int r_type) 2130 { 2131 return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE; 2132 } 2133 2134 static inline bfd_boolean 2135 got_ofst_reloc_p (unsigned int r_type) 2136 { 2137 return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST; 2138 } 2139 2140 static inline bfd_boolean 2141 got_hi16_reloc_p (unsigned int r_type) 2142 { 2143 return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16; 2144 } 2145 2146 static inline bfd_boolean 2147 got_lo16_reloc_p (unsigned int r_type) 2148 { 2149 return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16; 2150 } 2151 2152 static inline bfd_boolean 2153 call_hi16_reloc_p (unsigned int r_type) 2154 { 2155 return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16; 2156 } 2157 2158 static inline bfd_boolean 2159 call_lo16_reloc_p (unsigned int r_type) 2160 { 2161 return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16; 2162 } 2163 2164 static inline bfd_boolean 2165 hi16_reloc_p (int r_type) 2166 { 2167 return (r_type == R_MIPS_HI16 2168 || r_type == R_MIPS16_HI16 2169 || r_type == R_MICROMIPS_HI16); 2170 } 2171 2172 static inline bfd_boolean 2173 lo16_reloc_p (int r_type) 2174 { 2175 return (r_type == R_MIPS_LO16 2176 || r_type == R_MIPS16_LO16 2177 || r_type == R_MICROMIPS_LO16); 2178 } 2179 2180 static inline bfd_boolean 2181 mips16_call_reloc_p (int r_type) 2182 { 2183 return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16; 2184 } 2185 2186 static inline bfd_boolean 2187 jal_reloc_p (int r_type) 2188 { 2189 return (r_type == R_MIPS_26 2190 || r_type == R_MIPS16_26 2191 || r_type == R_MICROMIPS_26_S1); 2192 } 2193 2194 static inline bfd_boolean 2195 micromips_branch_reloc_p (int r_type) 2196 { 2197 return (r_type == R_MICROMIPS_26_S1 2198 || r_type == R_MICROMIPS_PC16_S1 2199 || r_type == R_MICROMIPS_PC10_S1 2200 || r_type == R_MICROMIPS_PC7_S1); 2201 } 2202 2203 static inline bfd_boolean 2204 tls_gd_reloc_p (unsigned int r_type) 2205 { 2206 return (r_type == R_MIPS_TLS_GD 2207 || r_type == R_MIPS16_TLS_GD 2208 || r_type == R_MICROMIPS_TLS_GD); 2209 } 2210 2211 static inline bfd_boolean 2212 tls_ldm_reloc_p (unsigned int r_type) 2213 { 2214 return (r_type == R_MIPS_TLS_LDM 2215 || r_type == R_MIPS16_TLS_LDM 2216 || r_type == R_MICROMIPS_TLS_LDM); 2217 } 2218 2219 static inline bfd_boolean 2220 tls_gottprel_reloc_p (unsigned int r_type) 2221 { 2222 return (r_type == R_MIPS_TLS_GOTTPREL 2223 || r_type == R_MIPS16_TLS_GOTTPREL 2224 || r_type == R_MICROMIPS_TLS_GOTTPREL); 2225 } 2226 2227 void 2228 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type, 2229 bfd_boolean jal_shuffle, bfd_byte *data) 2230 { 2231 bfd_vma first, second, val; 2232 2233 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type)) 2234 return; 2235 2236 /* Pick up the first and second halfwords of the instruction. */ 2237 first = bfd_get_16 (abfd, data); 2238 second = bfd_get_16 (abfd, data + 2); 2239 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle)) 2240 val = first << 16 | second; 2241 else if (r_type != R_MIPS16_26) 2242 val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11) 2243 | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f)); 2244 else 2245 val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11) 2246 | ((first & 0x1f) << 21) | second); 2247 bfd_put_32 (abfd, val, data); 2248 } 2249 2250 void 2251 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type, 2252 bfd_boolean jal_shuffle, bfd_byte *data) 2253 { 2254 bfd_vma first, second, val; 2255 2256 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type)) 2257 return; 2258 2259 val = bfd_get_32 (abfd, data); 2260 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle)) 2261 { 2262 second = val & 0xffff; 2263 first = val >> 16; 2264 } 2265 else if (r_type != R_MIPS16_26) 2266 { 2267 second = ((val >> 11) & 0xffe0) | (val & 0x1f); 2268 first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0); 2269 } 2270 else 2271 { 2272 second = val & 0xffff; 2273 first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0) 2274 | ((val >> 21) & 0x1f); 2275 } 2276 bfd_put_16 (abfd, second, data + 2); 2277 bfd_put_16 (abfd, first, data); 2278 } 2279 2280 bfd_reloc_status_type 2281 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol, 2282 arelent *reloc_entry, asection *input_section, 2283 bfd_boolean relocatable, void *data, bfd_vma gp) 2284 { 2285 bfd_vma relocation; 2286 bfd_signed_vma val; 2287 bfd_reloc_status_type status; 2288 2289 if (bfd_is_com_section (symbol->section)) 2290 relocation = 0; 2291 else 2292 relocation = symbol->value; 2293 2294 relocation += symbol->section->output_section->vma; 2295 relocation += symbol->section->output_offset; 2296 2297 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 2298 return bfd_reloc_outofrange; 2299 2300 /* Set val to the offset into the section or symbol. */ 2301 val = reloc_entry->addend; 2302 2303 _bfd_mips_elf_sign_extend (val, 16); 2304 2305 /* Adjust val for the final section location and GP value. If we 2306 are producing relocatable output, we don't want to do this for 2307 an external symbol. */ 2308 if (! relocatable 2309 || (symbol->flags & BSF_SECTION_SYM) != 0) 2310 val += relocation - gp; 2311 2312 if (reloc_entry->howto->partial_inplace) 2313 { 2314 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val, 2315 (bfd_byte *) data 2316 + reloc_entry->address); 2317 if (status != bfd_reloc_ok) 2318 return status; 2319 } 2320 else 2321 reloc_entry->addend = val; 2322 2323 if (relocatable) 2324 reloc_entry->address += input_section->output_offset; 2325 2326 return bfd_reloc_ok; 2327 } 2328 2329 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or 2330 R_MIPS_GOT16. REL is the relocation, INPUT_SECTION is the section 2331 that contains the relocation field and DATA points to the start of 2332 INPUT_SECTION. */ 2333 2334 struct mips_hi16 2335 { 2336 struct mips_hi16 *next; 2337 bfd_byte *data; 2338 asection *input_section; 2339 arelent rel; 2340 }; 2341 2342 /* FIXME: This should not be a static variable. */ 2343 2344 static struct mips_hi16 *mips_hi16_list; 2345 2346 /* A howto special_function for REL *HI16 relocations. We can only 2347 calculate the correct value once we've seen the partnering 2348 *LO16 relocation, so just save the information for later. 2349 2350 The ABI requires that the *LO16 immediately follow the *HI16. 2351 However, as a GNU extension, we permit an arbitrary number of 2352 *HI16s to be associated with a single *LO16. This significantly 2353 simplies the relocation handling in gcc. */ 2354 2355 bfd_reloc_status_type 2356 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry, 2357 asymbol *symbol ATTRIBUTE_UNUSED, void *data, 2358 asection *input_section, bfd *output_bfd, 2359 char **error_message ATTRIBUTE_UNUSED) 2360 { 2361 struct mips_hi16 *n; 2362 2363 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 2364 return bfd_reloc_outofrange; 2365 2366 n = bfd_malloc (sizeof *n); 2367 if (n == NULL) 2368 return bfd_reloc_outofrange; 2369 2370 n->next = mips_hi16_list; 2371 n->data = data; 2372 n->input_section = input_section; 2373 n->rel = *reloc_entry; 2374 mips_hi16_list = n; 2375 2376 if (output_bfd != NULL) 2377 reloc_entry->address += input_section->output_offset; 2378 2379 return bfd_reloc_ok; 2380 } 2381 2382 /* A howto special_function for REL R_MIPS*_GOT16 relocations. This is just 2383 like any other 16-bit relocation when applied to global symbols, but is 2384 treated in the same as R_MIPS_HI16 when applied to local symbols. */ 2385 2386 bfd_reloc_status_type 2387 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, 2388 void *data, asection *input_section, 2389 bfd *output_bfd, char **error_message) 2390 { 2391 if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0 2392 || bfd_is_und_section (bfd_get_section (symbol)) 2393 || bfd_is_com_section (bfd_get_section (symbol))) 2394 /* The relocation is against a global symbol. */ 2395 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data, 2396 input_section, output_bfd, 2397 error_message); 2398 2399 return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data, 2400 input_section, output_bfd, error_message); 2401 } 2402 2403 /* A howto special_function for REL *LO16 relocations. The *LO16 itself 2404 is a straightforward 16 bit inplace relocation, but we must deal with 2405 any partnering high-part relocations as well. */ 2406 2407 bfd_reloc_status_type 2408 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, 2409 void *data, asection *input_section, 2410 bfd *output_bfd, char **error_message) 2411 { 2412 bfd_vma vallo; 2413 bfd_byte *location = (bfd_byte *) data + reloc_entry->address; 2414 2415 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 2416 return bfd_reloc_outofrange; 2417 2418 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE, 2419 location); 2420 vallo = bfd_get_32 (abfd, location); 2421 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE, 2422 location); 2423 2424 while (mips_hi16_list != NULL) 2425 { 2426 bfd_reloc_status_type ret; 2427 struct mips_hi16 *hi; 2428 2429 hi = mips_hi16_list; 2430 2431 /* R_MIPS*_GOT16 relocations are something of a special case. We 2432 want to install the addend in the same way as for a R_MIPS*_HI16 2433 relocation (with a rightshift of 16). However, since GOT16 2434 relocations can also be used with global symbols, their howto 2435 has a rightshift of 0. */ 2436 if (hi->rel.howto->type == R_MIPS_GOT16) 2437 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE); 2438 else if (hi->rel.howto->type == R_MIPS16_GOT16) 2439 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE); 2440 else if (hi->rel.howto->type == R_MICROMIPS_GOT16) 2441 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE); 2442 2443 /* VALLO is a signed 16-bit number. Bias it by 0x8000 so that any 2444 carry or borrow will induce a change of +1 or -1 in the high part. */ 2445 hi->rel.addend += (vallo + 0x8000) & 0xffff; 2446 2447 ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data, 2448 hi->input_section, output_bfd, 2449 error_message); 2450 if (ret != bfd_reloc_ok) 2451 return ret; 2452 2453 mips_hi16_list = hi->next; 2454 free (hi); 2455 } 2456 2457 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data, 2458 input_section, output_bfd, 2459 error_message); 2460 } 2461 2462 /* A generic howto special_function. This calculates and installs the 2463 relocation itself, thus avoiding the oft-discussed problems in 2464 bfd_perform_relocation and bfd_install_relocation. */ 2465 2466 bfd_reloc_status_type 2467 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry, 2468 asymbol *symbol, void *data ATTRIBUTE_UNUSED, 2469 asection *input_section, bfd *output_bfd, 2470 char **error_message ATTRIBUTE_UNUSED) 2471 { 2472 bfd_signed_vma val; 2473 bfd_reloc_status_type status; 2474 bfd_boolean relocatable; 2475 2476 relocatable = (output_bfd != NULL); 2477 2478 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 2479 return bfd_reloc_outofrange; 2480 2481 /* Build up the field adjustment in VAL. */ 2482 val = 0; 2483 if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0) 2484 { 2485 /* Either we're calculating the final field value or we have a 2486 relocation against a section symbol. Add in the section's 2487 offset or address. */ 2488 val += symbol->section->output_section->vma; 2489 val += symbol->section->output_offset; 2490 } 2491 2492 if (!relocatable) 2493 { 2494 /* We're calculating the final field value. Add in the symbol's value 2495 and, if pc-relative, subtract the address of the field itself. */ 2496 val += symbol->value; 2497 if (reloc_entry->howto->pc_relative) 2498 { 2499 val -= input_section->output_section->vma; 2500 val -= input_section->output_offset; 2501 val -= reloc_entry->address; 2502 } 2503 } 2504 2505 /* VAL is now the final adjustment. If we're keeping this relocation 2506 in the output file, and if the relocation uses a separate addend, 2507 we just need to add VAL to that addend. Otherwise we need to add 2508 VAL to the relocation field itself. */ 2509 if (relocatable && !reloc_entry->howto->partial_inplace) 2510 reloc_entry->addend += val; 2511 else 2512 { 2513 bfd_byte *location = (bfd_byte *) data + reloc_entry->address; 2514 2515 /* Add in the separate addend, if any. */ 2516 val += reloc_entry->addend; 2517 2518 /* Add VAL to the relocation field. */ 2519 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE, 2520 location); 2521 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val, 2522 location); 2523 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE, 2524 location); 2525 2526 if (status != bfd_reloc_ok) 2527 return status; 2528 } 2529 2530 if (relocatable) 2531 reloc_entry->address += input_section->output_offset; 2532 2533 return bfd_reloc_ok; 2534 } 2535 2536 /* Swap an entry in a .gptab section. Note that these routines rely 2537 on the equivalence of the two elements of the union. */ 2538 2539 static void 2540 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex, 2541 Elf32_gptab *in) 2542 { 2543 in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value); 2544 in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes); 2545 } 2546 2547 static void 2548 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in, 2549 Elf32_External_gptab *ex) 2550 { 2551 H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value); 2552 H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes); 2553 } 2554 2555 static void 2556 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in, 2557 Elf32_External_compact_rel *ex) 2558 { 2559 H_PUT_32 (abfd, in->id1, ex->id1); 2560 H_PUT_32 (abfd, in->num, ex->num); 2561 H_PUT_32 (abfd, in->id2, ex->id2); 2562 H_PUT_32 (abfd, in->offset, ex->offset); 2563 H_PUT_32 (abfd, in->reserved0, ex->reserved0); 2564 H_PUT_32 (abfd, in->reserved1, ex->reserved1); 2565 } 2566 2567 static void 2568 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in, 2569 Elf32_External_crinfo *ex) 2570 { 2571 unsigned long l; 2572 2573 l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH) 2574 | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH) 2575 | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH) 2576 | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH)); 2577 H_PUT_32 (abfd, l, ex->info); 2578 H_PUT_32 (abfd, in->konst, ex->konst); 2579 H_PUT_32 (abfd, in->vaddr, ex->vaddr); 2580 } 2581 2582 /* A .reginfo section holds a single Elf32_RegInfo structure. These 2583 routines swap this structure in and out. They are used outside of 2584 BFD, so they are globally visible. */ 2585 2586 void 2587 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex, 2588 Elf32_RegInfo *in) 2589 { 2590 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask); 2591 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]); 2592 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]); 2593 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]); 2594 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]); 2595 in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value); 2596 } 2597 2598 void 2599 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in, 2600 Elf32_External_RegInfo *ex) 2601 { 2602 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask); 2603 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]); 2604 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]); 2605 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]); 2606 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]); 2607 H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value); 2608 } 2609 2610 /* In the 64 bit ABI, the .MIPS.options section holds register 2611 information in an Elf64_Reginfo structure. These routines swap 2612 them in and out. They are globally visible because they are used 2613 outside of BFD. These routines are here so that gas can call them 2614 without worrying about whether the 64 bit ABI has been included. */ 2615 2616 void 2617 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex, 2618 Elf64_Internal_RegInfo *in) 2619 { 2620 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask); 2621 in->ri_pad = H_GET_32 (abfd, ex->ri_pad); 2622 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]); 2623 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]); 2624 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]); 2625 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]); 2626 in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value); 2627 } 2628 2629 void 2630 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in, 2631 Elf64_External_RegInfo *ex) 2632 { 2633 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask); 2634 H_PUT_32 (abfd, in->ri_pad, ex->ri_pad); 2635 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]); 2636 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]); 2637 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]); 2638 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]); 2639 H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value); 2640 } 2641 2642 /* Swap in an options header. */ 2643 2644 void 2645 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex, 2646 Elf_Internal_Options *in) 2647 { 2648 in->kind = H_GET_8 (abfd, ex->kind); 2649 in->size = H_GET_8 (abfd, ex->size); 2650 in->section = H_GET_16 (abfd, ex->section); 2651 in->info = H_GET_32 (abfd, ex->info); 2652 } 2653 2654 /* Swap out an options header. */ 2655 2656 void 2657 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in, 2658 Elf_External_Options *ex) 2659 { 2660 H_PUT_8 (abfd, in->kind, ex->kind); 2661 H_PUT_8 (abfd, in->size, ex->size); 2662 H_PUT_16 (abfd, in->section, ex->section); 2663 H_PUT_32 (abfd, in->info, ex->info); 2664 } 2665 2666 /* This function is called via qsort() to sort the dynamic relocation 2667 entries by increasing r_symndx value. */ 2668 2669 static int 2670 sort_dynamic_relocs (const void *arg1, const void *arg2) 2671 { 2672 Elf_Internal_Rela int_reloc1; 2673 Elf_Internal_Rela int_reloc2; 2674 int diff; 2675 2676 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1); 2677 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2); 2678 2679 diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info); 2680 if (diff != 0) 2681 return diff; 2682 2683 if (int_reloc1.r_offset < int_reloc2.r_offset) 2684 return -1; 2685 if (int_reloc1.r_offset > int_reloc2.r_offset) 2686 return 1; 2687 return 0; 2688 } 2689 2690 /* Like sort_dynamic_relocs, but used for elf64 relocations. */ 2691 2692 static int 2693 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED, 2694 const void *arg2 ATTRIBUTE_UNUSED) 2695 { 2696 #ifdef BFD64 2697 Elf_Internal_Rela int_reloc1[3]; 2698 Elf_Internal_Rela int_reloc2[3]; 2699 2700 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in) 2701 (reldyn_sorting_bfd, arg1, int_reloc1); 2702 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in) 2703 (reldyn_sorting_bfd, arg2, int_reloc2); 2704 2705 if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info)) 2706 return -1; 2707 if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info)) 2708 return 1; 2709 2710 if (int_reloc1[0].r_offset < int_reloc2[0].r_offset) 2711 return -1; 2712 if (int_reloc1[0].r_offset > int_reloc2[0].r_offset) 2713 return 1; 2714 return 0; 2715 #else 2716 abort (); 2717 #endif 2718 } 2719 2720 2721 /* This routine is used to write out ECOFF debugging external symbol 2722 information. It is called via mips_elf_link_hash_traverse. The 2723 ECOFF external symbol information must match the ELF external 2724 symbol information. Unfortunately, at this point we don't know 2725 whether a symbol is required by reloc information, so the two 2726 tables may wind up being different. We must sort out the external 2727 symbol information before we can set the final size of the .mdebug 2728 section, and we must set the size of the .mdebug section before we 2729 can relocate any sections, and we can't know which symbols are 2730 required by relocation until we relocate the sections. 2731 Fortunately, it is relatively unlikely that any symbol will be 2732 stripped but required by a reloc. In particular, it can not happen 2733 when generating a final executable. */ 2734 2735 static bfd_boolean 2736 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data) 2737 { 2738 struct extsym_info *einfo = data; 2739 bfd_boolean strip; 2740 asection *sec, *output_section; 2741 2742 if (h->root.indx == -2) 2743 strip = FALSE; 2744 else if ((h->root.def_dynamic 2745 || h->root.ref_dynamic 2746 || h->root.type == bfd_link_hash_new) 2747 && !h->root.def_regular 2748 && !h->root.ref_regular) 2749 strip = TRUE; 2750 else if (einfo->info->strip == strip_all 2751 || (einfo->info->strip == strip_some 2752 && bfd_hash_lookup (einfo->info->keep_hash, 2753 h->root.root.root.string, 2754 FALSE, FALSE) == NULL)) 2755 strip = TRUE; 2756 else 2757 strip = FALSE; 2758 2759 if (strip) 2760 return TRUE; 2761 2762 if (h->esym.ifd == -2) 2763 { 2764 h->esym.jmptbl = 0; 2765 h->esym.cobol_main = 0; 2766 h->esym.weakext = 0; 2767 h->esym.reserved = 0; 2768 h->esym.ifd = ifdNil; 2769 h->esym.asym.value = 0; 2770 h->esym.asym.st = stGlobal; 2771 2772 if (h->root.root.type == bfd_link_hash_undefined 2773 || h->root.root.type == bfd_link_hash_undefweak) 2774 { 2775 const char *name; 2776 2777 /* Use undefined class. Also, set class and type for some 2778 special symbols. */ 2779 name = h->root.root.root.string; 2780 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0 2781 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0) 2782 { 2783 h->esym.asym.sc = scData; 2784 h->esym.asym.st = stLabel; 2785 h->esym.asym.value = 0; 2786 } 2787 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0) 2788 { 2789 h->esym.asym.sc = scAbs; 2790 h->esym.asym.st = stLabel; 2791 h->esym.asym.value = 2792 mips_elf_hash_table (einfo->info)->procedure_count; 2793 } 2794 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd)) 2795 { 2796 h->esym.asym.sc = scAbs; 2797 h->esym.asym.st = stLabel; 2798 h->esym.asym.value = elf_gp (einfo->abfd); 2799 } 2800 else 2801 h->esym.asym.sc = scUndefined; 2802 } 2803 else if (h->root.root.type != bfd_link_hash_defined 2804 && h->root.root.type != bfd_link_hash_defweak) 2805 h->esym.asym.sc = scAbs; 2806 else 2807 { 2808 const char *name; 2809 2810 sec = h->root.root.u.def.section; 2811 output_section = sec->output_section; 2812 2813 /* When making a shared library and symbol h is the one from 2814 the another shared library, OUTPUT_SECTION may be null. */ 2815 if (output_section == NULL) 2816 h->esym.asym.sc = scUndefined; 2817 else 2818 { 2819 name = bfd_section_name (output_section->owner, output_section); 2820 2821 if (strcmp (name, ".text") == 0) 2822 h->esym.asym.sc = scText; 2823 else if (strcmp (name, ".data") == 0) 2824 h->esym.asym.sc = scData; 2825 else if (strcmp (name, ".sdata") == 0) 2826 h->esym.asym.sc = scSData; 2827 else if (strcmp (name, ".rodata") == 0 2828 || strcmp (name, ".rdata") == 0) 2829 h->esym.asym.sc = scRData; 2830 else if (strcmp (name, ".bss") == 0) 2831 h->esym.asym.sc = scBss; 2832 else if (strcmp (name, ".sbss") == 0) 2833 h->esym.asym.sc = scSBss; 2834 else if (strcmp (name, ".init") == 0) 2835 h->esym.asym.sc = scInit; 2836 else if (strcmp (name, ".fini") == 0) 2837 h->esym.asym.sc = scFini; 2838 else 2839 h->esym.asym.sc = scAbs; 2840 } 2841 } 2842 2843 h->esym.asym.reserved = 0; 2844 h->esym.asym.index = indexNil; 2845 } 2846 2847 if (h->root.root.type == bfd_link_hash_common) 2848 h->esym.asym.value = h->root.root.u.c.size; 2849 else if (h->root.root.type == bfd_link_hash_defined 2850 || h->root.root.type == bfd_link_hash_defweak) 2851 { 2852 if (h->esym.asym.sc == scCommon) 2853 h->esym.asym.sc = scBss; 2854 else if (h->esym.asym.sc == scSCommon) 2855 h->esym.asym.sc = scSBss; 2856 2857 sec = h->root.root.u.def.section; 2858 output_section = sec->output_section; 2859 if (output_section != NULL) 2860 h->esym.asym.value = (h->root.root.u.def.value 2861 + sec->output_offset 2862 + output_section->vma); 2863 else 2864 h->esym.asym.value = 0; 2865 } 2866 else 2867 { 2868 struct mips_elf_link_hash_entry *hd = h; 2869 2870 while (hd->root.root.type == bfd_link_hash_indirect) 2871 hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link; 2872 2873 if (hd->needs_lazy_stub) 2874 { 2875 BFD_ASSERT (hd->root.plt.plist != NULL); 2876 BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE); 2877 /* Set type and value for a symbol with a function stub. */ 2878 h->esym.asym.st = stProc; 2879 sec = hd->root.root.u.def.section; 2880 if (sec == NULL) 2881 h->esym.asym.value = 0; 2882 else 2883 { 2884 output_section = sec->output_section; 2885 if (output_section != NULL) 2886 h->esym.asym.value = (hd->root.plt.plist->stub_offset 2887 + sec->output_offset 2888 + output_section->vma); 2889 else 2890 h->esym.asym.value = 0; 2891 } 2892 } 2893 } 2894 2895 if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap, 2896 h->root.root.root.string, 2897 &h->esym)) 2898 { 2899 einfo->failed = TRUE; 2900 return FALSE; 2901 } 2902 2903 return TRUE; 2904 } 2905 2906 /* A comparison routine used to sort .gptab entries. */ 2907 2908 static int 2909 gptab_compare (const void *p1, const void *p2) 2910 { 2911 const Elf32_gptab *a1 = p1; 2912 const Elf32_gptab *a2 = p2; 2913 2914 return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value; 2915 } 2916 2917 /* Functions to manage the got entry hash table. */ 2918 2919 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit 2920 hash number. */ 2921 2922 static INLINE hashval_t 2923 mips_elf_hash_bfd_vma (bfd_vma addr) 2924 { 2925 #ifdef BFD64 2926 return addr + (addr >> 32); 2927 #else 2928 return addr; 2929 #endif 2930 } 2931 2932 static hashval_t 2933 mips_elf_got_entry_hash (const void *entry_) 2934 { 2935 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_; 2936 2937 return (entry->symndx 2938 + ((entry->tls_type == GOT_TLS_LDM) << 18) 2939 + (entry->tls_type == GOT_TLS_LDM ? 0 2940 : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address) 2941 : entry->symndx >= 0 ? (entry->abfd->id 2942 + mips_elf_hash_bfd_vma (entry->d.addend)) 2943 : entry->d.h->root.root.root.hash)); 2944 } 2945 2946 static int 2947 mips_elf_got_entry_eq (const void *entry1, const void *entry2) 2948 { 2949 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1; 2950 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2; 2951 2952 return (e1->symndx == e2->symndx 2953 && e1->tls_type == e2->tls_type 2954 && (e1->tls_type == GOT_TLS_LDM ? TRUE 2955 : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address 2956 : e1->symndx >= 0 ? (e1->abfd == e2->abfd 2957 && e1->d.addend == e2->d.addend) 2958 : e2->abfd && e1->d.h == e2->d.h)); 2959 } 2960 2961 static hashval_t 2962 mips_got_page_ref_hash (const void *ref_) 2963 { 2964 const struct mips_got_page_ref *ref; 2965 2966 ref = (const struct mips_got_page_ref *) ref_; 2967 return ((ref->symndx >= 0 2968 ? (hashval_t) (ref->u.abfd->id + ref->symndx) 2969 : ref->u.h->root.root.root.hash) 2970 + mips_elf_hash_bfd_vma (ref->addend)); 2971 } 2972 2973 static int 2974 mips_got_page_ref_eq (const void *ref1_, const void *ref2_) 2975 { 2976 const struct mips_got_page_ref *ref1, *ref2; 2977 2978 ref1 = (const struct mips_got_page_ref *) ref1_; 2979 ref2 = (const struct mips_got_page_ref *) ref2_; 2980 return (ref1->symndx == ref2->symndx 2981 && (ref1->symndx < 0 2982 ? ref1->u.h == ref2->u.h 2983 : ref1->u.abfd == ref2->u.abfd) 2984 && ref1->addend == ref2->addend); 2985 } 2986 2987 static hashval_t 2988 mips_got_page_entry_hash (const void *entry_) 2989 { 2990 const struct mips_got_page_entry *entry; 2991 2992 entry = (const struct mips_got_page_entry *) entry_; 2993 return entry->sec->id; 2994 } 2995 2996 static int 2997 mips_got_page_entry_eq (const void *entry1_, const void *entry2_) 2998 { 2999 const struct mips_got_page_entry *entry1, *entry2; 3000 3001 entry1 = (const struct mips_got_page_entry *) entry1_; 3002 entry2 = (const struct mips_got_page_entry *) entry2_; 3003 return entry1->sec == entry2->sec; 3004 } 3005 3006 /* Create and return a new mips_got_info structure. */ 3007 3008 static struct mips_got_info * 3009 mips_elf_create_got_info (bfd *abfd) 3010 { 3011 struct mips_got_info *g; 3012 3013 g = bfd_zalloc (abfd, sizeof (struct mips_got_info)); 3014 if (g == NULL) 3015 return NULL; 3016 3017 g->got_entries = htab_try_create (1, mips_elf_got_entry_hash, 3018 mips_elf_got_entry_eq, NULL); 3019 if (g->got_entries == NULL) 3020 return NULL; 3021 3022 g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash, 3023 mips_got_page_ref_eq, NULL); 3024 if (g->got_page_refs == NULL) 3025 return NULL; 3026 3027 return g; 3028 } 3029 3030 /* Return the GOT info for input bfd ABFD, trying to create a new one if 3031 CREATE_P and if ABFD doesn't already have a GOT. */ 3032 3033 static struct mips_got_info * 3034 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p) 3035 { 3036 struct mips_elf_obj_tdata *tdata; 3037 3038 if (!is_mips_elf (abfd)) 3039 return NULL; 3040 3041 tdata = mips_elf_tdata (abfd); 3042 if (!tdata->got && create_p) 3043 tdata->got = mips_elf_create_got_info (abfd); 3044 return tdata->got; 3045 } 3046 3047 /* Record that ABFD should use output GOT G. */ 3048 3049 static void 3050 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g) 3051 { 3052 struct mips_elf_obj_tdata *tdata; 3053 3054 BFD_ASSERT (is_mips_elf (abfd)); 3055 tdata = mips_elf_tdata (abfd); 3056 if (tdata->got) 3057 { 3058 /* The GOT structure itself and the hash table entries are 3059 allocated to a bfd, but the hash tables aren't. */ 3060 htab_delete (tdata->got->got_entries); 3061 htab_delete (tdata->got->got_page_refs); 3062 if (tdata->got->got_page_entries) 3063 htab_delete (tdata->got->got_page_entries); 3064 } 3065 tdata->got = g; 3066 } 3067 3068 /* Return the dynamic relocation section. If it doesn't exist, try to 3069 create a new it if CREATE_P, otherwise return NULL. Also return NULL 3070 if creation fails. */ 3071 3072 static asection * 3073 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p) 3074 { 3075 const char *dname; 3076 asection *sreloc; 3077 bfd *dynobj; 3078 3079 dname = MIPS_ELF_REL_DYN_NAME (info); 3080 dynobj = elf_hash_table (info)->dynobj; 3081 sreloc = bfd_get_linker_section (dynobj, dname); 3082 if (sreloc == NULL && create_p) 3083 { 3084 sreloc = bfd_make_section_anyway_with_flags (dynobj, dname, 3085 (SEC_ALLOC 3086 | SEC_LOAD 3087 | SEC_HAS_CONTENTS 3088 | SEC_IN_MEMORY 3089 | SEC_LINKER_CREATED 3090 | SEC_READONLY)); 3091 if (sreloc == NULL 3092 || ! bfd_set_section_alignment (dynobj, sreloc, 3093 MIPS_ELF_LOG_FILE_ALIGN (dynobj))) 3094 return NULL; 3095 } 3096 return sreloc; 3097 } 3098 3099 /* Return the GOT_TLS_* type required by relocation type R_TYPE. */ 3100 3101 static int 3102 mips_elf_reloc_tls_type (unsigned int r_type) 3103 { 3104 if (tls_gd_reloc_p (r_type)) 3105 return GOT_TLS_GD; 3106 3107 if (tls_ldm_reloc_p (r_type)) 3108 return GOT_TLS_LDM; 3109 3110 if (tls_gottprel_reloc_p (r_type)) 3111 return GOT_TLS_IE; 3112 3113 return GOT_TLS_NONE; 3114 } 3115 3116 /* Return the number of GOT slots needed for GOT TLS type TYPE. */ 3117 3118 static int 3119 mips_tls_got_entries (unsigned int type) 3120 { 3121 switch (type) 3122 { 3123 case GOT_TLS_GD: 3124 case GOT_TLS_LDM: 3125 return 2; 3126 3127 case GOT_TLS_IE: 3128 return 1; 3129 3130 case GOT_TLS_NONE: 3131 return 0; 3132 } 3133 abort (); 3134 } 3135 3136 /* Count the number of relocations needed for a TLS GOT entry, with 3137 access types from TLS_TYPE, and symbol H (or a local symbol if H 3138 is NULL). */ 3139 3140 static int 3141 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type, 3142 struct elf_link_hash_entry *h) 3143 { 3144 int indx = 0; 3145 bfd_boolean need_relocs = FALSE; 3146 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; 3147 3148 if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) 3149 && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h))) 3150 indx = h->dynindx; 3151 3152 if ((info->shared || indx != 0) 3153 && (h == NULL 3154 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT 3155 || h->root.type != bfd_link_hash_undefweak)) 3156 need_relocs = TRUE; 3157 3158 if (!need_relocs) 3159 return 0; 3160 3161 switch (tls_type) 3162 { 3163 case GOT_TLS_GD: 3164 return indx != 0 ? 2 : 1; 3165 3166 case GOT_TLS_IE: 3167 return 1; 3168 3169 case GOT_TLS_LDM: 3170 return info->shared ? 1 : 0; 3171 3172 default: 3173 return 0; 3174 } 3175 } 3176 3177 /* Add the number of GOT entries and TLS relocations required by ENTRY 3178 to G. */ 3179 3180 static void 3181 mips_elf_count_got_entry (struct bfd_link_info *info, 3182 struct mips_got_info *g, 3183 struct mips_got_entry *entry) 3184 { 3185 if (entry->tls_type) 3186 { 3187 g->tls_gotno += mips_tls_got_entries (entry->tls_type); 3188 g->relocs += mips_tls_got_relocs (info, entry->tls_type, 3189 entry->symndx < 0 3190 ? &entry->d.h->root : NULL); 3191 } 3192 else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE) 3193 g->local_gotno += 1; 3194 else 3195 g->global_gotno += 1; 3196 } 3197 3198 /* Output a simple dynamic relocation into SRELOC. */ 3199 3200 static void 3201 mips_elf_output_dynamic_relocation (bfd *output_bfd, 3202 asection *sreloc, 3203 unsigned long reloc_index, 3204 unsigned long indx, 3205 int r_type, 3206 bfd_vma offset) 3207 { 3208 Elf_Internal_Rela rel[3]; 3209 3210 memset (rel, 0, sizeof (rel)); 3211 3212 rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type); 3213 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset; 3214 3215 if (ABI_64_P (output_bfd)) 3216 { 3217 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out) 3218 (output_bfd, &rel[0], 3219 (sreloc->contents 3220 + reloc_index * sizeof (Elf64_Mips_External_Rel))); 3221 } 3222 else 3223 bfd_elf32_swap_reloc_out 3224 (output_bfd, &rel[0], 3225 (sreloc->contents 3226 + reloc_index * sizeof (Elf32_External_Rel))); 3227 } 3228 3229 /* Initialize a set of TLS GOT entries for one symbol. */ 3230 3231 static void 3232 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info, 3233 struct mips_got_entry *entry, 3234 struct mips_elf_link_hash_entry *h, 3235 bfd_vma value) 3236 { 3237 struct mips_elf_link_hash_table *htab; 3238 int indx; 3239 asection *sreloc, *sgot; 3240 bfd_vma got_offset, got_offset2; 3241 bfd_boolean need_relocs = FALSE; 3242 3243 htab = mips_elf_hash_table (info); 3244 if (htab == NULL) 3245 return; 3246 3247 sgot = htab->sgot; 3248 3249 indx = 0; 3250 if (h != NULL) 3251 { 3252 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; 3253 3254 if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root) 3255 && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root))) 3256 indx = h->root.dynindx; 3257 } 3258 3259 if (entry->tls_initialized) 3260 return; 3261 3262 if ((info->shared || indx != 0) 3263 && (h == NULL 3264 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT 3265 || h->root.type != bfd_link_hash_undefweak)) 3266 need_relocs = TRUE; 3267 3268 /* MINUS_ONE means the symbol is not defined in this object. It may not 3269 be defined at all; assume that the value doesn't matter in that 3270 case. Otherwise complain if we would use the value. */ 3271 BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs) 3272 || h->root.root.type == bfd_link_hash_undefweak); 3273 3274 /* Emit necessary relocations. */ 3275 sreloc = mips_elf_rel_dyn_section (info, FALSE); 3276 got_offset = entry->gotidx; 3277 3278 switch (entry->tls_type) 3279 { 3280 case GOT_TLS_GD: 3281 /* General Dynamic. */ 3282 got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd); 3283 3284 if (need_relocs) 3285 { 3286 mips_elf_output_dynamic_relocation 3287 (abfd, sreloc, sreloc->reloc_count++, indx, 3288 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32, 3289 sgot->output_offset + sgot->output_section->vma + got_offset); 3290 3291 if (indx) 3292 mips_elf_output_dynamic_relocation 3293 (abfd, sreloc, sreloc->reloc_count++, indx, 3294 ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32, 3295 sgot->output_offset + sgot->output_section->vma + got_offset2); 3296 else 3297 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info), 3298 sgot->contents + got_offset2); 3299 } 3300 else 3301 { 3302 MIPS_ELF_PUT_WORD (abfd, 1, 3303 sgot->contents + got_offset); 3304 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info), 3305 sgot->contents + got_offset2); 3306 } 3307 break; 3308 3309 case GOT_TLS_IE: 3310 /* Initial Exec model. */ 3311 if (need_relocs) 3312 { 3313 if (indx == 0) 3314 MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma, 3315 sgot->contents + got_offset); 3316 else 3317 MIPS_ELF_PUT_WORD (abfd, 0, 3318 sgot->contents + got_offset); 3319 3320 mips_elf_output_dynamic_relocation 3321 (abfd, sreloc, sreloc->reloc_count++, indx, 3322 ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32, 3323 sgot->output_offset + sgot->output_section->vma + got_offset); 3324 } 3325 else 3326 MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info), 3327 sgot->contents + got_offset); 3328 break; 3329 3330 case GOT_TLS_LDM: 3331 /* The initial offset is zero, and the LD offsets will include the 3332 bias by DTP_OFFSET. */ 3333 MIPS_ELF_PUT_WORD (abfd, 0, 3334 sgot->contents + got_offset 3335 + MIPS_ELF_GOT_SIZE (abfd)); 3336 3337 if (!info->shared) 3338 MIPS_ELF_PUT_WORD (abfd, 1, 3339 sgot->contents + got_offset); 3340 else 3341 mips_elf_output_dynamic_relocation 3342 (abfd, sreloc, sreloc->reloc_count++, indx, 3343 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32, 3344 sgot->output_offset + sgot->output_section->vma + got_offset); 3345 break; 3346 3347 default: 3348 abort (); 3349 } 3350 3351 entry->tls_initialized = TRUE; 3352 } 3353 3354 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry 3355 for global symbol H. .got.plt comes before the GOT, so the offset 3356 will be negative. */ 3357 3358 static bfd_vma 3359 mips_elf_gotplt_index (struct bfd_link_info *info, 3360 struct elf_link_hash_entry *h) 3361 { 3362 bfd_vma got_address, got_value; 3363 struct mips_elf_link_hash_table *htab; 3364 3365 htab = mips_elf_hash_table (info); 3366 BFD_ASSERT (htab != NULL); 3367 3368 BFD_ASSERT (h->plt.plist != NULL); 3369 BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE); 3370 3371 /* Calculate the address of the associated .got.plt entry. */ 3372 got_address = (htab->sgotplt->output_section->vma 3373 + htab->sgotplt->output_offset 3374 + (h->plt.plist->gotplt_index 3375 * MIPS_ELF_GOT_SIZE (info->output_bfd))); 3376 3377 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */ 3378 got_value = (htab->root.hgot->root.u.def.section->output_section->vma 3379 + htab->root.hgot->root.u.def.section->output_offset 3380 + htab->root.hgot->root.u.def.value); 3381 3382 return got_address - got_value; 3383 } 3384 3385 /* Return the GOT offset for address VALUE. If there is not yet a GOT 3386 entry for this value, create one. If R_SYMNDX refers to a TLS symbol, 3387 create a TLS GOT entry instead. Return -1 if no satisfactory GOT 3388 offset can be found. */ 3389 3390 static bfd_vma 3391 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, 3392 bfd_vma value, unsigned long r_symndx, 3393 struct mips_elf_link_hash_entry *h, int r_type) 3394 { 3395 struct mips_elf_link_hash_table *htab; 3396 struct mips_got_entry *entry; 3397 3398 htab = mips_elf_hash_table (info); 3399 BFD_ASSERT (htab != NULL); 3400 3401 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 3402 r_symndx, h, r_type); 3403 if (!entry) 3404 return MINUS_ONE; 3405 3406 if (entry->tls_type) 3407 mips_elf_initialize_tls_slots (abfd, info, entry, h, value); 3408 return entry->gotidx; 3409 } 3410 3411 /* Return the GOT index of global symbol H in the primary GOT. */ 3412 3413 static bfd_vma 3414 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info, 3415 struct elf_link_hash_entry *h) 3416 { 3417 struct mips_elf_link_hash_table *htab; 3418 long global_got_dynindx; 3419 struct mips_got_info *g; 3420 bfd_vma got_index; 3421 3422 htab = mips_elf_hash_table (info); 3423 BFD_ASSERT (htab != NULL); 3424 3425 global_got_dynindx = 0; 3426 if (htab->global_gotsym != NULL) 3427 global_got_dynindx = htab->global_gotsym->dynindx; 3428 3429 /* Once we determine the global GOT entry with the lowest dynamic 3430 symbol table index, we must put all dynamic symbols with greater 3431 indices into the primary GOT. That makes it easy to calculate the 3432 GOT offset. */ 3433 BFD_ASSERT (h->dynindx >= global_got_dynindx); 3434 g = mips_elf_bfd_got (obfd, FALSE); 3435 got_index = ((h->dynindx - global_got_dynindx + g->local_gotno) 3436 * MIPS_ELF_GOT_SIZE (obfd)); 3437 BFD_ASSERT (got_index < htab->sgot->size); 3438 3439 return got_index; 3440 } 3441 3442 /* Return the GOT index for the global symbol indicated by H, which is 3443 referenced by a relocation of type R_TYPE in IBFD. */ 3444 3445 static bfd_vma 3446 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd, 3447 struct elf_link_hash_entry *h, int r_type) 3448 { 3449 struct mips_elf_link_hash_table *htab; 3450 struct mips_got_info *g; 3451 struct mips_got_entry lookup, *entry; 3452 bfd_vma gotidx; 3453 3454 htab = mips_elf_hash_table (info); 3455 BFD_ASSERT (htab != NULL); 3456 3457 g = mips_elf_bfd_got (ibfd, FALSE); 3458 BFD_ASSERT (g); 3459 3460 lookup.tls_type = mips_elf_reloc_tls_type (r_type); 3461 if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE)) 3462 return mips_elf_primary_global_got_index (obfd, info, h); 3463 3464 lookup.abfd = ibfd; 3465 lookup.symndx = -1; 3466 lookup.d.h = (struct mips_elf_link_hash_entry *) h; 3467 entry = htab_find (g->got_entries, &lookup); 3468 BFD_ASSERT (entry); 3469 3470 gotidx = entry->gotidx; 3471 BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size); 3472 3473 if (lookup.tls_type) 3474 { 3475 bfd_vma value = MINUS_ONE; 3476 3477 if ((h->root.type == bfd_link_hash_defined 3478 || h->root.type == bfd_link_hash_defweak) 3479 && h->root.u.def.section->output_section) 3480 value = (h->root.u.def.value 3481 + h->root.u.def.section->output_offset 3482 + h->root.u.def.section->output_section->vma); 3483 3484 mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value); 3485 } 3486 return gotidx; 3487 } 3488 3489 /* Find a GOT page entry that points to within 32KB of VALUE. These 3490 entries are supposed to be placed at small offsets in the GOT, i.e., 3491 within 32KB of GP. Return the index of the GOT entry, or -1 if no 3492 entry could be created. If OFFSETP is nonnull, use it to return the 3493 offset of the GOT entry from VALUE. */ 3494 3495 static bfd_vma 3496 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, 3497 bfd_vma value, bfd_vma *offsetp) 3498 { 3499 bfd_vma page, got_index; 3500 struct mips_got_entry *entry; 3501 3502 page = (value + 0x8000) & ~(bfd_vma) 0xffff; 3503 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0, 3504 NULL, R_MIPS_GOT_PAGE); 3505 3506 if (!entry) 3507 return MINUS_ONE; 3508 3509 got_index = entry->gotidx; 3510 3511 if (offsetp) 3512 *offsetp = value - entry->d.address; 3513 3514 return got_index; 3515 } 3516 3517 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE. 3518 EXTERNAL is true if the relocation was originally against a global 3519 symbol that binds locally. */ 3520 3521 static bfd_vma 3522 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, 3523 bfd_vma value, bfd_boolean external) 3524 { 3525 struct mips_got_entry *entry; 3526 3527 /* GOT16 relocations against local symbols are followed by a LO16 3528 relocation; those against global symbols are not. Thus if the 3529 symbol was originally local, the GOT16 relocation should load the 3530 equivalent of %hi(VALUE), otherwise it should load VALUE itself. */ 3531 if (! external) 3532 value = mips_elf_high (value) << 16; 3533 3534 /* It doesn't matter whether the original relocation was R_MIPS_GOT16, 3535 R_MIPS16_GOT16, R_MIPS_CALL16, etc. The format of the entry is the 3536 same in all cases. */ 3537 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0, 3538 NULL, R_MIPS_GOT16); 3539 if (entry) 3540 return entry->gotidx; 3541 else 3542 return MINUS_ONE; 3543 } 3544 3545 /* Returns the offset for the entry at the INDEXth position 3546 in the GOT. */ 3547 3548 static bfd_vma 3549 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd, 3550 bfd *input_bfd, bfd_vma got_index) 3551 { 3552 struct mips_elf_link_hash_table *htab; 3553 asection *sgot; 3554 bfd_vma gp; 3555 3556 htab = mips_elf_hash_table (info); 3557 BFD_ASSERT (htab != NULL); 3558 3559 sgot = htab->sgot; 3560 gp = _bfd_get_gp_value (output_bfd) 3561 + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd); 3562 3563 return sgot->output_section->vma + sgot->output_offset + got_index - gp; 3564 } 3565 3566 /* Create and return a local GOT entry for VALUE, which was calculated 3567 from a symbol belonging to INPUT_SECTON. Return NULL if it could not 3568 be created. If R_SYMNDX refers to a TLS symbol, create a TLS entry 3569 instead. */ 3570 3571 static struct mips_got_entry * 3572 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info, 3573 bfd *ibfd, bfd_vma value, 3574 unsigned long r_symndx, 3575 struct mips_elf_link_hash_entry *h, 3576 int r_type) 3577 { 3578 struct mips_got_entry lookup, *entry; 3579 void **loc; 3580 struct mips_got_info *g; 3581 struct mips_elf_link_hash_table *htab; 3582 bfd_vma gotidx; 3583 3584 htab = mips_elf_hash_table (info); 3585 BFD_ASSERT (htab != NULL); 3586 3587 g = mips_elf_bfd_got (ibfd, FALSE); 3588 if (g == NULL) 3589 { 3590 g = mips_elf_bfd_got (abfd, FALSE); 3591 BFD_ASSERT (g != NULL); 3592 } 3593 3594 /* This function shouldn't be called for symbols that live in the global 3595 area of the GOT. */ 3596 BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE); 3597 3598 lookup.tls_type = mips_elf_reloc_tls_type (r_type); 3599 if (lookup.tls_type) 3600 { 3601 lookup.abfd = ibfd; 3602 if (tls_ldm_reloc_p (r_type)) 3603 { 3604 lookup.symndx = 0; 3605 lookup.d.addend = 0; 3606 } 3607 else if (h == NULL) 3608 { 3609 lookup.symndx = r_symndx; 3610 lookup.d.addend = 0; 3611 } 3612 else 3613 { 3614 lookup.symndx = -1; 3615 lookup.d.h = h; 3616 } 3617 3618 entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup); 3619 BFD_ASSERT (entry); 3620 3621 gotidx = entry->gotidx; 3622 BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size); 3623 3624 return entry; 3625 } 3626 3627 lookup.abfd = NULL; 3628 lookup.symndx = -1; 3629 lookup.d.address = value; 3630 loc = htab_find_slot (g->got_entries, &lookup, INSERT); 3631 if (!loc) 3632 return NULL; 3633 3634 entry = (struct mips_got_entry *) *loc; 3635 if (entry) 3636 return entry; 3637 3638 if (g->assigned_gotno >= g->local_gotno) 3639 { 3640 /* We didn't allocate enough space in the GOT. */ 3641 (*_bfd_error_handler) 3642 (_("not enough GOT space for local GOT entries")); 3643 bfd_set_error (bfd_error_bad_value); 3644 return NULL; 3645 } 3646 3647 entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry)); 3648 if (!entry) 3649 return NULL; 3650 3651 lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++; 3652 *entry = lookup; 3653 *loc = entry; 3654 3655 MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx); 3656 3657 /* These GOT entries need a dynamic relocation on VxWorks. */ 3658 if (htab->is_vxworks) 3659 { 3660 Elf_Internal_Rela outrel; 3661 asection *s; 3662 bfd_byte *rloc; 3663 bfd_vma got_address; 3664 3665 s = mips_elf_rel_dyn_section (info, FALSE); 3666 got_address = (htab->sgot->output_section->vma 3667 + htab->sgot->output_offset 3668 + entry->gotidx); 3669 3670 rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela)); 3671 outrel.r_offset = got_address; 3672 outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32); 3673 outrel.r_addend = value; 3674 bfd_elf32_swap_reloca_out (abfd, &outrel, rloc); 3675 } 3676 3677 return entry; 3678 } 3679 3680 /* Return the number of dynamic section symbols required by OUTPUT_BFD. 3681 The number might be exact or a worst-case estimate, depending on how 3682 much information is available to elf_backend_omit_section_dynsym at 3683 the current linking stage. */ 3684 3685 static bfd_size_type 3686 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info) 3687 { 3688 bfd_size_type count; 3689 3690 count = 0; 3691 if (info->shared || elf_hash_table (info)->is_relocatable_executable) 3692 { 3693 asection *p; 3694 const struct elf_backend_data *bed; 3695 3696 bed = get_elf_backend_data (output_bfd); 3697 for (p = output_bfd->sections; p ; p = p->next) 3698 if ((p->flags & SEC_EXCLUDE) == 0 3699 && (p->flags & SEC_ALLOC) != 0 3700 && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p)) 3701 ++count; 3702 } 3703 return count; 3704 } 3705 3706 /* Sort the dynamic symbol table so that symbols that need GOT entries 3707 appear towards the end. */ 3708 3709 static bfd_boolean 3710 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info) 3711 { 3712 struct mips_elf_link_hash_table *htab; 3713 struct mips_elf_hash_sort_data hsd; 3714 struct mips_got_info *g; 3715 3716 if (elf_hash_table (info)->dynsymcount == 0) 3717 return TRUE; 3718 3719 htab = mips_elf_hash_table (info); 3720 BFD_ASSERT (htab != NULL); 3721 3722 g = htab->got_info; 3723 if (g == NULL) 3724 return TRUE; 3725 3726 hsd.low = NULL; 3727 hsd.max_unref_got_dynindx 3728 = hsd.min_got_dynindx 3729 = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno); 3730 hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1; 3731 mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *) 3732 elf_hash_table (info)), 3733 mips_elf_sort_hash_table_f, 3734 &hsd); 3735 3736 /* There should have been enough room in the symbol table to 3737 accommodate both the GOT and non-GOT symbols. */ 3738 BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx); 3739 BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx 3740 == elf_hash_table (info)->dynsymcount); 3741 BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx 3742 == g->global_gotno); 3743 3744 /* Now we know which dynamic symbol has the lowest dynamic symbol 3745 table index in the GOT. */ 3746 htab->global_gotsym = hsd.low; 3747 3748 return TRUE; 3749 } 3750 3751 /* If H needs a GOT entry, assign it the highest available dynamic 3752 index. Otherwise, assign it the lowest available dynamic 3753 index. */ 3754 3755 static bfd_boolean 3756 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data) 3757 { 3758 struct mips_elf_hash_sort_data *hsd = data; 3759 3760 /* Symbols without dynamic symbol table entries aren't interesting 3761 at all. */ 3762 if (h->root.dynindx == -1) 3763 return TRUE; 3764 3765 switch (h->global_got_area) 3766 { 3767 case GGA_NONE: 3768 h->root.dynindx = hsd->max_non_got_dynindx++; 3769 break; 3770 3771 case GGA_NORMAL: 3772 h->root.dynindx = --hsd->min_got_dynindx; 3773 hsd->low = (struct elf_link_hash_entry *) h; 3774 break; 3775 3776 case GGA_RELOC_ONLY: 3777 if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx) 3778 hsd->low = (struct elf_link_hash_entry *) h; 3779 h->root.dynindx = hsd->max_unref_got_dynindx++; 3780 break; 3781 } 3782 3783 return TRUE; 3784 } 3785 3786 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP 3787 (which is owned by the caller and shouldn't be added to the 3788 hash table directly). */ 3789 3790 static bfd_boolean 3791 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd, 3792 struct mips_got_entry *lookup) 3793 { 3794 struct mips_elf_link_hash_table *htab; 3795 struct mips_got_entry *entry; 3796 struct mips_got_info *g; 3797 void **loc, **bfd_loc; 3798 3799 /* Make sure there's a slot for this entry in the master GOT. */ 3800 htab = mips_elf_hash_table (info); 3801 g = htab->got_info; 3802 loc = htab_find_slot (g->got_entries, lookup, INSERT); 3803 if (!loc) 3804 return FALSE; 3805 3806 /* Populate the entry if it isn't already. */ 3807 entry = (struct mips_got_entry *) *loc; 3808 if (!entry) 3809 { 3810 entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry)); 3811 if (!entry) 3812 return FALSE; 3813 3814 lookup->tls_initialized = FALSE; 3815 lookup->gotidx = -1; 3816 *entry = *lookup; 3817 *loc = entry; 3818 } 3819 3820 /* Reuse the same GOT entry for the BFD's GOT. */ 3821 g = mips_elf_bfd_got (abfd, TRUE); 3822 if (!g) 3823 return FALSE; 3824 3825 bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT); 3826 if (!bfd_loc) 3827 return FALSE; 3828 3829 if (!*bfd_loc) 3830 *bfd_loc = entry; 3831 return TRUE; 3832 } 3833 3834 /* ABFD has a GOT relocation of type R_TYPE against H. Reserve a GOT 3835 entry for it. FOR_CALL is true if the caller is only interested in 3836 using the GOT entry for calls. */ 3837 3838 static bfd_boolean 3839 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h, 3840 bfd *abfd, struct bfd_link_info *info, 3841 bfd_boolean for_call, int r_type) 3842 { 3843 struct mips_elf_link_hash_table *htab; 3844 struct mips_elf_link_hash_entry *hmips; 3845 struct mips_got_entry entry; 3846 unsigned char tls_type; 3847 3848 htab = mips_elf_hash_table (info); 3849 BFD_ASSERT (htab != NULL); 3850 3851 hmips = (struct mips_elf_link_hash_entry *) h; 3852 if (!for_call) 3853 hmips->got_only_for_calls = FALSE; 3854 3855 /* A global symbol in the GOT must also be in the dynamic symbol 3856 table. */ 3857 if (h->dynindx == -1) 3858 { 3859 switch (ELF_ST_VISIBILITY (h->other)) 3860 { 3861 case STV_INTERNAL: 3862 case STV_HIDDEN: 3863 _bfd_elf_link_hash_hide_symbol (info, h, TRUE); 3864 break; 3865 } 3866 if (!bfd_elf_link_record_dynamic_symbol (info, h)) 3867 return FALSE; 3868 } 3869 3870 tls_type = mips_elf_reloc_tls_type (r_type); 3871 if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL) 3872 hmips->global_got_area = GGA_NORMAL; 3873 3874 entry.abfd = abfd; 3875 entry.symndx = -1; 3876 entry.d.h = (struct mips_elf_link_hash_entry *) h; 3877 entry.tls_type = tls_type; 3878 return mips_elf_record_got_entry (info, abfd, &entry); 3879 } 3880 3881 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND, 3882 where SYMNDX is a local symbol. Reserve a GOT entry for it. */ 3883 3884 static bfd_boolean 3885 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend, 3886 struct bfd_link_info *info, int r_type) 3887 { 3888 struct mips_elf_link_hash_table *htab; 3889 struct mips_got_info *g; 3890 struct mips_got_entry entry; 3891 3892 htab = mips_elf_hash_table (info); 3893 BFD_ASSERT (htab != NULL); 3894 3895 g = htab->got_info; 3896 BFD_ASSERT (g != NULL); 3897 3898 entry.abfd = abfd; 3899 entry.symndx = symndx; 3900 entry.d.addend = addend; 3901 entry.tls_type = mips_elf_reloc_tls_type (r_type); 3902 return mips_elf_record_got_entry (info, abfd, &entry); 3903 } 3904 3905 /* Record that ABFD has a page relocation against SYMNDX + ADDEND. 3906 H is the symbol's hash table entry, or null if SYMNDX is local 3907 to ABFD. */ 3908 3909 static bfd_boolean 3910 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd, 3911 long symndx, struct elf_link_hash_entry *h, 3912 bfd_signed_vma addend) 3913 { 3914 struct mips_elf_link_hash_table *htab; 3915 struct mips_got_info *g1, *g2; 3916 struct mips_got_page_ref lookup, *entry; 3917 void **loc, **bfd_loc; 3918 3919 htab = mips_elf_hash_table (info); 3920 BFD_ASSERT (htab != NULL); 3921 3922 g1 = htab->got_info; 3923 BFD_ASSERT (g1 != NULL); 3924 3925 if (h) 3926 { 3927 lookup.symndx = -1; 3928 lookup.u.h = (struct mips_elf_link_hash_entry *) h; 3929 } 3930 else 3931 { 3932 lookup.symndx = symndx; 3933 lookup.u.abfd = abfd; 3934 } 3935 lookup.addend = addend; 3936 loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT); 3937 if (loc == NULL) 3938 return FALSE; 3939 3940 entry = (struct mips_got_page_ref *) *loc; 3941 if (!entry) 3942 { 3943 entry = bfd_alloc (abfd, sizeof (*entry)); 3944 if (!entry) 3945 return FALSE; 3946 3947 *entry = lookup; 3948 *loc = entry; 3949 } 3950 3951 /* Add the same entry to the BFD's GOT. */ 3952 g2 = mips_elf_bfd_got (abfd, TRUE); 3953 if (!g2) 3954 return FALSE; 3955 3956 bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT); 3957 if (!bfd_loc) 3958 return FALSE; 3959 3960 if (!*bfd_loc) 3961 *bfd_loc = entry; 3962 3963 return TRUE; 3964 } 3965 3966 /* Add room for N relocations to the .rel(a).dyn section in ABFD. */ 3967 3968 static void 3969 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info, 3970 unsigned int n) 3971 { 3972 asection *s; 3973 struct mips_elf_link_hash_table *htab; 3974 3975 htab = mips_elf_hash_table (info); 3976 BFD_ASSERT (htab != NULL); 3977 3978 s = mips_elf_rel_dyn_section (info, FALSE); 3979 BFD_ASSERT (s != NULL); 3980 3981 if (htab->is_vxworks) 3982 s->size += n * MIPS_ELF_RELA_SIZE (abfd); 3983 else 3984 { 3985 if (s->size == 0) 3986 { 3987 /* Make room for a null element. */ 3988 s->size += MIPS_ELF_REL_SIZE (abfd); 3989 ++s->reloc_count; 3990 } 3991 s->size += n * MIPS_ELF_REL_SIZE (abfd); 3992 } 3993 } 3994 3995 /* A htab_traverse callback for GOT entries, with DATA pointing to a 3996 mips_elf_traverse_got_arg structure. Count the number of GOT 3997 entries and TLS relocs. Set DATA->value to true if we need 3998 to resolve indirect or warning symbols and then recreate the GOT. */ 3999 4000 static int 4001 mips_elf_check_recreate_got (void **entryp, void *data) 4002 { 4003 struct mips_got_entry *entry; 4004 struct mips_elf_traverse_got_arg *arg; 4005 4006 entry = (struct mips_got_entry *) *entryp; 4007 arg = (struct mips_elf_traverse_got_arg *) data; 4008 if (entry->abfd != NULL && entry->symndx == -1) 4009 { 4010 struct mips_elf_link_hash_entry *h; 4011 4012 h = entry->d.h; 4013 if (h->root.root.type == bfd_link_hash_indirect 4014 || h->root.root.type == bfd_link_hash_warning) 4015 { 4016 arg->value = TRUE; 4017 return 0; 4018 } 4019 } 4020 mips_elf_count_got_entry (arg->info, arg->g, entry); 4021 return 1; 4022 } 4023 4024 /* A htab_traverse callback for GOT entries, with DATA pointing to a 4025 mips_elf_traverse_got_arg structure. Add all entries to DATA->g, 4026 converting entries for indirect and warning symbols into entries 4027 for the target symbol. Set DATA->g to null on error. */ 4028 4029 static int 4030 mips_elf_recreate_got (void **entryp, void *data) 4031 { 4032 struct mips_got_entry new_entry, *entry; 4033 struct mips_elf_traverse_got_arg *arg; 4034 void **slot; 4035 4036 entry = (struct mips_got_entry *) *entryp; 4037 arg = (struct mips_elf_traverse_got_arg *) data; 4038 if (entry->abfd != NULL 4039 && entry->symndx == -1 4040 && (entry->d.h->root.root.type == bfd_link_hash_indirect 4041 || entry->d.h->root.root.type == bfd_link_hash_warning)) 4042 { 4043 struct mips_elf_link_hash_entry *h; 4044 4045 new_entry = *entry; 4046 entry = &new_entry; 4047 h = entry->d.h; 4048 do 4049 { 4050 BFD_ASSERT (h->global_got_area == GGA_NONE); 4051 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 4052 } 4053 while (h->root.root.type == bfd_link_hash_indirect 4054 || h->root.root.type == bfd_link_hash_warning); 4055 entry->d.h = h; 4056 } 4057 slot = htab_find_slot (arg->g->got_entries, entry, INSERT); 4058 if (slot == NULL) 4059 { 4060 arg->g = NULL; 4061 return 0; 4062 } 4063 if (*slot == NULL) 4064 { 4065 if (entry == &new_entry) 4066 { 4067 entry = bfd_alloc (entry->abfd, sizeof (*entry)); 4068 if (!entry) 4069 { 4070 arg->g = NULL; 4071 return 0; 4072 } 4073 *entry = new_entry; 4074 } 4075 *slot = entry; 4076 mips_elf_count_got_entry (arg->info, arg->g, entry); 4077 } 4078 return 1; 4079 } 4080 4081 /* Return the maximum number of GOT page entries required for RANGE. */ 4082 4083 static bfd_vma 4084 mips_elf_pages_for_range (const struct mips_got_page_range *range) 4085 { 4086 return (range->max_addend - range->min_addend + 0x1ffff) >> 16; 4087 } 4088 4089 /* Record that G requires a page entry that can reach SEC + ADDEND. */ 4090 4091 static bfd_boolean 4092 mips_elf_record_got_page_entry (struct mips_got_info *g, 4093 asection *sec, bfd_signed_vma addend) 4094 { 4095 struct mips_got_page_entry lookup, *entry; 4096 struct mips_got_page_range **range_ptr, *range; 4097 bfd_vma old_pages, new_pages; 4098 void **loc; 4099 4100 /* Find the mips_got_page_entry hash table entry for this section. */ 4101 lookup.sec = sec; 4102 loc = htab_find_slot (g->got_page_entries, &lookup, INSERT); 4103 if (loc == NULL) 4104 return FALSE; 4105 4106 /* Create a mips_got_page_entry if this is the first time we've 4107 seen the section. */ 4108 entry = (struct mips_got_page_entry *) *loc; 4109 if (!entry) 4110 { 4111 entry = bfd_zalloc (sec->owner, sizeof (*entry)); 4112 if (!entry) 4113 return FALSE; 4114 4115 entry->sec = sec; 4116 *loc = entry; 4117 } 4118 4119 /* Skip over ranges whose maximum extent cannot share a page entry 4120 with ADDEND. */ 4121 range_ptr = &entry->ranges; 4122 while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff) 4123 range_ptr = &(*range_ptr)->next; 4124 4125 /* If we scanned to the end of the list, or found a range whose 4126 minimum extent cannot share a page entry with ADDEND, create 4127 a new singleton range. */ 4128 range = *range_ptr; 4129 if (!range || addend < range->min_addend - 0xffff) 4130 { 4131 range = bfd_zalloc (sec->owner, sizeof (*range)); 4132 if (!range) 4133 return FALSE; 4134 4135 range->next = *range_ptr; 4136 range->min_addend = addend; 4137 range->max_addend = addend; 4138 4139 *range_ptr = range; 4140 entry->num_pages++; 4141 g->page_gotno++; 4142 return TRUE; 4143 } 4144 4145 /* Remember how many pages the old range contributed. */ 4146 old_pages = mips_elf_pages_for_range (range); 4147 4148 /* Update the ranges. */ 4149 if (addend < range->min_addend) 4150 range->min_addend = addend; 4151 else if (addend > range->max_addend) 4152 { 4153 if (range->next && addend >= range->next->min_addend - 0xffff) 4154 { 4155 old_pages += mips_elf_pages_for_range (range->next); 4156 range->max_addend = range->next->max_addend; 4157 range->next = range->next->next; 4158 } 4159 else 4160 range->max_addend = addend; 4161 } 4162 4163 /* Record any change in the total estimate. */ 4164 new_pages = mips_elf_pages_for_range (range); 4165 if (old_pages != new_pages) 4166 { 4167 entry->num_pages += new_pages - old_pages; 4168 g->page_gotno += new_pages - old_pages; 4169 } 4170 4171 return TRUE; 4172 } 4173 4174 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref 4175 and for which DATA points to a mips_elf_traverse_got_arg. Work out 4176 whether the page reference described by *REFP needs a GOT page entry, 4177 and record that entry in DATA->g if so. Set DATA->g to null on failure. */ 4178 4179 static bfd_boolean 4180 mips_elf_resolve_got_page_ref (void **refp, void *data) 4181 { 4182 struct mips_got_page_ref *ref; 4183 struct mips_elf_traverse_got_arg *arg; 4184 struct mips_elf_link_hash_table *htab; 4185 asection *sec; 4186 bfd_vma addend; 4187 4188 ref = (struct mips_got_page_ref *) *refp; 4189 arg = (struct mips_elf_traverse_got_arg *) data; 4190 htab = mips_elf_hash_table (arg->info); 4191 4192 if (ref->symndx < 0) 4193 { 4194 struct mips_elf_link_hash_entry *h; 4195 4196 /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries. */ 4197 h = ref->u.h; 4198 if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root)) 4199 return 1; 4200 4201 /* Ignore undefined symbols; we'll issue an error later if 4202 appropriate. */ 4203 if (!((h->root.root.type == bfd_link_hash_defined 4204 || h->root.root.type == bfd_link_hash_defweak) 4205 && h->root.root.u.def.section)) 4206 return 1; 4207 4208 sec = h->root.root.u.def.section; 4209 addend = h->root.root.u.def.value + ref->addend; 4210 } 4211 else 4212 { 4213 Elf_Internal_Sym *isym; 4214 4215 /* Read in the symbol. */ 4216 isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd, 4217 ref->symndx); 4218 if (isym == NULL) 4219 { 4220 arg->g = NULL; 4221 return 0; 4222 } 4223 4224 /* Get the associated input section. */ 4225 sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx); 4226 if (sec == NULL) 4227 { 4228 arg->g = NULL; 4229 return 0; 4230 } 4231 4232 /* If this is a mergable section, work out the section and offset 4233 of the merged data. For section symbols, the addend specifies 4234 of the offset _of_ the first byte in the data, otherwise it 4235 specifies the offset _from_ the first byte. */ 4236 if (sec->flags & SEC_MERGE) 4237 { 4238 void *secinfo; 4239 4240 secinfo = elf_section_data (sec)->sec_info; 4241 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION) 4242 addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo, 4243 isym->st_value + ref->addend); 4244 else 4245 addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo, 4246 isym->st_value) + ref->addend; 4247 } 4248 else 4249 addend = isym->st_value + ref->addend; 4250 } 4251 if (!mips_elf_record_got_page_entry (arg->g, sec, addend)) 4252 { 4253 arg->g = NULL; 4254 return 0; 4255 } 4256 return 1; 4257 } 4258 4259 /* If any entries in G->got_entries are for indirect or warning symbols, 4260 replace them with entries for the target symbol. Convert g->got_page_refs 4261 into got_page_entry structures and estimate the number of page entries 4262 that they require. */ 4263 4264 static bfd_boolean 4265 mips_elf_resolve_final_got_entries (struct bfd_link_info *info, 4266 struct mips_got_info *g) 4267 { 4268 struct mips_elf_traverse_got_arg tga; 4269 struct mips_got_info oldg; 4270 4271 oldg = *g; 4272 4273 tga.info = info; 4274 tga.g = g; 4275 tga.value = FALSE; 4276 htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga); 4277 if (tga.value) 4278 { 4279 *g = oldg; 4280 g->got_entries = htab_create (htab_size (oldg.got_entries), 4281 mips_elf_got_entry_hash, 4282 mips_elf_got_entry_eq, NULL); 4283 if (!g->got_entries) 4284 return FALSE; 4285 4286 htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga); 4287 if (!tga.g) 4288 return FALSE; 4289 4290 htab_delete (oldg.got_entries); 4291 } 4292 4293 g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash, 4294 mips_got_page_entry_eq, NULL); 4295 if (g->got_page_entries == NULL) 4296 return FALSE; 4297 4298 tga.info = info; 4299 tga.g = g; 4300 htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga); 4301 4302 return TRUE; 4303 } 4304 4305 /* Return true if a GOT entry for H should live in the local rather than 4306 global GOT area. */ 4307 4308 static bfd_boolean 4309 mips_use_local_got_p (struct bfd_link_info *info, 4310 struct mips_elf_link_hash_entry *h) 4311 { 4312 /* Symbols that aren't in the dynamic symbol table must live in the 4313 local GOT. This includes symbols that are completely undefined 4314 and which therefore don't bind locally. We'll report undefined 4315 symbols later if appropriate. */ 4316 if (h->root.dynindx == -1) 4317 return TRUE; 4318 4319 /* Symbols that bind locally can (and in the case of forced-local 4320 symbols, must) live in the local GOT. */ 4321 if (h->got_only_for_calls 4322 ? SYMBOL_CALLS_LOCAL (info, &h->root) 4323 : SYMBOL_REFERENCES_LOCAL (info, &h->root)) 4324 return TRUE; 4325 4326 /* If this is an executable that must provide a definition of the symbol, 4327 either though PLTs or copy relocations, then that address should go in 4328 the local rather than global GOT. */ 4329 if (info->executable && h->has_static_relocs) 4330 return TRUE; 4331 4332 return FALSE; 4333 } 4334 4335 /* A mips_elf_link_hash_traverse callback for which DATA points to the 4336 link_info structure. Decide whether the hash entry needs an entry in 4337 the global part of the primary GOT, setting global_got_area accordingly. 4338 Count the number of global symbols that are in the primary GOT only 4339 because they have relocations against them (reloc_only_gotno). */ 4340 4341 static int 4342 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data) 4343 { 4344 struct bfd_link_info *info; 4345 struct mips_elf_link_hash_table *htab; 4346 struct mips_got_info *g; 4347 4348 info = (struct bfd_link_info *) data; 4349 htab = mips_elf_hash_table (info); 4350 g = htab->got_info; 4351 if (h->global_got_area != GGA_NONE) 4352 { 4353 /* Make a final decision about whether the symbol belongs in the 4354 local or global GOT. */ 4355 if (mips_use_local_got_p (info, h)) 4356 /* The symbol belongs in the local GOT. We no longer need this 4357 entry if it was only used for relocations; those relocations 4358 will be against the null or section symbol instead of H. */ 4359 h->global_got_area = GGA_NONE; 4360 else if (htab->is_vxworks 4361 && h->got_only_for_calls 4362 && h->root.plt.plist->mips_offset != MINUS_ONE) 4363 /* On VxWorks, calls can refer directly to the .got.plt entry; 4364 they don't need entries in the regular GOT. .got.plt entries 4365 will be allocated by _bfd_mips_elf_adjust_dynamic_symbol. */ 4366 h->global_got_area = GGA_NONE; 4367 else if (h->global_got_area == GGA_RELOC_ONLY) 4368 { 4369 g->reloc_only_gotno++; 4370 g->global_gotno++; 4371 } 4372 } 4373 return 1; 4374 } 4375 4376 /* A htab_traverse callback for GOT entries. Add each one to the GOT 4377 given in mips_elf_traverse_got_arg DATA. Clear DATA->G on error. */ 4378 4379 static int 4380 mips_elf_add_got_entry (void **entryp, void *data) 4381 { 4382 struct mips_got_entry *entry; 4383 struct mips_elf_traverse_got_arg *arg; 4384 void **slot; 4385 4386 entry = (struct mips_got_entry *) *entryp; 4387 arg = (struct mips_elf_traverse_got_arg *) data; 4388 slot = htab_find_slot (arg->g->got_entries, entry, INSERT); 4389 if (!slot) 4390 { 4391 arg->g = NULL; 4392 return 0; 4393 } 4394 if (!*slot) 4395 { 4396 *slot = entry; 4397 mips_elf_count_got_entry (arg->info, arg->g, entry); 4398 } 4399 return 1; 4400 } 4401 4402 /* A htab_traverse callback for GOT page entries. Add each one to the GOT 4403 given in mips_elf_traverse_got_arg DATA. Clear DATA->G on error. */ 4404 4405 static int 4406 mips_elf_add_got_page_entry (void **entryp, void *data) 4407 { 4408 struct mips_got_page_entry *entry; 4409 struct mips_elf_traverse_got_arg *arg; 4410 void **slot; 4411 4412 entry = (struct mips_got_page_entry *) *entryp; 4413 arg = (struct mips_elf_traverse_got_arg *) data; 4414 slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT); 4415 if (!slot) 4416 { 4417 arg->g = NULL; 4418 return 0; 4419 } 4420 if (!*slot) 4421 { 4422 *slot = entry; 4423 arg->g->page_gotno += entry->num_pages; 4424 } 4425 return 1; 4426 } 4427 4428 /* Consider merging FROM, which is ABFD's GOT, into TO. Return -1 if 4429 this would lead to overflow, 1 if they were merged successfully, 4430 and 0 if a merge failed due to lack of memory. (These values are chosen 4431 so that nonnegative return values can be returned by a htab_traverse 4432 callback.) */ 4433 4434 static int 4435 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from, 4436 struct mips_got_info *to, 4437 struct mips_elf_got_per_bfd_arg *arg) 4438 { 4439 struct mips_elf_traverse_got_arg tga; 4440 unsigned int estimate; 4441 4442 /* Work out how many page entries we would need for the combined GOT. */ 4443 estimate = arg->max_pages; 4444 if (estimate >= from->page_gotno + to->page_gotno) 4445 estimate = from->page_gotno + to->page_gotno; 4446 4447 /* And conservatively estimate how many local and TLS entries 4448 would be needed. */ 4449 estimate += from->local_gotno + to->local_gotno; 4450 estimate += from->tls_gotno + to->tls_gotno; 4451 4452 /* If we're merging with the primary got, any TLS relocations will 4453 come after the full set of global entries. Otherwise estimate those 4454 conservatively as well. */ 4455 if (to == arg->primary && from->tls_gotno + to->tls_gotno) 4456 estimate += arg->global_count; 4457 else 4458 estimate += from->global_gotno + to->global_gotno; 4459 4460 /* Bail out if the combined GOT might be too big. */ 4461 if (estimate > arg->max_count) 4462 return -1; 4463 4464 /* Transfer the bfd's got information from FROM to TO. */ 4465 tga.info = arg->info; 4466 tga.g = to; 4467 htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga); 4468 if (!tga.g) 4469 return 0; 4470 4471 htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga); 4472 if (!tga.g) 4473 return 0; 4474 4475 mips_elf_replace_bfd_got (abfd, to); 4476 return 1; 4477 } 4478 4479 /* Attempt to merge GOT G, which belongs to ABFD. Try to use as much 4480 as possible of the primary got, since it doesn't require explicit 4481 dynamic relocations, but don't use bfds that would reference global 4482 symbols out of the addressable range. Failing the primary got, 4483 attempt to merge with the current got, or finish the current got 4484 and then make make the new got current. */ 4485 4486 static bfd_boolean 4487 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g, 4488 struct mips_elf_got_per_bfd_arg *arg) 4489 { 4490 unsigned int estimate; 4491 int result; 4492 4493 if (!mips_elf_resolve_final_got_entries (arg->info, g)) 4494 return FALSE; 4495 4496 /* Work out the number of page, local and TLS entries. */ 4497 estimate = arg->max_pages; 4498 if (estimate > g->page_gotno) 4499 estimate = g->page_gotno; 4500 estimate += g->local_gotno + g->tls_gotno; 4501 4502 /* We place TLS GOT entries after both locals and globals. The globals 4503 for the primary GOT may overflow the normal GOT size limit, so be 4504 sure not to merge a GOT which requires TLS with the primary GOT in that 4505 case. This doesn't affect non-primary GOTs. */ 4506 estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno); 4507 4508 if (estimate <= arg->max_count) 4509 { 4510 /* If we don't have a primary GOT, use it as 4511 a starting point for the primary GOT. */ 4512 if (!arg->primary) 4513 { 4514 arg->primary = g; 4515 return TRUE; 4516 } 4517 4518 /* Try merging with the primary GOT. */ 4519 result = mips_elf_merge_got_with (abfd, g, arg->primary, arg); 4520 if (result >= 0) 4521 return result; 4522 } 4523 4524 /* If we can merge with the last-created got, do it. */ 4525 if (arg->current) 4526 { 4527 result = mips_elf_merge_got_with (abfd, g, arg->current, arg); 4528 if (result >= 0) 4529 return result; 4530 } 4531 4532 /* Well, we couldn't merge, so create a new GOT. Don't check if it 4533 fits; if it turns out that it doesn't, we'll get relocation 4534 overflows anyway. */ 4535 g->next = arg->current; 4536 arg->current = g; 4537 4538 return TRUE; 4539 } 4540 4541 /* ENTRYP is a hash table entry for a mips_got_entry. Set its gotidx 4542 to GOTIDX, duplicating the entry if it has already been assigned 4543 an index in a different GOT. */ 4544 4545 static bfd_boolean 4546 mips_elf_set_gotidx (void **entryp, long gotidx) 4547 { 4548 struct mips_got_entry *entry; 4549 4550 entry = (struct mips_got_entry *) *entryp; 4551 if (entry->gotidx > 0) 4552 { 4553 struct mips_got_entry *new_entry; 4554 4555 new_entry = bfd_alloc (entry->abfd, sizeof (*entry)); 4556 if (!new_entry) 4557 return FALSE; 4558 4559 *new_entry = *entry; 4560 *entryp = new_entry; 4561 entry = new_entry; 4562 } 4563 entry->gotidx = gotidx; 4564 return TRUE; 4565 } 4566 4567 /* Set the TLS GOT index for the GOT entry in ENTRYP. DATA points to a 4568 mips_elf_traverse_got_arg in which DATA->value is the size of one 4569 GOT entry. Set DATA->g to null on failure. */ 4570 4571 static int 4572 mips_elf_initialize_tls_index (void **entryp, void *data) 4573 { 4574 struct mips_got_entry *entry; 4575 struct mips_elf_traverse_got_arg *arg; 4576 4577 /* We're only interested in TLS symbols. */ 4578 entry = (struct mips_got_entry *) *entryp; 4579 if (entry->tls_type == GOT_TLS_NONE) 4580 return 1; 4581 4582 arg = (struct mips_elf_traverse_got_arg *) data; 4583 if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno)) 4584 { 4585 arg->g = NULL; 4586 return 0; 4587 } 4588 4589 /* Account for the entries we've just allocated. */ 4590 arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type); 4591 return 1; 4592 } 4593 4594 /* A htab_traverse callback for GOT entries, where DATA points to a 4595 mips_elf_traverse_got_arg. Set the global_got_area of each global 4596 symbol to DATA->value. */ 4597 4598 static int 4599 mips_elf_set_global_got_area (void **entryp, void *data) 4600 { 4601 struct mips_got_entry *entry; 4602 struct mips_elf_traverse_got_arg *arg; 4603 4604 entry = (struct mips_got_entry *) *entryp; 4605 arg = (struct mips_elf_traverse_got_arg *) data; 4606 if (entry->abfd != NULL 4607 && entry->symndx == -1 4608 && entry->d.h->global_got_area != GGA_NONE) 4609 entry->d.h->global_got_area = arg->value; 4610 return 1; 4611 } 4612 4613 /* A htab_traverse callback for secondary GOT entries, where DATA points 4614 to a mips_elf_traverse_got_arg. Assign GOT indices to global entries 4615 and record the number of relocations they require. DATA->value is 4616 the size of one GOT entry. Set DATA->g to null on failure. */ 4617 4618 static int 4619 mips_elf_set_global_gotidx (void **entryp, void *data) 4620 { 4621 struct mips_got_entry *entry; 4622 struct mips_elf_traverse_got_arg *arg; 4623 4624 entry = (struct mips_got_entry *) *entryp; 4625 arg = (struct mips_elf_traverse_got_arg *) data; 4626 if (entry->abfd != NULL 4627 && entry->symndx == -1 4628 && entry->d.h->global_got_area != GGA_NONE) 4629 { 4630 if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_gotno)) 4631 { 4632 arg->g = NULL; 4633 return 0; 4634 } 4635 arg->g->assigned_gotno += 1; 4636 4637 if (arg->info->shared 4638 || (elf_hash_table (arg->info)->dynamic_sections_created 4639 && entry->d.h->root.def_dynamic 4640 && !entry->d.h->root.def_regular)) 4641 arg->g->relocs += 1; 4642 } 4643 4644 return 1; 4645 } 4646 4647 /* A htab_traverse callback for GOT entries for which DATA is the 4648 bfd_link_info. Forbid any global symbols from having traditional 4649 lazy-binding stubs. */ 4650 4651 static int 4652 mips_elf_forbid_lazy_stubs (void **entryp, void *data) 4653 { 4654 struct bfd_link_info *info; 4655 struct mips_elf_link_hash_table *htab; 4656 struct mips_got_entry *entry; 4657 4658 entry = (struct mips_got_entry *) *entryp; 4659 info = (struct bfd_link_info *) data; 4660 htab = mips_elf_hash_table (info); 4661 BFD_ASSERT (htab != NULL); 4662 4663 if (entry->abfd != NULL 4664 && entry->symndx == -1 4665 && entry->d.h->needs_lazy_stub) 4666 { 4667 entry->d.h->needs_lazy_stub = FALSE; 4668 htab->lazy_stub_count--; 4669 } 4670 4671 return 1; 4672 } 4673 4674 /* Return the offset of an input bfd IBFD's GOT from the beginning of 4675 the primary GOT. */ 4676 static bfd_vma 4677 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd) 4678 { 4679 if (!g->next) 4680 return 0; 4681 4682 g = mips_elf_bfd_got (ibfd, FALSE); 4683 if (! g) 4684 return 0; 4685 4686 BFD_ASSERT (g->next); 4687 4688 g = g->next; 4689 4690 return (g->local_gotno + g->global_gotno + g->tls_gotno) 4691 * MIPS_ELF_GOT_SIZE (abfd); 4692 } 4693 4694 /* Turn a single GOT that is too big for 16-bit addressing into 4695 a sequence of GOTs, each one 16-bit addressable. */ 4696 4697 static bfd_boolean 4698 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, 4699 asection *got, bfd_size_type pages) 4700 { 4701 struct mips_elf_link_hash_table *htab; 4702 struct mips_elf_got_per_bfd_arg got_per_bfd_arg; 4703 struct mips_elf_traverse_got_arg tga; 4704 struct mips_got_info *g, *gg; 4705 unsigned int assign, needed_relocs; 4706 bfd *dynobj, *ibfd; 4707 4708 dynobj = elf_hash_table (info)->dynobj; 4709 htab = mips_elf_hash_table (info); 4710 BFD_ASSERT (htab != NULL); 4711 4712 g = htab->got_info; 4713 4714 got_per_bfd_arg.obfd = abfd; 4715 got_per_bfd_arg.info = info; 4716 got_per_bfd_arg.current = NULL; 4717 got_per_bfd_arg.primary = NULL; 4718 got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info) 4719 / MIPS_ELF_GOT_SIZE (abfd)) 4720 - htab->reserved_gotno); 4721 got_per_bfd_arg.max_pages = pages; 4722 /* The number of globals that will be included in the primary GOT. 4723 See the calls to mips_elf_set_global_got_area below for more 4724 information. */ 4725 got_per_bfd_arg.global_count = g->global_gotno; 4726 4727 /* Try to merge the GOTs of input bfds together, as long as they 4728 don't seem to exceed the maximum GOT size, choosing one of them 4729 to be the primary GOT. */ 4730 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next) 4731 { 4732 gg = mips_elf_bfd_got (ibfd, FALSE); 4733 if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg)) 4734 return FALSE; 4735 } 4736 4737 /* If we do not find any suitable primary GOT, create an empty one. */ 4738 if (got_per_bfd_arg.primary == NULL) 4739 g->next = mips_elf_create_got_info (abfd); 4740 else 4741 g->next = got_per_bfd_arg.primary; 4742 g->next->next = got_per_bfd_arg.current; 4743 4744 /* GG is now the master GOT, and G is the primary GOT. */ 4745 gg = g; 4746 g = g->next; 4747 4748 /* Map the output bfd to the primary got. That's what we're going 4749 to use for bfds that use GOT16 or GOT_PAGE relocations that we 4750 didn't mark in check_relocs, and we want a quick way to find it. 4751 We can't just use gg->next because we're going to reverse the 4752 list. */ 4753 mips_elf_replace_bfd_got (abfd, g); 4754 4755 /* Every symbol that is referenced in a dynamic relocation must be 4756 present in the primary GOT, so arrange for them to appear after 4757 those that are actually referenced. */ 4758 gg->reloc_only_gotno = gg->global_gotno - g->global_gotno; 4759 g->global_gotno = gg->global_gotno; 4760 4761 tga.info = info; 4762 tga.value = GGA_RELOC_ONLY; 4763 htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga); 4764 tga.value = GGA_NORMAL; 4765 htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga); 4766 4767 /* Now go through the GOTs assigning them offset ranges. 4768 [assigned_gotno, local_gotno[ will be set to the range of local 4769 entries in each GOT. We can then compute the end of a GOT by 4770 adding local_gotno to global_gotno. We reverse the list and make 4771 it circular since then we'll be able to quickly compute the 4772 beginning of a GOT, by computing the end of its predecessor. To 4773 avoid special cases for the primary GOT, while still preserving 4774 assertions that are valid for both single- and multi-got links, 4775 we arrange for the main got struct to have the right number of 4776 global entries, but set its local_gotno such that the initial 4777 offset of the primary GOT is zero. Remember that the primary GOT 4778 will become the last item in the circular linked list, so it 4779 points back to the master GOT. */ 4780 gg->local_gotno = -g->global_gotno; 4781 gg->global_gotno = g->global_gotno; 4782 gg->tls_gotno = 0; 4783 assign = 0; 4784 gg->next = gg; 4785 4786 do 4787 { 4788 struct mips_got_info *gn; 4789 4790 assign += htab->reserved_gotno; 4791 g->assigned_gotno = assign; 4792 g->local_gotno += assign; 4793 g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno); 4794 assign = g->local_gotno + g->global_gotno + g->tls_gotno; 4795 4796 /* Take g out of the direct list, and push it onto the reversed 4797 list that gg points to. g->next is guaranteed to be nonnull after 4798 this operation, as required by mips_elf_initialize_tls_index. */ 4799 gn = g->next; 4800 g->next = gg->next; 4801 gg->next = g; 4802 4803 /* Set up any TLS entries. We always place the TLS entries after 4804 all non-TLS entries. */ 4805 g->tls_assigned_gotno = g->local_gotno + g->global_gotno; 4806 tga.g = g; 4807 tga.value = MIPS_ELF_GOT_SIZE (abfd); 4808 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga); 4809 if (!tga.g) 4810 return FALSE; 4811 BFD_ASSERT (g->tls_assigned_gotno == assign); 4812 4813 /* Move onto the next GOT. It will be a secondary GOT if nonull. */ 4814 g = gn; 4815 4816 /* Forbid global symbols in every non-primary GOT from having 4817 lazy-binding stubs. */ 4818 if (g) 4819 htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info); 4820 } 4821 while (g); 4822 4823 got->size = assign * MIPS_ELF_GOT_SIZE (abfd); 4824 4825 needed_relocs = 0; 4826 for (g = gg->next; g && g->next != gg; g = g->next) 4827 { 4828 unsigned int save_assign; 4829 4830 /* Assign offsets to global GOT entries and count how many 4831 relocations they need. */ 4832 save_assign = g->assigned_gotno; 4833 g->assigned_gotno = g->local_gotno; 4834 tga.info = info; 4835 tga.value = MIPS_ELF_GOT_SIZE (abfd); 4836 tga.g = g; 4837 htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga); 4838 if (!tga.g) 4839 return FALSE; 4840 BFD_ASSERT (g->assigned_gotno == g->local_gotno + g->global_gotno); 4841 g->assigned_gotno = save_assign; 4842 4843 if (info->shared) 4844 { 4845 g->relocs += g->local_gotno - g->assigned_gotno; 4846 BFD_ASSERT (g->assigned_gotno == g->next->local_gotno 4847 + g->next->global_gotno 4848 + g->next->tls_gotno 4849 + htab->reserved_gotno); 4850 } 4851 needed_relocs += g->relocs; 4852 } 4853 needed_relocs += g->relocs; 4854 4855 if (needed_relocs) 4856 mips_elf_allocate_dynamic_relocations (dynobj, info, 4857 needed_relocs); 4858 4859 return TRUE; 4860 } 4861 4862 4863 /* Returns the first relocation of type r_type found, beginning with 4864 RELOCATION. RELEND is one-past-the-end of the relocation table. */ 4865 4866 static const Elf_Internal_Rela * 4867 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type, 4868 const Elf_Internal_Rela *relocation, 4869 const Elf_Internal_Rela *relend) 4870 { 4871 unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info); 4872 4873 while (relocation < relend) 4874 { 4875 if (ELF_R_TYPE (abfd, relocation->r_info) == r_type 4876 && ELF_R_SYM (abfd, relocation->r_info) == r_symndx) 4877 return relocation; 4878 4879 ++relocation; 4880 } 4881 4882 /* We didn't find it. */ 4883 return NULL; 4884 } 4885 4886 /* Return whether an input relocation is against a local symbol. */ 4887 4888 static bfd_boolean 4889 mips_elf_local_relocation_p (bfd *input_bfd, 4890 const Elf_Internal_Rela *relocation, 4891 asection **local_sections) 4892 { 4893 unsigned long r_symndx; 4894 Elf_Internal_Shdr *symtab_hdr; 4895 size_t extsymoff; 4896 4897 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info); 4898 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; 4899 extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info; 4900 4901 if (r_symndx < extsymoff) 4902 return TRUE; 4903 if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL) 4904 return TRUE; 4905 4906 return FALSE; 4907 } 4908 4909 /* Sign-extend VALUE, which has the indicated number of BITS. */ 4910 4911 bfd_vma 4912 _bfd_mips_elf_sign_extend (bfd_vma value, int bits) 4913 { 4914 if (value & ((bfd_vma) 1 << (bits - 1))) 4915 /* VALUE is negative. */ 4916 value |= ((bfd_vma) - 1) << bits; 4917 4918 return value; 4919 } 4920 4921 /* Return non-zero if the indicated VALUE has overflowed the maximum 4922 range expressible by a signed number with the indicated number of 4923 BITS. */ 4924 4925 static bfd_boolean 4926 mips_elf_overflow_p (bfd_vma value, int bits) 4927 { 4928 bfd_signed_vma svalue = (bfd_signed_vma) value; 4929 4930 if (svalue > (1 << (bits - 1)) - 1) 4931 /* The value is too big. */ 4932 return TRUE; 4933 else if (svalue < -(1 << (bits - 1))) 4934 /* The value is too small. */ 4935 return TRUE; 4936 4937 /* All is well. */ 4938 return FALSE; 4939 } 4940 4941 /* Calculate the %high function. */ 4942 4943 static bfd_vma 4944 mips_elf_high (bfd_vma value) 4945 { 4946 return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff; 4947 } 4948 4949 /* Calculate the %higher function. */ 4950 4951 static bfd_vma 4952 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED) 4953 { 4954 #ifdef BFD64 4955 return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff; 4956 #else 4957 abort (); 4958 return MINUS_ONE; 4959 #endif 4960 } 4961 4962 /* Calculate the %highest function. */ 4963 4964 static bfd_vma 4965 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED) 4966 { 4967 #ifdef BFD64 4968 return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff; 4969 #else 4970 abort (); 4971 return MINUS_ONE; 4972 #endif 4973 } 4974 4975 /* Create the .compact_rel section. */ 4976 4977 static bfd_boolean 4978 mips_elf_create_compact_rel_section 4979 (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED) 4980 { 4981 flagword flags; 4982 register asection *s; 4983 4984 if (bfd_get_linker_section (abfd, ".compact_rel") == NULL) 4985 { 4986 flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED 4987 | SEC_READONLY); 4988 4989 s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags); 4990 if (s == NULL 4991 || ! bfd_set_section_alignment (abfd, s, 4992 MIPS_ELF_LOG_FILE_ALIGN (abfd))) 4993 return FALSE; 4994 4995 s->size = sizeof (Elf32_External_compact_rel); 4996 } 4997 4998 return TRUE; 4999 } 5000 5001 /* Create the .got section to hold the global offset table. */ 5002 5003 static bfd_boolean 5004 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) 5005 { 5006 flagword flags; 5007 register asection *s; 5008 struct elf_link_hash_entry *h; 5009 struct bfd_link_hash_entry *bh; 5010 struct mips_elf_link_hash_table *htab; 5011 5012 htab = mips_elf_hash_table (info); 5013 BFD_ASSERT (htab != NULL); 5014 5015 /* This function may be called more than once. */ 5016 if (htab->sgot) 5017 return TRUE; 5018 5019 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY 5020 | SEC_LINKER_CREATED); 5021 5022 /* We have to use an alignment of 2**4 here because this is hardcoded 5023 in the function stub generation and in the linker script. */ 5024 s = bfd_make_section_anyway_with_flags (abfd, ".got", flags); 5025 if (s == NULL 5026 || ! bfd_set_section_alignment (abfd, s, 4)) 5027 return FALSE; 5028 htab->sgot = s; 5029 5030 /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the 5031 linker script because we don't want to define the symbol if we 5032 are not creating a global offset table. */ 5033 bh = NULL; 5034 if (! (_bfd_generic_link_add_one_symbol 5035 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s, 5036 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) 5037 return FALSE; 5038 5039 h = (struct elf_link_hash_entry *) bh; 5040 h->non_elf = 0; 5041 h->def_regular = 1; 5042 h->type = STT_OBJECT; 5043 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN; 5044 elf_hash_table (info)->hgot = h; 5045 5046 if (info->shared 5047 && ! bfd_elf_link_record_dynamic_symbol (info, h)) 5048 return FALSE; 5049 5050 htab->got_info = mips_elf_create_got_info (abfd); 5051 mips_elf_section_data (s)->elf.this_hdr.sh_flags 5052 |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; 5053 5054 /* We also need a .got.plt section when generating PLTs. */ 5055 s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", 5056 SEC_ALLOC | SEC_LOAD 5057 | SEC_HAS_CONTENTS 5058 | SEC_IN_MEMORY 5059 | SEC_LINKER_CREATED); 5060 if (s == NULL) 5061 return FALSE; 5062 htab->sgotplt = s; 5063 5064 return TRUE; 5065 } 5066 5067 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or 5068 __GOTT_INDEX__ symbols. These symbols are only special for 5069 shared objects; they are not used in executables. */ 5070 5071 static bfd_boolean 5072 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h) 5073 { 5074 return (mips_elf_hash_table (info)->is_vxworks 5075 && info->shared 5076 && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0 5077 || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0)); 5078 } 5079 5080 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might 5081 require an la25 stub. See also mips_elf_local_pic_function_p, 5082 which determines whether the destination function ever requires a 5083 stub. */ 5084 5085 static bfd_boolean 5086 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type, 5087 bfd_boolean target_is_16_bit_code_p) 5088 { 5089 /* We specifically ignore branches and jumps from EF_PIC objects, 5090 where the onus is on the compiler or programmer to perform any 5091 necessary initialization of $25. Sometimes such initialization 5092 is unnecessary; for example, -mno-shared functions do not use 5093 the incoming value of $25, and may therefore be called directly. */ 5094 if (PIC_OBJECT_P (input_bfd)) 5095 return FALSE; 5096 5097 switch (r_type) 5098 { 5099 case R_MIPS_26: 5100 case R_MIPS_PC16: 5101 case R_MICROMIPS_26_S1: 5102 case R_MICROMIPS_PC7_S1: 5103 case R_MICROMIPS_PC10_S1: 5104 case R_MICROMIPS_PC16_S1: 5105 case R_MICROMIPS_PC23_S2: 5106 return TRUE; 5107 5108 case R_MIPS16_26: 5109 return !target_is_16_bit_code_p; 5110 5111 default: 5112 return FALSE; 5113 } 5114 } 5115 5116 /* Calculate the value produced by the RELOCATION (which comes from 5117 the INPUT_BFD). The ADDEND is the addend to use for this 5118 RELOCATION; RELOCATION->R_ADDEND is ignored. 5119 5120 The result of the relocation calculation is stored in VALUEP. 5121 On exit, set *CROSS_MODE_JUMP_P to true if the relocation field 5122 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa. 5123 5124 This function returns bfd_reloc_continue if the caller need take no 5125 further action regarding this relocation, bfd_reloc_notsupported if 5126 something goes dramatically wrong, bfd_reloc_overflow if an 5127 overflow occurs, and bfd_reloc_ok to indicate success. */ 5128 5129 static bfd_reloc_status_type 5130 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, 5131 asection *input_section, 5132 struct bfd_link_info *info, 5133 const Elf_Internal_Rela *relocation, 5134 bfd_vma addend, reloc_howto_type *howto, 5135 Elf_Internal_Sym *local_syms, 5136 asection **local_sections, bfd_vma *valuep, 5137 const char **namep, 5138 bfd_boolean *cross_mode_jump_p, 5139 bfd_boolean save_addend) 5140 { 5141 /* The eventual value we will return. */ 5142 bfd_vma value; 5143 /* The address of the symbol against which the relocation is 5144 occurring. */ 5145 bfd_vma symbol = 0; 5146 /* The final GP value to be used for the relocatable, executable, or 5147 shared object file being produced. */ 5148 bfd_vma gp; 5149 /* The place (section offset or address) of the storage unit being 5150 relocated. */ 5151 bfd_vma p; 5152 /* The value of GP used to create the relocatable object. */ 5153 bfd_vma gp0; 5154 /* The offset into the global offset table at which the address of 5155 the relocation entry symbol, adjusted by the addend, resides 5156 during execution. */ 5157 bfd_vma g = MINUS_ONE; 5158 /* The section in which the symbol referenced by the relocation is 5159 located. */ 5160 asection *sec = NULL; 5161 struct mips_elf_link_hash_entry *h = NULL; 5162 /* TRUE if the symbol referred to by this relocation is a local 5163 symbol. */ 5164 bfd_boolean local_p, was_local_p; 5165 /* TRUE if the symbol referred to by this relocation is "_gp_disp". */ 5166 bfd_boolean gp_disp_p = FALSE; 5167 /* TRUE if the symbol referred to by this relocation is 5168 "__gnu_local_gp". */ 5169 bfd_boolean gnu_local_gp_p = FALSE; 5170 Elf_Internal_Shdr *symtab_hdr; 5171 size_t extsymoff; 5172 unsigned long r_symndx; 5173 int r_type; 5174 /* TRUE if overflow occurred during the calculation of the 5175 relocation value. */ 5176 bfd_boolean overflowed_p; 5177 /* TRUE if this relocation refers to a MIPS16 function. */ 5178 bfd_boolean target_is_16_bit_code_p = FALSE; 5179 bfd_boolean target_is_micromips_code_p = FALSE; 5180 struct mips_elf_link_hash_table *htab; 5181 bfd *dynobj; 5182 5183 dynobj = elf_hash_table (info)->dynobj; 5184 htab = mips_elf_hash_table (info); 5185 BFD_ASSERT (htab != NULL); 5186 5187 /* Parse the relocation. */ 5188 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info); 5189 r_type = ELF_R_TYPE (input_bfd, relocation->r_info); 5190 p = (input_section->output_section->vma 5191 + input_section->output_offset 5192 + relocation->r_offset); 5193 5194 /* Assume that there will be no overflow. */ 5195 overflowed_p = FALSE; 5196 5197 /* Figure out whether or not the symbol is local, and get the offset 5198 used in the array of hash table entries. */ 5199 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; 5200 local_p = mips_elf_local_relocation_p (input_bfd, relocation, 5201 local_sections); 5202 was_local_p = local_p; 5203 if (! elf_bad_symtab (input_bfd)) 5204 extsymoff = symtab_hdr->sh_info; 5205 else 5206 { 5207 /* The symbol table does not follow the rule that local symbols 5208 must come before globals. */ 5209 extsymoff = 0; 5210 } 5211 5212 /* Figure out the value of the symbol. */ 5213 if (local_p) 5214 { 5215 Elf_Internal_Sym *sym; 5216 5217 sym = local_syms + r_symndx; 5218 sec = local_sections[r_symndx]; 5219 5220 symbol = sec->output_section->vma + sec->output_offset; 5221 if (ELF_ST_TYPE (sym->st_info) != STT_SECTION 5222 || (sec->flags & SEC_MERGE)) 5223 symbol += sym->st_value; 5224 if ((sec->flags & SEC_MERGE) 5225 && ELF_ST_TYPE (sym->st_info) == STT_SECTION) 5226 { 5227 addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend); 5228 addend -= symbol; 5229 addend += sec->output_section->vma + sec->output_offset; 5230 } 5231 5232 /* MIPS16/microMIPS text labels should be treated as odd. */ 5233 if (ELF_ST_IS_COMPRESSED (sym->st_other)) 5234 ++symbol; 5235 5236 /* Record the name of this symbol, for our caller. */ 5237 *namep = bfd_elf_string_from_elf_section (input_bfd, 5238 symtab_hdr->sh_link, 5239 sym->st_name); 5240 if (*namep == '\0') 5241 *namep = bfd_section_name (input_bfd, sec); 5242 5243 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other); 5244 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other); 5245 } 5246 else 5247 { 5248 /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ? */ 5249 5250 /* For global symbols we look up the symbol in the hash-table. */ 5251 h = ((struct mips_elf_link_hash_entry *) 5252 elf_sym_hashes (input_bfd) [r_symndx - extsymoff]); 5253 /* Find the real hash-table entry for this symbol. */ 5254 while (h->root.root.type == bfd_link_hash_indirect 5255 || h->root.root.type == bfd_link_hash_warning) 5256 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 5257 5258 /* Record the name of this symbol, for our caller. */ 5259 *namep = h->root.root.root.string; 5260 5261 /* See if this is the special _gp_disp symbol. Note that such a 5262 symbol must always be a global symbol. */ 5263 if (strcmp (*namep, "_gp_disp") == 0 5264 && ! NEWABI_P (input_bfd)) 5265 { 5266 /* Relocations against _gp_disp are permitted only with 5267 R_MIPS_HI16 and R_MIPS_LO16 relocations. */ 5268 if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type)) 5269 return bfd_reloc_notsupported; 5270 5271 gp_disp_p = TRUE; 5272 } 5273 /* See if this is the special _gp symbol. Note that such a 5274 symbol must always be a global symbol. */ 5275 else if (strcmp (*namep, "__gnu_local_gp") == 0) 5276 gnu_local_gp_p = TRUE; 5277 5278 5279 /* If this symbol is defined, calculate its address. Note that 5280 _gp_disp is a magic symbol, always implicitly defined by the 5281 linker, so it's inappropriate to check to see whether or not 5282 its defined. */ 5283 else if ((h->root.root.type == bfd_link_hash_defined 5284 || h->root.root.type == bfd_link_hash_defweak) 5285 && h->root.root.u.def.section) 5286 { 5287 sec = h->root.root.u.def.section; 5288 if (sec->output_section) 5289 symbol = (h->root.root.u.def.value 5290 + sec->output_section->vma 5291 + sec->output_offset); 5292 else 5293 symbol = h->root.root.u.def.value; 5294 } 5295 else if (h->root.root.type == bfd_link_hash_undefweak) 5296 /* We allow relocations against undefined weak symbols, giving 5297 it the value zero, so that you can undefined weak functions 5298 and check to see if they exist by looking at their 5299 addresses. */ 5300 symbol = 0; 5301 else if (info->unresolved_syms_in_objects == RM_IGNORE 5302 && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT) 5303 symbol = 0; 5304 else if (strcmp (*namep, SGI_COMPAT (input_bfd) 5305 ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0) 5306 { 5307 /* If this is a dynamic link, we should have created a 5308 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol 5309 in in _bfd_mips_elf_create_dynamic_sections. 5310 Otherwise, we should define the symbol with a value of 0. 5311 FIXME: It should probably get into the symbol table 5312 somehow as well. */ 5313 BFD_ASSERT (! info->shared); 5314 BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL); 5315 symbol = 0; 5316 } 5317 else if (ELF_MIPS_IS_OPTIONAL (h->root.other)) 5318 { 5319 /* This is an optional symbol - an Irix specific extension to the 5320 ELF spec. Ignore it for now. 5321 XXX - FIXME - there is more to the spec for OPTIONAL symbols 5322 than simply ignoring them, but we do not handle this for now. 5323 For information see the "64-bit ELF Object File Specification" 5324 which is available from here: 5325 http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */ 5326 symbol = 0; 5327 } 5328 else if ((*info->callbacks->undefined_symbol) 5329 (info, h->root.root.root.string, input_bfd, 5330 input_section, relocation->r_offset, 5331 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR) 5332 || ELF_ST_VISIBILITY (h->root.other))) 5333 { 5334 return bfd_reloc_undefined; 5335 } 5336 else 5337 { 5338 return bfd_reloc_notsupported; 5339 } 5340 5341 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other); 5342 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other); 5343 } 5344 5345 /* If this is a reference to a 16-bit function with a stub, we need 5346 to redirect the relocation to the stub unless: 5347 5348 (a) the relocation is for a MIPS16 JAL; 5349 5350 (b) the relocation is for a MIPS16 PIC call, and there are no 5351 non-MIPS16 uses of the GOT slot; or 5352 5353 (c) the section allows direct references to MIPS16 functions. */ 5354 if (r_type != R_MIPS16_26 5355 && !info->relocatable 5356 && ((h != NULL 5357 && h->fn_stub != NULL 5358 && (r_type != R_MIPS16_CALL16 || h->need_fn_stub)) 5359 || (local_p 5360 && mips_elf_tdata (input_bfd)->local_stubs != NULL 5361 && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL)) 5362 && !section_allows_mips16_refs_p (input_section)) 5363 { 5364 /* This is a 32- or 64-bit call to a 16-bit function. We should 5365 have already noticed that we were going to need the 5366 stub. */ 5367 if (local_p) 5368 { 5369 sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx]; 5370 value = 0; 5371 } 5372 else 5373 { 5374 BFD_ASSERT (h->need_fn_stub); 5375 if (h->la25_stub) 5376 { 5377 /* If a LA25 header for the stub itself exists, point to the 5378 prepended LUI/ADDIU sequence. */ 5379 sec = h->la25_stub->stub_section; 5380 value = h->la25_stub->offset; 5381 } 5382 else 5383 { 5384 sec = h->fn_stub; 5385 value = 0; 5386 } 5387 } 5388 5389 symbol = sec->output_section->vma + sec->output_offset + value; 5390 /* The target is 16-bit, but the stub isn't. */ 5391 target_is_16_bit_code_p = FALSE; 5392 } 5393 /* If this is a MIPS16 call with a stub, that is made through the PLT or 5394 to a standard MIPS function, we need to redirect the call to the stub. 5395 Note that we specifically exclude R_MIPS16_CALL16 from this behavior; 5396 indirect calls should use an indirect stub instead. */ 5397 else if (r_type == R_MIPS16_26 && !info->relocatable 5398 && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL)) 5399 || (local_p 5400 && mips_elf_tdata (input_bfd)->local_call_stubs != NULL 5401 && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL)) 5402 && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p)) 5403 { 5404 if (local_p) 5405 sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx]; 5406 else 5407 { 5408 /* If both call_stub and call_fp_stub are defined, we can figure 5409 out which one to use by checking which one appears in the input 5410 file. */ 5411 if (h->call_stub != NULL && h->call_fp_stub != NULL) 5412 { 5413 asection *o; 5414 5415 sec = NULL; 5416 for (o = input_bfd->sections; o != NULL; o = o->next) 5417 { 5418 if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o))) 5419 { 5420 sec = h->call_fp_stub; 5421 break; 5422 } 5423 } 5424 if (sec == NULL) 5425 sec = h->call_stub; 5426 } 5427 else if (h->call_stub != NULL) 5428 sec = h->call_stub; 5429 else 5430 sec = h->call_fp_stub; 5431 } 5432 5433 BFD_ASSERT (sec->size > 0); 5434 symbol = sec->output_section->vma + sec->output_offset; 5435 } 5436 /* If this is a direct call to a PIC function, redirect to the 5437 non-PIC stub. */ 5438 else if (h != NULL && h->la25_stub 5439 && mips_elf_relocation_needs_la25_stub (input_bfd, r_type, 5440 target_is_16_bit_code_p)) 5441 symbol = (h->la25_stub->stub_section->output_section->vma 5442 + h->la25_stub->stub_section->output_offset 5443 + h->la25_stub->offset); 5444 /* For direct MIPS16 and microMIPS calls make sure the compressed PLT 5445 entry is used if a standard PLT entry has also been made. In this 5446 case the symbol will have been set by mips_elf_set_plt_sym_value 5447 to point to the standard PLT entry, so redirect to the compressed 5448 one. */ 5449 else if ((r_type == R_MIPS16_26 || r_type == R_MICROMIPS_26_S1) 5450 && !info->relocatable 5451 && h != NULL 5452 && h->use_plt_entry 5453 && h->root.plt.plist->comp_offset != MINUS_ONE 5454 && h->root.plt.plist->mips_offset != MINUS_ONE) 5455 { 5456 bfd_boolean micromips_p = MICROMIPS_P (abfd); 5457 5458 sec = htab->splt; 5459 symbol = (sec->output_section->vma 5460 + sec->output_offset 5461 + htab->plt_header_size 5462 + htab->plt_mips_offset 5463 + h->root.plt.plist->comp_offset 5464 + 1); 5465 5466 target_is_16_bit_code_p = !micromips_p; 5467 target_is_micromips_code_p = micromips_p; 5468 } 5469 5470 /* Make sure MIPS16 and microMIPS are not used together. */ 5471 if ((r_type == R_MIPS16_26 && target_is_micromips_code_p) 5472 || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p)) 5473 { 5474 (*_bfd_error_handler) 5475 (_("MIPS16 and microMIPS functions cannot call each other")); 5476 return bfd_reloc_notsupported; 5477 } 5478 5479 /* Calls from 16-bit code to 32-bit code and vice versa require the 5480 mode change. However, we can ignore calls to undefined weak symbols, 5481 which should never be executed at runtime. This exception is important 5482 because the assembly writer may have "known" that any definition of the 5483 symbol would be 16-bit code, and that direct jumps were therefore 5484 acceptable. */ 5485 *cross_mode_jump_p = (!info->relocatable 5486 && !(h && h->root.root.type == bfd_link_hash_undefweak) 5487 && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p) 5488 || (r_type == R_MICROMIPS_26_S1 5489 && !target_is_micromips_code_p) 5490 || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR) 5491 && (target_is_16_bit_code_p 5492 || target_is_micromips_code_p)))); 5493 5494 local_p = (h == NULL || mips_use_local_got_p (info, h)); 5495 5496 gp0 = _bfd_get_gp_value (input_bfd); 5497 gp = _bfd_get_gp_value (abfd); 5498 if (htab->got_info) 5499 gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd); 5500 5501 if (gnu_local_gp_p) 5502 symbol = gp; 5503 5504 /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent 5505 to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP. The addend is applied by the 5506 corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST. */ 5507 if (got_page_reloc_p (r_type) && !local_p) 5508 { 5509 r_type = (micromips_reloc_p (r_type) 5510 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP); 5511 addend = 0; 5512 } 5513 5514 /* If we haven't already determined the GOT offset, and we're going 5515 to need it, get it now. */ 5516 switch (r_type) 5517 { 5518 case R_MIPS16_CALL16: 5519 case R_MIPS16_GOT16: 5520 case R_MIPS_CALL16: 5521 case R_MIPS_GOT16: 5522 case R_MIPS_GOT_DISP: 5523 case R_MIPS_GOT_HI16: 5524 case R_MIPS_CALL_HI16: 5525 case R_MIPS_GOT_LO16: 5526 case R_MIPS_CALL_LO16: 5527 case R_MICROMIPS_CALL16: 5528 case R_MICROMIPS_GOT16: 5529 case R_MICROMIPS_GOT_DISP: 5530 case R_MICROMIPS_GOT_HI16: 5531 case R_MICROMIPS_CALL_HI16: 5532 case R_MICROMIPS_GOT_LO16: 5533 case R_MICROMIPS_CALL_LO16: 5534 case R_MIPS_TLS_GD: 5535 case R_MIPS_TLS_GOTTPREL: 5536 case R_MIPS_TLS_LDM: 5537 case R_MIPS16_TLS_GD: 5538 case R_MIPS16_TLS_GOTTPREL: 5539 case R_MIPS16_TLS_LDM: 5540 case R_MICROMIPS_TLS_GD: 5541 case R_MICROMIPS_TLS_GOTTPREL: 5542 case R_MICROMIPS_TLS_LDM: 5543 /* Find the index into the GOT where this value is located. */ 5544 if (tls_ldm_reloc_p (r_type)) 5545 { 5546 g = mips_elf_local_got_index (abfd, input_bfd, info, 5547 0, 0, NULL, r_type); 5548 if (g == MINUS_ONE) 5549 return bfd_reloc_outofrange; 5550 } 5551 else if (!local_p) 5552 { 5553 /* On VxWorks, CALL relocations should refer to the .got.plt 5554 entry, which is initialized to point at the PLT stub. */ 5555 if (htab->is_vxworks 5556 && (call_hi16_reloc_p (r_type) 5557 || call_lo16_reloc_p (r_type) 5558 || call16_reloc_p (r_type))) 5559 { 5560 BFD_ASSERT (addend == 0); 5561 BFD_ASSERT (h->root.needs_plt); 5562 g = mips_elf_gotplt_index (info, &h->root); 5563 } 5564 else 5565 { 5566 BFD_ASSERT (addend == 0); 5567 g = mips_elf_global_got_index (abfd, info, input_bfd, 5568 &h->root, r_type); 5569 if (!TLS_RELOC_P (r_type) 5570 && !elf_hash_table (info)->dynamic_sections_created) 5571 /* This is a static link. We must initialize the GOT entry. */ 5572 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g); 5573 } 5574 } 5575 else if (!htab->is_vxworks 5576 && (call16_reloc_p (r_type) || got16_reloc_p (r_type))) 5577 /* The calculation below does not involve "g". */ 5578 break; 5579 else 5580 { 5581 g = mips_elf_local_got_index (abfd, input_bfd, info, 5582 symbol + addend, r_symndx, h, r_type); 5583 if (g == MINUS_ONE) 5584 return bfd_reloc_outofrange; 5585 } 5586 5587 /* Convert GOT indices to actual offsets. */ 5588 g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g); 5589 break; 5590 } 5591 5592 /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__ 5593 symbols are resolved by the loader. Add them to .rela.dyn. */ 5594 if (h != NULL && is_gott_symbol (info, &h->root)) 5595 { 5596 Elf_Internal_Rela outrel; 5597 bfd_byte *loc; 5598 asection *s; 5599 5600 s = mips_elf_rel_dyn_section (info, FALSE); 5601 loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela); 5602 5603 outrel.r_offset = (input_section->output_section->vma 5604 + input_section->output_offset 5605 + relocation->r_offset); 5606 outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type); 5607 outrel.r_addend = addend; 5608 bfd_elf32_swap_reloca_out (abfd, &outrel, loc); 5609 5610 /* If we've written this relocation for a readonly section, 5611 we need to set DF_TEXTREL again, so that we do not delete the 5612 DT_TEXTREL tag. */ 5613 if (MIPS_ELF_READONLY_SECTION (input_section)) 5614 info->flags |= DF_TEXTREL; 5615 5616 *valuep = 0; 5617 return bfd_reloc_ok; 5618 } 5619 5620 /* Figure out what kind of relocation is being performed. */ 5621 switch (r_type) 5622 { 5623 case R_MIPS_NONE: 5624 return bfd_reloc_continue; 5625 5626 case R_MIPS_16: 5627 value = symbol + _bfd_mips_elf_sign_extend (addend, 16); 5628 overflowed_p = mips_elf_overflow_p (value, 16); 5629 break; 5630 5631 case R_MIPS_32: 5632 case R_MIPS_REL32: 5633 case R_MIPS_64: 5634 if ((info->shared 5635 || (htab->root.dynamic_sections_created 5636 && h != NULL 5637 && h->root.def_dynamic 5638 && !h->root.def_regular 5639 && !h->has_static_relocs)) 5640 && r_symndx != STN_UNDEF 5641 && (h == NULL 5642 || h->root.root.type != bfd_link_hash_undefweak 5643 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT) 5644 && (input_section->flags & SEC_ALLOC) != 0) 5645 { 5646 /* If we're creating a shared library, then we can't know 5647 where the symbol will end up. So, we create a relocation 5648 record in the output, and leave the job up to the dynamic 5649 linker. We must do the same for executable references to 5650 shared library symbols, unless we've decided to use copy 5651 relocs or PLTs instead. */ 5652 value = addend; 5653 if (!mips_elf_create_dynamic_relocation (abfd, 5654 info, 5655 relocation, 5656 h, 5657 sec, 5658 symbol, 5659 &value, 5660 input_section)) 5661 return bfd_reloc_undefined; 5662 } 5663 else 5664 { 5665 if (r_type != R_MIPS_REL32) 5666 value = symbol + addend; 5667 else 5668 value = addend; 5669 } 5670 value &= howto->dst_mask; 5671 break; 5672 5673 case R_MIPS_PC32: 5674 value = symbol + addend - p; 5675 value &= howto->dst_mask; 5676 break; 5677 5678 case R_MIPS16_26: 5679 /* The calculation for R_MIPS16_26 is just the same as for an 5680 R_MIPS_26. It's only the storage of the relocated field into 5681 the output file that's different. That's handled in 5682 mips_elf_perform_relocation. So, we just fall through to the 5683 R_MIPS_26 case here. */ 5684 case R_MIPS_26: 5685 case R_MICROMIPS_26_S1: 5686 { 5687 unsigned int shift; 5688 5689 /* Make sure the target of JALX is word-aligned. Bit 0 must be 5690 the correct ISA mode selector and bit 1 must be 0. */ 5691 if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26)) 5692 return bfd_reloc_outofrange; 5693 5694 /* Shift is 2, unusually, for microMIPS JALX. */ 5695 shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2; 5696 5697 if (was_local_p) 5698 value = addend | ((p + 4) & (0xfc000000 << shift)); 5699 else 5700 value = _bfd_mips_elf_sign_extend (addend, 26 + shift); 5701 value = (value + symbol) >> shift; 5702 if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak) 5703 overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift)); 5704 value &= howto->dst_mask; 5705 } 5706 break; 5707 5708 case R_MIPS_TLS_DTPREL_HI16: 5709 case R_MIPS16_TLS_DTPREL_HI16: 5710 case R_MICROMIPS_TLS_DTPREL_HI16: 5711 value = (mips_elf_high (addend + symbol - dtprel_base (info)) 5712 & howto->dst_mask); 5713 break; 5714 5715 case R_MIPS_TLS_DTPREL_LO16: 5716 case R_MIPS_TLS_DTPREL32: 5717 case R_MIPS_TLS_DTPREL64: 5718 case R_MIPS16_TLS_DTPREL_LO16: 5719 case R_MICROMIPS_TLS_DTPREL_LO16: 5720 value = (symbol + addend - dtprel_base (info)) & howto->dst_mask; 5721 break; 5722 5723 case R_MIPS_TLS_TPREL_HI16: 5724 case R_MIPS16_TLS_TPREL_HI16: 5725 case R_MICROMIPS_TLS_TPREL_HI16: 5726 value = (mips_elf_high (addend + symbol - tprel_base (info)) 5727 & howto->dst_mask); 5728 break; 5729 5730 case R_MIPS_TLS_TPREL_LO16: 5731 case R_MIPS_TLS_TPREL32: 5732 case R_MIPS_TLS_TPREL64: 5733 case R_MIPS16_TLS_TPREL_LO16: 5734 case R_MICROMIPS_TLS_TPREL_LO16: 5735 value = (symbol + addend - tprel_base (info)) & howto->dst_mask; 5736 break; 5737 5738 case R_MIPS_HI16: 5739 case R_MIPS16_HI16: 5740 case R_MICROMIPS_HI16: 5741 if (!gp_disp_p) 5742 { 5743 value = mips_elf_high (addend + symbol); 5744 value &= howto->dst_mask; 5745 } 5746 else 5747 { 5748 /* For MIPS16 ABI code we generate this sequence 5749 0: li $v0,%hi(_gp_disp) 5750 4: addiupc $v1,%lo(_gp_disp) 5751 8: sll $v0,16 5752 12: addu $v0,$v1 5753 14: move $gp,$v0 5754 So the offsets of hi and lo relocs are the same, but the 5755 base $pc is that used by the ADDIUPC instruction at $t9 + 4. 5756 ADDIUPC clears the low two bits of the instruction address, 5757 so the base is ($t9 + 4) & ~3. */ 5758 if (r_type == R_MIPS16_HI16) 5759 value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3)); 5760 /* The microMIPS .cpload sequence uses the same assembly 5761 instructions as the traditional psABI version, but the 5762 incoming $t9 has the low bit set. */ 5763 else if (r_type == R_MICROMIPS_HI16) 5764 value = mips_elf_high (addend + gp - p - 1); 5765 else 5766 value = mips_elf_high (addend + gp - p); 5767 overflowed_p = mips_elf_overflow_p (value, 16); 5768 } 5769 break; 5770 5771 case R_MIPS_LO16: 5772 case R_MIPS16_LO16: 5773 case R_MICROMIPS_LO16: 5774 case R_MICROMIPS_HI0_LO16: 5775 if (!gp_disp_p) 5776 value = (symbol + addend) & howto->dst_mask; 5777 else 5778 { 5779 /* See the comment for R_MIPS16_HI16 above for the reason 5780 for this conditional. */ 5781 if (r_type == R_MIPS16_LO16) 5782 value = addend + gp - (p & ~(bfd_vma) 0x3); 5783 else if (r_type == R_MICROMIPS_LO16 5784 || r_type == R_MICROMIPS_HI0_LO16) 5785 value = addend + gp - p + 3; 5786 else 5787 value = addend + gp - p + 4; 5788 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation 5789 for overflow. But, on, say, IRIX5, relocations against 5790 _gp_disp are normally generated from the .cpload 5791 pseudo-op. It generates code that normally looks like 5792 this: 5793 5794 lui $gp,%hi(_gp_disp) 5795 addiu $gp,$gp,%lo(_gp_disp) 5796 addu $gp,$gp,$t9 5797 5798 Here $t9 holds the address of the function being called, 5799 as required by the MIPS ELF ABI. The R_MIPS_LO16 5800 relocation can easily overflow in this situation, but the 5801 R_MIPS_HI16 relocation will handle the overflow. 5802 Therefore, we consider this a bug in the MIPS ABI, and do 5803 not check for overflow here. */ 5804 } 5805 break; 5806 5807 case R_MIPS_LITERAL: 5808 case R_MICROMIPS_LITERAL: 5809 /* Because we don't merge literal sections, we can handle this 5810 just like R_MIPS_GPREL16. In the long run, we should merge 5811 shared literals, and then we will need to additional work 5812 here. */ 5813 5814 /* Fall through. */ 5815 5816 case R_MIPS16_GPREL: 5817 /* The R_MIPS16_GPREL performs the same calculation as 5818 R_MIPS_GPREL16, but stores the relocated bits in a different 5819 order. We don't need to do anything special here; the 5820 differences are handled in mips_elf_perform_relocation. */ 5821 case R_MIPS_GPREL16: 5822 case R_MICROMIPS_GPREL7_S2: 5823 case R_MICROMIPS_GPREL16: 5824 /* Only sign-extend the addend if it was extracted from the 5825 instruction. If the addend was separate, leave it alone, 5826 otherwise we may lose significant bits. */ 5827 if (howto->partial_inplace) 5828 addend = _bfd_mips_elf_sign_extend (addend, 16); 5829 value = symbol + addend - gp; 5830 /* If the symbol was local, any earlier relocatable links will 5831 have adjusted its addend with the gp offset, so compensate 5832 for that now. Don't do it for symbols forced local in this 5833 link, though, since they won't have had the gp offset applied 5834 to them before. */ 5835 if (was_local_p) 5836 value += gp0; 5837 overflowed_p = mips_elf_overflow_p (value, 16); 5838 break; 5839 5840 case R_MIPS16_GOT16: 5841 case R_MIPS16_CALL16: 5842 case R_MIPS_GOT16: 5843 case R_MIPS_CALL16: 5844 case R_MICROMIPS_GOT16: 5845 case R_MICROMIPS_CALL16: 5846 /* VxWorks does not have separate local and global semantics for 5847 R_MIPS*_GOT16; every relocation evaluates to "G". */ 5848 if (!htab->is_vxworks && local_p) 5849 { 5850 value = mips_elf_got16_entry (abfd, input_bfd, info, 5851 symbol + addend, !was_local_p); 5852 if (value == MINUS_ONE) 5853 return bfd_reloc_outofrange; 5854 value 5855 = mips_elf_got_offset_from_index (info, abfd, input_bfd, value); 5856 overflowed_p = mips_elf_overflow_p (value, 16); 5857 break; 5858 } 5859 5860 /* Fall through. */ 5861 5862 case R_MIPS_TLS_GD: 5863 case R_MIPS_TLS_GOTTPREL: 5864 case R_MIPS_TLS_LDM: 5865 case R_MIPS_GOT_DISP: 5866 case R_MIPS16_TLS_GD: 5867 case R_MIPS16_TLS_GOTTPREL: 5868 case R_MIPS16_TLS_LDM: 5869 case R_MICROMIPS_TLS_GD: 5870 case R_MICROMIPS_TLS_GOTTPREL: 5871 case R_MICROMIPS_TLS_LDM: 5872 case R_MICROMIPS_GOT_DISP: 5873 value = g; 5874 overflowed_p = mips_elf_overflow_p (value, 16); 5875 break; 5876 5877 case R_MIPS_GPREL32: 5878 value = (addend + symbol + gp0 - gp); 5879 if (!save_addend) 5880 value &= howto->dst_mask; 5881 break; 5882 5883 case R_MIPS_PC16: 5884 case R_MIPS_GNU_REL16_S2: 5885 value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p; 5886 overflowed_p = mips_elf_overflow_p (value, 18); 5887 value >>= howto->rightshift; 5888 value &= howto->dst_mask; 5889 break; 5890 5891 case R_MICROMIPS_PC7_S1: 5892 value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p; 5893 overflowed_p = mips_elf_overflow_p (value, 8); 5894 value >>= howto->rightshift; 5895 value &= howto->dst_mask; 5896 break; 5897 5898 case R_MICROMIPS_PC10_S1: 5899 value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p; 5900 overflowed_p = mips_elf_overflow_p (value, 11); 5901 value >>= howto->rightshift; 5902 value &= howto->dst_mask; 5903 break; 5904 5905 case R_MICROMIPS_PC16_S1: 5906 value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p; 5907 overflowed_p = mips_elf_overflow_p (value, 17); 5908 value >>= howto->rightshift; 5909 value &= howto->dst_mask; 5910 break; 5911 5912 case R_MICROMIPS_PC23_S2: 5913 value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3); 5914 overflowed_p = mips_elf_overflow_p (value, 25); 5915 value >>= howto->rightshift; 5916 value &= howto->dst_mask; 5917 break; 5918 5919 case R_MIPS_GOT_HI16: 5920 case R_MIPS_CALL_HI16: 5921 case R_MICROMIPS_GOT_HI16: 5922 case R_MICROMIPS_CALL_HI16: 5923 /* We're allowed to handle these two relocations identically. 5924 The dynamic linker is allowed to handle the CALL relocations 5925 differently by creating a lazy evaluation stub. */ 5926 value = g; 5927 value = mips_elf_high (value); 5928 value &= howto->dst_mask; 5929 break; 5930 5931 case R_MIPS_GOT_LO16: 5932 case R_MIPS_CALL_LO16: 5933 case R_MICROMIPS_GOT_LO16: 5934 case R_MICROMIPS_CALL_LO16: 5935 value = g & howto->dst_mask; 5936 break; 5937 5938 case R_MIPS_GOT_PAGE: 5939 case R_MICROMIPS_GOT_PAGE: 5940 value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL); 5941 if (value == MINUS_ONE) 5942 return bfd_reloc_outofrange; 5943 value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value); 5944 overflowed_p = mips_elf_overflow_p (value, 16); 5945 break; 5946 5947 case R_MIPS_GOT_OFST: 5948 case R_MICROMIPS_GOT_OFST: 5949 if (local_p) 5950 mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value); 5951 else 5952 value = addend; 5953 overflowed_p = mips_elf_overflow_p (value, 16); 5954 break; 5955 5956 case R_MIPS_SUB: 5957 case R_MICROMIPS_SUB: 5958 value = symbol - addend; 5959 value &= howto->dst_mask; 5960 break; 5961 5962 case R_MIPS_HIGHER: 5963 case R_MICROMIPS_HIGHER: 5964 value = mips_elf_higher (addend + symbol); 5965 value &= howto->dst_mask; 5966 break; 5967 5968 case R_MIPS_HIGHEST: 5969 case R_MICROMIPS_HIGHEST: 5970 value = mips_elf_highest (addend + symbol); 5971 value &= howto->dst_mask; 5972 break; 5973 5974 case R_MIPS_SCN_DISP: 5975 case R_MICROMIPS_SCN_DISP: 5976 value = symbol + addend - sec->output_offset; 5977 value &= howto->dst_mask; 5978 break; 5979 5980 case R_MIPS_JALR: 5981 case R_MICROMIPS_JALR: 5982 /* This relocation is only a hint. In some cases, we optimize 5983 it into a bal instruction. But we don't try to optimize 5984 when the symbol does not resolve locally. */ 5985 if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root)) 5986 return bfd_reloc_continue; 5987 value = symbol + addend; 5988 break; 5989 5990 case R_MIPS_PJUMP: 5991 case R_MIPS_GNU_VTINHERIT: 5992 case R_MIPS_GNU_VTENTRY: 5993 /* We don't do anything with these at present. */ 5994 return bfd_reloc_continue; 5995 5996 default: 5997 /* An unrecognized relocation type. */ 5998 return bfd_reloc_notsupported; 5999 } 6000 6001 /* Store the VALUE for our caller. */ 6002 *valuep = value; 6003 return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok; 6004 } 6005 6006 /* Obtain the field relocated by RELOCATION. */ 6007 6008 static bfd_vma 6009 mips_elf_obtain_contents (reloc_howto_type *howto, 6010 const Elf_Internal_Rela *relocation, 6011 bfd *input_bfd, bfd_byte *contents) 6012 { 6013 bfd_vma x; 6014 bfd_byte *location = contents + relocation->r_offset; 6015 6016 /* Obtain the bytes. */ 6017 x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location); 6018 6019 return x; 6020 } 6021 6022 /* It has been determined that the result of the RELOCATION is the 6023 VALUE. Use HOWTO to place VALUE into the output file at the 6024 appropriate position. The SECTION is the section to which the 6025 relocation applies. 6026 CROSS_MODE_JUMP_P is true if the relocation field 6027 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa. 6028 6029 Returns FALSE if anything goes wrong. */ 6030 6031 static bfd_boolean 6032 mips_elf_perform_relocation (struct bfd_link_info *info, 6033 reloc_howto_type *howto, 6034 const Elf_Internal_Rela *relocation, 6035 bfd_vma value, bfd *input_bfd, 6036 asection *input_section, bfd_byte *contents, 6037 bfd_boolean cross_mode_jump_p) 6038 { 6039 bfd_vma x; 6040 bfd_byte *location; 6041 int r_type = ELF_R_TYPE (input_bfd, relocation->r_info); 6042 6043 /* Figure out where the relocation is occurring. */ 6044 location = contents + relocation->r_offset; 6045 6046 _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location); 6047 6048 /* Obtain the current value. */ 6049 x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents); 6050 6051 /* Clear the field we are setting. */ 6052 x &= ~howto->dst_mask; 6053 6054 /* Set the field. */ 6055 x |= (value & howto->dst_mask); 6056 6057 /* If required, turn JAL into JALX. */ 6058 if (cross_mode_jump_p && jal_reloc_p (r_type)) 6059 { 6060 bfd_boolean ok; 6061 bfd_vma opcode = x >> 26; 6062 bfd_vma jalx_opcode; 6063 6064 /* Check to see if the opcode is already JAL or JALX. */ 6065 if (r_type == R_MIPS16_26) 6066 { 6067 ok = ((opcode == 0x6) || (opcode == 0x7)); 6068 jalx_opcode = 0x7; 6069 } 6070 else if (r_type == R_MICROMIPS_26_S1) 6071 { 6072 ok = ((opcode == 0x3d) || (opcode == 0x3c)); 6073 jalx_opcode = 0x3c; 6074 } 6075 else 6076 { 6077 ok = ((opcode == 0x3) || (opcode == 0x1d)); 6078 jalx_opcode = 0x1d; 6079 } 6080 6081 /* If the opcode is not JAL or JALX, there's a problem. We cannot 6082 convert J or JALS to JALX. */ 6083 if (!ok) 6084 { 6085 (*_bfd_error_handler) 6086 (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."), 6087 input_bfd, 6088 input_section, 6089 (unsigned long) relocation->r_offset); 6090 bfd_set_error (bfd_error_bad_value); 6091 return FALSE; 6092 } 6093 6094 /* Make this the JALX opcode. */ 6095 x = (x & ~(0x3f << 26)) | (jalx_opcode << 26); 6096 } 6097 6098 /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in 6099 range. */ 6100 if (!info->relocatable 6101 && !cross_mode_jump_p 6102 && ((JAL_TO_BAL_P (input_bfd) 6103 && r_type == R_MIPS_26 6104 && (x >> 26) == 0x3) /* jal addr */ 6105 || (JALR_TO_BAL_P (input_bfd) 6106 && r_type == R_MIPS_JALR 6107 && x == 0x0320f809) /* jalr t9 */ 6108 || (JR_TO_B_P (input_bfd) 6109 && r_type == R_MIPS_JALR 6110 && x == 0x03200008))) /* jr t9 */ 6111 { 6112 bfd_vma addr; 6113 bfd_vma dest; 6114 bfd_signed_vma off; 6115 6116 addr = (input_section->output_section->vma 6117 + input_section->output_offset 6118 + relocation->r_offset 6119 + 4); 6120 if (r_type == R_MIPS_26) 6121 dest = (value << 2) | ((addr >> 28) << 28); 6122 else 6123 dest = value; 6124 off = dest - addr; 6125 if (off <= 0x1ffff && off >= -0x20000) 6126 { 6127 if (x == 0x03200008) /* jr t9 */ 6128 x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff); /* b addr */ 6129 else 6130 x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff); /* bal addr */ 6131 } 6132 } 6133 6134 /* Put the value into the output. */ 6135 bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location); 6136 6137 _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable, 6138 location); 6139 6140 return TRUE; 6141 } 6142 6143 /* Create a rel.dyn relocation for the dynamic linker to resolve. REL 6144 is the original relocation, which is now being transformed into a 6145 dynamic relocation. The ADDENDP is adjusted if necessary; the 6146 caller should store the result in place of the original addend. */ 6147 6148 static bfd_boolean 6149 mips_elf_create_dynamic_relocation (bfd *output_bfd, 6150 struct bfd_link_info *info, 6151 const Elf_Internal_Rela *rel, 6152 struct mips_elf_link_hash_entry *h, 6153 asection *sec, bfd_vma symbol, 6154 bfd_vma *addendp, asection *input_section) 6155 { 6156 Elf_Internal_Rela outrel[3]; 6157 asection *sreloc; 6158 bfd *dynobj; 6159 int r_type; 6160 long indx; 6161 bfd_boolean defined_p; 6162 struct mips_elf_link_hash_table *htab; 6163 6164 htab = mips_elf_hash_table (info); 6165 BFD_ASSERT (htab != NULL); 6166 6167 r_type = ELF_R_TYPE (output_bfd, rel->r_info); 6168 dynobj = elf_hash_table (info)->dynobj; 6169 sreloc = mips_elf_rel_dyn_section (info, FALSE); 6170 BFD_ASSERT (sreloc != NULL); 6171 BFD_ASSERT (sreloc->contents != NULL); 6172 BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd) 6173 < sreloc->size); 6174 6175 outrel[0].r_offset = 6176 _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset); 6177 if (ABI_64_P (output_bfd)) 6178 { 6179 outrel[1].r_offset = 6180 _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset); 6181 outrel[2].r_offset = 6182 _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset); 6183 } 6184 6185 if (outrel[0].r_offset == MINUS_ONE) 6186 /* The relocation field has been deleted. */ 6187 return TRUE; 6188 6189 if (outrel[0].r_offset == MINUS_TWO) 6190 { 6191 /* The relocation field has been converted into a relative value of 6192 some sort. Functions like _bfd_elf_write_section_eh_frame expect 6193 the field to be fully relocated, so add in the symbol's value. */ 6194 *addendp += symbol; 6195 return TRUE; 6196 } 6197 6198 /* We must now calculate the dynamic symbol table index to use 6199 in the relocation. */ 6200 if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root)) 6201 { 6202 BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE); 6203 indx = h->root.dynindx; 6204 if (SGI_COMPAT (output_bfd)) 6205 defined_p = h->root.def_regular; 6206 else 6207 /* ??? glibc's ld.so just adds the final GOT entry to the 6208 relocation field. It therefore treats relocs against 6209 defined symbols in the same way as relocs against 6210 undefined symbols. */ 6211 defined_p = FALSE; 6212 } 6213 else 6214 { 6215 if (sec != NULL && bfd_is_abs_section (sec)) 6216 indx = 0; 6217 else if (sec == NULL || sec->owner == NULL) 6218 { 6219 bfd_set_error (bfd_error_bad_value); 6220 return FALSE; 6221 } 6222 else 6223 { 6224 indx = elf_section_data (sec->output_section)->dynindx; 6225 if (indx == 0) 6226 { 6227 asection *osec = htab->root.text_index_section; 6228 indx = elf_section_data (osec)->dynindx; 6229 } 6230 if (indx == 0) 6231 abort (); 6232 } 6233 6234 /* Instead of generating a relocation using the section 6235 symbol, we may as well make it a fully relative 6236 relocation. We want to avoid generating relocations to 6237 local symbols because we used to generate them 6238 incorrectly, without adding the original symbol value, 6239 which is mandated by the ABI for section symbols. In 6240 order to give dynamic loaders and applications time to 6241 phase out the incorrect use, we refrain from emitting 6242 section-relative relocations. It's not like they're 6243 useful, after all. This should be a bit more efficient 6244 as well. */ 6245 /* ??? Although this behavior is compatible with glibc's ld.so, 6246 the ABI says that relocations against STN_UNDEF should have 6247 a symbol value of 0. Irix rld honors this, so relocations 6248 against STN_UNDEF have no effect. */ 6249 if (!SGI_COMPAT (output_bfd)) 6250 indx = 0; 6251 defined_p = TRUE; 6252 } 6253 6254 /* If the relocation was previously an absolute relocation and 6255 this symbol will not be referred to by the relocation, we must 6256 adjust it by the value we give it in the dynamic symbol table. 6257 Otherwise leave the job up to the dynamic linker. */ 6258 if (defined_p && r_type != R_MIPS_REL32) 6259 *addendp += symbol; 6260 6261 if (htab->is_vxworks) 6262 /* VxWorks uses non-relative relocations for this. */ 6263 outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32); 6264 else 6265 /* The relocation is always an REL32 relocation because we don't 6266 know where the shared library will wind up at load-time. */ 6267 outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx, 6268 R_MIPS_REL32); 6269 6270 /* For strict adherence to the ABI specification, we should 6271 generate a R_MIPS_64 relocation record by itself before the 6272 _REL32/_64 record as well, such that the addend is read in as 6273 a 64-bit value (REL32 is a 32-bit relocation, after all). 6274 However, since none of the existing ELF64 MIPS dynamic 6275 loaders seems to care, we don't waste space with these 6276 artificial relocations. If this turns out to not be true, 6277 mips_elf_allocate_dynamic_relocation() should be tweaked so 6278 as to make room for a pair of dynamic relocations per 6279 invocation if ABI_64_P, and here we should generate an 6280 additional relocation record with R_MIPS_64 by itself for a 6281 NULL symbol before this relocation record. */ 6282 outrel[1].r_info = ELF_R_INFO (output_bfd, 0, 6283 ABI_64_P (output_bfd) 6284 ? R_MIPS_64 6285 : R_MIPS_NONE); 6286 outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE); 6287 6288 /* Adjust the output offset of the relocation to reference the 6289 correct location in the output file. */ 6290 outrel[0].r_offset += (input_section->output_section->vma 6291 + input_section->output_offset); 6292 outrel[1].r_offset += (input_section->output_section->vma 6293 + input_section->output_offset); 6294 outrel[2].r_offset += (input_section->output_section->vma 6295 + input_section->output_offset); 6296 6297 /* Put the relocation back out. We have to use the special 6298 relocation outputter in the 64-bit case since the 64-bit 6299 relocation format is non-standard. */ 6300 if (ABI_64_P (output_bfd)) 6301 { 6302 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out) 6303 (output_bfd, &outrel[0], 6304 (sreloc->contents 6305 + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel))); 6306 } 6307 else if (htab->is_vxworks) 6308 { 6309 /* VxWorks uses RELA rather than REL dynamic relocations. */ 6310 outrel[0].r_addend = *addendp; 6311 bfd_elf32_swap_reloca_out 6312 (output_bfd, &outrel[0], 6313 (sreloc->contents 6314 + sreloc->reloc_count * sizeof (Elf32_External_Rela))); 6315 } 6316 else 6317 bfd_elf32_swap_reloc_out 6318 (output_bfd, &outrel[0], 6319 (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel))); 6320 6321 /* We've now added another relocation. */ 6322 ++sreloc->reloc_count; 6323 6324 /* Make sure the output section is writable. The dynamic linker 6325 will be writing to it. */ 6326 elf_section_data (input_section->output_section)->this_hdr.sh_flags 6327 |= SHF_WRITE; 6328 6329 /* On IRIX5, make an entry of compact relocation info. */ 6330 if (IRIX_COMPAT (output_bfd) == ict_irix5) 6331 { 6332 asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel"); 6333 bfd_byte *cr; 6334 6335 if (scpt) 6336 { 6337 Elf32_crinfo cptrel; 6338 6339 mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG); 6340 cptrel.vaddr = (rel->r_offset 6341 + input_section->output_section->vma 6342 + input_section->output_offset); 6343 if (r_type == R_MIPS_REL32) 6344 mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32); 6345 else 6346 mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD); 6347 mips_elf_set_cr_dist2to (cptrel, 0); 6348 cptrel.konst = *addendp; 6349 6350 cr = (scpt->contents 6351 + sizeof (Elf32_External_compact_rel)); 6352 mips_elf_set_cr_relvaddr (cptrel, 0); 6353 bfd_elf32_swap_crinfo_out (output_bfd, &cptrel, 6354 ((Elf32_External_crinfo *) cr 6355 + scpt->reloc_count)); 6356 ++scpt->reloc_count; 6357 } 6358 } 6359 6360 /* If we've written this relocation for a readonly section, 6361 we need to set DF_TEXTREL again, so that we do not delete the 6362 DT_TEXTREL tag. */ 6363 if (MIPS_ELF_READONLY_SECTION (input_section)) 6364 info->flags |= DF_TEXTREL; 6365 6366 return TRUE; 6367 } 6368 6369 /* Return the MACH for a MIPS e_flags value. */ 6370 6371 unsigned long 6372 _bfd_elf_mips_mach (flagword flags) 6373 { 6374 switch (flags & EF_MIPS_MACH) 6375 { 6376 case E_MIPS_MACH_3900: 6377 return bfd_mach_mips3900; 6378 6379 case E_MIPS_MACH_4010: 6380 return bfd_mach_mips4010; 6381 6382 case E_MIPS_MACH_4100: 6383 return bfd_mach_mips4100; 6384 6385 case E_MIPS_MACH_4111: 6386 return bfd_mach_mips4111; 6387 6388 case E_MIPS_MACH_4120: 6389 return bfd_mach_mips4120; 6390 6391 case E_MIPS_MACH_4650: 6392 return bfd_mach_mips4650; 6393 6394 case E_MIPS_MACH_5400: 6395 return bfd_mach_mips5400; 6396 6397 case E_MIPS_MACH_5500: 6398 return bfd_mach_mips5500; 6399 6400 case E_MIPS_MACH_5900: 6401 return bfd_mach_mips5900; 6402 6403 case E_MIPS_MACH_9000: 6404 return bfd_mach_mips9000; 6405 6406 case E_MIPS_MACH_SB1: 6407 return bfd_mach_mips_sb1; 6408 6409 case E_MIPS_MACH_LS2E: 6410 return bfd_mach_mips_loongson_2e; 6411 6412 case E_MIPS_MACH_LS2F: 6413 return bfd_mach_mips_loongson_2f; 6414 6415 case E_MIPS_MACH_LS3A: 6416 return bfd_mach_mips_loongson_3a; 6417 6418 case E_MIPS_MACH_OCTEON2: 6419 return bfd_mach_mips_octeon2; 6420 6421 case E_MIPS_MACH_OCTEON: 6422 return bfd_mach_mips_octeon; 6423 6424 case E_MIPS_MACH_XLR: 6425 return bfd_mach_mips_xlr; 6426 6427 default: 6428 switch (flags & EF_MIPS_ARCH) 6429 { 6430 default: 6431 case E_MIPS_ARCH_1: 6432 return bfd_mach_mips3000; 6433 6434 case E_MIPS_ARCH_2: 6435 return bfd_mach_mips6000; 6436 6437 case E_MIPS_ARCH_3: 6438 return bfd_mach_mips4000; 6439 6440 case E_MIPS_ARCH_4: 6441 return bfd_mach_mips8000; 6442 6443 case E_MIPS_ARCH_5: 6444 return bfd_mach_mips5; 6445 6446 case E_MIPS_ARCH_32: 6447 return bfd_mach_mipsisa32; 6448 6449 case E_MIPS_ARCH_64: 6450 return bfd_mach_mipsisa64; 6451 6452 case E_MIPS_ARCH_32R2: 6453 return bfd_mach_mipsisa32r2; 6454 6455 case E_MIPS_ARCH_64R2: 6456 return bfd_mach_mipsisa64r2; 6457 } 6458 } 6459 6460 return 0; 6461 } 6462 6463 /* Return printable name for ABI. */ 6464 6465 static INLINE char * 6466 elf_mips_abi_name (bfd *abfd) 6467 { 6468 flagword flags; 6469 6470 flags = elf_elfheader (abfd)->e_flags; 6471 switch (flags & EF_MIPS_ABI) 6472 { 6473 case 0: 6474 if (ABI_N32_P (abfd)) 6475 return "N32"; 6476 else if (ABI_64_P (abfd)) 6477 return "64"; 6478 else 6479 return "none"; 6480 case E_MIPS_ABI_O32: 6481 return "O32"; 6482 case E_MIPS_ABI_O64: 6483 return "O64"; 6484 case E_MIPS_ABI_EABI32: 6485 return "EABI32"; 6486 case E_MIPS_ABI_EABI64: 6487 return "EABI64"; 6488 default: 6489 return "unknown abi"; 6490 } 6491 } 6492 6493 /* MIPS ELF uses two common sections. One is the usual one, and the 6494 other is for small objects. All the small objects are kept 6495 together, and then referenced via the gp pointer, which yields 6496 faster assembler code. This is what we use for the small common 6497 section. This approach is copied from ecoff.c. */ 6498 static asection mips_elf_scom_section; 6499 static asymbol mips_elf_scom_symbol; 6500 static asymbol *mips_elf_scom_symbol_ptr; 6501 6502 /* MIPS ELF also uses an acommon section, which represents an 6503 allocated common symbol which may be overridden by a 6504 definition in a shared library. */ 6505 static asection mips_elf_acom_section; 6506 static asymbol mips_elf_acom_symbol; 6507 static asymbol *mips_elf_acom_symbol_ptr; 6508 6509 /* This is used for both the 32-bit and the 64-bit ABI. */ 6510 6511 void 6512 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym) 6513 { 6514 elf_symbol_type *elfsym; 6515 6516 /* Handle the special MIPS section numbers that a symbol may use. */ 6517 elfsym = (elf_symbol_type *) asym; 6518 switch (elfsym->internal_elf_sym.st_shndx) 6519 { 6520 case SHN_MIPS_ACOMMON: 6521 /* This section is used in a dynamically linked executable file. 6522 It is an allocated common section. The dynamic linker can 6523 either resolve these symbols to something in a shared 6524 library, or it can just leave them here. For our purposes, 6525 we can consider these symbols to be in a new section. */ 6526 if (mips_elf_acom_section.name == NULL) 6527 { 6528 /* Initialize the acommon section. */ 6529 mips_elf_acom_section.name = ".acommon"; 6530 mips_elf_acom_section.flags = SEC_ALLOC; 6531 mips_elf_acom_section.output_section = &mips_elf_acom_section; 6532 mips_elf_acom_section.symbol = &mips_elf_acom_symbol; 6533 mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr; 6534 mips_elf_acom_symbol.name = ".acommon"; 6535 mips_elf_acom_symbol.flags = BSF_SECTION_SYM; 6536 mips_elf_acom_symbol.section = &mips_elf_acom_section; 6537 mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol; 6538 } 6539 asym->section = &mips_elf_acom_section; 6540 break; 6541 6542 case SHN_COMMON: 6543 /* Common symbols less than the GP size are automatically 6544 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */ 6545 if (asym->value > elf_gp_size (abfd) 6546 || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS 6547 || IRIX_COMPAT (abfd) == ict_irix6) 6548 break; 6549 /* Fall through. */ 6550 case SHN_MIPS_SCOMMON: 6551 if (mips_elf_scom_section.name == NULL) 6552 { 6553 /* Initialize the small common section. */ 6554 mips_elf_scom_section.name = ".scommon"; 6555 mips_elf_scom_section.flags = SEC_IS_COMMON; 6556 mips_elf_scom_section.output_section = &mips_elf_scom_section; 6557 mips_elf_scom_section.symbol = &mips_elf_scom_symbol; 6558 mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr; 6559 mips_elf_scom_symbol.name = ".scommon"; 6560 mips_elf_scom_symbol.flags = BSF_SECTION_SYM; 6561 mips_elf_scom_symbol.section = &mips_elf_scom_section; 6562 mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol; 6563 } 6564 asym->section = &mips_elf_scom_section; 6565 asym->value = elfsym->internal_elf_sym.st_size; 6566 break; 6567 6568 case SHN_MIPS_SUNDEFINED: 6569 asym->section = bfd_und_section_ptr; 6570 break; 6571 6572 case SHN_MIPS_TEXT: 6573 { 6574 asection *section = bfd_get_section_by_name (abfd, ".text"); 6575 6576 if (section != NULL) 6577 { 6578 asym->section = section; 6579 /* MIPS_TEXT is a bit special, the address is not an offset 6580 to the base of the .text section. So substract the section 6581 base address to make it an offset. */ 6582 asym->value -= section->vma; 6583 } 6584 } 6585 break; 6586 6587 case SHN_MIPS_DATA: 6588 { 6589 asection *section = bfd_get_section_by_name (abfd, ".data"); 6590 6591 if (section != NULL) 6592 { 6593 asym->section = section; 6594 /* MIPS_DATA is a bit special, the address is not an offset 6595 to the base of the .data section. So substract the section 6596 base address to make it an offset. */ 6597 asym->value -= section->vma; 6598 } 6599 } 6600 break; 6601 } 6602 6603 /* If this is an odd-valued function symbol, assume it's a MIPS16 6604 or microMIPS one. */ 6605 if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC 6606 && (asym->value & 1) != 0) 6607 { 6608 asym->value--; 6609 if (MICROMIPS_P (abfd)) 6610 elfsym->internal_elf_sym.st_other 6611 = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other); 6612 else 6613 elfsym->internal_elf_sym.st_other 6614 = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other); 6615 } 6616 } 6617 6618 /* Implement elf_backend_eh_frame_address_size. This differs from 6619 the default in the way it handles EABI64. 6620 6621 EABI64 was originally specified as an LP64 ABI, and that is what 6622 -mabi=eabi normally gives on a 64-bit target. However, gcc has 6623 historically accepted the combination of -mabi=eabi and -mlong32, 6624 and this ILP32 variation has become semi-official over time. 6625 Both forms use elf32 and have pointer-sized FDE addresses. 6626 6627 If an EABI object was generated by GCC 4.0 or above, it will have 6628 an empty .gcc_compiled_longXX section, where XX is the size of longs 6629 in bits. Unfortunately, ILP32 objects generated by earlier compilers 6630 have no special marking to distinguish them from LP64 objects. 6631 6632 We don't want users of the official LP64 ABI to be punished for the 6633 existence of the ILP32 variant, but at the same time, we don't want 6634 to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects. 6635 We therefore take the following approach: 6636 6637 - If ABFD contains a .gcc_compiled_longXX section, use it to 6638 determine the pointer size. 6639 6640 - Otherwise check the type of the first relocation. Assume that 6641 the LP64 ABI is being used if the relocation is of type R_MIPS_64. 6642 6643 - Otherwise punt. 6644 6645 The second check is enough to detect LP64 objects generated by pre-4.0 6646 compilers because, in the kind of output generated by those compilers, 6647 the first relocation will be associated with either a CIE personality 6648 routine or an FDE start address. Furthermore, the compilers never 6649 used a special (non-pointer) encoding for this ABI. 6650 6651 Checking the relocation type should also be safe because there is no 6652 reason to use R_MIPS_64 in an ILP32 object. Pre-4.0 compilers never 6653 did so. */ 6654 6655 unsigned int 6656 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec) 6657 { 6658 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64) 6659 return 8; 6660 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64) 6661 { 6662 bfd_boolean long32_p, long64_p; 6663 6664 long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0; 6665 long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0; 6666 if (long32_p && long64_p) 6667 return 0; 6668 if (long32_p) 6669 return 4; 6670 if (long64_p) 6671 return 8; 6672 6673 if (sec->reloc_count > 0 6674 && elf_section_data (sec)->relocs != NULL 6675 && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info) 6676 == R_MIPS_64)) 6677 return 8; 6678 6679 return 0; 6680 } 6681 return 4; 6682 } 6683 6684 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP 6685 relocations against two unnamed section symbols to resolve to the 6686 same address. For example, if we have code like: 6687 6688 lw $4,%got_disp(.data)($gp) 6689 lw $25,%got_disp(.text)($gp) 6690 jalr $25 6691 6692 then the linker will resolve both relocations to .data and the program 6693 will jump there rather than to .text. 6694 6695 We can work around this problem by giving names to local section symbols. 6696 This is also what the MIPSpro tools do. */ 6697 6698 bfd_boolean 6699 _bfd_mips_elf_name_local_section_symbols (bfd *abfd) 6700 { 6701 return SGI_COMPAT (abfd); 6702 } 6703 6704 /* Work over a section just before writing it out. This routine is 6705 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize 6706 sections that need the SHF_MIPS_GPREL flag by name; there has to be 6707 a better way. */ 6708 6709 bfd_boolean 6710 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr) 6711 { 6712 if (hdr->sh_type == SHT_MIPS_REGINFO 6713 && hdr->sh_size > 0) 6714 { 6715 bfd_byte buf[4]; 6716 6717 BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo)); 6718 BFD_ASSERT (hdr->contents == NULL); 6719 6720 if (bfd_seek (abfd, 6721 hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4, 6722 SEEK_SET) != 0) 6723 return FALSE; 6724 H_PUT_32 (abfd, elf_gp (abfd), buf); 6725 if (bfd_bwrite (buf, 4, abfd) != 4) 6726 return FALSE; 6727 } 6728 6729 if (hdr->sh_type == SHT_MIPS_OPTIONS 6730 && hdr->bfd_section != NULL 6731 && mips_elf_section_data (hdr->bfd_section) != NULL 6732 && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL) 6733 { 6734 bfd_byte *contents, *l, *lend; 6735 6736 /* We stored the section contents in the tdata field in the 6737 set_section_contents routine. We save the section contents 6738 so that we don't have to read them again. 6739 At this point we know that elf_gp is set, so we can look 6740 through the section contents to see if there is an 6741 ODK_REGINFO structure. */ 6742 6743 contents = mips_elf_section_data (hdr->bfd_section)->u.tdata; 6744 l = contents; 6745 lend = contents + hdr->sh_size; 6746 while (l + sizeof (Elf_External_Options) <= lend) 6747 { 6748 Elf_Internal_Options intopt; 6749 6750 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l, 6751 &intopt); 6752 if (intopt.size < sizeof (Elf_External_Options)) 6753 { 6754 (*_bfd_error_handler) 6755 (_("%B: Warning: bad `%s' option size %u smaller than its header"), 6756 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size); 6757 break; 6758 } 6759 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO) 6760 { 6761 bfd_byte buf[8]; 6762 6763 if (bfd_seek (abfd, 6764 (hdr->sh_offset 6765 + (l - contents) 6766 + sizeof (Elf_External_Options) 6767 + (sizeof (Elf64_External_RegInfo) - 8)), 6768 SEEK_SET) != 0) 6769 return FALSE; 6770 H_PUT_64 (abfd, elf_gp (abfd), buf); 6771 if (bfd_bwrite (buf, 8, abfd) != 8) 6772 return FALSE; 6773 } 6774 else if (intopt.kind == ODK_REGINFO) 6775 { 6776 bfd_byte buf[4]; 6777 6778 if (bfd_seek (abfd, 6779 (hdr->sh_offset 6780 + (l - contents) 6781 + sizeof (Elf_External_Options) 6782 + (sizeof (Elf32_External_RegInfo) - 4)), 6783 SEEK_SET) != 0) 6784 return FALSE; 6785 H_PUT_32 (abfd, elf_gp (abfd), buf); 6786 if (bfd_bwrite (buf, 4, abfd) != 4) 6787 return FALSE; 6788 } 6789 l += intopt.size; 6790 } 6791 } 6792 6793 if (hdr->bfd_section != NULL) 6794 { 6795 const char *name = bfd_get_section_name (abfd, hdr->bfd_section); 6796 6797 /* .sbss is not handled specially here because the GNU/Linux 6798 prelinker can convert .sbss from NOBITS to PROGBITS and 6799 changing it back to NOBITS breaks the binary. The entry in 6800 _bfd_mips_elf_special_sections will ensure the correct flags 6801 are set on .sbss if BFD creates it without reading it from an 6802 input file, and without special handling here the flags set 6803 on it in an input file will be followed. */ 6804 if (strcmp (name, ".sdata") == 0 6805 || strcmp (name, ".lit8") == 0 6806 || strcmp (name, ".lit4") == 0) 6807 { 6808 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; 6809 hdr->sh_type = SHT_PROGBITS; 6810 } 6811 else if (strcmp (name, ".srdata") == 0) 6812 { 6813 hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL; 6814 hdr->sh_type = SHT_PROGBITS; 6815 } 6816 else if (strcmp (name, ".compact_rel") == 0) 6817 { 6818 hdr->sh_flags = 0; 6819 hdr->sh_type = SHT_PROGBITS; 6820 } 6821 else if (strcmp (name, ".rtproc") == 0) 6822 { 6823 if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0) 6824 { 6825 unsigned int adjust; 6826 6827 adjust = hdr->sh_size % hdr->sh_addralign; 6828 if (adjust != 0) 6829 hdr->sh_size += hdr->sh_addralign - adjust; 6830 } 6831 } 6832 } 6833 6834 return TRUE; 6835 } 6836 6837 /* Handle a MIPS specific section when reading an object file. This 6838 is called when elfcode.h finds a section with an unknown type. 6839 This routine supports both the 32-bit and 64-bit ELF ABI. 6840 6841 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure 6842 how to. */ 6843 6844 bfd_boolean 6845 _bfd_mips_elf_section_from_shdr (bfd *abfd, 6846 Elf_Internal_Shdr *hdr, 6847 const char *name, 6848 int shindex) 6849 { 6850 flagword flags = 0; 6851 6852 /* There ought to be a place to keep ELF backend specific flags, but 6853 at the moment there isn't one. We just keep track of the 6854 sections by their name, instead. Fortunately, the ABI gives 6855 suggested names for all the MIPS specific sections, so we will 6856 probably get away with this. */ 6857 switch (hdr->sh_type) 6858 { 6859 case SHT_MIPS_LIBLIST: 6860 if (strcmp (name, ".liblist") != 0) 6861 return FALSE; 6862 break; 6863 case SHT_MIPS_MSYM: 6864 if (strcmp (name, ".msym") != 0) 6865 return FALSE; 6866 break; 6867 case SHT_MIPS_CONFLICT: 6868 if (strcmp (name, ".conflict") != 0) 6869 return FALSE; 6870 break; 6871 case SHT_MIPS_GPTAB: 6872 if (! CONST_STRNEQ (name, ".gptab.")) 6873 return FALSE; 6874 break; 6875 case SHT_MIPS_UCODE: 6876 if (strcmp (name, ".ucode") != 0) 6877 return FALSE; 6878 break; 6879 case SHT_MIPS_DEBUG: 6880 if (strcmp (name, ".mdebug") != 0) 6881 return FALSE; 6882 flags = SEC_DEBUGGING; 6883 break; 6884 case SHT_MIPS_REGINFO: 6885 if (strcmp (name, ".reginfo") != 0 6886 || hdr->sh_size != sizeof (Elf32_External_RegInfo)) 6887 return FALSE; 6888 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE); 6889 break; 6890 case SHT_MIPS_IFACE: 6891 if (strcmp (name, ".MIPS.interfaces") != 0) 6892 return FALSE; 6893 break; 6894 case SHT_MIPS_CONTENT: 6895 if (! CONST_STRNEQ (name, ".MIPS.content")) 6896 return FALSE; 6897 break; 6898 case SHT_MIPS_OPTIONS: 6899 if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name)) 6900 return FALSE; 6901 break; 6902 case SHT_MIPS_DWARF: 6903 if (! CONST_STRNEQ (name, ".debug_") 6904 && ! CONST_STRNEQ (name, ".zdebug_")) 6905 return FALSE; 6906 break; 6907 case SHT_MIPS_SYMBOL_LIB: 6908 if (strcmp (name, ".MIPS.symlib") != 0) 6909 return FALSE; 6910 break; 6911 case SHT_MIPS_EVENTS: 6912 if (! CONST_STRNEQ (name, ".MIPS.events") 6913 && ! CONST_STRNEQ (name, ".MIPS.post_rel")) 6914 return FALSE; 6915 break; 6916 default: 6917 break; 6918 } 6919 6920 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) 6921 return FALSE; 6922 6923 if (flags) 6924 { 6925 if (! bfd_set_section_flags (abfd, hdr->bfd_section, 6926 (bfd_get_section_flags (abfd, 6927 hdr->bfd_section) 6928 | flags))) 6929 return FALSE; 6930 } 6931 6932 /* FIXME: We should record sh_info for a .gptab section. */ 6933 6934 /* For a .reginfo section, set the gp value in the tdata information 6935 from the contents of this section. We need the gp value while 6936 processing relocs, so we just get it now. The .reginfo section 6937 is not used in the 64-bit MIPS ELF ABI. */ 6938 if (hdr->sh_type == SHT_MIPS_REGINFO) 6939 { 6940 Elf32_External_RegInfo ext; 6941 Elf32_RegInfo s; 6942 6943 if (! bfd_get_section_contents (abfd, hdr->bfd_section, 6944 &ext, 0, sizeof ext)) 6945 return FALSE; 6946 bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s); 6947 elf_gp (abfd) = s.ri_gp_value; 6948 } 6949 6950 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and 6951 set the gp value based on what we find. We may see both 6952 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case, 6953 they should agree. */ 6954 if (hdr->sh_type == SHT_MIPS_OPTIONS) 6955 { 6956 bfd_byte *contents, *l, *lend; 6957 6958 contents = bfd_malloc (hdr->sh_size); 6959 if (contents == NULL) 6960 return FALSE; 6961 if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents, 6962 0, hdr->sh_size)) 6963 { 6964 free (contents); 6965 return FALSE; 6966 } 6967 l = contents; 6968 lend = contents + hdr->sh_size; 6969 while (l + sizeof (Elf_External_Options) <= lend) 6970 { 6971 Elf_Internal_Options intopt; 6972 6973 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l, 6974 &intopt); 6975 if (intopt.size < sizeof (Elf_External_Options)) 6976 { 6977 (*_bfd_error_handler) 6978 (_("%B: Warning: bad `%s' option size %u smaller than its header"), 6979 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size); 6980 break; 6981 } 6982 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO) 6983 { 6984 Elf64_Internal_RegInfo intreg; 6985 6986 bfd_mips_elf64_swap_reginfo_in 6987 (abfd, 6988 ((Elf64_External_RegInfo *) 6989 (l + sizeof (Elf_External_Options))), 6990 &intreg); 6991 elf_gp (abfd) = intreg.ri_gp_value; 6992 } 6993 else if (intopt.kind == ODK_REGINFO) 6994 { 6995 Elf32_RegInfo intreg; 6996 6997 bfd_mips_elf32_swap_reginfo_in 6998 (abfd, 6999 ((Elf32_External_RegInfo *) 7000 (l + sizeof (Elf_External_Options))), 7001 &intreg); 7002 elf_gp (abfd) = intreg.ri_gp_value; 7003 } 7004 l += intopt.size; 7005 } 7006 free (contents); 7007 } 7008 7009 return TRUE; 7010 } 7011 7012 /* Set the correct type for a MIPS ELF section. We do this by the 7013 section name, which is a hack, but ought to work. This routine is 7014 used by both the 32-bit and the 64-bit ABI. */ 7015 7016 bfd_boolean 7017 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec) 7018 { 7019 const char *name = bfd_get_section_name (abfd, sec); 7020 7021 if (strcmp (name, ".liblist") == 0) 7022 { 7023 hdr->sh_type = SHT_MIPS_LIBLIST; 7024 hdr->sh_info = sec->size / sizeof (Elf32_Lib); 7025 /* The sh_link field is set in final_write_processing. */ 7026 } 7027 else if (strcmp (name, ".conflict") == 0) 7028 hdr->sh_type = SHT_MIPS_CONFLICT; 7029 else if (CONST_STRNEQ (name, ".gptab.")) 7030 { 7031 hdr->sh_type = SHT_MIPS_GPTAB; 7032 hdr->sh_entsize = sizeof (Elf32_External_gptab); 7033 /* The sh_info field is set in final_write_processing. */ 7034 } 7035 else if (strcmp (name, ".ucode") == 0) 7036 hdr->sh_type = SHT_MIPS_UCODE; 7037 else if (strcmp (name, ".mdebug") == 0) 7038 { 7039 hdr->sh_type = SHT_MIPS_DEBUG; 7040 /* In a shared object on IRIX 5.3, the .mdebug section has an 7041 entsize of 0. FIXME: Does this matter? */ 7042 if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0) 7043 hdr->sh_entsize = 0; 7044 else 7045 hdr->sh_entsize = 1; 7046 } 7047 else if (strcmp (name, ".reginfo") == 0) 7048 { 7049 hdr->sh_type = SHT_MIPS_REGINFO; 7050 /* In a shared object on IRIX 5.3, the .reginfo section has an 7051 entsize of 0x18. FIXME: Does this matter? */ 7052 if (SGI_COMPAT (abfd)) 7053 { 7054 if ((abfd->flags & DYNAMIC) != 0) 7055 hdr->sh_entsize = sizeof (Elf32_External_RegInfo); 7056 else 7057 hdr->sh_entsize = 1; 7058 } 7059 else 7060 hdr->sh_entsize = sizeof (Elf32_External_RegInfo); 7061 } 7062 else if (SGI_COMPAT (abfd) 7063 && (strcmp (name, ".hash") == 0 7064 || strcmp (name, ".dynamic") == 0 7065 || strcmp (name, ".dynstr") == 0)) 7066 { 7067 if (SGI_COMPAT (abfd)) 7068 hdr->sh_entsize = 0; 7069 #if 0 7070 /* This isn't how the IRIX6 linker behaves. */ 7071 hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES; 7072 #endif 7073 } 7074 else if (strcmp (name, ".got") == 0 7075 || strcmp (name, ".srdata") == 0 7076 || strcmp (name, ".sdata") == 0 7077 || strcmp (name, ".sbss") == 0 7078 || strcmp (name, ".lit4") == 0 7079 || strcmp (name, ".lit8") == 0) 7080 hdr->sh_flags |= SHF_MIPS_GPREL; 7081 else if (strcmp (name, ".MIPS.interfaces") == 0) 7082 { 7083 hdr->sh_type = SHT_MIPS_IFACE; 7084 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 7085 } 7086 else if (CONST_STRNEQ (name, ".MIPS.content")) 7087 { 7088 hdr->sh_type = SHT_MIPS_CONTENT; 7089 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 7090 /* The sh_info field is set in final_write_processing. */ 7091 } 7092 else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name)) 7093 { 7094 hdr->sh_type = SHT_MIPS_OPTIONS; 7095 hdr->sh_entsize = 1; 7096 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 7097 } 7098 else if (CONST_STRNEQ (name, ".debug_") 7099 || CONST_STRNEQ (name, ".zdebug_")) 7100 { 7101 hdr->sh_type = SHT_MIPS_DWARF; 7102 7103 /* Irix facilities such as libexc expect a single .debug_frame 7104 per executable, the system ones have NOSTRIP set and the linker 7105 doesn't merge sections with different flags so ... */ 7106 if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame")) 7107 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 7108 } 7109 else if (strcmp (name, ".MIPS.symlib") == 0) 7110 { 7111 hdr->sh_type = SHT_MIPS_SYMBOL_LIB; 7112 /* The sh_link and sh_info fields are set in 7113 final_write_processing. */ 7114 } 7115 else if (CONST_STRNEQ (name, ".MIPS.events") 7116 || CONST_STRNEQ (name, ".MIPS.post_rel")) 7117 { 7118 hdr->sh_type = SHT_MIPS_EVENTS; 7119 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 7120 /* The sh_link field is set in final_write_processing. */ 7121 } 7122 else if (strcmp (name, ".msym") == 0) 7123 { 7124 hdr->sh_type = SHT_MIPS_MSYM; 7125 hdr->sh_flags |= SHF_ALLOC; 7126 hdr->sh_entsize = 8; 7127 } 7128 7129 /* The generic elf_fake_sections will set up REL_HDR using the default 7130 kind of relocations. We used to set up a second header for the 7131 non-default kind of relocations here, but only NewABI would use 7132 these, and the IRIX ld doesn't like resulting empty RELA sections. 7133 Thus we create those header only on demand now. */ 7134 7135 return TRUE; 7136 } 7137 7138 /* Given a BFD section, try to locate the corresponding ELF section 7139 index. This is used by both the 32-bit and the 64-bit ABI. 7140 Actually, it's not clear to me that the 64-bit ABI supports these, 7141 but for non-PIC objects we will certainly want support for at least 7142 the .scommon section. */ 7143 7144 bfd_boolean 7145 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED, 7146 asection *sec, int *retval) 7147 { 7148 if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0) 7149 { 7150 *retval = SHN_MIPS_SCOMMON; 7151 return TRUE; 7152 } 7153 if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0) 7154 { 7155 *retval = SHN_MIPS_ACOMMON; 7156 return TRUE; 7157 } 7158 return FALSE; 7159 } 7160 7161 /* Hook called by the linker routine which adds symbols from an object 7162 file. We must handle the special MIPS section numbers here. */ 7163 7164 bfd_boolean 7165 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, 7166 Elf_Internal_Sym *sym, const char **namep, 7167 flagword *flagsp ATTRIBUTE_UNUSED, 7168 asection **secp, bfd_vma *valp) 7169 { 7170 if (SGI_COMPAT (abfd) 7171 && (abfd->flags & DYNAMIC) != 0 7172 && strcmp (*namep, "_rld_new_interface") == 0) 7173 { 7174 /* Skip IRIX5 rld entry name. */ 7175 *namep = NULL; 7176 return TRUE; 7177 } 7178 7179 /* Shared objects may have a dynamic symbol '_gp_disp' defined as 7180 a SECTION *ABS*. This causes ld to think it can resolve _gp_disp 7181 by setting a DT_NEEDED for the shared object. Since _gp_disp is 7182 a magic symbol resolved by the linker, we ignore this bogus definition 7183 of _gp_disp. New ABI objects do not suffer from this problem so this 7184 is not done for them. */ 7185 if (!NEWABI_P(abfd) 7186 && (sym->st_shndx == SHN_ABS) 7187 && (strcmp (*namep, "_gp_disp") == 0)) 7188 { 7189 *namep = NULL; 7190 return TRUE; 7191 } 7192 7193 switch (sym->st_shndx) 7194 { 7195 case SHN_COMMON: 7196 /* Common symbols less than the GP size are automatically 7197 treated as SHN_MIPS_SCOMMON symbols. */ 7198 if (sym->st_size > elf_gp_size (abfd) 7199 || ELF_ST_TYPE (sym->st_info) == STT_TLS 7200 || IRIX_COMPAT (abfd) == ict_irix6) 7201 break; 7202 /* Fall through. */ 7203 case SHN_MIPS_SCOMMON: 7204 *secp = bfd_make_section_old_way (abfd, ".scommon"); 7205 (*secp)->flags |= SEC_IS_COMMON; 7206 *valp = sym->st_size; 7207 break; 7208 7209 case SHN_MIPS_TEXT: 7210 /* This section is used in a shared object. */ 7211 if (mips_elf_tdata (abfd)->elf_text_section == NULL) 7212 { 7213 asymbol *elf_text_symbol; 7214 asection *elf_text_section; 7215 bfd_size_type amt = sizeof (asection); 7216 7217 elf_text_section = bfd_zalloc (abfd, amt); 7218 if (elf_text_section == NULL) 7219 return FALSE; 7220 7221 amt = sizeof (asymbol); 7222 elf_text_symbol = bfd_zalloc (abfd, amt); 7223 if (elf_text_symbol == NULL) 7224 return FALSE; 7225 7226 /* Initialize the section. */ 7227 7228 mips_elf_tdata (abfd)->elf_text_section = elf_text_section; 7229 mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol; 7230 7231 elf_text_section->symbol = elf_text_symbol; 7232 elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol; 7233 7234 elf_text_section->name = ".text"; 7235 elf_text_section->flags = SEC_NO_FLAGS; 7236 elf_text_section->output_section = NULL; 7237 elf_text_section->owner = abfd; 7238 elf_text_symbol->name = ".text"; 7239 elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC; 7240 elf_text_symbol->section = elf_text_section; 7241 } 7242 /* This code used to do *secp = bfd_und_section_ptr if 7243 info->shared. I don't know why, and that doesn't make sense, 7244 so I took it out. */ 7245 *secp = mips_elf_tdata (abfd)->elf_text_section; 7246 break; 7247 7248 case SHN_MIPS_ACOMMON: 7249 /* Fall through. XXX Can we treat this as allocated data? */ 7250 case SHN_MIPS_DATA: 7251 /* This section is used in a shared object. */ 7252 if (mips_elf_tdata (abfd)->elf_data_section == NULL) 7253 { 7254 asymbol *elf_data_symbol; 7255 asection *elf_data_section; 7256 bfd_size_type amt = sizeof (asection); 7257 7258 elf_data_section = bfd_zalloc (abfd, amt); 7259 if (elf_data_section == NULL) 7260 return FALSE; 7261 7262 amt = sizeof (asymbol); 7263 elf_data_symbol = bfd_zalloc (abfd, amt); 7264 if (elf_data_symbol == NULL) 7265 return FALSE; 7266 7267 /* Initialize the section. */ 7268 7269 mips_elf_tdata (abfd)->elf_data_section = elf_data_section; 7270 mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol; 7271 7272 elf_data_section->symbol = elf_data_symbol; 7273 elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol; 7274 7275 elf_data_section->name = ".data"; 7276 elf_data_section->flags = SEC_NO_FLAGS; 7277 elf_data_section->output_section = NULL; 7278 elf_data_section->owner = abfd; 7279 elf_data_symbol->name = ".data"; 7280 elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC; 7281 elf_data_symbol->section = elf_data_section; 7282 } 7283 /* This code used to do *secp = bfd_und_section_ptr if 7284 info->shared. I don't know why, and that doesn't make sense, 7285 so I took it out. */ 7286 *secp = mips_elf_tdata (abfd)->elf_data_section; 7287 break; 7288 7289 case SHN_MIPS_SUNDEFINED: 7290 *secp = bfd_und_section_ptr; 7291 break; 7292 } 7293 7294 if (SGI_COMPAT (abfd) 7295 && ! info->shared 7296 && info->output_bfd->xvec == abfd->xvec 7297 && strcmp (*namep, "__rld_obj_head") == 0) 7298 { 7299 struct elf_link_hash_entry *h; 7300 struct bfd_link_hash_entry *bh; 7301 7302 /* Mark __rld_obj_head as dynamic. */ 7303 bh = NULL; 7304 if (! (_bfd_generic_link_add_one_symbol 7305 (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE, 7306 get_elf_backend_data (abfd)->collect, &bh))) 7307 return FALSE; 7308 7309 h = (struct elf_link_hash_entry *) bh; 7310 h->non_elf = 0; 7311 h->def_regular = 1; 7312 h->type = STT_OBJECT; 7313 7314 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 7315 return FALSE; 7316 7317 mips_elf_hash_table (info)->use_rld_obj_head = TRUE; 7318 mips_elf_hash_table (info)->rld_symbol = h; 7319 } 7320 7321 /* If this is a mips16 text symbol, add 1 to the value to make it 7322 odd. This will cause something like .word SYM to come up with 7323 the right value when it is loaded into the PC. */ 7324 if (ELF_ST_IS_COMPRESSED (sym->st_other)) 7325 ++*valp; 7326 7327 return TRUE; 7328 } 7329 7330 /* This hook function is called before the linker writes out a global 7331 symbol. We mark symbols as small common if appropriate. This is 7332 also where we undo the increment of the value for a mips16 symbol. */ 7333 7334 int 7335 _bfd_mips_elf_link_output_symbol_hook 7336 (struct bfd_link_info *info ATTRIBUTE_UNUSED, 7337 const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym, 7338 asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED) 7339 { 7340 /* If we see a common symbol, which implies a relocatable link, then 7341 if a symbol was small common in an input file, mark it as small 7342 common in the output file. */ 7343 if (sym->st_shndx == SHN_COMMON 7344 && strcmp (input_sec->name, ".scommon") == 0) 7345 sym->st_shndx = SHN_MIPS_SCOMMON; 7346 7347 if (ELF_ST_IS_COMPRESSED (sym->st_other)) 7348 sym->st_value &= ~1; 7349 7350 return 1; 7351 } 7352 7353 /* Functions for the dynamic linker. */ 7354 7355 /* Create dynamic sections when linking against a dynamic object. */ 7356 7357 bfd_boolean 7358 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) 7359 { 7360 struct elf_link_hash_entry *h; 7361 struct bfd_link_hash_entry *bh; 7362 flagword flags; 7363 register asection *s; 7364 const char * const *namep; 7365 struct mips_elf_link_hash_table *htab; 7366 7367 htab = mips_elf_hash_table (info); 7368 BFD_ASSERT (htab != NULL); 7369 7370 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY 7371 | SEC_LINKER_CREATED | SEC_READONLY); 7372 7373 /* The psABI requires a read-only .dynamic section, but the VxWorks 7374 EABI doesn't. */ 7375 if (!htab->is_vxworks) 7376 { 7377 s = bfd_get_linker_section (abfd, ".dynamic"); 7378 if (s != NULL) 7379 { 7380 if (! bfd_set_section_flags (abfd, s, flags)) 7381 return FALSE; 7382 } 7383 } 7384 7385 /* We need to create .got section. */ 7386 if (!mips_elf_create_got_section (abfd, info)) 7387 return FALSE; 7388 7389 if (! mips_elf_rel_dyn_section (info, TRUE)) 7390 return FALSE; 7391 7392 /* Create .stub section. */ 7393 s = bfd_make_section_anyway_with_flags (abfd, 7394 MIPS_ELF_STUB_SECTION_NAME (abfd), 7395 flags | SEC_CODE); 7396 if (s == NULL 7397 || ! bfd_set_section_alignment (abfd, s, 7398 MIPS_ELF_LOG_FILE_ALIGN (abfd))) 7399 return FALSE; 7400 htab->sstubs = s; 7401 7402 if (!mips_elf_hash_table (info)->use_rld_obj_head 7403 && !info->shared 7404 && bfd_get_linker_section (abfd, ".rld_map") == NULL) 7405 { 7406 s = bfd_make_section_anyway_with_flags (abfd, ".rld_map", 7407 flags &~ (flagword) SEC_READONLY); 7408 if (s == NULL 7409 || ! bfd_set_section_alignment (abfd, s, 7410 MIPS_ELF_LOG_FILE_ALIGN (abfd))) 7411 return FALSE; 7412 } 7413 7414 /* On IRIX5, we adjust add some additional symbols and change the 7415 alignments of several sections. There is no ABI documentation 7416 indicating that this is necessary on IRIX6, nor any evidence that 7417 the linker takes such action. */ 7418 if (IRIX_COMPAT (abfd) == ict_irix5) 7419 { 7420 for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++) 7421 { 7422 bh = NULL; 7423 if (! (_bfd_generic_link_add_one_symbol 7424 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0, 7425 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) 7426 return FALSE; 7427 7428 h = (struct elf_link_hash_entry *) bh; 7429 h->non_elf = 0; 7430 h->def_regular = 1; 7431 h->type = STT_SECTION; 7432 7433 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 7434 return FALSE; 7435 } 7436 7437 /* We need to create a .compact_rel section. */ 7438 if (SGI_COMPAT (abfd)) 7439 { 7440 if (!mips_elf_create_compact_rel_section (abfd, info)) 7441 return FALSE; 7442 } 7443 7444 /* Change alignments of some sections. */ 7445 s = bfd_get_linker_section (abfd, ".hash"); 7446 if (s != NULL) 7447 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 7448 7449 s = bfd_get_linker_section (abfd, ".dynsym"); 7450 if (s != NULL) 7451 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 7452 7453 s = bfd_get_linker_section (abfd, ".dynstr"); 7454 if (s != NULL) 7455 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 7456 7457 /* ??? */ 7458 s = bfd_get_section_by_name (abfd, ".reginfo"); 7459 if (s != NULL) 7460 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 7461 7462 s = bfd_get_linker_section (abfd, ".dynamic"); 7463 if (s != NULL) 7464 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 7465 } 7466 7467 if (!info->shared) 7468 { 7469 const char *name; 7470 7471 name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING"; 7472 bh = NULL; 7473 if (!(_bfd_generic_link_add_one_symbol 7474 (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0, 7475 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) 7476 return FALSE; 7477 7478 h = (struct elf_link_hash_entry *) bh; 7479 h->non_elf = 0; 7480 h->def_regular = 1; 7481 h->type = STT_SECTION; 7482 7483 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 7484 return FALSE; 7485 7486 if (! mips_elf_hash_table (info)->use_rld_obj_head) 7487 { 7488 /* __rld_map is a four byte word located in the .data section 7489 and is filled in by the rtld to contain a pointer to 7490 the _r_debug structure. Its symbol value will be set in 7491 _bfd_mips_elf_finish_dynamic_symbol. */ 7492 s = bfd_get_linker_section (abfd, ".rld_map"); 7493 BFD_ASSERT (s != NULL); 7494 7495 name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP"; 7496 bh = NULL; 7497 if (!(_bfd_generic_link_add_one_symbol 7498 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE, 7499 get_elf_backend_data (abfd)->collect, &bh))) 7500 return FALSE; 7501 7502 h = (struct elf_link_hash_entry *) bh; 7503 h->non_elf = 0; 7504 h->def_regular = 1; 7505 h->type = STT_OBJECT; 7506 7507 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 7508 return FALSE; 7509 mips_elf_hash_table (info)->rld_symbol = h; 7510 } 7511 } 7512 7513 /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections. 7514 Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol. */ 7515 if (!_bfd_elf_create_dynamic_sections (abfd, info)) 7516 return FALSE; 7517 7518 /* Cache the sections created above. */ 7519 htab->splt = bfd_get_linker_section (abfd, ".plt"); 7520 htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss"); 7521 if (htab->is_vxworks) 7522 { 7523 htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss"); 7524 htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt"); 7525 } 7526 else 7527 htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt"); 7528 if (!htab->sdynbss 7529 || (htab->is_vxworks && !htab->srelbss && !info->shared) 7530 || !htab->srelplt 7531 || !htab->splt) 7532 abort (); 7533 7534 /* Do the usual VxWorks handling. */ 7535 if (htab->is_vxworks 7536 && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2)) 7537 return FALSE; 7538 7539 return TRUE; 7540 } 7541 7542 /* Return true if relocation REL against section SEC is a REL rather than 7543 RELA relocation. RELOCS is the first relocation in the section and 7544 ABFD is the bfd that contains SEC. */ 7545 7546 static bfd_boolean 7547 mips_elf_rel_relocation_p (bfd *abfd, asection *sec, 7548 const Elf_Internal_Rela *relocs, 7549 const Elf_Internal_Rela *rel) 7550 { 7551 Elf_Internal_Shdr *rel_hdr; 7552 const struct elf_backend_data *bed; 7553 7554 /* To determine which flavor of relocation this is, we depend on the 7555 fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR. */ 7556 rel_hdr = elf_section_data (sec)->rel.hdr; 7557 if (rel_hdr == NULL) 7558 return FALSE; 7559 bed = get_elf_backend_data (abfd); 7560 return ((size_t) (rel - relocs) 7561 < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel); 7562 } 7563 7564 /* Read the addend for REL relocation REL, which belongs to bfd ABFD. 7565 HOWTO is the relocation's howto and CONTENTS points to the contents 7566 of the section that REL is against. */ 7567 7568 static bfd_vma 7569 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel, 7570 reloc_howto_type *howto, bfd_byte *contents) 7571 { 7572 bfd_byte *location; 7573 unsigned int r_type; 7574 bfd_vma addend; 7575 7576 r_type = ELF_R_TYPE (abfd, rel->r_info); 7577 location = contents + rel->r_offset; 7578 7579 /* Get the addend, which is stored in the input file. */ 7580 _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location); 7581 addend = mips_elf_obtain_contents (howto, rel, abfd, contents); 7582 _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location); 7583 7584 return addend & howto->src_mask; 7585 } 7586 7587 /* REL is a relocation in ABFD that needs a partnering LO16 relocation 7588 and *ADDEND is the addend for REL itself. Look for the LO16 relocation 7589 and update *ADDEND with the final addend. Return true on success 7590 or false if the LO16 could not be found. RELEND is the exclusive 7591 upper bound on the relocations for REL's section. */ 7592 7593 static bfd_boolean 7594 mips_elf_add_lo16_rel_addend (bfd *abfd, 7595 const Elf_Internal_Rela *rel, 7596 const Elf_Internal_Rela *relend, 7597 bfd_byte *contents, bfd_vma *addend) 7598 { 7599 unsigned int r_type, lo16_type; 7600 const Elf_Internal_Rela *lo16_relocation; 7601 reloc_howto_type *lo16_howto; 7602 bfd_vma l; 7603 7604 r_type = ELF_R_TYPE (abfd, rel->r_info); 7605 if (mips16_reloc_p (r_type)) 7606 lo16_type = R_MIPS16_LO16; 7607 else if (micromips_reloc_p (r_type)) 7608 lo16_type = R_MICROMIPS_LO16; 7609 else 7610 lo16_type = R_MIPS_LO16; 7611 7612 /* The combined value is the sum of the HI16 addend, left-shifted by 7613 sixteen bits, and the LO16 addend, sign extended. (Usually, the 7614 code does a `lui' of the HI16 value, and then an `addiu' of the 7615 LO16 value.) 7616 7617 Scan ahead to find a matching LO16 relocation. 7618 7619 According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must 7620 be immediately following. However, for the IRIX6 ABI, the next 7621 relocation may be a composed relocation consisting of several 7622 relocations for the same address. In that case, the R_MIPS_LO16 7623 relocation may occur as one of these. We permit a similar 7624 extension in general, as that is useful for GCC. 7625 7626 In some cases GCC dead code elimination removes the LO16 but keeps 7627 the corresponding HI16. This is strictly speaking a violation of 7628 the ABI but not immediately harmful. */ 7629 lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend); 7630 if (lo16_relocation == NULL) 7631 return FALSE; 7632 7633 /* Obtain the addend kept there. */ 7634 lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE); 7635 l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents); 7636 7637 l <<= lo16_howto->rightshift; 7638 l = _bfd_mips_elf_sign_extend (l, 16); 7639 7640 *addend <<= 16; 7641 *addend += l; 7642 return TRUE; 7643 } 7644 7645 /* Try to read the contents of section SEC in bfd ABFD. Return true and 7646 store the contents in *CONTENTS on success. Assume that *CONTENTS 7647 already holds the contents if it is nonull on entry. */ 7648 7649 static bfd_boolean 7650 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents) 7651 { 7652 if (*contents) 7653 return TRUE; 7654 7655 /* Get cached copy if it exists. */ 7656 if (elf_section_data (sec)->this_hdr.contents != NULL) 7657 { 7658 *contents = elf_section_data (sec)->this_hdr.contents; 7659 return TRUE; 7660 } 7661 7662 return bfd_malloc_and_get_section (abfd, sec, contents); 7663 } 7664 7665 /* Make a new PLT record to keep internal data. */ 7666 7667 static struct plt_entry * 7668 mips_elf_make_plt_record (bfd *abfd) 7669 { 7670 struct plt_entry *entry; 7671 7672 entry = bfd_zalloc (abfd, sizeof (*entry)); 7673 if (entry == NULL) 7674 return NULL; 7675 7676 entry->stub_offset = MINUS_ONE; 7677 entry->mips_offset = MINUS_ONE; 7678 entry->comp_offset = MINUS_ONE; 7679 entry->gotplt_index = MINUS_ONE; 7680 return entry; 7681 } 7682 7683 /* Look through the relocs for a section during the first phase, and 7684 allocate space in the global offset table and record the need for 7685 standard MIPS and compressed procedure linkage table entries. */ 7686 7687 bfd_boolean 7688 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, 7689 asection *sec, const Elf_Internal_Rela *relocs) 7690 { 7691 const char *name; 7692 bfd *dynobj; 7693 Elf_Internal_Shdr *symtab_hdr; 7694 struct elf_link_hash_entry **sym_hashes; 7695 size_t extsymoff; 7696 const Elf_Internal_Rela *rel; 7697 const Elf_Internal_Rela *rel_end; 7698 asection *sreloc; 7699 const struct elf_backend_data *bed; 7700 struct mips_elf_link_hash_table *htab; 7701 bfd_byte *contents; 7702 bfd_vma addend; 7703 reloc_howto_type *howto; 7704 7705 if (info->relocatable) 7706 return TRUE; 7707 7708 htab = mips_elf_hash_table (info); 7709 BFD_ASSERT (htab != NULL); 7710 7711 dynobj = elf_hash_table (info)->dynobj; 7712 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 7713 sym_hashes = elf_sym_hashes (abfd); 7714 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info; 7715 7716 bed = get_elf_backend_data (abfd); 7717 rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel; 7718 7719 /* Check for the mips16 stub sections. */ 7720 7721 name = bfd_get_section_name (abfd, sec); 7722 if (FN_STUB_P (name)) 7723 { 7724 unsigned long r_symndx; 7725 7726 /* Look at the relocation information to figure out which symbol 7727 this is for. */ 7728 7729 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end); 7730 if (r_symndx == 0) 7731 { 7732 (*_bfd_error_handler) 7733 (_("%B: Warning: cannot determine the target function for" 7734 " stub section `%s'"), 7735 abfd, name); 7736 bfd_set_error (bfd_error_bad_value); 7737 return FALSE; 7738 } 7739 7740 if (r_symndx < extsymoff 7741 || sym_hashes[r_symndx - extsymoff] == NULL) 7742 { 7743 asection *o; 7744 7745 /* This stub is for a local symbol. This stub will only be 7746 needed if there is some relocation in this BFD, other 7747 than a 16 bit function call, which refers to this symbol. */ 7748 for (o = abfd->sections; o != NULL; o = o->next) 7749 { 7750 Elf_Internal_Rela *sec_relocs; 7751 const Elf_Internal_Rela *r, *rend; 7752 7753 /* We can ignore stub sections when looking for relocs. */ 7754 if ((o->flags & SEC_RELOC) == 0 7755 || o->reloc_count == 0 7756 || section_allows_mips16_refs_p (o)) 7757 continue; 7758 7759 sec_relocs 7760 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, 7761 info->keep_memory); 7762 if (sec_relocs == NULL) 7763 return FALSE; 7764 7765 rend = sec_relocs + o->reloc_count; 7766 for (r = sec_relocs; r < rend; r++) 7767 if (ELF_R_SYM (abfd, r->r_info) == r_symndx 7768 && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info))) 7769 break; 7770 7771 if (elf_section_data (o)->relocs != sec_relocs) 7772 free (sec_relocs); 7773 7774 if (r < rend) 7775 break; 7776 } 7777 7778 if (o == NULL) 7779 { 7780 /* There is no non-call reloc for this stub, so we do 7781 not need it. Since this function is called before 7782 the linker maps input sections to output sections, we 7783 can easily discard it by setting the SEC_EXCLUDE 7784 flag. */ 7785 sec->flags |= SEC_EXCLUDE; 7786 return TRUE; 7787 } 7788 7789 /* Record this stub in an array of local symbol stubs for 7790 this BFD. */ 7791 if (mips_elf_tdata (abfd)->local_stubs == NULL) 7792 { 7793 unsigned long symcount; 7794 asection **n; 7795 bfd_size_type amt; 7796 7797 if (elf_bad_symtab (abfd)) 7798 symcount = NUM_SHDR_ENTRIES (symtab_hdr); 7799 else 7800 symcount = symtab_hdr->sh_info; 7801 amt = symcount * sizeof (asection *); 7802 n = bfd_zalloc (abfd, amt); 7803 if (n == NULL) 7804 return FALSE; 7805 mips_elf_tdata (abfd)->local_stubs = n; 7806 } 7807 7808 sec->flags |= SEC_KEEP; 7809 mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec; 7810 7811 /* We don't need to set mips16_stubs_seen in this case. 7812 That flag is used to see whether we need to look through 7813 the global symbol table for stubs. We don't need to set 7814 it here, because we just have a local stub. */ 7815 } 7816 else 7817 { 7818 struct mips_elf_link_hash_entry *h; 7819 7820 h = ((struct mips_elf_link_hash_entry *) 7821 sym_hashes[r_symndx - extsymoff]); 7822 7823 while (h->root.root.type == bfd_link_hash_indirect 7824 || h->root.root.type == bfd_link_hash_warning) 7825 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 7826 7827 /* H is the symbol this stub is for. */ 7828 7829 /* If we already have an appropriate stub for this function, we 7830 don't need another one, so we can discard this one. Since 7831 this function is called before the linker maps input sections 7832 to output sections, we can easily discard it by setting the 7833 SEC_EXCLUDE flag. */ 7834 if (h->fn_stub != NULL) 7835 { 7836 sec->flags |= SEC_EXCLUDE; 7837 return TRUE; 7838 } 7839 7840 sec->flags |= SEC_KEEP; 7841 h->fn_stub = sec; 7842 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE; 7843 } 7844 } 7845 else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name)) 7846 { 7847 unsigned long r_symndx; 7848 struct mips_elf_link_hash_entry *h; 7849 asection **loc; 7850 7851 /* Look at the relocation information to figure out which symbol 7852 this is for. */ 7853 7854 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end); 7855 if (r_symndx == 0) 7856 { 7857 (*_bfd_error_handler) 7858 (_("%B: Warning: cannot determine the target function for" 7859 " stub section `%s'"), 7860 abfd, name); 7861 bfd_set_error (bfd_error_bad_value); 7862 return FALSE; 7863 } 7864 7865 if (r_symndx < extsymoff 7866 || sym_hashes[r_symndx - extsymoff] == NULL) 7867 { 7868 asection *o; 7869 7870 /* This stub is for a local symbol. This stub will only be 7871 needed if there is some relocation (R_MIPS16_26) in this BFD 7872 that refers to this symbol. */ 7873 for (o = abfd->sections; o != NULL; o = o->next) 7874 { 7875 Elf_Internal_Rela *sec_relocs; 7876 const Elf_Internal_Rela *r, *rend; 7877 7878 /* We can ignore stub sections when looking for relocs. */ 7879 if ((o->flags & SEC_RELOC) == 0 7880 || o->reloc_count == 0 7881 || section_allows_mips16_refs_p (o)) 7882 continue; 7883 7884 sec_relocs 7885 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, 7886 info->keep_memory); 7887 if (sec_relocs == NULL) 7888 return FALSE; 7889 7890 rend = sec_relocs + o->reloc_count; 7891 for (r = sec_relocs; r < rend; r++) 7892 if (ELF_R_SYM (abfd, r->r_info) == r_symndx 7893 && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26) 7894 break; 7895 7896 if (elf_section_data (o)->relocs != sec_relocs) 7897 free (sec_relocs); 7898 7899 if (r < rend) 7900 break; 7901 } 7902 7903 if (o == NULL) 7904 { 7905 /* There is no non-call reloc for this stub, so we do 7906 not need it. Since this function is called before 7907 the linker maps input sections to output sections, we 7908 can easily discard it by setting the SEC_EXCLUDE 7909 flag. */ 7910 sec->flags |= SEC_EXCLUDE; 7911 return TRUE; 7912 } 7913 7914 /* Record this stub in an array of local symbol call_stubs for 7915 this BFD. */ 7916 if (mips_elf_tdata (abfd)->local_call_stubs == NULL) 7917 { 7918 unsigned long symcount; 7919 asection **n; 7920 bfd_size_type amt; 7921 7922 if (elf_bad_symtab (abfd)) 7923 symcount = NUM_SHDR_ENTRIES (symtab_hdr); 7924 else 7925 symcount = symtab_hdr->sh_info; 7926 amt = symcount * sizeof (asection *); 7927 n = bfd_zalloc (abfd, amt); 7928 if (n == NULL) 7929 return FALSE; 7930 mips_elf_tdata (abfd)->local_call_stubs = n; 7931 } 7932 7933 sec->flags |= SEC_KEEP; 7934 mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec; 7935 7936 /* We don't need to set mips16_stubs_seen in this case. 7937 That flag is used to see whether we need to look through 7938 the global symbol table for stubs. We don't need to set 7939 it here, because we just have a local stub. */ 7940 } 7941 else 7942 { 7943 h = ((struct mips_elf_link_hash_entry *) 7944 sym_hashes[r_symndx - extsymoff]); 7945 7946 /* H is the symbol this stub is for. */ 7947 7948 if (CALL_FP_STUB_P (name)) 7949 loc = &h->call_fp_stub; 7950 else 7951 loc = &h->call_stub; 7952 7953 /* If we already have an appropriate stub for this function, we 7954 don't need another one, so we can discard this one. Since 7955 this function is called before the linker maps input sections 7956 to output sections, we can easily discard it by setting the 7957 SEC_EXCLUDE flag. */ 7958 if (*loc != NULL) 7959 { 7960 sec->flags |= SEC_EXCLUDE; 7961 return TRUE; 7962 } 7963 7964 sec->flags |= SEC_KEEP; 7965 *loc = sec; 7966 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE; 7967 } 7968 } 7969 7970 sreloc = NULL; 7971 contents = NULL; 7972 for (rel = relocs; rel < rel_end; ++rel) 7973 { 7974 unsigned long r_symndx; 7975 unsigned int r_type; 7976 struct elf_link_hash_entry *h; 7977 bfd_boolean can_make_dynamic_p; 7978 bfd_boolean call_reloc_p; 7979 bfd_boolean constrain_symbol_p; 7980 7981 r_symndx = ELF_R_SYM (abfd, rel->r_info); 7982 r_type = ELF_R_TYPE (abfd, rel->r_info); 7983 7984 if (r_symndx < extsymoff) 7985 h = NULL; 7986 else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr)) 7987 { 7988 (*_bfd_error_handler) 7989 (_("%B: Malformed reloc detected for section %s"), 7990 abfd, name); 7991 bfd_set_error (bfd_error_bad_value); 7992 return FALSE; 7993 } 7994 else 7995 { 7996 h = sym_hashes[r_symndx - extsymoff]; 7997 if (h != NULL) 7998 { 7999 while (h->root.type == bfd_link_hash_indirect 8000 || h->root.type == bfd_link_hash_warning) 8001 h = (struct elf_link_hash_entry *) h->root.u.i.link; 8002 8003 /* PR15323, ref flags aren't set for references in the 8004 same object. */ 8005 h->root.non_ir_ref = 1; 8006 } 8007 } 8008 8009 /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this 8010 relocation into a dynamic one. */ 8011 can_make_dynamic_p = FALSE; 8012 8013 /* Set CALL_RELOC_P to true if the relocation is for a call, 8014 and if pointer equality therefore doesn't matter. */ 8015 call_reloc_p = FALSE; 8016 8017 /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation 8018 into account when deciding how to define the symbol. 8019 Relocations in nonallocatable sections such as .pdr and 8020 .debug* should have no effect. */ 8021 constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0); 8022 8023 switch (r_type) 8024 { 8025 case R_MIPS_CALL16: 8026 case R_MIPS_CALL_HI16: 8027 case R_MIPS_CALL_LO16: 8028 case R_MIPS16_CALL16: 8029 case R_MICROMIPS_CALL16: 8030 case R_MICROMIPS_CALL_HI16: 8031 case R_MICROMIPS_CALL_LO16: 8032 call_reloc_p = TRUE; 8033 /* Fall through. */ 8034 8035 case R_MIPS_GOT16: 8036 case R_MIPS_GOT_HI16: 8037 case R_MIPS_GOT_LO16: 8038 case R_MIPS_GOT_PAGE: 8039 case R_MIPS_GOT_OFST: 8040 case R_MIPS_GOT_DISP: 8041 case R_MIPS_TLS_GOTTPREL: 8042 case R_MIPS_TLS_GD: 8043 case R_MIPS_TLS_LDM: 8044 case R_MIPS16_GOT16: 8045 case R_MIPS16_TLS_GOTTPREL: 8046 case R_MIPS16_TLS_GD: 8047 case R_MIPS16_TLS_LDM: 8048 case R_MICROMIPS_GOT16: 8049 case R_MICROMIPS_GOT_HI16: 8050 case R_MICROMIPS_GOT_LO16: 8051 case R_MICROMIPS_GOT_PAGE: 8052 case R_MICROMIPS_GOT_OFST: 8053 case R_MICROMIPS_GOT_DISP: 8054 case R_MICROMIPS_TLS_GOTTPREL: 8055 case R_MICROMIPS_TLS_GD: 8056 case R_MICROMIPS_TLS_LDM: 8057 if (dynobj == NULL) 8058 elf_hash_table (info)->dynobj = dynobj = abfd; 8059 if (!mips_elf_create_got_section (dynobj, info)) 8060 return FALSE; 8061 if (htab->is_vxworks && !info->shared) 8062 { 8063 (*_bfd_error_handler) 8064 (_("%B: GOT reloc at 0x%lx not expected in executables"), 8065 abfd, (unsigned long) rel->r_offset); 8066 bfd_set_error (bfd_error_bad_value); 8067 return FALSE; 8068 } 8069 can_make_dynamic_p = TRUE; 8070 break; 8071 8072 case R_MIPS_NONE: 8073 case R_MIPS_JALR: 8074 case R_MICROMIPS_JALR: 8075 /* These relocations have empty fields and are purely there to 8076 provide link information. The symbol value doesn't matter. */ 8077 constrain_symbol_p = FALSE; 8078 break; 8079 8080 case R_MIPS_GPREL16: 8081 case R_MIPS_GPREL32: 8082 case R_MIPS16_GPREL: 8083 case R_MICROMIPS_GPREL16: 8084 /* GP-relative relocations always resolve to a definition in a 8085 regular input file, ignoring the one-definition rule. This is 8086 important for the GP setup sequence in NewABI code, which 8087 always resolves to a local function even if other relocations 8088 against the symbol wouldn't. */ 8089 constrain_symbol_p = FALSE; 8090 break; 8091 8092 case R_MIPS_32: 8093 case R_MIPS_REL32: 8094 case R_MIPS_64: 8095 /* In VxWorks executables, references to external symbols 8096 must be handled using copy relocs or PLT entries; it is not 8097 possible to convert this relocation into a dynamic one. 8098 8099 For executables that use PLTs and copy-relocs, we have a 8100 choice between converting the relocation into a dynamic 8101 one or using copy relocations or PLT entries. It is 8102 usually better to do the former, unless the relocation is 8103 against a read-only section. */ 8104 if ((info->shared 8105 || (h != NULL 8106 && !htab->is_vxworks 8107 && strcmp (h->root.root.string, "__gnu_local_gp") != 0 8108 && !(!info->nocopyreloc 8109 && !PIC_OBJECT_P (abfd) 8110 && MIPS_ELF_READONLY_SECTION (sec)))) 8111 && (sec->flags & SEC_ALLOC) != 0) 8112 { 8113 can_make_dynamic_p = TRUE; 8114 if (dynobj == NULL) 8115 elf_hash_table (info)->dynobj = dynobj = abfd; 8116 } 8117 break; 8118 8119 case R_MIPS_26: 8120 case R_MIPS_PC16: 8121 case R_MIPS16_26: 8122 case R_MICROMIPS_26_S1: 8123 case R_MICROMIPS_PC7_S1: 8124 case R_MICROMIPS_PC10_S1: 8125 case R_MICROMIPS_PC16_S1: 8126 case R_MICROMIPS_PC23_S2: 8127 call_reloc_p = TRUE; 8128 break; 8129 } 8130 8131 if (h) 8132 { 8133 if (constrain_symbol_p) 8134 { 8135 if (!can_make_dynamic_p) 8136 ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1; 8137 8138 if (!call_reloc_p) 8139 h->pointer_equality_needed = 1; 8140 8141 /* We must not create a stub for a symbol that has 8142 relocations related to taking the function's address. 8143 This doesn't apply to VxWorks, where CALL relocs refer 8144 to a .got.plt entry instead of a normal .got entry. */ 8145 if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p)) 8146 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE; 8147 } 8148 8149 /* Relocations against the special VxWorks __GOTT_BASE__ and 8150 __GOTT_INDEX__ symbols must be left to the loader. Allocate 8151 room for them in .rela.dyn. */ 8152 if (is_gott_symbol (info, h)) 8153 { 8154 if (sreloc == NULL) 8155 { 8156 sreloc = mips_elf_rel_dyn_section (info, TRUE); 8157 if (sreloc == NULL) 8158 return FALSE; 8159 } 8160 mips_elf_allocate_dynamic_relocations (dynobj, info, 1); 8161 if (MIPS_ELF_READONLY_SECTION (sec)) 8162 /* We tell the dynamic linker that there are 8163 relocations against the text segment. */ 8164 info->flags |= DF_TEXTREL; 8165 } 8166 } 8167 else if (call_lo16_reloc_p (r_type) 8168 || got_lo16_reloc_p (r_type) 8169 || got_disp_reloc_p (r_type) 8170 || (got16_reloc_p (r_type) && htab->is_vxworks)) 8171 { 8172 /* We may need a local GOT entry for this relocation. We 8173 don't count R_MIPS_GOT_PAGE because we can estimate the 8174 maximum number of pages needed by looking at the size of 8175 the segment. Similar comments apply to R_MIPS*_GOT16 and 8176 R_MIPS*_CALL16, except on VxWorks, where GOT relocations 8177 always evaluate to "G". We don't count R_MIPS_GOT_HI16, or 8178 R_MIPS_CALL_HI16 because these are always followed by an 8179 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */ 8180 if (!mips_elf_record_local_got_symbol (abfd, r_symndx, 8181 rel->r_addend, info, r_type)) 8182 return FALSE; 8183 } 8184 8185 if (h != NULL 8186 && mips_elf_relocation_needs_la25_stub (abfd, r_type, 8187 ELF_ST_IS_MIPS16 (h->other))) 8188 ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE; 8189 8190 switch (r_type) 8191 { 8192 case R_MIPS_CALL16: 8193 case R_MIPS16_CALL16: 8194 case R_MICROMIPS_CALL16: 8195 if (h == NULL) 8196 { 8197 (*_bfd_error_handler) 8198 (_("%B: CALL16 reloc at 0x%lx not against global symbol"), 8199 abfd, (unsigned long) rel->r_offset); 8200 bfd_set_error (bfd_error_bad_value); 8201 return FALSE; 8202 } 8203 /* Fall through. */ 8204 8205 case R_MIPS_CALL_HI16: 8206 case R_MIPS_CALL_LO16: 8207 case R_MICROMIPS_CALL_HI16: 8208 case R_MICROMIPS_CALL_LO16: 8209 if (h != NULL) 8210 { 8211 /* Make sure there is room in the regular GOT to hold the 8212 function's address. We may eliminate it in favour of 8213 a .got.plt entry later; see mips_elf_count_got_symbols. */ 8214 if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE, 8215 r_type)) 8216 return FALSE; 8217 8218 /* We need a stub, not a plt entry for the undefined 8219 function. But we record it as if it needs plt. See 8220 _bfd_elf_adjust_dynamic_symbol. */ 8221 h->needs_plt = 1; 8222 h->type = STT_FUNC; 8223 } 8224 break; 8225 8226 case R_MIPS_GOT_PAGE: 8227 case R_MICROMIPS_GOT_PAGE: 8228 case R_MIPS16_GOT16: 8229 case R_MIPS_GOT16: 8230 case R_MIPS_GOT_HI16: 8231 case R_MIPS_GOT_LO16: 8232 case R_MICROMIPS_GOT16: 8233 case R_MICROMIPS_GOT_HI16: 8234 case R_MICROMIPS_GOT_LO16: 8235 if (!h || got_page_reloc_p (r_type)) 8236 { 8237 /* This relocation needs (or may need, if h != NULL) a 8238 page entry in the GOT. For R_MIPS_GOT_PAGE we do not 8239 know for sure until we know whether the symbol is 8240 preemptible. */ 8241 if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel)) 8242 { 8243 if (!mips_elf_get_section_contents (abfd, sec, &contents)) 8244 return FALSE; 8245 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE); 8246 addend = mips_elf_read_rel_addend (abfd, rel, 8247 howto, contents); 8248 if (got16_reloc_p (r_type)) 8249 mips_elf_add_lo16_rel_addend (abfd, rel, rel_end, 8250 contents, &addend); 8251 else 8252 addend <<= howto->rightshift; 8253 } 8254 else 8255 addend = rel->r_addend; 8256 if (!mips_elf_record_got_page_ref (info, abfd, r_symndx, 8257 h, addend)) 8258 return FALSE; 8259 8260 if (h) 8261 { 8262 struct mips_elf_link_hash_entry *hmips = 8263 (struct mips_elf_link_hash_entry *) h; 8264 8265 /* This symbol is definitely not overridable. */ 8266 if (hmips->root.def_regular 8267 && ! (info->shared && ! info->symbolic 8268 && ! hmips->root.forced_local)) 8269 h = NULL; 8270 } 8271 } 8272 /* If this is a global, overridable symbol, GOT_PAGE will 8273 decay to GOT_DISP, so we'll need a GOT entry for it. */ 8274 /* Fall through. */ 8275 8276 case R_MIPS_GOT_DISP: 8277 case R_MICROMIPS_GOT_DISP: 8278 if (h && !mips_elf_record_global_got_symbol (h, abfd, info, 8279 FALSE, r_type)) 8280 return FALSE; 8281 break; 8282 8283 case R_MIPS_TLS_GOTTPREL: 8284 case R_MIPS16_TLS_GOTTPREL: 8285 case R_MICROMIPS_TLS_GOTTPREL: 8286 if (info->shared) 8287 info->flags |= DF_STATIC_TLS; 8288 /* Fall through */ 8289 8290 case R_MIPS_TLS_LDM: 8291 case R_MIPS16_TLS_LDM: 8292 case R_MICROMIPS_TLS_LDM: 8293 if (tls_ldm_reloc_p (r_type)) 8294 { 8295 r_symndx = STN_UNDEF; 8296 h = NULL; 8297 } 8298 /* Fall through */ 8299 8300 case R_MIPS_TLS_GD: 8301 case R_MIPS16_TLS_GD: 8302 case R_MICROMIPS_TLS_GD: 8303 /* This symbol requires a global offset table entry, or two 8304 for TLS GD relocations. */ 8305 if (h != NULL) 8306 { 8307 if (!mips_elf_record_global_got_symbol (h, abfd, info, 8308 FALSE, r_type)) 8309 return FALSE; 8310 } 8311 else 8312 { 8313 if (!mips_elf_record_local_got_symbol (abfd, r_symndx, 8314 rel->r_addend, 8315 info, r_type)) 8316 return FALSE; 8317 } 8318 break; 8319 8320 case R_MIPS_32: 8321 case R_MIPS_REL32: 8322 case R_MIPS_64: 8323 /* In VxWorks executables, references to external symbols 8324 are handled using copy relocs or PLT stubs, so there's 8325 no need to add a .rela.dyn entry for this relocation. */ 8326 if (can_make_dynamic_p) 8327 { 8328 if (sreloc == NULL) 8329 { 8330 sreloc = mips_elf_rel_dyn_section (info, TRUE); 8331 if (sreloc == NULL) 8332 return FALSE; 8333 } 8334 if (info->shared && h == NULL) 8335 { 8336 /* When creating a shared object, we must copy these 8337 reloc types into the output file as R_MIPS_REL32 8338 relocs. Make room for this reloc in .rel(a).dyn. */ 8339 mips_elf_allocate_dynamic_relocations (dynobj, info, 1); 8340 if (MIPS_ELF_READONLY_SECTION (sec)) 8341 /* We tell the dynamic linker that there are 8342 relocations against the text segment. */ 8343 info->flags |= DF_TEXTREL; 8344 } 8345 else 8346 { 8347 struct mips_elf_link_hash_entry *hmips; 8348 8349 /* For a shared object, we must copy this relocation 8350 unless the symbol turns out to be undefined and 8351 weak with non-default visibility, in which case 8352 it will be left as zero. 8353 8354 We could elide R_MIPS_REL32 for locally binding symbols 8355 in shared libraries, but do not yet do so. 8356 8357 For an executable, we only need to copy this 8358 reloc if the symbol is defined in a dynamic 8359 object. */ 8360 hmips = (struct mips_elf_link_hash_entry *) h; 8361 ++hmips->possibly_dynamic_relocs; 8362 if (MIPS_ELF_READONLY_SECTION (sec)) 8363 /* We need it to tell the dynamic linker if there 8364 are relocations against the text segment. */ 8365 hmips->readonly_reloc = TRUE; 8366 } 8367 } 8368 8369 if (SGI_COMPAT (abfd)) 8370 mips_elf_hash_table (info)->compact_rel_size += 8371 sizeof (Elf32_External_crinfo); 8372 break; 8373 8374 case R_MIPS_26: 8375 case R_MIPS_GPREL16: 8376 case R_MIPS_LITERAL: 8377 case R_MIPS_GPREL32: 8378 case R_MICROMIPS_26_S1: 8379 case R_MICROMIPS_GPREL16: 8380 case R_MICROMIPS_LITERAL: 8381 case R_MICROMIPS_GPREL7_S2: 8382 if (SGI_COMPAT (abfd)) 8383 mips_elf_hash_table (info)->compact_rel_size += 8384 sizeof (Elf32_External_crinfo); 8385 break; 8386 8387 /* This relocation describes the C++ object vtable hierarchy. 8388 Reconstruct it for later use during GC. */ 8389 case R_MIPS_GNU_VTINHERIT: 8390 if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) 8391 return FALSE; 8392 break; 8393 8394 /* This relocation describes which C++ vtable entries are actually 8395 used. Record for later use during GC. */ 8396 case R_MIPS_GNU_VTENTRY: 8397 BFD_ASSERT (h != NULL); 8398 if (h != NULL 8399 && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) 8400 return FALSE; 8401 break; 8402 8403 default: 8404 break; 8405 } 8406 8407 /* Record the need for a PLT entry. At this point we don't know 8408 yet if we are going to create a PLT in the first place, but 8409 we only record whether the relocation requires a standard MIPS 8410 or a compressed code entry anyway. If we don't make a PLT after 8411 all, then we'll just ignore these arrangements. Likewise if 8412 a PLT entry is not created because the symbol is satisfied 8413 locally. */ 8414 if (h != NULL 8415 && jal_reloc_p (r_type) 8416 && !SYMBOL_CALLS_LOCAL (info, h)) 8417 { 8418 if (h->plt.plist == NULL) 8419 h->plt.plist = mips_elf_make_plt_record (abfd); 8420 if (h->plt.plist == NULL) 8421 return FALSE; 8422 8423 if (r_type == R_MIPS_26) 8424 h->plt.plist->need_mips = TRUE; 8425 else 8426 h->plt.plist->need_comp = TRUE; 8427 } 8428 8429 /* See if this reloc would need to refer to a MIPS16 hard-float stub, 8430 if there is one. We only need to handle global symbols here; 8431 we decide whether to keep or delete stubs for local symbols 8432 when processing the stub's relocations. */ 8433 if (h != NULL 8434 && !mips16_call_reloc_p (r_type) 8435 && !section_allows_mips16_refs_p (sec)) 8436 { 8437 struct mips_elf_link_hash_entry *mh; 8438 8439 mh = (struct mips_elf_link_hash_entry *) h; 8440 mh->need_fn_stub = TRUE; 8441 } 8442 8443 /* Refuse some position-dependent relocations when creating a 8444 shared library. Do not refuse R_MIPS_32 / R_MIPS_64; they're 8445 not PIC, but we can create dynamic relocations and the result 8446 will be fine. Also do not refuse R_MIPS_LO16, which can be 8447 combined with R_MIPS_GOT16. */ 8448 if (info->shared) 8449 { 8450 switch (r_type) 8451 { 8452 case R_MIPS16_HI16: 8453 case R_MIPS_HI16: 8454 case R_MIPS_HIGHER: 8455 case R_MIPS_HIGHEST: 8456 case R_MICROMIPS_HI16: 8457 case R_MICROMIPS_HIGHER: 8458 case R_MICROMIPS_HIGHEST: 8459 /* Don't refuse a high part relocation if it's against 8460 no symbol (e.g. part of a compound relocation). */ 8461 if (r_symndx == STN_UNDEF) 8462 break; 8463 8464 /* R_MIPS_HI16 against _gp_disp is used for $gp setup, 8465 and has a special meaning. */ 8466 if (!NEWABI_P (abfd) && h != NULL 8467 && strcmp (h->root.root.string, "_gp_disp") == 0) 8468 break; 8469 8470 /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks. */ 8471 if (is_gott_symbol (info, h)) 8472 break; 8473 8474 /* FALLTHROUGH */ 8475 8476 case R_MIPS16_26: 8477 case R_MIPS_26: 8478 case R_MICROMIPS_26_S1: 8479 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE); 8480 (*_bfd_error_handler) 8481 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"), 8482 abfd, howto->name, 8483 (h) ? h->root.root.string : "a local symbol"); 8484 bfd_set_error (bfd_error_bad_value); 8485 return FALSE; 8486 default: 8487 break; 8488 } 8489 } 8490 } 8491 8492 return TRUE; 8493 } 8494 8495 bfd_boolean 8496 _bfd_mips_relax_section (bfd *abfd, asection *sec, 8497 struct bfd_link_info *link_info, 8498 bfd_boolean *again) 8499 { 8500 Elf_Internal_Rela *internal_relocs; 8501 Elf_Internal_Rela *irel, *irelend; 8502 Elf_Internal_Shdr *symtab_hdr; 8503 bfd_byte *contents = NULL; 8504 size_t extsymoff; 8505 bfd_boolean changed_contents = FALSE; 8506 bfd_vma sec_start = sec->output_section->vma + sec->output_offset; 8507 Elf_Internal_Sym *isymbuf = NULL; 8508 8509 /* We are not currently changing any sizes, so only one pass. */ 8510 *again = FALSE; 8511 8512 if (link_info->relocatable) 8513 return TRUE; 8514 8515 internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL, 8516 link_info->keep_memory); 8517 if (internal_relocs == NULL) 8518 return TRUE; 8519 8520 irelend = internal_relocs + sec->reloc_count 8521 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel; 8522 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 8523 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info; 8524 8525 for (irel = internal_relocs; irel < irelend; irel++) 8526 { 8527 bfd_vma symval; 8528 bfd_signed_vma sym_offset; 8529 unsigned int r_type; 8530 unsigned long r_symndx; 8531 asection *sym_sec; 8532 unsigned long instruction; 8533 8534 /* Turn jalr into bgezal, and jr into beq, if they're marked 8535 with a JALR relocation, that indicate where they jump to. 8536 This saves some pipeline bubbles. */ 8537 r_type = ELF_R_TYPE (abfd, irel->r_info); 8538 if (r_type != R_MIPS_JALR) 8539 continue; 8540 8541 r_symndx = ELF_R_SYM (abfd, irel->r_info); 8542 /* Compute the address of the jump target. */ 8543 if (r_symndx >= extsymoff) 8544 { 8545 struct mips_elf_link_hash_entry *h 8546 = ((struct mips_elf_link_hash_entry *) 8547 elf_sym_hashes (abfd) [r_symndx - extsymoff]); 8548 8549 while (h->root.root.type == bfd_link_hash_indirect 8550 || h->root.root.type == bfd_link_hash_warning) 8551 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 8552 8553 /* If a symbol is undefined, or if it may be overridden, 8554 skip it. */ 8555 if (! ((h->root.root.type == bfd_link_hash_defined 8556 || h->root.root.type == bfd_link_hash_defweak) 8557 && h->root.root.u.def.section) 8558 || (link_info->shared && ! link_info->symbolic 8559 && !h->root.forced_local)) 8560 continue; 8561 8562 sym_sec = h->root.root.u.def.section; 8563 if (sym_sec->output_section) 8564 symval = (h->root.root.u.def.value 8565 + sym_sec->output_section->vma 8566 + sym_sec->output_offset); 8567 else 8568 symval = h->root.root.u.def.value; 8569 } 8570 else 8571 { 8572 Elf_Internal_Sym *isym; 8573 8574 /* Read this BFD's symbols if we haven't done so already. */ 8575 if (isymbuf == NULL && symtab_hdr->sh_info != 0) 8576 { 8577 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; 8578 if (isymbuf == NULL) 8579 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr, 8580 symtab_hdr->sh_info, 0, 8581 NULL, NULL, NULL); 8582 if (isymbuf == NULL) 8583 goto relax_return; 8584 } 8585 8586 isym = isymbuf + r_symndx; 8587 if (isym->st_shndx == SHN_UNDEF) 8588 continue; 8589 else if (isym->st_shndx == SHN_ABS) 8590 sym_sec = bfd_abs_section_ptr; 8591 else if (isym->st_shndx == SHN_COMMON) 8592 sym_sec = bfd_com_section_ptr; 8593 else 8594 sym_sec 8595 = bfd_section_from_elf_index (abfd, isym->st_shndx); 8596 symval = isym->st_value 8597 + sym_sec->output_section->vma 8598 + sym_sec->output_offset; 8599 } 8600 8601 /* Compute branch offset, from delay slot of the jump to the 8602 branch target. */ 8603 sym_offset = (symval + irel->r_addend) 8604 - (sec_start + irel->r_offset + 4); 8605 8606 /* Branch offset must be properly aligned. */ 8607 if ((sym_offset & 3) != 0) 8608 continue; 8609 8610 sym_offset >>= 2; 8611 8612 /* Check that it's in range. */ 8613 if (sym_offset < -0x8000 || sym_offset >= 0x8000) 8614 continue; 8615 8616 /* Get the section contents if we haven't done so already. */ 8617 if (!mips_elf_get_section_contents (abfd, sec, &contents)) 8618 goto relax_return; 8619 8620 instruction = bfd_get_32 (abfd, contents + irel->r_offset); 8621 8622 /* If it was jalr <reg>, turn it into bgezal $zero, <target>. */ 8623 if ((instruction & 0xfc1fffff) == 0x0000f809) 8624 instruction = 0x04110000; 8625 /* If it was jr <reg>, turn it into b <target>. */ 8626 else if ((instruction & 0xfc1fffff) == 0x00000008) 8627 instruction = 0x10000000; 8628 else 8629 continue; 8630 8631 instruction |= (sym_offset & 0xffff); 8632 bfd_put_32 (abfd, instruction, contents + irel->r_offset); 8633 changed_contents = TRUE; 8634 } 8635 8636 if (contents != NULL 8637 && elf_section_data (sec)->this_hdr.contents != contents) 8638 { 8639 if (!changed_contents && !link_info->keep_memory) 8640 free (contents); 8641 else 8642 { 8643 /* Cache the section contents for elf_link_input_bfd. */ 8644 elf_section_data (sec)->this_hdr.contents = contents; 8645 } 8646 } 8647 return TRUE; 8648 8649 relax_return: 8650 if (contents != NULL 8651 && elf_section_data (sec)->this_hdr.contents != contents) 8652 free (contents); 8653 return FALSE; 8654 } 8655 8656 /* Allocate space for global sym dynamic relocs. */ 8657 8658 static bfd_boolean 8659 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) 8660 { 8661 struct bfd_link_info *info = inf; 8662 bfd *dynobj; 8663 struct mips_elf_link_hash_entry *hmips; 8664 struct mips_elf_link_hash_table *htab; 8665 8666 htab = mips_elf_hash_table (info); 8667 BFD_ASSERT (htab != NULL); 8668 8669 dynobj = elf_hash_table (info)->dynobj; 8670 hmips = (struct mips_elf_link_hash_entry *) h; 8671 8672 /* VxWorks executables are handled elsewhere; we only need to 8673 allocate relocations in shared objects. */ 8674 if (htab->is_vxworks && !info->shared) 8675 return TRUE; 8676 8677 /* Ignore indirect symbols. All relocations against such symbols 8678 will be redirected to the target symbol. */ 8679 if (h->root.type == bfd_link_hash_indirect) 8680 return TRUE; 8681 8682 /* If this symbol is defined in a dynamic object, or we are creating 8683 a shared library, we will need to copy any R_MIPS_32 or 8684 R_MIPS_REL32 relocs against it into the output file. */ 8685 if (! info->relocatable 8686 && hmips->possibly_dynamic_relocs != 0 8687 && (h->root.type == bfd_link_hash_defweak 8688 || (!h->def_regular && !ELF_COMMON_DEF_P (h)) 8689 || info->shared)) 8690 { 8691 bfd_boolean do_copy = TRUE; 8692 8693 if (h->root.type == bfd_link_hash_undefweak) 8694 { 8695 /* Do not copy relocations for undefined weak symbols with 8696 non-default visibility. */ 8697 if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) 8698 do_copy = FALSE; 8699 8700 /* Make sure undefined weak symbols are output as a dynamic 8701 symbol in PIEs. */ 8702 else if (h->dynindx == -1 && !h->forced_local) 8703 { 8704 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 8705 return FALSE; 8706 } 8707 } 8708 8709 if (do_copy) 8710 { 8711 /* Even though we don't directly need a GOT entry for this symbol, 8712 the SVR4 psABI requires it to have a dynamic symbol table 8713 index greater that DT_MIPS_GOTSYM if there are dynamic 8714 relocations against it. 8715 8716 VxWorks does not enforce the same mapping between the GOT 8717 and the symbol table, so the same requirement does not 8718 apply there. */ 8719 if (!htab->is_vxworks) 8720 { 8721 if (hmips->global_got_area > GGA_RELOC_ONLY) 8722 hmips->global_got_area = GGA_RELOC_ONLY; 8723 hmips->got_only_for_calls = FALSE; 8724 } 8725 8726 mips_elf_allocate_dynamic_relocations 8727 (dynobj, info, hmips->possibly_dynamic_relocs); 8728 if (hmips->readonly_reloc) 8729 /* We tell the dynamic linker that there are relocations 8730 against the text segment. */ 8731 info->flags |= DF_TEXTREL; 8732 } 8733 } 8734 8735 return TRUE; 8736 } 8737 8738 /* Adjust a symbol defined by a dynamic object and referenced by a 8739 regular object. The current definition is in some section of the 8740 dynamic object, but we're not including those sections. We have to 8741 change the definition to something the rest of the link can 8742 understand. */ 8743 8744 bfd_boolean 8745 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info, 8746 struct elf_link_hash_entry *h) 8747 { 8748 bfd *dynobj; 8749 struct mips_elf_link_hash_entry *hmips; 8750 struct mips_elf_link_hash_table *htab; 8751 8752 htab = mips_elf_hash_table (info); 8753 BFD_ASSERT (htab != NULL); 8754 8755 dynobj = elf_hash_table (info)->dynobj; 8756 hmips = (struct mips_elf_link_hash_entry *) h; 8757 8758 /* Make sure we know what is going on here. */ 8759 BFD_ASSERT (dynobj != NULL 8760 && (h->needs_plt 8761 || h->u.weakdef != NULL 8762 || (h->def_dynamic 8763 && h->ref_regular 8764 && !h->def_regular))); 8765 8766 hmips = (struct mips_elf_link_hash_entry *) h; 8767 8768 /* If there are call relocations against an externally-defined symbol, 8769 see whether we can create a MIPS lazy-binding stub for it. We can 8770 only do this if all references to the function are through call 8771 relocations, and in that case, the traditional lazy-binding stubs 8772 are much more efficient than PLT entries. 8773 8774 Traditional stubs are only available on SVR4 psABI-based systems; 8775 VxWorks always uses PLTs instead. */ 8776 if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub) 8777 { 8778 if (! elf_hash_table (info)->dynamic_sections_created) 8779 return TRUE; 8780 8781 /* If this symbol is not defined in a regular file, then set 8782 the symbol to the stub location. This is required to make 8783 function pointers compare as equal between the normal 8784 executable and the shared library. */ 8785 if (!h->def_regular) 8786 { 8787 hmips->needs_lazy_stub = TRUE; 8788 htab->lazy_stub_count++; 8789 return TRUE; 8790 } 8791 } 8792 /* As above, VxWorks requires PLT entries for externally-defined 8793 functions that are only accessed through call relocations. 8794 8795 Both VxWorks and non-VxWorks targets also need PLT entries if there 8796 are static-only relocations against an externally-defined function. 8797 This can technically occur for shared libraries if there are 8798 branches to the symbol, although it is unlikely that this will be 8799 used in practice due to the short ranges involved. It can occur 8800 for any relative or absolute relocation in executables; in that 8801 case, the PLT entry becomes the function's canonical address. */ 8802 else if (((h->needs_plt && !hmips->no_fn_stub) 8803 || (h->type == STT_FUNC && hmips->has_static_relocs)) 8804 && htab->use_plts_and_copy_relocs 8805 && !SYMBOL_CALLS_LOCAL (info, h) 8806 && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT 8807 && h->root.type == bfd_link_hash_undefweak)) 8808 { 8809 bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd); 8810 bfd_boolean newabi_p = NEWABI_P (info->output_bfd); 8811 8812 /* If this is the first symbol to need a PLT entry, then make some 8813 basic setup. Also work out PLT entry sizes. We'll need them 8814 for PLT offset calculations. */ 8815 if (htab->plt_mips_offset + htab->plt_comp_offset == 0) 8816 { 8817 BFD_ASSERT (htab->sgotplt->size == 0); 8818 BFD_ASSERT (htab->plt_got_index == 0); 8819 8820 /* If we're using the PLT additions to the psABI, each PLT 8821 entry is 16 bytes and the PLT0 entry is 32 bytes. 8822 Encourage better cache usage by aligning. We do this 8823 lazily to avoid pessimizing traditional objects. */ 8824 if (!htab->is_vxworks 8825 && !bfd_set_section_alignment (dynobj, htab->splt, 5)) 8826 return FALSE; 8827 8828 /* Make sure that .got.plt is word-aligned. We do this lazily 8829 for the same reason as above. */ 8830 if (!bfd_set_section_alignment (dynobj, htab->sgotplt, 8831 MIPS_ELF_LOG_FILE_ALIGN (dynobj))) 8832 return FALSE; 8833 8834 /* On non-VxWorks targets, the first two entries in .got.plt 8835 are reserved. */ 8836 if (!htab->is_vxworks) 8837 htab->plt_got_index 8838 += (get_elf_backend_data (dynobj)->got_header_size 8839 / MIPS_ELF_GOT_SIZE (dynobj)); 8840 8841 /* On VxWorks, also allocate room for the header's 8842 .rela.plt.unloaded entries. */ 8843 if (htab->is_vxworks && !info->shared) 8844 htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela); 8845 8846 /* Now work out the sizes of individual PLT entries. */ 8847 if (htab->is_vxworks && info->shared) 8848 htab->plt_mips_entry_size 8849 = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry); 8850 else if (htab->is_vxworks) 8851 htab->plt_mips_entry_size 8852 = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry); 8853 else if (newabi_p) 8854 htab->plt_mips_entry_size 8855 = 4 * ARRAY_SIZE (mips_exec_plt_entry); 8856 else if (!micromips_p) 8857 { 8858 htab->plt_mips_entry_size 8859 = 4 * ARRAY_SIZE (mips_exec_plt_entry); 8860 htab->plt_comp_entry_size 8861 = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry); 8862 } 8863 else if (htab->insn32) 8864 { 8865 htab->plt_mips_entry_size 8866 = 4 * ARRAY_SIZE (mips_exec_plt_entry); 8867 htab->plt_comp_entry_size 8868 = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry); 8869 } 8870 else 8871 { 8872 htab->plt_mips_entry_size 8873 = 4 * ARRAY_SIZE (mips_exec_plt_entry); 8874 htab->plt_comp_entry_size 8875 = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry); 8876 } 8877 } 8878 8879 if (h->plt.plist == NULL) 8880 h->plt.plist = mips_elf_make_plt_record (dynobj); 8881 if (h->plt.plist == NULL) 8882 return FALSE; 8883 8884 /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks, 8885 n32 or n64, so always use a standard entry there. 8886 8887 If the symbol has a MIPS16 call stub and gets a PLT entry, then 8888 all MIPS16 calls will go via that stub, and there is no benefit 8889 to having a MIPS16 entry. And in the case of call_stub a 8890 standard entry actually has to be used as the stub ends with a J 8891 instruction. */ 8892 if (newabi_p 8893 || htab->is_vxworks 8894 || hmips->call_stub 8895 || hmips->call_fp_stub) 8896 { 8897 h->plt.plist->need_mips = TRUE; 8898 h->plt.plist->need_comp = FALSE; 8899 } 8900 8901 /* Otherwise, if there are no direct calls to the function, we 8902 have a free choice of whether to use standard or compressed 8903 entries. Prefer microMIPS entries if the object is known to 8904 contain microMIPS code, so that it becomes possible to create 8905 pure microMIPS binaries. Prefer standard entries otherwise, 8906 because MIPS16 ones are no smaller and are usually slower. */ 8907 if (!h->plt.plist->need_mips && !h->plt.plist->need_comp) 8908 { 8909 if (micromips_p) 8910 h->plt.plist->need_comp = TRUE; 8911 else 8912 h->plt.plist->need_mips = TRUE; 8913 } 8914 8915 if (h->plt.plist->need_mips) 8916 { 8917 h->plt.plist->mips_offset = htab->plt_mips_offset; 8918 htab->plt_mips_offset += htab->plt_mips_entry_size; 8919 } 8920 if (h->plt.plist->need_comp) 8921 { 8922 h->plt.plist->comp_offset = htab->plt_comp_offset; 8923 htab->plt_comp_offset += htab->plt_comp_entry_size; 8924 } 8925 8926 /* Reserve the corresponding .got.plt entry now too. */ 8927 h->plt.plist->gotplt_index = htab->plt_got_index++; 8928 8929 /* If the output file has no definition of the symbol, set the 8930 symbol's value to the address of the stub. */ 8931 if (!info->shared && !h->def_regular) 8932 hmips->use_plt_entry = TRUE; 8933 8934 /* Make room for the R_MIPS_JUMP_SLOT relocation. */ 8935 htab->srelplt->size += (htab->is_vxworks 8936 ? MIPS_ELF_RELA_SIZE (dynobj) 8937 : MIPS_ELF_REL_SIZE (dynobj)); 8938 8939 /* Make room for the .rela.plt.unloaded relocations. */ 8940 if (htab->is_vxworks && !info->shared) 8941 htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela); 8942 8943 /* All relocations against this symbol that could have been made 8944 dynamic will now refer to the PLT entry instead. */ 8945 hmips->possibly_dynamic_relocs = 0; 8946 8947 return TRUE; 8948 } 8949 8950 /* If this is a weak symbol, and there is a real definition, the 8951 processor independent code will have arranged for us to see the 8952 real definition first, and we can just use the same value. */ 8953 if (h->u.weakdef != NULL) 8954 { 8955 BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined 8956 || h->u.weakdef->root.type == bfd_link_hash_defweak); 8957 h->root.u.def.section = h->u.weakdef->root.u.def.section; 8958 h->root.u.def.value = h->u.weakdef->root.u.def.value; 8959 return TRUE; 8960 } 8961 8962 /* Otherwise, there is nothing further to do for symbols defined 8963 in regular objects. */ 8964 if (h->def_regular) 8965 return TRUE; 8966 8967 /* There's also nothing more to do if we'll convert all relocations 8968 against this symbol into dynamic relocations. */ 8969 if (!hmips->has_static_relocs) 8970 return TRUE; 8971 8972 /* We're now relying on copy relocations. Complain if we have 8973 some that we can't convert. */ 8974 if (!htab->use_plts_and_copy_relocs || info->shared) 8975 { 8976 (*_bfd_error_handler) (_("non-dynamic relocations refer to " 8977 "dynamic symbol %s"), 8978 h->root.root.string); 8979 bfd_set_error (bfd_error_bad_value); 8980 return FALSE; 8981 } 8982 8983 /* We must allocate the symbol in our .dynbss section, which will 8984 become part of the .bss section of the executable. There will be 8985 an entry for this symbol in the .dynsym section. The dynamic 8986 object will contain position independent code, so all references 8987 from the dynamic object to this symbol will go through the global 8988 offset table. The dynamic linker will use the .dynsym entry to 8989 determine the address it must put in the global offset table, so 8990 both the dynamic object and the regular object will refer to the 8991 same memory location for the variable. */ 8992 8993 if ((h->root.u.def.section->flags & SEC_ALLOC) != 0) 8994 { 8995 if (htab->is_vxworks) 8996 htab->srelbss->size += sizeof (Elf32_External_Rela); 8997 else 8998 mips_elf_allocate_dynamic_relocations (dynobj, info, 1); 8999 h->needs_copy = 1; 9000 } 9001 9002 /* All relocations against this symbol that could have been made 9003 dynamic will now refer to the local copy instead. */ 9004 hmips->possibly_dynamic_relocs = 0; 9005 9006 return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss); 9007 } 9008 9009 /* This function is called after all the input files have been read, 9010 and the input sections have been assigned to output sections. We 9011 check for any mips16 stub sections that we can discard. */ 9012 9013 bfd_boolean 9014 _bfd_mips_elf_always_size_sections (bfd *output_bfd, 9015 struct bfd_link_info *info) 9016 { 9017 asection *ri; 9018 struct mips_elf_link_hash_table *htab; 9019 struct mips_htab_traverse_info hti; 9020 9021 htab = mips_elf_hash_table (info); 9022 BFD_ASSERT (htab != NULL); 9023 9024 /* The .reginfo section has a fixed size. */ 9025 ri = bfd_get_section_by_name (output_bfd, ".reginfo"); 9026 if (ri != NULL) 9027 bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo)); 9028 9029 hti.info = info; 9030 hti.output_bfd = output_bfd; 9031 hti.error = FALSE; 9032 mips_elf_link_hash_traverse (mips_elf_hash_table (info), 9033 mips_elf_check_symbols, &hti); 9034 if (hti.error) 9035 return FALSE; 9036 9037 return TRUE; 9038 } 9039 9040 /* If the link uses a GOT, lay it out and work out its size. */ 9041 9042 static bfd_boolean 9043 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info) 9044 { 9045 bfd *dynobj; 9046 asection *s; 9047 struct mips_got_info *g; 9048 bfd_size_type loadable_size = 0; 9049 bfd_size_type page_gotno; 9050 bfd *ibfd; 9051 struct mips_elf_traverse_got_arg tga; 9052 struct mips_elf_link_hash_table *htab; 9053 9054 htab = mips_elf_hash_table (info); 9055 BFD_ASSERT (htab != NULL); 9056 9057 s = htab->sgot; 9058 if (s == NULL) 9059 return TRUE; 9060 9061 dynobj = elf_hash_table (info)->dynobj; 9062 g = htab->got_info; 9063 9064 /* Allocate room for the reserved entries. VxWorks always reserves 9065 3 entries; other objects only reserve 2 entries. */ 9066 BFD_ASSERT (g->assigned_gotno == 0); 9067 if (htab->is_vxworks) 9068 htab->reserved_gotno = 3; 9069 else 9070 htab->reserved_gotno = 2; 9071 g->local_gotno += htab->reserved_gotno; 9072 g->assigned_gotno = htab->reserved_gotno; 9073 9074 /* Decide which symbols need to go in the global part of the GOT and 9075 count the number of reloc-only GOT symbols. */ 9076 mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info); 9077 9078 if (!mips_elf_resolve_final_got_entries (info, g)) 9079 return FALSE; 9080 9081 /* Calculate the total loadable size of the output. That 9082 will give us the maximum number of GOT_PAGE entries 9083 required. */ 9084 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next) 9085 { 9086 asection *subsection; 9087 9088 for (subsection = ibfd->sections; 9089 subsection; 9090 subsection = subsection->next) 9091 { 9092 if ((subsection->flags & SEC_ALLOC) == 0) 9093 continue; 9094 loadable_size += ((subsection->size + 0xf) 9095 &~ (bfd_size_type) 0xf); 9096 } 9097 } 9098 9099 if (htab->is_vxworks) 9100 /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16 9101 relocations against local symbols evaluate to "G", and the EABI does 9102 not include R_MIPS_GOT_PAGE. */ 9103 page_gotno = 0; 9104 else 9105 /* Assume there are two loadable segments consisting of contiguous 9106 sections. Is 5 enough? */ 9107 page_gotno = (loadable_size >> 16) + 5; 9108 9109 /* Choose the smaller of the two page estimates; both are intended to be 9110 conservative. */ 9111 if (page_gotno > g->page_gotno) 9112 page_gotno = g->page_gotno; 9113 9114 g->local_gotno += page_gotno; 9115 9116 s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd); 9117 s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd); 9118 s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd); 9119 9120 /* VxWorks does not support multiple GOTs. It initializes $gp to 9121 __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the 9122 dynamic loader. */ 9123 if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info)) 9124 { 9125 if (!mips_elf_multi_got (output_bfd, info, s, page_gotno)) 9126 return FALSE; 9127 } 9128 else 9129 { 9130 /* Record that all bfds use G. This also has the effect of freeing 9131 the per-bfd GOTs, which we no longer need. */ 9132 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next) 9133 if (mips_elf_bfd_got (ibfd, FALSE)) 9134 mips_elf_replace_bfd_got (ibfd, g); 9135 mips_elf_replace_bfd_got (output_bfd, g); 9136 9137 /* Set up TLS entries. */ 9138 g->tls_assigned_gotno = g->global_gotno + g->local_gotno; 9139 tga.info = info; 9140 tga.g = g; 9141 tga.value = MIPS_ELF_GOT_SIZE (output_bfd); 9142 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga); 9143 if (!tga.g) 9144 return FALSE; 9145 BFD_ASSERT (g->tls_assigned_gotno 9146 == g->global_gotno + g->local_gotno + g->tls_gotno); 9147 9148 /* Each VxWorks GOT entry needs an explicit relocation. */ 9149 if (htab->is_vxworks && info->shared) 9150 g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno; 9151 9152 /* Allocate room for the TLS relocations. */ 9153 if (g->relocs) 9154 mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs); 9155 } 9156 9157 return TRUE; 9158 } 9159 9160 /* Estimate the size of the .MIPS.stubs section. */ 9161 9162 static void 9163 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info) 9164 { 9165 struct mips_elf_link_hash_table *htab; 9166 bfd_size_type dynsymcount; 9167 9168 htab = mips_elf_hash_table (info); 9169 BFD_ASSERT (htab != NULL); 9170 9171 if (htab->lazy_stub_count == 0) 9172 return; 9173 9174 /* IRIX rld assumes that a function stub isn't at the end of the .text 9175 section, so add a dummy entry to the end. */ 9176 htab->lazy_stub_count++; 9177 9178 /* Get a worst-case estimate of the number of dynamic symbols needed. 9179 At this point, dynsymcount does not account for section symbols 9180 and count_section_dynsyms may overestimate the number that will 9181 be needed. */ 9182 dynsymcount = (elf_hash_table (info)->dynsymcount 9183 + count_section_dynsyms (output_bfd, info)); 9184 9185 /* Determine the size of one stub entry. There's no disadvantage 9186 from using microMIPS code here, so for the sake of pure-microMIPS 9187 binaries we prefer it whenever there's any microMIPS code in 9188 output produced at all. This has a benefit of stubs being 9189 shorter by 4 bytes each too, unless in the insn32 mode. */ 9190 if (!MICROMIPS_P (output_bfd)) 9191 htab->function_stub_size = (dynsymcount > 0x10000 9192 ? MIPS_FUNCTION_STUB_BIG_SIZE 9193 : MIPS_FUNCTION_STUB_NORMAL_SIZE); 9194 else if (htab->insn32) 9195 htab->function_stub_size = (dynsymcount > 0x10000 9196 ? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 9197 : MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE); 9198 else 9199 htab->function_stub_size = (dynsymcount > 0x10000 9200 ? MICROMIPS_FUNCTION_STUB_BIG_SIZE 9201 : MICROMIPS_FUNCTION_STUB_NORMAL_SIZE); 9202 9203 htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size; 9204 } 9205 9206 /* A mips_elf_link_hash_traverse callback for which DATA points to a 9207 mips_htab_traverse_info. If H needs a traditional MIPS lazy-binding 9208 stub, allocate an entry in the stubs section. */ 9209 9210 static bfd_boolean 9211 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data) 9212 { 9213 struct mips_htab_traverse_info *hti = data; 9214 struct mips_elf_link_hash_table *htab; 9215 struct bfd_link_info *info; 9216 bfd *output_bfd; 9217 9218 info = hti->info; 9219 output_bfd = hti->output_bfd; 9220 htab = mips_elf_hash_table (info); 9221 BFD_ASSERT (htab != NULL); 9222 9223 if (h->needs_lazy_stub) 9224 { 9225 bfd_boolean micromips_p = MICROMIPS_P (output_bfd); 9226 unsigned int other = micromips_p ? STO_MICROMIPS : 0; 9227 bfd_vma isa_bit = micromips_p; 9228 9229 BFD_ASSERT (htab->root.dynobj != NULL); 9230 if (h->root.plt.plist == NULL) 9231 h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner); 9232 if (h->root.plt.plist == NULL) 9233 { 9234 hti->error = TRUE; 9235 return FALSE; 9236 } 9237 h->root.root.u.def.section = htab->sstubs; 9238 h->root.root.u.def.value = htab->sstubs->size + isa_bit; 9239 h->root.plt.plist->stub_offset = htab->sstubs->size; 9240 h->root.other = other; 9241 htab->sstubs->size += htab->function_stub_size; 9242 } 9243 return TRUE; 9244 } 9245 9246 /* Allocate offsets in the stubs section to each symbol that needs one. 9247 Set the final size of the .MIPS.stub section. */ 9248 9249 static bfd_boolean 9250 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info) 9251 { 9252 bfd *output_bfd = info->output_bfd; 9253 bfd_boolean micromips_p = MICROMIPS_P (output_bfd); 9254 unsigned int other = micromips_p ? STO_MICROMIPS : 0; 9255 bfd_vma isa_bit = micromips_p; 9256 struct mips_elf_link_hash_table *htab; 9257 struct mips_htab_traverse_info hti; 9258 struct elf_link_hash_entry *h; 9259 bfd *dynobj; 9260 9261 htab = mips_elf_hash_table (info); 9262 BFD_ASSERT (htab != NULL); 9263 9264 if (htab->lazy_stub_count == 0) 9265 return TRUE; 9266 9267 htab->sstubs->size = 0; 9268 hti.info = info; 9269 hti.output_bfd = output_bfd; 9270 hti.error = FALSE; 9271 mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti); 9272 if (hti.error) 9273 return FALSE; 9274 htab->sstubs->size += htab->function_stub_size; 9275 BFD_ASSERT (htab->sstubs->size 9276 == htab->lazy_stub_count * htab->function_stub_size); 9277 9278 dynobj = elf_hash_table (info)->dynobj; 9279 BFD_ASSERT (dynobj != NULL); 9280 h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_"); 9281 if (h == NULL) 9282 return FALSE; 9283 h->root.u.def.value = isa_bit; 9284 h->other = other; 9285 h->type = STT_FUNC; 9286 9287 return TRUE; 9288 } 9289 9290 /* A mips_elf_link_hash_traverse callback for which DATA points to a 9291 bfd_link_info. If H uses the address of a PLT entry as the value 9292 of the symbol, then set the entry in the symbol table now. Prefer 9293 a standard MIPS PLT entry. */ 9294 9295 static bfd_boolean 9296 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data) 9297 { 9298 struct bfd_link_info *info = data; 9299 bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd); 9300 struct mips_elf_link_hash_table *htab; 9301 unsigned int other; 9302 bfd_vma isa_bit; 9303 bfd_vma val; 9304 9305 htab = mips_elf_hash_table (info); 9306 BFD_ASSERT (htab != NULL); 9307 9308 if (h->use_plt_entry) 9309 { 9310 BFD_ASSERT (h->root.plt.plist != NULL); 9311 BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE 9312 || h->root.plt.plist->comp_offset != MINUS_ONE); 9313 9314 val = htab->plt_header_size; 9315 if (h->root.plt.plist->mips_offset != MINUS_ONE) 9316 { 9317 isa_bit = 0; 9318 val += h->root.plt.plist->mips_offset; 9319 other = 0; 9320 } 9321 else 9322 { 9323 isa_bit = 1; 9324 val += htab->plt_mips_offset + h->root.plt.plist->comp_offset; 9325 other = micromips_p ? STO_MICROMIPS : STO_MIPS16; 9326 } 9327 val += isa_bit; 9328 /* For VxWorks, point at the PLT load stub rather than the lazy 9329 resolution stub; this stub will become the canonical function 9330 address. */ 9331 if (htab->is_vxworks) 9332 val += 8; 9333 9334 h->root.root.u.def.section = htab->splt; 9335 h->root.root.u.def.value = val; 9336 h->root.other = other; 9337 } 9338 9339 return TRUE; 9340 } 9341 9342 /* Set the sizes of the dynamic sections. */ 9343 9344 bfd_boolean 9345 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, 9346 struct bfd_link_info *info) 9347 { 9348 bfd *dynobj; 9349 asection *s, *sreldyn; 9350 bfd_boolean reltext; 9351 struct mips_elf_link_hash_table *htab; 9352 9353 htab = mips_elf_hash_table (info); 9354 BFD_ASSERT (htab != NULL); 9355 dynobj = elf_hash_table (info)->dynobj; 9356 BFD_ASSERT (dynobj != NULL); 9357 9358 if (elf_hash_table (info)->dynamic_sections_created) 9359 { 9360 /* Set the contents of the .interp section to the interpreter. */ 9361 if (info->executable) 9362 { 9363 s = bfd_get_linker_section (dynobj, ".interp"); 9364 BFD_ASSERT (s != NULL); 9365 s->size 9366 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1; 9367 s->contents 9368 = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd); 9369 } 9370 9371 /* Figure out the size of the PLT header if we know that we 9372 are using it. For the sake of cache alignment always use 9373 a standard header whenever any standard entries are present 9374 even if microMIPS entries are present as well. This also 9375 lets the microMIPS header rely on the value of $v0 only set 9376 by microMIPS entries, for a small size reduction. 9377 9378 Set symbol table entry values for symbols that use the 9379 address of their PLT entry now that we can calculate it. 9380 9381 Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we 9382 haven't already in _bfd_elf_create_dynamic_sections. */ 9383 if (htab->splt && htab->plt_mips_offset + htab->plt_comp_offset != 0) 9384 { 9385 bfd_boolean micromips_p = (MICROMIPS_P (output_bfd) 9386 && !htab->plt_mips_offset); 9387 unsigned int other = micromips_p ? STO_MICROMIPS : 0; 9388 bfd_vma isa_bit = micromips_p; 9389 struct elf_link_hash_entry *h; 9390 bfd_vma size; 9391 9392 BFD_ASSERT (htab->use_plts_and_copy_relocs); 9393 BFD_ASSERT (htab->sgotplt->size == 0); 9394 BFD_ASSERT (htab->splt->size == 0); 9395 9396 if (htab->is_vxworks && info->shared) 9397 size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry); 9398 else if (htab->is_vxworks) 9399 size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry); 9400 else if (ABI_64_P (output_bfd)) 9401 size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry); 9402 else if (ABI_N32_P (output_bfd)) 9403 size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry); 9404 else if (!micromips_p) 9405 size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry); 9406 else if (htab->insn32) 9407 size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); 9408 else 9409 size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry); 9410 9411 htab->plt_header_is_comp = micromips_p; 9412 htab->plt_header_size = size; 9413 htab->splt->size = (size 9414 + htab->plt_mips_offset 9415 + htab->plt_comp_offset); 9416 htab->sgotplt->size = (htab->plt_got_index 9417 * MIPS_ELF_GOT_SIZE (dynobj)); 9418 9419 mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info); 9420 9421 if (htab->root.hplt == NULL) 9422 { 9423 h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt, 9424 "_PROCEDURE_LINKAGE_TABLE_"); 9425 htab->root.hplt = h; 9426 if (h == NULL) 9427 return FALSE; 9428 } 9429 9430 h = htab->root.hplt; 9431 h->root.u.def.value = isa_bit; 9432 h->other = other; 9433 h->type = STT_FUNC; 9434 } 9435 } 9436 9437 /* Allocate space for global sym dynamic relocs. */ 9438 elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info); 9439 9440 mips_elf_estimate_stub_size (output_bfd, info); 9441 9442 if (!mips_elf_lay_out_got (output_bfd, info)) 9443 return FALSE; 9444 9445 mips_elf_lay_out_lazy_stubs (info); 9446 9447 /* The check_relocs and adjust_dynamic_symbol entry points have 9448 determined the sizes of the various dynamic sections. Allocate 9449 memory for them. */ 9450 reltext = FALSE; 9451 for (s = dynobj->sections; s != NULL; s = s->next) 9452 { 9453 const char *name; 9454 9455 /* It's OK to base decisions on the section name, because none 9456 of the dynobj section names depend upon the input files. */ 9457 name = bfd_get_section_name (dynobj, s); 9458 9459 if ((s->flags & SEC_LINKER_CREATED) == 0) 9460 continue; 9461 9462 if (CONST_STRNEQ (name, ".rel")) 9463 { 9464 if (s->size != 0) 9465 { 9466 const char *outname; 9467 asection *target; 9468 9469 /* If this relocation section applies to a read only 9470 section, then we probably need a DT_TEXTREL entry. 9471 If the relocation section is .rel(a).dyn, we always 9472 assert a DT_TEXTREL entry rather than testing whether 9473 there exists a relocation to a read only section or 9474 not. */ 9475 outname = bfd_get_section_name (output_bfd, 9476 s->output_section); 9477 target = bfd_get_section_by_name (output_bfd, outname + 4); 9478 if ((target != NULL 9479 && (target->flags & SEC_READONLY) != 0 9480 && (target->flags & SEC_ALLOC) != 0) 9481 || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0) 9482 reltext = TRUE; 9483 9484 /* We use the reloc_count field as a counter if we need 9485 to copy relocs into the output file. */ 9486 if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0) 9487 s->reloc_count = 0; 9488 9489 /* If combreloc is enabled, elf_link_sort_relocs() will 9490 sort relocations, but in a different way than we do, 9491 and before we're done creating relocations. Also, it 9492 will move them around between input sections' 9493 relocation's contents, so our sorting would be 9494 broken, so don't let it run. */ 9495 info->combreloc = 0; 9496 } 9497 } 9498 else if (! info->shared 9499 && ! mips_elf_hash_table (info)->use_rld_obj_head 9500 && CONST_STRNEQ (name, ".rld_map")) 9501 { 9502 /* We add a room for __rld_map. It will be filled in by the 9503 rtld to contain a pointer to the _r_debug structure. */ 9504 s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd); 9505 } 9506 else if (SGI_COMPAT (output_bfd) 9507 && CONST_STRNEQ (name, ".compact_rel")) 9508 s->size += mips_elf_hash_table (info)->compact_rel_size; 9509 else if (s == htab->splt) 9510 { 9511 /* If the last PLT entry has a branch delay slot, allocate 9512 room for an extra nop to fill the delay slot. This is 9513 for CPUs without load interlocking. */ 9514 if (! LOAD_INTERLOCKS_P (output_bfd) 9515 && ! htab->is_vxworks && s->size > 0) 9516 s->size += 4; 9517 } 9518 else if (! CONST_STRNEQ (name, ".init") 9519 && s != htab->sgot 9520 && s != htab->sgotplt 9521 && s != htab->sstubs 9522 && s != htab->sdynbss) 9523 { 9524 /* It's not one of our sections, so don't allocate space. */ 9525 continue; 9526 } 9527 9528 if (s->size == 0) 9529 { 9530 s->flags |= SEC_EXCLUDE; 9531 continue; 9532 } 9533 9534 if ((s->flags & SEC_HAS_CONTENTS) == 0) 9535 continue; 9536 9537 /* Allocate memory for the section contents. */ 9538 s->contents = bfd_zalloc (dynobj, s->size); 9539 if (s->contents == NULL) 9540 { 9541 bfd_set_error (bfd_error_no_memory); 9542 return FALSE; 9543 } 9544 } 9545 9546 if (elf_hash_table (info)->dynamic_sections_created) 9547 { 9548 /* Add some entries to the .dynamic section. We fill in the 9549 values later, in _bfd_mips_elf_finish_dynamic_sections, but we 9550 must add the entries now so that we get the correct size for 9551 the .dynamic section. */ 9552 9553 /* SGI object has the equivalence of DT_DEBUG in the 9554 DT_MIPS_RLD_MAP entry. This must come first because glibc 9555 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools 9556 may only look at the first one they see. */ 9557 if (!info->shared 9558 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0)) 9559 return FALSE; 9560 9561 /* The DT_DEBUG entry may be filled in by the dynamic linker and 9562 used by the debugger. */ 9563 if (info->executable 9564 && !SGI_COMPAT (output_bfd) 9565 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0)) 9566 return FALSE; 9567 9568 if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks)) 9569 info->flags |= DF_TEXTREL; 9570 9571 if ((info->flags & DF_TEXTREL) != 0) 9572 { 9573 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0)) 9574 return FALSE; 9575 9576 /* Clear the DF_TEXTREL flag. It will be set again if we 9577 write out an actual text relocation; we may not, because 9578 at this point we do not know whether e.g. any .eh_frame 9579 absolute relocations have been converted to PC-relative. */ 9580 info->flags &= ~DF_TEXTREL; 9581 } 9582 9583 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0)) 9584 return FALSE; 9585 9586 sreldyn = mips_elf_rel_dyn_section (info, FALSE); 9587 if (htab->is_vxworks) 9588 { 9589 /* VxWorks uses .rela.dyn instead of .rel.dyn. It does not 9590 use any of the DT_MIPS_* tags. */ 9591 if (sreldyn && sreldyn->size > 0) 9592 { 9593 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0)) 9594 return FALSE; 9595 9596 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0)) 9597 return FALSE; 9598 9599 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0)) 9600 return FALSE; 9601 } 9602 } 9603 else 9604 { 9605 if (sreldyn && sreldyn->size > 0) 9606 { 9607 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0)) 9608 return FALSE; 9609 9610 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0)) 9611 return FALSE; 9612 9613 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0)) 9614 return FALSE; 9615 } 9616 9617 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0)) 9618 return FALSE; 9619 9620 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0)) 9621 return FALSE; 9622 9623 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0)) 9624 return FALSE; 9625 9626 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0)) 9627 return FALSE; 9628 9629 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0)) 9630 return FALSE; 9631 9632 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0)) 9633 return FALSE; 9634 9635 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0)) 9636 return FALSE; 9637 9638 if (IRIX_COMPAT (dynobj) == ict_irix5 9639 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0)) 9640 return FALSE; 9641 9642 if (IRIX_COMPAT (dynobj) == ict_irix6 9643 && (bfd_get_section_by_name 9644 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj))) 9645 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0)) 9646 return FALSE; 9647 } 9648 if (htab->splt->size > 0) 9649 { 9650 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0)) 9651 return FALSE; 9652 9653 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0)) 9654 return FALSE; 9655 9656 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0)) 9657 return FALSE; 9658 9659 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0)) 9660 return FALSE; 9661 } 9662 if (htab->is_vxworks 9663 && !elf_vxworks_add_dynamic_entries (output_bfd, info)) 9664 return FALSE; 9665 } 9666 9667 return TRUE; 9668 } 9669 9670 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD. 9671 Adjust its R_ADDEND field so that it is correct for the output file. 9672 LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols 9673 and sections respectively; both use symbol indexes. */ 9674 9675 static void 9676 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info, 9677 bfd *input_bfd, Elf_Internal_Sym *local_syms, 9678 asection **local_sections, Elf_Internal_Rela *rel) 9679 { 9680 unsigned int r_type, r_symndx; 9681 Elf_Internal_Sym *sym; 9682 asection *sec; 9683 9684 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections)) 9685 { 9686 r_type = ELF_R_TYPE (output_bfd, rel->r_info); 9687 if (gprel16_reloc_p (r_type) 9688 || r_type == R_MIPS_GPREL32 9689 || literal_reloc_p (r_type)) 9690 { 9691 rel->r_addend += _bfd_get_gp_value (input_bfd); 9692 rel->r_addend -= _bfd_get_gp_value (output_bfd); 9693 } 9694 9695 r_symndx = ELF_R_SYM (output_bfd, rel->r_info); 9696 sym = local_syms + r_symndx; 9697 9698 /* Adjust REL's addend to account for section merging. */ 9699 if (!info->relocatable) 9700 { 9701 sec = local_sections[r_symndx]; 9702 _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); 9703 } 9704 9705 /* This would normally be done by the rela_normal code in elflink.c. */ 9706 if (ELF_ST_TYPE (sym->st_info) == STT_SECTION) 9707 rel->r_addend += local_sections[r_symndx]->output_offset; 9708 } 9709 } 9710 9711 /* Handle relocations against symbols from removed linkonce sections, 9712 or sections discarded by a linker script. We use this wrapper around 9713 RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs 9714 on 64-bit ELF targets. In this case for any relocation handled, which 9715 always be the first in a triplet, the remaining two have to be processed 9716 together with the first, even if they are R_MIPS_NONE. It is the symbol 9717 index referred by the first reloc that applies to all the three and the 9718 remaining two never refer to an object symbol. And it is the final 9719 relocation (the last non-null one) that determines the output field of 9720 the whole relocation so retrieve the corresponding howto structure for 9721 the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION. 9722 9723 Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue" 9724 and therefore requires to be pasted in a loop. It also defines a block 9725 and does not protect any of its arguments, hence the extra brackets. */ 9726 9727 static void 9728 mips_reloc_against_discarded_section (bfd *output_bfd, 9729 struct bfd_link_info *info, 9730 bfd *input_bfd, asection *input_section, 9731 Elf_Internal_Rela **rel, 9732 const Elf_Internal_Rela **relend, 9733 bfd_boolean rel_reloc, 9734 reloc_howto_type *howto, 9735 bfd_byte *contents) 9736 { 9737 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); 9738 int count = bed->s->int_rels_per_ext_rel; 9739 unsigned int r_type; 9740 int i; 9741 9742 for (i = count - 1; i > 0; i--) 9743 { 9744 r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info); 9745 if (r_type != R_MIPS_NONE) 9746 { 9747 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc); 9748 break; 9749 } 9750 } 9751 do 9752 { 9753 RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, 9754 (*rel), count, (*relend), 9755 howto, i, contents); 9756 } 9757 while (0); 9758 } 9759 9760 /* Relocate a MIPS ELF section. */ 9761 9762 bfd_boolean 9763 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, 9764 bfd *input_bfd, asection *input_section, 9765 bfd_byte *contents, Elf_Internal_Rela *relocs, 9766 Elf_Internal_Sym *local_syms, 9767 asection **local_sections) 9768 { 9769 Elf_Internal_Rela *rel; 9770 const Elf_Internal_Rela *relend; 9771 bfd_vma addend = 0; 9772 bfd_boolean use_saved_addend_p = FALSE; 9773 const struct elf_backend_data *bed; 9774 9775 bed = get_elf_backend_data (output_bfd); 9776 relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel; 9777 for (rel = relocs; rel < relend; ++rel) 9778 { 9779 const char *name; 9780 bfd_vma value = 0; 9781 reloc_howto_type *howto; 9782 bfd_boolean cross_mode_jump_p = FALSE; 9783 /* TRUE if the relocation is a RELA relocation, rather than a 9784 REL relocation. */ 9785 bfd_boolean rela_relocation_p = TRUE; 9786 unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info); 9787 const char *msg; 9788 unsigned long r_symndx; 9789 asection *sec; 9790 Elf_Internal_Shdr *symtab_hdr; 9791 struct elf_link_hash_entry *h; 9792 bfd_boolean rel_reloc; 9793 9794 rel_reloc = (NEWABI_P (input_bfd) 9795 && mips_elf_rel_relocation_p (input_bfd, input_section, 9796 relocs, rel)); 9797 /* Find the relocation howto for this relocation. */ 9798 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc); 9799 9800 r_symndx = ELF_R_SYM (input_bfd, rel->r_info); 9801 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; 9802 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections)) 9803 { 9804 sec = local_sections[r_symndx]; 9805 h = NULL; 9806 } 9807 else 9808 { 9809 unsigned long extsymoff; 9810 9811 extsymoff = 0; 9812 if (!elf_bad_symtab (input_bfd)) 9813 extsymoff = symtab_hdr->sh_info; 9814 h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff]; 9815 while (h->root.type == bfd_link_hash_indirect 9816 || h->root.type == bfd_link_hash_warning) 9817 h = (struct elf_link_hash_entry *) h->root.u.i.link; 9818 9819 sec = NULL; 9820 if (h->root.type == bfd_link_hash_defined 9821 || h->root.type == bfd_link_hash_defweak) 9822 sec = h->root.u.def.section; 9823 } 9824 9825 if (sec != NULL && discarded_section (sec)) 9826 { 9827 mips_reloc_against_discarded_section (output_bfd, info, input_bfd, 9828 input_section, &rel, &relend, 9829 rel_reloc, howto, contents); 9830 continue; 9831 } 9832 9833 if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd)) 9834 { 9835 /* Some 32-bit code uses R_MIPS_64. In particular, people use 9836 64-bit code, but make sure all their addresses are in the 9837 lowermost or uppermost 32-bit section of the 64-bit address 9838 space. Thus, when they use an R_MIPS_64 they mean what is 9839 usually meant by R_MIPS_32, with the exception that the 9840 stored value is sign-extended to 64 bits. */ 9841 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE); 9842 9843 /* On big-endian systems, we need to lie about the position 9844 of the reloc. */ 9845 if (bfd_big_endian (input_bfd)) 9846 rel->r_offset += 4; 9847 } 9848 9849 if (!use_saved_addend_p) 9850 { 9851 /* If these relocations were originally of the REL variety, 9852 we must pull the addend out of the field that will be 9853 relocated. Otherwise, we simply use the contents of the 9854 RELA relocation. */ 9855 if (mips_elf_rel_relocation_p (input_bfd, input_section, 9856 relocs, rel)) 9857 { 9858 rela_relocation_p = FALSE; 9859 addend = mips_elf_read_rel_addend (input_bfd, rel, 9860 howto, contents); 9861 if (hi16_reloc_p (r_type) 9862 || (got16_reloc_p (r_type) 9863 && mips_elf_local_relocation_p (input_bfd, rel, 9864 local_sections))) 9865 { 9866 if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend, 9867 contents, &addend)) 9868 { 9869 if (h) 9870 name = h->root.root.string; 9871 else 9872 name = bfd_elf_sym_name (input_bfd, symtab_hdr, 9873 local_syms + r_symndx, 9874 sec); 9875 (*_bfd_error_handler) 9876 (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"), 9877 input_bfd, input_section, name, howto->name, 9878 rel->r_offset); 9879 } 9880 } 9881 else 9882 addend <<= howto->rightshift; 9883 } 9884 else 9885 addend = rel->r_addend; 9886 mips_elf_adjust_addend (output_bfd, info, input_bfd, 9887 local_syms, local_sections, rel); 9888 } 9889 9890 if (info->relocatable) 9891 { 9892 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd) 9893 && bfd_big_endian (input_bfd)) 9894 rel->r_offset -= 4; 9895 9896 if (!rela_relocation_p && rel->r_addend) 9897 { 9898 addend += rel->r_addend; 9899 if (hi16_reloc_p (r_type) || got16_reloc_p (r_type)) 9900 addend = mips_elf_high (addend); 9901 else if (r_type == R_MIPS_HIGHER) 9902 addend = mips_elf_higher (addend); 9903 else if (r_type == R_MIPS_HIGHEST) 9904 addend = mips_elf_highest (addend); 9905 else 9906 addend >>= howto->rightshift; 9907 9908 /* We use the source mask, rather than the destination 9909 mask because the place to which we are writing will be 9910 source of the addend in the final link. */ 9911 addend &= howto->src_mask; 9912 9913 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)) 9914 /* See the comment above about using R_MIPS_64 in the 32-bit 9915 ABI. Here, we need to update the addend. It would be 9916 possible to get away with just using the R_MIPS_32 reloc 9917 but for endianness. */ 9918 { 9919 bfd_vma sign_bits; 9920 bfd_vma low_bits; 9921 bfd_vma high_bits; 9922 9923 if (addend & ((bfd_vma) 1 << 31)) 9924 #ifdef BFD64 9925 sign_bits = ((bfd_vma) 1 << 32) - 1; 9926 #else 9927 sign_bits = -1; 9928 #endif 9929 else 9930 sign_bits = 0; 9931 9932 /* If we don't know that we have a 64-bit type, 9933 do two separate stores. */ 9934 if (bfd_big_endian (input_bfd)) 9935 { 9936 /* Store the sign-bits (which are most significant) 9937 first. */ 9938 low_bits = sign_bits; 9939 high_bits = addend; 9940 } 9941 else 9942 { 9943 low_bits = addend; 9944 high_bits = sign_bits; 9945 } 9946 bfd_put_32 (input_bfd, low_bits, 9947 contents + rel->r_offset); 9948 bfd_put_32 (input_bfd, high_bits, 9949 contents + rel->r_offset + 4); 9950 continue; 9951 } 9952 9953 if (! mips_elf_perform_relocation (info, howto, rel, addend, 9954 input_bfd, input_section, 9955 contents, FALSE)) 9956 return FALSE; 9957 } 9958 9959 /* Go on to the next relocation. */ 9960 continue; 9961 } 9962 9963 /* In the N32 and 64-bit ABIs there may be multiple consecutive 9964 relocations for the same offset. In that case we are 9965 supposed to treat the output of each relocation as the addend 9966 for the next. */ 9967 if (rel + 1 < relend 9968 && rel->r_offset == rel[1].r_offset 9969 && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE) 9970 use_saved_addend_p = TRUE; 9971 else 9972 use_saved_addend_p = FALSE; 9973 9974 /* Figure out what value we are supposed to relocate. */ 9975 switch (mips_elf_calculate_relocation (output_bfd, input_bfd, 9976 input_section, info, rel, 9977 addend, howto, local_syms, 9978 local_sections, &value, 9979 &name, &cross_mode_jump_p, 9980 use_saved_addend_p)) 9981 { 9982 case bfd_reloc_continue: 9983 /* There's nothing to do. */ 9984 continue; 9985 9986 case bfd_reloc_undefined: 9987 /* mips_elf_calculate_relocation already called the 9988 undefined_symbol callback. There's no real point in 9989 trying to perform the relocation at this point, so we 9990 just skip ahead to the next relocation. */ 9991 continue; 9992 9993 case bfd_reloc_notsupported: 9994 msg = _("internal error: unsupported relocation error"); 9995 info->callbacks->warning 9996 (info, msg, name, input_bfd, input_section, rel->r_offset); 9997 return FALSE; 9998 9999 case bfd_reloc_overflow: 10000 if (use_saved_addend_p) 10001 /* Ignore overflow until we reach the last relocation for 10002 a given location. */ 10003 ; 10004 else 10005 { 10006 struct mips_elf_link_hash_table *htab; 10007 10008 htab = mips_elf_hash_table (info); 10009 BFD_ASSERT (htab != NULL); 10010 BFD_ASSERT (name != NULL); 10011 if (!htab->small_data_overflow_reported 10012 && (gprel16_reloc_p (howto->type) 10013 || literal_reloc_p (howto->type))) 10014 { 10015 msg = _("small-data section exceeds 64KB;" 10016 " lower small-data size limit (see option -G)"); 10017 10018 htab->small_data_overflow_reported = TRUE; 10019 (*info->callbacks->einfo) ("%P: %s\n", msg); 10020 } 10021 if (! ((*info->callbacks->reloc_overflow) 10022 (info, NULL, name, howto->name, (bfd_vma) 0, 10023 input_bfd, input_section, rel->r_offset))) 10024 return FALSE; 10025 } 10026 break; 10027 10028 case bfd_reloc_ok: 10029 break; 10030 10031 case bfd_reloc_outofrange: 10032 if (jal_reloc_p (howto->type)) 10033 { 10034 msg = _("JALX to a non-word-aligned address"); 10035 info->callbacks->warning 10036 (info, msg, name, input_bfd, input_section, rel->r_offset); 10037 return FALSE; 10038 } 10039 /* Fall through. */ 10040 10041 default: 10042 abort (); 10043 break; 10044 } 10045 10046 /* If we've got another relocation for the address, keep going 10047 until we reach the last one. */ 10048 if (use_saved_addend_p) 10049 { 10050 addend = value; 10051 continue; 10052 } 10053 10054 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)) 10055 /* See the comment above about using R_MIPS_64 in the 32-bit 10056 ABI. Until now, we've been using the HOWTO for R_MIPS_32; 10057 that calculated the right value. Now, however, we 10058 sign-extend the 32-bit result to 64-bits, and store it as a 10059 64-bit value. We are especially generous here in that we 10060 go to extreme lengths to support this usage on systems with 10061 only a 32-bit VMA. */ 10062 { 10063 bfd_vma sign_bits; 10064 bfd_vma low_bits; 10065 bfd_vma high_bits; 10066 10067 if (value & ((bfd_vma) 1 << 31)) 10068 #ifdef BFD64 10069 sign_bits = ((bfd_vma) 1 << 32) - 1; 10070 #else 10071 sign_bits = -1; 10072 #endif 10073 else 10074 sign_bits = 0; 10075 10076 /* If we don't know that we have a 64-bit type, 10077 do two separate stores. */ 10078 if (bfd_big_endian (input_bfd)) 10079 { 10080 /* Undo what we did above. */ 10081 rel->r_offset -= 4; 10082 /* Store the sign-bits (which are most significant) 10083 first. */ 10084 low_bits = sign_bits; 10085 high_bits = value; 10086 } 10087 else 10088 { 10089 low_bits = value; 10090 high_bits = sign_bits; 10091 } 10092 bfd_put_32 (input_bfd, low_bits, 10093 contents + rel->r_offset); 10094 bfd_put_32 (input_bfd, high_bits, 10095 contents + rel->r_offset + 4); 10096 continue; 10097 } 10098 10099 /* Actually perform the relocation. */ 10100 if (! mips_elf_perform_relocation (info, howto, rel, value, 10101 input_bfd, input_section, 10102 contents, cross_mode_jump_p)) 10103 return FALSE; 10104 } 10105 10106 return TRUE; 10107 } 10108 10109 /* A function that iterates over each entry in la25_stubs and fills 10110 in the code for each one. DATA points to a mips_htab_traverse_info. */ 10111 10112 static int 10113 mips_elf_create_la25_stub (void **slot, void *data) 10114 { 10115 struct mips_htab_traverse_info *hti; 10116 struct mips_elf_link_hash_table *htab; 10117 struct mips_elf_la25_stub *stub; 10118 asection *s; 10119 bfd_byte *loc; 10120 bfd_vma offset, target, target_high, target_low; 10121 10122 stub = (struct mips_elf_la25_stub *) *slot; 10123 hti = (struct mips_htab_traverse_info *) data; 10124 htab = mips_elf_hash_table (hti->info); 10125 BFD_ASSERT (htab != NULL); 10126 10127 /* Create the section contents, if we haven't already. */ 10128 s = stub->stub_section; 10129 loc = s->contents; 10130 if (loc == NULL) 10131 { 10132 loc = bfd_malloc (s->size); 10133 if (loc == NULL) 10134 { 10135 hti->error = TRUE; 10136 return FALSE; 10137 } 10138 s->contents = loc; 10139 } 10140 10141 /* Work out where in the section this stub should go. */ 10142 offset = stub->offset; 10143 10144 /* Work out the target address. */ 10145 target = mips_elf_get_la25_target (stub, &s); 10146 target += s->output_section->vma + s->output_offset; 10147 10148 target_high = ((target + 0x8000) >> 16) & 0xffff; 10149 target_low = (target & 0xffff); 10150 10151 if (stub->stub_section != htab->strampoline) 10152 { 10153 /* This is a simple LUI/ADDIU stub. Zero out the beginning 10154 of the section and write the two instructions at the end. */ 10155 memset (loc, 0, offset); 10156 loc += offset; 10157 if (ELF_ST_IS_MICROMIPS (stub->h->root.other)) 10158 { 10159 bfd_put_micromips_32 (hti->output_bfd, 10160 LA25_LUI_MICROMIPS (target_high), 10161 loc); 10162 bfd_put_micromips_32 (hti->output_bfd, 10163 LA25_ADDIU_MICROMIPS (target_low), 10164 loc + 4); 10165 } 10166 else 10167 { 10168 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc); 10169 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4); 10170 } 10171 } 10172 else 10173 { 10174 /* This is trampoline. */ 10175 loc += offset; 10176 if (ELF_ST_IS_MICROMIPS (stub->h->root.other)) 10177 { 10178 bfd_put_micromips_32 (hti->output_bfd, 10179 LA25_LUI_MICROMIPS (target_high), loc); 10180 bfd_put_micromips_32 (hti->output_bfd, 10181 LA25_J_MICROMIPS (target), loc + 4); 10182 bfd_put_micromips_32 (hti->output_bfd, 10183 LA25_ADDIU_MICROMIPS (target_low), loc + 8); 10184 bfd_put_32 (hti->output_bfd, 0, loc + 12); 10185 } 10186 else 10187 { 10188 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc); 10189 bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4); 10190 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8); 10191 bfd_put_32 (hti->output_bfd, 0, loc + 12); 10192 } 10193 } 10194 return TRUE; 10195 } 10196 10197 /* If NAME is one of the special IRIX6 symbols defined by the linker, 10198 adjust it appropriately now. */ 10199 10200 static void 10201 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED, 10202 const char *name, Elf_Internal_Sym *sym) 10203 { 10204 /* The linker script takes care of providing names and values for 10205 these, but we must place them into the right sections. */ 10206 static const char* const text_section_symbols[] = { 10207 "_ftext", 10208 "_etext", 10209 "__dso_displacement", 10210 "__elf_header", 10211 "__program_header_table", 10212 NULL 10213 }; 10214 10215 static const char* const data_section_symbols[] = { 10216 "_fdata", 10217 "_edata", 10218 "_end", 10219 "_fbss", 10220 NULL 10221 }; 10222 10223 const char* const *p; 10224 int i; 10225 10226 for (i = 0; i < 2; ++i) 10227 for (p = (i == 0) ? text_section_symbols : data_section_symbols; 10228 *p; 10229 ++p) 10230 if (strcmp (*p, name) == 0) 10231 { 10232 /* All of these symbols are given type STT_SECTION by the 10233 IRIX6 linker. */ 10234 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 10235 sym->st_other = STO_PROTECTED; 10236 10237 /* The IRIX linker puts these symbols in special sections. */ 10238 if (i == 0) 10239 sym->st_shndx = SHN_MIPS_TEXT; 10240 else 10241 sym->st_shndx = SHN_MIPS_DATA; 10242 10243 break; 10244 } 10245 } 10246 10247 /* Finish up dynamic symbol handling. We set the contents of various 10248 dynamic sections here. */ 10249 10250 bfd_boolean 10251 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, 10252 struct bfd_link_info *info, 10253 struct elf_link_hash_entry *h, 10254 Elf_Internal_Sym *sym) 10255 { 10256 bfd *dynobj; 10257 asection *sgot; 10258 struct mips_got_info *g, *gg; 10259 const char *name; 10260 int idx; 10261 struct mips_elf_link_hash_table *htab; 10262 struct mips_elf_link_hash_entry *hmips; 10263 10264 htab = mips_elf_hash_table (info); 10265 BFD_ASSERT (htab != NULL); 10266 dynobj = elf_hash_table (info)->dynobj; 10267 hmips = (struct mips_elf_link_hash_entry *) h; 10268 10269 BFD_ASSERT (!htab->is_vxworks); 10270 10271 if (h->plt.plist != NULL 10272 && (h->plt.plist->mips_offset != MINUS_ONE 10273 || h->plt.plist->comp_offset != MINUS_ONE)) 10274 { 10275 /* We've decided to create a PLT entry for this symbol. */ 10276 bfd_byte *loc; 10277 bfd_vma header_address, got_address; 10278 bfd_vma got_address_high, got_address_low, load; 10279 bfd_vma got_index; 10280 bfd_vma isa_bit; 10281 10282 got_index = h->plt.plist->gotplt_index; 10283 10284 BFD_ASSERT (htab->use_plts_and_copy_relocs); 10285 BFD_ASSERT (h->dynindx != -1); 10286 BFD_ASSERT (htab->splt != NULL); 10287 BFD_ASSERT (got_index != MINUS_ONE); 10288 BFD_ASSERT (!h->def_regular); 10289 10290 /* Calculate the address of the PLT header. */ 10291 isa_bit = htab->plt_header_is_comp; 10292 header_address = (htab->splt->output_section->vma 10293 + htab->splt->output_offset + isa_bit); 10294 10295 /* Calculate the address of the .got.plt entry. */ 10296 got_address = (htab->sgotplt->output_section->vma 10297 + htab->sgotplt->output_offset 10298 + got_index * MIPS_ELF_GOT_SIZE (dynobj)); 10299 10300 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff; 10301 got_address_low = got_address & 0xffff; 10302 10303 /* Initially point the .got.plt entry at the PLT header. */ 10304 loc = (htab->sgotplt->contents + got_index * MIPS_ELF_GOT_SIZE (dynobj)); 10305 if (ABI_64_P (output_bfd)) 10306 bfd_put_64 (output_bfd, header_address, loc); 10307 else 10308 bfd_put_32 (output_bfd, header_address, loc); 10309 10310 /* Now handle the PLT itself. First the standard entry (the order 10311 does not matter, we just have to pick one). */ 10312 if (h->plt.plist->mips_offset != MINUS_ONE) 10313 { 10314 const bfd_vma *plt_entry; 10315 bfd_vma plt_offset; 10316 10317 plt_offset = htab->plt_header_size + h->plt.plist->mips_offset; 10318 10319 BFD_ASSERT (plt_offset <= htab->splt->size); 10320 10321 /* Find out where the .plt entry should go. */ 10322 loc = htab->splt->contents + plt_offset; 10323 10324 /* Pick the load opcode. */ 10325 load = MIPS_ELF_LOAD_WORD (output_bfd); 10326 10327 /* Fill in the PLT entry itself. */ 10328 plt_entry = mips_exec_plt_entry; 10329 bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc); 10330 bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, 10331 loc + 4); 10332 10333 if (! LOAD_INTERLOCKS_P (output_bfd)) 10334 { 10335 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8); 10336 bfd_put_32 (output_bfd, plt_entry[3], loc + 12); 10337 } 10338 else 10339 { 10340 bfd_put_32 (output_bfd, plt_entry[3], loc + 8); 10341 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, 10342 loc + 12); 10343 } 10344 } 10345 10346 /* Now the compressed entry. They come after any standard ones. */ 10347 if (h->plt.plist->comp_offset != MINUS_ONE) 10348 { 10349 bfd_vma plt_offset; 10350 10351 plt_offset = (htab->plt_header_size + htab->plt_mips_offset 10352 + h->plt.plist->comp_offset); 10353 10354 BFD_ASSERT (plt_offset <= htab->splt->size); 10355 10356 /* Find out where the .plt entry should go. */ 10357 loc = htab->splt->contents + plt_offset; 10358 10359 /* Fill in the PLT entry itself. */ 10360 if (!MICROMIPS_P (output_bfd)) 10361 { 10362 const bfd_vma *plt_entry = mips16_o32_exec_plt_entry; 10363 10364 bfd_put_16 (output_bfd, plt_entry[0], loc); 10365 bfd_put_16 (output_bfd, plt_entry[1], loc + 2); 10366 bfd_put_16 (output_bfd, plt_entry[2], loc + 4); 10367 bfd_put_16 (output_bfd, plt_entry[3], loc + 6); 10368 bfd_put_16 (output_bfd, plt_entry[4], loc + 8); 10369 bfd_put_16 (output_bfd, plt_entry[5], loc + 10); 10370 bfd_put_32 (output_bfd, got_address, loc + 12); 10371 } 10372 else if (htab->insn32) 10373 { 10374 const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry; 10375 10376 bfd_put_16 (output_bfd, plt_entry[0], loc); 10377 bfd_put_16 (output_bfd, got_address_high, loc + 2); 10378 bfd_put_16 (output_bfd, plt_entry[2], loc + 4); 10379 bfd_put_16 (output_bfd, got_address_low, loc + 6); 10380 bfd_put_16 (output_bfd, plt_entry[4], loc + 8); 10381 bfd_put_16 (output_bfd, plt_entry[5], loc + 10); 10382 bfd_put_16 (output_bfd, plt_entry[6], loc + 12); 10383 bfd_put_16 (output_bfd, got_address_low, loc + 14); 10384 } 10385 else 10386 { 10387 const bfd_vma *plt_entry = micromips_o32_exec_plt_entry; 10388 bfd_signed_vma gotpc_offset; 10389 bfd_vma loc_address; 10390 10391 BFD_ASSERT (got_address % 4 == 0); 10392 10393 loc_address = (htab->splt->output_section->vma 10394 + htab->splt->output_offset + plt_offset); 10395 gotpc_offset = got_address - ((loc_address | 3) ^ 3); 10396 10397 /* ADDIUPC has a span of +/-16MB, check we're in range. */ 10398 if (gotpc_offset + 0x1000000 >= 0x2000000) 10399 { 10400 (*_bfd_error_handler) 10401 (_("%B: `%A' offset of %ld from `%A' " 10402 "beyond the range of ADDIUPC"), 10403 output_bfd, 10404 htab->sgotplt->output_section, 10405 htab->splt->output_section, 10406 (long) gotpc_offset); 10407 bfd_set_error (bfd_error_no_error); 10408 return FALSE; 10409 } 10410 bfd_put_16 (output_bfd, 10411 plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc); 10412 bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2); 10413 bfd_put_16 (output_bfd, plt_entry[2], loc + 4); 10414 bfd_put_16 (output_bfd, plt_entry[3], loc + 6); 10415 bfd_put_16 (output_bfd, plt_entry[4], loc + 8); 10416 bfd_put_16 (output_bfd, plt_entry[5], loc + 10); 10417 } 10418 } 10419 10420 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */ 10421 mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt, 10422 got_index - 2, h->dynindx, 10423 R_MIPS_JUMP_SLOT, got_address); 10424 10425 /* We distinguish between PLT entries and lazy-binding stubs by 10426 giving the former an st_other value of STO_MIPS_PLT. Set the 10427 flag and leave the value if there are any relocations in the 10428 binary where pointer equality matters. */ 10429 sym->st_shndx = SHN_UNDEF; 10430 if (h->pointer_equality_needed) 10431 sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other); 10432 else 10433 { 10434 sym->st_value = 0; 10435 sym->st_other = 0; 10436 } 10437 } 10438 10439 if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE) 10440 { 10441 /* We've decided to create a lazy-binding stub. */ 10442 bfd_boolean micromips_p = MICROMIPS_P (output_bfd); 10443 unsigned int other = micromips_p ? STO_MICROMIPS : 0; 10444 bfd_vma stub_size = htab->function_stub_size; 10445 bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE]; 10446 bfd_vma isa_bit = micromips_p; 10447 bfd_vma stub_big_size; 10448 10449 if (!micromips_p) 10450 stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE; 10451 else if (htab->insn32) 10452 stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE; 10453 else 10454 stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE; 10455 10456 /* This symbol has a stub. Set it up. */ 10457 10458 BFD_ASSERT (h->dynindx != -1); 10459 10460 BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff); 10461 10462 /* Values up to 2^31 - 1 are allowed. Larger values would cause 10463 sign extension at runtime in the stub, resulting in a negative 10464 index value. */ 10465 if (h->dynindx & ~0x7fffffff) 10466 return FALSE; 10467 10468 /* Fill the stub. */ 10469 if (micromips_p) 10470 { 10471 idx = 0; 10472 bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd), 10473 stub + idx); 10474 idx += 4; 10475 if (htab->insn32) 10476 { 10477 bfd_put_micromips_32 (output_bfd, 10478 STUB_MOVE32_MICROMIPS (output_bfd), 10479 stub + idx); 10480 idx += 4; 10481 } 10482 else 10483 { 10484 bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx); 10485 idx += 2; 10486 } 10487 if (stub_size == stub_big_size) 10488 { 10489 long dynindx_hi = (h->dynindx >> 16) & 0x7fff; 10490 10491 bfd_put_micromips_32 (output_bfd, 10492 STUB_LUI_MICROMIPS (dynindx_hi), 10493 stub + idx); 10494 idx += 4; 10495 } 10496 if (htab->insn32) 10497 { 10498 bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS, 10499 stub + idx); 10500 idx += 4; 10501 } 10502 else 10503 { 10504 bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx); 10505 idx += 2; 10506 } 10507 10508 /* If a large stub is not required and sign extension is not a 10509 problem, then use legacy code in the stub. */ 10510 if (stub_size == stub_big_size) 10511 bfd_put_micromips_32 (output_bfd, 10512 STUB_ORI_MICROMIPS (h->dynindx & 0xffff), 10513 stub + idx); 10514 else if (h->dynindx & ~0x7fff) 10515 bfd_put_micromips_32 (output_bfd, 10516 STUB_LI16U_MICROMIPS (h->dynindx & 0xffff), 10517 stub + idx); 10518 else 10519 bfd_put_micromips_32 (output_bfd, 10520 STUB_LI16S_MICROMIPS (output_bfd, 10521 h->dynindx), 10522 stub + idx); 10523 } 10524 else 10525 { 10526 idx = 0; 10527 bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx); 10528 idx += 4; 10529 bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx); 10530 idx += 4; 10531 if (stub_size == stub_big_size) 10532 { 10533 bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff), 10534 stub + idx); 10535 idx += 4; 10536 } 10537 bfd_put_32 (output_bfd, STUB_JALR, stub + idx); 10538 idx += 4; 10539 10540 /* If a large stub is not required and sign extension is not a 10541 problem, then use legacy code in the stub. */ 10542 if (stub_size == stub_big_size) 10543 bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), 10544 stub + idx); 10545 else if (h->dynindx & ~0x7fff) 10546 bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), 10547 stub + idx); 10548 else 10549 bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx), 10550 stub + idx); 10551 } 10552 10553 BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size); 10554 memcpy (htab->sstubs->contents + h->plt.plist->stub_offset, 10555 stub, stub_size); 10556 10557 /* Mark the symbol as undefined. stub_offset != -1 occurs 10558 only for the referenced symbol. */ 10559 sym->st_shndx = SHN_UNDEF; 10560 10561 /* The run-time linker uses the st_value field of the symbol 10562 to reset the global offset table entry for this external 10563 to its stub address when unlinking a shared object. */ 10564 sym->st_value = (htab->sstubs->output_section->vma 10565 + htab->sstubs->output_offset 10566 + h->plt.plist->stub_offset 10567 + isa_bit); 10568 sym->st_other = other; 10569 } 10570 10571 /* If we have a MIPS16 function with a stub, the dynamic symbol must 10572 refer to the stub, since only the stub uses the standard calling 10573 conventions. */ 10574 if (h->dynindx != -1 && hmips->fn_stub != NULL) 10575 { 10576 BFD_ASSERT (hmips->need_fn_stub); 10577 sym->st_value = (hmips->fn_stub->output_section->vma 10578 + hmips->fn_stub->output_offset); 10579 sym->st_size = hmips->fn_stub->size; 10580 sym->st_other = ELF_ST_VISIBILITY (sym->st_other); 10581 } 10582 10583 BFD_ASSERT (h->dynindx != -1 10584 || h->forced_local); 10585 10586 sgot = htab->sgot; 10587 g = htab->got_info; 10588 BFD_ASSERT (g != NULL); 10589 10590 /* Run through the global symbol table, creating GOT entries for all 10591 the symbols that need them. */ 10592 if (hmips->global_got_area != GGA_NONE) 10593 { 10594 bfd_vma offset; 10595 bfd_vma value; 10596 10597 value = sym->st_value; 10598 offset = mips_elf_primary_global_got_index (output_bfd, info, h); 10599 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset); 10600 } 10601 10602 if (hmips->global_got_area != GGA_NONE && g->next) 10603 { 10604 struct mips_got_entry e, *p; 10605 bfd_vma entry; 10606 bfd_vma offset; 10607 10608 gg = g; 10609 10610 e.abfd = output_bfd; 10611 e.symndx = -1; 10612 e.d.h = hmips; 10613 e.tls_type = GOT_TLS_NONE; 10614 10615 for (g = g->next; g->next != gg; g = g->next) 10616 { 10617 if (g->got_entries 10618 && (p = (struct mips_got_entry *) htab_find (g->got_entries, 10619 &e))) 10620 { 10621 offset = p->gotidx; 10622 BFD_ASSERT (offset > 0 && offset < htab->sgot->size); 10623 if (info->shared 10624 || (elf_hash_table (info)->dynamic_sections_created 10625 && p->d.h != NULL 10626 && p->d.h->root.def_dynamic 10627 && !p->d.h->root.def_regular)) 10628 { 10629 /* Create an R_MIPS_REL32 relocation for this entry. Due to 10630 the various compatibility problems, it's easier to mock 10631 up an R_MIPS_32 or R_MIPS_64 relocation and leave 10632 mips_elf_create_dynamic_relocation to calculate the 10633 appropriate addend. */ 10634 Elf_Internal_Rela rel[3]; 10635 10636 memset (rel, 0, sizeof (rel)); 10637 if (ABI_64_P (output_bfd)) 10638 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64); 10639 else 10640 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32); 10641 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset; 10642 10643 entry = 0; 10644 if (! (mips_elf_create_dynamic_relocation 10645 (output_bfd, info, rel, 10646 e.d.h, NULL, sym->st_value, &entry, sgot))) 10647 return FALSE; 10648 } 10649 else 10650 entry = sym->st_value; 10651 MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset); 10652 } 10653 } 10654 } 10655 10656 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */ 10657 name = h->root.root.string; 10658 if (h == elf_hash_table (info)->hdynamic 10659 || h == elf_hash_table (info)->hgot) 10660 sym->st_shndx = SHN_ABS; 10661 else if (strcmp (name, "_DYNAMIC_LINK") == 0 10662 || strcmp (name, "_DYNAMIC_LINKING") == 0) 10663 { 10664 sym->st_shndx = SHN_ABS; 10665 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 10666 sym->st_value = 1; 10667 } 10668 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd)) 10669 { 10670 sym->st_shndx = SHN_ABS; 10671 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 10672 sym->st_value = elf_gp (output_bfd); 10673 } 10674 else if (SGI_COMPAT (output_bfd)) 10675 { 10676 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0 10677 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0) 10678 { 10679 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 10680 sym->st_other = STO_PROTECTED; 10681 sym->st_value = 0; 10682 sym->st_shndx = SHN_MIPS_DATA; 10683 } 10684 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0) 10685 { 10686 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 10687 sym->st_other = STO_PROTECTED; 10688 sym->st_value = mips_elf_hash_table (info)->procedure_count; 10689 sym->st_shndx = SHN_ABS; 10690 } 10691 else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS) 10692 { 10693 if (h->type == STT_FUNC) 10694 sym->st_shndx = SHN_MIPS_TEXT; 10695 else if (h->type == STT_OBJECT) 10696 sym->st_shndx = SHN_MIPS_DATA; 10697 } 10698 } 10699 10700 /* Emit a copy reloc, if needed. */ 10701 if (h->needs_copy) 10702 { 10703 asection *s; 10704 bfd_vma symval; 10705 10706 BFD_ASSERT (h->dynindx != -1); 10707 BFD_ASSERT (htab->use_plts_and_copy_relocs); 10708 10709 s = mips_elf_rel_dyn_section (info, FALSE); 10710 symval = (h->root.u.def.section->output_section->vma 10711 + h->root.u.def.section->output_offset 10712 + h->root.u.def.value); 10713 mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++, 10714 h->dynindx, R_MIPS_COPY, symval); 10715 } 10716 10717 /* Handle the IRIX6-specific symbols. */ 10718 if (IRIX_COMPAT (output_bfd) == ict_irix6) 10719 mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym); 10720 10721 /* Keep dynamic compressed symbols odd. This allows the dynamic linker 10722 to treat compressed symbols like any other. */ 10723 if (ELF_ST_IS_MIPS16 (sym->st_other)) 10724 { 10725 BFD_ASSERT (sym->st_value & 1); 10726 sym->st_other -= STO_MIPS16; 10727 } 10728 else if (ELF_ST_IS_MICROMIPS (sym->st_other)) 10729 { 10730 BFD_ASSERT (sym->st_value & 1); 10731 sym->st_other -= STO_MICROMIPS; 10732 } 10733 10734 return TRUE; 10735 } 10736 10737 /* Likewise, for VxWorks. */ 10738 10739 bfd_boolean 10740 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd, 10741 struct bfd_link_info *info, 10742 struct elf_link_hash_entry *h, 10743 Elf_Internal_Sym *sym) 10744 { 10745 bfd *dynobj; 10746 asection *sgot; 10747 struct mips_got_info *g; 10748 struct mips_elf_link_hash_table *htab; 10749 struct mips_elf_link_hash_entry *hmips; 10750 10751 htab = mips_elf_hash_table (info); 10752 BFD_ASSERT (htab != NULL); 10753 dynobj = elf_hash_table (info)->dynobj; 10754 hmips = (struct mips_elf_link_hash_entry *) h; 10755 10756 if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE) 10757 { 10758 bfd_byte *loc; 10759 bfd_vma plt_address, got_address, got_offset, branch_offset; 10760 Elf_Internal_Rela rel; 10761 static const bfd_vma *plt_entry; 10762 bfd_vma gotplt_index; 10763 bfd_vma plt_offset; 10764 10765 plt_offset = htab->plt_header_size + h->plt.plist->mips_offset; 10766 gotplt_index = h->plt.plist->gotplt_index; 10767 10768 BFD_ASSERT (h->dynindx != -1); 10769 BFD_ASSERT (htab->splt != NULL); 10770 BFD_ASSERT (gotplt_index != MINUS_ONE); 10771 BFD_ASSERT (plt_offset <= htab->splt->size); 10772 10773 /* Calculate the address of the .plt entry. */ 10774 plt_address = (htab->splt->output_section->vma 10775 + htab->splt->output_offset 10776 + plt_offset); 10777 10778 /* Calculate the address of the .got.plt entry. */ 10779 got_address = (htab->sgotplt->output_section->vma 10780 + htab->sgotplt->output_offset 10781 + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)); 10782 10783 /* Calculate the offset of the .got.plt entry from 10784 _GLOBAL_OFFSET_TABLE_. */ 10785 got_offset = mips_elf_gotplt_index (info, h); 10786 10787 /* Calculate the offset for the branch at the start of the PLT 10788 entry. The branch jumps to the beginning of .plt. */ 10789 branch_offset = -(plt_offset / 4 + 1) & 0xffff; 10790 10791 /* Fill in the initial value of the .got.plt entry. */ 10792 bfd_put_32 (output_bfd, plt_address, 10793 (htab->sgotplt->contents 10794 + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd))); 10795 10796 /* Find out where the .plt entry should go. */ 10797 loc = htab->splt->contents + plt_offset; 10798 10799 if (info->shared) 10800 { 10801 plt_entry = mips_vxworks_shared_plt_entry; 10802 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc); 10803 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4); 10804 } 10805 else 10806 { 10807 bfd_vma got_address_high, got_address_low; 10808 10809 plt_entry = mips_vxworks_exec_plt_entry; 10810 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff; 10811 got_address_low = got_address & 0xffff; 10812 10813 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc); 10814 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4); 10815 bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8); 10816 bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12); 10817 bfd_put_32 (output_bfd, plt_entry[4], loc + 16); 10818 bfd_put_32 (output_bfd, plt_entry[5], loc + 20); 10819 bfd_put_32 (output_bfd, plt_entry[6], loc + 24); 10820 bfd_put_32 (output_bfd, plt_entry[7], loc + 28); 10821 10822 loc = (htab->srelplt2->contents 10823 + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela)); 10824 10825 /* Emit a relocation for the .got.plt entry. */ 10826 rel.r_offset = got_address; 10827 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32); 10828 rel.r_addend = plt_offset; 10829 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 10830 10831 /* Emit a relocation for the lui of %hi(<.got.plt slot>). */ 10832 loc += sizeof (Elf32_External_Rela); 10833 rel.r_offset = plt_address + 8; 10834 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16); 10835 rel.r_addend = got_offset; 10836 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 10837 10838 /* Emit a relocation for the addiu of %lo(<.got.plt slot>). */ 10839 loc += sizeof (Elf32_External_Rela); 10840 rel.r_offset += 4; 10841 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16); 10842 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 10843 } 10844 10845 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */ 10846 loc = (htab->srelplt->contents 10847 + gotplt_index * sizeof (Elf32_External_Rela)); 10848 rel.r_offset = got_address; 10849 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT); 10850 rel.r_addend = 0; 10851 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 10852 10853 if (!h->def_regular) 10854 sym->st_shndx = SHN_UNDEF; 10855 } 10856 10857 BFD_ASSERT (h->dynindx != -1 || h->forced_local); 10858 10859 sgot = htab->sgot; 10860 g = htab->got_info; 10861 BFD_ASSERT (g != NULL); 10862 10863 /* See if this symbol has an entry in the GOT. */ 10864 if (hmips->global_got_area != GGA_NONE) 10865 { 10866 bfd_vma offset; 10867 Elf_Internal_Rela outrel; 10868 bfd_byte *loc; 10869 asection *s; 10870 10871 /* Install the symbol value in the GOT. */ 10872 offset = mips_elf_primary_global_got_index (output_bfd, info, h); 10873 MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset); 10874 10875 /* Add a dynamic relocation for it. */ 10876 s = mips_elf_rel_dyn_section (info, FALSE); 10877 loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela)); 10878 outrel.r_offset = (sgot->output_section->vma 10879 + sgot->output_offset 10880 + offset); 10881 outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32); 10882 outrel.r_addend = 0; 10883 bfd_elf32_swap_reloca_out (dynobj, &outrel, loc); 10884 } 10885 10886 /* Emit a copy reloc, if needed. */ 10887 if (h->needs_copy) 10888 { 10889 Elf_Internal_Rela rel; 10890 10891 BFD_ASSERT (h->dynindx != -1); 10892 10893 rel.r_offset = (h->root.u.def.section->output_section->vma 10894 + h->root.u.def.section->output_offset 10895 + h->root.u.def.value); 10896 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY); 10897 rel.r_addend = 0; 10898 bfd_elf32_swap_reloca_out (output_bfd, &rel, 10899 htab->srelbss->contents 10900 + (htab->srelbss->reloc_count 10901 * sizeof (Elf32_External_Rela))); 10902 ++htab->srelbss->reloc_count; 10903 } 10904 10905 /* If this is a mips16/microMIPS symbol, force the value to be even. */ 10906 if (ELF_ST_IS_COMPRESSED (sym->st_other)) 10907 sym->st_value &= ~1; 10908 10909 return TRUE; 10910 } 10911 10912 /* Write out a plt0 entry to the beginning of .plt. */ 10913 10914 static bfd_boolean 10915 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info) 10916 { 10917 bfd_byte *loc; 10918 bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low; 10919 static const bfd_vma *plt_entry; 10920 struct mips_elf_link_hash_table *htab; 10921 10922 htab = mips_elf_hash_table (info); 10923 BFD_ASSERT (htab != NULL); 10924 10925 if (ABI_64_P (output_bfd)) 10926 plt_entry = mips_n64_exec_plt0_entry; 10927 else if (ABI_N32_P (output_bfd)) 10928 plt_entry = mips_n32_exec_plt0_entry; 10929 else if (!htab->plt_header_is_comp) 10930 plt_entry = mips_o32_exec_plt0_entry; 10931 else if (htab->insn32) 10932 plt_entry = micromips_insn32_o32_exec_plt0_entry; 10933 else 10934 plt_entry = micromips_o32_exec_plt0_entry; 10935 10936 /* Calculate the value of .got.plt. */ 10937 gotplt_value = (htab->sgotplt->output_section->vma 10938 + htab->sgotplt->output_offset); 10939 gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff; 10940 gotplt_value_low = gotplt_value & 0xffff; 10941 10942 /* The PLT sequence is not safe for N64 if .got.plt's address can 10943 not be loaded in two instructions. */ 10944 BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0 10945 || ~(gotplt_value | 0x7fffffff) == 0); 10946 10947 /* Install the PLT header. */ 10948 loc = htab->splt->contents; 10949 if (plt_entry == micromips_o32_exec_plt0_entry) 10950 { 10951 bfd_vma gotpc_offset; 10952 bfd_vma loc_address; 10953 size_t i; 10954 10955 BFD_ASSERT (gotplt_value % 4 == 0); 10956 10957 loc_address = (htab->splt->output_section->vma 10958 + htab->splt->output_offset); 10959 gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3); 10960 10961 /* ADDIUPC has a span of +/-16MB, check we're in range. */ 10962 if (gotpc_offset + 0x1000000 >= 0x2000000) 10963 { 10964 (*_bfd_error_handler) 10965 (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"), 10966 output_bfd, 10967 htab->sgotplt->output_section, 10968 htab->splt->output_section, 10969 (long) gotpc_offset); 10970 bfd_set_error (bfd_error_no_error); 10971 return FALSE; 10972 } 10973 bfd_put_16 (output_bfd, 10974 plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc); 10975 bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2); 10976 for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++) 10977 bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2)); 10978 } 10979 else if (plt_entry == micromips_insn32_o32_exec_plt0_entry) 10980 { 10981 size_t i; 10982 10983 bfd_put_16 (output_bfd, plt_entry[0], loc); 10984 bfd_put_16 (output_bfd, gotplt_value_high, loc + 2); 10985 bfd_put_16 (output_bfd, plt_entry[2], loc + 4); 10986 bfd_put_16 (output_bfd, gotplt_value_low, loc + 6); 10987 bfd_put_16 (output_bfd, plt_entry[4], loc + 8); 10988 bfd_put_16 (output_bfd, gotplt_value_low, loc + 10); 10989 for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++) 10990 bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2)); 10991 } 10992 else 10993 { 10994 bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc); 10995 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4); 10996 bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8); 10997 bfd_put_32 (output_bfd, plt_entry[3], loc + 12); 10998 bfd_put_32 (output_bfd, plt_entry[4], loc + 16); 10999 bfd_put_32 (output_bfd, plt_entry[5], loc + 20); 11000 bfd_put_32 (output_bfd, plt_entry[6], loc + 24); 11001 bfd_put_32 (output_bfd, plt_entry[7], loc + 28); 11002 } 11003 11004 return TRUE; 11005 } 11006 11007 /* Install the PLT header for a VxWorks executable and finalize the 11008 contents of .rela.plt.unloaded. */ 11009 11010 static void 11011 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info) 11012 { 11013 Elf_Internal_Rela rela; 11014 bfd_byte *loc; 11015 bfd_vma got_value, got_value_high, got_value_low, plt_address; 11016 static const bfd_vma *plt_entry; 11017 struct mips_elf_link_hash_table *htab; 11018 11019 htab = mips_elf_hash_table (info); 11020 BFD_ASSERT (htab != NULL); 11021 11022 plt_entry = mips_vxworks_exec_plt0_entry; 11023 11024 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */ 11025 got_value = (htab->root.hgot->root.u.def.section->output_section->vma 11026 + htab->root.hgot->root.u.def.section->output_offset 11027 + htab->root.hgot->root.u.def.value); 11028 11029 got_value_high = ((got_value + 0x8000) >> 16) & 0xffff; 11030 got_value_low = got_value & 0xffff; 11031 11032 /* Calculate the address of the PLT header. */ 11033 plt_address = htab->splt->output_section->vma + htab->splt->output_offset; 11034 11035 /* Install the PLT header. */ 11036 loc = htab->splt->contents; 11037 bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc); 11038 bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4); 11039 bfd_put_32 (output_bfd, plt_entry[2], loc + 8); 11040 bfd_put_32 (output_bfd, plt_entry[3], loc + 12); 11041 bfd_put_32 (output_bfd, plt_entry[4], loc + 16); 11042 bfd_put_32 (output_bfd, plt_entry[5], loc + 20); 11043 11044 /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_). */ 11045 loc = htab->srelplt2->contents; 11046 rela.r_offset = plt_address; 11047 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16); 11048 rela.r_addend = 0; 11049 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); 11050 loc += sizeof (Elf32_External_Rela); 11051 11052 /* Output the relocation for the following addiu of 11053 %lo(_GLOBAL_OFFSET_TABLE_). */ 11054 rela.r_offset += 4; 11055 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16); 11056 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); 11057 loc += sizeof (Elf32_External_Rela); 11058 11059 /* Fix up the remaining relocations. They may have the wrong 11060 symbol index for _G_O_T_ or _P_L_T_ depending on the order 11061 in which symbols were output. */ 11062 while (loc < htab->srelplt2->contents + htab->srelplt2->size) 11063 { 11064 Elf_Internal_Rela rel; 11065 11066 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel); 11067 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32); 11068 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 11069 loc += sizeof (Elf32_External_Rela); 11070 11071 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel); 11072 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16); 11073 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 11074 loc += sizeof (Elf32_External_Rela); 11075 11076 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel); 11077 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16); 11078 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 11079 loc += sizeof (Elf32_External_Rela); 11080 } 11081 } 11082 11083 /* Install the PLT header for a VxWorks shared library. */ 11084 11085 static void 11086 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info) 11087 { 11088 unsigned int i; 11089 struct mips_elf_link_hash_table *htab; 11090 11091 htab = mips_elf_hash_table (info); 11092 BFD_ASSERT (htab != NULL); 11093 11094 /* We just need to copy the entry byte-by-byte. */ 11095 for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++) 11096 bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i], 11097 htab->splt->contents + i * 4); 11098 } 11099 11100 /* Finish up the dynamic sections. */ 11101 11102 bfd_boolean 11103 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, 11104 struct bfd_link_info *info) 11105 { 11106 bfd *dynobj; 11107 asection *sdyn; 11108 asection *sgot; 11109 struct mips_got_info *gg, *g; 11110 struct mips_elf_link_hash_table *htab; 11111 11112 htab = mips_elf_hash_table (info); 11113 BFD_ASSERT (htab != NULL); 11114 11115 dynobj = elf_hash_table (info)->dynobj; 11116 11117 sdyn = bfd_get_linker_section (dynobj, ".dynamic"); 11118 11119 sgot = htab->sgot; 11120 gg = htab->got_info; 11121 11122 if (elf_hash_table (info)->dynamic_sections_created) 11123 { 11124 bfd_byte *b; 11125 int dyn_to_skip = 0, dyn_skipped = 0; 11126 11127 BFD_ASSERT (sdyn != NULL); 11128 BFD_ASSERT (gg != NULL); 11129 11130 g = mips_elf_bfd_got (output_bfd, FALSE); 11131 BFD_ASSERT (g != NULL); 11132 11133 for (b = sdyn->contents; 11134 b < sdyn->contents + sdyn->size; 11135 b += MIPS_ELF_DYN_SIZE (dynobj)) 11136 { 11137 Elf_Internal_Dyn dyn; 11138 const char *name; 11139 size_t elemsize; 11140 asection *s; 11141 bfd_boolean swap_out_p; 11142 11143 /* Read in the current dynamic entry. */ 11144 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn); 11145 11146 /* Assume that we're going to modify it and write it out. */ 11147 swap_out_p = TRUE; 11148 11149 switch (dyn.d_tag) 11150 { 11151 case DT_RELENT: 11152 dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj); 11153 break; 11154 11155 case DT_RELAENT: 11156 BFD_ASSERT (htab->is_vxworks); 11157 dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj); 11158 break; 11159 11160 case DT_STRSZ: 11161 /* Rewrite DT_STRSZ. */ 11162 dyn.d_un.d_val = 11163 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr); 11164 break; 11165 11166 case DT_PLTGOT: 11167 s = htab->sgot; 11168 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; 11169 break; 11170 11171 case DT_MIPS_PLTGOT: 11172 s = htab->sgotplt; 11173 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; 11174 break; 11175 11176 case DT_MIPS_RLD_VERSION: 11177 dyn.d_un.d_val = 1; /* XXX */ 11178 break; 11179 11180 case DT_MIPS_FLAGS: 11181 dyn.d_un.d_val = RHF_NOTPOT; /* XXX */ 11182 break; 11183 11184 case DT_MIPS_TIME_STAMP: 11185 { 11186 time_t t; 11187 time (&t); 11188 dyn.d_un.d_val = t; 11189 } 11190 break; 11191 11192 case DT_MIPS_ICHECKSUM: 11193 /* XXX FIXME: */ 11194 swap_out_p = FALSE; 11195 break; 11196 11197 case DT_MIPS_IVERSION: 11198 /* XXX FIXME: */ 11199 swap_out_p = FALSE; 11200 break; 11201 11202 case DT_MIPS_BASE_ADDRESS: 11203 s = output_bfd->sections; 11204 BFD_ASSERT (s != NULL); 11205 dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff; 11206 break; 11207 11208 case DT_MIPS_LOCAL_GOTNO: 11209 dyn.d_un.d_val = g->local_gotno; 11210 break; 11211 11212 case DT_MIPS_UNREFEXTNO: 11213 /* The index into the dynamic symbol table which is the 11214 entry of the first external symbol that is not 11215 referenced within the same object. */ 11216 dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1; 11217 break; 11218 11219 case DT_MIPS_GOTSYM: 11220 if (htab->global_gotsym) 11221 { 11222 dyn.d_un.d_val = htab->global_gotsym->dynindx; 11223 break; 11224 } 11225 /* In case if we don't have global got symbols we default 11226 to setting DT_MIPS_GOTSYM to the same value as 11227 DT_MIPS_SYMTABNO, so we just fall through. */ 11228 11229 case DT_MIPS_SYMTABNO: 11230 name = ".dynsym"; 11231 elemsize = MIPS_ELF_SYM_SIZE (output_bfd); 11232 s = bfd_get_section_by_name (output_bfd, name); 11233 BFD_ASSERT (s != NULL); 11234 11235 dyn.d_un.d_val = s->size / elemsize; 11236 break; 11237 11238 case DT_MIPS_HIPAGENO: 11239 dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno; 11240 break; 11241 11242 case DT_MIPS_RLD_MAP: 11243 { 11244 struct elf_link_hash_entry *h; 11245 h = mips_elf_hash_table (info)->rld_symbol; 11246 if (!h) 11247 { 11248 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj); 11249 swap_out_p = FALSE; 11250 break; 11251 } 11252 s = h->root.u.def.section; 11253 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset 11254 + h->root.u.def.value); 11255 } 11256 break; 11257 11258 case DT_MIPS_OPTIONS: 11259 s = (bfd_get_section_by_name 11260 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd))); 11261 dyn.d_un.d_ptr = s->vma; 11262 break; 11263 11264 case DT_RELASZ: 11265 BFD_ASSERT (htab->is_vxworks); 11266 /* The count does not include the JUMP_SLOT relocations. */ 11267 if (htab->srelplt) 11268 dyn.d_un.d_val -= htab->srelplt->size; 11269 break; 11270 11271 case DT_PLTREL: 11272 BFD_ASSERT (htab->use_plts_and_copy_relocs); 11273 if (htab->is_vxworks) 11274 dyn.d_un.d_val = DT_RELA; 11275 else 11276 dyn.d_un.d_val = DT_REL; 11277 break; 11278 11279 case DT_PLTRELSZ: 11280 BFD_ASSERT (htab->use_plts_and_copy_relocs); 11281 dyn.d_un.d_val = htab->srelplt->size; 11282 break; 11283 11284 case DT_JMPREL: 11285 BFD_ASSERT (htab->use_plts_and_copy_relocs); 11286 dyn.d_un.d_ptr = (htab->srelplt->output_section->vma 11287 + htab->srelplt->output_offset); 11288 break; 11289 11290 case DT_TEXTREL: 11291 /* If we didn't need any text relocations after all, delete 11292 the dynamic tag. */ 11293 if (!(info->flags & DF_TEXTREL)) 11294 { 11295 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj); 11296 swap_out_p = FALSE; 11297 } 11298 break; 11299 11300 case DT_FLAGS: 11301 /* If we didn't need any text relocations after all, clear 11302 DF_TEXTREL from DT_FLAGS. */ 11303 if (!(info->flags & DF_TEXTREL)) 11304 dyn.d_un.d_val &= ~DF_TEXTREL; 11305 else 11306 swap_out_p = FALSE; 11307 break; 11308 11309 default: 11310 swap_out_p = FALSE; 11311 if (htab->is_vxworks 11312 && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) 11313 swap_out_p = TRUE; 11314 break; 11315 } 11316 11317 if (swap_out_p || dyn_skipped) 11318 (*get_elf_backend_data (dynobj)->s->swap_dyn_out) 11319 (dynobj, &dyn, b - dyn_skipped); 11320 11321 if (dyn_to_skip) 11322 { 11323 dyn_skipped += dyn_to_skip; 11324 dyn_to_skip = 0; 11325 } 11326 } 11327 11328 /* Wipe out any trailing entries if we shifted down a dynamic tag. */ 11329 if (dyn_skipped > 0) 11330 memset (b - dyn_skipped, 0, dyn_skipped); 11331 } 11332 11333 if (sgot != NULL && sgot->size > 0 11334 && !bfd_is_abs_section (sgot->output_section)) 11335 { 11336 if (htab->is_vxworks) 11337 { 11338 /* The first entry of the global offset table points to the 11339 ".dynamic" section. The second is initialized by the 11340 loader and contains the shared library identifier. 11341 The third is also initialized by the loader and points 11342 to the lazy resolution stub. */ 11343 MIPS_ELF_PUT_WORD (output_bfd, 11344 sdyn->output_offset + sdyn->output_section->vma, 11345 sgot->contents); 11346 MIPS_ELF_PUT_WORD (output_bfd, 0, 11347 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd)); 11348 MIPS_ELF_PUT_WORD (output_bfd, 0, 11349 sgot->contents 11350 + 2 * MIPS_ELF_GOT_SIZE (output_bfd)); 11351 } 11352 else 11353 { 11354 /* The first entry of the global offset table will be filled at 11355 runtime. The second entry will be used by some runtime loaders. 11356 This isn't the case of IRIX rld. */ 11357 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents); 11358 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd), 11359 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd)); 11360 } 11361 11362 elf_section_data (sgot->output_section)->this_hdr.sh_entsize 11363 = MIPS_ELF_GOT_SIZE (output_bfd); 11364 } 11365 11366 /* Generate dynamic relocations for the non-primary gots. */ 11367 if (gg != NULL && gg->next) 11368 { 11369 Elf_Internal_Rela rel[3]; 11370 bfd_vma addend = 0; 11371 11372 memset (rel, 0, sizeof (rel)); 11373 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32); 11374 11375 for (g = gg->next; g->next != gg; g = g->next) 11376 { 11377 bfd_vma got_index = g->next->local_gotno + g->next->global_gotno 11378 + g->next->tls_gotno; 11379 11380 MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents 11381 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd)); 11382 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd), 11383 sgot->contents 11384 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd)); 11385 11386 if (! info->shared) 11387 continue; 11388 11389 while (got_index < g->assigned_gotno) 11390 { 11391 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset 11392 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd); 11393 if (!(mips_elf_create_dynamic_relocation 11394 (output_bfd, info, rel, NULL, 11395 bfd_abs_section_ptr, 11396 0, &addend, sgot))) 11397 return FALSE; 11398 BFD_ASSERT (addend == 0); 11399 } 11400 } 11401 } 11402 11403 /* The generation of dynamic relocations for the non-primary gots 11404 adds more dynamic relocations. We cannot count them until 11405 here. */ 11406 11407 if (elf_hash_table (info)->dynamic_sections_created) 11408 { 11409 bfd_byte *b; 11410 bfd_boolean swap_out_p; 11411 11412 BFD_ASSERT (sdyn != NULL); 11413 11414 for (b = sdyn->contents; 11415 b < sdyn->contents + sdyn->size; 11416 b += MIPS_ELF_DYN_SIZE (dynobj)) 11417 { 11418 Elf_Internal_Dyn dyn; 11419 asection *s; 11420 11421 /* Read in the current dynamic entry. */ 11422 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn); 11423 11424 /* Assume that we're going to modify it and write it out. */ 11425 swap_out_p = TRUE; 11426 11427 switch (dyn.d_tag) 11428 { 11429 case DT_RELSZ: 11430 /* Reduce DT_RELSZ to account for any relocations we 11431 decided not to make. This is for the n64 irix rld, 11432 which doesn't seem to apply any relocations if there 11433 are trailing null entries. */ 11434 s = mips_elf_rel_dyn_section (info, FALSE); 11435 dyn.d_un.d_val = (s->reloc_count 11436 * (ABI_64_P (output_bfd) 11437 ? sizeof (Elf64_Mips_External_Rel) 11438 : sizeof (Elf32_External_Rel))); 11439 /* Adjust the section size too. Tools like the prelinker 11440 can reasonably expect the values to the same. */ 11441 elf_section_data (s->output_section)->this_hdr.sh_size 11442 = dyn.d_un.d_val; 11443 break; 11444 11445 default: 11446 swap_out_p = FALSE; 11447 break; 11448 } 11449 11450 if (swap_out_p) 11451 (*get_elf_backend_data (dynobj)->s->swap_dyn_out) 11452 (dynobj, &dyn, b); 11453 } 11454 } 11455 11456 { 11457 asection *s; 11458 Elf32_compact_rel cpt; 11459 11460 if (SGI_COMPAT (output_bfd)) 11461 { 11462 /* Write .compact_rel section out. */ 11463 s = bfd_get_linker_section (dynobj, ".compact_rel"); 11464 if (s != NULL) 11465 { 11466 cpt.id1 = 1; 11467 cpt.num = s->reloc_count; 11468 cpt.id2 = 2; 11469 cpt.offset = (s->output_section->filepos 11470 + sizeof (Elf32_External_compact_rel)); 11471 cpt.reserved0 = 0; 11472 cpt.reserved1 = 0; 11473 bfd_elf32_swap_compact_rel_out (output_bfd, &cpt, 11474 ((Elf32_External_compact_rel *) 11475 s->contents)); 11476 11477 /* Clean up a dummy stub function entry in .text. */ 11478 if (htab->sstubs != NULL) 11479 { 11480 file_ptr dummy_offset; 11481 11482 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size); 11483 dummy_offset = htab->sstubs->size - htab->function_stub_size; 11484 memset (htab->sstubs->contents + dummy_offset, 0, 11485 htab->function_stub_size); 11486 } 11487 } 11488 } 11489 11490 /* The psABI says that the dynamic relocations must be sorted in 11491 increasing order of r_symndx. The VxWorks EABI doesn't require 11492 this, and because the code below handles REL rather than RELA 11493 relocations, using it for VxWorks would be outright harmful. */ 11494 if (!htab->is_vxworks) 11495 { 11496 s = mips_elf_rel_dyn_section (info, FALSE); 11497 if (s != NULL 11498 && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd)) 11499 { 11500 reldyn_sorting_bfd = output_bfd; 11501 11502 if (ABI_64_P (output_bfd)) 11503 qsort ((Elf64_External_Rel *) s->contents + 1, 11504 s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel), 11505 sort_dynamic_relocs_64); 11506 else 11507 qsort ((Elf32_External_Rel *) s->contents + 1, 11508 s->reloc_count - 1, sizeof (Elf32_External_Rel), 11509 sort_dynamic_relocs); 11510 } 11511 } 11512 } 11513 11514 if (htab->splt && htab->splt->size > 0) 11515 { 11516 if (htab->is_vxworks) 11517 { 11518 if (info->shared) 11519 mips_vxworks_finish_shared_plt (output_bfd, info); 11520 else 11521 mips_vxworks_finish_exec_plt (output_bfd, info); 11522 } 11523 else 11524 { 11525 BFD_ASSERT (!info->shared); 11526 if (!mips_finish_exec_plt (output_bfd, info)) 11527 return FALSE; 11528 } 11529 } 11530 return TRUE; 11531 } 11532 11533 11534 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags. */ 11535 11536 static void 11537 mips_set_isa_flags (bfd *abfd) 11538 { 11539 flagword val; 11540 11541 switch (bfd_get_mach (abfd)) 11542 { 11543 default: 11544 case bfd_mach_mips3000: 11545 val = E_MIPS_ARCH_1; 11546 break; 11547 11548 case bfd_mach_mips3900: 11549 val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900; 11550 break; 11551 11552 case bfd_mach_mips6000: 11553 val = E_MIPS_ARCH_2; 11554 break; 11555 11556 case bfd_mach_mips4000: 11557 case bfd_mach_mips4300: 11558 case bfd_mach_mips4400: 11559 case bfd_mach_mips4600: 11560 val = E_MIPS_ARCH_3; 11561 break; 11562 11563 case bfd_mach_mips4010: 11564 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010; 11565 break; 11566 11567 case bfd_mach_mips4100: 11568 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100; 11569 break; 11570 11571 case bfd_mach_mips4111: 11572 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111; 11573 break; 11574 11575 case bfd_mach_mips4120: 11576 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120; 11577 break; 11578 11579 case bfd_mach_mips4650: 11580 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650; 11581 break; 11582 11583 case bfd_mach_mips5400: 11584 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400; 11585 break; 11586 11587 case bfd_mach_mips5500: 11588 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500; 11589 break; 11590 11591 case bfd_mach_mips5900: 11592 val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900; 11593 break; 11594 11595 case bfd_mach_mips9000: 11596 val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000; 11597 break; 11598 11599 case bfd_mach_mips5000: 11600 case bfd_mach_mips7000: 11601 case bfd_mach_mips8000: 11602 case bfd_mach_mips10000: 11603 case bfd_mach_mips12000: 11604 case bfd_mach_mips14000: 11605 case bfd_mach_mips16000: 11606 val = E_MIPS_ARCH_4; 11607 break; 11608 11609 case bfd_mach_mips5: 11610 val = E_MIPS_ARCH_5; 11611 break; 11612 11613 case bfd_mach_mips_loongson_2e: 11614 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E; 11615 break; 11616 11617 case bfd_mach_mips_loongson_2f: 11618 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F; 11619 break; 11620 11621 case bfd_mach_mips_sb1: 11622 val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1; 11623 break; 11624 11625 case bfd_mach_mips_loongson_3a: 11626 val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A; 11627 break; 11628 11629 case bfd_mach_mips_octeon: 11630 case bfd_mach_mips_octeonp: 11631 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON; 11632 break; 11633 11634 case bfd_mach_mips_xlr: 11635 val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR; 11636 break; 11637 11638 case bfd_mach_mips_octeon2: 11639 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2; 11640 break; 11641 11642 case bfd_mach_mipsisa32: 11643 val = E_MIPS_ARCH_32; 11644 break; 11645 11646 case bfd_mach_mipsisa64: 11647 val = E_MIPS_ARCH_64; 11648 break; 11649 11650 case bfd_mach_mipsisa32r2: 11651 val = E_MIPS_ARCH_32R2; 11652 break; 11653 11654 case bfd_mach_mipsisa64r2: 11655 val = E_MIPS_ARCH_64R2; 11656 break; 11657 } 11658 elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH); 11659 elf_elfheader (abfd)->e_flags |= val; 11660 11661 } 11662 11663 11664 /* The final processing done just before writing out a MIPS ELF object 11665 file. This gets the MIPS architecture right based on the machine 11666 number. This is used by both the 32-bit and the 64-bit ABI. */ 11667 11668 void 11669 _bfd_mips_elf_final_write_processing (bfd *abfd, 11670 bfd_boolean linker ATTRIBUTE_UNUSED) 11671 { 11672 unsigned int i; 11673 Elf_Internal_Shdr **hdrpp; 11674 const char *name; 11675 asection *sec; 11676 11677 /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former 11678 is nonzero. This is for compatibility with old objects, which used 11679 a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH. */ 11680 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0) 11681 mips_set_isa_flags (abfd); 11682 11683 /* Set the sh_info field for .gptab sections and other appropriate 11684 info for each special section. */ 11685 for (i = 1, hdrpp = elf_elfsections (abfd) + 1; 11686 i < elf_numsections (abfd); 11687 i++, hdrpp++) 11688 { 11689 switch ((*hdrpp)->sh_type) 11690 { 11691 case SHT_MIPS_MSYM: 11692 case SHT_MIPS_LIBLIST: 11693 sec = bfd_get_section_by_name (abfd, ".dynstr"); 11694 if (sec != NULL) 11695 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 11696 break; 11697 11698 case SHT_MIPS_GPTAB: 11699 BFD_ASSERT ((*hdrpp)->bfd_section != NULL); 11700 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section); 11701 BFD_ASSERT (name != NULL 11702 && CONST_STRNEQ (name, ".gptab.")); 11703 sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1); 11704 BFD_ASSERT (sec != NULL); 11705 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx; 11706 break; 11707 11708 case SHT_MIPS_CONTENT: 11709 BFD_ASSERT ((*hdrpp)->bfd_section != NULL); 11710 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section); 11711 BFD_ASSERT (name != NULL 11712 && CONST_STRNEQ (name, ".MIPS.content")); 11713 sec = bfd_get_section_by_name (abfd, 11714 name + sizeof ".MIPS.content" - 1); 11715 BFD_ASSERT (sec != NULL); 11716 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 11717 break; 11718 11719 case SHT_MIPS_SYMBOL_LIB: 11720 sec = bfd_get_section_by_name (abfd, ".dynsym"); 11721 if (sec != NULL) 11722 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 11723 sec = bfd_get_section_by_name (abfd, ".liblist"); 11724 if (sec != NULL) 11725 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx; 11726 break; 11727 11728 case SHT_MIPS_EVENTS: 11729 BFD_ASSERT ((*hdrpp)->bfd_section != NULL); 11730 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section); 11731 BFD_ASSERT (name != NULL); 11732 if (CONST_STRNEQ (name, ".MIPS.events")) 11733 sec = bfd_get_section_by_name (abfd, 11734 name + sizeof ".MIPS.events" - 1); 11735 else 11736 { 11737 BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel")); 11738 sec = bfd_get_section_by_name (abfd, 11739 (name 11740 + sizeof ".MIPS.post_rel" - 1)); 11741 } 11742 BFD_ASSERT (sec != NULL); 11743 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 11744 break; 11745 11746 } 11747 } 11748 } 11749 11750 /* When creating an IRIX5 executable, we need REGINFO and RTPROC 11751 segments. */ 11752 11753 int 11754 _bfd_mips_elf_additional_program_headers (bfd *abfd, 11755 struct bfd_link_info *info ATTRIBUTE_UNUSED) 11756 { 11757 asection *s; 11758 int ret = 0; 11759 11760 /* See if we need a PT_MIPS_REGINFO segment. */ 11761 s = bfd_get_section_by_name (abfd, ".reginfo"); 11762 if (s && (s->flags & SEC_LOAD)) 11763 ++ret; 11764 11765 /* See if we need a PT_MIPS_OPTIONS segment. */ 11766 if (IRIX_COMPAT (abfd) == ict_irix6 11767 && bfd_get_section_by_name (abfd, 11768 MIPS_ELF_OPTIONS_SECTION_NAME (abfd))) 11769 ++ret; 11770 11771 /* See if we need a PT_MIPS_RTPROC segment. */ 11772 if (IRIX_COMPAT (abfd) == ict_irix5 11773 && bfd_get_section_by_name (abfd, ".dynamic") 11774 && bfd_get_section_by_name (abfd, ".mdebug")) 11775 ++ret; 11776 11777 /* Allocate a PT_NULL header in dynamic objects. See 11778 _bfd_mips_elf_modify_segment_map for details. */ 11779 if (!SGI_COMPAT (abfd) 11780 && bfd_get_section_by_name (abfd, ".dynamic")) 11781 ++ret; 11782 11783 return ret; 11784 } 11785 11786 /* Modify the segment map for an IRIX5 executable. */ 11787 11788 bfd_boolean 11789 _bfd_mips_elf_modify_segment_map (bfd *abfd, 11790 struct bfd_link_info *info) 11791 { 11792 asection *s; 11793 struct elf_segment_map *m, **pm; 11794 bfd_size_type amt; 11795 11796 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO 11797 segment. */ 11798 s = bfd_get_section_by_name (abfd, ".reginfo"); 11799 if (s != NULL && (s->flags & SEC_LOAD) != 0) 11800 { 11801 for (m = elf_seg_map (abfd); m != NULL; m = m->next) 11802 if (m->p_type == PT_MIPS_REGINFO) 11803 break; 11804 if (m == NULL) 11805 { 11806 amt = sizeof *m; 11807 m = bfd_zalloc (abfd, amt); 11808 if (m == NULL) 11809 return FALSE; 11810 11811 m->p_type = PT_MIPS_REGINFO; 11812 m->count = 1; 11813 m->sections[0] = s; 11814 11815 /* We want to put it after the PHDR and INTERP segments. */ 11816 pm = &elf_seg_map (abfd); 11817 while (*pm != NULL 11818 && ((*pm)->p_type == PT_PHDR 11819 || (*pm)->p_type == PT_INTERP)) 11820 pm = &(*pm)->next; 11821 11822 m->next = *pm; 11823 *pm = m; 11824 } 11825 } 11826 11827 /* For IRIX 6, we don't have .mdebug sections, nor does anything but 11828 .dynamic end up in PT_DYNAMIC. However, we do have to insert a 11829 PT_MIPS_OPTIONS segment immediately following the program header 11830 table. */ 11831 if (NEWABI_P (abfd) 11832 /* On non-IRIX6 new abi, we'll have already created a segment 11833 for this section, so don't create another. I'm not sure this 11834 is not also the case for IRIX 6, but I can't test it right 11835 now. */ 11836 && IRIX_COMPAT (abfd) == ict_irix6) 11837 { 11838 for (s = abfd->sections; s; s = s->next) 11839 if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS) 11840 break; 11841 11842 if (s) 11843 { 11844 struct elf_segment_map *options_segment; 11845 11846 pm = &elf_seg_map (abfd); 11847 while (*pm != NULL 11848 && ((*pm)->p_type == PT_PHDR 11849 || (*pm)->p_type == PT_INTERP)) 11850 pm = &(*pm)->next; 11851 11852 if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS) 11853 { 11854 amt = sizeof (struct elf_segment_map); 11855 options_segment = bfd_zalloc (abfd, amt); 11856 options_segment->next = *pm; 11857 options_segment->p_type = PT_MIPS_OPTIONS; 11858 options_segment->p_flags = PF_R; 11859 options_segment->p_flags_valid = TRUE; 11860 options_segment->count = 1; 11861 options_segment->sections[0] = s; 11862 *pm = options_segment; 11863 } 11864 } 11865 } 11866 else 11867 { 11868 if (IRIX_COMPAT (abfd) == ict_irix5) 11869 { 11870 /* If there are .dynamic and .mdebug sections, we make a room 11871 for the RTPROC header. FIXME: Rewrite without section names. */ 11872 if (bfd_get_section_by_name (abfd, ".interp") == NULL 11873 && bfd_get_section_by_name (abfd, ".dynamic") != NULL 11874 && bfd_get_section_by_name (abfd, ".mdebug") != NULL) 11875 { 11876 for (m = elf_seg_map (abfd); m != NULL; m = m->next) 11877 if (m->p_type == PT_MIPS_RTPROC) 11878 break; 11879 if (m == NULL) 11880 { 11881 amt = sizeof *m; 11882 m = bfd_zalloc (abfd, amt); 11883 if (m == NULL) 11884 return FALSE; 11885 11886 m->p_type = PT_MIPS_RTPROC; 11887 11888 s = bfd_get_section_by_name (abfd, ".rtproc"); 11889 if (s == NULL) 11890 { 11891 m->count = 0; 11892 m->p_flags = 0; 11893 m->p_flags_valid = 1; 11894 } 11895 else 11896 { 11897 m->count = 1; 11898 m->sections[0] = s; 11899 } 11900 11901 /* We want to put it after the DYNAMIC segment. */ 11902 pm = &elf_seg_map (abfd); 11903 while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC) 11904 pm = &(*pm)->next; 11905 if (*pm != NULL) 11906 pm = &(*pm)->next; 11907 11908 m->next = *pm; 11909 *pm = m; 11910 } 11911 } 11912 } 11913 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic, 11914 .dynstr, .dynsym, and .hash sections, and everything in 11915 between. */ 11916 for (pm = &elf_seg_map (abfd); *pm != NULL; 11917 pm = &(*pm)->next) 11918 if ((*pm)->p_type == PT_DYNAMIC) 11919 break; 11920 m = *pm; 11921 if (m != NULL && IRIX_COMPAT (abfd) == ict_none) 11922 { 11923 /* For a normal mips executable the permissions for the PT_DYNAMIC 11924 segment are read, write and execute. We do that here since 11925 the code in elf.c sets only the read permission. This matters 11926 sometimes for the dynamic linker. */ 11927 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL) 11928 { 11929 m->p_flags = PF_R | PF_W | PF_X; 11930 m->p_flags_valid = 1; 11931 } 11932 } 11933 /* GNU/Linux binaries do not need the extended PT_DYNAMIC section. 11934 glibc's dynamic linker has traditionally derived the number of 11935 tags from the p_filesz field, and sometimes allocates stack 11936 arrays of that size. An overly-big PT_DYNAMIC segment can 11937 be actively harmful in such cases. Making PT_DYNAMIC contain 11938 other sections can also make life hard for the prelinker, 11939 which might move one of the other sections to a different 11940 PT_LOAD segment. */ 11941 if (SGI_COMPAT (abfd) 11942 && m != NULL 11943 && m->count == 1 11944 && strcmp (m->sections[0]->name, ".dynamic") == 0) 11945 { 11946 static const char *sec_names[] = 11947 { 11948 ".dynamic", ".dynstr", ".dynsym", ".hash" 11949 }; 11950 bfd_vma low, high; 11951 unsigned int i, c; 11952 struct elf_segment_map *n; 11953 11954 low = ~(bfd_vma) 0; 11955 high = 0; 11956 for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++) 11957 { 11958 s = bfd_get_section_by_name (abfd, sec_names[i]); 11959 if (s != NULL && (s->flags & SEC_LOAD) != 0) 11960 { 11961 bfd_size_type sz; 11962 11963 if (low > s->vma) 11964 low = s->vma; 11965 sz = s->size; 11966 if (high < s->vma + sz) 11967 high = s->vma + sz; 11968 } 11969 } 11970 11971 c = 0; 11972 for (s = abfd->sections; s != NULL; s = s->next) 11973 if ((s->flags & SEC_LOAD) != 0 11974 && s->vma >= low 11975 && s->vma + s->size <= high) 11976 ++c; 11977 11978 amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *); 11979 n = bfd_zalloc (abfd, amt); 11980 if (n == NULL) 11981 return FALSE; 11982 *n = *m; 11983 n->count = c; 11984 11985 i = 0; 11986 for (s = abfd->sections; s != NULL; s = s->next) 11987 { 11988 if ((s->flags & SEC_LOAD) != 0 11989 && s->vma >= low 11990 && s->vma + s->size <= high) 11991 { 11992 n->sections[i] = s; 11993 ++i; 11994 } 11995 } 11996 11997 *pm = n; 11998 } 11999 } 12000 12001 /* Allocate a spare program header in dynamic objects so that tools 12002 like the prelinker can add an extra PT_LOAD entry. 12003 12004 If the prelinker needs to make room for a new PT_LOAD entry, its 12005 standard procedure is to move the first (read-only) sections into 12006 the new (writable) segment. However, the MIPS ABI requires 12007 .dynamic to be in a read-only segment, and the section will often 12008 start within sizeof (ElfNN_Phdr) bytes of the last program header. 12009 12010 Although the prelinker could in principle move .dynamic to a 12011 writable segment, it seems better to allocate a spare program 12012 header instead, and avoid the need to move any sections. 12013 There is a long tradition of allocating spare dynamic tags, 12014 so allocating a spare program header seems like a natural 12015 extension. 12016 12017 If INFO is NULL, we may be copying an already prelinked binary 12018 with objcopy or strip, so do not add this header. */ 12019 if (info != NULL 12020 && !SGI_COMPAT (abfd) 12021 && bfd_get_section_by_name (abfd, ".dynamic")) 12022 { 12023 for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next) 12024 if ((*pm)->p_type == PT_NULL) 12025 break; 12026 if (*pm == NULL) 12027 { 12028 m = bfd_zalloc (abfd, sizeof (*m)); 12029 if (m == NULL) 12030 return FALSE; 12031 12032 m->p_type = PT_NULL; 12033 *pm = m; 12034 } 12035 } 12036 12037 return TRUE; 12038 } 12039 12040 /* Return the section that should be marked against GC for a given 12041 relocation. */ 12042 12043 asection * 12044 _bfd_mips_elf_gc_mark_hook (asection *sec, 12045 struct bfd_link_info *info, 12046 Elf_Internal_Rela *rel, 12047 struct elf_link_hash_entry *h, 12048 Elf_Internal_Sym *sym) 12049 { 12050 /* ??? Do mips16 stub sections need to be handled special? */ 12051 12052 if (h != NULL) 12053 switch (ELF_R_TYPE (sec->owner, rel->r_info)) 12054 { 12055 case R_MIPS_GNU_VTINHERIT: 12056 case R_MIPS_GNU_VTENTRY: 12057 return NULL; 12058 } 12059 12060 return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); 12061 } 12062 12063 /* Update the got entry reference counts for the section being removed. */ 12064 12065 bfd_boolean 12066 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED, 12067 struct bfd_link_info *info ATTRIBUTE_UNUSED, 12068 asection *sec ATTRIBUTE_UNUSED, 12069 const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED) 12070 { 12071 #if 0 12072 Elf_Internal_Shdr *symtab_hdr; 12073 struct elf_link_hash_entry **sym_hashes; 12074 bfd_signed_vma *local_got_refcounts; 12075 const Elf_Internal_Rela *rel, *relend; 12076 unsigned long r_symndx; 12077 struct elf_link_hash_entry *h; 12078 12079 if (info->relocatable) 12080 return TRUE; 12081 12082 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 12083 sym_hashes = elf_sym_hashes (abfd); 12084 local_got_refcounts = elf_local_got_refcounts (abfd); 12085 12086 relend = relocs + sec->reloc_count; 12087 for (rel = relocs; rel < relend; rel++) 12088 switch (ELF_R_TYPE (abfd, rel->r_info)) 12089 { 12090 case R_MIPS16_GOT16: 12091 case R_MIPS16_CALL16: 12092 case R_MIPS_GOT16: 12093 case R_MIPS_CALL16: 12094 case R_MIPS_CALL_HI16: 12095 case R_MIPS_CALL_LO16: 12096 case R_MIPS_GOT_HI16: 12097 case R_MIPS_GOT_LO16: 12098 case R_MIPS_GOT_DISP: 12099 case R_MIPS_GOT_PAGE: 12100 case R_MIPS_GOT_OFST: 12101 case R_MICROMIPS_GOT16: 12102 case R_MICROMIPS_CALL16: 12103 case R_MICROMIPS_CALL_HI16: 12104 case R_MICROMIPS_CALL_LO16: 12105 case R_MICROMIPS_GOT_HI16: 12106 case R_MICROMIPS_GOT_LO16: 12107 case R_MICROMIPS_GOT_DISP: 12108 case R_MICROMIPS_GOT_PAGE: 12109 case R_MICROMIPS_GOT_OFST: 12110 /* ??? It would seem that the existing MIPS code does no sort 12111 of reference counting or whatnot on its GOT and PLT entries, 12112 so it is not possible to garbage collect them at this time. */ 12113 break; 12114 12115 default: 12116 break; 12117 } 12118 #endif 12119 12120 return TRUE; 12121 } 12122 12123 /* Copy data from a MIPS ELF indirect symbol to its direct symbol, 12124 hiding the old indirect symbol. Process additional relocation 12125 information. Also called for weakdefs, in which case we just let 12126 _bfd_elf_link_hash_copy_indirect copy the flags for us. */ 12127 12128 void 12129 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info, 12130 struct elf_link_hash_entry *dir, 12131 struct elf_link_hash_entry *ind) 12132 { 12133 struct mips_elf_link_hash_entry *dirmips, *indmips; 12134 12135 _bfd_elf_link_hash_copy_indirect (info, dir, ind); 12136 12137 dirmips = (struct mips_elf_link_hash_entry *) dir; 12138 indmips = (struct mips_elf_link_hash_entry *) ind; 12139 /* Any absolute non-dynamic relocations against an indirect or weak 12140 definition will be against the target symbol. */ 12141 if (indmips->has_static_relocs) 12142 dirmips->has_static_relocs = TRUE; 12143 12144 if (ind->root.type != bfd_link_hash_indirect) 12145 return; 12146 12147 dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs; 12148 if (indmips->readonly_reloc) 12149 dirmips->readonly_reloc = TRUE; 12150 if (indmips->no_fn_stub) 12151 dirmips->no_fn_stub = TRUE; 12152 if (indmips->fn_stub) 12153 { 12154 dirmips->fn_stub = indmips->fn_stub; 12155 indmips->fn_stub = NULL; 12156 } 12157 if (indmips->need_fn_stub) 12158 { 12159 dirmips->need_fn_stub = TRUE; 12160 indmips->need_fn_stub = FALSE; 12161 } 12162 if (indmips->call_stub) 12163 { 12164 dirmips->call_stub = indmips->call_stub; 12165 indmips->call_stub = NULL; 12166 } 12167 if (indmips->call_fp_stub) 12168 { 12169 dirmips->call_fp_stub = indmips->call_fp_stub; 12170 indmips->call_fp_stub = NULL; 12171 } 12172 if (indmips->global_got_area < dirmips->global_got_area) 12173 dirmips->global_got_area = indmips->global_got_area; 12174 if (indmips->global_got_area < GGA_NONE) 12175 indmips->global_got_area = GGA_NONE; 12176 if (indmips->has_nonpic_branches) 12177 dirmips->has_nonpic_branches = TRUE; 12178 } 12179 12180 #define PDR_SIZE 32 12181 12182 bfd_boolean 12183 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie, 12184 struct bfd_link_info *info) 12185 { 12186 asection *o; 12187 bfd_boolean ret = FALSE; 12188 unsigned char *tdata; 12189 size_t i, skip; 12190 12191 o = bfd_get_section_by_name (abfd, ".pdr"); 12192 if (! o) 12193 return FALSE; 12194 if (o->size == 0) 12195 return FALSE; 12196 if (o->size % PDR_SIZE != 0) 12197 return FALSE; 12198 if (o->output_section != NULL 12199 && bfd_is_abs_section (o->output_section)) 12200 return FALSE; 12201 12202 tdata = bfd_zmalloc (o->size / PDR_SIZE); 12203 if (! tdata) 12204 return FALSE; 12205 12206 cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, 12207 info->keep_memory); 12208 if (!cookie->rels) 12209 { 12210 free (tdata); 12211 return FALSE; 12212 } 12213 12214 cookie->rel = cookie->rels; 12215 cookie->relend = cookie->rels + o->reloc_count; 12216 12217 for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++) 12218 { 12219 if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie)) 12220 { 12221 tdata[i] = 1; 12222 skip ++; 12223 } 12224 } 12225 12226 if (skip != 0) 12227 { 12228 mips_elf_section_data (o)->u.tdata = tdata; 12229 o->size -= skip * PDR_SIZE; 12230 ret = TRUE; 12231 } 12232 else 12233 free (tdata); 12234 12235 if (! info->keep_memory) 12236 free (cookie->rels); 12237 12238 return ret; 12239 } 12240 12241 bfd_boolean 12242 _bfd_mips_elf_ignore_discarded_relocs (asection *sec) 12243 { 12244 if (strcmp (sec->name, ".pdr") == 0) 12245 return TRUE; 12246 return FALSE; 12247 } 12248 12249 bfd_boolean 12250 _bfd_mips_elf_write_section (bfd *output_bfd, 12251 struct bfd_link_info *link_info ATTRIBUTE_UNUSED, 12252 asection *sec, bfd_byte *contents) 12253 { 12254 bfd_byte *to, *from, *end; 12255 int i; 12256 12257 if (strcmp (sec->name, ".pdr") != 0) 12258 return FALSE; 12259 12260 if (mips_elf_section_data (sec)->u.tdata == NULL) 12261 return FALSE; 12262 12263 to = contents; 12264 end = contents + sec->size; 12265 for (from = contents, i = 0; 12266 from < end; 12267 from += PDR_SIZE, i++) 12268 { 12269 if ((mips_elf_section_data (sec)->u.tdata)[i] == 1) 12270 continue; 12271 if (to != from) 12272 memcpy (to, from, PDR_SIZE); 12273 to += PDR_SIZE; 12274 } 12275 bfd_set_section_contents (output_bfd, sec->output_section, contents, 12276 sec->output_offset, sec->size); 12277 return TRUE; 12278 } 12279 12280 /* microMIPS code retains local labels for linker relaxation. Omit them 12281 from output by default for clarity. */ 12282 12283 bfd_boolean 12284 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym) 12285 { 12286 return _bfd_elf_is_local_label_name (abfd, sym->name); 12287 } 12288 12289 /* MIPS ELF uses a special find_nearest_line routine in order the 12290 handle the ECOFF debugging information. */ 12291 12292 struct mips_elf_find_line 12293 { 12294 struct ecoff_debug_info d; 12295 struct ecoff_find_line i; 12296 }; 12297 12298 bfd_boolean 12299 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section, 12300 asymbol **symbols, bfd_vma offset, 12301 const char **filename_ptr, 12302 const char **functionname_ptr, 12303 unsigned int *line_ptr) 12304 { 12305 asection *msec; 12306 12307 if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset, 12308 filename_ptr, functionname_ptr, 12309 line_ptr)) 12310 return TRUE; 12311 12312 if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections, 12313 section, symbols, offset, 12314 filename_ptr, functionname_ptr, 12315 line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0, 12316 &elf_tdata (abfd)->dwarf2_find_line_info)) 12317 return TRUE; 12318 12319 msec = bfd_get_section_by_name (abfd, ".mdebug"); 12320 if (msec != NULL) 12321 { 12322 flagword origflags; 12323 struct mips_elf_find_line *fi; 12324 const struct ecoff_debug_swap * const swap = 12325 get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap; 12326 12327 /* If we are called during a link, mips_elf_final_link may have 12328 cleared the SEC_HAS_CONTENTS field. We force it back on here 12329 if appropriate (which it normally will be). */ 12330 origflags = msec->flags; 12331 if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS) 12332 msec->flags |= SEC_HAS_CONTENTS; 12333 12334 fi = mips_elf_tdata (abfd)->find_line_info; 12335 if (fi == NULL) 12336 { 12337 bfd_size_type external_fdr_size; 12338 char *fraw_src; 12339 char *fraw_end; 12340 struct fdr *fdr_ptr; 12341 bfd_size_type amt = sizeof (struct mips_elf_find_line); 12342 12343 fi = bfd_zalloc (abfd, amt); 12344 if (fi == NULL) 12345 { 12346 msec->flags = origflags; 12347 return FALSE; 12348 } 12349 12350 if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d)) 12351 { 12352 msec->flags = origflags; 12353 return FALSE; 12354 } 12355 12356 /* Swap in the FDR information. */ 12357 amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr); 12358 fi->d.fdr = bfd_alloc (abfd, amt); 12359 if (fi->d.fdr == NULL) 12360 { 12361 msec->flags = origflags; 12362 return FALSE; 12363 } 12364 external_fdr_size = swap->external_fdr_size; 12365 fdr_ptr = fi->d.fdr; 12366 fraw_src = (char *) fi->d.external_fdr; 12367 fraw_end = (fraw_src 12368 + fi->d.symbolic_header.ifdMax * external_fdr_size); 12369 for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++) 12370 (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr); 12371 12372 mips_elf_tdata (abfd)->find_line_info = fi; 12373 12374 /* Note that we don't bother to ever free this information. 12375 find_nearest_line is either called all the time, as in 12376 objdump -l, so the information should be saved, or it is 12377 rarely called, as in ld error messages, so the memory 12378 wasted is unimportant. Still, it would probably be a 12379 good idea for free_cached_info to throw it away. */ 12380 } 12381 12382 if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap, 12383 &fi->i, filename_ptr, functionname_ptr, 12384 line_ptr)) 12385 { 12386 msec->flags = origflags; 12387 return TRUE; 12388 } 12389 12390 msec->flags = origflags; 12391 } 12392 12393 /* Fall back on the generic ELF find_nearest_line routine. */ 12394 12395 return _bfd_elf_find_nearest_line (abfd, section, symbols, offset, 12396 filename_ptr, functionname_ptr, 12397 line_ptr); 12398 } 12399 12400 bfd_boolean 12401 _bfd_mips_elf_find_inliner_info (bfd *abfd, 12402 const char **filename_ptr, 12403 const char **functionname_ptr, 12404 unsigned int *line_ptr) 12405 { 12406 bfd_boolean found; 12407 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr, 12408 functionname_ptr, line_ptr, 12409 & elf_tdata (abfd)->dwarf2_find_line_info); 12410 return found; 12411 } 12412 12413 12414 /* When are writing out the .options or .MIPS.options section, 12415 remember the bytes we are writing out, so that we can install the 12416 GP value in the section_processing routine. */ 12417 12418 bfd_boolean 12419 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section, 12420 const void *location, 12421 file_ptr offset, bfd_size_type count) 12422 { 12423 if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name)) 12424 { 12425 bfd_byte *c; 12426 12427 if (elf_section_data (section) == NULL) 12428 { 12429 bfd_size_type amt = sizeof (struct bfd_elf_section_data); 12430 section->used_by_bfd = bfd_zalloc (abfd, amt); 12431 if (elf_section_data (section) == NULL) 12432 return FALSE; 12433 } 12434 c = mips_elf_section_data (section)->u.tdata; 12435 if (c == NULL) 12436 { 12437 c = bfd_zalloc (abfd, section->size); 12438 if (c == NULL) 12439 return FALSE; 12440 mips_elf_section_data (section)->u.tdata = c; 12441 } 12442 12443 memcpy (c + offset, location, count); 12444 } 12445 12446 return _bfd_elf_set_section_contents (abfd, section, location, offset, 12447 count); 12448 } 12449 12450 /* This is almost identical to bfd_generic_get_... except that some 12451 MIPS relocations need to be handled specially. Sigh. */ 12452 12453 bfd_byte * 12454 _bfd_elf_mips_get_relocated_section_contents 12455 (bfd *abfd, 12456 struct bfd_link_info *link_info, 12457 struct bfd_link_order *link_order, 12458 bfd_byte *data, 12459 bfd_boolean relocatable, 12460 asymbol **symbols) 12461 { 12462 /* Get enough memory to hold the stuff */ 12463 bfd *input_bfd = link_order->u.indirect.section->owner; 12464 asection *input_section = link_order->u.indirect.section; 12465 bfd_size_type sz; 12466 12467 long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section); 12468 arelent **reloc_vector = NULL; 12469 long reloc_count; 12470 12471 if (reloc_size < 0) 12472 goto error_return; 12473 12474 reloc_vector = bfd_malloc (reloc_size); 12475 if (reloc_vector == NULL && reloc_size != 0) 12476 goto error_return; 12477 12478 /* read in the section */ 12479 sz = input_section->rawsize ? input_section->rawsize : input_section->size; 12480 if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz)) 12481 goto error_return; 12482 12483 reloc_count = bfd_canonicalize_reloc (input_bfd, 12484 input_section, 12485 reloc_vector, 12486 symbols); 12487 if (reloc_count < 0) 12488 goto error_return; 12489 12490 if (reloc_count > 0) 12491 { 12492 arelent **parent; 12493 /* for mips */ 12494 int gp_found; 12495 bfd_vma gp = 0x12345678; /* initialize just to shut gcc up */ 12496 12497 { 12498 struct bfd_hash_entry *h; 12499 struct bfd_link_hash_entry *lh; 12500 /* Skip all this stuff if we aren't mixing formats. */ 12501 if (abfd && input_bfd 12502 && abfd->xvec == input_bfd->xvec) 12503 lh = 0; 12504 else 12505 { 12506 h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE); 12507 lh = (struct bfd_link_hash_entry *) h; 12508 } 12509 lookup: 12510 if (lh) 12511 { 12512 switch (lh->type) 12513 { 12514 case bfd_link_hash_undefined: 12515 case bfd_link_hash_undefweak: 12516 case bfd_link_hash_common: 12517 gp_found = 0; 12518 break; 12519 case bfd_link_hash_defined: 12520 case bfd_link_hash_defweak: 12521 gp_found = 1; 12522 gp = lh->u.def.value; 12523 break; 12524 case bfd_link_hash_indirect: 12525 case bfd_link_hash_warning: 12526 lh = lh->u.i.link; 12527 /* @@FIXME ignoring warning for now */ 12528 goto lookup; 12529 case bfd_link_hash_new: 12530 default: 12531 abort (); 12532 } 12533 } 12534 else 12535 gp_found = 0; 12536 } 12537 /* end mips */ 12538 for (parent = reloc_vector; *parent != NULL; parent++) 12539 { 12540 char *error_message = NULL; 12541 bfd_reloc_status_type r; 12542 12543 /* Specific to MIPS: Deal with relocation types that require 12544 knowing the gp of the output bfd. */ 12545 asymbol *sym = *(*parent)->sym_ptr_ptr; 12546 12547 /* If we've managed to find the gp and have a special 12548 function for the relocation then go ahead, else default 12549 to the generic handling. */ 12550 if (gp_found 12551 && (*parent)->howto->special_function 12552 == _bfd_mips_elf32_gprel16_reloc) 12553 r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent, 12554 input_section, relocatable, 12555 data, gp); 12556 else 12557 r = bfd_perform_relocation (input_bfd, *parent, data, 12558 input_section, 12559 relocatable ? abfd : NULL, 12560 &error_message); 12561 12562 if (relocatable) 12563 { 12564 asection *os = input_section->output_section; 12565 12566 /* A partial link, so keep the relocs */ 12567 os->orelocation[os->reloc_count] = *parent; 12568 os->reloc_count++; 12569 } 12570 12571 if (r != bfd_reloc_ok) 12572 { 12573 switch (r) 12574 { 12575 case bfd_reloc_undefined: 12576 if (!((*link_info->callbacks->undefined_symbol) 12577 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), 12578 input_bfd, input_section, (*parent)->address, TRUE))) 12579 goto error_return; 12580 break; 12581 case bfd_reloc_dangerous: 12582 BFD_ASSERT (error_message != NULL); 12583 if (!((*link_info->callbacks->reloc_dangerous) 12584 (link_info, error_message, input_bfd, input_section, 12585 (*parent)->address))) 12586 goto error_return; 12587 break; 12588 case bfd_reloc_overflow: 12589 if (!((*link_info->callbacks->reloc_overflow) 12590 (link_info, NULL, 12591 bfd_asymbol_name (*(*parent)->sym_ptr_ptr), 12592 (*parent)->howto->name, (*parent)->addend, 12593 input_bfd, input_section, (*parent)->address))) 12594 goto error_return; 12595 break; 12596 case bfd_reloc_outofrange: 12597 default: 12598 abort (); 12599 break; 12600 } 12601 12602 } 12603 } 12604 } 12605 if (reloc_vector != NULL) 12606 free (reloc_vector); 12607 return data; 12608 12609 error_return: 12610 if (reloc_vector != NULL) 12611 free (reloc_vector); 12612 return NULL; 12613 } 12614 12615 static bfd_boolean 12616 mips_elf_relax_delete_bytes (bfd *abfd, 12617 asection *sec, bfd_vma addr, int count) 12618 { 12619 Elf_Internal_Shdr *symtab_hdr; 12620 unsigned int sec_shndx; 12621 bfd_byte *contents; 12622 Elf_Internal_Rela *irel, *irelend; 12623 Elf_Internal_Sym *isym; 12624 Elf_Internal_Sym *isymend; 12625 struct elf_link_hash_entry **sym_hashes; 12626 struct elf_link_hash_entry **end_hashes; 12627 struct elf_link_hash_entry **start_hashes; 12628 unsigned int symcount; 12629 12630 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); 12631 contents = elf_section_data (sec)->this_hdr.contents; 12632 12633 irel = elf_section_data (sec)->relocs; 12634 irelend = irel + sec->reloc_count; 12635 12636 /* Actually delete the bytes. */ 12637 memmove (contents + addr, contents + addr + count, 12638 (size_t) (sec->size - addr - count)); 12639 sec->size -= count; 12640 12641 /* Adjust all the relocs. */ 12642 for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++) 12643 { 12644 /* Get the new reloc address. */ 12645 if (irel->r_offset > addr) 12646 irel->r_offset -= count; 12647 } 12648 12649 BFD_ASSERT (addr % 2 == 0); 12650 BFD_ASSERT (count % 2 == 0); 12651 12652 /* Adjust the local symbols defined in this section. */ 12653 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 12654 isym = (Elf_Internal_Sym *) symtab_hdr->contents; 12655 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++) 12656 if (isym->st_shndx == sec_shndx && isym->st_value > addr) 12657 isym->st_value -= count; 12658 12659 /* Now adjust the global symbols defined in this section. */ 12660 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym) 12661 - symtab_hdr->sh_info); 12662 sym_hashes = start_hashes = elf_sym_hashes (abfd); 12663 end_hashes = sym_hashes + symcount; 12664 12665 for (; sym_hashes < end_hashes; sym_hashes++) 12666 { 12667 struct elf_link_hash_entry *sym_hash = *sym_hashes; 12668 12669 if ((sym_hash->root.type == bfd_link_hash_defined 12670 || sym_hash->root.type == bfd_link_hash_defweak) 12671 && sym_hash->root.u.def.section == sec) 12672 { 12673 bfd_vma value = sym_hash->root.u.def.value; 12674 12675 if (ELF_ST_IS_MICROMIPS (sym_hash->other)) 12676 value &= MINUS_TWO; 12677 if (value > addr) 12678 sym_hash->root.u.def.value -= count; 12679 } 12680 } 12681 12682 return TRUE; 12683 } 12684 12685 12686 /* Opcodes needed for microMIPS relaxation as found in 12687 opcodes/micromips-opc.c. */ 12688 12689 struct opcode_descriptor { 12690 unsigned long match; 12691 unsigned long mask; 12692 }; 12693 12694 /* The $ra register aka $31. */ 12695 12696 #define RA 31 12697 12698 /* 32-bit instruction format register fields. */ 12699 12700 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f) 12701 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f) 12702 12703 /* Check if a 5-bit register index can be abbreviated to 3 bits. */ 12704 12705 #define OP16_VALID_REG(r) \ 12706 ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17)) 12707 12708 12709 /* 32-bit and 16-bit branches. */ 12710 12711 static const struct opcode_descriptor b_insns_32[] = { 12712 { /* "b", "p", */ 0x40400000, 0xffff0000 }, /* bgez 0 */ 12713 { /* "b", "p", */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */ 12714 { 0, 0 } /* End marker for find_match(). */ 12715 }; 12716 12717 static const struct opcode_descriptor bc_insn_32 = 12718 { /* "bc(1|2)(ft)", "N,p", */ 0x42800000, 0xfec30000 }; 12719 12720 static const struct opcode_descriptor bz_insn_32 = 12721 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 }; 12722 12723 static const struct opcode_descriptor bzal_insn_32 = 12724 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 }; 12725 12726 static const struct opcode_descriptor beq_insn_32 = 12727 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 }; 12728 12729 static const struct opcode_descriptor b_insn_16 = 12730 { /* "b", "mD", */ 0xcc00, 0xfc00 }; 12731 12732 static const struct opcode_descriptor bz_insn_16 = 12733 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 }; 12734 12735 12736 /* 32-bit and 16-bit branch EQ and NE zero. */ 12737 12738 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the 12739 eq and second the ne. This convention is used when replacing a 12740 32-bit BEQ/BNE with the 16-bit version. */ 12741 12742 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16) 12743 12744 static const struct opcode_descriptor bz_rs_insns_32[] = { 12745 { /* "beqz", "s,p", */ 0x94000000, 0xffe00000 }, 12746 { /* "bnez", "s,p", */ 0xb4000000, 0xffe00000 }, 12747 { 0, 0 } /* End marker for find_match(). */ 12748 }; 12749 12750 static const struct opcode_descriptor bz_rt_insns_32[] = { 12751 { /* "beqz", "t,p", */ 0x94000000, 0xfc01f000 }, 12752 { /* "bnez", "t,p", */ 0xb4000000, 0xfc01f000 }, 12753 { 0, 0 } /* End marker for find_match(). */ 12754 }; 12755 12756 static const struct opcode_descriptor bzc_insns_32[] = { 12757 { /* "beqzc", "s,p", */ 0x40e00000, 0xffe00000 }, 12758 { /* "bnezc", "s,p", */ 0x40a00000, 0xffe00000 }, 12759 { 0, 0 } /* End marker for find_match(). */ 12760 }; 12761 12762 static const struct opcode_descriptor bz_insns_16[] = { 12763 { /* "beqz", "md,mE", */ 0x8c00, 0xfc00 }, 12764 { /* "bnez", "md,mE", */ 0xac00, 0xfc00 }, 12765 { 0, 0 } /* End marker for find_match(). */ 12766 }; 12767 12768 /* Switch between a 5-bit register index and its 3-bit shorthand. */ 12769 12770 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2) 12771 #define BZ16_REG_FIELD(r) \ 12772 (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7) 12773 12774 12775 /* 32-bit instructions with a delay slot. */ 12776 12777 static const struct opcode_descriptor jal_insn_32_bd16 = 12778 { /* "jals", "a", */ 0x74000000, 0xfc000000 }; 12779 12780 static const struct opcode_descriptor jal_insn_32_bd32 = 12781 { /* "jal", "a", */ 0xf4000000, 0xfc000000 }; 12782 12783 static const struct opcode_descriptor jal_x_insn_32_bd32 = 12784 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 }; 12785 12786 static const struct opcode_descriptor j_insn_32 = 12787 { /* "j", "a", */ 0xd4000000, 0xfc000000 }; 12788 12789 static const struct opcode_descriptor jalr_insn_32 = 12790 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff }; 12791 12792 /* This table can be compacted, because no opcode replacement is made. */ 12793 12794 static const struct opcode_descriptor ds_insns_32_bd16[] = { 12795 { /* "jals", "a", */ 0x74000000, 0xfc000000 }, 12796 12797 { /* "jalrs[.hb]", "t,s", */ 0x00004f3c, 0xfc00efff }, 12798 { /* "b(ge|lt)zals", "s,p", */ 0x42200000, 0xffa00000 }, 12799 12800 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 }, 12801 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 }, 12802 { /* "j", "a", */ 0xd4000000, 0xfc000000 }, 12803 { 0, 0 } /* End marker for find_match(). */ 12804 }; 12805 12806 /* This table can be compacted, because no opcode replacement is made. */ 12807 12808 static const struct opcode_descriptor ds_insns_32_bd32[] = { 12809 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 }, 12810 12811 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff }, 12812 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 }, 12813 { 0, 0 } /* End marker for find_match(). */ 12814 }; 12815 12816 12817 /* 16-bit instructions with a delay slot. */ 12818 12819 static const struct opcode_descriptor jalr_insn_16_bd16 = 12820 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 }; 12821 12822 static const struct opcode_descriptor jalr_insn_16_bd32 = 12823 { /* "jalr", "my,mj", */ 0x45c0, 0xffe0 }; 12824 12825 static const struct opcode_descriptor jr_insn_16 = 12826 { /* "jr", "mj", */ 0x4580, 0xffe0 }; 12827 12828 #define JR16_REG(opcode) ((opcode) & 0x1f) 12829 12830 /* This table can be compacted, because no opcode replacement is made. */ 12831 12832 static const struct opcode_descriptor ds_insns_16_bd16[] = { 12833 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 }, 12834 12835 { /* "b", "mD", */ 0xcc00, 0xfc00 }, 12836 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 }, 12837 { /* "jr", "mj", */ 0x4580, 0xffe0 }, 12838 { 0, 0 } /* End marker for find_match(). */ 12839 }; 12840 12841 12842 /* LUI instruction. */ 12843 12844 static const struct opcode_descriptor lui_insn = 12845 { /* "lui", "s,u", */ 0x41a00000, 0xffe00000 }; 12846 12847 12848 /* ADDIU instruction. */ 12849 12850 static const struct opcode_descriptor addiu_insn = 12851 { /* "addiu", "t,r,j", */ 0x30000000, 0xfc000000 }; 12852 12853 static const struct opcode_descriptor addiupc_insn = 12854 { /* "addiu", "mb,$pc,mQ", */ 0x78000000, 0xfc000000 }; 12855 12856 #define ADDIUPC_REG_FIELD(r) \ 12857 (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23) 12858 12859 12860 /* Relaxable instructions in a JAL delay slot: MOVE. */ 12861 12862 /* The 16-bit move has rd in 9:5 and rs in 4:0. The 32-bit moves 12863 (ADDU, OR) have rd in 15:11 and rs in 10:16. */ 12864 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f) 12865 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f) 12866 12867 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5) 12868 #define MOVE16_RS_FIELD(r) (((r) & 0x1f) ) 12869 12870 static const struct opcode_descriptor move_insns_32[] = { 12871 { /* "move", "d,s", */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */ 12872 { /* "move", "d,s", */ 0x00000290, 0xffe007ff }, /* or d,s,$0 */ 12873 { 0, 0 } /* End marker for find_match(). */ 12874 }; 12875 12876 static const struct opcode_descriptor move_insn_16 = 12877 { /* "move", "mp,mj", */ 0x0c00, 0xfc00 }; 12878 12879 12880 /* NOP instructions. */ 12881 12882 static const struct opcode_descriptor nop_insn_32 = 12883 { /* "nop", "", */ 0x00000000, 0xffffffff }; 12884 12885 static const struct opcode_descriptor nop_insn_16 = 12886 { /* "nop", "", */ 0x0c00, 0xffff }; 12887 12888 12889 /* Instruction match support. */ 12890 12891 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match) 12892 12893 static int 12894 find_match (unsigned long opcode, const struct opcode_descriptor insn[]) 12895 { 12896 unsigned long indx; 12897 12898 for (indx = 0; insn[indx].mask != 0; indx++) 12899 if (MATCH (opcode, insn[indx])) 12900 return indx; 12901 12902 return -1; 12903 } 12904 12905 12906 /* Branch and delay slot decoding support. */ 12907 12908 /* If PTR points to what *might* be a 16-bit branch or jump, then 12909 return the minimum length of its delay slot, otherwise return 0. 12910 Non-zero results are not definitive as we might be checking against 12911 the second half of another instruction. */ 12912 12913 static int 12914 check_br16_dslot (bfd *abfd, bfd_byte *ptr) 12915 { 12916 unsigned long opcode; 12917 int bdsize; 12918 12919 opcode = bfd_get_16 (abfd, ptr); 12920 if (MATCH (opcode, jalr_insn_16_bd32) != 0) 12921 /* 16-bit branch/jump with a 32-bit delay slot. */ 12922 bdsize = 4; 12923 else if (MATCH (opcode, jalr_insn_16_bd16) != 0 12924 || find_match (opcode, ds_insns_16_bd16) >= 0) 12925 /* 16-bit branch/jump with a 16-bit delay slot. */ 12926 bdsize = 2; 12927 else 12928 /* No delay slot. */ 12929 bdsize = 0; 12930 12931 return bdsize; 12932 } 12933 12934 /* If PTR points to what *might* be a 32-bit branch or jump, then 12935 return the minimum length of its delay slot, otherwise return 0. 12936 Non-zero results are not definitive as we might be checking against 12937 the second half of another instruction. */ 12938 12939 static int 12940 check_br32_dslot (bfd *abfd, bfd_byte *ptr) 12941 { 12942 unsigned long opcode; 12943 int bdsize; 12944 12945 opcode = bfd_get_micromips_32 (abfd, ptr); 12946 if (find_match (opcode, ds_insns_32_bd32) >= 0) 12947 /* 32-bit branch/jump with a 32-bit delay slot. */ 12948 bdsize = 4; 12949 else if (find_match (opcode, ds_insns_32_bd16) >= 0) 12950 /* 32-bit branch/jump with a 16-bit delay slot. */ 12951 bdsize = 2; 12952 else 12953 /* No delay slot. */ 12954 bdsize = 0; 12955 12956 return bdsize; 12957 } 12958 12959 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot 12960 that doesn't fiddle with REG, then return TRUE, otherwise FALSE. */ 12961 12962 static bfd_boolean 12963 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg) 12964 { 12965 unsigned long opcode; 12966 12967 opcode = bfd_get_16 (abfd, ptr); 12968 if (MATCH (opcode, b_insn_16) 12969 /* B16 */ 12970 || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode)) 12971 /* JR16 */ 12972 || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode)) 12973 /* BEQZ16, BNEZ16 */ 12974 || (MATCH (opcode, jalr_insn_16_bd32) 12975 /* JALR16 */ 12976 && reg != JR16_REG (opcode) && reg != RA)) 12977 return TRUE; 12978 12979 return FALSE; 12980 } 12981 12982 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG, 12983 then return TRUE, otherwise FALSE. */ 12984 12985 static bfd_boolean 12986 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg) 12987 { 12988 unsigned long opcode; 12989 12990 opcode = bfd_get_micromips_32 (abfd, ptr); 12991 if (MATCH (opcode, j_insn_32) 12992 /* J */ 12993 || MATCH (opcode, bc_insn_32) 12994 /* BC1F, BC1T, BC2F, BC2T */ 12995 || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA) 12996 /* JAL, JALX */ 12997 || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode)) 12998 /* BGEZ, BGTZ, BLEZ, BLTZ */ 12999 || (MATCH (opcode, bzal_insn_32) 13000 /* BGEZAL, BLTZAL */ 13001 && reg != OP32_SREG (opcode) && reg != RA) 13002 || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32)) 13003 /* JALR, JALR.HB, BEQ, BNE */ 13004 && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode))) 13005 return TRUE; 13006 13007 return FALSE; 13008 } 13009 13010 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS, 13011 IRELEND) at OFFSET indicate that there must be a compact branch there, 13012 then return TRUE, otherwise FALSE. */ 13013 13014 static bfd_boolean 13015 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset, 13016 const Elf_Internal_Rela *internal_relocs, 13017 const Elf_Internal_Rela *irelend) 13018 { 13019 const Elf_Internal_Rela *irel; 13020 unsigned long opcode; 13021 13022 opcode = bfd_get_micromips_32 (abfd, ptr); 13023 if (find_match (opcode, bzc_insns_32) < 0) 13024 return FALSE; 13025 13026 for (irel = internal_relocs; irel < irelend; irel++) 13027 if (irel->r_offset == offset 13028 && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1) 13029 return TRUE; 13030 13031 return FALSE; 13032 } 13033 13034 /* Bitsize checking. */ 13035 #define IS_BITSIZE(val, N) \ 13036 (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1))) \ 13037 - (1ULL << ((N) - 1))) == (val)) 13038 13039 13040 bfd_boolean 13041 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec, 13042 struct bfd_link_info *link_info, 13043 bfd_boolean *again) 13044 { 13045 bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32; 13046 Elf_Internal_Shdr *symtab_hdr; 13047 Elf_Internal_Rela *internal_relocs; 13048 Elf_Internal_Rela *irel, *irelend; 13049 bfd_byte *contents = NULL; 13050 Elf_Internal_Sym *isymbuf = NULL; 13051 13052 /* Assume nothing changes. */ 13053 *again = FALSE; 13054 13055 /* We don't have to do anything for a relocatable link, if 13056 this section does not have relocs, or if this is not a 13057 code section. */ 13058 13059 if (link_info->relocatable 13060 || (sec->flags & SEC_RELOC) == 0 13061 || sec->reloc_count == 0 13062 || (sec->flags & SEC_CODE) == 0) 13063 return TRUE; 13064 13065 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 13066 13067 /* Get a copy of the native relocations. */ 13068 internal_relocs = (_bfd_elf_link_read_relocs 13069 (abfd, sec, NULL, (Elf_Internal_Rela *) NULL, 13070 link_info->keep_memory)); 13071 if (internal_relocs == NULL) 13072 goto error_return; 13073 13074 /* Walk through them looking for relaxing opportunities. */ 13075 irelend = internal_relocs + sec->reloc_count; 13076 for (irel = internal_relocs; irel < irelend; irel++) 13077 { 13078 unsigned long r_symndx = ELF32_R_SYM (irel->r_info); 13079 unsigned int r_type = ELF32_R_TYPE (irel->r_info); 13080 bfd_boolean target_is_micromips_code_p; 13081 unsigned long opcode; 13082 bfd_vma symval; 13083 bfd_vma pcrval; 13084 bfd_byte *ptr; 13085 int fndopc; 13086 13087 /* The number of bytes to delete for relaxation and from where 13088 to delete these bytes starting at irel->r_offset. */ 13089 int delcnt = 0; 13090 int deloff = 0; 13091 13092 /* If this isn't something that can be relaxed, then ignore 13093 this reloc. */ 13094 if (r_type != R_MICROMIPS_HI16 13095 && r_type != R_MICROMIPS_PC16_S1 13096 && r_type != R_MICROMIPS_26_S1) 13097 continue; 13098 13099 /* Get the section contents if we haven't done so already. */ 13100 if (contents == NULL) 13101 { 13102 /* Get cached copy if it exists. */ 13103 if (elf_section_data (sec)->this_hdr.contents != NULL) 13104 contents = elf_section_data (sec)->this_hdr.contents; 13105 /* Go get them off disk. */ 13106 else if (!bfd_malloc_and_get_section (abfd, sec, &contents)) 13107 goto error_return; 13108 } 13109 ptr = contents + irel->r_offset; 13110 13111 /* Read this BFD's local symbols if we haven't done so already. */ 13112 if (isymbuf == NULL && symtab_hdr->sh_info != 0) 13113 { 13114 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; 13115 if (isymbuf == NULL) 13116 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr, 13117 symtab_hdr->sh_info, 0, 13118 NULL, NULL, NULL); 13119 if (isymbuf == NULL) 13120 goto error_return; 13121 } 13122 13123 /* Get the value of the symbol referred to by the reloc. */ 13124 if (r_symndx < symtab_hdr->sh_info) 13125 { 13126 /* A local symbol. */ 13127 Elf_Internal_Sym *isym; 13128 asection *sym_sec; 13129 13130 isym = isymbuf + r_symndx; 13131 if (isym->st_shndx == SHN_UNDEF) 13132 sym_sec = bfd_und_section_ptr; 13133 else if (isym->st_shndx == SHN_ABS) 13134 sym_sec = bfd_abs_section_ptr; 13135 else if (isym->st_shndx == SHN_COMMON) 13136 sym_sec = bfd_com_section_ptr; 13137 else 13138 sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx); 13139 symval = (isym->st_value 13140 + sym_sec->output_section->vma 13141 + sym_sec->output_offset); 13142 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other); 13143 } 13144 else 13145 { 13146 unsigned long indx; 13147 struct elf_link_hash_entry *h; 13148 13149 /* An external symbol. */ 13150 indx = r_symndx - symtab_hdr->sh_info; 13151 h = elf_sym_hashes (abfd)[indx]; 13152 BFD_ASSERT (h != NULL); 13153 13154 if (h->root.type != bfd_link_hash_defined 13155 && h->root.type != bfd_link_hash_defweak) 13156 /* This appears to be a reference to an undefined 13157 symbol. Just ignore it -- it will be caught by the 13158 regular reloc processing. */ 13159 continue; 13160 13161 symval = (h->root.u.def.value 13162 + h->root.u.def.section->output_section->vma 13163 + h->root.u.def.section->output_offset); 13164 target_is_micromips_code_p = (!h->needs_plt 13165 && ELF_ST_IS_MICROMIPS (h->other)); 13166 } 13167 13168 13169 /* For simplicity of coding, we are going to modify the 13170 section contents, the section relocs, and the BFD symbol 13171 table. We must tell the rest of the code not to free up this 13172 information. It would be possible to instead create a table 13173 of changes which have to be made, as is done in coff-mips.c; 13174 that would be more work, but would require less memory when 13175 the linker is run. */ 13176 13177 /* Only 32-bit instructions relaxed. */ 13178 if (irel->r_offset + 4 > sec->size) 13179 continue; 13180 13181 opcode = bfd_get_micromips_32 (abfd, ptr); 13182 13183 /* This is the pc-relative distance from the instruction the 13184 relocation is applied to, to the symbol referred. */ 13185 pcrval = (symval 13186 - (sec->output_section->vma + sec->output_offset) 13187 - irel->r_offset); 13188 13189 /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation 13190 of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or 13191 R_MICROMIPS_PC23_S2. The R_MICROMIPS_PC23_S2 condition is 13192 13193 (symval % 4 == 0 && IS_BITSIZE (pcrval, 25)) 13194 13195 where pcrval has first to be adjusted to apply against the LO16 13196 location (we make the adjustment later on, when we have figured 13197 out the offset). */ 13198 if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn)) 13199 { 13200 bfd_boolean bzc = FALSE; 13201 unsigned long nextopc; 13202 unsigned long reg; 13203 bfd_vma offset; 13204 13205 /* Give up if the previous reloc was a HI16 against this symbol 13206 too. */ 13207 if (irel > internal_relocs 13208 && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16 13209 && ELF32_R_SYM (irel[-1].r_info) == r_symndx) 13210 continue; 13211 13212 /* Or if the next reloc is not a LO16 against this symbol. */ 13213 if (irel + 1 >= irelend 13214 || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16 13215 || ELF32_R_SYM (irel[1].r_info) != r_symndx) 13216 continue; 13217 13218 /* Or if the second next reloc is a LO16 against this symbol too. */ 13219 if (irel + 2 >= irelend 13220 && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16 13221 && ELF32_R_SYM (irel[2].r_info) == r_symndx) 13222 continue; 13223 13224 /* See if the LUI instruction *might* be in a branch delay slot. 13225 We check whether what looks like a 16-bit branch or jump is 13226 actually an immediate argument to a compact branch, and let 13227 it through if so. */ 13228 if (irel->r_offset >= 2 13229 && check_br16_dslot (abfd, ptr - 2) 13230 && !(irel->r_offset >= 4 13231 && (bzc = check_relocated_bzc (abfd, 13232 ptr - 4, irel->r_offset - 4, 13233 internal_relocs, irelend)))) 13234 continue; 13235 if (irel->r_offset >= 4 13236 && !bzc 13237 && check_br32_dslot (abfd, ptr - 4)) 13238 continue; 13239 13240 reg = OP32_SREG (opcode); 13241 13242 /* We only relax adjacent instructions or ones separated with 13243 a branch or jump that has a delay slot. The branch or jump 13244 must not fiddle with the register used to hold the address. 13245 Subtract 4 for the LUI itself. */ 13246 offset = irel[1].r_offset - irel[0].r_offset; 13247 switch (offset - 4) 13248 { 13249 case 0: 13250 break; 13251 case 2: 13252 if (check_br16 (abfd, ptr + 4, reg)) 13253 break; 13254 continue; 13255 case 4: 13256 if (check_br32 (abfd, ptr + 4, reg)) 13257 break; 13258 continue; 13259 default: 13260 continue; 13261 } 13262 13263 nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset); 13264 13265 /* Give up unless the same register is used with both 13266 relocations. */ 13267 if (OP32_SREG (nextopc) != reg) 13268 continue; 13269 13270 /* Now adjust pcrval, subtracting the offset to the LO16 reloc 13271 and rounding up to take masking of the two LSBs into account. */ 13272 pcrval = ((pcrval - offset + 3) | 3) ^ 3; 13273 13274 /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16. */ 13275 if (IS_BITSIZE (symval, 16)) 13276 { 13277 /* Fix the relocation's type. */ 13278 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16); 13279 13280 /* Instructions using R_MICROMIPS_LO16 have the base or 13281 source register in bits 20:16. This register becomes $0 13282 (zero) as the result of the R_MICROMIPS_HI16 being 0. */ 13283 nextopc &= ~0x001f0000; 13284 bfd_put_16 (abfd, (nextopc >> 16) & 0xffff, 13285 contents + irel[1].r_offset); 13286 } 13287 13288 /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2. 13289 We add 4 to take LUI deletion into account while checking 13290 the PC-relative distance. */ 13291 else if (symval % 4 == 0 13292 && IS_BITSIZE (pcrval + 4, 25) 13293 && MATCH (nextopc, addiu_insn) 13294 && OP32_TREG (nextopc) == OP32_SREG (nextopc) 13295 && OP16_VALID_REG (OP32_TREG (nextopc))) 13296 { 13297 /* Fix the relocation's type. */ 13298 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2); 13299 13300 /* Replace ADDIU with the ADDIUPC version. */ 13301 nextopc = (addiupc_insn.match 13302 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc))); 13303 13304 bfd_put_micromips_32 (abfd, nextopc, 13305 contents + irel[1].r_offset); 13306 } 13307 13308 /* Can't do anything, give up, sigh... */ 13309 else 13310 continue; 13311 13312 /* Fix the relocation's type. */ 13313 irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE); 13314 13315 /* Delete the LUI instruction: 4 bytes at irel->r_offset. */ 13316 delcnt = 4; 13317 deloff = 0; 13318 } 13319 13320 /* Compact branch relaxation -- due to the multitude of macros 13321 employed by the compiler/assembler, compact branches are not 13322 always generated. Obviously, this can/will be fixed elsewhere, 13323 but there is no drawback in double checking it here. */ 13324 else if (r_type == R_MICROMIPS_PC16_S1 13325 && irel->r_offset + 5 < sec->size 13326 && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0 13327 || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0) 13328 && ((!insn32 13329 && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4), 13330 nop_insn_16) ? 2 : 0)) 13331 || (irel->r_offset + 7 < sec->size 13332 && (delcnt = MATCH (bfd_get_micromips_32 (abfd, 13333 ptr + 4), 13334 nop_insn_32) ? 4 : 0)))) 13335 { 13336 unsigned long reg; 13337 13338 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode); 13339 13340 /* Replace BEQZ/BNEZ with the compact version. */ 13341 opcode = (bzc_insns_32[fndopc].match 13342 | BZC32_REG_FIELD (reg) 13343 | (opcode & 0xffff)); /* Addend value. */ 13344 13345 bfd_put_micromips_32 (abfd, opcode, ptr); 13346 13347 /* Delete the delay slot NOP: two or four bytes from 13348 irel->offset + 4; delcnt has already been set above. */ 13349 deloff = 4; 13350 } 13351 13352 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1. We need 13353 to check the distance from the next instruction, so subtract 2. */ 13354 else if (!insn32 13355 && r_type == R_MICROMIPS_PC16_S1 13356 && IS_BITSIZE (pcrval - 2, 11) 13357 && find_match (opcode, b_insns_32) >= 0) 13358 { 13359 /* Fix the relocation's type. */ 13360 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1); 13361 13362 /* Replace the 32-bit opcode with a 16-bit opcode. */ 13363 bfd_put_16 (abfd, 13364 (b_insn_16.match 13365 | (opcode & 0x3ff)), /* Addend value. */ 13366 ptr); 13367 13368 /* Delete 2 bytes from irel->r_offset + 2. */ 13369 delcnt = 2; 13370 deloff = 2; 13371 } 13372 13373 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1. We need 13374 to check the distance from the next instruction, so subtract 2. */ 13375 else if (!insn32 13376 && r_type == R_MICROMIPS_PC16_S1 13377 && IS_BITSIZE (pcrval - 2, 8) 13378 && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0 13379 && OP16_VALID_REG (OP32_SREG (opcode))) 13380 || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0 13381 && OP16_VALID_REG (OP32_TREG (opcode))))) 13382 { 13383 unsigned long reg; 13384 13385 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode); 13386 13387 /* Fix the relocation's type. */ 13388 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1); 13389 13390 /* Replace the 32-bit opcode with a 16-bit opcode. */ 13391 bfd_put_16 (abfd, 13392 (bz_insns_16[fndopc].match 13393 | BZ16_REG_FIELD (reg) 13394 | (opcode & 0x7f)), /* Addend value. */ 13395 ptr); 13396 13397 /* Delete 2 bytes from irel->r_offset + 2. */ 13398 delcnt = 2; 13399 deloff = 2; 13400 } 13401 13402 /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets. */ 13403 else if (!insn32 13404 && r_type == R_MICROMIPS_26_S1 13405 && target_is_micromips_code_p 13406 && irel->r_offset + 7 < sec->size 13407 && MATCH (opcode, jal_insn_32_bd32)) 13408 { 13409 unsigned long n32opc; 13410 bfd_boolean relaxed = FALSE; 13411 13412 n32opc = bfd_get_micromips_32 (abfd, ptr + 4); 13413 13414 if (MATCH (n32opc, nop_insn_32)) 13415 { 13416 /* Replace delay slot 32-bit NOP with a 16-bit NOP. */ 13417 bfd_put_16 (abfd, nop_insn_16.match, ptr + 4); 13418 13419 relaxed = TRUE; 13420 } 13421 else if (find_match (n32opc, move_insns_32) >= 0) 13422 { 13423 /* Replace delay slot 32-bit MOVE with 16-bit MOVE. */ 13424 bfd_put_16 (abfd, 13425 (move_insn_16.match 13426 | MOVE16_RD_FIELD (MOVE32_RD (n32opc)) 13427 | MOVE16_RS_FIELD (MOVE32_RS (n32opc))), 13428 ptr + 4); 13429 13430 relaxed = TRUE; 13431 } 13432 /* Other 32-bit instructions relaxable to 16-bit 13433 instructions will be handled here later. */ 13434 13435 if (relaxed) 13436 { 13437 /* JAL with 32-bit delay slot that is changed to a JALS 13438 with 16-bit delay slot. */ 13439 bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr); 13440 13441 /* Delete 2 bytes from irel->r_offset + 6. */ 13442 delcnt = 2; 13443 deloff = 6; 13444 } 13445 } 13446 13447 if (delcnt != 0) 13448 { 13449 /* Note that we've changed the relocs, section contents, etc. */ 13450 elf_section_data (sec)->relocs = internal_relocs; 13451 elf_section_data (sec)->this_hdr.contents = contents; 13452 symtab_hdr->contents = (unsigned char *) isymbuf; 13453 13454 /* Delete bytes depending on the delcnt and deloff. */ 13455 if (!mips_elf_relax_delete_bytes (abfd, sec, 13456 irel->r_offset + deloff, delcnt)) 13457 goto error_return; 13458 13459 /* That will change things, so we should relax again. 13460 Note that this is not required, and it may be slow. */ 13461 *again = TRUE; 13462 } 13463 } 13464 13465 if (isymbuf != NULL 13466 && symtab_hdr->contents != (unsigned char *) isymbuf) 13467 { 13468 if (! link_info->keep_memory) 13469 free (isymbuf); 13470 else 13471 { 13472 /* Cache the symbols for elf_link_input_bfd. */ 13473 symtab_hdr->contents = (unsigned char *) isymbuf; 13474 } 13475 } 13476 13477 if (contents != NULL 13478 && elf_section_data (sec)->this_hdr.contents != contents) 13479 { 13480 if (! link_info->keep_memory) 13481 free (contents); 13482 else 13483 { 13484 /* Cache the section contents for elf_link_input_bfd. */ 13485 elf_section_data (sec)->this_hdr.contents = contents; 13486 } 13487 } 13488 13489 if (internal_relocs != NULL 13490 && elf_section_data (sec)->relocs != internal_relocs) 13491 free (internal_relocs); 13492 13493 return TRUE; 13494 13495 error_return: 13496 if (isymbuf != NULL 13497 && symtab_hdr->contents != (unsigned char *) isymbuf) 13498 free (isymbuf); 13499 if (contents != NULL 13500 && elf_section_data (sec)->this_hdr.contents != contents) 13501 free (contents); 13502 if (internal_relocs != NULL 13503 && elf_section_data (sec)->relocs != internal_relocs) 13504 free (internal_relocs); 13505 13506 return FALSE; 13507 } 13508 13509 /* Create a MIPS ELF linker hash table. */ 13510 13511 struct bfd_link_hash_table * 13512 _bfd_mips_elf_link_hash_table_create (bfd *abfd) 13513 { 13514 struct mips_elf_link_hash_table *ret; 13515 bfd_size_type amt = sizeof (struct mips_elf_link_hash_table); 13516 13517 ret = bfd_zmalloc (amt); 13518 if (ret == NULL) 13519 return NULL; 13520 13521 if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, 13522 mips_elf_link_hash_newfunc, 13523 sizeof (struct mips_elf_link_hash_entry), 13524 MIPS_ELF_DATA)) 13525 { 13526 free (ret); 13527 return NULL; 13528 } 13529 ret->root.init_plt_refcount.plist = NULL; 13530 ret->root.init_plt_offset.plist = NULL; 13531 13532 return &ret->root.root; 13533 } 13534 13535 /* Likewise, but indicate that the target is VxWorks. */ 13536 13537 struct bfd_link_hash_table * 13538 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd) 13539 { 13540 struct bfd_link_hash_table *ret; 13541 13542 ret = _bfd_mips_elf_link_hash_table_create (abfd); 13543 if (ret) 13544 { 13545 struct mips_elf_link_hash_table *htab; 13546 13547 htab = (struct mips_elf_link_hash_table *) ret; 13548 htab->use_plts_and_copy_relocs = TRUE; 13549 htab->is_vxworks = TRUE; 13550 } 13551 return ret; 13552 } 13553 13554 /* A function that the linker calls if we are allowed to use PLTs 13555 and copy relocs. */ 13556 13557 void 13558 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info) 13559 { 13560 mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE; 13561 } 13562 13563 /* A function that the linker calls to select between all or only 13564 32-bit microMIPS instructions. */ 13565 13566 void 13567 _bfd_mips_elf_insn32 (struct bfd_link_info *info, bfd_boolean on) 13568 { 13569 mips_elf_hash_table (info)->insn32 = on; 13570 } 13571 13572 /* We need to use a special link routine to handle the .reginfo and 13573 the .mdebug sections. We need to merge all instances of these 13574 sections together, not write them all out sequentially. */ 13575 13576 bfd_boolean 13577 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info) 13578 { 13579 asection *o; 13580 struct bfd_link_order *p; 13581 asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec; 13582 asection *rtproc_sec; 13583 Elf32_RegInfo reginfo; 13584 struct ecoff_debug_info debug; 13585 struct mips_htab_traverse_info hti; 13586 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 13587 const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap; 13588 HDRR *symhdr = &debug.symbolic_header; 13589 void *mdebug_handle = NULL; 13590 asection *s; 13591 EXTR esym; 13592 unsigned int i; 13593 bfd_size_type amt; 13594 struct mips_elf_link_hash_table *htab; 13595 13596 static const char * const secname[] = 13597 { 13598 ".text", ".init", ".fini", ".data", 13599 ".rodata", ".sdata", ".sbss", ".bss" 13600 }; 13601 static const int sc[] = 13602 { 13603 scText, scInit, scFini, scData, 13604 scRData, scSData, scSBss, scBss 13605 }; 13606 13607 /* Sort the dynamic symbols so that those with GOT entries come after 13608 those without. */ 13609 htab = mips_elf_hash_table (info); 13610 BFD_ASSERT (htab != NULL); 13611 13612 if (!mips_elf_sort_hash_table (abfd, info)) 13613 return FALSE; 13614 13615 /* Create any scheduled LA25 stubs. */ 13616 hti.info = info; 13617 hti.output_bfd = abfd; 13618 hti.error = FALSE; 13619 htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti); 13620 if (hti.error) 13621 return FALSE; 13622 13623 /* Get a value for the GP register. */ 13624 if (elf_gp (abfd) == 0) 13625 { 13626 struct bfd_link_hash_entry *h; 13627 13628 h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE); 13629 if (h != NULL && h->type == bfd_link_hash_defined) 13630 elf_gp (abfd) = (h->u.def.value 13631 + h->u.def.section->output_section->vma 13632 + h->u.def.section->output_offset); 13633 else if (htab->is_vxworks 13634 && (h = bfd_link_hash_lookup (info->hash, 13635 "_GLOBAL_OFFSET_TABLE_", 13636 FALSE, FALSE, TRUE)) 13637 && h->type == bfd_link_hash_defined) 13638 elf_gp (abfd) = (h->u.def.section->output_section->vma 13639 + h->u.def.section->output_offset 13640 + h->u.def.value); 13641 else if (info->relocatable) 13642 { 13643 bfd_vma lo = MINUS_ONE; 13644 13645 /* Find the GP-relative section with the lowest offset. */ 13646 for (o = abfd->sections; o != NULL; o = o->next) 13647 if (o->vma < lo 13648 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL)) 13649 lo = o->vma; 13650 13651 /* And calculate GP relative to that. */ 13652 elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info); 13653 } 13654 else 13655 { 13656 /* If the relocate_section function needs to do a reloc 13657 involving the GP value, it should make a reloc_dangerous 13658 callback to warn that GP is not defined. */ 13659 } 13660 } 13661 13662 /* Go through the sections and collect the .reginfo and .mdebug 13663 information. */ 13664 reginfo_sec = NULL; 13665 mdebug_sec = NULL; 13666 gptab_data_sec = NULL; 13667 gptab_bss_sec = NULL; 13668 for (o = abfd->sections; o != NULL; o = o->next) 13669 { 13670 if (strcmp (o->name, ".reginfo") == 0) 13671 { 13672 memset (®info, 0, sizeof reginfo); 13673 13674 /* We have found the .reginfo section in the output file. 13675 Look through all the link_orders comprising it and merge 13676 the information together. */ 13677 for (p = o->map_head.link_order; p != NULL; p = p->next) 13678 { 13679 asection *input_section; 13680 bfd *input_bfd; 13681 Elf32_External_RegInfo ext; 13682 Elf32_RegInfo sub; 13683 13684 if (p->type != bfd_indirect_link_order) 13685 { 13686 if (p->type == bfd_data_link_order) 13687 continue; 13688 abort (); 13689 } 13690 13691 input_section = p->u.indirect.section; 13692 input_bfd = input_section->owner; 13693 13694 if (! bfd_get_section_contents (input_bfd, input_section, 13695 &ext, 0, sizeof ext)) 13696 return FALSE; 13697 13698 bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub); 13699 13700 reginfo.ri_gprmask |= sub.ri_gprmask; 13701 reginfo.ri_cprmask[0] |= sub.ri_cprmask[0]; 13702 reginfo.ri_cprmask[1] |= sub.ri_cprmask[1]; 13703 reginfo.ri_cprmask[2] |= sub.ri_cprmask[2]; 13704 reginfo.ri_cprmask[3] |= sub.ri_cprmask[3]; 13705 13706 /* ri_gp_value is set by the function 13707 mips_elf32_section_processing when the section is 13708 finally written out. */ 13709 13710 /* Hack: reset the SEC_HAS_CONTENTS flag so that 13711 elf_link_input_bfd ignores this section. */ 13712 input_section->flags &= ~SEC_HAS_CONTENTS; 13713 } 13714 13715 /* Size has been set in _bfd_mips_elf_always_size_sections. */ 13716 BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo)); 13717 13718 /* Skip this section later on (I don't think this currently 13719 matters, but someday it might). */ 13720 o->map_head.link_order = NULL; 13721 13722 reginfo_sec = o; 13723 } 13724 13725 if (strcmp (o->name, ".mdebug") == 0) 13726 { 13727 struct extsym_info einfo; 13728 bfd_vma last; 13729 13730 /* We have found the .mdebug section in the output file. 13731 Look through all the link_orders comprising it and merge 13732 the information together. */ 13733 symhdr->magic = swap->sym_magic; 13734 /* FIXME: What should the version stamp be? */ 13735 symhdr->vstamp = 0; 13736 symhdr->ilineMax = 0; 13737 symhdr->cbLine = 0; 13738 symhdr->idnMax = 0; 13739 symhdr->ipdMax = 0; 13740 symhdr->isymMax = 0; 13741 symhdr->ioptMax = 0; 13742 symhdr->iauxMax = 0; 13743 symhdr->issMax = 0; 13744 symhdr->issExtMax = 0; 13745 symhdr->ifdMax = 0; 13746 symhdr->crfd = 0; 13747 symhdr->iextMax = 0; 13748 13749 /* We accumulate the debugging information itself in the 13750 debug_info structure. */ 13751 debug.line = NULL; 13752 debug.external_dnr = NULL; 13753 debug.external_pdr = NULL; 13754 debug.external_sym = NULL; 13755 debug.external_opt = NULL; 13756 debug.external_aux = NULL; 13757 debug.ss = NULL; 13758 debug.ssext = debug.ssext_end = NULL; 13759 debug.external_fdr = NULL; 13760 debug.external_rfd = NULL; 13761 debug.external_ext = debug.external_ext_end = NULL; 13762 13763 mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info); 13764 if (mdebug_handle == NULL) 13765 return FALSE; 13766 13767 esym.jmptbl = 0; 13768 esym.cobol_main = 0; 13769 esym.weakext = 0; 13770 esym.reserved = 0; 13771 esym.ifd = ifdNil; 13772 esym.asym.iss = issNil; 13773 esym.asym.st = stLocal; 13774 esym.asym.reserved = 0; 13775 esym.asym.index = indexNil; 13776 last = 0; 13777 for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++) 13778 { 13779 esym.asym.sc = sc[i]; 13780 s = bfd_get_section_by_name (abfd, secname[i]); 13781 if (s != NULL) 13782 { 13783 esym.asym.value = s->vma; 13784 last = s->vma + s->size; 13785 } 13786 else 13787 esym.asym.value = last; 13788 if (!bfd_ecoff_debug_one_external (abfd, &debug, swap, 13789 secname[i], &esym)) 13790 return FALSE; 13791 } 13792 13793 for (p = o->map_head.link_order; p != NULL; p = p->next) 13794 { 13795 asection *input_section; 13796 bfd *input_bfd; 13797 const struct ecoff_debug_swap *input_swap; 13798 struct ecoff_debug_info input_debug; 13799 char *eraw_src; 13800 char *eraw_end; 13801 13802 if (p->type != bfd_indirect_link_order) 13803 { 13804 if (p->type == bfd_data_link_order) 13805 continue; 13806 abort (); 13807 } 13808 13809 input_section = p->u.indirect.section; 13810 input_bfd = input_section->owner; 13811 13812 if (!is_mips_elf (input_bfd)) 13813 { 13814 /* I don't know what a non MIPS ELF bfd would be 13815 doing with a .mdebug section, but I don't really 13816 want to deal with it. */ 13817 continue; 13818 } 13819 13820 input_swap = (get_elf_backend_data (input_bfd) 13821 ->elf_backend_ecoff_debug_swap); 13822 13823 BFD_ASSERT (p->size == input_section->size); 13824 13825 /* The ECOFF linking code expects that we have already 13826 read in the debugging information and set up an 13827 ecoff_debug_info structure, so we do that now. */ 13828 if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section, 13829 &input_debug)) 13830 return FALSE; 13831 13832 if (! (bfd_ecoff_debug_accumulate 13833 (mdebug_handle, abfd, &debug, swap, input_bfd, 13834 &input_debug, input_swap, info))) 13835 return FALSE; 13836 13837 /* Loop through the external symbols. For each one with 13838 interesting information, try to find the symbol in 13839 the linker global hash table and save the information 13840 for the output external symbols. */ 13841 eraw_src = input_debug.external_ext; 13842 eraw_end = (eraw_src 13843 + (input_debug.symbolic_header.iextMax 13844 * input_swap->external_ext_size)); 13845 for (; 13846 eraw_src < eraw_end; 13847 eraw_src += input_swap->external_ext_size) 13848 { 13849 EXTR ext; 13850 const char *name; 13851 struct mips_elf_link_hash_entry *h; 13852 13853 (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext); 13854 if (ext.asym.sc == scNil 13855 || ext.asym.sc == scUndefined 13856 || ext.asym.sc == scSUndefined) 13857 continue; 13858 13859 name = input_debug.ssext + ext.asym.iss; 13860 h = mips_elf_link_hash_lookup (mips_elf_hash_table (info), 13861 name, FALSE, FALSE, TRUE); 13862 if (h == NULL || h->esym.ifd != -2) 13863 continue; 13864 13865 if (ext.ifd != -1) 13866 { 13867 BFD_ASSERT (ext.ifd 13868 < input_debug.symbolic_header.ifdMax); 13869 ext.ifd = input_debug.ifdmap[ext.ifd]; 13870 } 13871 13872 h->esym = ext; 13873 } 13874 13875 /* Free up the information we just read. */ 13876 free (input_debug.line); 13877 free (input_debug.external_dnr); 13878 free (input_debug.external_pdr); 13879 free (input_debug.external_sym); 13880 free (input_debug.external_opt); 13881 free (input_debug.external_aux); 13882 free (input_debug.ss); 13883 free (input_debug.ssext); 13884 free (input_debug.external_fdr); 13885 free (input_debug.external_rfd); 13886 free (input_debug.external_ext); 13887 13888 /* Hack: reset the SEC_HAS_CONTENTS flag so that 13889 elf_link_input_bfd ignores this section. */ 13890 input_section->flags &= ~SEC_HAS_CONTENTS; 13891 } 13892 13893 if (SGI_COMPAT (abfd) && info->shared) 13894 { 13895 /* Create .rtproc section. */ 13896 rtproc_sec = bfd_get_linker_section (abfd, ".rtproc"); 13897 if (rtproc_sec == NULL) 13898 { 13899 flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY 13900 | SEC_LINKER_CREATED | SEC_READONLY); 13901 13902 rtproc_sec = bfd_make_section_anyway_with_flags (abfd, 13903 ".rtproc", 13904 flags); 13905 if (rtproc_sec == NULL 13906 || ! bfd_set_section_alignment (abfd, rtproc_sec, 4)) 13907 return FALSE; 13908 } 13909 13910 if (! mips_elf_create_procedure_table (mdebug_handle, abfd, 13911 info, rtproc_sec, 13912 &debug)) 13913 return FALSE; 13914 } 13915 13916 /* Build the external symbol information. */ 13917 einfo.abfd = abfd; 13918 einfo.info = info; 13919 einfo.debug = &debug; 13920 einfo.swap = swap; 13921 einfo.failed = FALSE; 13922 mips_elf_link_hash_traverse (mips_elf_hash_table (info), 13923 mips_elf_output_extsym, &einfo); 13924 if (einfo.failed) 13925 return FALSE; 13926 13927 /* Set the size of the .mdebug section. */ 13928 o->size = bfd_ecoff_debug_size (abfd, &debug, swap); 13929 13930 /* Skip this section later on (I don't think this currently 13931 matters, but someday it might). */ 13932 o->map_head.link_order = NULL; 13933 13934 mdebug_sec = o; 13935 } 13936 13937 if (CONST_STRNEQ (o->name, ".gptab.")) 13938 { 13939 const char *subname; 13940 unsigned int c; 13941 Elf32_gptab *tab; 13942 Elf32_External_gptab *ext_tab; 13943 unsigned int j; 13944 13945 /* The .gptab.sdata and .gptab.sbss sections hold 13946 information describing how the small data area would 13947 change depending upon the -G switch. These sections 13948 not used in executables files. */ 13949 if (! info->relocatable) 13950 { 13951 for (p = o->map_head.link_order; p != NULL; p = p->next) 13952 { 13953 asection *input_section; 13954 13955 if (p->type != bfd_indirect_link_order) 13956 { 13957 if (p->type == bfd_data_link_order) 13958 continue; 13959 abort (); 13960 } 13961 13962 input_section = p->u.indirect.section; 13963 13964 /* Hack: reset the SEC_HAS_CONTENTS flag so that 13965 elf_link_input_bfd ignores this section. */ 13966 input_section->flags &= ~SEC_HAS_CONTENTS; 13967 } 13968 13969 /* Skip this section later on (I don't think this 13970 currently matters, but someday it might). */ 13971 o->map_head.link_order = NULL; 13972 13973 /* Really remove the section. */ 13974 bfd_section_list_remove (abfd, o); 13975 --abfd->section_count; 13976 13977 continue; 13978 } 13979 13980 /* There is one gptab for initialized data, and one for 13981 uninitialized data. */ 13982 if (strcmp (o->name, ".gptab.sdata") == 0) 13983 gptab_data_sec = o; 13984 else if (strcmp (o->name, ".gptab.sbss") == 0) 13985 gptab_bss_sec = o; 13986 else 13987 { 13988 (*_bfd_error_handler) 13989 (_("%s: illegal section name `%s'"), 13990 bfd_get_filename (abfd), o->name); 13991 bfd_set_error (bfd_error_nonrepresentable_section); 13992 return FALSE; 13993 } 13994 13995 /* The linker script always combines .gptab.data and 13996 .gptab.sdata into .gptab.sdata, and likewise for 13997 .gptab.bss and .gptab.sbss. It is possible that there is 13998 no .sdata or .sbss section in the output file, in which 13999 case we must change the name of the output section. */ 14000 subname = o->name + sizeof ".gptab" - 1; 14001 if (bfd_get_section_by_name (abfd, subname) == NULL) 14002 { 14003 if (o == gptab_data_sec) 14004 o->name = ".gptab.data"; 14005 else 14006 o->name = ".gptab.bss"; 14007 subname = o->name + sizeof ".gptab" - 1; 14008 BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL); 14009 } 14010 14011 /* Set up the first entry. */ 14012 c = 1; 14013 amt = c * sizeof (Elf32_gptab); 14014 tab = bfd_malloc (amt); 14015 if (tab == NULL) 14016 return FALSE; 14017 tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd); 14018 tab[0].gt_header.gt_unused = 0; 14019 14020 /* Combine the input sections. */ 14021 for (p = o->map_head.link_order; p != NULL; p = p->next) 14022 { 14023 asection *input_section; 14024 bfd *input_bfd; 14025 bfd_size_type size; 14026 unsigned long last; 14027 bfd_size_type gpentry; 14028 14029 if (p->type != bfd_indirect_link_order) 14030 { 14031 if (p->type == bfd_data_link_order) 14032 continue; 14033 abort (); 14034 } 14035 14036 input_section = p->u.indirect.section; 14037 input_bfd = input_section->owner; 14038 14039 /* Combine the gptab entries for this input section one 14040 by one. We know that the input gptab entries are 14041 sorted by ascending -G value. */ 14042 size = input_section->size; 14043 last = 0; 14044 for (gpentry = sizeof (Elf32_External_gptab); 14045 gpentry < size; 14046 gpentry += sizeof (Elf32_External_gptab)) 14047 { 14048 Elf32_External_gptab ext_gptab; 14049 Elf32_gptab int_gptab; 14050 unsigned long val; 14051 unsigned long add; 14052 bfd_boolean exact; 14053 unsigned int look; 14054 14055 if (! (bfd_get_section_contents 14056 (input_bfd, input_section, &ext_gptab, gpentry, 14057 sizeof (Elf32_External_gptab)))) 14058 { 14059 free (tab); 14060 return FALSE; 14061 } 14062 14063 bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab, 14064 &int_gptab); 14065 val = int_gptab.gt_entry.gt_g_value; 14066 add = int_gptab.gt_entry.gt_bytes - last; 14067 14068 exact = FALSE; 14069 for (look = 1; look < c; look++) 14070 { 14071 if (tab[look].gt_entry.gt_g_value >= val) 14072 tab[look].gt_entry.gt_bytes += add; 14073 14074 if (tab[look].gt_entry.gt_g_value == val) 14075 exact = TRUE; 14076 } 14077 14078 if (! exact) 14079 { 14080 Elf32_gptab *new_tab; 14081 unsigned int max; 14082 14083 /* We need a new table entry. */ 14084 amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab); 14085 new_tab = bfd_realloc (tab, amt); 14086 if (new_tab == NULL) 14087 { 14088 free (tab); 14089 return FALSE; 14090 } 14091 tab = new_tab; 14092 tab[c].gt_entry.gt_g_value = val; 14093 tab[c].gt_entry.gt_bytes = add; 14094 14095 /* Merge in the size for the next smallest -G 14096 value, since that will be implied by this new 14097 value. */ 14098 max = 0; 14099 for (look = 1; look < c; look++) 14100 { 14101 if (tab[look].gt_entry.gt_g_value < val 14102 && (max == 0 14103 || (tab[look].gt_entry.gt_g_value 14104 > tab[max].gt_entry.gt_g_value))) 14105 max = look; 14106 } 14107 if (max != 0) 14108 tab[c].gt_entry.gt_bytes += 14109 tab[max].gt_entry.gt_bytes; 14110 14111 ++c; 14112 } 14113 14114 last = int_gptab.gt_entry.gt_bytes; 14115 } 14116 14117 /* Hack: reset the SEC_HAS_CONTENTS flag so that 14118 elf_link_input_bfd ignores this section. */ 14119 input_section->flags &= ~SEC_HAS_CONTENTS; 14120 } 14121 14122 /* The table must be sorted by -G value. */ 14123 if (c > 2) 14124 qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare); 14125 14126 /* Swap out the table. */ 14127 amt = (bfd_size_type) c * sizeof (Elf32_External_gptab); 14128 ext_tab = bfd_alloc (abfd, amt); 14129 if (ext_tab == NULL) 14130 { 14131 free (tab); 14132 return FALSE; 14133 } 14134 14135 for (j = 0; j < c; j++) 14136 bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j); 14137 free (tab); 14138 14139 o->size = c * sizeof (Elf32_External_gptab); 14140 o->contents = (bfd_byte *) ext_tab; 14141 14142 /* Skip this section later on (I don't think this currently 14143 matters, but someday it might). */ 14144 o->map_head.link_order = NULL; 14145 } 14146 } 14147 14148 /* Invoke the regular ELF backend linker to do all the work. */ 14149 if (!bfd_elf_final_link (abfd, info)) 14150 return FALSE; 14151 14152 /* Now write out the computed sections. */ 14153 14154 if (reginfo_sec != NULL) 14155 { 14156 Elf32_External_RegInfo ext; 14157 14158 bfd_mips_elf32_swap_reginfo_out (abfd, ®info, &ext); 14159 if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext)) 14160 return FALSE; 14161 } 14162 14163 if (mdebug_sec != NULL) 14164 { 14165 BFD_ASSERT (abfd->output_has_begun); 14166 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug, 14167 swap, info, 14168 mdebug_sec->filepos)) 14169 return FALSE; 14170 14171 bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info); 14172 } 14173 14174 if (gptab_data_sec != NULL) 14175 { 14176 if (! bfd_set_section_contents (abfd, gptab_data_sec, 14177 gptab_data_sec->contents, 14178 0, gptab_data_sec->size)) 14179 return FALSE; 14180 } 14181 14182 if (gptab_bss_sec != NULL) 14183 { 14184 if (! bfd_set_section_contents (abfd, gptab_bss_sec, 14185 gptab_bss_sec->contents, 14186 0, gptab_bss_sec->size)) 14187 return FALSE; 14188 } 14189 14190 if (SGI_COMPAT (abfd)) 14191 { 14192 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc"); 14193 if (rtproc_sec != NULL) 14194 { 14195 if (! bfd_set_section_contents (abfd, rtproc_sec, 14196 rtproc_sec->contents, 14197 0, rtproc_sec->size)) 14198 return FALSE; 14199 } 14200 } 14201 14202 return TRUE; 14203 } 14204 14205 /* Structure for saying that BFD machine EXTENSION extends BASE. */ 14206 14207 struct mips_mach_extension 14208 { 14209 unsigned long extension, base; 14210 }; 14211 14212 14213 /* An array describing how BFD machines relate to one another. The entries 14214 are ordered topologically with MIPS I extensions listed last. */ 14215 14216 static const struct mips_mach_extension mips_mach_extensions[] = 14217 { 14218 /* MIPS64r2 extensions. */ 14219 { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp }, 14220 { bfd_mach_mips_octeonp, bfd_mach_mips_octeon }, 14221 { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 }, 14222 14223 /* MIPS64 extensions. */ 14224 { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 }, 14225 { bfd_mach_mips_sb1, bfd_mach_mipsisa64 }, 14226 { bfd_mach_mips_xlr, bfd_mach_mipsisa64 }, 14227 { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 }, 14228 14229 /* MIPS V extensions. */ 14230 { bfd_mach_mipsisa64, bfd_mach_mips5 }, 14231 14232 /* R10000 extensions. */ 14233 { bfd_mach_mips12000, bfd_mach_mips10000 }, 14234 { bfd_mach_mips14000, bfd_mach_mips10000 }, 14235 { bfd_mach_mips16000, bfd_mach_mips10000 }, 14236 14237 /* R5000 extensions. Note: the vr5500 ISA is an extension of the core 14238 vr5400 ISA, but doesn't include the multimedia stuff. It seems 14239 better to allow vr5400 and vr5500 code to be merged anyway, since 14240 many libraries will just use the core ISA. Perhaps we could add 14241 some sort of ASE flag if this ever proves a problem. */ 14242 { bfd_mach_mips5500, bfd_mach_mips5400 }, 14243 { bfd_mach_mips5400, bfd_mach_mips5000 }, 14244 14245 /* MIPS IV extensions. */ 14246 { bfd_mach_mips5, bfd_mach_mips8000 }, 14247 { bfd_mach_mips10000, bfd_mach_mips8000 }, 14248 { bfd_mach_mips5000, bfd_mach_mips8000 }, 14249 { bfd_mach_mips7000, bfd_mach_mips8000 }, 14250 { bfd_mach_mips9000, bfd_mach_mips8000 }, 14251 14252 /* VR4100 extensions. */ 14253 { bfd_mach_mips4120, bfd_mach_mips4100 }, 14254 { bfd_mach_mips4111, bfd_mach_mips4100 }, 14255 14256 /* MIPS III extensions. */ 14257 { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 }, 14258 { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 }, 14259 { bfd_mach_mips8000, bfd_mach_mips4000 }, 14260 { bfd_mach_mips4650, bfd_mach_mips4000 }, 14261 { bfd_mach_mips4600, bfd_mach_mips4000 }, 14262 { bfd_mach_mips4400, bfd_mach_mips4000 }, 14263 { bfd_mach_mips4300, bfd_mach_mips4000 }, 14264 { bfd_mach_mips4100, bfd_mach_mips4000 }, 14265 { bfd_mach_mips4010, bfd_mach_mips4000 }, 14266 { bfd_mach_mips5900, bfd_mach_mips4000 }, 14267 14268 /* MIPS32 extensions. */ 14269 { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 }, 14270 14271 /* MIPS II extensions. */ 14272 { bfd_mach_mips4000, bfd_mach_mips6000 }, 14273 { bfd_mach_mipsisa32, bfd_mach_mips6000 }, 14274 14275 /* MIPS I extensions. */ 14276 { bfd_mach_mips6000, bfd_mach_mips3000 }, 14277 { bfd_mach_mips3900, bfd_mach_mips3000 } 14278 }; 14279 14280 14281 /* Return true if bfd machine EXTENSION is an extension of machine BASE. */ 14282 14283 static bfd_boolean 14284 mips_mach_extends_p (unsigned long base, unsigned long extension) 14285 { 14286 size_t i; 14287 14288 if (extension == base) 14289 return TRUE; 14290 14291 if (base == bfd_mach_mipsisa32 14292 && mips_mach_extends_p (bfd_mach_mipsisa64, extension)) 14293 return TRUE; 14294 14295 if (base == bfd_mach_mipsisa32r2 14296 && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension)) 14297 return TRUE; 14298 14299 for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++) 14300 if (extension == mips_mach_extensions[i].extension) 14301 { 14302 extension = mips_mach_extensions[i].base; 14303 if (extension == base) 14304 return TRUE; 14305 } 14306 14307 return FALSE; 14308 } 14309 14310 14311 /* Return true if the given ELF header flags describe a 32-bit binary. */ 14312 14313 static bfd_boolean 14314 mips_32bit_flags_p (flagword flags) 14315 { 14316 return ((flags & EF_MIPS_32BITMODE) != 0 14317 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32 14318 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32 14319 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1 14320 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2 14321 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32 14322 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2); 14323 } 14324 14325 14326 /* Merge object attributes from IBFD into OBFD. Raise an error if 14327 there are conflicting attributes. */ 14328 static bfd_boolean 14329 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd) 14330 { 14331 obj_attribute *in_attr; 14332 obj_attribute *out_attr; 14333 bfd *abi_fp_bfd; 14334 bfd *abi_msa_bfd; 14335 14336 abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd; 14337 in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU]; 14338 if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY) 14339 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd; 14340 14341 abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd; 14342 if (!abi_msa_bfd 14343 && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY) 14344 mips_elf_tdata (obfd)->abi_msa_bfd = ibfd; 14345 14346 if (!elf_known_obj_attributes_proc (obfd)[0].i) 14347 { 14348 /* This is the first object. Copy the attributes. */ 14349 _bfd_elf_copy_obj_attributes (ibfd, obfd); 14350 14351 /* Use the Tag_null value to indicate the attributes have been 14352 initialized. */ 14353 elf_known_obj_attributes_proc (obfd)[0].i = 1; 14354 14355 return TRUE; 14356 } 14357 14358 /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge 14359 non-conflicting ones. */ 14360 out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU]; 14361 if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i) 14362 { 14363 out_attr[Tag_GNU_MIPS_ABI_FP].type = 1; 14364 if (out_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY) 14365 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i; 14366 else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY) 14367 switch (out_attr[Tag_GNU_MIPS_ABI_FP].i) 14368 { 14369 case Val_GNU_MIPS_ABI_FP_DOUBLE: 14370 switch (in_attr[Tag_GNU_MIPS_ABI_FP].i) 14371 { 14372 case Val_GNU_MIPS_ABI_FP_SINGLE: 14373 _bfd_error_handler 14374 (_("Warning: %B uses %s (set by %B), %B uses %s"), 14375 obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float"); 14376 break; 14377 14378 case Val_GNU_MIPS_ABI_FP_SOFT: 14379 _bfd_error_handler 14380 (_("Warning: %B uses %s (set by %B), %B uses %s"), 14381 obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float"); 14382 break; 14383 14384 case Val_GNU_MIPS_ABI_FP_64: 14385 _bfd_error_handler 14386 (_("Warning: %B uses %s (set by %B), %B uses %s"), 14387 obfd, abi_fp_bfd, ibfd, 14388 "-mdouble-float", "-mips32r2 -mfp64"); 14389 break; 14390 14391 default: 14392 _bfd_error_handler 14393 (_("Warning: %B uses %s (set by %B), " 14394 "%B uses unknown floating point ABI %d"), 14395 obfd, abi_fp_bfd, ibfd, 14396 "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i); 14397 break; 14398 } 14399 break; 14400 14401 case Val_GNU_MIPS_ABI_FP_SINGLE: 14402 switch (in_attr[Tag_GNU_MIPS_ABI_FP].i) 14403 { 14404 case Val_GNU_MIPS_ABI_FP_DOUBLE: 14405 _bfd_error_handler 14406 (_("Warning: %B uses %s (set by %B), %B uses %s"), 14407 obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float"); 14408 break; 14409 14410 case Val_GNU_MIPS_ABI_FP_SOFT: 14411 _bfd_error_handler 14412 (_("Warning: %B uses %s (set by %B), %B uses %s"), 14413 obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float"); 14414 break; 14415 14416 case Val_GNU_MIPS_ABI_FP_64: 14417 _bfd_error_handler 14418 (_("Warning: %B uses %s (set by %B), %B uses %s"), 14419 obfd, abi_fp_bfd, ibfd, 14420 "-msingle-float", "-mips32r2 -mfp64"); 14421 break; 14422 14423 default: 14424 _bfd_error_handler 14425 (_("Warning: %B uses %s (set by %B), " 14426 "%B uses unknown floating point ABI %d"), 14427 obfd, abi_fp_bfd, ibfd, 14428 "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i); 14429 break; 14430 } 14431 break; 14432 14433 case Val_GNU_MIPS_ABI_FP_SOFT: 14434 switch (in_attr[Tag_GNU_MIPS_ABI_FP].i) 14435 { 14436 case Val_GNU_MIPS_ABI_FP_DOUBLE: 14437 case Val_GNU_MIPS_ABI_FP_SINGLE: 14438 case Val_GNU_MIPS_ABI_FP_64: 14439 _bfd_error_handler 14440 (_("Warning: %B uses %s (set by %B), %B uses %s"), 14441 obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float"); 14442 break; 14443 14444 default: 14445 _bfd_error_handler 14446 (_("Warning: %B uses %s (set by %B), " 14447 "%B uses unknown floating point ABI %d"), 14448 obfd, abi_fp_bfd, ibfd, 14449 "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i); 14450 break; 14451 } 14452 break; 14453 14454 case Val_GNU_MIPS_ABI_FP_64: 14455 switch (in_attr[Tag_GNU_MIPS_ABI_FP].i) 14456 { 14457 case Val_GNU_MIPS_ABI_FP_DOUBLE: 14458 _bfd_error_handler 14459 (_("Warning: %B uses %s (set by %B), %B uses %s"), 14460 obfd, abi_fp_bfd, ibfd, 14461 "-mips32r2 -mfp64", "-mdouble-float"); 14462 break; 14463 14464 case Val_GNU_MIPS_ABI_FP_SINGLE: 14465 _bfd_error_handler 14466 (_("Warning: %B uses %s (set by %B), %B uses %s"), 14467 obfd, abi_fp_bfd, ibfd, 14468 "-mips32r2 -mfp64", "-msingle-float"); 14469 break; 14470 14471 case Val_GNU_MIPS_ABI_FP_SOFT: 14472 _bfd_error_handler 14473 (_("Warning: %B uses %s (set by %B), %B uses %s"), 14474 obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float"); 14475 break; 14476 14477 default: 14478 _bfd_error_handler 14479 (_("Warning: %B uses %s (set by %B), " 14480 "%B uses unknown floating point ABI %d"), 14481 obfd, abi_fp_bfd, ibfd, 14482 "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i); 14483 break; 14484 } 14485 break; 14486 14487 default: 14488 switch (in_attr[Tag_GNU_MIPS_ABI_FP].i) 14489 { 14490 case Val_GNU_MIPS_ABI_FP_DOUBLE: 14491 _bfd_error_handler 14492 (_("Warning: %B uses unknown floating point ABI %d " 14493 "(set by %B), %B uses %s"), 14494 obfd, abi_fp_bfd, ibfd, 14495 out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float"); 14496 break; 14497 14498 case Val_GNU_MIPS_ABI_FP_SINGLE: 14499 _bfd_error_handler 14500 (_("Warning: %B uses unknown floating point ABI %d " 14501 "(set by %B), %B uses %s"), 14502 obfd, abi_fp_bfd, ibfd, 14503 out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float"); 14504 break; 14505 14506 case Val_GNU_MIPS_ABI_FP_SOFT: 14507 _bfd_error_handler 14508 (_("Warning: %B uses unknown floating point ABI %d " 14509 "(set by %B), %B uses %s"), 14510 obfd, abi_fp_bfd, ibfd, 14511 out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float"); 14512 break; 14513 14514 case Val_GNU_MIPS_ABI_FP_64: 14515 _bfd_error_handler 14516 (_("Warning: %B uses unknown floating point ABI %d " 14517 "(set by %B), %B uses %s"), 14518 obfd, abi_fp_bfd, ibfd, 14519 out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64"); 14520 break; 14521 14522 default: 14523 _bfd_error_handler 14524 (_("Warning: %B uses unknown floating point ABI %d " 14525 "(set by %B), %B uses unknown floating point ABI %d"), 14526 obfd, abi_fp_bfd, ibfd, 14527 out_attr[Tag_GNU_MIPS_ABI_FP].i, 14528 in_attr[Tag_GNU_MIPS_ABI_FP].i); 14529 break; 14530 } 14531 break; 14532 } 14533 } 14534 14535 /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge 14536 non-conflicting ones. */ 14537 if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i) 14538 { 14539 out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1; 14540 if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY) 14541 out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i; 14542 else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY) 14543 switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i) 14544 { 14545 case Val_GNU_MIPS_ABI_MSA_128: 14546 _bfd_error_handler 14547 (_("Warning: %B uses %s (set by %B), " 14548 "%B uses unknown MSA ABI %d"), 14549 obfd, abi_msa_bfd, ibfd, 14550 "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i); 14551 break; 14552 14553 default: 14554 switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i) 14555 { 14556 case Val_GNU_MIPS_ABI_MSA_128: 14557 _bfd_error_handler 14558 (_("Warning: %B uses unknown MSA ABI %d " 14559 "(set by %B), %B uses %s"), 14560 obfd, abi_msa_bfd, ibfd, 14561 out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa"); 14562 break; 14563 14564 default: 14565 _bfd_error_handler 14566 (_("Warning: %B uses unknown MSA ABI %d " 14567 "(set by %B), %B uses unknown MSA ABI %d"), 14568 obfd, abi_msa_bfd, ibfd, 14569 out_attr[Tag_GNU_MIPS_ABI_MSA].i, 14570 in_attr[Tag_GNU_MIPS_ABI_MSA].i); 14571 break; 14572 } 14573 } 14574 } 14575 14576 /* Merge Tag_compatibility attributes and any common GNU ones. */ 14577 _bfd_elf_merge_object_attributes (ibfd, obfd); 14578 14579 return TRUE; 14580 } 14581 14582 /* Merge backend specific data from an object file to the output 14583 object file when linking. */ 14584 14585 bfd_boolean 14586 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd) 14587 { 14588 flagword old_flags; 14589 flagword new_flags; 14590 bfd_boolean ok; 14591 bfd_boolean null_input_bfd = TRUE; 14592 asection *sec; 14593 14594 /* Check if we have the same endianness. */ 14595 if (! _bfd_generic_verify_endian_match (ibfd, obfd)) 14596 { 14597 (*_bfd_error_handler) 14598 (_("%B: endianness incompatible with that of the selected emulation"), 14599 ibfd); 14600 return FALSE; 14601 } 14602 14603 if (!is_mips_elf (ibfd) || !is_mips_elf (obfd)) 14604 return TRUE; 14605 14606 if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0) 14607 { 14608 (*_bfd_error_handler) 14609 (_("%B: ABI is incompatible with that of the selected emulation"), 14610 ibfd); 14611 return FALSE; 14612 } 14613 14614 if (!mips_elf_merge_obj_attributes (ibfd, obfd)) 14615 return FALSE; 14616 14617 new_flags = elf_elfheader (ibfd)->e_flags; 14618 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER; 14619 old_flags = elf_elfheader (obfd)->e_flags; 14620 14621 if (! elf_flags_init (obfd)) 14622 { 14623 elf_flags_init (obfd) = TRUE; 14624 elf_elfheader (obfd)->e_flags = new_flags; 14625 elf_elfheader (obfd)->e_ident[EI_CLASS] 14626 = elf_elfheader (ibfd)->e_ident[EI_CLASS]; 14627 14628 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd) 14629 && (bfd_get_arch_info (obfd)->the_default 14630 || mips_mach_extends_p (bfd_get_mach (obfd), 14631 bfd_get_mach (ibfd)))) 14632 { 14633 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), 14634 bfd_get_mach (ibfd))) 14635 return FALSE; 14636 } 14637 14638 return TRUE; 14639 } 14640 14641 /* Check flag compatibility. */ 14642 14643 new_flags &= ~EF_MIPS_NOREORDER; 14644 old_flags &= ~EF_MIPS_NOREORDER; 14645 14646 /* Some IRIX 6 BSD-compatibility objects have this bit set. It 14647 doesn't seem to matter. */ 14648 new_flags &= ~EF_MIPS_XGOT; 14649 old_flags &= ~EF_MIPS_XGOT; 14650 14651 /* MIPSpro generates ucode info in n64 objects. Again, we should 14652 just be able to ignore this. */ 14653 new_flags &= ~EF_MIPS_UCODE; 14654 old_flags &= ~EF_MIPS_UCODE; 14655 14656 /* DSOs should only be linked with CPIC code. */ 14657 if ((ibfd->flags & DYNAMIC) != 0) 14658 new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC; 14659 14660 if (new_flags == old_flags) 14661 return TRUE; 14662 14663 /* Check to see if the input BFD actually contains any sections. 14664 If not, its flags may not have been initialised either, but it cannot 14665 actually cause any incompatibility. */ 14666 for (sec = ibfd->sections; sec != NULL; sec = sec->next) 14667 { 14668 /* Ignore synthetic sections and empty .text, .data and .bss sections 14669 which are automatically generated by gas. Also ignore fake 14670 (s)common sections, since merely defining a common symbol does 14671 not affect compatibility. */ 14672 if ((sec->flags & SEC_IS_COMMON) == 0 14673 && strcmp (sec->name, ".reginfo") 14674 && strcmp (sec->name, ".mdebug") 14675 && (sec->size != 0 14676 || (strcmp (sec->name, ".text") 14677 && strcmp (sec->name, ".data") 14678 && strcmp (sec->name, ".bss")))) 14679 { 14680 null_input_bfd = FALSE; 14681 break; 14682 } 14683 } 14684 if (null_input_bfd) 14685 return TRUE; 14686 14687 ok = TRUE; 14688 14689 if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0) 14690 != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)) 14691 { 14692 (*_bfd_error_handler) 14693 (_("%B: warning: linking abicalls files with non-abicalls files"), 14694 ibfd); 14695 ok = TRUE; 14696 } 14697 14698 if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) 14699 elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC; 14700 if (! (new_flags & EF_MIPS_PIC)) 14701 elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC; 14702 14703 new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC); 14704 old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC); 14705 14706 /* Compare the ISAs. */ 14707 if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags)) 14708 { 14709 (*_bfd_error_handler) 14710 (_("%B: linking 32-bit code with 64-bit code"), 14711 ibfd); 14712 ok = FALSE; 14713 } 14714 else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd))) 14715 { 14716 /* OBFD's ISA isn't the same as, or an extension of, IBFD's. */ 14717 if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd))) 14718 { 14719 /* Copy the architecture info from IBFD to OBFD. Also copy 14720 the 32-bit flag (if set) so that we continue to recognise 14721 OBFD as a 32-bit binary. */ 14722 bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd)); 14723 elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH); 14724 elf_elfheader (obfd)->e_flags 14725 |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE); 14726 14727 /* Copy across the ABI flags if OBFD doesn't use them 14728 and if that was what caused us to treat IBFD as 32-bit. */ 14729 if ((old_flags & EF_MIPS_ABI) == 0 14730 && mips_32bit_flags_p (new_flags) 14731 && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI)) 14732 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI; 14733 } 14734 else 14735 { 14736 /* The ISAs aren't compatible. */ 14737 (*_bfd_error_handler) 14738 (_("%B: linking %s module with previous %s modules"), 14739 ibfd, 14740 bfd_printable_name (ibfd), 14741 bfd_printable_name (obfd)); 14742 ok = FALSE; 14743 } 14744 } 14745 14746 new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE); 14747 old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE); 14748 14749 /* Compare ABIs. The 64-bit ABI does not use EF_MIPS_ABI. But, it 14750 does set EI_CLASS differently from any 32-bit ABI. */ 14751 if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI) 14752 || (elf_elfheader (ibfd)->e_ident[EI_CLASS] 14753 != elf_elfheader (obfd)->e_ident[EI_CLASS])) 14754 { 14755 /* Only error if both are set (to different values). */ 14756 if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI)) 14757 || (elf_elfheader (ibfd)->e_ident[EI_CLASS] 14758 != elf_elfheader (obfd)->e_ident[EI_CLASS])) 14759 { 14760 (*_bfd_error_handler) 14761 (_("%B: ABI mismatch: linking %s module with previous %s modules"), 14762 ibfd, 14763 elf_mips_abi_name (ibfd), 14764 elf_mips_abi_name (obfd)); 14765 ok = FALSE; 14766 } 14767 new_flags &= ~EF_MIPS_ABI; 14768 old_flags &= ~EF_MIPS_ABI; 14769 } 14770 14771 /* Compare ASEs. Forbid linking MIPS16 and microMIPS ASE modules together 14772 and allow arbitrary mixing of the remaining ASEs (retain the union). */ 14773 if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE)) 14774 { 14775 int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS; 14776 int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS; 14777 int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16; 14778 int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16; 14779 int micro_mis = old_m16 && new_micro; 14780 int m16_mis = old_micro && new_m16; 14781 14782 if (m16_mis || micro_mis) 14783 { 14784 (*_bfd_error_handler) 14785 (_("%B: ASE mismatch: linking %s module with previous %s modules"), 14786 ibfd, 14787 m16_mis ? "MIPS16" : "microMIPS", 14788 m16_mis ? "microMIPS" : "MIPS16"); 14789 ok = FALSE; 14790 } 14791 14792 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE; 14793 14794 new_flags &= ~ EF_MIPS_ARCH_ASE; 14795 old_flags &= ~ EF_MIPS_ARCH_ASE; 14796 } 14797 14798 /* Compare NaN encodings. */ 14799 if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008)) 14800 { 14801 _bfd_error_handler (_("%B: linking %s module with previous %s modules"), 14802 ibfd, 14803 (new_flags & EF_MIPS_NAN2008 14804 ? "-mnan=2008" : "-mnan=legacy"), 14805 (old_flags & EF_MIPS_NAN2008 14806 ? "-mnan=2008" : "-mnan=legacy")); 14807 ok = FALSE; 14808 new_flags &= ~EF_MIPS_NAN2008; 14809 old_flags &= ~EF_MIPS_NAN2008; 14810 } 14811 14812 /* Warn about any other mismatches */ 14813 if (new_flags != old_flags) 14814 { 14815 (*_bfd_error_handler) 14816 (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"), 14817 ibfd, (unsigned long) new_flags, 14818 (unsigned long) old_flags); 14819 ok = FALSE; 14820 } 14821 14822 if (! ok) 14823 { 14824 bfd_set_error (bfd_error_bad_value); 14825 return FALSE; 14826 } 14827 14828 return TRUE; 14829 } 14830 14831 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */ 14832 14833 bfd_boolean 14834 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags) 14835 { 14836 BFD_ASSERT (!elf_flags_init (abfd) 14837 || elf_elfheader (abfd)->e_flags == flags); 14838 14839 elf_elfheader (abfd)->e_flags = flags; 14840 elf_flags_init (abfd) = TRUE; 14841 return TRUE; 14842 } 14843 14844 char * 14845 _bfd_mips_elf_get_target_dtag (bfd_vma dtag) 14846 { 14847 switch (dtag) 14848 { 14849 default: return ""; 14850 case DT_MIPS_RLD_VERSION: 14851 return "MIPS_RLD_VERSION"; 14852 case DT_MIPS_TIME_STAMP: 14853 return "MIPS_TIME_STAMP"; 14854 case DT_MIPS_ICHECKSUM: 14855 return "MIPS_ICHECKSUM"; 14856 case DT_MIPS_IVERSION: 14857 return "MIPS_IVERSION"; 14858 case DT_MIPS_FLAGS: 14859 return "MIPS_FLAGS"; 14860 case DT_MIPS_BASE_ADDRESS: 14861 return "MIPS_BASE_ADDRESS"; 14862 case DT_MIPS_MSYM: 14863 return "MIPS_MSYM"; 14864 case DT_MIPS_CONFLICT: 14865 return "MIPS_CONFLICT"; 14866 case DT_MIPS_LIBLIST: 14867 return "MIPS_LIBLIST"; 14868 case DT_MIPS_LOCAL_GOTNO: 14869 return "MIPS_LOCAL_GOTNO"; 14870 case DT_MIPS_CONFLICTNO: 14871 return "MIPS_CONFLICTNO"; 14872 case DT_MIPS_LIBLISTNO: 14873 return "MIPS_LIBLISTNO"; 14874 case DT_MIPS_SYMTABNO: 14875 return "MIPS_SYMTABNO"; 14876 case DT_MIPS_UNREFEXTNO: 14877 return "MIPS_UNREFEXTNO"; 14878 case DT_MIPS_GOTSYM: 14879 return "MIPS_GOTSYM"; 14880 case DT_MIPS_HIPAGENO: 14881 return "MIPS_HIPAGENO"; 14882 case DT_MIPS_RLD_MAP: 14883 return "MIPS_RLD_MAP"; 14884 case DT_MIPS_DELTA_CLASS: 14885 return "MIPS_DELTA_CLASS"; 14886 case DT_MIPS_DELTA_CLASS_NO: 14887 return "MIPS_DELTA_CLASS_NO"; 14888 case DT_MIPS_DELTA_INSTANCE: 14889 return "MIPS_DELTA_INSTANCE"; 14890 case DT_MIPS_DELTA_INSTANCE_NO: 14891 return "MIPS_DELTA_INSTANCE_NO"; 14892 case DT_MIPS_DELTA_RELOC: 14893 return "MIPS_DELTA_RELOC"; 14894 case DT_MIPS_DELTA_RELOC_NO: 14895 return "MIPS_DELTA_RELOC_NO"; 14896 case DT_MIPS_DELTA_SYM: 14897 return "MIPS_DELTA_SYM"; 14898 case DT_MIPS_DELTA_SYM_NO: 14899 return "MIPS_DELTA_SYM_NO"; 14900 case DT_MIPS_DELTA_CLASSSYM: 14901 return "MIPS_DELTA_CLASSSYM"; 14902 case DT_MIPS_DELTA_CLASSSYM_NO: 14903 return "MIPS_DELTA_CLASSSYM_NO"; 14904 case DT_MIPS_CXX_FLAGS: 14905 return "MIPS_CXX_FLAGS"; 14906 case DT_MIPS_PIXIE_INIT: 14907 return "MIPS_PIXIE_INIT"; 14908 case DT_MIPS_SYMBOL_LIB: 14909 return "MIPS_SYMBOL_LIB"; 14910 case DT_MIPS_LOCALPAGE_GOTIDX: 14911 return "MIPS_LOCALPAGE_GOTIDX"; 14912 case DT_MIPS_LOCAL_GOTIDX: 14913 return "MIPS_LOCAL_GOTIDX"; 14914 case DT_MIPS_HIDDEN_GOTIDX: 14915 return "MIPS_HIDDEN_GOTIDX"; 14916 case DT_MIPS_PROTECTED_GOTIDX: 14917 return "MIPS_PROTECTED_GOT_IDX"; 14918 case DT_MIPS_OPTIONS: 14919 return "MIPS_OPTIONS"; 14920 case DT_MIPS_INTERFACE: 14921 return "MIPS_INTERFACE"; 14922 case DT_MIPS_DYNSTR_ALIGN: 14923 return "DT_MIPS_DYNSTR_ALIGN"; 14924 case DT_MIPS_INTERFACE_SIZE: 14925 return "DT_MIPS_INTERFACE_SIZE"; 14926 case DT_MIPS_RLD_TEXT_RESOLVE_ADDR: 14927 return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR"; 14928 case DT_MIPS_PERF_SUFFIX: 14929 return "DT_MIPS_PERF_SUFFIX"; 14930 case DT_MIPS_COMPACT_SIZE: 14931 return "DT_MIPS_COMPACT_SIZE"; 14932 case DT_MIPS_GP_VALUE: 14933 return "DT_MIPS_GP_VALUE"; 14934 case DT_MIPS_AUX_DYNAMIC: 14935 return "DT_MIPS_AUX_DYNAMIC"; 14936 case DT_MIPS_PLTGOT: 14937 return "DT_MIPS_PLTGOT"; 14938 case DT_MIPS_RWPLT: 14939 return "DT_MIPS_RWPLT"; 14940 } 14941 } 14942 14943 bfd_boolean 14944 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr) 14945 { 14946 FILE *file = ptr; 14947 14948 BFD_ASSERT (abfd != NULL && ptr != NULL); 14949 14950 /* Print normal ELF private data. */ 14951 _bfd_elf_print_private_bfd_data (abfd, ptr); 14952 14953 /* xgettext:c-format */ 14954 fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags); 14955 14956 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32) 14957 fprintf (file, _(" [abi=O32]")); 14958 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64) 14959 fprintf (file, _(" [abi=O64]")); 14960 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32) 14961 fprintf (file, _(" [abi=EABI32]")); 14962 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64) 14963 fprintf (file, _(" [abi=EABI64]")); 14964 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI)) 14965 fprintf (file, _(" [abi unknown]")); 14966 else if (ABI_N32_P (abfd)) 14967 fprintf (file, _(" [abi=N32]")); 14968 else if (ABI_64_P (abfd)) 14969 fprintf (file, _(" [abi=64]")); 14970 else 14971 fprintf (file, _(" [no abi set]")); 14972 14973 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1) 14974 fprintf (file, " [mips1]"); 14975 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2) 14976 fprintf (file, " [mips2]"); 14977 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3) 14978 fprintf (file, " [mips3]"); 14979 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4) 14980 fprintf (file, " [mips4]"); 14981 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5) 14982 fprintf (file, " [mips5]"); 14983 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32) 14984 fprintf (file, " [mips32]"); 14985 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64) 14986 fprintf (file, " [mips64]"); 14987 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2) 14988 fprintf (file, " [mips32r2]"); 14989 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2) 14990 fprintf (file, " [mips64r2]"); 14991 else 14992 fprintf (file, _(" [unknown ISA]")); 14993 14994 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX) 14995 fprintf (file, " [mdmx]"); 14996 14997 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16) 14998 fprintf (file, " [mips16]"); 14999 15000 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) 15001 fprintf (file, " [micromips]"); 15002 15003 if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008) 15004 fprintf (file, " [nan2008]"); 15005 15006 if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64) 15007 fprintf (file, " [fp64]"); 15008 15009 if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE) 15010 fprintf (file, " [32bitmode]"); 15011 else 15012 fprintf (file, _(" [not 32bitmode]")); 15013 15014 if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER) 15015 fprintf (file, " [noreorder]"); 15016 15017 if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) 15018 fprintf (file, " [PIC]"); 15019 15020 if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC) 15021 fprintf (file, " [CPIC]"); 15022 15023 if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT) 15024 fprintf (file, " [XGOT]"); 15025 15026 if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE) 15027 fprintf (file, " [UCODE]"); 15028 15029 fputc ('\n', file); 15030 15031 return TRUE; 15032 } 15033 15034 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] = 15035 { 15036 { STRING_COMMA_LEN (".lit4"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 15037 { STRING_COMMA_LEN (".lit8"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 15038 { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 }, 15039 { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 15040 { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 15041 { STRING_COMMA_LEN (".ucode"), 0, SHT_MIPS_UCODE, 0 }, 15042 { NULL, 0, 0, 0, 0 } 15043 }; 15044 15045 /* Merge non visibility st_other attributes. Ensure that the 15046 STO_OPTIONAL flag is copied into h->other, even if this is not a 15047 definiton of the symbol. */ 15048 void 15049 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h, 15050 const Elf_Internal_Sym *isym, 15051 bfd_boolean definition, 15052 bfd_boolean dynamic ATTRIBUTE_UNUSED) 15053 { 15054 if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0) 15055 { 15056 unsigned char other; 15057 15058 other = (definition ? isym->st_other : h->other); 15059 other &= ~ELF_ST_VISIBILITY (-1); 15060 h->other = other | ELF_ST_VISIBILITY (h->other); 15061 } 15062 15063 if (!definition 15064 && ELF_MIPS_IS_OPTIONAL (isym->st_other)) 15065 h->other |= STO_OPTIONAL; 15066 } 15067 15068 /* Decide whether an undefined symbol is special and can be ignored. 15069 This is the case for OPTIONAL symbols on IRIX. */ 15070 bfd_boolean 15071 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h) 15072 { 15073 return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE; 15074 } 15075 15076 bfd_boolean 15077 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym) 15078 { 15079 return (sym->st_shndx == SHN_COMMON 15080 || sym->st_shndx == SHN_MIPS_ACOMMON 15081 || sym->st_shndx == SHN_MIPS_SCOMMON); 15082 } 15083 15084 /* Return address for Ith PLT stub in section PLT, for relocation REL 15085 or (bfd_vma) -1 if it should not be included. */ 15086 15087 bfd_vma 15088 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt, 15089 const arelent *rel ATTRIBUTE_UNUSED) 15090 { 15091 return (plt->vma 15092 + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry) 15093 + i * 4 * ARRAY_SIZE (mips_exec_plt_entry)); 15094 } 15095 15096 /* Build a table of synthetic symbols to represent the PLT. As with MIPS16 15097 and microMIPS PLT slots we may have a many-to-one mapping between .plt 15098 and .got.plt and also the slots may be of a different size each we walk 15099 the PLT manually fetching instructions and matching them against known 15100 patterns. To make things easier standard MIPS slots, if any, always come 15101 first. As we don't create proper ELF symbols we use the UDATA.I member 15102 of ASYMBOL to carry ISA annotation. The encoding used is the same as 15103 with the ST_OTHER member of the ELF symbol. */ 15104 15105 long 15106 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd, 15107 long symcount ATTRIBUTE_UNUSED, 15108 asymbol **syms ATTRIBUTE_UNUSED, 15109 long dynsymcount, asymbol **dynsyms, 15110 asymbol **ret) 15111 { 15112 static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_"; 15113 static const char microsuffix[] = "@micromipsplt"; 15114 static const char m16suffix[] = "@mips16plt"; 15115 static const char mipssuffix[] = "@plt"; 15116 15117 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean); 15118 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 15119 bfd_boolean micromips_p = MICROMIPS_P (abfd); 15120 Elf_Internal_Shdr *hdr; 15121 bfd_byte *plt_data; 15122 bfd_vma plt_offset; 15123 unsigned int other; 15124 bfd_vma entry_size; 15125 bfd_vma plt0_size; 15126 asection *relplt; 15127 bfd_vma opcode; 15128 asection *plt; 15129 asymbol *send; 15130 size_t size; 15131 char *names; 15132 long counti; 15133 arelent *p; 15134 asymbol *s; 15135 char *nend; 15136 long count; 15137 long pi; 15138 long i; 15139 long n; 15140 15141 *ret = NULL; 15142 15143 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0) 15144 return 0; 15145 15146 relplt = bfd_get_section_by_name (abfd, ".rel.plt"); 15147 if (relplt == NULL) 15148 return 0; 15149 15150 hdr = &elf_section_data (relplt)->this_hdr; 15151 if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL) 15152 return 0; 15153 15154 plt = bfd_get_section_by_name (abfd, ".plt"); 15155 if (plt == NULL) 15156 return 0; 15157 15158 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table; 15159 if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE)) 15160 return -1; 15161 p = relplt->relocation; 15162 15163 /* Calculating the exact amount of space required for symbols would 15164 require two passes over the PLT, so just pessimise assuming two 15165 PLT slots per relocation. */ 15166 count = relplt->size / hdr->sh_entsize; 15167 counti = count * bed->s->int_rels_per_ext_rel; 15168 size = 2 * count * sizeof (asymbol); 15169 size += count * (sizeof (mipssuffix) + 15170 (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix))); 15171 for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel) 15172 size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name); 15173 15174 /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too. */ 15175 size += sizeof (asymbol) + sizeof (pltname); 15176 15177 if (!bfd_malloc_and_get_section (abfd, plt, &plt_data)) 15178 return -1; 15179 15180 if (plt->size < 16) 15181 return -1; 15182 15183 s = *ret = bfd_malloc (size); 15184 if (s == NULL) 15185 return -1; 15186 send = s + 2 * count + 1; 15187 15188 names = (char *) send; 15189 nend = (char *) s + size; 15190 n = 0; 15191 15192 opcode = bfd_get_micromips_32 (abfd, plt_data + 12); 15193 if (opcode == 0x3302fffe) 15194 { 15195 if (!micromips_p) 15196 return -1; 15197 plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry); 15198 other = STO_MICROMIPS; 15199 } 15200 else if (opcode == 0x0398c1d0) 15201 { 15202 if (!micromips_p) 15203 return -1; 15204 plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); 15205 other = STO_MICROMIPS; 15206 } 15207 else 15208 { 15209 plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry); 15210 other = 0; 15211 } 15212 15213 s->the_bfd = abfd; 15214 s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL; 15215 s->section = plt; 15216 s->value = 0; 15217 s->name = names; 15218 s->udata.i = other; 15219 memcpy (names, pltname, sizeof (pltname)); 15220 names += sizeof (pltname); 15221 ++s, ++n; 15222 15223 pi = 0; 15224 for (plt_offset = plt0_size; 15225 plt_offset + 8 <= plt->size && s < send; 15226 plt_offset += entry_size) 15227 { 15228 bfd_vma gotplt_addr; 15229 const char *suffix; 15230 bfd_vma gotplt_hi; 15231 bfd_vma gotplt_lo; 15232 size_t suffixlen; 15233 15234 opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4); 15235 15236 /* Check if the second word matches the expected MIPS16 instruction. */ 15237 if (opcode == 0x651aeb00) 15238 { 15239 if (micromips_p) 15240 return -1; 15241 /* Truncated table??? */ 15242 if (plt_offset + 16 > plt->size) 15243 break; 15244 gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12); 15245 entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry); 15246 suffixlen = sizeof (m16suffix); 15247 suffix = m16suffix; 15248 other = STO_MIPS16; 15249 } 15250 /* Likewise the expected microMIPS instruction (no insn32 mode). */ 15251 else if (opcode == 0xff220000) 15252 { 15253 if (!micromips_p) 15254 return -1; 15255 gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f; 15256 gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff; 15257 gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18; 15258 gotplt_lo <<= 2; 15259 gotplt_addr = gotplt_hi + gotplt_lo; 15260 gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3; 15261 entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry); 15262 suffixlen = sizeof (microsuffix); 15263 suffix = microsuffix; 15264 other = STO_MICROMIPS; 15265 } 15266 /* Likewise the expected microMIPS instruction (insn32 mode). */ 15267 else if ((opcode & 0xffff0000) == 0xff2f0000) 15268 { 15269 gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff; 15270 gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff; 15271 gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16; 15272 gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000; 15273 gotplt_addr = gotplt_hi + gotplt_lo; 15274 entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry); 15275 suffixlen = sizeof (microsuffix); 15276 suffix = microsuffix; 15277 other = STO_MICROMIPS; 15278 } 15279 /* Otherwise assume standard MIPS code. */ 15280 else 15281 { 15282 gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff; 15283 gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff; 15284 gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16; 15285 gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000; 15286 gotplt_addr = gotplt_hi + gotplt_lo; 15287 entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry); 15288 suffixlen = sizeof (mipssuffix); 15289 suffix = mipssuffix; 15290 other = 0; 15291 } 15292 /* Truncated table??? */ 15293 if (plt_offset + entry_size > plt->size) 15294 break; 15295 15296 for (i = 0; 15297 i < count && p[pi].address != gotplt_addr; 15298 i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti); 15299 15300 if (i < count) 15301 { 15302 size_t namelen; 15303 size_t len; 15304 15305 *s = **p[pi].sym_ptr_ptr; 15306 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since 15307 we are defining a symbol, ensure one of them is set. */ 15308 if ((s->flags & BSF_LOCAL) == 0) 15309 s->flags |= BSF_GLOBAL; 15310 s->flags |= BSF_SYNTHETIC; 15311 s->section = plt; 15312 s->value = plt_offset; 15313 s->name = names; 15314 s->udata.i = other; 15315 15316 len = strlen ((*p[pi].sym_ptr_ptr)->name); 15317 namelen = len + suffixlen; 15318 if (names + namelen > nend) 15319 break; 15320 15321 memcpy (names, (*p[pi].sym_ptr_ptr)->name, len); 15322 names += len; 15323 memcpy (names, suffix, suffixlen); 15324 names += suffixlen; 15325 15326 ++s, ++n; 15327 pi = (pi + bed->s->int_rels_per_ext_rel) % counti; 15328 } 15329 } 15330 15331 free (plt_data); 15332 15333 return n; 15334 } 15335 15336 void 15337 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info) 15338 { 15339 struct mips_elf_link_hash_table *htab; 15340 Elf_Internal_Ehdr *i_ehdrp; 15341 15342 i_ehdrp = elf_elfheader (abfd); 15343 if (link_info) 15344 { 15345 htab = mips_elf_hash_table (link_info); 15346 BFD_ASSERT (htab != NULL); 15347 15348 if (htab->use_plts_and_copy_relocs && !htab->is_vxworks) 15349 i_ehdrp->e_ident[EI_ABIVERSION] = 1; 15350 } 15351 15352 _bfd_elf_post_process_headers (abfd, link_info); 15353 } 15354