1 /* MIPS-specific support for ELF 2 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 3 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 4 5 Most of the information added by Ian Lance Taylor, Cygnus Support, 6 <ian@cygnus.com>. 7 N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC. 8 <mark@codesourcery.com> 9 Traditional MIPS targets support added by Koundinya.K, Dansk Data 10 Elektronik & Operations Research Group. <kk@ddeorg.soft.net> 11 12 This file is part of BFD, the Binary File Descriptor library. 13 14 This program is free software; you can redistribute it and/or modify 15 it under the terms of the GNU General Public License as published by 16 the Free Software Foundation; either version 2 of the License, or 17 (at your option) any later version. 18 19 This program is distributed in the hope that it will be useful, 20 but WITHOUT ANY WARRANTY; without even the implied warranty of 21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 GNU General Public License for more details. 23 24 You should have received a copy of the GNU General Public License 25 along with this program; if not, write to the Free Software 26 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 27 28 /* This file handles functionality common to the different MIPS ABI's. */ 29 30 #include "bfd.h" 31 #include "sysdep.h" 32 #include "libbfd.h" 33 #include "libiberty.h" 34 #include "elf-bfd.h" 35 #include "elfxx-mips.h" 36 #include "elf/mips.h" 37 #include "elf-vxworks.h" 38 39 /* Get the ECOFF swapping routines. */ 40 #include "coff/sym.h" 41 #include "coff/symconst.h" 42 #include "coff/ecoff.h" 43 #include "coff/mips.h" 44 45 #include "hashtab.h" 46 47 /* This structure is used to hold information about one GOT entry. 48 There are three types of entry: 49 50 (1) absolute addresses 51 (abfd == NULL) 52 (2) SYMBOL + OFFSET addresses, where SYMBOL is local to an input bfd 53 (abfd != NULL, symndx >= 0) 54 (3) global and forced-local symbols 55 (abfd != NULL, symndx == -1) 56 57 Type (3) entries are treated differently for different types of GOT. 58 In the "master" GOT -- i.e. the one that describes every GOT 59 reference needed in the link -- the mips_got_entry is keyed on both 60 the symbol and the input bfd that references it. If it turns out 61 that we need multiple GOTs, we can then use this information to 62 create separate GOTs for each input bfd. 63 64 However, we want each of these separate GOTs to have at most one 65 entry for a given symbol, so their type (3) entries are keyed only 66 on the symbol. The input bfd given by the "abfd" field is somewhat 67 arbitrary in this case. 68 69 This means that when there are multiple GOTs, each GOT has a unique 70 mips_got_entry for every symbol within it. We can therefore use the 71 mips_got_entry fields (tls_type and gotidx) to track the symbol's 72 GOT index. 73 74 However, if it turns out that we need only a single GOT, we continue 75 to use the master GOT to describe it. There may therefore be several 76 mips_got_entries for the same symbol, each with a different input bfd. 77 We want to make sure that each symbol gets a unique GOT entry, so when 78 there's a single GOT, we use the symbol's hash entry, not the 79 mips_got_entry fields, to track a symbol's GOT index. */ 80 struct mips_got_entry 81 { 82 /* The input bfd in which the symbol is defined. */ 83 bfd *abfd; 84 /* The index of the symbol, as stored in the relocation r_info, if 85 we have a local symbol; -1 otherwise. */ 86 long symndx; 87 union 88 { 89 /* If abfd == NULL, an address that must be stored in the got. */ 90 bfd_vma address; 91 /* If abfd != NULL && symndx != -1, the addend of the relocation 92 that should be added to the symbol value. */ 93 bfd_vma addend; 94 /* If abfd != NULL && symndx == -1, the hash table entry 95 corresponding to a global symbol in the got (or, local, if 96 h->forced_local). */ 97 struct mips_elf_link_hash_entry *h; 98 } d; 99 100 /* The TLS types included in this GOT entry (specifically, GD and 101 IE). The GD and IE flags can be added as we encounter new 102 relocations. LDM can also be set; it will always be alone, not 103 combined with any GD or IE flags. An LDM GOT entry will be 104 a local symbol entry with r_symndx == 0. */ 105 unsigned char tls_type; 106 107 /* The offset from the beginning of the .got section to the entry 108 corresponding to this symbol+addend. If it's a global symbol 109 whose offset is yet to be decided, it's going to be -1. */ 110 long gotidx; 111 }; 112 113 /* This structure is used to hold .got information when linking. */ 114 115 struct mips_got_info 116 { 117 /* The global symbol in the GOT with the lowest index in the dynamic 118 symbol table. */ 119 struct elf_link_hash_entry *global_gotsym; 120 /* The number of global .got entries. */ 121 unsigned int global_gotno; 122 /* The number of .got slots used for TLS. */ 123 unsigned int tls_gotno; 124 /* The first unused TLS .got entry. Used only during 125 mips_elf_initialize_tls_index. */ 126 unsigned int tls_assigned_gotno; 127 /* The number of local .got entries. */ 128 unsigned int local_gotno; 129 /* The number of local .got entries we have used. */ 130 unsigned int assigned_gotno; 131 /* A hash table holding members of the got. */ 132 struct htab *got_entries; 133 /* A hash table mapping input bfds to other mips_got_info. NULL 134 unless multi-got was necessary. */ 135 struct htab *bfd2got; 136 /* In multi-got links, a pointer to the next got (err, rather, most 137 of the time, it points to the previous got). */ 138 struct mips_got_info *next; 139 /* This is the GOT index of the TLS LDM entry for the GOT, MINUS_ONE 140 for none, or MINUS_TWO for not yet assigned. This is needed 141 because a single-GOT link may have multiple hash table entries 142 for the LDM. It does not get initialized in multi-GOT mode. */ 143 bfd_vma tls_ldm_offset; 144 }; 145 146 /* Map an input bfd to a got in a multi-got link. */ 147 148 struct mips_elf_bfd2got_hash { 149 bfd *bfd; 150 struct mips_got_info *g; 151 }; 152 153 /* Structure passed when traversing the bfd2got hash table, used to 154 create and merge bfd's gots. */ 155 156 struct mips_elf_got_per_bfd_arg 157 { 158 /* A hashtable that maps bfds to gots. */ 159 htab_t bfd2got; 160 /* The output bfd. */ 161 bfd *obfd; 162 /* The link information. */ 163 struct bfd_link_info *info; 164 /* A pointer to the primary got, i.e., the one that's going to get 165 the implicit relocations from DT_MIPS_LOCAL_GOTNO and 166 DT_MIPS_GOTSYM. */ 167 struct mips_got_info *primary; 168 /* A non-primary got we're trying to merge with other input bfd's 169 gots. */ 170 struct mips_got_info *current; 171 /* The maximum number of got entries that can be addressed with a 172 16-bit offset. */ 173 unsigned int max_count; 174 /* The number of local and global entries in the primary got. */ 175 unsigned int primary_count; 176 /* The number of local and global entries in the current got. */ 177 unsigned int current_count; 178 /* The total number of global entries which will live in the 179 primary got and be automatically relocated. This includes 180 those not referenced by the primary GOT but included in 181 the "master" GOT. */ 182 unsigned int global_count; 183 }; 184 185 /* Another structure used to pass arguments for got entries traversal. */ 186 187 struct mips_elf_set_global_got_offset_arg 188 { 189 struct mips_got_info *g; 190 int value; 191 unsigned int needed_relocs; 192 struct bfd_link_info *info; 193 }; 194 195 /* A structure used to count TLS relocations or GOT entries, for GOT 196 entry or ELF symbol table traversal. */ 197 198 struct mips_elf_count_tls_arg 199 { 200 struct bfd_link_info *info; 201 unsigned int needed; 202 }; 203 204 struct _mips_elf_section_data 205 { 206 struct bfd_elf_section_data elf; 207 union 208 { 209 struct mips_got_info *got_info; 210 bfd_byte *tdata; 211 } u; 212 }; 213 214 #define mips_elf_section_data(sec) \ 215 ((struct _mips_elf_section_data *) elf_section_data (sec)) 216 217 /* This structure is passed to mips_elf_sort_hash_table_f when sorting 218 the dynamic symbols. */ 219 220 struct mips_elf_hash_sort_data 221 { 222 /* The symbol in the global GOT with the lowest dynamic symbol table 223 index. */ 224 struct elf_link_hash_entry *low; 225 /* The least dynamic symbol table index corresponding to a non-TLS 226 symbol with a GOT entry. */ 227 long min_got_dynindx; 228 /* The greatest dynamic symbol table index corresponding to a symbol 229 with a GOT entry that is not referenced (e.g., a dynamic symbol 230 with dynamic relocations pointing to it from non-primary GOTs). */ 231 long max_unref_got_dynindx; 232 /* The greatest dynamic symbol table index not corresponding to a 233 symbol without a GOT entry. */ 234 long max_non_got_dynindx; 235 }; 236 237 /* The MIPS ELF linker needs additional information for each symbol in 238 the global hash table. */ 239 240 struct mips_elf_link_hash_entry 241 { 242 struct elf_link_hash_entry root; 243 244 /* External symbol information. */ 245 EXTR esym; 246 247 /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against 248 this symbol. */ 249 unsigned int possibly_dynamic_relocs; 250 251 /* If the R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 reloc is against 252 a readonly section. */ 253 bfd_boolean readonly_reloc; 254 255 /* We must not create a stub for a symbol that has relocations 256 related to taking the function's address, i.e. any but 257 R_MIPS_CALL*16 ones -- see "MIPS ABI Supplement, 3rd Edition", 258 p. 4-20. */ 259 bfd_boolean no_fn_stub; 260 261 /* If there is a stub that 32 bit functions should use to call this 262 16 bit function, this points to the section containing the stub. */ 263 asection *fn_stub; 264 265 /* Whether we need the fn_stub; this is set if this symbol appears 266 in any relocs other than a 16 bit call. */ 267 bfd_boolean need_fn_stub; 268 269 /* If there is a stub that 16 bit functions should use to call this 270 32 bit function, this points to the section containing the stub. */ 271 asection *call_stub; 272 273 /* This is like the call_stub field, but it is used if the function 274 being called returns a floating point value. */ 275 asection *call_fp_stub; 276 277 /* Are we forced local? This will only be set if we have converted 278 the initial global GOT entry to a local GOT entry. */ 279 bfd_boolean forced_local; 280 281 /* Are we referenced by some kind of relocation? */ 282 bfd_boolean is_relocation_target; 283 284 /* Are we referenced by branch relocations? */ 285 bfd_boolean is_branch_target; 286 287 #define GOT_NORMAL 0 288 #define GOT_TLS_GD 1 289 #define GOT_TLS_LDM 2 290 #define GOT_TLS_IE 4 291 #define GOT_TLS_OFFSET_DONE 0x40 292 #define GOT_TLS_DONE 0x80 293 unsigned char tls_type; 294 /* This is only used in single-GOT mode; in multi-GOT mode there 295 is one mips_got_entry per GOT entry, so the offset is stored 296 there. In single-GOT mode there may be many mips_got_entry 297 structures all referring to the same GOT slot. It might be 298 possible to use root.got.offset instead, but that field is 299 overloaded already. */ 300 bfd_vma tls_got_offset; 301 }; 302 303 /* MIPS ELF linker hash table. */ 304 305 struct mips_elf_link_hash_table 306 { 307 struct elf_link_hash_table root; 308 #if 0 309 /* We no longer use this. */ 310 /* String section indices for the dynamic section symbols. */ 311 bfd_size_type dynsym_sec_strindex[SIZEOF_MIPS_DYNSYM_SECNAMES]; 312 #endif 313 /* The number of .rtproc entries. */ 314 bfd_size_type procedure_count; 315 /* The size of the .compact_rel section (if SGI_COMPAT). */ 316 bfd_size_type compact_rel_size; 317 /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic 318 entry is set to the address of __rld_obj_head as in IRIX5. */ 319 bfd_boolean use_rld_obj_head; 320 /* This is the value of the __rld_map or __rld_obj_head symbol. */ 321 bfd_vma rld_value; 322 /* This is set if we see any mips16 stub sections. */ 323 bfd_boolean mips16_stubs_seen; 324 /* True if we're generating code for VxWorks. */ 325 bfd_boolean is_vxworks; 326 /* Shortcuts to some dynamic sections, or NULL if they are not 327 being used. */ 328 asection *srelbss; 329 asection *sdynbss; 330 asection *srelplt; 331 asection *srelplt2; 332 asection *sgotplt; 333 asection *splt; 334 /* The size of the PLT header in bytes (VxWorks only). */ 335 bfd_vma plt_header_size; 336 /* The size of a PLT entry in bytes (VxWorks only). */ 337 bfd_vma plt_entry_size; 338 /* The size of a function stub entry in bytes. */ 339 bfd_vma function_stub_size; 340 }; 341 342 #define TLS_RELOC_P(r_type) \ 343 (r_type == R_MIPS_TLS_DTPMOD32 \ 344 || r_type == R_MIPS_TLS_DTPMOD64 \ 345 || r_type == R_MIPS_TLS_DTPREL32 \ 346 || r_type == R_MIPS_TLS_DTPREL64 \ 347 || r_type == R_MIPS_TLS_GD \ 348 || r_type == R_MIPS_TLS_LDM \ 349 || r_type == R_MIPS_TLS_DTPREL_HI16 \ 350 || r_type == R_MIPS_TLS_DTPREL_LO16 \ 351 || r_type == R_MIPS_TLS_GOTTPREL \ 352 || r_type == R_MIPS_TLS_TPREL32 \ 353 || r_type == R_MIPS_TLS_TPREL64 \ 354 || r_type == R_MIPS_TLS_TPREL_HI16 \ 355 || r_type == R_MIPS_TLS_TPREL_LO16) 356 357 /* Structure used to pass information to mips_elf_output_extsym. */ 358 359 struct extsym_info 360 { 361 bfd *abfd; 362 struct bfd_link_info *info; 363 struct ecoff_debug_info *debug; 364 const struct ecoff_debug_swap *swap; 365 bfd_boolean failed; 366 }; 367 368 /* The names of the runtime procedure table symbols used on IRIX5. */ 369 370 static const char * const mips_elf_dynsym_rtproc_names[] = 371 { 372 "_procedure_table", 373 "_procedure_string_table", 374 "_procedure_table_size", 375 NULL 376 }; 377 378 /* These structures are used to generate the .compact_rel section on 379 IRIX5. */ 380 381 typedef struct 382 { 383 unsigned long id1; /* Always one? */ 384 unsigned long num; /* Number of compact relocation entries. */ 385 unsigned long id2; /* Always two? */ 386 unsigned long offset; /* The file offset of the first relocation. */ 387 unsigned long reserved0; /* Zero? */ 388 unsigned long reserved1; /* Zero? */ 389 } Elf32_compact_rel; 390 391 typedef struct 392 { 393 bfd_byte id1[4]; 394 bfd_byte num[4]; 395 bfd_byte id2[4]; 396 bfd_byte offset[4]; 397 bfd_byte reserved0[4]; 398 bfd_byte reserved1[4]; 399 } Elf32_External_compact_rel; 400 401 typedef struct 402 { 403 unsigned int ctype : 1; /* 1: long 0: short format. See below. */ 404 unsigned int rtype : 4; /* Relocation types. See below. */ 405 unsigned int dist2to : 8; 406 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */ 407 unsigned long konst; /* KONST field. See below. */ 408 unsigned long vaddr; /* VADDR to be relocated. */ 409 } Elf32_crinfo; 410 411 typedef struct 412 { 413 unsigned int ctype : 1; /* 1: long 0: short format. See below. */ 414 unsigned int rtype : 4; /* Relocation types. See below. */ 415 unsigned int dist2to : 8; 416 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */ 417 unsigned long konst; /* KONST field. See below. */ 418 } Elf32_crinfo2; 419 420 typedef struct 421 { 422 bfd_byte info[4]; 423 bfd_byte konst[4]; 424 bfd_byte vaddr[4]; 425 } Elf32_External_crinfo; 426 427 typedef struct 428 { 429 bfd_byte info[4]; 430 bfd_byte konst[4]; 431 } Elf32_External_crinfo2; 432 433 /* These are the constants used to swap the bitfields in a crinfo. */ 434 435 #define CRINFO_CTYPE (0x1) 436 #define CRINFO_CTYPE_SH (31) 437 #define CRINFO_RTYPE (0xf) 438 #define CRINFO_RTYPE_SH (27) 439 #define CRINFO_DIST2TO (0xff) 440 #define CRINFO_DIST2TO_SH (19) 441 #define CRINFO_RELVADDR (0x7ffff) 442 #define CRINFO_RELVADDR_SH (0) 443 444 /* A compact relocation info has long (3 words) or short (2 words) 445 formats. A short format doesn't have VADDR field and relvaddr 446 fields contains ((VADDR - vaddr of the previous entry) >> 2). */ 447 #define CRF_MIPS_LONG 1 448 #define CRF_MIPS_SHORT 0 449 450 /* There are 4 types of compact relocation at least. The value KONST 451 has different meaning for each type: 452 453 (type) (konst) 454 CT_MIPS_REL32 Address in data 455 CT_MIPS_WORD Address in word (XXX) 456 CT_MIPS_GPHI_LO GP - vaddr 457 CT_MIPS_JMPAD Address to jump 458 */ 459 460 #define CRT_MIPS_REL32 0xa 461 #define CRT_MIPS_WORD 0xb 462 #define CRT_MIPS_GPHI_LO 0xc 463 #define CRT_MIPS_JMPAD 0xd 464 465 #define mips_elf_set_cr_format(x,format) ((x).ctype = (format)) 466 #define mips_elf_set_cr_type(x,type) ((x).rtype = (type)) 467 #define mips_elf_set_cr_dist2to(x,v) ((x).dist2to = (v)) 468 #define mips_elf_set_cr_relvaddr(x,d) ((x).relvaddr = (d)<<2) 469 470 /* The structure of the runtime procedure descriptor created by the 471 loader for use by the static exception system. */ 472 473 typedef struct runtime_pdr { 474 bfd_vma adr; /* Memory address of start of procedure. */ 475 long regmask; /* Save register mask. */ 476 long regoffset; /* Save register offset. */ 477 long fregmask; /* Save floating point register mask. */ 478 long fregoffset; /* Save floating point register offset. */ 479 long frameoffset; /* Frame size. */ 480 short framereg; /* Frame pointer register. */ 481 short pcreg; /* Offset or reg of return pc. */ 482 long irpss; /* Index into the runtime string table. */ 483 long reserved; 484 struct exception_info *exception_info;/* Pointer to exception array. */ 485 } RPDR, *pRPDR; 486 #define cbRPDR sizeof (RPDR) 487 #define rpdNil ((pRPDR) 0) 488 489 static struct mips_got_entry *mips_elf_create_local_got_entry 490 (bfd *, struct bfd_link_info *, bfd *, struct mips_got_info *, asection *, 491 asection *, bfd_vma, unsigned long, struct mips_elf_link_hash_entry *, int); 492 static bfd_boolean mips_elf_sort_hash_table_f 493 (struct mips_elf_link_hash_entry *, void *); 494 static bfd_vma mips_elf_high 495 (bfd_vma); 496 static bfd_boolean mips_elf_stub_section_p 497 (bfd *, asection *); 498 static bfd_boolean mips_elf_create_dynamic_relocation 499 (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *, 500 struct mips_elf_link_hash_entry *, asection *, bfd_vma, 501 bfd_vma *, asection *); 502 static hashval_t mips_elf_got_entry_hash 503 (const void *); 504 static bfd_vma mips_elf_adjust_gp 505 (bfd *, struct mips_got_info *, bfd *); 506 static struct mips_got_info *mips_elf_got_for_ibfd 507 (struct mips_got_info *, bfd *); 508 509 /* This will be used when we sort the dynamic relocation records. */ 510 static bfd *reldyn_sorting_bfd; 511 512 /* Nonzero if ABFD is using the N32 ABI. */ 513 #define ABI_N32_P(abfd) \ 514 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0) 515 516 /* Nonzero if ABFD is using the N64 ABI. */ 517 #define ABI_64_P(abfd) \ 518 (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64) 519 520 /* Nonzero if ABFD is using NewABI conventions. */ 521 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd)) 522 523 /* The IRIX compatibility level we are striving for. */ 524 #define IRIX_COMPAT(abfd) \ 525 (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd)) 526 527 /* Whether we are trying to be compatible with IRIX at all. */ 528 #define SGI_COMPAT(abfd) \ 529 (IRIX_COMPAT (abfd) != ict_none) 530 531 /* The name of the options section. */ 532 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \ 533 (NEWABI_P (abfd) ? ".MIPS.options" : ".options") 534 535 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section. 536 Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME. */ 537 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \ 538 (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0) 539 540 /* Whether the section is readonly. */ 541 #define MIPS_ELF_READONLY_SECTION(sec) \ 542 ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) \ 543 == (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) 544 545 /* The name of the stub section. */ 546 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs" 547 548 /* The size of an external REL relocation. */ 549 #define MIPS_ELF_REL_SIZE(abfd) \ 550 (get_elf_backend_data (abfd)->s->sizeof_rel) 551 552 /* The size of an external RELA relocation. */ 553 #define MIPS_ELF_RELA_SIZE(abfd) \ 554 (get_elf_backend_data (abfd)->s->sizeof_rela) 555 556 /* The size of an external dynamic table entry. */ 557 #define MIPS_ELF_DYN_SIZE(abfd) \ 558 (get_elf_backend_data (abfd)->s->sizeof_dyn) 559 560 /* The size of a GOT entry. */ 561 #define MIPS_ELF_GOT_SIZE(abfd) \ 562 (get_elf_backend_data (abfd)->s->arch_size / 8) 563 564 /* The size of a symbol-table entry. */ 565 #define MIPS_ELF_SYM_SIZE(abfd) \ 566 (get_elf_backend_data (abfd)->s->sizeof_sym) 567 568 /* The default alignment for sections, as a power of two. */ 569 #define MIPS_ELF_LOG_FILE_ALIGN(abfd) \ 570 (get_elf_backend_data (abfd)->s->log_file_align) 571 572 /* Get word-sized data. */ 573 #define MIPS_ELF_GET_WORD(abfd, ptr) \ 574 (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr)) 575 576 /* Put out word-sized data. */ 577 #define MIPS_ELF_PUT_WORD(abfd, val, ptr) \ 578 (ABI_64_P (abfd) \ 579 ? bfd_put_64 (abfd, val, ptr) \ 580 : bfd_put_32 (abfd, val, ptr)) 581 582 /* Add a dynamic symbol table-entry. */ 583 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \ 584 _bfd_elf_add_dynamic_entry (info, tag, val) 585 586 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela) \ 587 (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela)) 588 589 /* Determine whether the internal relocation of index REL_IDX is REL 590 (zero) or RELA (non-zero). The assumption is that, if there are 591 two relocation sections for this section, one of them is REL and 592 the other is RELA. If the index of the relocation we're testing is 593 in range for the first relocation section, check that the external 594 relocation size is that for RELA. It is also assumed that, if 595 rel_idx is not in range for the first section, and this first 596 section contains REL relocs, then the relocation is in the second 597 section, that is RELA. */ 598 #define MIPS_RELOC_RELA_P(abfd, sec, rel_idx) \ 599 ((NUM_SHDR_ENTRIES (&elf_section_data (sec)->rel_hdr) \ 600 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel \ 601 > (bfd_vma)(rel_idx)) \ 602 == (elf_section_data (sec)->rel_hdr.sh_entsize \ 603 == (ABI_64_P (abfd) ? sizeof (Elf64_External_Rela) \ 604 : sizeof (Elf32_External_Rela)))) 605 606 /* The name of the dynamic relocation section. */ 607 #define MIPS_ELF_REL_DYN_NAME(INFO) \ 608 (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn") 609 610 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value 611 from smaller values. Start with zero, widen, *then* decrement. */ 612 #define MINUS_ONE (((bfd_vma)0) - 1) 613 #define MINUS_TWO (((bfd_vma)0) - 2) 614 615 /* The number of local .got entries we reserve. */ 616 #define MIPS_RESERVED_GOTNO(INFO) \ 617 (mips_elf_hash_table (INFO)->is_vxworks ? 3 : 2) 618 619 /* The offset of $gp from the beginning of the .got section. */ 620 #define ELF_MIPS_GP_OFFSET(INFO) \ 621 (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0) 622 623 /* The maximum size of the GOT for it to be addressable using 16-bit 624 offsets from $gp. */ 625 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff) 626 627 /* Instructions which appear in a stub. */ 628 #define STUB_LW(abfd) \ 629 ((ABI_64_P (abfd) \ 630 ? 0xdf998010 /* ld t9,0x8010(gp) */ \ 631 : 0x8f998010)) /* lw t9,0x8010(gp) */ 632 #define STUB_MOVE(abfd) \ 633 ((ABI_64_P (abfd) \ 634 ? 0x03e0782d /* daddu t7,ra */ \ 635 : 0x03e07821)) /* addu t7,ra */ 636 #define STUB_LUI(VAL) (0x3c180000 + (VAL)) /* lui t8,VAL */ 637 #define STUB_JALR 0x0320f809 /* jalr t9,ra */ 638 #define STUB_ORI(VAL) (0x37180000 + (VAL)) /* ori t8,t8,VAL */ 639 #define STUB_LI16U(VAL) (0x34180000 + (VAL)) /* ori t8,zero,VAL unsigned */ 640 #define STUB_LI16S(abfd, VAL) \ 641 ((ABI_64_P (abfd) \ 642 ? (0x64180000 + (VAL)) /* daddiu t8,zero,VAL sign extended */ \ 643 : (0x24180000 + (VAL)))) /* addiu t8,zero,VAL sign extended */ 644 645 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16 646 #define MIPS_FUNCTION_STUB_BIG_SIZE 20 647 648 /* The name of the dynamic interpreter. This is put in the .interp 649 section. */ 650 651 #define ELF_DYNAMIC_INTERPRETER(abfd) \ 652 (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" \ 653 : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" \ 654 : "/usr/lib/libc.so.1") 655 656 #ifdef BFD64 657 #define MNAME(bfd,pre,pos) \ 658 (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos)) 659 #define ELF_R_SYM(bfd, i) \ 660 (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i)) 661 #define ELF_R_TYPE(bfd, i) \ 662 (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i)) 663 #define ELF_R_INFO(bfd, s, t) \ 664 (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t)) 665 #else 666 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos) 667 #define ELF_R_SYM(bfd, i) \ 668 (ELF32_R_SYM (i)) 669 #define ELF_R_TYPE(bfd, i) \ 670 (ELF32_R_TYPE (i)) 671 #define ELF_R_INFO(bfd, s, t) \ 672 (ELF32_R_INFO (s, t)) 673 #endif 674 675 /* The mips16 compiler uses a couple of special sections to handle 676 floating point arguments. 677 678 Section names that look like .mips16.fn.FNNAME contain stubs that 679 copy floating point arguments from the fp regs to the gp regs and 680 then jump to FNNAME. If any 32 bit function calls FNNAME, the 681 call should be redirected to the stub instead. If no 32 bit 682 function calls FNNAME, the stub should be discarded. We need to 683 consider any reference to the function, not just a call, because 684 if the address of the function is taken we will need the stub, 685 since the address might be passed to a 32 bit function. 686 687 Section names that look like .mips16.call.FNNAME contain stubs 688 that copy floating point arguments from the gp regs to the fp 689 regs and then jump to FNNAME. If FNNAME is a 32 bit function, 690 then any 16 bit function that calls FNNAME should be redirected 691 to the stub instead. If FNNAME is not a 32 bit function, the 692 stub should be discarded. 693 694 .mips16.call.fp.FNNAME sections are similar, but contain stubs 695 which call FNNAME and then copy the return value from the fp regs 696 to the gp regs. These stubs store the return value in $18 while 697 calling FNNAME; any function which might call one of these stubs 698 must arrange to save $18 around the call. (This case is not 699 needed for 32 bit functions that call 16 bit functions, because 700 16 bit functions always return floating point values in both 701 $f0/$f1 and $2/$3.) 702 703 Note that in all cases FNNAME might be defined statically. 704 Therefore, FNNAME is not used literally. Instead, the relocation 705 information will indicate which symbol the section is for. 706 707 We record any stubs that we find in the symbol table. */ 708 709 #define FN_STUB ".mips16.fn." 710 #define CALL_STUB ".mips16.call." 711 #define CALL_FP_STUB ".mips16.call.fp." 712 713 /* The format of the first PLT entry in a VxWorks executable. */ 714 static const bfd_vma mips_vxworks_exec_plt0_entry[] = { 715 0x3c190000, /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_) */ 716 0x27390000, /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_) */ 717 0x8f390008, /* lw t9, 8(t9) */ 718 0x00000000, /* nop */ 719 0x03200008, /* jr t9 */ 720 0x00000000 /* nop */ 721 }; 722 723 /* The format of subsequent PLT entries. */ 724 static const bfd_vma mips_vxworks_exec_plt_entry[] = { 725 0x10000000, /* b .PLT_resolver */ 726 0x24180000, /* li t8, <pltindex> */ 727 0x3c190000, /* lui t9, %hi(<.got.plt slot>) */ 728 0x27390000, /* addiu t9, t9, %lo(<.got.plt slot>) */ 729 0x8f390000, /* lw t9, 0(t9) */ 730 0x00000000, /* nop */ 731 0x03200008, /* jr t9 */ 732 0x00000000 /* nop */ 733 }; 734 735 /* The format of the first PLT entry in a VxWorks shared object. */ 736 static const bfd_vma mips_vxworks_shared_plt0_entry[] = { 737 0x8f990008, /* lw t9, 8(gp) */ 738 0x00000000, /* nop */ 739 0x03200008, /* jr t9 */ 740 0x00000000, /* nop */ 741 0x00000000, /* nop */ 742 0x00000000 /* nop */ 743 }; 744 745 /* The format of subsequent PLT entries. */ 746 static const bfd_vma mips_vxworks_shared_plt_entry[] = { 747 0x10000000, /* b .PLT_resolver */ 748 0x24180000 /* li t8, <pltindex> */ 749 }; 750 751 /* Look up an entry in a MIPS ELF linker hash table. */ 752 753 #define mips_elf_link_hash_lookup(table, string, create, copy, follow) \ 754 ((struct mips_elf_link_hash_entry *) \ 755 elf_link_hash_lookup (&(table)->root, (string), (create), \ 756 (copy), (follow))) 757 758 /* Traverse a MIPS ELF linker hash table. */ 759 760 #define mips_elf_link_hash_traverse(table, func, info) \ 761 (elf_link_hash_traverse \ 762 (&(table)->root, \ 763 (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \ 764 (info))) 765 766 /* Get the MIPS ELF linker hash table from a link_info structure. */ 767 768 #define mips_elf_hash_table(p) \ 769 ((struct mips_elf_link_hash_table *) ((p)->hash)) 770 771 /* Find the base offsets for thread-local storage in this object, 772 for GD/LD and IE/LE respectively. */ 773 774 #define TP_OFFSET 0x7000 775 #define DTP_OFFSET 0x8000 776 777 static bfd_vma 778 dtprel_base (struct bfd_link_info *info) 779 { 780 /* If tls_sec is NULL, we should have signalled an error already. */ 781 if (elf_hash_table (info)->tls_sec == NULL) 782 return 0; 783 return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET; 784 } 785 786 static bfd_vma 787 tprel_base (struct bfd_link_info *info) 788 { 789 /* If tls_sec is NULL, we should have signalled an error already. */ 790 if (elf_hash_table (info)->tls_sec == NULL) 791 return 0; 792 return elf_hash_table (info)->tls_sec->vma + TP_OFFSET; 793 } 794 795 /* Create an entry in a MIPS ELF linker hash table. */ 796 797 static struct bfd_hash_entry * 798 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry, 799 struct bfd_hash_table *table, const char *string) 800 { 801 struct mips_elf_link_hash_entry *ret = 802 (struct mips_elf_link_hash_entry *) entry; 803 804 /* Allocate the structure if it has not already been allocated by a 805 subclass. */ 806 if (ret == NULL) 807 ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry)); 808 if (ret == NULL) 809 return (struct bfd_hash_entry *) ret; 810 811 /* Call the allocation method of the superclass. */ 812 ret = ((struct mips_elf_link_hash_entry *) 813 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret, 814 table, string)); 815 if (ret != NULL) 816 { 817 /* Set local fields. */ 818 memset (&ret->esym, 0, sizeof (EXTR)); 819 /* We use -2 as a marker to indicate that the information has 820 not been set. -1 means there is no associated ifd. */ 821 ret->esym.ifd = -2; 822 ret->possibly_dynamic_relocs = 0; 823 ret->readonly_reloc = FALSE; 824 ret->no_fn_stub = FALSE; 825 ret->fn_stub = NULL; 826 ret->need_fn_stub = FALSE; 827 ret->call_stub = NULL; 828 ret->call_fp_stub = NULL; 829 ret->forced_local = FALSE; 830 ret->is_branch_target = FALSE; 831 ret->is_relocation_target = FALSE; 832 ret->tls_type = GOT_NORMAL; 833 } 834 835 return (struct bfd_hash_entry *) ret; 836 } 837 838 bfd_boolean 839 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec) 840 { 841 struct _mips_elf_section_data *sdata; 842 bfd_size_type amt = sizeof (*sdata); 843 844 sdata = bfd_zalloc (abfd, amt); 845 if (sdata == NULL) 846 return FALSE; 847 sec->used_by_bfd = sdata; 848 849 return _bfd_elf_new_section_hook (abfd, sec); 850 } 851 852 /* Read ECOFF debugging information from a .mdebug section into a 853 ecoff_debug_info structure. */ 854 855 bfd_boolean 856 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section, 857 struct ecoff_debug_info *debug) 858 { 859 HDRR *symhdr; 860 const struct ecoff_debug_swap *swap; 861 char *ext_hdr; 862 863 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap; 864 memset (debug, 0, sizeof (*debug)); 865 866 ext_hdr = bfd_malloc (swap->external_hdr_size); 867 if (ext_hdr == NULL && swap->external_hdr_size != 0) 868 goto error_return; 869 870 if (! bfd_get_section_contents (abfd, section, ext_hdr, 0, 871 swap->external_hdr_size)) 872 goto error_return; 873 874 symhdr = &debug->symbolic_header; 875 (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr); 876 877 /* The symbolic header contains absolute file offsets and sizes to 878 read. */ 879 #define READ(ptr, offset, count, size, type) \ 880 if (symhdr->count == 0) \ 881 debug->ptr = NULL; \ 882 else \ 883 { \ 884 bfd_size_type amt = (bfd_size_type) size * symhdr->count; \ 885 debug->ptr = bfd_malloc (amt); \ 886 if (debug->ptr == NULL) \ 887 goto error_return; \ 888 if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0 \ 889 || bfd_bread (debug->ptr, amt, abfd) != amt) \ 890 goto error_return; \ 891 } 892 893 READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *); 894 READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *); 895 READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *); 896 READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *); 897 READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *); 898 READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext), 899 union aux_ext *); 900 READ (ss, cbSsOffset, issMax, sizeof (char), char *); 901 READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *); 902 READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *); 903 READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *); 904 READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *); 905 #undef READ 906 907 debug->fdr = NULL; 908 909 return TRUE; 910 911 error_return: 912 if (ext_hdr != NULL) 913 free (ext_hdr); 914 if (debug->line != NULL) 915 free (debug->line); 916 if (debug->external_dnr != NULL) 917 free (debug->external_dnr); 918 if (debug->external_pdr != NULL) 919 free (debug->external_pdr); 920 if (debug->external_sym != NULL) 921 free (debug->external_sym); 922 if (debug->external_opt != NULL) 923 free (debug->external_opt); 924 if (debug->external_aux != NULL) 925 free (debug->external_aux); 926 if (debug->ss != NULL) 927 free (debug->ss); 928 if (debug->ssext != NULL) 929 free (debug->ssext); 930 if (debug->external_fdr != NULL) 931 free (debug->external_fdr); 932 if (debug->external_rfd != NULL) 933 free (debug->external_rfd); 934 if (debug->external_ext != NULL) 935 free (debug->external_ext); 936 return FALSE; 937 } 938 939 /* Swap RPDR (runtime procedure table entry) for output. */ 940 941 static void 942 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex) 943 { 944 H_PUT_S32 (abfd, in->adr, ex->p_adr); 945 H_PUT_32 (abfd, in->regmask, ex->p_regmask); 946 H_PUT_32 (abfd, in->regoffset, ex->p_regoffset); 947 H_PUT_32 (abfd, in->fregmask, ex->p_fregmask); 948 H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset); 949 H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset); 950 951 H_PUT_16 (abfd, in->framereg, ex->p_framereg); 952 H_PUT_16 (abfd, in->pcreg, ex->p_pcreg); 953 954 H_PUT_32 (abfd, in->irpss, ex->p_irpss); 955 } 956 957 /* Create a runtime procedure table from the .mdebug section. */ 958 959 static bfd_boolean 960 mips_elf_create_procedure_table (void *handle, bfd *abfd, 961 struct bfd_link_info *info, asection *s, 962 struct ecoff_debug_info *debug) 963 { 964 const struct ecoff_debug_swap *swap; 965 HDRR *hdr = &debug->symbolic_header; 966 RPDR *rpdr, *rp; 967 struct rpdr_ext *erp; 968 void *rtproc; 969 struct pdr_ext *epdr; 970 struct sym_ext *esym; 971 char *ss, **sv; 972 char *str; 973 bfd_size_type size; 974 bfd_size_type count; 975 unsigned long sindex; 976 unsigned long i; 977 PDR pdr; 978 SYMR sym; 979 const char *no_name_func = _("static procedure (no name)"); 980 981 epdr = NULL; 982 rpdr = NULL; 983 esym = NULL; 984 ss = NULL; 985 sv = NULL; 986 987 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap; 988 989 sindex = strlen (no_name_func) + 1; 990 count = hdr->ipdMax; 991 if (count > 0) 992 { 993 size = swap->external_pdr_size; 994 995 epdr = bfd_malloc (size * count); 996 if (epdr == NULL) 997 goto error_return; 998 999 if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr)) 1000 goto error_return; 1001 1002 size = sizeof (RPDR); 1003 rp = rpdr = bfd_malloc (size * count); 1004 if (rpdr == NULL) 1005 goto error_return; 1006 1007 size = sizeof (char *); 1008 sv = bfd_malloc (size * count); 1009 if (sv == NULL) 1010 goto error_return; 1011 1012 count = hdr->isymMax; 1013 size = swap->external_sym_size; 1014 esym = bfd_malloc (size * count); 1015 if (esym == NULL) 1016 goto error_return; 1017 1018 if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym)) 1019 goto error_return; 1020 1021 count = hdr->issMax; 1022 ss = bfd_malloc (count); 1023 if (ss == NULL) 1024 goto error_return; 1025 if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss)) 1026 goto error_return; 1027 1028 count = hdr->ipdMax; 1029 for (i = 0; i < (unsigned long) count; i++, rp++) 1030 { 1031 (*swap->swap_pdr_in) (abfd, epdr + i, &pdr); 1032 (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym); 1033 rp->adr = sym.value; 1034 rp->regmask = pdr.regmask; 1035 rp->regoffset = pdr.regoffset; 1036 rp->fregmask = pdr.fregmask; 1037 rp->fregoffset = pdr.fregoffset; 1038 rp->frameoffset = pdr.frameoffset; 1039 rp->framereg = pdr.framereg; 1040 rp->pcreg = pdr.pcreg; 1041 rp->irpss = sindex; 1042 sv[i] = ss + sym.iss; 1043 sindex += strlen (sv[i]) + 1; 1044 } 1045 } 1046 1047 size = sizeof (struct rpdr_ext) * (count + 2) + sindex; 1048 size = BFD_ALIGN (size, 16); 1049 rtproc = bfd_alloc (abfd, size); 1050 if (rtproc == NULL) 1051 { 1052 mips_elf_hash_table (info)->procedure_count = 0; 1053 goto error_return; 1054 } 1055 1056 mips_elf_hash_table (info)->procedure_count = count + 2; 1057 1058 erp = rtproc; 1059 memset (erp, 0, sizeof (struct rpdr_ext)); 1060 erp++; 1061 str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2); 1062 strcpy (str, no_name_func); 1063 str += strlen (no_name_func) + 1; 1064 for (i = 0; i < count; i++) 1065 { 1066 ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i); 1067 strcpy (str, sv[i]); 1068 str += strlen (sv[i]) + 1; 1069 } 1070 H_PUT_S32 (abfd, -1, (erp + count)->p_adr); 1071 1072 /* Set the size and contents of .rtproc section. */ 1073 s->size = size; 1074 s->contents = rtproc; 1075 1076 /* Skip this section later on (I don't think this currently 1077 matters, but someday it might). */ 1078 s->map_head.link_order = NULL; 1079 1080 if (epdr != NULL) 1081 free (epdr); 1082 if (rpdr != NULL) 1083 free (rpdr); 1084 if (esym != NULL) 1085 free (esym); 1086 if (ss != NULL) 1087 free (ss); 1088 if (sv != NULL) 1089 free (sv); 1090 1091 return TRUE; 1092 1093 error_return: 1094 if (epdr != NULL) 1095 free (epdr); 1096 if (rpdr != NULL) 1097 free (rpdr); 1098 if (esym != NULL) 1099 free (esym); 1100 if (ss != NULL) 1101 free (ss); 1102 if (sv != NULL) 1103 free (sv); 1104 return FALSE; 1105 } 1106 1107 /* Check the mips16 stubs for a particular symbol, and see if we can 1108 discard them. */ 1109 1110 static bfd_boolean 1111 mips_elf_check_mips16_stubs (struct mips_elf_link_hash_entry *h, 1112 void *data ATTRIBUTE_UNUSED) 1113 { 1114 if (h->root.root.type == bfd_link_hash_warning) 1115 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 1116 1117 if (h->fn_stub != NULL 1118 && ! h->need_fn_stub) 1119 { 1120 /* We don't need the fn_stub; the only references to this symbol 1121 are 16 bit calls. Clobber the size to 0 to prevent it from 1122 being included in the link. */ 1123 h->fn_stub->size = 0; 1124 h->fn_stub->flags &= ~SEC_RELOC; 1125 h->fn_stub->reloc_count = 0; 1126 h->fn_stub->flags |= SEC_EXCLUDE; 1127 } 1128 1129 if (h->call_stub != NULL 1130 && h->root.other == STO_MIPS16) 1131 { 1132 /* We don't need the call_stub; this is a 16 bit function, so 1133 calls from other 16 bit functions are OK. Clobber the size 1134 to 0 to prevent it from being included in the link. */ 1135 h->call_stub->size = 0; 1136 h->call_stub->flags &= ~SEC_RELOC; 1137 h->call_stub->reloc_count = 0; 1138 h->call_stub->flags |= SEC_EXCLUDE; 1139 } 1140 1141 if (h->call_fp_stub != NULL 1142 && h->root.other == STO_MIPS16) 1143 { 1144 /* We don't need the call_stub; this is a 16 bit function, so 1145 calls from other 16 bit functions are OK. Clobber the size 1146 to 0 to prevent it from being included in the link. */ 1147 h->call_fp_stub->size = 0; 1148 h->call_fp_stub->flags &= ~SEC_RELOC; 1149 h->call_fp_stub->reloc_count = 0; 1150 h->call_fp_stub->flags |= SEC_EXCLUDE; 1151 } 1152 1153 return TRUE; 1154 } 1155 1156 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions. 1157 Most mips16 instructions are 16 bits, but these instructions 1158 are 32 bits. 1159 1160 The format of these instructions is: 1161 1162 +--------------+--------------------------------+ 1163 | JALX | X| Imm 20:16 | Imm 25:21 | 1164 +--------------+--------------------------------+ 1165 | Immediate 15:0 | 1166 +-----------------------------------------------+ 1167 1168 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx. 1169 Note that the immediate value in the first word is swapped. 1170 1171 When producing a relocatable object file, R_MIPS16_26 is 1172 handled mostly like R_MIPS_26. In particular, the addend is 1173 stored as a straight 26-bit value in a 32-bit instruction. 1174 (gas makes life simpler for itself by never adjusting a 1175 R_MIPS16_26 reloc to be against a section, so the addend is 1176 always zero). However, the 32 bit instruction is stored as 2 1177 16-bit values, rather than a single 32-bit value. In a 1178 big-endian file, the result is the same; in a little-endian 1179 file, the two 16-bit halves of the 32 bit value are swapped. 1180 This is so that a disassembler can recognize the jal 1181 instruction. 1182 1183 When doing a final link, R_MIPS16_26 is treated as a 32 bit 1184 instruction stored as two 16-bit values. The addend A is the 1185 contents of the targ26 field. The calculation is the same as 1186 R_MIPS_26. When storing the calculated value, reorder the 1187 immediate value as shown above, and don't forget to store the 1188 value as two 16-bit values. 1189 1190 To put it in MIPS ABI terms, the relocation field is T-targ26-16, 1191 defined as 1192 1193 big-endian: 1194 +--------+----------------------+ 1195 | | | 1196 | | targ26-16 | 1197 |31 26|25 0| 1198 +--------+----------------------+ 1199 1200 little-endian: 1201 +----------+------+-------------+ 1202 | | | | 1203 | sub1 | | sub2 | 1204 |0 9|10 15|16 31| 1205 +----------+--------------------+ 1206 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is 1207 ((sub1 << 16) | sub2)). 1208 1209 When producing a relocatable object file, the calculation is 1210 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2) 1211 When producing a fully linked file, the calculation is 1212 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2) 1213 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff) 1214 1215 R_MIPS16_GPREL is used for GP-relative addressing in mips16 1216 mode. A typical instruction will have a format like this: 1217 1218 +--------------+--------------------------------+ 1219 | EXTEND | Imm 10:5 | Imm 15:11 | 1220 +--------------+--------------------------------+ 1221 | Major | rx | ry | Imm 4:0 | 1222 +--------------+--------------------------------+ 1223 1224 EXTEND is the five bit value 11110. Major is the instruction 1225 opcode. 1226 1227 This is handled exactly like R_MIPS_GPREL16, except that the 1228 addend is retrieved and stored as shown in this diagram; that 1229 is, the Imm fields above replace the V-rel16 field. 1230 1231 All we need to do here is shuffle the bits appropriately. As 1232 above, the two 16-bit halves must be swapped on a 1233 little-endian system. 1234 1235 R_MIPS16_HI16 and R_MIPS16_LO16 are used in mips16 mode to 1236 access data when neither GP-relative nor PC-relative addressing 1237 can be used. They are handled like R_MIPS_HI16 and R_MIPS_LO16, 1238 except that the addend is retrieved and stored as shown above 1239 for R_MIPS16_GPREL. 1240 */ 1241 void 1242 _bfd_mips16_elf_reloc_unshuffle (bfd *abfd, int r_type, 1243 bfd_boolean jal_shuffle, bfd_byte *data) 1244 { 1245 bfd_vma extend, insn, val; 1246 1247 if (r_type != R_MIPS16_26 && r_type != R_MIPS16_GPREL 1248 && r_type != R_MIPS16_HI16 && r_type != R_MIPS16_LO16) 1249 return; 1250 1251 /* Pick up the mips16 extend instruction and the real instruction. */ 1252 extend = bfd_get_16 (abfd, data); 1253 insn = bfd_get_16 (abfd, data + 2); 1254 if (r_type == R_MIPS16_26) 1255 { 1256 if (jal_shuffle) 1257 val = ((extend & 0xfc00) << 16) | ((extend & 0x3e0) << 11) 1258 | ((extend & 0x1f) << 21) | insn; 1259 else 1260 val = extend << 16 | insn; 1261 } 1262 else 1263 val = ((extend & 0xf800) << 16) | ((insn & 0xffe0) << 11) 1264 | ((extend & 0x1f) << 11) | (extend & 0x7e0) | (insn & 0x1f); 1265 bfd_put_32 (abfd, val, data); 1266 } 1267 1268 void 1269 _bfd_mips16_elf_reloc_shuffle (bfd *abfd, int r_type, 1270 bfd_boolean jal_shuffle, bfd_byte *data) 1271 { 1272 bfd_vma extend, insn, val; 1273 1274 if (r_type != R_MIPS16_26 && r_type != R_MIPS16_GPREL 1275 && r_type != R_MIPS16_HI16 && r_type != R_MIPS16_LO16) 1276 return; 1277 1278 val = bfd_get_32 (abfd, data); 1279 if (r_type == R_MIPS16_26) 1280 { 1281 if (jal_shuffle) 1282 { 1283 insn = val & 0xffff; 1284 extend = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0) 1285 | ((val >> 21) & 0x1f); 1286 } 1287 else 1288 { 1289 insn = val & 0xffff; 1290 extend = val >> 16; 1291 } 1292 } 1293 else 1294 { 1295 insn = ((val >> 11) & 0xffe0) | (val & 0x1f); 1296 extend = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0); 1297 } 1298 bfd_put_16 (abfd, insn, data + 2); 1299 bfd_put_16 (abfd, extend, data); 1300 } 1301 1302 bfd_reloc_status_type 1303 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol, 1304 arelent *reloc_entry, asection *input_section, 1305 bfd_boolean relocatable, void *data, bfd_vma gp) 1306 { 1307 bfd_vma relocation; 1308 bfd_signed_vma val; 1309 bfd_reloc_status_type status; 1310 1311 if (bfd_is_com_section (symbol->section)) 1312 relocation = 0; 1313 else 1314 relocation = symbol->value; 1315 1316 relocation += symbol->section->output_section->vma; 1317 relocation += symbol->section->output_offset; 1318 1319 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 1320 return bfd_reloc_outofrange; 1321 1322 /* Set val to the offset into the section or symbol. */ 1323 val = reloc_entry->addend; 1324 1325 _bfd_mips_elf_sign_extend (val, 16); 1326 1327 /* Adjust val for the final section location and GP value. If we 1328 are producing relocatable output, we don't want to do this for 1329 an external symbol. */ 1330 if (! relocatable 1331 || (symbol->flags & BSF_SECTION_SYM) != 0) 1332 val += relocation - gp; 1333 1334 if (reloc_entry->howto->partial_inplace) 1335 { 1336 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val, 1337 (bfd_byte *) data 1338 + reloc_entry->address); 1339 if (status != bfd_reloc_ok) 1340 return status; 1341 } 1342 else 1343 reloc_entry->addend = val; 1344 1345 if (relocatable) 1346 reloc_entry->address += input_section->output_offset; 1347 1348 return bfd_reloc_ok; 1349 } 1350 1351 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or 1352 R_MIPS_GOT16. REL is the relocation, INPUT_SECTION is the section 1353 that contains the relocation field and DATA points to the start of 1354 INPUT_SECTION. */ 1355 1356 struct mips_hi16 1357 { 1358 struct mips_hi16 *next; 1359 bfd_byte *data; 1360 asection *input_section; 1361 arelent rel; 1362 }; 1363 1364 /* FIXME: This should not be a static variable. */ 1365 1366 static struct mips_hi16 *mips_hi16_list; 1367 1368 /* A howto special_function for REL *HI16 relocations. We can only 1369 calculate the correct value once we've seen the partnering 1370 *LO16 relocation, so just save the information for later. 1371 1372 The ABI requires that the *LO16 immediately follow the *HI16. 1373 However, as a GNU extension, we permit an arbitrary number of 1374 *HI16s to be associated with a single *LO16. This significantly 1375 simplies the relocation handling in gcc. */ 1376 1377 bfd_reloc_status_type 1378 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry, 1379 asymbol *symbol ATTRIBUTE_UNUSED, void *data, 1380 asection *input_section, bfd *output_bfd, 1381 char **error_message ATTRIBUTE_UNUSED) 1382 { 1383 struct mips_hi16 *n; 1384 1385 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 1386 return bfd_reloc_outofrange; 1387 1388 n = bfd_malloc (sizeof *n); 1389 if (n == NULL) 1390 return bfd_reloc_outofrange; 1391 1392 n->next = mips_hi16_list; 1393 n->data = data; 1394 n->input_section = input_section; 1395 n->rel = *reloc_entry; 1396 mips_hi16_list = n; 1397 1398 if (output_bfd != NULL) 1399 reloc_entry->address += input_section->output_offset; 1400 1401 return bfd_reloc_ok; 1402 } 1403 1404 /* A howto special_function for REL R_MIPS_GOT16 relocations. This is just 1405 like any other 16-bit relocation when applied to global symbols, but is 1406 treated in the same as R_MIPS_HI16 when applied to local symbols. */ 1407 1408 bfd_reloc_status_type 1409 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, 1410 void *data, asection *input_section, 1411 bfd *output_bfd, char **error_message) 1412 { 1413 if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0 1414 || bfd_is_und_section (bfd_get_section (symbol)) 1415 || bfd_is_com_section (bfd_get_section (symbol))) 1416 /* The relocation is against a global symbol. */ 1417 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data, 1418 input_section, output_bfd, 1419 error_message); 1420 1421 return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data, 1422 input_section, output_bfd, error_message); 1423 } 1424 1425 /* A howto special_function for REL *LO16 relocations. The *LO16 itself 1426 is a straightforward 16 bit inplace relocation, but we must deal with 1427 any partnering high-part relocations as well. */ 1428 1429 bfd_reloc_status_type 1430 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, 1431 void *data, asection *input_section, 1432 bfd *output_bfd, char **error_message) 1433 { 1434 bfd_vma vallo; 1435 bfd_byte *location = (bfd_byte *) data + reloc_entry->address; 1436 1437 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 1438 return bfd_reloc_outofrange; 1439 1440 _bfd_mips16_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE, 1441 location); 1442 vallo = bfd_get_32 (abfd, location); 1443 _bfd_mips16_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE, 1444 location); 1445 1446 while (mips_hi16_list != NULL) 1447 { 1448 bfd_reloc_status_type ret; 1449 struct mips_hi16 *hi; 1450 1451 hi = mips_hi16_list; 1452 1453 /* R_MIPS_GOT16 relocations are something of a special case. We 1454 want to install the addend in the same way as for a R_MIPS_HI16 1455 relocation (with a rightshift of 16). However, since GOT16 1456 relocations can also be used with global symbols, their howto 1457 has a rightshift of 0. */ 1458 if (hi->rel.howto->type == R_MIPS_GOT16) 1459 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE); 1460 1461 /* VALLO is a signed 16-bit number. Bias it by 0x8000 so that any 1462 carry or borrow will induce a change of +1 or -1 in the high part. */ 1463 hi->rel.addend += (vallo + 0x8000) & 0xffff; 1464 1465 ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data, 1466 hi->input_section, output_bfd, 1467 error_message); 1468 if (ret != bfd_reloc_ok) 1469 return ret; 1470 1471 mips_hi16_list = hi->next; 1472 free (hi); 1473 } 1474 1475 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data, 1476 input_section, output_bfd, 1477 error_message); 1478 } 1479 1480 /* A generic howto special_function. This calculates and installs the 1481 relocation itself, thus avoiding the oft-discussed problems in 1482 bfd_perform_relocation and bfd_install_relocation. */ 1483 1484 bfd_reloc_status_type 1485 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry, 1486 asymbol *symbol, void *data ATTRIBUTE_UNUSED, 1487 asection *input_section, bfd *output_bfd, 1488 char **error_message ATTRIBUTE_UNUSED) 1489 { 1490 bfd_signed_vma val; 1491 bfd_reloc_status_type status; 1492 bfd_boolean relocatable; 1493 1494 relocatable = (output_bfd != NULL); 1495 1496 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) 1497 return bfd_reloc_outofrange; 1498 1499 /* Build up the field adjustment in VAL. */ 1500 val = 0; 1501 if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0) 1502 { 1503 /* Either we're calculating the final field value or we have a 1504 relocation against a section symbol. Add in the section's 1505 offset or address. */ 1506 val += symbol->section->output_section->vma; 1507 val += symbol->section->output_offset; 1508 } 1509 1510 if (!relocatable) 1511 { 1512 /* We're calculating the final field value. Add in the symbol's value 1513 and, if pc-relative, subtract the address of the field itself. */ 1514 val += symbol->value; 1515 if (reloc_entry->howto->pc_relative) 1516 { 1517 val -= input_section->output_section->vma; 1518 val -= input_section->output_offset; 1519 val -= reloc_entry->address; 1520 } 1521 } 1522 1523 /* VAL is now the final adjustment. If we're keeping this relocation 1524 in the output file, and if the relocation uses a separate addend, 1525 we just need to add VAL to that addend. Otherwise we need to add 1526 VAL to the relocation field itself. */ 1527 if (relocatable && !reloc_entry->howto->partial_inplace) 1528 reloc_entry->addend += val; 1529 else 1530 { 1531 bfd_byte *location = (bfd_byte *) data + reloc_entry->address; 1532 1533 /* Add in the separate addend, if any. */ 1534 val += reloc_entry->addend; 1535 1536 /* Add VAL to the relocation field. */ 1537 _bfd_mips16_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE, 1538 location); 1539 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val, 1540 location); 1541 _bfd_mips16_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE, 1542 location); 1543 1544 if (status != bfd_reloc_ok) 1545 return status; 1546 } 1547 1548 if (relocatable) 1549 reloc_entry->address += input_section->output_offset; 1550 1551 return bfd_reloc_ok; 1552 } 1553 1554 /* Swap an entry in a .gptab section. Note that these routines rely 1555 on the equivalence of the two elements of the union. */ 1556 1557 static void 1558 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex, 1559 Elf32_gptab *in) 1560 { 1561 in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value); 1562 in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes); 1563 } 1564 1565 static void 1566 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in, 1567 Elf32_External_gptab *ex) 1568 { 1569 H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value); 1570 H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes); 1571 } 1572 1573 static void 1574 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in, 1575 Elf32_External_compact_rel *ex) 1576 { 1577 H_PUT_32 (abfd, in->id1, ex->id1); 1578 H_PUT_32 (abfd, in->num, ex->num); 1579 H_PUT_32 (abfd, in->id2, ex->id2); 1580 H_PUT_32 (abfd, in->offset, ex->offset); 1581 H_PUT_32 (abfd, in->reserved0, ex->reserved0); 1582 H_PUT_32 (abfd, in->reserved1, ex->reserved1); 1583 } 1584 1585 static void 1586 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in, 1587 Elf32_External_crinfo *ex) 1588 { 1589 unsigned long l; 1590 1591 l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH) 1592 | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH) 1593 | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH) 1594 | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH)); 1595 H_PUT_32 (abfd, l, ex->info); 1596 H_PUT_32 (abfd, in->konst, ex->konst); 1597 H_PUT_32 (abfd, in->vaddr, ex->vaddr); 1598 } 1599 1600 /* A .reginfo section holds a single Elf32_RegInfo structure. These 1601 routines swap this structure in and out. They are used outside of 1602 BFD, so they are globally visible. */ 1603 1604 void 1605 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex, 1606 Elf32_RegInfo *in) 1607 { 1608 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask); 1609 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]); 1610 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]); 1611 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]); 1612 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]); 1613 in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value); 1614 } 1615 1616 void 1617 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in, 1618 Elf32_External_RegInfo *ex) 1619 { 1620 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask); 1621 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]); 1622 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]); 1623 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]); 1624 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]); 1625 H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value); 1626 } 1627 1628 /* In the 64 bit ABI, the .MIPS.options section holds register 1629 information in an Elf64_Reginfo structure. These routines swap 1630 them in and out. They are globally visible because they are used 1631 outside of BFD. These routines are here so that gas can call them 1632 without worrying about whether the 64 bit ABI has been included. */ 1633 1634 void 1635 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex, 1636 Elf64_Internal_RegInfo *in) 1637 { 1638 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask); 1639 in->ri_pad = H_GET_32 (abfd, ex->ri_pad); 1640 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]); 1641 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]); 1642 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]); 1643 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]); 1644 in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value); 1645 } 1646 1647 void 1648 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in, 1649 Elf64_External_RegInfo *ex) 1650 { 1651 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask); 1652 H_PUT_32 (abfd, in->ri_pad, ex->ri_pad); 1653 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]); 1654 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]); 1655 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]); 1656 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]); 1657 H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value); 1658 } 1659 1660 /* Swap in an options header. */ 1661 1662 void 1663 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex, 1664 Elf_Internal_Options *in) 1665 { 1666 in->kind = H_GET_8 (abfd, ex->kind); 1667 in->size = H_GET_8 (abfd, ex->size); 1668 in->section = H_GET_16 (abfd, ex->section); 1669 in->info = H_GET_32 (abfd, ex->info); 1670 } 1671 1672 /* Swap out an options header. */ 1673 1674 void 1675 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in, 1676 Elf_External_Options *ex) 1677 { 1678 H_PUT_8 (abfd, in->kind, ex->kind); 1679 H_PUT_8 (abfd, in->size, ex->size); 1680 H_PUT_16 (abfd, in->section, ex->section); 1681 H_PUT_32 (abfd, in->info, ex->info); 1682 } 1683 1684 /* This function is called via qsort() to sort the dynamic relocation 1685 entries by increasing r_symndx value. */ 1686 1687 static int 1688 sort_dynamic_relocs (const void *arg1, const void *arg2) 1689 { 1690 Elf_Internal_Rela int_reloc1; 1691 Elf_Internal_Rela int_reloc2; 1692 1693 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1); 1694 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2); 1695 1696 return ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info); 1697 } 1698 1699 /* Like sort_dynamic_relocs, but used for elf64 relocations. */ 1700 1701 static int 1702 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED, 1703 const void *arg2 ATTRIBUTE_UNUSED) 1704 { 1705 #ifdef BFD64 1706 Elf_Internal_Rela int_reloc1[3]; 1707 Elf_Internal_Rela int_reloc2[3]; 1708 1709 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in) 1710 (reldyn_sorting_bfd, arg1, int_reloc1); 1711 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in) 1712 (reldyn_sorting_bfd, arg2, int_reloc2); 1713 1714 return (ELF64_R_SYM (int_reloc1[0].r_info) 1715 - ELF64_R_SYM (int_reloc2[0].r_info)); 1716 #else 1717 abort (); 1718 #endif 1719 } 1720 1721 1722 /* This routine is used to write out ECOFF debugging external symbol 1723 information. It is called via mips_elf_link_hash_traverse. The 1724 ECOFF external symbol information must match the ELF external 1725 symbol information. Unfortunately, at this point we don't know 1726 whether a symbol is required by reloc information, so the two 1727 tables may wind up being different. We must sort out the external 1728 symbol information before we can set the final size of the .mdebug 1729 section, and we must set the size of the .mdebug section before we 1730 can relocate any sections, and we can't know which symbols are 1731 required by relocation until we relocate the sections. 1732 Fortunately, it is relatively unlikely that any symbol will be 1733 stripped but required by a reloc. In particular, it can not happen 1734 when generating a final executable. */ 1735 1736 static bfd_boolean 1737 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data) 1738 { 1739 struct extsym_info *einfo = data; 1740 bfd_boolean strip; 1741 asection *sec, *output_section; 1742 1743 if (h->root.root.type == bfd_link_hash_warning) 1744 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 1745 1746 if (h->root.indx == -2) 1747 strip = FALSE; 1748 else if ((h->root.def_dynamic 1749 || h->root.ref_dynamic 1750 || h->root.type == bfd_link_hash_new) 1751 && !h->root.def_regular 1752 && !h->root.ref_regular) 1753 strip = TRUE; 1754 else if (einfo->info->strip == strip_all 1755 || (einfo->info->strip == strip_some 1756 && bfd_hash_lookup (einfo->info->keep_hash, 1757 h->root.root.root.string, 1758 FALSE, FALSE) == NULL)) 1759 strip = TRUE; 1760 else 1761 strip = FALSE; 1762 1763 if (strip) 1764 return TRUE; 1765 1766 if (h->esym.ifd == -2) 1767 { 1768 h->esym.jmptbl = 0; 1769 h->esym.cobol_main = 0; 1770 h->esym.weakext = 0; 1771 h->esym.reserved = 0; 1772 h->esym.ifd = ifdNil; 1773 h->esym.asym.value = 0; 1774 h->esym.asym.st = stGlobal; 1775 1776 if (h->root.root.type == bfd_link_hash_undefined 1777 || h->root.root.type == bfd_link_hash_undefweak) 1778 { 1779 const char *name; 1780 1781 /* Use undefined class. Also, set class and type for some 1782 special symbols. */ 1783 name = h->root.root.root.string; 1784 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0 1785 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0) 1786 { 1787 h->esym.asym.sc = scData; 1788 h->esym.asym.st = stLabel; 1789 h->esym.asym.value = 0; 1790 } 1791 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0) 1792 { 1793 h->esym.asym.sc = scAbs; 1794 h->esym.asym.st = stLabel; 1795 h->esym.asym.value = 1796 mips_elf_hash_table (einfo->info)->procedure_count; 1797 } 1798 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd)) 1799 { 1800 h->esym.asym.sc = scAbs; 1801 h->esym.asym.st = stLabel; 1802 h->esym.asym.value = elf_gp (einfo->abfd); 1803 } 1804 else 1805 h->esym.asym.sc = scUndefined; 1806 } 1807 else if (h->root.root.type != bfd_link_hash_defined 1808 && h->root.root.type != bfd_link_hash_defweak) 1809 h->esym.asym.sc = scAbs; 1810 else 1811 { 1812 const char *name; 1813 1814 sec = h->root.root.u.def.section; 1815 output_section = sec->output_section; 1816 1817 /* When making a shared library and symbol h is the one from 1818 the another shared library, OUTPUT_SECTION may be null. */ 1819 if (output_section == NULL) 1820 h->esym.asym.sc = scUndefined; 1821 else 1822 { 1823 name = bfd_section_name (output_section->owner, output_section); 1824 1825 if (strcmp (name, ".text") == 0) 1826 h->esym.asym.sc = scText; 1827 else if (strcmp (name, ".data") == 0) 1828 h->esym.asym.sc = scData; 1829 else if (strcmp (name, ".sdata") == 0) 1830 h->esym.asym.sc = scSData; 1831 else if (strcmp (name, ".rodata") == 0 1832 || strcmp (name, ".rdata") == 0) 1833 h->esym.asym.sc = scRData; 1834 else if (strcmp (name, ".bss") == 0) 1835 h->esym.asym.sc = scBss; 1836 else if (strcmp (name, ".sbss") == 0) 1837 h->esym.asym.sc = scSBss; 1838 else if (strcmp (name, ".init") == 0) 1839 h->esym.asym.sc = scInit; 1840 else if (strcmp (name, ".fini") == 0) 1841 h->esym.asym.sc = scFini; 1842 else 1843 h->esym.asym.sc = scAbs; 1844 } 1845 } 1846 1847 h->esym.asym.reserved = 0; 1848 h->esym.asym.index = indexNil; 1849 } 1850 1851 if (h->root.root.type == bfd_link_hash_common) 1852 h->esym.asym.value = h->root.root.u.c.size; 1853 else if (h->root.root.type == bfd_link_hash_defined 1854 || h->root.root.type == bfd_link_hash_defweak) 1855 { 1856 if (h->esym.asym.sc == scCommon) 1857 h->esym.asym.sc = scBss; 1858 else if (h->esym.asym.sc == scSCommon) 1859 h->esym.asym.sc = scSBss; 1860 1861 sec = h->root.root.u.def.section; 1862 output_section = sec->output_section; 1863 if (output_section != NULL) 1864 h->esym.asym.value = (h->root.root.u.def.value 1865 + sec->output_offset 1866 + output_section->vma); 1867 else 1868 h->esym.asym.value = 0; 1869 } 1870 else if (h->root.needs_plt) 1871 { 1872 struct mips_elf_link_hash_entry *hd = h; 1873 bfd_boolean no_fn_stub = h->no_fn_stub; 1874 1875 while (hd->root.root.type == bfd_link_hash_indirect) 1876 { 1877 hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link; 1878 no_fn_stub = no_fn_stub || hd->no_fn_stub; 1879 } 1880 1881 if (!no_fn_stub) 1882 { 1883 /* Set type and value for a symbol with a function stub. */ 1884 h->esym.asym.st = stProc; 1885 sec = hd->root.root.u.def.section; 1886 if (sec == NULL) 1887 h->esym.asym.value = 0; 1888 else 1889 { 1890 output_section = sec->output_section; 1891 if (output_section != NULL) 1892 h->esym.asym.value = (hd->root.plt.offset 1893 + sec->output_offset 1894 + output_section->vma); 1895 else 1896 h->esym.asym.value = 0; 1897 } 1898 } 1899 } 1900 1901 if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap, 1902 h->root.root.root.string, 1903 &h->esym)) 1904 { 1905 einfo->failed = TRUE; 1906 return FALSE; 1907 } 1908 1909 return TRUE; 1910 } 1911 1912 /* A comparison routine used to sort .gptab entries. */ 1913 1914 static int 1915 gptab_compare (const void *p1, const void *p2) 1916 { 1917 const Elf32_gptab *a1 = p1; 1918 const Elf32_gptab *a2 = p2; 1919 1920 return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value; 1921 } 1922 1923 /* Functions to manage the got entry hash table. */ 1924 1925 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit 1926 hash number. */ 1927 1928 static INLINE hashval_t 1929 mips_elf_hash_bfd_vma (bfd_vma addr) 1930 { 1931 #ifdef BFD64 1932 return addr + (addr >> 32); 1933 #else 1934 return addr; 1935 #endif 1936 } 1937 1938 /* got_entries only match if they're identical, except for gotidx, so 1939 use all fields to compute the hash, and compare the appropriate 1940 union members. */ 1941 1942 static hashval_t 1943 mips_elf_got_entry_hash (const void *entry_) 1944 { 1945 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_; 1946 1947 return entry->symndx 1948 + ((entry->tls_type & GOT_TLS_LDM) << 17) 1949 + (! entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address) 1950 : entry->abfd->id 1951 + (entry->symndx >= 0 ? mips_elf_hash_bfd_vma (entry->d.addend) 1952 : entry->d.h->root.root.root.hash)); 1953 } 1954 1955 static int 1956 mips_elf_got_entry_eq (const void *entry1, const void *entry2) 1957 { 1958 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1; 1959 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2; 1960 1961 /* An LDM entry can only match another LDM entry. */ 1962 if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM) 1963 return 0; 1964 1965 return e1->abfd == e2->abfd && e1->symndx == e2->symndx 1966 && (! e1->abfd ? e1->d.address == e2->d.address 1967 : e1->symndx >= 0 ? e1->d.addend == e2->d.addend 1968 : e1->d.h == e2->d.h); 1969 } 1970 1971 /* multi_got_entries are still a match in the case of global objects, 1972 even if the input bfd in which they're referenced differs, so the 1973 hash computation and compare functions are adjusted 1974 accordingly. */ 1975 1976 static hashval_t 1977 mips_elf_multi_got_entry_hash (const void *entry_) 1978 { 1979 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_; 1980 1981 return entry->symndx 1982 + (! entry->abfd 1983 ? mips_elf_hash_bfd_vma (entry->d.address) 1984 : entry->symndx >= 0 1985 ? ((entry->tls_type & GOT_TLS_LDM) 1986 ? (GOT_TLS_LDM << 17) 1987 : (entry->abfd->id 1988 + mips_elf_hash_bfd_vma (entry->d.addend))) 1989 : entry->d.h->root.root.root.hash); 1990 } 1991 1992 static int 1993 mips_elf_multi_got_entry_eq (const void *entry1, const void *entry2) 1994 { 1995 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1; 1996 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2; 1997 1998 /* Any two LDM entries match. */ 1999 if (e1->tls_type & e2->tls_type & GOT_TLS_LDM) 2000 return 1; 2001 2002 /* Nothing else matches an LDM entry. */ 2003 if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM) 2004 return 0; 2005 2006 return e1->symndx == e2->symndx 2007 && (e1->symndx >= 0 ? e1->abfd == e2->abfd && e1->d.addend == e2->d.addend 2008 : e1->abfd == NULL || e2->abfd == NULL 2009 ? e1->abfd == e2->abfd && e1->d.address == e2->d.address 2010 : e1->d.h == e2->d.h); 2011 } 2012 2013 /* Return the dynamic relocation section. If it doesn't exist, try to 2014 create a new it if CREATE_P, otherwise return NULL. Also return NULL 2015 if creation fails. */ 2016 2017 static asection * 2018 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p) 2019 { 2020 const char *dname; 2021 asection *sreloc; 2022 bfd *dynobj; 2023 2024 dname = MIPS_ELF_REL_DYN_NAME (info); 2025 dynobj = elf_hash_table (info)->dynobj; 2026 sreloc = bfd_get_section_by_name (dynobj, dname); 2027 if (sreloc == NULL && create_p) 2028 { 2029 sreloc = bfd_make_section_with_flags (dynobj, dname, 2030 (SEC_ALLOC 2031 | SEC_LOAD 2032 | SEC_HAS_CONTENTS 2033 | SEC_IN_MEMORY 2034 | SEC_LINKER_CREATED 2035 | SEC_READONLY)); 2036 if (sreloc == NULL 2037 || ! bfd_set_section_alignment (dynobj, sreloc, 2038 MIPS_ELF_LOG_FILE_ALIGN (dynobj))) 2039 return NULL; 2040 } 2041 return sreloc; 2042 } 2043 2044 /* Returns the GOT section for ABFD. */ 2045 2046 static asection * 2047 mips_elf_got_section (bfd *abfd, bfd_boolean maybe_excluded) 2048 { 2049 asection *sgot = bfd_get_section_by_name (abfd, ".got"); 2050 if (sgot == NULL 2051 || (! maybe_excluded && (sgot->flags & SEC_EXCLUDE) != 0)) 2052 return NULL; 2053 return sgot; 2054 } 2055 2056 /* Returns the GOT information associated with the link indicated by 2057 INFO. If SGOTP is non-NULL, it is filled in with the GOT 2058 section. */ 2059 2060 static struct mips_got_info * 2061 mips_elf_got_info (bfd *abfd, asection **sgotp) 2062 { 2063 asection *sgot; 2064 struct mips_got_info *g; 2065 2066 sgot = mips_elf_got_section (abfd, TRUE); 2067 BFD_ASSERT (sgot != NULL); 2068 BFD_ASSERT (mips_elf_section_data (sgot) != NULL); 2069 g = mips_elf_section_data (sgot)->u.got_info; 2070 BFD_ASSERT (g != NULL); 2071 2072 if (sgotp) 2073 *sgotp = (sgot->flags & SEC_EXCLUDE) == 0 ? sgot : NULL; 2074 2075 return g; 2076 } 2077 2078 /* Count the number of relocations needed for a TLS GOT entry, with 2079 access types from TLS_TYPE, and symbol H (or a local symbol if H 2080 is NULL). */ 2081 2082 static int 2083 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type, 2084 struct elf_link_hash_entry *h) 2085 { 2086 int indx = 0; 2087 int ret = 0; 2088 bfd_boolean need_relocs = FALSE; 2089 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; 2090 2091 if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) 2092 && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h))) 2093 indx = h->dynindx; 2094 2095 if ((info->shared || indx != 0) 2096 && (h == NULL 2097 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT 2098 || h->root.type != bfd_link_hash_undefweak)) 2099 need_relocs = TRUE; 2100 2101 if (!need_relocs) 2102 return FALSE; 2103 2104 if (tls_type & GOT_TLS_GD) 2105 { 2106 ret++; 2107 if (indx != 0) 2108 ret++; 2109 } 2110 2111 if (tls_type & GOT_TLS_IE) 2112 ret++; 2113 2114 if ((tls_type & GOT_TLS_LDM) && info->shared) 2115 ret++; 2116 2117 return ret; 2118 } 2119 2120 /* Count the number of TLS relocations required for the GOT entry in 2121 ARG1, if it describes a local symbol. */ 2122 2123 static int 2124 mips_elf_count_local_tls_relocs (void **arg1, void *arg2) 2125 { 2126 struct mips_got_entry *entry = * (struct mips_got_entry **) arg1; 2127 struct mips_elf_count_tls_arg *arg = arg2; 2128 2129 if (entry->abfd != NULL && entry->symndx != -1) 2130 arg->needed += mips_tls_got_relocs (arg->info, entry->tls_type, NULL); 2131 2132 return 1; 2133 } 2134 2135 /* Count the number of TLS GOT entries required for the global (or 2136 forced-local) symbol in ARG1. */ 2137 2138 static int 2139 mips_elf_count_global_tls_entries (void *arg1, void *arg2) 2140 { 2141 struct mips_elf_link_hash_entry *hm 2142 = (struct mips_elf_link_hash_entry *) arg1; 2143 struct mips_elf_count_tls_arg *arg = arg2; 2144 2145 if (hm->tls_type & GOT_TLS_GD) 2146 arg->needed += 2; 2147 if (hm->tls_type & GOT_TLS_IE) 2148 arg->needed += 1; 2149 2150 return 1; 2151 } 2152 2153 /* Count the number of TLS relocations required for the global (or 2154 forced-local) symbol in ARG1. */ 2155 2156 static int 2157 mips_elf_count_global_tls_relocs (void *arg1, void *arg2) 2158 { 2159 struct mips_elf_link_hash_entry *hm 2160 = (struct mips_elf_link_hash_entry *) arg1; 2161 struct mips_elf_count_tls_arg *arg = arg2; 2162 2163 arg->needed += mips_tls_got_relocs (arg->info, hm->tls_type, &hm->root); 2164 2165 return 1; 2166 } 2167 2168 /* Output a simple dynamic relocation into SRELOC. */ 2169 2170 static void 2171 mips_elf_output_dynamic_relocation (bfd *output_bfd, 2172 asection *sreloc, 2173 unsigned long indx, 2174 int r_type, 2175 bfd_vma offset) 2176 { 2177 Elf_Internal_Rela rel[3]; 2178 2179 memset (rel, 0, sizeof (rel)); 2180 2181 rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type); 2182 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset; 2183 2184 if (ABI_64_P (output_bfd)) 2185 { 2186 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out) 2187 (output_bfd, &rel[0], 2188 (sreloc->contents 2189 + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel))); 2190 } 2191 else 2192 bfd_elf32_swap_reloc_out 2193 (output_bfd, &rel[0], 2194 (sreloc->contents 2195 + sreloc->reloc_count * sizeof (Elf32_External_Rel))); 2196 ++sreloc->reloc_count; 2197 } 2198 2199 /* Initialize a set of TLS GOT entries for one symbol. */ 2200 2201 static void 2202 mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset, 2203 unsigned char *tls_type_p, 2204 struct bfd_link_info *info, 2205 struct mips_elf_link_hash_entry *h, 2206 bfd_vma value) 2207 { 2208 int indx; 2209 asection *sreloc, *sgot; 2210 bfd_vma offset, offset2; 2211 bfd *dynobj; 2212 bfd_boolean need_relocs = FALSE; 2213 2214 dynobj = elf_hash_table (info)->dynobj; 2215 sgot = mips_elf_got_section (dynobj, FALSE); 2216 2217 indx = 0; 2218 if (h != NULL) 2219 { 2220 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; 2221 2222 if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root) 2223 && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root))) 2224 indx = h->root.dynindx; 2225 } 2226 2227 if (*tls_type_p & GOT_TLS_DONE) 2228 return; 2229 2230 if ((info->shared || indx != 0) 2231 && (h == NULL 2232 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT 2233 || h->root.type != bfd_link_hash_undefweak)) 2234 need_relocs = TRUE; 2235 2236 /* MINUS_ONE means the symbol is not defined in this object. It may not 2237 be defined at all; assume that the value doesn't matter in that 2238 case. Otherwise complain if we would use the value. */ 2239 BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs) 2240 || h->root.root.type == bfd_link_hash_undefweak); 2241 2242 /* Emit necessary relocations. */ 2243 sreloc = mips_elf_rel_dyn_section (info, FALSE); 2244 2245 /* General Dynamic. */ 2246 if (*tls_type_p & GOT_TLS_GD) 2247 { 2248 offset = got_offset; 2249 offset2 = offset + MIPS_ELF_GOT_SIZE (abfd); 2250 2251 if (need_relocs) 2252 { 2253 mips_elf_output_dynamic_relocation 2254 (abfd, sreloc, indx, 2255 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32, 2256 sgot->output_offset + sgot->output_section->vma + offset); 2257 2258 if (indx) 2259 mips_elf_output_dynamic_relocation 2260 (abfd, sreloc, indx, 2261 ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32, 2262 sgot->output_offset + sgot->output_section->vma + offset2); 2263 else 2264 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info), 2265 sgot->contents + offset2); 2266 } 2267 else 2268 { 2269 MIPS_ELF_PUT_WORD (abfd, 1, 2270 sgot->contents + offset); 2271 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info), 2272 sgot->contents + offset2); 2273 } 2274 2275 got_offset += 2 * MIPS_ELF_GOT_SIZE (abfd); 2276 } 2277 2278 /* Initial Exec model. */ 2279 if (*tls_type_p & GOT_TLS_IE) 2280 { 2281 offset = got_offset; 2282 2283 if (need_relocs) 2284 { 2285 if (indx == 0) 2286 MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma, 2287 sgot->contents + offset); 2288 else 2289 MIPS_ELF_PUT_WORD (abfd, 0, 2290 sgot->contents + offset); 2291 2292 mips_elf_output_dynamic_relocation 2293 (abfd, sreloc, indx, 2294 ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32, 2295 sgot->output_offset + sgot->output_section->vma + offset); 2296 } 2297 else 2298 MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info), 2299 sgot->contents + offset); 2300 } 2301 2302 if (*tls_type_p & GOT_TLS_LDM) 2303 { 2304 /* The initial offset is zero, and the LD offsets will include the 2305 bias by DTP_OFFSET. */ 2306 MIPS_ELF_PUT_WORD (abfd, 0, 2307 sgot->contents + got_offset 2308 + MIPS_ELF_GOT_SIZE (abfd)); 2309 2310 if (!info->shared) 2311 MIPS_ELF_PUT_WORD (abfd, 1, 2312 sgot->contents + got_offset); 2313 else 2314 mips_elf_output_dynamic_relocation 2315 (abfd, sreloc, indx, 2316 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32, 2317 sgot->output_offset + sgot->output_section->vma + got_offset); 2318 } 2319 2320 *tls_type_p |= GOT_TLS_DONE; 2321 } 2322 2323 /* Return the GOT index to use for a relocation of type R_TYPE against 2324 a symbol accessed using TLS_TYPE models. The GOT entries for this 2325 symbol in this GOT start at GOT_INDEX. This function initializes the 2326 GOT entries and corresponding relocations. */ 2327 2328 static bfd_vma 2329 mips_tls_got_index (bfd *abfd, bfd_vma got_index, unsigned char *tls_type, 2330 int r_type, struct bfd_link_info *info, 2331 struct mips_elf_link_hash_entry *h, bfd_vma symbol) 2332 { 2333 BFD_ASSERT (r_type == R_MIPS_TLS_GOTTPREL || r_type == R_MIPS_TLS_GD 2334 || r_type == R_MIPS_TLS_LDM); 2335 2336 mips_elf_initialize_tls_slots (abfd, got_index, tls_type, info, h, symbol); 2337 2338 if (r_type == R_MIPS_TLS_GOTTPREL) 2339 { 2340 BFD_ASSERT (*tls_type & GOT_TLS_IE); 2341 if (*tls_type & GOT_TLS_GD) 2342 return got_index + 2 * MIPS_ELF_GOT_SIZE (abfd); 2343 else 2344 return got_index; 2345 } 2346 2347 if (r_type == R_MIPS_TLS_GD) 2348 { 2349 BFD_ASSERT (*tls_type & GOT_TLS_GD); 2350 return got_index; 2351 } 2352 2353 if (r_type == R_MIPS_TLS_LDM) 2354 { 2355 BFD_ASSERT (*tls_type & GOT_TLS_LDM); 2356 return got_index; 2357 } 2358 2359 return got_index; 2360 } 2361 2362 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry 2363 for global symbol H. .got.plt comes before the GOT, so the offset 2364 will be negative. */ 2365 2366 static bfd_vma 2367 mips_elf_gotplt_index (struct bfd_link_info *info, 2368 struct elf_link_hash_entry *h) 2369 { 2370 bfd_vma plt_index, got_address, got_value; 2371 struct mips_elf_link_hash_table *htab; 2372 2373 htab = mips_elf_hash_table (info); 2374 BFD_ASSERT (h->plt.offset != (bfd_vma) -1); 2375 2376 /* Calculate the index of the symbol's PLT entry. */ 2377 plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size; 2378 2379 /* Calculate the address of the associated .got.plt entry. */ 2380 got_address = (htab->sgotplt->output_section->vma 2381 + htab->sgotplt->output_offset 2382 + plt_index * 4); 2383 2384 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */ 2385 got_value = (htab->root.hgot->root.u.def.section->output_section->vma 2386 + htab->root.hgot->root.u.def.section->output_offset 2387 + htab->root.hgot->root.u.def.value); 2388 2389 return got_address - got_value; 2390 } 2391 2392 /* Return the GOT offset for address VALUE, which was derived from 2393 a symbol belonging to INPUT_SECTION. If there is not yet a GOT 2394 entry for this value, create one. If R_SYMNDX refers to a TLS symbol, 2395 create a TLS GOT entry instead. Return -1 if no satisfactory GOT 2396 offset can be found. */ 2397 2398 static bfd_vma 2399 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, 2400 asection *input_section, bfd_vma value, 2401 unsigned long r_symndx, 2402 struct mips_elf_link_hash_entry *h, int r_type) 2403 { 2404 asection *sgot; 2405 struct mips_got_info *g; 2406 struct mips_got_entry *entry; 2407 2408 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot); 2409 2410 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, g, sgot, 2411 input_section, value, 2412 r_symndx, h, r_type); 2413 if (!entry) 2414 return MINUS_ONE; 2415 2416 if (TLS_RELOC_P (r_type)) 2417 { 2418 if (entry->symndx == -1 && g->next == NULL) 2419 /* A type (3) entry in the single-GOT case. We use the symbol's 2420 hash table entry to track the index. */ 2421 return mips_tls_got_index (abfd, h->tls_got_offset, &h->tls_type, 2422 r_type, info, h, value); 2423 else 2424 return mips_tls_got_index (abfd, entry->gotidx, &entry->tls_type, 2425 r_type, info, h, value); 2426 } 2427 else 2428 return entry->gotidx; 2429 } 2430 2431 /* Returns the GOT index for the global symbol indicated by H. */ 2432 2433 static bfd_vma 2434 mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h, 2435 int r_type, struct bfd_link_info *info) 2436 { 2437 bfd_vma index; 2438 asection *sgot; 2439 struct mips_got_info *g, *gg; 2440 long global_got_dynindx = 0; 2441 2442 gg = g = mips_elf_got_info (abfd, &sgot); 2443 if (g->bfd2got && ibfd) 2444 { 2445 struct mips_got_entry e, *p; 2446 2447 BFD_ASSERT (h->dynindx >= 0); 2448 2449 g = mips_elf_got_for_ibfd (g, ibfd); 2450 if (g->next != gg || TLS_RELOC_P (r_type)) 2451 { 2452 e.abfd = ibfd; 2453 e.symndx = -1; 2454 e.d.h = (struct mips_elf_link_hash_entry *)h; 2455 e.tls_type = 0; 2456 2457 p = htab_find (g->got_entries, &e); 2458 2459 BFD_ASSERT (p->gotidx > 0); 2460 2461 if (TLS_RELOC_P (r_type)) 2462 { 2463 bfd_vma value = MINUS_ONE; 2464 if ((h->root.type == bfd_link_hash_defined 2465 || h->root.type == bfd_link_hash_defweak) 2466 && h->root.u.def.section->output_section) 2467 value = (h->root.u.def.value 2468 + h->root.u.def.section->output_offset 2469 + h->root.u.def.section->output_section->vma); 2470 2471 return mips_tls_got_index (abfd, p->gotidx, &p->tls_type, r_type, 2472 info, e.d.h, value); 2473 } 2474 else 2475 return p->gotidx; 2476 } 2477 } 2478 2479 if (gg->global_gotsym != NULL) 2480 global_got_dynindx = gg->global_gotsym->dynindx; 2481 2482 if (TLS_RELOC_P (r_type)) 2483 { 2484 struct mips_elf_link_hash_entry *hm 2485 = (struct mips_elf_link_hash_entry *) h; 2486 bfd_vma value = MINUS_ONE; 2487 2488 if ((h->root.type == bfd_link_hash_defined 2489 || h->root.type == bfd_link_hash_defweak) 2490 && h->root.u.def.section->output_section) 2491 value = (h->root.u.def.value 2492 + h->root.u.def.section->output_offset 2493 + h->root.u.def.section->output_section->vma); 2494 2495 index = mips_tls_got_index (abfd, hm->tls_got_offset, &hm->tls_type, 2496 r_type, info, hm, value); 2497 } 2498 else 2499 { 2500 /* Once we determine the global GOT entry with the lowest dynamic 2501 symbol table index, we must put all dynamic symbols with greater 2502 indices into the GOT. That makes it easy to calculate the GOT 2503 offset. */ 2504 BFD_ASSERT (h->dynindx >= global_got_dynindx); 2505 index = ((h->dynindx - global_got_dynindx + g->local_gotno) 2506 * MIPS_ELF_GOT_SIZE (abfd)); 2507 } 2508 BFD_ASSERT (index < sgot->size); 2509 2510 return index; 2511 } 2512 2513 /* Find a GOT page entry that points to within 32KB of VALUE, which was 2514 calculated from a symbol belonging to INPUT_SECTION. These entries 2515 are supposed to be placed at small offsets in the GOT, i.e., within 2516 32KB of GP. Return the index of the GOT entry, or -1 if no entry 2517 could be created. If OFFSETP is nonnull, use it to return the 2518 offset of the GOT entry from VALUE. */ 2519 2520 static bfd_vma 2521 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, 2522 asection *input_section, bfd_vma value, bfd_vma *offsetp) 2523 { 2524 asection *sgot; 2525 struct mips_got_info *g; 2526 bfd_vma page, index; 2527 struct mips_got_entry *entry; 2528 2529 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot); 2530 2531 page = (value + 0x8000) & ~(bfd_vma) 0xffff; 2532 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, g, sgot, 2533 input_section, page, 0, 2534 NULL, R_MIPS_GOT_PAGE); 2535 2536 if (!entry) 2537 return MINUS_ONE; 2538 2539 index = entry->gotidx; 2540 2541 if (offsetp) 2542 *offsetp = value - entry->d.address; 2543 2544 return index; 2545 } 2546 2547 /* Find a local GOT entry for an R_MIPS_GOT16 relocation against VALUE, 2548 which was calculated from a symbol belonging to INPUT_SECTION. 2549 EXTERNAL is true if the relocation was against a global symbol 2550 that has been forced local. */ 2551 2552 static bfd_vma 2553 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, 2554 asection *input_section, bfd_vma value, 2555 bfd_boolean external) 2556 { 2557 asection *sgot; 2558 struct mips_got_info *g; 2559 struct mips_got_entry *entry; 2560 2561 /* GOT16 relocations against local symbols are followed by a LO16 2562 relocation; those against global symbols are not. Thus if the 2563 symbol was originally local, the GOT16 relocation should load the 2564 equivalent of %hi(VALUE), otherwise it should load VALUE itself. */ 2565 if (! external) 2566 value = mips_elf_high (value) << 16; 2567 2568 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot); 2569 2570 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, g, sgot, 2571 input_section, value, 0, 2572 NULL, R_MIPS_GOT16); 2573 if (entry) 2574 return entry->gotidx; 2575 else 2576 return MINUS_ONE; 2577 } 2578 2579 /* Returns the offset for the entry at the INDEXth position 2580 in the GOT. */ 2581 2582 static bfd_vma 2583 mips_elf_got_offset_from_index (bfd *dynobj, bfd *output_bfd, 2584 bfd *input_bfd, bfd_vma index) 2585 { 2586 asection *sgot; 2587 bfd_vma gp; 2588 struct mips_got_info *g; 2589 2590 g = mips_elf_got_info (dynobj, &sgot); 2591 gp = _bfd_get_gp_value (output_bfd) 2592 + mips_elf_adjust_gp (output_bfd, g, input_bfd); 2593 2594 return sgot->output_section->vma + sgot->output_offset + index - gp; 2595 } 2596 2597 /* Create and return a local GOT entry for VALUE, which was calculated 2598 from a symbol belonging to INPUT_SECTON. Return NULL if it could not 2599 be created. If R_SYMNDX refers to a TLS symbol, create a TLS entry 2600 instead. */ 2601 2602 static struct mips_got_entry * 2603 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info, 2604 bfd *ibfd, struct mips_got_info *gg, 2605 asection *sgot, asection *input_section, 2606 bfd_vma value, unsigned long r_symndx, 2607 struct mips_elf_link_hash_entry *h, 2608 int r_type) 2609 { 2610 struct mips_got_entry entry, **loc; 2611 struct mips_got_info *g; 2612 struct mips_elf_link_hash_table *htab; 2613 2614 htab = mips_elf_hash_table (info); 2615 2616 entry.abfd = NULL; 2617 entry.symndx = -1; 2618 entry.d.address = value; 2619 entry.tls_type = 0; 2620 2621 g = mips_elf_got_for_ibfd (gg, ibfd); 2622 if (g == NULL) 2623 { 2624 g = mips_elf_got_for_ibfd (gg, abfd); 2625 BFD_ASSERT (g != NULL); 2626 } 2627 2628 /* We might have a symbol, H, if it has been forced local. Use the 2629 global entry then. It doesn't matter whether an entry is local 2630 or global for TLS, since the dynamic linker does not 2631 automatically relocate TLS GOT entries. */ 2632 BFD_ASSERT (h == NULL || h->root.forced_local); 2633 if (TLS_RELOC_P (r_type)) 2634 { 2635 struct mips_got_entry *p; 2636 2637 entry.abfd = ibfd; 2638 if (r_type == R_MIPS_TLS_LDM) 2639 { 2640 entry.tls_type = GOT_TLS_LDM; 2641 entry.symndx = 0; 2642 entry.d.addend = 0; 2643 } 2644 else if (h == NULL) 2645 { 2646 entry.symndx = r_symndx; 2647 entry.d.addend = 0; 2648 } 2649 else 2650 entry.d.h = h; 2651 2652 p = (struct mips_got_entry *) 2653 htab_find (g->got_entries, &entry); 2654 2655 BFD_ASSERT (p); 2656 return p; 2657 } 2658 2659 loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry, 2660 INSERT); 2661 if (*loc) 2662 return *loc; 2663 2664 entry.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++; 2665 entry.tls_type = 0; 2666 2667 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry); 2668 2669 if (! *loc) 2670 return NULL; 2671 2672 memcpy (*loc, &entry, sizeof entry); 2673 2674 if (g->assigned_gotno >= g->local_gotno) 2675 { 2676 (*loc)->gotidx = -1; 2677 /* We didn't allocate enough space in the GOT. */ 2678 (*_bfd_error_handler) 2679 (_("not enough GOT space for local GOT entries")); 2680 bfd_set_error (bfd_error_bad_value); 2681 return NULL; 2682 } 2683 2684 MIPS_ELF_PUT_WORD (abfd, value, 2685 (sgot->contents + entry.gotidx)); 2686 2687 /* These GOT entries need a dynamic relocation on VxWorks. Because 2688 the offset between segments is not fixed, the relocation must be 2689 against a symbol in the same segment as the original symbol. 2690 The easiest way to do this is to take INPUT_SECTION's output 2691 section and emit a relocation against its section symbol. */ 2692 if (htab->is_vxworks) 2693 { 2694 Elf_Internal_Rela outrel; 2695 asection *s, *output_section; 2696 bfd_byte *loc; 2697 bfd_vma got_address; 2698 int dynindx; 2699 2700 s = mips_elf_rel_dyn_section (info, FALSE); 2701 output_section = input_section->output_section; 2702 dynindx = elf_section_data (output_section)->dynindx; 2703 got_address = (sgot->output_section->vma 2704 + sgot->output_offset 2705 + entry.gotidx); 2706 2707 loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela)); 2708 outrel.r_offset = got_address; 2709 outrel.r_info = ELF32_R_INFO (dynindx, R_MIPS_32); 2710 outrel.r_addend = value - output_section->vma; 2711 bfd_elf32_swap_reloca_out (abfd, &outrel, loc); 2712 } 2713 2714 return *loc; 2715 } 2716 2717 /* Sort the dynamic symbol table so that symbols that need GOT entries 2718 appear towards the end. This reduces the amount of GOT space 2719 required. MAX_LOCAL is used to set the number of local symbols 2720 known to be in the dynamic symbol table. During 2721 _bfd_mips_elf_size_dynamic_sections, this value is 1. Afterward, the 2722 section symbols are added and the count is higher. */ 2723 2724 static bfd_boolean 2725 mips_elf_sort_hash_table (struct bfd_link_info *info, unsigned long max_local) 2726 { 2727 struct mips_elf_hash_sort_data hsd; 2728 struct mips_got_info *g; 2729 bfd *dynobj; 2730 2731 dynobj = elf_hash_table (info)->dynobj; 2732 2733 g = mips_elf_got_info (dynobj, NULL); 2734 2735 hsd.low = NULL; 2736 hsd.max_unref_got_dynindx = 2737 hsd.min_got_dynindx = elf_hash_table (info)->dynsymcount 2738 /* In the multi-got case, assigned_gotno of the master got_info 2739 indicate the number of entries that aren't referenced in the 2740 primary GOT, but that must have entries because there are 2741 dynamic relocations that reference it. Since they aren't 2742 referenced, we move them to the end of the GOT, so that they 2743 don't prevent other entries that are referenced from getting 2744 too large offsets. */ 2745 - (g->next ? g->assigned_gotno : 0); 2746 hsd.max_non_got_dynindx = max_local; 2747 mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *) 2748 elf_hash_table (info)), 2749 mips_elf_sort_hash_table_f, 2750 &hsd); 2751 2752 /* There should have been enough room in the symbol table to 2753 accommodate both the GOT and non-GOT symbols. */ 2754 BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx); 2755 BFD_ASSERT ((unsigned long)hsd.max_unref_got_dynindx 2756 <= elf_hash_table (info)->dynsymcount); 2757 2758 /* Now we know which dynamic symbol has the lowest dynamic symbol 2759 table index in the GOT. */ 2760 g->global_gotsym = hsd.low; 2761 2762 return TRUE; 2763 } 2764 2765 /* If H needs a GOT entry, assign it the highest available dynamic 2766 index. Otherwise, assign it the lowest available dynamic 2767 index. */ 2768 2769 static bfd_boolean 2770 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data) 2771 { 2772 struct mips_elf_hash_sort_data *hsd = data; 2773 2774 if (h->root.root.type == bfd_link_hash_warning) 2775 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 2776 2777 /* Symbols without dynamic symbol table entries aren't interesting 2778 at all. */ 2779 if (h->root.dynindx == -1) 2780 return TRUE; 2781 2782 /* Global symbols that need GOT entries that are not explicitly 2783 referenced are marked with got offset 2. Those that are 2784 referenced get a 1, and those that don't need GOT entries get 2785 -1. Forced local symbols may also be marked with got offset 1, 2786 but are never given global GOT entries. */ 2787 if (h->root.got.offset == 2) 2788 { 2789 BFD_ASSERT (h->tls_type == GOT_NORMAL); 2790 2791 if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx) 2792 hsd->low = (struct elf_link_hash_entry *) h; 2793 h->root.dynindx = hsd->max_unref_got_dynindx++; 2794 } 2795 else if (h->root.got.offset != 1 || h->forced_local) 2796 h->root.dynindx = hsd->max_non_got_dynindx++; 2797 else 2798 { 2799 BFD_ASSERT (h->tls_type == GOT_NORMAL); 2800 2801 h->root.dynindx = --hsd->min_got_dynindx; 2802 hsd->low = (struct elf_link_hash_entry *) h; 2803 } 2804 2805 return TRUE; 2806 } 2807 2808 /* If H is a symbol that needs a global GOT entry, but has a dynamic 2809 symbol table index lower than any we've seen to date, record it for 2810 posterity. */ 2811 2812 static bfd_boolean 2813 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h, 2814 bfd *abfd, struct bfd_link_info *info, 2815 struct mips_got_info *g, 2816 unsigned char tls_flag) 2817 { 2818 struct mips_got_entry entry, **loc; 2819 2820 /* A global symbol in the GOT must also be in the dynamic symbol 2821 table. */ 2822 if (h->dynindx == -1) 2823 { 2824 switch (ELF_ST_VISIBILITY (h->other)) 2825 { 2826 case STV_INTERNAL: 2827 case STV_HIDDEN: 2828 _bfd_mips_elf_hide_symbol (info, h, TRUE); 2829 break; 2830 } 2831 if (!bfd_elf_link_record_dynamic_symbol (info, h)) 2832 return FALSE; 2833 } 2834 2835 /* Make sure we have a GOT to put this entry into. */ 2836 BFD_ASSERT (g != NULL); 2837 2838 entry.abfd = abfd; 2839 entry.symndx = -1; 2840 entry.d.h = (struct mips_elf_link_hash_entry *) h; 2841 entry.tls_type = 0; 2842 2843 loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry, 2844 INSERT); 2845 2846 /* If we've already marked this entry as needing GOT space, we don't 2847 need to do it again. */ 2848 if (*loc) 2849 { 2850 (*loc)->tls_type |= tls_flag; 2851 return TRUE; 2852 } 2853 2854 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry); 2855 2856 if (! *loc) 2857 return FALSE; 2858 2859 entry.gotidx = -1; 2860 entry.tls_type = tls_flag; 2861 2862 memcpy (*loc, &entry, sizeof entry); 2863 2864 if (h->got.offset != MINUS_ONE) 2865 return TRUE; 2866 2867 /* By setting this to a value other than -1, we are indicating that 2868 there needs to be a GOT entry for H. Avoid using zero, as the 2869 generic ELF copy_indirect_symbol tests for <= 0. */ 2870 if (tls_flag == 0) 2871 h->got.offset = 1; 2872 2873 return TRUE; 2874 } 2875 2876 /* Reserve space in G for a GOT entry containing the value of symbol 2877 SYMNDX in input bfd ABDF, plus ADDEND. */ 2878 2879 static bfd_boolean 2880 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend, 2881 struct mips_got_info *g, 2882 unsigned char tls_flag) 2883 { 2884 struct mips_got_entry entry, **loc; 2885 2886 entry.abfd = abfd; 2887 entry.symndx = symndx; 2888 entry.d.addend = addend; 2889 entry.tls_type = tls_flag; 2890 loc = (struct mips_got_entry **) 2891 htab_find_slot (g->got_entries, &entry, INSERT); 2892 2893 if (*loc) 2894 { 2895 if (tls_flag == GOT_TLS_GD && !((*loc)->tls_type & GOT_TLS_GD)) 2896 { 2897 g->tls_gotno += 2; 2898 (*loc)->tls_type |= tls_flag; 2899 } 2900 else if (tls_flag == GOT_TLS_IE && !((*loc)->tls_type & GOT_TLS_IE)) 2901 { 2902 g->tls_gotno += 1; 2903 (*loc)->tls_type |= tls_flag; 2904 } 2905 return TRUE; 2906 } 2907 2908 if (tls_flag != 0) 2909 { 2910 entry.gotidx = -1; 2911 entry.tls_type = tls_flag; 2912 if (tls_flag == GOT_TLS_IE) 2913 g->tls_gotno += 1; 2914 else if (tls_flag == GOT_TLS_GD) 2915 g->tls_gotno += 2; 2916 else if (g->tls_ldm_offset == MINUS_ONE) 2917 { 2918 g->tls_ldm_offset = MINUS_TWO; 2919 g->tls_gotno += 2; 2920 } 2921 } 2922 else 2923 { 2924 entry.gotidx = g->local_gotno++; 2925 entry.tls_type = 0; 2926 } 2927 2928 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry); 2929 2930 if (! *loc) 2931 return FALSE; 2932 2933 memcpy (*loc, &entry, sizeof entry); 2934 2935 return TRUE; 2936 } 2937 2938 /* Compute the hash value of the bfd in a bfd2got hash entry. */ 2939 2940 static hashval_t 2941 mips_elf_bfd2got_entry_hash (const void *entry_) 2942 { 2943 const struct mips_elf_bfd2got_hash *entry 2944 = (struct mips_elf_bfd2got_hash *)entry_; 2945 2946 return entry->bfd->id; 2947 } 2948 2949 /* Check whether two hash entries have the same bfd. */ 2950 2951 static int 2952 mips_elf_bfd2got_entry_eq (const void *entry1, const void *entry2) 2953 { 2954 const struct mips_elf_bfd2got_hash *e1 2955 = (const struct mips_elf_bfd2got_hash *)entry1; 2956 const struct mips_elf_bfd2got_hash *e2 2957 = (const struct mips_elf_bfd2got_hash *)entry2; 2958 2959 return e1->bfd == e2->bfd; 2960 } 2961 2962 /* In a multi-got link, determine the GOT to be used for IBFD. G must 2963 be the master GOT data. */ 2964 2965 static struct mips_got_info * 2966 mips_elf_got_for_ibfd (struct mips_got_info *g, bfd *ibfd) 2967 { 2968 struct mips_elf_bfd2got_hash e, *p; 2969 2970 if (! g->bfd2got) 2971 return g; 2972 2973 e.bfd = ibfd; 2974 p = htab_find (g->bfd2got, &e); 2975 return p ? p->g : NULL; 2976 } 2977 2978 /* Create one separate got for each bfd that has entries in the global 2979 got, such that we can tell how many local and global entries each 2980 bfd requires. */ 2981 2982 static int 2983 mips_elf_make_got_per_bfd (void **entryp, void *p) 2984 { 2985 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp; 2986 struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p; 2987 htab_t bfd2got = arg->bfd2got; 2988 struct mips_got_info *g; 2989 struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot; 2990 void **bfdgotp; 2991 2992 /* Find the got_info for this GOT entry's input bfd. Create one if 2993 none exists. */ 2994 bfdgot_entry.bfd = entry->abfd; 2995 bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT); 2996 bfdgot = (struct mips_elf_bfd2got_hash *)*bfdgotp; 2997 2998 if (bfdgot != NULL) 2999 g = bfdgot->g; 3000 else 3001 { 3002 bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc 3003 (arg->obfd, sizeof (struct mips_elf_bfd2got_hash)); 3004 3005 if (bfdgot == NULL) 3006 { 3007 arg->obfd = 0; 3008 return 0; 3009 } 3010 3011 *bfdgotp = bfdgot; 3012 3013 bfdgot->bfd = entry->abfd; 3014 bfdgot->g = g = (struct mips_got_info *) 3015 bfd_alloc (arg->obfd, sizeof (struct mips_got_info)); 3016 if (g == NULL) 3017 { 3018 arg->obfd = 0; 3019 return 0; 3020 } 3021 3022 g->global_gotsym = NULL; 3023 g->global_gotno = 0; 3024 g->local_gotno = 0; 3025 g->assigned_gotno = -1; 3026 g->tls_gotno = 0; 3027 g->tls_assigned_gotno = 0; 3028 g->tls_ldm_offset = MINUS_ONE; 3029 g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash, 3030 mips_elf_multi_got_entry_eq, NULL); 3031 if (g->got_entries == NULL) 3032 { 3033 arg->obfd = 0; 3034 return 0; 3035 } 3036 3037 g->bfd2got = NULL; 3038 g->next = NULL; 3039 } 3040 3041 /* Insert the GOT entry in the bfd's got entry hash table. */ 3042 entryp = htab_find_slot (g->got_entries, entry, INSERT); 3043 if (*entryp != NULL) 3044 return 1; 3045 3046 *entryp = entry; 3047 3048 if (entry->tls_type) 3049 { 3050 if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM)) 3051 g->tls_gotno += 2; 3052 if (entry->tls_type & GOT_TLS_IE) 3053 g->tls_gotno += 1; 3054 } 3055 else if (entry->symndx >= 0 || entry->d.h->forced_local) 3056 ++g->local_gotno; 3057 else 3058 ++g->global_gotno; 3059 3060 return 1; 3061 } 3062 3063 /* Attempt to merge gots of different input bfds. Try to use as much 3064 as possible of the primary got, since it doesn't require explicit 3065 dynamic relocations, but don't use bfds that would reference global 3066 symbols out of the addressable range. Failing the primary got, 3067 attempt to merge with the current got, or finish the current got 3068 and then make make the new got current. */ 3069 3070 static int 3071 mips_elf_merge_gots (void **bfd2got_, void *p) 3072 { 3073 struct mips_elf_bfd2got_hash *bfd2got 3074 = (struct mips_elf_bfd2got_hash *)*bfd2got_; 3075 struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p; 3076 unsigned int lcount = bfd2got->g->local_gotno; 3077 unsigned int gcount = bfd2got->g->global_gotno; 3078 unsigned int tcount = bfd2got->g->tls_gotno; 3079 unsigned int maxcnt = arg->max_count; 3080 bfd_boolean too_many_for_tls = FALSE; 3081 3082 /* We place TLS GOT entries after both locals and globals. The globals 3083 for the primary GOT may overflow the normal GOT size limit, so be 3084 sure not to merge a GOT which requires TLS with the primary GOT in that 3085 case. This doesn't affect non-primary GOTs. */ 3086 if (tcount > 0) 3087 { 3088 unsigned int primary_total = lcount + tcount + arg->global_count; 3089 if (primary_total * MIPS_ELF_GOT_SIZE (bfd2got->bfd) 3090 >= MIPS_ELF_GOT_MAX_SIZE (arg->info)) 3091 too_many_for_tls = TRUE; 3092 } 3093 3094 /* If we don't have a primary GOT and this is not too big, use it as 3095 a starting point for the primary GOT. */ 3096 if (! arg->primary && lcount + gcount + tcount <= maxcnt 3097 && ! too_many_for_tls) 3098 { 3099 arg->primary = bfd2got->g; 3100 arg->primary_count = lcount + gcount; 3101 } 3102 /* If it looks like we can merge this bfd's entries with those of 3103 the primary, merge them. The heuristics is conservative, but we 3104 don't have to squeeze it too hard. */ 3105 else if (arg->primary && ! too_many_for_tls 3106 && (arg->primary_count + lcount + gcount + tcount) <= maxcnt) 3107 { 3108 struct mips_got_info *g = bfd2got->g; 3109 int old_lcount = arg->primary->local_gotno; 3110 int old_gcount = arg->primary->global_gotno; 3111 int old_tcount = arg->primary->tls_gotno; 3112 3113 bfd2got->g = arg->primary; 3114 3115 htab_traverse (g->got_entries, 3116 mips_elf_make_got_per_bfd, 3117 arg); 3118 if (arg->obfd == NULL) 3119 return 0; 3120 3121 htab_delete (g->got_entries); 3122 /* We don't have to worry about releasing memory of the actual 3123 got entries, since they're all in the master got_entries hash 3124 table anyway. */ 3125 3126 BFD_ASSERT (old_lcount + lcount >= arg->primary->local_gotno); 3127 BFD_ASSERT (old_gcount + gcount >= arg->primary->global_gotno); 3128 BFD_ASSERT (old_tcount + tcount >= arg->primary->tls_gotno); 3129 3130 arg->primary_count = arg->primary->local_gotno 3131 + arg->primary->global_gotno + arg->primary->tls_gotno; 3132 } 3133 /* If we can merge with the last-created got, do it. */ 3134 else if (arg->current 3135 && arg->current_count + lcount + gcount + tcount <= maxcnt) 3136 { 3137 struct mips_got_info *g = bfd2got->g; 3138 int old_lcount = arg->current->local_gotno; 3139 int old_gcount = arg->current->global_gotno; 3140 int old_tcount = arg->current->tls_gotno; 3141 3142 bfd2got->g = arg->current; 3143 3144 htab_traverse (g->got_entries, 3145 mips_elf_make_got_per_bfd, 3146 arg); 3147 if (arg->obfd == NULL) 3148 return 0; 3149 3150 htab_delete (g->got_entries); 3151 3152 BFD_ASSERT (old_lcount + lcount >= arg->current->local_gotno); 3153 BFD_ASSERT (old_gcount + gcount >= arg->current->global_gotno); 3154 BFD_ASSERT (old_tcount + tcount >= arg->current->tls_gotno); 3155 3156 arg->current_count = arg->current->local_gotno 3157 + arg->current->global_gotno + arg->current->tls_gotno; 3158 } 3159 /* Well, we couldn't merge, so create a new GOT. Don't check if it 3160 fits; if it turns out that it doesn't, we'll get relocation 3161 overflows anyway. */ 3162 else 3163 { 3164 bfd2got->g->next = arg->current; 3165 arg->current = bfd2got->g; 3166 3167 arg->current_count = lcount + gcount + 2 * tcount; 3168 } 3169 3170 return 1; 3171 } 3172 3173 /* Set the TLS GOT index for the GOT entry in ENTRYP. ENTRYP's NEXT field 3174 is null iff there is just a single GOT. */ 3175 3176 static int 3177 mips_elf_initialize_tls_index (void **entryp, void *p) 3178 { 3179 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp; 3180 struct mips_got_info *g = p; 3181 bfd_vma next_index; 3182 3183 /* We're only interested in TLS symbols. */ 3184 if (entry->tls_type == 0) 3185 return 1; 3186 3187 next_index = MIPS_ELF_GOT_SIZE (entry->abfd) * (long) g->tls_assigned_gotno; 3188 3189 if (entry->symndx == -1 && g->next == NULL) 3190 { 3191 /* A type (3) got entry in the single-GOT case. We use the symbol's 3192 hash table entry to track its index. */ 3193 if (entry->d.h->tls_type & GOT_TLS_OFFSET_DONE) 3194 return 1; 3195 entry->d.h->tls_type |= GOT_TLS_OFFSET_DONE; 3196 entry->d.h->tls_got_offset = next_index; 3197 } 3198 else 3199 { 3200 if (entry->tls_type & GOT_TLS_LDM) 3201 { 3202 /* There are separate mips_got_entry objects for each input bfd 3203 that requires an LDM entry. Make sure that all LDM entries in 3204 a GOT resolve to the same index. */ 3205 if (g->tls_ldm_offset != MINUS_TWO && g->tls_ldm_offset != MINUS_ONE) 3206 { 3207 entry->gotidx = g->tls_ldm_offset; 3208 return 1; 3209 } 3210 g->tls_ldm_offset = next_index; 3211 } 3212 entry->gotidx = next_index; 3213 } 3214 3215 /* Account for the entries we've just allocated. */ 3216 if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM)) 3217 g->tls_assigned_gotno += 2; 3218 if (entry->tls_type & GOT_TLS_IE) 3219 g->tls_assigned_gotno += 1; 3220 3221 return 1; 3222 } 3223 3224 /* If passed a NULL mips_got_info in the argument, set the marker used 3225 to tell whether a global symbol needs a got entry (in the primary 3226 got) to the given VALUE. 3227 3228 If passed a pointer G to a mips_got_info in the argument (it must 3229 not be the primary GOT), compute the offset from the beginning of 3230 the (primary) GOT section to the entry in G corresponding to the 3231 global symbol. G's assigned_gotno must contain the index of the 3232 first available global GOT entry in G. VALUE must contain the size 3233 of a GOT entry in bytes. For each global GOT entry that requires a 3234 dynamic relocation, NEEDED_RELOCS is incremented, and the symbol is 3235 marked as not eligible for lazy resolution through a function 3236 stub. */ 3237 static int 3238 mips_elf_set_global_got_offset (void **entryp, void *p) 3239 { 3240 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp; 3241 struct mips_elf_set_global_got_offset_arg *arg 3242 = (struct mips_elf_set_global_got_offset_arg *)p; 3243 struct mips_got_info *g = arg->g; 3244 3245 if (g && entry->tls_type != GOT_NORMAL) 3246 arg->needed_relocs += 3247 mips_tls_got_relocs (arg->info, entry->tls_type, 3248 entry->symndx == -1 ? &entry->d.h->root : NULL); 3249 3250 if (entry->abfd != NULL && entry->symndx == -1 3251 && entry->d.h->root.dynindx != -1 3252 && !entry->d.h->forced_local 3253 && entry->d.h->tls_type == GOT_NORMAL) 3254 { 3255 if (g) 3256 { 3257 BFD_ASSERT (g->global_gotsym == NULL); 3258 3259 entry->gotidx = arg->value * (long) g->assigned_gotno++; 3260 if (arg->info->shared 3261 || (elf_hash_table (arg->info)->dynamic_sections_created 3262 && entry->d.h->root.def_dynamic 3263 && !entry->d.h->root.def_regular)) 3264 ++arg->needed_relocs; 3265 } 3266 else 3267 entry->d.h->root.got.offset = arg->value; 3268 } 3269 3270 return 1; 3271 } 3272 3273 /* Mark any global symbols referenced in the GOT we are iterating over 3274 as inelligible for lazy resolution stubs. */ 3275 static int 3276 mips_elf_set_no_stub (void **entryp, void *p ATTRIBUTE_UNUSED) 3277 { 3278 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp; 3279 3280 if (entry->abfd != NULL 3281 && entry->symndx == -1 3282 && entry->d.h->root.dynindx != -1) 3283 entry->d.h->no_fn_stub = TRUE; 3284 3285 return 1; 3286 } 3287 3288 /* Follow indirect and warning hash entries so that each got entry 3289 points to the final symbol definition. P must point to a pointer 3290 to the hash table we're traversing. Since this traversal may 3291 modify the hash table, we set this pointer to NULL to indicate 3292 we've made a potentially-destructive change to the hash table, so 3293 the traversal must be restarted. */ 3294 static int 3295 mips_elf_resolve_final_got_entry (void **entryp, void *p) 3296 { 3297 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp; 3298 htab_t got_entries = *(htab_t *)p; 3299 3300 if (entry->abfd != NULL && entry->symndx == -1) 3301 { 3302 struct mips_elf_link_hash_entry *h = entry->d.h; 3303 3304 while (h->root.root.type == bfd_link_hash_indirect 3305 || h->root.root.type == bfd_link_hash_warning) 3306 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 3307 3308 if (entry->d.h == h) 3309 return 1; 3310 3311 entry->d.h = h; 3312 3313 /* If we can't find this entry with the new bfd hash, re-insert 3314 it, and get the traversal restarted. */ 3315 if (! htab_find (got_entries, entry)) 3316 { 3317 htab_clear_slot (got_entries, entryp); 3318 entryp = htab_find_slot (got_entries, entry, INSERT); 3319 if (! *entryp) 3320 *entryp = entry; 3321 /* Abort the traversal, since the whole table may have 3322 moved, and leave it up to the parent to restart the 3323 process. */ 3324 *(htab_t *)p = NULL; 3325 return 0; 3326 } 3327 /* We might want to decrement the global_gotno count, but it's 3328 either too early or too late for that at this point. */ 3329 } 3330 3331 return 1; 3332 } 3333 3334 /* Turn indirect got entries in a got_entries table into their final 3335 locations. */ 3336 static void 3337 mips_elf_resolve_final_got_entries (struct mips_got_info *g) 3338 { 3339 htab_t got_entries; 3340 3341 do 3342 { 3343 got_entries = g->got_entries; 3344 3345 htab_traverse (got_entries, 3346 mips_elf_resolve_final_got_entry, 3347 &got_entries); 3348 } 3349 while (got_entries == NULL); 3350 } 3351 3352 /* Return the offset of an input bfd IBFD's GOT from the beginning of 3353 the primary GOT. */ 3354 static bfd_vma 3355 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd) 3356 { 3357 if (g->bfd2got == NULL) 3358 return 0; 3359 3360 g = mips_elf_got_for_ibfd (g, ibfd); 3361 if (! g) 3362 return 0; 3363 3364 BFD_ASSERT (g->next); 3365 3366 g = g->next; 3367 3368 return (g->local_gotno + g->global_gotno + g->tls_gotno) 3369 * MIPS_ELF_GOT_SIZE (abfd); 3370 } 3371 3372 /* Turn a single GOT that is too big for 16-bit addressing into 3373 a sequence of GOTs, each one 16-bit addressable. */ 3374 3375 static bfd_boolean 3376 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, 3377 struct mips_got_info *g, asection *got, 3378 bfd_size_type pages) 3379 { 3380 struct mips_elf_got_per_bfd_arg got_per_bfd_arg; 3381 struct mips_elf_set_global_got_offset_arg set_got_offset_arg; 3382 struct mips_got_info *gg; 3383 unsigned int assign; 3384 3385 g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash, 3386 mips_elf_bfd2got_entry_eq, NULL); 3387 if (g->bfd2got == NULL) 3388 return FALSE; 3389 3390 got_per_bfd_arg.bfd2got = g->bfd2got; 3391 got_per_bfd_arg.obfd = abfd; 3392 got_per_bfd_arg.info = info; 3393 3394 /* Count how many GOT entries each input bfd requires, creating a 3395 map from bfd to got info while at that. */ 3396 htab_traverse (g->got_entries, mips_elf_make_got_per_bfd, &got_per_bfd_arg); 3397 if (got_per_bfd_arg.obfd == NULL) 3398 return FALSE; 3399 3400 got_per_bfd_arg.current = NULL; 3401 got_per_bfd_arg.primary = NULL; 3402 /* Taking out PAGES entries is a worst-case estimate. We could 3403 compute the maximum number of pages that each separate input bfd 3404 uses, but it's probably not worth it. */ 3405 got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info) 3406 / MIPS_ELF_GOT_SIZE (abfd)) 3407 - MIPS_RESERVED_GOTNO (info) - pages); 3408 /* The number of globals that will be included in the primary GOT. 3409 See the calls to mips_elf_set_global_got_offset below for more 3410 information. */ 3411 got_per_bfd_arg.global_count = g->global_gotno; 3412 3413 /* Try to merge the GOTs of input bfds together, as long as they 3414 don't seem to exceed the maximum GOT size, choosing one of them 3415 to be the primary GOT. */ 3416 htab_traverse (g->bfd2got, mips_elf_merge_gots, &got_per_bfd_arg); 3417 if (got_per_bfd_arg.obfd == NULL) 3418 return FALSE; 3419 3420 /* If we do not find any suitable primary GOT, create an empty one. */ 3421 if (got_per_bfd_arg.primary == NULL) 3422 { 3423 g->next = (struct mips_got_info *) 3424 bfd_alloc (abfd, sizeof (struct mips_got_info)); 3425 if (g->next == NULL) 3426 return FALSE; 3427 3428 g->next->global_gotsym = NULL; 3429 g->next->global_gotno = 0; 3430 g->next->local_gotno = 0; 3431 g->next->tls_gotno = 0; 3432 g->next->assigned_gotno = 0; 3433 g->next->tls_assigned_gotno = 0; 3434 g->next->tls_ldm_offset = MINUS_ONE; 3435 g->next->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash, 3436 mips_elf_multi_got_entry_eq, 3437 NULL); 3438 if (g->next->got_entries == NULL) 3439 return FALSE; 3440 g->next->bfd2got = NULL; 3441 } 3442 else 3443 g->next = got_per_bfd_arg.primary; 3444 g->next->next = got_per_bfd_arg.current; 3445 3446 /* GG is now the master GOT, and G is the primary GOT. */ 3447 gg = g; 3448 g = g->next; 3449 3450 /* Map the output bfd to the primary got. That's what we're going 3451 to use for bfds that use GOT16 or GOT_PAGE relocations that we 3452 didn't mark in check_relocs, and we want a quick way to find it. 3453 We can't just use gg->next because we're going to reverse the 3454 list. */ 3455 { 3456 struct mips_elf_bfd2got_hash *bfdgot; 3457 void **bfdgotp; 3458 3459 bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc 3460 (abfd, sizeof (struct mips_elf_bfd2got_hash)); 3461 3462 if (bfdgot == NULL) 3463 return FALSE; 3464 3465 bfdgot->bfd = abfd; 3466 bfdgot->g = g; 3467 bfdgotp = htab_find_slot (gg->bfd2got, bfdgot, INSERT); 3468 3469 BFD_ASSERT (*bfdgotp == NULL); 3470 *bfdgotp = bfdgot; 3471 } 3472 3473 /* The IRIX dynamic linker requires every symbol that is referenced 3474 in a dynamic relocation to be present in the primary GOT, so 3475 arrange for them to appear after those that are actually 3476 referenced. 3477 3478 GNU/Linux could very well do without it, but it would slow down 3479 the dynamic linker, since it would have to resolve every dynamic 3480 symbol referenced in other GOTs more than once, without help from 3481 the cache. Also, knowing that every external symbol has a GOT 3482 helps speed up the resolution of local symbols too, so GNU/Linux 3483 follows IRIX's practice. 3484 3485 The number 2 is used by mips_elf_sort_hash_table_f to count 3486 global GOT symbols that are unreferenced in the primary GOT, with 3487 an initial dynamic index computed from gg->assigned_gotno, where 3488 the number of unreferenced global entries in the primary GOT is 3489 preserved. */ 3490 if (1) 3491 { 3492 gg->assigned_gotno = gg->global_gotno - g->global_gotno; 3493 g->global_gotno = gg->global_gotno; 3494 set_got_offset_arg.value = 2; 3495 } 3496 else 3497 { 3498 /* This could be used for dynamic linkers that don't optimize 3499 symbol resolution while applying relocations so as to use 3500 primary GOT entries or assuming the symbol is locally-defined. 3501 With this code, we assign lower dynamic indices to global 3502 symbols that are not referenced in the primary GOT, so that 3503 their entries can be omitted. */ 3504 gg->assigned_gotno = 0; 3505 set_got_offset_arg.value = -1; 3506 } 3507 3508 /* Reorder dynamic symbols as described above (which behavior 3509 depends on the setting of VALUE). */ 3510 set_got_offset_arg.g = NULL; 3511 htab_traverse (gg->got_entries, mips_elf_set_global_got_offset, 3512 &set_got_offset_arg); 3513 set_got_offset_arg.value = 1; 3514 htab_traverse (g->got_entries, mips_elf_set_global_got_offset, 3515 &set_got_offset_arg); 3516 if (! mips_elf_sort_hash_table (info, 1)) 3517 return FALSE; 3518 3519 /* Now go through the GOTs assigning them offset ranges. 3520 [assigned_gotno, local_gotno[ will be set to the range of local 3521 entries in each GOT. We can then compute the end of a GOT by 3522 adding local_gotno to global_gotno. We reverse the list and make 3523 it circular since then we'll be able to quickly compute the 3524 beginning of a GOT, by computing the end of its predecessor. To 3525 avoid special cases for the primary GOT, while still preserving 3526 assertions that are valid for both single- and multi-got links, 3527 we arrange for the main got struct to have the right number of 3528 global entries, but set its local_gotno such that the initial 3529 offset of the primary GOT is zero. Remember that the primary GOT 3530 will become the last item in the circular linked list, so it 3531 points back to the master GOT. */ 3532 gg->local_gotno = -g->global_gotno; 3533 gg->global_gotno = g->global_gotno; 3534 gg->tls_gotno = 0; 3535 assign = 0; 3536 gg->next = gg; 3537 3538 do 3539 { 3540 struct mips_got_info *gn; 3541 3542 assign += MIPS_RESERVED_GOTNO (info); 3543 g->assigned_gotno = assign; 3544 g->local_gotno += assign + pages; 3545 assign = g->local_gotno + g->global_gotno + g->tls_gotno; 3546 3547 /* Take g out of the direct list, and push it onto the reversed 3548 list that gg points to. g->next is guaranteed to be nonnull after 3549 this operation, as required by mips_elf_initialize_tls_index. */ 3550 gn = g->next; 3551 g->next = gg->next; 3552 gg->next = g; 3553 3554 /* Set up any TLS entries. We always place the TLS entries after 3555 all non-TLS entries. */ 3556 g->tls_assigned_gotno = g->local_gotno + g->global_gotno; 3557 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g); 3558 3559 /* Move onto the next GOT. It will be a secondary GOT if nonull. */ 3560 g = gn; 3561 3562 /* Mark global symbols in every non-primary GOT as ineligible for 3563 stubs. */ 3564 if (g) 3565 htab_traverse (g->got_entries, mips_elf_set_no_stub, NULL); 3566 } 3567 while (g); 3568 3569 got->size = (gg->next->local_gotno 3570 + gg->next->global_gotno 3571 + gg->next->tls_gotno) * MIPS_ELF_GOT_SIZE (abfd); 3572 3573 return TRUE; 3574 } 3575 3576 3577 /* Returns the first relocation of type r_type found, beginning with 3578 RELOCATION. RELEND is one-past-the-end of the relocation table. */ 3579 3580 static const Elf_Internal_Rela * 3581 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type, 3582 const Elf_Internal_Rela *relocation, 3583 const Elf_Internal_Rela *relend) 3584 { 3585 while (relocation < relend) 3586 { 3587 if (ELF_R_TYPE (abfd, relocation->r_info) == r_type) 3588 return relocation; 3589 3590 ++relocation; 3591 } 3592 3593 /* We didn't find it. */ 3594 bfd_set_error (bfd_error_bad_value); 3595 return NULL; 3596 } 3597 3598 /* Return whether a relocation is against a local symbol. */ 3599 3600 static bfd_boolean 3601 mips_elf_local_relocation_p (bfd *input_bfd, 3602 const Elf_Internal_Rela *relocation, 3603 asection **local_sections, 3604 bfd_boolean check_forced) 3605 { 3606 unsigned long r_symndx; 3607 Elf_Internal_Shdr *symtab_hdr; 3608 struct mips_elf_link_hash_entry *h; 3609 size_t extsymoff; 3610 3611 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info); 3612 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; 3613 extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info; 3614 3615 if (r_symndx < extsymoff) 3616 return TRUE; 3617 if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL) 3618 return TRUE; 3619 3620 if (check_forced) 3621 { 3622 /* Look up the hash table to check whether the symbol 3623 was forced local. */ 3624 h = (struct mips_elf_link_hash_entry *) 3625 elf_sym_hashes (input_bfd) [r_symndx - extsymoff]; 3626 /* Find the real hash-table entry for this symbol. */ 3627 while (h->root.root.type == bfd_link_hash_indirect 3628 || h->root.root.type == bfd_link_hash_warning) 3629 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 3630 if (h->root.forced_local) 3631 return TRUE; 3632 } 3633 3634 return FALSE; 3635 } 3636 3637 /* Sign-extend VALUE, which has the indicated number of BITS. */ 3638 3639 bfd_vma 3640 _bfd_mips_elf_sign_extend (bfd_vma value, int bits) 3641 { 3642 if (value & ((bfd_vma) 1 << (bits - 1))) 3643 /* VALUE is negative. */ 3644 value |= ((bfd_vma) - 1) << bits; 3645 3646 return value; 3647 } 3648 3649 /* Return non-zero if the indicated VALUE has overflowed the maximum 3650 range expressible by a signed number with the indicated number of 3651 BITS. */ 3652 3653 static bfd_boolean 3654 mips_elf_overflow_p (bfd_vma value, int bits) 3655 { 3656 bfd_signed_vma svalue = (bfd_signed_vma) value; 3657 3658 if (svalue > (1 << (bits - 1)) - 1) 3659 /* The value is too big. */ 3660 return TRUE; 3661 else if (svalue < -(1 << (bits - 1))) 3662 /* The value is too small. */ 3663 return TRUE; 3664 3665 /* All is well. */ 3666 return FALSE; 3667 } 3668 3669 /* Calculate the %high function. */ 3670 3671 static bfd_vma 3672 mips_elf_high (bfd_vma value) 3673 { 3674 return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff; 3675 } 3676 3677 /* Calculate the %higher function. */ 3678 3679 static bfd_vma 3680 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED) 3681 { 3682 #ifdef BFD64 3683 return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff; 3684 #else 3685 abort (); 3686 return MINUS_ONE; 3687 #endif 3688 } 3689 3690 /* Calculate the %highest function. */ 3691 3692 static bfd_vma 3693 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED) 3694 { 3695 #ifdef BFD64 3696 return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff; 3697 #else 3698 abort (); 3699 return MINUS_ONE; 3700 #endif 3701 } 3702 3703 /* Create the .compact_rel section. */ 3704 3705 static bfd_boolean 3706 mips_elf_create_compact_rel_section 3707 (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED) 3708 { 3709 flagword flags; 3710 register asection *s; 3711 3712 if (bfd_get_section_by_name (abfd, ".compact_rel") == NULL) 3713 { 3714 flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED 3715 | SEC_READONLY); 3716 3717 s = bfd_make_section_with_flags (abfd, ".compact_rel", flags); 3718 if (s == NULL 3719 || ! bfd_set_section_alignment (abfd, s, 3720 MIPS_ELF_LOG_FILE_ALIGN (abfd))) 3721 return FALSE; 3722 3723 s->size = sizeof (Elf32_External_compact_rel); 3724 } 3725 3726 return TRUE; 3727 } 3728 3729 /* Create the .got section to hold the global offset table. */ 3730 3731 static bfd_boolean 3732 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info, 3733 bfd_boolean maybe_exclude) 3734 { 3735 flagword flags; 3736 register asection *s; 3737 struct elf_link_hash_entry *h; 3738 struct bfd_link_hash_entry *bh; 3739 struct mips_got_info *g; 3740 bfd_size_type amt; 3741 struct mips_elf_link_hash_table *htab; 3742 3743 htab = mips_elf_hash_table (info); 3744 3745 /* This function may be called more than once. */ 3746 s = mips_elf_got_section (abfd, TRUE); 3747 if (s) 3748 { 3749 if (! maybe_exclude) 3750 s->flags &= ~SEC_EXCLUDE; 3751 return TRUE; 3752 } 3753 3754 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY 3755 | SEC_LINKER_CREATED); 3756 3757 if (maybe_exclude) 3758 flags |= SEC_EXCLUDE; 3759 3760 /* We have to use an alignment of 2**4 here because this is hardcoded 3761 in the function stub generation and in the linker script. */ 3762 s = bfd_make_section_with_flags (abfd, ".got", flags); 3763 if (s == NULL 3764 || ! bfd_set_section_alignment (abfd, s, 4)) 3765 return FALSE; 3766 3767 /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the 3768 linker script because we don't want to define the symbol if we 3769 are not creating a global offset table. */ 3770 bh = NULL; 3771 if (! (_bfd_generic_link_add_one_symbol 3772 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s, 3773 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) 3774 return FALSE; 3775 3776 h = (struct elf_link_hash_entry *) bh; 3777 h->non_elf = 0; 3778 h->def_regular = 1; 3779 h->type = STT_OBJECT; 3780 elf_hash_table (info)->hgot = h; 3781 3782 if (info->shared 3783 && ! bfd_elf_link_record_dynamic_symbol (info, h)) 3784 return FALSE; 3785 3786 amt = sizeof (struct mips_got_info); 3787 g = bfd_alloc (abfd, amt); 3788 if (g == NULL) 3789 return FALSE; 3790 g->global_gotsym = NULL; 3791 g->global_gotno = 0; 3792 g->tls_gotno = 0; 3793 g->local_gotno = MIPS_RESERVED_GOTNO (info); 3794 g->assigned_gotno = MIPS_RESERVED_GOTNO (info); 3795 g->bfd2got = NULL; 3796 g->next = NULL; 3797 g->tls_ldm_offset = MINUS_ONE; 3798 g->got_entries = htab_try_create (1, mips_elf_got_entry_hash, 3799 mips_elf_got_entry_eq, NULL); 3800 if (g->got_entries == NULL) 3801 return FALSE; 3802 mips_elf_section_data (s)->u.got_info = g; 3803 mips_elf_section_data (s)->elf.this_hdr.sh_flags 3804 |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; 3805 3806 /* VxWorks also needs a .got.plt section. */ 3807 if (htab->is_vxworks) 3808 { 3809 s = bfd_make_section_with_flags (abfd, ".got.plt", 3810 SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS 3811 | SEC_IN_MEMORY | SEC_LINKER_CREATED); 3812 if (s == NULL || !bfd_set_section_alignment (abfd, s, 4)) 3813 return FALSE; 3814 3815 htab->sgotplt = s; 3816 } 3817 return TRUE; 3818 } 3819 3820 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or 3821 __GOTT_INDEX__ symbols. These symbols are only special for 3822 shared objects; they are not used in executables. */ 3823 3824 static bfd_boolean 3825 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h) 3826 { 3827 return (mips_elf_hash_table (info)->is_vxworks 3828 && info->shared 3829 && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0 3830 || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0)); 3831 } 3832 3833 /* Calculate the value produced by the RELOCATION (which comes from 3834 the INPUT_BFD). The ADDEND is the addend to use for this 3835 RELOCATION; RELOCATION->R_ADDEND is ignored. 3836 3837 The result of the relocation calculation is stored in VALUEP. 3838 REQUIRE_JALXP indicates whether or not the opcode used with this 3839 relocation must be JALX. 3840 3841 This function returns bfd_reloc_continue if the caller need take no 3842 further action regarding this relocation, bfd_reloc_notsupported if 3843 something goes dramatically wrong, bfd_reloc_overflow if an 3844 overflow occurs, and bfd_reloc_ok to indicate success. */ 3845 3846 static bfd_reloc_status_type 3847 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, 3848 asection *input_section, 3849 struct bfd_link_info *info, 3850 const Elf_Internal_Rela *relocation, 3851 bfd_vma addend, reloc_howto_type *howto, 3852 Elf_Internal_Sym *local_syms, 3853 asection **local_sections, bfd_vma *valuep, 3854 const char **namep, bfd_boolean *require_jalxp, 3855 bfd_boolean save_addend) 3856 { 3857 /* The eventual value we will return. */ 3858 bfd_vma value; 3859 /* The address of the symbol against which the relocation is 3860 occurring. */ 3861 bfd_vma symbol = 0; 3862 /* The final GP value to be used for the relocatable, executable, or 3863 shared object file being produced. */ 3864 bfd_vma gp = MINUS_ONE; 3865 /* The place (section offset or address) of the storage unit being 3866 relocated. */ 3867 bfd_vma p; 3868 /* The value of GP used to create the relocatable object. */ 3869 bfd_vma gp0 = MINUS_ONE; 3870 /* The offset into the global offset table at which the address of 3871 the relocation entry symbol, adjusted by the addend, resides 3872 during execution. */ 3873 bfd_vma g = MINUS_ONE; 3874 /* The section in which the symbol referenced by the relocation is 3875 located. */ 3876 asection *sec = NULL; 3877 struct mips_elf_link_hash_entry *h = NULL; 3878 /* TRUE if the symbol referred to by this relocation is a local 3879 symbol. */ 3880 bfd_boolean local_p, was_local_p; 3881 /* TRUE if the symbol referred to by this relocation is "_gp_disp". */ 3882 bfd_boolean gp_disp_p = FALSE; 3883 /* TRUE if the symbol referred to by this relocation is 3884 "__gnu_local_gp". */ 3885 bfd_boolean gnu_local_gp_p = FALSE; 3886 Elf_Internal_Shdr *symtab_hdr; 3887 size_t extsymoff; 3888 unsigned long r_symndx; 3889 int r_type; 3890 /* TRUE if overflow occurred during the calculation of the 3891 relocation value. */ 3892 bfd_boolean overflowed_p; 3893 /* TRUE if this relocation refers to a MIPS16 function. */ 3894 bfd_boolean target_is_16_bit_code_p = FALSE; 3895 struct mips_elf_link_hash_table *htab; 3896 bfd *dynobj; 3897 3898 dynobj = elf_hash_table (info)->dynobj; 3899 htab = mips_elf_hash_table (info); 3900 3901 /* Parse the relocation. */ 3902 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info); 3903 r_type = ELF_R_TYPE (input_bfd, relocation->r_info); 3904 p = (input_section->output_section->vma 3905 + input_section->output_offset 3906 + relocation->r_offset); 3907 3908 /* Assume that there will be no overflow. */ 3909 overflowed_p = FALSE; 3910 3911 /* Figure out whether or not the symbol is local, and get the offset 3912 used in the array of hash table entries. */ 3913 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; 3914 local_p = mips_elf_local_relocation_p (input_bfd, relocation, 3915 local_sections, FALSE); 3916 was_local_p = local_p; 3917 if (! elf_bad_symtab (input_bfd)) 3918 extsymoff = symtab_hdr->sh_info; 3919 else 3920 { 3921 /* The symbol table does not follow the rule that local symbols 3922 must come before globals. */ 3923 extsymoff = 0; 3924 } 3925 3926 /* Figure out the value of the symbol. */ 3927 if (local_p) 3928 { 3929 Elf_Internal_Sym *sym; 3930 3931 sym = local_syms + r_symndx; 3932 sec = local_sections[r_symndx]; 3933 3934 symbol = sec->output_section->vma + sec->output_offset; 3935 if (ELF_ST_TYPE (sym->st_info) != STT_SECTION 3936 || (sec->flags & SEC_MERGE)) 3937 symbol += sym->st_value; 3938 if ((sec->flags & SEC_MERGE) 3939 && ELF_ST_TYPE (sym->st_info) == STT_SECTION) 3940 { 3941 addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend); 3942 addend -= symbol; 3943 addend += sec->output_section->vma + sec->output_offset; 3944 } 3945 3946 /* MIPS16 text labels should be treated as odd. */ 3947 if (sym->st_other == STO_MIPS16) 3948 ++symbol; 3949 3950 /* Record the name of this symbol, for our caller. */ 3951 *namep = bfd_elf_string_from_elf_section (input_bfd, 3952 symtab_hdr->sh_link, 3953 sym->st_name); 3954 if (*namep == NULL || **namep == '\0') 3955 *namep = bfd_section_name (input_bfd, sec); 3956 3957 target_is_16_bit_code_p = (sym->st_other == STO_MIPS16); 3958 } 3959 else 3960 { 3961 /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ? */ 3962 3963 /* For global symbols we look up the symbol in the hash-table. */ 3964 h = ((struct mips_elf_link_hash_entry *) 3965 elf_sym_hashes (input_bfd) [r_symndx - extsymoff]); 3966 /* Find the real hash-table entry for this symbol. */ 3967 while (h->root.root.type == bfd_link_hash_indirect 3968 || h->root.root.type == bfd_link_hash_warning) 3969 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 3970 3971 /* Record the name of this symbol, for our caller. */ 3972 *namep = h->root.root.root.string; 3973 3974 /* See if this is the special _gp_disp symbol. Note that such a 3975 symbol must always be a global symbol. */ 3976 if (strcmp (*namep, "_gp_disp") == 0 3977 && ! NEWABI_P (input_bfd)) 3978 { 3979 /* Relocations against _gp_disp are permitted only with 3980 R_MIPS_HI16 and R_MIPS_LO16 relocations. */ 3981 if (r_type != R_MIPS_HI16 && r_type != R_MIPS_LO16 3982 && r_type != R_MIPS16_HI16 && r_type != R_MIPS16_LO16) 3983 return bfd_reloc_notsupported; 3984 3985 gp_disp_p = TRUE; 3986 } 3987 /* See if this is the special _gp symbol. Note that such a 3988 symbol must always be a global symbol. */ 3989 else if (strcmp (*namep, "__gnu_local_gp") == 0) 3990 gnu_local_gp_p = TRUE; 3991 3992 3993 /* If this symbol is defined, calculate its address. Note that 3994 _gp_disp is a magic symbol, always implicitly defined by the 3995 linker, so it's inappropriate to check to see whether or not 3996 its defined. */ 3997 else if ((h->root.root.type == bfd_link_hash_defined 3998 || h->root.root.type == bfd_link_hash_defweak) 3999 && h->root.root.u.def.section) 4000 { 4001 sec = h->root.root.u.def.section; 4002 if (sec->output_section) 4003 symbol = (h->root.root.u.def.value 4004 + sec->output_section->vma 4005 + sec->output_offset); 4006 else 4007 symbol = h->root.root.u.def.value; 4008 } 4009 else if (h->root.root.type == bfd_link_hash_undefweak) 4010 /* We allow relocations against undefined weak symbols, giving 4011 it the value zero, so that you can undefined weak functions 4012 and check to see if they exist by looking at their 4013 addresses. */ 4014 symbol = 0; 4015 else if (info->unresolved_syms_in_objects == RM_IGNORE 4016 && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT) 4017 symbol = 0; 4018 else if (strcmp (*namep, SGI_COMPAT (input_bfd) 4019 ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0) 4020 { 4021 /* If this is a dynamic link, we should have created a 4022 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol 4023 in in _bfd_mips_elf_create_dynamic_sections. 4024 Otherwise, we should define the symbol with a value of 0. 4025 FIXME: It should probably get into the symbol table 4026 somehow as well. */ 4027 BFD_ASSERT (! info->shared); 4028 BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL); 4029 symbol = 0; 4030 } 4031 else if (ELF_MIPS_IS_OPTIONAL (h->root.other)) 4032 { 4033 /* This is an optional symbol - an Irix specific extension to the 4034 ELF spec. Ignore it for now. 4035 XXX - FIXME - there is more to the spec for OPTIONAL symbols 4036 than simply ignoring them, but we do not handle this for now. 4037 For information see the "64-bit ELF Object File Specification" 4038 which is available from here: 4039 http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */ 4040 symbol = 0; 4041 } 4042 else 4043 { 4044 if (! ((*info->callbacks->undefined_symbol) 4045 (info, h->root.root.root.string, input_bfd, 4046 input_section, relocation->r_offset, 4047 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR) 4048 || ELF_ST_VISIBILITY (h->root.other)))) 4049 return bfd_reloc_undefined; 4050 symbol = 0; 4051 } 4052 4053 target_is_16_bit_code_p = (h->root.other == STO_MIPS16); 4054 } 4055 4056 /* If this is a 32- or 64-bit call to a 16-bit function with a stub, we 4057 need to redirect the call to the stub, unless we're already *in* 4058 a stub. */ 4059 if (r_type != R_MIPS16_26 && !info->relocatable 4060 && ((h != NULL && h->fn_stub != NULL) 4061 || (local_p && elf_tdata (input_bfd)->local_stubs != NULL 4062 && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL)) 4063 && !mips_elf_stub_section_p (input_bfd, input_section)) 4064 { 4065 /* This is a 32- or 64-bit call to a 16-bit function. We should 4066 have already noticed that we were going to need the 4067 stub. */ 4068 if (local_p) 4069 sec = elf_tdata (input_bfd)->local_stubs[r_symndx]; 4070 else 4071 { 4072 BFD_ASSERT (h->need_fn_stub); 4073 sec = h->fn_stub; 4074 } 4075 4076 symbol = sec->output_section->vma + sec->output_offset; 4077 } 4078 /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we 4079 need to redirect the call to the stub. */ 4080 else if (r_type == R_MIPS16_26 && !info->relocatable 4081 && h != NULL 4082 && (h->call_stub != NULL || h->call_fp_stub != NULL) 4083 && !target_is_16_bit_code_p) 4084 { 4085 /* If both call_stub and call_fp_stub are defined, we can figure 4086 out which one to use by seeing which one appears in the input 4087 file. */ 4088 if (h->call_stub != NULL && h->call_fp_stub != NULL) 4089 { 4090 asection *o; 4091 4092 sec = NULL; 4093 for (o = input_bfd->sections; o != NULL; o = o->next) 4094 { 4095 if (strncmp (bfd_get_section_name (input_bfd, o), 4096 CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0) 4097 { 4098 sec = h->call_fp_stub; 4099 break; 4100 } 4101 } 4102 if (sec == NULL) 4103 sec = h->call_stub; 4104 } 4105 else if (h->call_stub != NULL) 4106 sec = h->call_stub; 4107 else 4108 sec = h->call_fp_stub; 4109 4110 BFD_ASSERT (sec->size > 0); 4111 symbol = sec->output_section->vma + sec->output_offset; 4112 } 4113 4114 /* Calls from 16-bit code to 32-bit code and vice versa require the 4115 special jalx instruction. */ 4116 *require_jalxp = (!info->relocatable 4117 && (((r_type == R_MIPS16_26) && !target_is_16_bit_code_p) 4118 || ((r_type == R_MIPS_26) && target_is_16_bit_code_p))); 4119 4120 local_p = mips_elf_local_relocation_p (input_bfd, relocation, 4121 local_sections, TRUE); 4122 4123 /* If we haven't already determined the GOT offset, or the GP value, 4124 and we're going to need it, get it now. */ 4125 switch (r_type) 4126 { 4127 case R_MIPS_GOT_PAGE: 4128 case R_MIPS_GOT_OFST: 4129 /* We need to decay to GOT_DISP/addend if the symbol doesn't 4130 bind locally. */ 4131 local_p = local_p || _bfd_elf_symbol_refs_local_p (&h->root, info, 1); 4132 if (local_p || r_type == R_MIPS_GOT_OFST) 4133 break; 4134 /* Fall through. */ 4135 4136 case R_MIPS_CALL16: 4137 case R_MIPS_GOT16: 4138 case R_MIPS_GOT_DISP: 4139 case R_MIPS_GOT_HI16: 4140 case R_MIPS_CALL_HI16: 4141 case R_MIPS_GOT_LO16: 4142 case R_MIPS_CALL_LO16: 4143 case R_MIPS_TLS_GD: 4144 case R_MIPS_TLS_GOTTPREL: 4145 case R_MIPS_TLS_LDM: 4146 /* Find the index into the GOT where this value is located. */ 4147 if (r_type == R_MIPS_TLS_LDM) 4148 { 4149 g = mips_elf_local_got_index (abfd, input_bfd, info, 4150 sec, 0, 0, NULL, r_type); 4151 if (g == MINUS_ONE) 4152 return bfd_reloc_outofrange; 4153 } 4154 else if (!local_p) 4155 { 4156 /* On VxWorks, CALL relocations should refer to the .got.plt 4157 entry, which is initialized to point at the PLT stub. */ 4158 if (htab->is_vxworks 4159 && (r_type == R_MIPS_CALL_HI16 4160 || r_type == R_MIPS_CALL_LO16 4161 || r_type == R_MIPS_CALL16)) 4162 { 4163 BFD_ASSERT (addend == 0); 4164 BFD_ASSERT (h->root.needs_plt); 4165 g = mips_elf_gotplt_index (info, &h->root); 4166 } 4167 else 4168 { 4169 /* GOT_PAGE may take a non-zero addend, that is ignored in a 4170 GOT_PAGE relocation that decays to GOT_DISP because the 4171 symbol turns out to be global. The addend is then added 4172 as GOT_OFST. */ 4173 BFD_ASSERT (addend == 0 || r_type == R_MIPS_GOT_PAGE); 4174 g = mips_elf_global_got_index (dynobj, input_bfd, 4175 &h->root, r_type, info); 4176 if (h->tls_type == GOT_NORMAL 4177 && (! elf_hash_table(info)->dynamic_sections_created 4178 || (info->shared 4179 && (info->symbolic || h->root.forced_local) 4180 && h->root.def_regular))) 4181 { 4182 /* This is a static link or a -Bsymbolic link. The 4183 symbol is defined locally, or was forced to be local. 4184 We must initialize this entry in the GOT. */ 4185 asection *sgot = mips_elf_got_section (dynobj, FALSE); 4186 MIPS_ELF_PUT_WORD (dynobj, symbol, sgot->contents + g); 4187 } 4188 } 4189 } 4190 else if (!htab->is_vxworks 4191 && (r_type == R_MIPS_CALL16 || (r_type == R_MIPS_GOT16))) 4192 /* The calculation below does not involve "g". */ 4193 break; 4194 else 4195 { 4196 g = mips_elf_local_got_index (abfd, input_bfd, info, sec, 4197 symbol + addend, r_symndx, h, r_type); 4198 if (g == MINUS_ONE) 4199 return bfd_reloc_outofrange; 4200 } 4201 4202 /* Convert GOT indices to actual offsets. */ 4203 g = mips_elf_got_offset_from_index (dynobj, abfd, input_bfd, g); 4204 break; 4205 4206 case R_MIPS_HI16: 4207 case R_MIPS_LO16: 4208 case R_MIPS_GPREL16: 4209 case R_MIPS_GPREL32: 4210 case R_MIPS_LITERAL: 4211 case R_MIPS16_HI16: 4212 case R_MIPS16_LO16: 4213 case R_MIPS16_GPREL: 4214 gp0 = _bfd_get_gp_value (input_bfd); 4215 gp = _bfd_get_gp_value (abfd); 4216 if (dynobj) 4217 gp += mips_elf_adjust_gp (abfd, mips_elf_got_info (dynobj, NULL), 4218 input_bfd); 4219 break; 4220 4221 default: 4222 break; 4223 } 4224 4225 if (gnu_local_gp_p) 4226 symbol = gp; 4227 4228 /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__ 4229 symbols are resolved by the loader. Add them to .rela.dyn. */ 4230 if (h != NULL && is_gott_symbol (info, &h->root)) 4231 { 4232 Elf_Internal_Rela outrel; 4233 bfd_byte *loc; 4234 asection *s; 4235 4236 s = mips_elf_rel_dyn_section (info, FALSE); 4237 loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela); 4238 4239 outrel.r_offset = (input_section->output_section->vma 4240 + input_section->output_offset 4241 + relocation->r_offset); 4242 outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type); 4243 outrel.r_addend = addend; 4244 bfd_elf32_swap_reloca_out (abfd, &outrel, loc); 4245 *valuep = 0; 4246 return bfd_reloc_ok; 4247 } 4248 4249 /* Figure out what kind of relocation is being performed. */ 4250 switch (r_type) 4251 { 4252 case R_MIPS_NONE: 4253 return bfd_reloc_continue; 4254 4255 case R_MIPS_16: 4256 value = symbol + _bfd_mips_elf_sign_extend (addend, 16); 4257 overflowed_p = mips_elf_overflow_p (value, 16); 4258 break; 4259 4260 case R_MIPS_32: 4261 case R_MIPS_REL32: 4262 case R_MIPS_64: 4263 if ((info->shared 4264 || (!htab->is_vxworks 4265 && htab->root.dynamic_sections_created 4266 && h != NULL 4267 && h->root.def_dynamic 4268 && !h->root.def_regular)) 4269 && r_symndx != 0 4270 && (input_section->flags & SEC_ALLOC) != 0) 4271 { 4272 /* If we're creating a shared library, or this relocation is 4273 against a symbol in a shared library, then we can't know 4274 where the symbol will end up. So, we create a relocation 4275 record in the output, and leave the job up to the dynamic 4276 linker. 4277 4278 In VxWorks executables, references to external symbols 4279 are handled using copy relocs or PLT stubs, so there's 4280 no need to add a dynamic relocation here. */ 4281 value = addend; 4282 if (!mips_elf_create_dynamic_relocation (abfd, 4283 info, 4284 relocation, 4285 h, 4286 sec, 4287 symbol, 4288 &value, 4289 input_section)) 4290 return bfd_reloc_undefined; 4291 } 4292 else 4293 { 4294 if (r_type != R_MIPS_REL32) 4295 value = symbol + addend; 4296 else 4297 value = addend; 4298 } 4299 value &= howto->dst_mask; 4300 break; 4301 4302 case R_MIPS_PC32: 4303 value = symbol + addend - p; 4304 value &= howto->dst_mask; 4305 break; 4306 4307 case R_MIPS16_26: 4308 /* The calculation for R_MIPS16_26 is just the same as for an 4309 R_MIPS_26. It's only the storage of the relocated field into 4310 the output file that's different. That's handled in 4311 mips_elf_perform_relocation. So, we just fall through to the 4312 R_MIPS_26 case here. */ 4313 case R_MIPS_26: 4314 if (local_p) 4315 value = ((addend | ((p + 4) & 0xf0000000)) + symbol) >> 2; 4316 else 4317 { 4318 value = (_bfd_mips_elf_sign_extend (addend, 28) + symbol) >> 2; 4319 if (h->root.root.type != bfd_link_hash_undefweak) 4320 overflowed_p = (value >> 26) != ((p + 4) >> 28); 4321 } 4322 value &= howto->dst_mask; 4323 break; 4324 4325 case R_MIPS_TLS_DTPREL_HI16: 4326 value = (mips_elf_high (addend + symbol - dtprel_base (info)) 4327 & howto->dst_mask); 4328 break; 4329 4330 case R_MIPS_TLS_DTPREL_LO16: 4331 value = (symbol + addend - dtprel_base (info)) & howto->dst_mask; 4332 break; 4333 4334 case R_MIPS_TLS_TPREL_HI16: 4335 value = (mips_elf_high (addend + symbol - tprel_base (info)) 4336 & howto->dst_mask); 4337 break; 4338 4339 case R_MIPS_TLS_TPREL_LO16: 4340 value = (symbol + addend - tprel_base (info)) & howto->dst_mask; 4341 break; 4342 4343 case R_MIPS_HI16: 4344 case R_MIPS16_HI16: 4345 if (!gp_disp_p) 4346 { 4347 value = mips_elf_high (addend + symbol); 4348 value &= howto->dst_mask; 4349 } 4350 else 4351 { 4352 /* For MIPS16 ABI code we generate this sequence 4353 0: li $v0,%hi(_gp_disp) 4354 4: addiupc $v1,%lo(_gp_disp) 4355 8: sll $v0,16 4356 12: addu $v0,$v1 4357 14: move $gp,$v0 4358 So the offsets of hi and lo relocs are the same, but the 4359 $pc is four higher than $t9 would be, so reduce 4360 both reloc addends by 4. */ 4361 if (r_type == R_MIPS16_HI16) 4362 value = mips_elf_high (addend + gp - p - 4); 4363 else 4364 value = mips_elf_high (addend + gp - p); 4365 overflowed_p = mips_elf_overflow_p (value, 16); 4366 } 4367 break; 4368 4369 case R_MIPS_LO16: 4370 case R_MIPS16_LO16: 4371 if (!gp_disp_p) 4372 value = (symbol + addend) & howto->dst_mask; 4373 else 4374 { 4375 /* See the comment for R_MIPS16_HI16 above for the reason 4376 for this conditional. */ 4377 if (r_type == R_MIPS16_LO16) 4378 value = addend + gp - p; 4379 else 4380 value = addend + gp - p + 4; 4381 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation 4382 for overflow. But, on, say, IRIX5, relocations against 4383 _gp_disp are normally generated from the .cpload 4384 pseudo-op. It generates code that normally looks like 4385 this: 4386 4387 lui $gp,%hi(_gp_disp) 4388 addiu $gp,$gp,%lo(_gp_disp) 4389 addu $gp,$gp,$t9 4390 4391 Here $t9 holds the address of the function being called, 4392 as required by the MIPS ELF ABI. The R_MIPS_LO16 4393 relocation can easily overflow in this situation, but the 4394 R_MIPS_HI16 relocation will handle the overflow. 4395 Therefore, we consider this a bug in the MIPS ABI, and do 4396 not check for overflow here. */ 4397 } 4398 break; 4399 4400 case R_MIPS_LITERAL: 4401 /* Because we don't merge literal sections, we can handle this 4402 just like R_MIPS_GPREL16. In the long run, we should merge 4403 shared literals, and then we will need to additional work 4404 here. */ 4405 4406 /* Fall through. */ 4407 4408 case R_MIPS16_GPREL: 4409 /* The R_MIPS16_GPREL performs the same calculation as 4410 R_MIPS_GPREL16, but stores the relocated bits in a different 4411 order. We don't need to do anything special here; the 4412 differences are handled in mips_elf_perform_relocation. */ 4413 case R_MIPS_GPREL16: 4414 /* Only sign-extend the addend if it was extracted from the 4415 instruction. If the addend was separate, leave it alone, 4416 otherwise we may lose significant bits. */ 4417 if (howto->partial_inplace) 4418 addend = _bfd_mips_elf_sign_extend (addend, 16); 4419 value = symbol + addend - gp; 4420 /* If the symbol was local, any earlier relocatable links will 4421 have adjusted its addend with the gp offset, so compensate 4422 for that now. Don't do it for symbols forced local in this 4423 link, though, since they won't have had the gp offset applied 4424 to them before. */ 4425 if (was_local_p) 4426 value += gp0; 4427 overflowed_p = mips_elf_overflow_p (value, 16); 4428 break; 4429 4430 case R_MIPS_GOT16: 4431 case R_MIPS_CALL16: 4432 /* VxWorks does not have separate local and global semantics for 4433 R_MIPS_GOT16; every relocation evaluates to "G". */ 4434 if (!htab->is_vxworks && local_p) 4435 { 4436 bfd_boolean forced; 4437 4438 forced = ! mips_elf_local_relocation_p (input_bfd, relocation, 4439 local_sections, FALSE); 4440 value = mips_elf_got16_entry (abfd, input_bfd, info, sec, 4441 symbol + addend, forced); 4442 if (value == MINUS_ONE) 4443 return bfd_reloc_outofrange; 4444 value 4445 = mips_elf_got_offset_from_index (dynobj, abfd, input_bfd, value); 4446 overflowed_p = mips_elf_overflow_p (value, 16); 4447 break; 4448 } 4449 4450 /* Fall through. */ 4451 4452 case R_MIPS_TLS_GD: 4453 case R_MIPS_TLS_GOTTPREL: 4454 case R_MIPS_TLS_LDM: 4455 case R_MIPS_GOT_DISP: 4456 got_disp: 4457 value = g; 4458 overflowed_p = mips_elf_overflow_p (value, 16); 4459 break; 4460 4461 case R_MIPS_GPREL32: 4462 value = (addend + symbol + gp0 - gp); 4463 if (!save_addend) 4464 value &= howto->dst_mask; 4465 break; 4466 4467 case R_MIPS_PC16: 4468 case R_MIPS_GNU_REL16_S2: 4469 value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p; 4470 overflowed_p = mips_elf_overflow_p (value, 18); 4471 value = (value >> 2) & howto->dst_mask; 4472 break; 4473 4474 case R_MIPS_GOT_HI16: 4475 case R_MIPS_CALL_HI16: 4476 /* We're allowed to handle these two relocations identically. 4477 The dynamic linker is allowed to handle the CALL relocations 4478 differently by creating a lazy evaluation stub. */ 4479 value = g; 4480 value = mips_elf_high (value); 4481 value &= howto->dst_mask; 4482 break; 4483 4484 case R_MIPS_GOT_LO16: 4485 case R_MIPS_CALL_LO16: 4486 value = g & howto->dst_mask; 4487 break; 4488 4489 case R_MIPS_GOT_PAGE: 4490 /* GOT_PAGE relocations that reference non-local symbols decay 4491 to GOT_DISP. The corresponding GOT_OFST relocation decays to 4492 0. */ 4493 if (! local_p) 4494 goto got_disp; 4495 value = mips_elf_got_page (abfd, input_bfd, info, sec, 4496 symbol + addend, NULL); 4497 if (value == MINUS_ONE) 4498 return bfd_reloc_outofrange; 4499 value = mips_elf_got_offset_from_index (dynobj, abfd, input_bfd, value); 4500 overflowed_p = mips_elf_overflow_p (value, 16); 4501 break; 4502 4503 case R_MIPS_GOT_OFST: 4504 if (local_p) 4505 mips_elf_got_page (abfd, input_bfd, info, sec, 4506 symbol + addend, &value); 4507 else 4508 value = addend; 4509 overflowed_p = mips_elf_overflow_p (value, 16); 4510 break; 4511 4512 case R_MIPS_SUB: 4513 value = symbol - addend; 4514 value &= howto->dst_mask; 4515 break; 4516 4517 case R_MIPS_HIGHER: 4518 value = mips_elf_higher (addend + symbol); 4519 value &= howto->dst_mask; 4520 break; 4521 4522 case R_MIPS_HIGHEST: 4523 value = mips_elf_highest (addend + symbol); 4524 value &= howto->dst_mask; 4525 break; 4526 4527 case R_MIPS_SCN_DISP: 4528 value = symbol + addend - sec->output_offset; 4529 value &= howto->dst_mask; 4530 break; 4531 4532 case R_MIPS_JALR: 4533 /* This relocation is only a hint. In some cases, we optimize 4534 it into a bal instruction. But we don't try to optimize 4535 branches to the PLT; that will wind up wasting time. */ 4536 if (h != NULL && h->root.plt.offset != (bfd_vma) -1) 4537 return bfd_reloc_continue; 4538 value = symbol + addend; 4539 break; 4540 4541 case R_MIPS_PJUMP: 4542 case R_MIPS_GNU_VTINHERIT: 4543 case R_MIPS_GNU_VTENTRY: 4544 /* We don't do anything with these at present. */ 4545 return bfd_reloc_continue; 4546 4547 default: 4548 /* An unrecognized relocation type. */ 4549 return bfd_reloc_notsupported; 4550 } 4551 4552 /* Store the VALUE for our caller. */ 4553 *valuep = value; 4554 return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok; 4555 } 4556 4557 /* Obtain the field relocated by RELOCATION. */ 4558 4559 static bfd_vma 4560 mips_elf_obtain_contents (reloc_howto_type *howto, 4561 const Elf_Internal_Rela *relocation, 4562 bfd *input_bfd, bfd_byte *contents) 4563 { 4564 bfd_vma x; 4565 bfd_byte *location = contents + relocation->r_offset; 4566 4567 /* Obtain the bytes. */ 4568 x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location); 4569 4570 return x; 4571 } 4572 4573 /* It has been determined that the result of the RELOCATION is the 4574 VALUE. Use HOWTO to place VALUE into the output file at the 4575 appropriate position. The SECTION is the section to which the 4576 relocation applies. If REQUIRE_JALX is TRUE, then the opcode used 4577 for the relocation must be either JAL or JALX, and it is 4578 unconditionally converted to JALX. 4579 4580 Returns FALSE if anything goes wrong. */ 4581 4582 static bfd_boolean 4583 mips_elf_perform_relocation (struct bfd_link_info *info, 4584 reloc_howto_type *howto, 4585 const Elf_Internal_Rela *relocation, 4586 bfd_vma value, bfd *input_bfd, 4587 asection *input_section, bfd_byte *contents, 4588 bfd_boolean require_jalx) 4589 { 4590 bfd_vma x; 4591 bfd_byte *location; 4592 int r_type = ELF_R_TYPE (input_bfd, relocation->r_info); 4593 4594 /* Figure out where the relocation is occurring. */ 4595 location = contents + relocation->r_offset; 4596 4597 _bfd_mips16_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location); 4598 4599 /* Obtain the current value. */ 4600 x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents); 4601 4602 /* Clear the field we are setting. */ 4603 x &= ~howto->dst_mask; 4604 4605 /* Set the field. */ 4606 x |= (value & howto->dst_mask); 4607 4608 /* If required, turn JAL into JALX. */ 4609 if (require_jalx) 4610 { 4611 bfd_boolean ok; 4612 bfd_vma opcode = x >> 26; 4613 bfd_vma jalx_opcode; 4614 4615 /* Check to see if the opcode is already JAL or JALX. */ 4616 if (r_type == R_MIPS16_26) 4617 { 4618 ok = ((opcode == 0x6) || (opcode == 0x7)); 4619 jalx_opcode = 0x7; 4620 } 4621 else 4622 { 4623 ok = ((opcode == 0x3) || (opcode == 0x1d)); 4624 jalx_opcode = 0x1d; 4625 } 4626 4627 /* If the opcode is not JAL or JALX, there's a problem. */ 4628 if (!ok) 4629 { 4630 (*_bfd_error_handler) 4631 (_("%B: %A+0x%lx: jump to stub routine which is not jal"), 4632 input_bfd, 4633 input_section, 4634 (unsigned long) relocation->r_offset); 4635 bfd_set_error (bfd_error_bad_value); 4636 return FALSE; 4637 } 4638 4639 /* Make this the JALX opcode. */ 4640 x = (x & ~(0x3f << 26)) | (jalx_opcode << 26); 4641 } 4642 4643 /* On the RM9000, bal is faster than jal, because bal uses branch 4644 prediction hardware. If we are linking for the RM9000, and we 4645 see jal, and bal fits, use it instead. Note that this 4646 transformation should be safe for all architectures. */ 4647 if (bfd_get_mach (input_bfd) == bfd_mach_mips9000 4648 && !info->relocatable 4649 && !require_jalx 4650 && ((r_type == R_MIPS_26 && (x >> 26) == 0x3) /* jal addr */ 4651 || (r_type == R_MIPS_JALR && x == 0x0320f809))) /* jalr t9 */ 4652 { 4653 bfd_vma addr; 4654 bfd_vma dest; 4655 bfd_signed_vma off; 4656 4657 addr = (input_section->output_section->vma 4658 + input_section->output_offset 4659 + relocation->r_offset 4660 + 4); 4661 if (r_type == R_MIPS_26) 4662 dest = (value << 2) | ((addr >> 28) << 28); 4663 else 4664 dest = value; 4665 off = dest - addr; 4666 if (off <= 0x1ffff && off >= -0x20000) 4667 x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff); /* bal addr */ 4668 } 4669 4670 /* Put the value into the output. */ 4671 bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location); 4672 4673 _bfd_mips16_elf_reloc_shuffle(input_bfd, r_type, !info->relocatable, 4674 location); 4675 4676 return TRUE; 4677 } 4678 4679 /* Returns TRUE if SECTION is a MIPS16 stub section. */ 4680 4681 static bfd_boolean 4682 mips_elf_stub_section_p (bfd *abfd ATTRIBUTE_UNUSED, asection *section) 4683 { 4684 const char *name = bfd_get_section_name (abfd, section); 4685 4686 return (strncmp (name, FN_STUB, sizeof FN_STUB - 1) == 0 4687 || strncmp (name, CALL_STUB, sizeof CALL_STUB - 1) == 0 4688 || strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0); 4689 } 4690 4691 /* Add room for N relocations to the .rel(a).dyn section in ABFD. */ 4692 4693 static void 4694 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info, 4695 unsigned int n) 4696 { 4697 asection *s; 4698 struct mips_elf_link_hash_table *htab; 4699 4700 htab = mips_elf_hash_table (info); 4701 s = mips_elf_rel_dyn_section (info, FALSE); 4702 BFD_ASSERT (s != NULL); 4703 4704 if (htab->is_vxworks) 4705 s->size += n * MIPS_ELF_RELA_SIZE (abfd); 4706 else 4707 { 4708 if (s->size == 0) 4709 { 4710 /* Make room for a null element. */ 4711 s->size += MIPS_ELF_REL_SIZE (abfd); 4712 ++s->reloc_count; 4713 } 4714 s->size += n * MIPS_ELF_REL_SIZE (abfd); 4715 } 4716 } 4717 4718 /* Create a rel.dyn relocation for the dynamic linker to resolve. REL 4719 is the original relocation, which is now being transformed into a 4720 dynamic relocation. The ADDENDP is adjusted if necessary; the 4721 caller should store the result in place of the original addend. */ 4722 4723 static bfd_boolean 4724 mips_elf_create_dynamic_relocation (bfd *output_bfd, 4725 struct bfd_link_info *info, 4726 const Elf_Internal_Rela *rel, 4727 struct mips_elf_link_hash_entry *h, 4728 asection *sec, bfd_vma symbol, 4729 bfd_vma *addendp, asection *input_section) 4730 { 4731 Elf_Internal_Rela outrel[3]; 4732 asection *sreloc; 4733 bfd *dynobj; 4734 int r_type; 4735 long indx; 4736 bfd_boolean defined_p; 4737 struct mips_elf_link_hash_table *htab; 4738 4739 htab = mips_elf_hash_table (info); 4740 r_type = ELF_R_TYPE (output_bfd, rel->r_info); 4741 dynobj = elf_hash_table (info)->dynobj; 4742 sreloc = mips_elf_rel_dyn_section (info, FALSE); 4743 BFD_ASSERT (sreloc != NULL); 4744 BFD_ASSERT (sreloc->contents != NULL); 4745 BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd) 4746 < sreloc->size); 4747 4748 outrel[0].r_offset = 4749 _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset); 4750 outrel[1].r_offset = 4751 _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset); 4752 outrel[2].r_offset = 4753 _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset); 4754 4755 if (outrel[0].r_offset == MINUS_ONE) 4756 /* The relocation field has been deleted. */ 4757 return TRUE; 4758 4759 if (outrel[0].r_offset == MINUS_TWO) 4760 { 4761 /* The relocation field has been converted into a relative value of 4762 some sort. Functions like _bfd_elf_write_section_eh_frame expect 4763 the field to be fully relocated, so add in the symbol's value. */ 4764 *addendp += symbol; 4765 return TRUE; 4766 } 4767 4768 /* We must now calculate the dynamic symbol table index to use 4769 in the relocation. */ 4770 if (h != NULL 4771 && (sec == NULL || !h->root.def_regular 4772 || (info->shared && !info->symbolic && !h->root.forced_local))) 4773 { 4774 indx = h->root.dynindx; 4775 if (SGI_COMPAT (output_bfd)) 4776 defined_p = h->root.def_regular; 4777 else 4778 /* ??? glibc's ld.so just adds the final GOT entry to the 4779 relocation field. It therefore treats relocs against 4780 defined symbols in the same way as relocs against 4781 undefined symbols. */ 4782 defined_p = FALSE; 4783 } 4784 else 4785 { 4786 if (sec != NULL && bfd_is_abs_section (sec)) 4787 indx = 0; 4788 else if (sec == NULL || sec->owner == NULL) 4789 { 4790 bfd_set_error (bfd_error_bad_value); 4791 return FALSE; 4792 } 4793 else 4794 { 4795 indx = elf_section_data (sec->output_section)->dynindx; 4796 if (indx == 0) 4797 abort (); 4798 } 4799 4800 /* Instead of generating a relocation using the section 4801 symbol, we may as well make it a fully relative 4802 relocation. We want to avoid generating relocations to 4803 local symbols because we used to generate them 4804 incorrectly, without adding the original symbol value, 4805 which is mandated by the ABI for section symbols. In 4806 order to give dynamic loaders and applications time to 4807 phase out the incorrect use, we refrain from emitting 4808 section-relative relocations. It's not like they're 4809 useful, after all. This should be a bit more efficient 4810 as well. */ 4811 /* ??? Although this behavior is compatible with glibc's ld.so, 4812 the ABI says that relocations against STN_UNDEF should have 4813 a symbol value of 0. Irix rld honors this, so relocations 4814 against STN_UNDEF have no effect. */ 4815 if (!SGI_COMPAT (output_bfd)) 4816 indx = 0; 4817 defined_p = TRUE; 4818 } 4819 4820 /* If the relocation was previously an absolute relocation and 4821 this symbol will not be referred to by the relocation, we must 4822 adjust it by the value we give it in the dynamic symbol table. 4823 Otherwise leave the job up to the dynamic linker. */ 4824 if (defined_p && r_type != R_MIPS_REL32) 4825 *addendp += symbol; 4826 4827 if (htab->is_vxworks) 4828 /* VxWorks uses non-relative relocations for this. */ 4829 outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32); 4830 else 4831 /* The relocation is always an REL32 relocation because we don't 4832 know where the shared library will wind up at load-time. */ 4833 outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx, 4834 R_MIPS_REL32); 4835 4836 /* For strict adherence to the ABI specification, we should 4837 generate a R_MIPS_64 relocation record by itself before the 4838 _REL32/_64 record as well, such that the addend is read in as 4839 a 64-bit value (REL32 is a 32-bit relocation, after all). 4840 However, since none of the existing ELF64 MIPS dynamic 4841 loaders seems to care, we don't waste space with these 4842 artificial relocations. If this turns out to not be true, 4843 mips_elf_allocate_dynamic_relocation() should be tweaked so 4844 as to make room for a pair of dynamic relocations per 4845 invocation if ABI_64_P, and here we should generate an 4846 additional relocation record with R_MIPS_64 by itself for a 4847 NULL symbol before this relocation record. */ 4848 outrel[1].r_info = ELF_R_INFO (output_bfd, 0, 4849 ABI_64_P (output_bfd) 4850 ? R_MIPS_64 4851 : R_MIPS_NONE); 4852 outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE); 4853 4854 /* Adjust the output offset of the relocation to reference the 4855 correct location in the output file. */ 4856 outrel[0].r_offset += (input_section->output_section->vma 4857 + input_section->output_offset); 4858 outrel[1].r_offset += (input_section->output_section->vma 4859 + input_section->output_offset); 4860 outrel[2].r_offset += (input_section->output_section->vma 4861 + input_section->output_offset); 4862 4863 /* Put the relocation back out. We have to use the special 4864 relocation outputter in the 64-bit case since the 64-bit 4865 relocation format is non-standard. */ 4866 if (ABI_64_P (output_bfd)) 4867 { 4868 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out) 4869 (output_bfd, &outrel[0], 4870 (sreloc->contents 4871 + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel))); 4872 } 4873 else if (htab->is_vxworks) 4874 { 4875 /* VxWorks uses RELA rather than REL dynamic relocations. */ 4876 outrel[0].r_addend = *addendp; 4877 bfd_elf32_swap_reloca_out 4878 (output_bfd, &outrel[0], 4879 (sreloc->contents 4880 + sreloc->reloc_count * sizeof (Elf32_External_Rela))); 4881 } 4882 else 4883 bfd_elf32_swap_reloc_out 4884 (output_bfd, &outrel[0], 4885 (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel))); 4886 4887 /* We've now added another relocation. */ 4888 ++sreloc->reloc_count; 4889 4890 /* Make sure the output section is writable. The dynamic linker 4891 will be writing to it. */ 4892 elf_section_data (input_section->output_section)->this_hdr.sh_flags 4893 |= SHF_WRITE; 4894 4895 /* On IRIX5, make an entry of compact relocation info. */ 4896 if (IRIX_COMPAT (output_bfd) == ict_irix5) 4897 { 4898 asection *scpt = bfd_get_section_by_name (dynobj, ".compact_rel"); 4899 bfd_byte *cr; 4900 4901 if (scpt) 4902 { 4903 Elf32_crinfo cptrel; 4904 4905 mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG); 4906 cptrel.vaddr = (rel->r_offset 4907 + input_section->output_section->vma 4908 + input_section->output_offset); 4909 if (r_type == R_MIPS_REL32) 4910 mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32); 4911 else 4912 mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD); 4913 mips_elf_set_cr_dist2to (cptrel, 0); 4914 cptrel.konst = *addendp; 4915 4916 cr = (scpt->contents 4917 + sizeof (Elf32_External_compact_rel)); 4918 mips_elf_set_cr_relvaddr (cptrel, 0); 4919 bfd_elf32_swap_crinfo_out (output_bfd, &cptrel, 4920 ((Elf32_External_crinfo *) cr 4921 + scpt->reloc_count)); 4922 ++scpt->reloc_count; 4923 } 4924 } 4925 4926 /* If we've written this relocation for a readonly section, 4927 we need to set DF_TEXTREL again, so that we do not delete the 4928 DT_TEXTREL tag. */ 4929 if (MIPS_ELF_READONLY_SECTION (input_section)) 4930 info->flags |= DF_TEXTREL; 4931 4932 return TRUE; 4933 } 4934 4935 /* Return the MACH for a MIPS e_flags value. */ 4936 4937 unsigned long 4938 _bfd_elf_mips_mach (flagword flags) 4939 { 4940 switch (flags & EF_MIPS_MACH) 4941 { 4942 case E_MIPS_MACH_3900: 4943 return bfd_mach_mips3900; 4944 4945 case E_MIPS_MACH_4010: 4946 return bfd_mach_mips4010; 4947 4948 case E_MIPS_MACH_4100: 4949 return bfd_mach_mips4100; 4950 4951 case E_MIPS_MACH_4111: 4952 return bfd_mach_mips4111; 4953 4954 case E_MIPS_MACH_4120: 4955 return bfd_mach_mips4120; 4956 4957 case E_MIPS_MACH_4650: 4958 return bfd_mach_mips4650; 4959 4960 case E_MIPS_MACH_5400: 4961 return bfd_mach_mips5400; 4962 4963 case E_MIPS_MACH_5500: 4964 return bfd_mach_mips5500; 4965 4966 case E_MIPS_MACH_9000: 4967 return bfd_mach_mips9000; 4968 4969 case E_MIPS_MACH_SB1: 4970 return bfd_mach_mips_sb1; 4971 4972 case E_MIPS_MACH_OCTEON: 4973 return bfd_mach_mips_octeon; 4974 4975 default: 4976 switch (flags & EF_MIPS_ARCH) 4977 { 4978 default: 4979 case E_MIPS_ARCH_1: 4980 return bfd_mach_mips3000; 4981 break; 4982 4983 case E_MIPS_ARCH_2: 4984 return bfd_mach_mips6000; 4985 break; 4986 4987 case E_MIPS_ARCH_3: 4988 return bfd_mach_mips4000; 4989 break; 4990 4991 case E_MIPS_ARCH_4: 4992 return bfd_mach_mips8000; 4993 break; 4994 4995 case E_MIPS_ARCH_5: 4996 return bfd_mach_mips5; 4997 break; 4998 4999 case E_MIPS_ARCH_32: 5000 return bfd_mach_mipsisa32; 5001 break; 5002 5003 case E_MIPS_ARCH_64: 5004 return bfd_mach_mipsisa64; 5005 break; 5006 5007 case E_MIPS_ARCH_32R2: 5008 return bfd_mach_mipsisa32r2; 5009 break; 5010 5011 case E_MIPS_ARCH_64R2: 5012 return bfd_mach_mipsisa64r2; 5013 break; 5014 } 5015 } 5016 5017 return 0; 5018 } 5019 5020 /* Return printable name for ABI. */ 5021 5022 static INLINE char * 5023 elf_mips_abi_name (bfd *abfd) 5024 { 5025 flagword flags; 5026 5027 flags = elf_elfheader (abfd)->e_flags; 5028 switch (flags & EF_MIPS_ABI) 5029 { 5030 case 0: 5031 if (ABI_N32_P (abfd)) 5032 return "N32"; 5033 else if (ABI_64_P (abfd)) 5034 return "64"; 5035 else 5036 return "none"; 5037 case E_MIPS_ABI_O32: 5038 return "O32"; 5039 case E_MIPS_ABI_O64: 5040 return "O64"; 5041 case E_MIPS_ABI_EABI32: 5042 return "EABI32"; 5043 case E_MIPS_ABI_EABI64: 5044 return "EABI64"; 5045 default: 5046 return "unknown abi"; 5047 } 5048 } 5049 5050 /* MIPS ELF uses two common sections. One is the usual one, and the 5051 other is for small objects. All the small objects are kept 5052 together, and then referenced via the gp pointer, which yields 5053 faster assembler code. This is what we use for the small common 5054 section. This approach is copied from ecoff.c. */ 5055 static asection mips_elf_scom_section; 5056 static asymbol mips_elf_scom_symbol; 5057 static asymbol *mips_elf_scom_symbol_ptr; 5058 5059 /* MIPS ELF also uses an acommon section, which represents an 5060 allocated common symbol which may be overridden by a 5061 definition in a shared library. */ 5062 static asection mips_elf_acom_section; 5063 static asymbol mips_elf_acom_symbol; 5064 static asymbol *mips_elf_acom_symbol_ptr; 5065 5066 /* Handle the special MIPS section numbers that a symbol may use. 5067 This is used for both the 32-bit and the 64-bit ABI. */ 5068 5069 void 5070 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym) 5071 { 5072 elf_symbol_type *elfsym; 5073 5074 elfsym = (elf_symbol_type *) asym; 5075 switch (elfsym->internal_elf_sym.st_shndx) 5076 { 5077 case SHN_MIPS_ACOMMON: 5078 /* This section is used in a dynamically linked executable file. 5079 It is an allocated common section. The dynamic linker can 5080 either resolve these symbols to something in a shared 5081 library, or it can just leave them here. For our purposes, 5082 we can consider these symbols to be in a new section. */ 5083 if (mips_elf_acom_section.name == NULL) 5084 { 5085 /* Initialize the acommon section. */ 5086 mips_elf_acom_section.name = ".acommon"; 5087 mips_elf_acom_section.flags = SEC_ALLOC; 5088 mips_elf_acom_section.output_section = &mips_elf_acom_section; 5089 mips_elf_acom_section.symbol = &mips_elf_acom_symbol; 5090 mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr; 5091 mips_elf_acom_symbol.name = ".acommon"; 5092 mips_elf_acom_symbol.flags = BSF_SECTION_SYM; 5093 mips_elf_acom_symbol.section = &mips_elf_acom_section; 5094 mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol; 5095 } 5096 asym->section = &mips_elf_acom_section; 5097 break; 5098 5099 case SHN_COMMON: 5100 /* Common symbols less than the GP size are automatically 5101 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */ 5102 if (asym->value > elf_gp_size (abfd) 5103 || IRIX_COMPAT (abfd) == ict_irix6) 5104 break; 5105 /* Fall through. */ 5106 case SHN_MIPS_SCOMMON: 5107 if (mips_elf_scom_section.name == NULL) 5108 { 5109 /* Initialize the small common section. */ 5110 mips_elf_scom_section.name = ".scommon"; 5111 mips_elf_scom_section.flags = SEC_IS_COMMON; 5112 mips_elf_scom_section.output_section = &mips_elf_scom_section; 5113 mips_elf_scom_section.symbol = &mips_elf_scom_symbol; 5114 mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr; 5115 mips_elf_scom_symbol.name = ".scommon"; 5116 mips_elf_scom_symbol.flags = BSF_SECTION_SYM; 5117 mips_elf_scom_symbol.section = &mips_elf_scom_section; 5118 mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol; 5119 } 5120 asym->section = &mips_elf_scom_section; 5121 asym->value = elfsym->internal_elf_sym.st_size; 5122 break; 5123 5124 case SHN_MIPS_SUNDEFINED: 5125 asym->section = bfd_und_section_ptr; 5126 break; 5127 5128 case SHN_MIPS_TEXT: 5129 { 5130 asection *section = bfd_get_section_by_name (abfd, ".text"); 5131 5132 BFD_ASSERT (SGI_COMPAT (abfd)); 5133 if (section != NULL) 5134 { 5135 asym->section = section; 5136 /* MIPS_TEXT is a bit special, the address is not an offset 5137 to the base of the .text section. So substract the section 5138 base address to make it an offset. */ 5139 asym->value -= section->vma; 5140 } 5141 } 5142 break; 5143 5144 case SHN_MIPS_DATA: 5145 { 5146 asection *section = bfd_get_section_by_name (abfd, ".data"); 5147 5148 BFD_ASSERT (SGI_COMPAT (abfd)); 5149 if (section != NULL) 5150 { 5151 asym->section = section; 5152 /* MIPS_DATA is a bit special, the address is not an offset 5153 to the base of the .data section. So substract the section 5154 base address to make it an offset. */ 5155 asym->value -= section->vma; 5156 } 5157 } 5158 break; 5159 } 5160 } 5161 5162 /* Implement elf_backend_eh_frame_address_size. This differs from 5163 the default in the way it handles EABI64. 5164 5165 EABI64 was originally specified as an LP64 ABI, and that is what 5166 -mabi=eabi normally gives on a 64-bit target. However, gcc has 5167 historically accepted the combination of -mabi=eabi and -mlong32, 5168 and this ILP32 variation has become semi-official over time. 5169 Both forms use elf32 and have pointer-sized FDE addresses. 5170 5171 If an EABI object was generated by GCC 4.0 or above, it will have 5172 an empty .gcc_compiled_longXX section, where XX is the size of longs 5173 in bits. Unfortunately, ILP32 objects generated by earlier compilers 5174 have no special marking to distinguish them from LP64 objects. 5175 5176 We don't want users of the official LP64 ABI to be punished for the 5177 existence of the ILP32 variant, but at the same time, we don't want 5178 to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects. 5179 We therefore take the following approach: 5180 5181 - If ABFD contains a .gcc_compiled_longXX section, use it to 5182 determine the pointer size. 5183 5184 - Otherwise check the type of the first relocation. Assume that 5185 the LP64 ABI is being used if the relocation is of type R_MIPS_64. 5186 5187 - Otherwise punt. 5188 5189 The second check is enough to detect LP64 objects generated by pre-4.0 5190 compilers because, in the kind of output generated by those compilers, 5191 the first relocation will be associated with either a CIE personality 5192 routine or an FDE start address. Furthermore, the compilers never 5193 used a special (non-pointer) encoding for this ABI. 5194 5195 Checking the relocation type should also be safe because there is no 5196 reason to use R_MIPS_64 in an ILP32 object. Pre-4.0 compilers never 5197 did so. */ 5198 5199 unsigned int 5200 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec) 5201 { 5202 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64) 5203 return 8; 5204 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64) 5205 { 5206 bfd_boolean long32_p, long64_p; 5207 5208 long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0; 5209 long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0; 5210 if (long32_p && long64_p) 5211 return 0; 5212 if (long32_p) 5213 return 4; 5214 if (long64_p) 5215 return 8; 5216 5217 if (sec->reloc_count > 0 5218 && elf_section_data (sec)->relocs != NULL 5219 && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info) 5220 == R_MIPS_64)) 5221 return 8; 5222 5223 return 0; 5224 } 5225 return 4; 5226 } 5227 5228 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP 5229 relocations against two unnamed section symbols to resolve to the 5230 same address. For example, if we have code like: 5231 5232 lw $4,%got_disp(.data)($gp) 5233 lw $25,%got_disp(.text)($gp) 5234 jalr $25 5235 5236 then the linker will resolve both relocations to .data and the program 5237 will jump there rather than to .text. 5238 5239 We can work around this problem by giving names to local section symbols. 5240 This is also what the MIPSpro tools do. */ 5241 5242 bfd_boolean 5243 _bfd_mips_elf_name_local_section_symbols (bfd *abfd) 5244 { 5245 return SGI_COMPAT (abfd); 5246 } 5247 5248 /* Work over a section just before writing it out. This routine is 5249 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize 5250 sections that need the SHF_MIPS_GPREL flag by name; there has to be 5251 a better way. */ 5252 5253 bfd_boolean 5254 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr) 5255 { 5256 if (hdr->sh_type == SHT_MIPS_REGINFO 5257 && hdr->sh_size > 0) 5258 { 5259 bfd_byte buf[4]; 5260 5261 BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo)); 5262 BFD_ASSERT (hdr->contents == NULL); 5263 5264 if (bfd_seek (abfd, 5265 hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4, 5266 SEEK_SET) != 0) 5267 return FALSE; 5268 H_PUT_32 (abfd, elf_gp (abfd), buf); 5269 if (bfd_bwrite (buf, 4, abfd) != 4) 5270 return FALSE; 5271 } 5272 5273 if (hdr->sh_type == SHT_MIPS_OPTIONS 5274 && hdr->bfd_section != NULL 5275 && mips_elf_section_data (hdr->bfd_section) != NULL 5276 && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL) 5277 { 5278 bfd_byte *contents, *l, *lend; 5279 5280 /* We stored the section contents in the tdata field in the 5281 set_section_contents routine. We save the section contents 5282 so that we don't have to read them again. 5283 At this point we know that elf_gp is set, so we can look 5284 through the section contents to see if there is an 5285 ODK_REGINFO structure. */ 5286 5287 contents = mips_elf_section_data (hdr->bfd_section)->u.tdata; 5288 l = contents; 5289 lend = contents + hdr->sh_size; 5290 while (l + sizeof (Elf_External_Options) <= lend) 5291 { 5292 Elf_Internal_Options intopt; 5293 5294 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l, 5295 &intopt); 5296 if (intopt.size < sizeof (Elf_External_Options)) 5297 { 5298 (*_bfd_error_handler) 5299 (_("%B: Warning: bad `%s' option size %u smaller than its header"), 5300 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size); 5301 break; 5302 } 5303 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO) 5304 { 5305 bfd_byte buf[8]; 5306 5307 if (bfd_seek (abfd, 5308 (hdr->sh_offset 5309 + (l - contents) 5310 + sizeof (Elf_External_Options) 5311 + (sizeof (Elf64_External_RegInfo) - 8)), 5312 SEEK_SET) != 0) 5313 return FALSE; 5314 H_PUT_64 (abfd, elf_gp (abfd), buf); 5315 if (bfd_bwrite (buf, 8, abfd) != 8) 5316 return FALSE; 5317 } 5318 else if (intopt.kind == ODK_REGINFO) 5319 { 5320 bfd_byte buf[4]; 5321 5322 if (bfd_seek (abfd, 5323 (hdr->sh_offset 5324 + (l - contents) 5325 + sizeof (Elf_External_Options) 5326 + (sizeof (Elf32_External_RegInfo) - 4)), 5327 SEEK_SET) != 0) 5328 return FALSE; 5329 H_PUT_32 (abfd, elf_gp (abfd), buf); 5330 if (bfd_bwrite (buf, 4, abfd) != 4) 5331 return FALSE; 5332 } 5333 l += intopt.size; 5334 } 5335 } 5336 5337 if (hdr->bfd_section != NULL) 5338 { 5339 const char *name = bfd_get_section_name (abfd, hdr->bfd_section); 5340 5341 if (strcmp (name, ".sdata") == 0 5342 || strcmp (name, ".lit8") == 0 5343 || strcmp (name, ".lit4") == 0) 5344 { 5345 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; 5346 hdr->sh_type = SHT_PROGBITS; 5347 } 5348 else if (strcmp (name, ".sbss") == 0) 5349 { 5350 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; 5351 hdr->sh_type = SHT_NOBITS; 5352 } 5353 else if (strcmp (name, ".srdata") == 0) 5354 { 5355 hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL; 5356 hdr->sh_type = SHT_PROGBITS; 5357 } 5358 else if (strcmp (name, ".compact_rel") == 0) 5359 { 5360 hdr->sh_flags = 0; 5361 hdr->sh_type = SHT_PROGBITS; 5362 } 5363 else if (strcmp (name, ".rtproc") == 0) 5364 { 5365 if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0) 5366 { 5367 unsigned int adjust; 5368 5369 adjust = hdr->sh_size % hdr->sh_addralign; 5370 if (adjust != 0) 5371 hdr->sh_size += hdr->sh_addralign - adjust; 5372 } 5373 } 5374 } 5375 5376 return TRUE; 5377 } 5378 5379 /* Handle a MIPS specific section when reading an object file. This 5380 is called when elfcode.h finds a section with an unknown type. 5381 This routine supports both the 32-bit and 64-bit ELF ABI. 5382 5383 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure 5384 how to. */ 5385 5386 bfd_boolean 5387 _bfd_mips_elf_section_from_shdr (bfd *abfd, 5388 Elf_Internal_Shdr *hdr, 5389 const char *name, 5390 int shindex) 5391 { 5392 flagword flags = 0; 5393 5394 /* There ought to be a place to keep ELF backend specific flags, but 5395 at the moment there isn't one. We just keep track of the 5396 sections by their name, instead. Fortunately, the ABI gives 5397 suggested names for all the MIPS specific sections, so we will 5398 probably get away with this. */ 5399 switch (hdr->sh_type) 5400 { 5401 case SHT_MIPS_LIBLIST: 5402 if (strcmp (name, ".liblist") != 0) 5403 return FALSE; 5404 break; 5405 case SHT_MIPS_MSYM: 5406 if (strcmp (name, ".msym") != 0) 5407 return FALSE; 5408 break; 5409 case SHT_MIPS_CONFLICT: 5410 if (strcmp (name, ".conflict") != 0) 5411 return FALSE; 5412 break; 5413 case SHT_MIPS_GPTAB: 5414 if (strncmp (name, ".gptab.", sizeof ".gptab." - 1) != 0) 5415 return FALSE; 5416 break; 5417 case SHT_MIPS_UCODE: 5418 if (strcmp (name, ".ucode") != 0) 5419 return FALSE; 5420 break; 5421 case SHT_MIPS_DEBUG: 5422 if (strcmp (name, ".mdebug") != 0) 5423 return FALSE; 5424 flags = SEC_DEBUGGING; 5425 break; 5426 case SHT_MIPS_REGINFO: 5427 if (strcmp (name, ".reginfo") != 0 5428 || hdr->sh_size != sizeof (Elf32_External_RegInfo)) 5429 return FALSE; 5430 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE); 5431 break; 5432 case SHT_MIPS_IFACE: 5433 if (strcmp (name, ".MIPS.interfaces") != 0) 5434 return FALSE; 5435 break; 5436 case SHT_MIPS_CONTENT: 5437 if (strncmp (name, ".MIPS.content", sizeof ".MIPS.content" - 1) != 0) 5438 return FALSE; 5439 break; 5440 case SHT_MIPS_OPTIONS: 5441 if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name)) 5442 return FALSE; 5443 break; 5444 case SHT_MIPS_DWARF: 5445 if (strncmp (name, ".debug_", sizeof ".debug_" - 1) != 0) 5446 return FALSE; 5447 break; 5448 case SHT_MIPS_SYMBOL_LIB: 5449 if (strcmp (name, ".MIPS.symlib") != 0) 5450 return FALSE; 5451 break; 5452 case SHT_MIPS_EVENTS: 5453 if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) != 0 5454 && strncmp (name, ".MIPS.post_rel", 5455 sizeof ".MIPS.post_rel" - 1) != 0) 5456 return FALSE; 5457 break; 5458 default: 5459 break; 5460 } 5461 5462 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) 5463 return FALSE; 5464 5465 if (flags) 5466 { 5467 if (! bfd_set_section_flags (abfd, hdr->bfd_section, 5468 (bfd_get_section_flags (abfd, 5469 hdr->bfd_section) 5470 | flags))) 5471 return FALSE; 5472 } 5473 5474 /* FIXME: We should record sh_info for a .gptab section. */ 5475 5476 /* For a .reginfo section, set the gp value in the tdata information 5477 from the contents of this section. We need the gp value while 5478 processing relocs, so we just get it now. The .reginfo section 5479 is not used in the 64-bit MIPS ELF ABI. */ 5480 if (hdr->sh_type == SHT_MIPS_REGINFO) 5481 { 5482 Elf32_External_RegInfo ext; 5483 Elf32_RegInfo s; 5484 5485 if (! bfd_get_section_contents (abfd, hdr->bfd_section, 5486 &ext, 0, sizeof ext)) 5487 return FALSE; 5488 bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s); 5489 elf_gp (abfd) = s.ri_gp_value; 5490 } 5491 5492 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and 5493 set the gp value based on what we find. We may see both 5494 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case, 5495 they should agree. */ 5496 if (hdr->sh_type == SHT_MIPS_OPTIONS) 5497 { 5498 bfd_byte *contents, *l, *lend; 5499 5500 contents = bfd_malloc (hdr->sh_size); 5501 if (contents == NULL) 5502 return FALSE; 5503 if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents, 5504 0, hdr->sh_size)) 5505 { 5506 free (contents); 5507 return FALSE; 5508 } 5509 l = contents; 5510 lend = contents + hdr->sh_size; 5511 while (l + sizeof (Elf_External_Options) <= lend) 5512 { 5513 Elf_Internal_Options intopt; 5514 5515 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l, 5516 &intopt); 5517 if (intopt.size < sizeof (Elf_External_Options)) 5518 { 5519 (*_bfd_error_handler) 5520 (_("%B: Warning: bad `%s' option size %u smaller than its header"), 5521 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size); 5522 break; 5523 } 5524 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO) 5525 { 5526 Elf64_Internal_RegInfo intreg; 5527 5528 bfd_mips_elf64_swap_reginfo_in 5529 (abfd, 5530 ((Elf64_External_RegInfo *) 5531 (l + sizeof (Elf_External_Options))), 5532 &intreg); 5533 elf_gp (abfd) = intreg.ri_gp_value; 5534 } 5535 else if (intopt.kind == ODK_REGINFO) 5536 { 5537 Elf32_RegInfo intreg; 5538 5539 bfd_mips_elf32_swap_reginfo_in 5540 (abfd, 5541 ((Elf32_External_RegInfo *) 5542 (l + sizeof (Elf_External_Options))), 5543 &intreg); 5544 elf_gp (abfd) = intreg.ri_gp_value; 5545 } 5546 l += intopt.size; 5547 } 5548 free (contents); 5549 } 5550 5551 return TRUE; 5552 } 5553 5554 /* Set the correct type for a MIPS ELF section. We do this by the 5555 section name, which is a hack, but ought to work. This routine is 5556 used by both the 32-bit and the 64-bit ABI. */ 5557 5558 bfd_boolean 5559 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec) 5560 { 5561 register const char *name; 5562 unsigned int sh_type; 5563 5564 name = bfd_get_section_name (abfd, sec); 5565 sh_type = hdr->sh_type; 5566 5567 if (strcmp (name, ".liblist") == 0) 5568 { 5569 hdr->sh_type = SHT_MIPS_LIBLIST; 5570 hdr->sh_info = sec->size / sizeof (Elf32_Lib); 5571 /* The sh_link field is set in final_write_processing. */ 5572 } 5573 else if (strcmp (name, ".conflict") == 0) 5574 hdr->sh_type = SHT_MIPS_CONFLICT; 5575 else if (strncmp (name, ".gptab.", sizeof ".gptab." - 1) == 0) 5576 { 5577 hdr->sh_type = SHT_MIPS_GPTAB; 5578 hdr->sh_entsize = sizeof (Elf32_External_gptab); 5579 /* The sh_info field is set in final_write_processing. */ 5580 } 5581 else if (strcmp (name, ".ucode") == 0) 5582 hdr->sh_type = SHT_MIPS_UCODE; 5583 else if (strcmp (name, ".mdebug") == 0) 5584 { 5585 hdr->sh_type = SHT_MIPS_DEBUG; 5586 /* In a shared object on IRIX 5.3, the .mdebug section has an 5587 entsize of 0. FIXME: Does this matter? */ 5588 if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0) 5589 hdr->sh_entsize = 0; 5590 else 5591 hdr->sh_entsize = 1; 5592 } 5593 else if (strcmp (name, ".reginfo") == 0) 5594 { 5595 hdr->sh_type = SHT_MIPS_REGINFO; 5596 /* In a shared object on IRIX 5.3, the .reginfo section has an 5597 entsize of 0x18. FIXME: Does this matter? */ 5598 if (SGI_COMPAT (abfd)) 5599 { 5600 if ((abfd->flags & DYNAMIC) != 0) 5601 hdr->sh_entsize = sizeof (Elf32_External_RegInfo); 5602 else 5603 hdr->sh_entsize = 1; 5604 } 5605 else 5606 hdr->sh_entsize = sizeof (Elf32_External_RegInfo); 5607 } 5608 else if (SGI_COMPAT (abfd) 5609 && (strcmp (name, ".hash") == 0 5610 || strcmp (name, ".dynamic") == 0 5611 || strcmp (name, ".dynstr") == 0)) 5612 { 5613 if (SGI_COMPAT (abfd)) 5614 hdr->sh_entsize = 0; 5615 #if 0 5616 /* This isn't how the IRIX6 linker behaves. */ 5617 hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES; 5618 #endif 5619 } 5620 else if (strcmp (name, ".got") == 0 5621 || strcmp (name, ".srdata") == 0 5622 || strcmp (name, ".sdata") == 0 5623 || strcmp (name, ".sbss") == 0 5624 || strcmp (name, ".lit4") == 0 5625 || strcmp (name, ".lit8") == 0) 5626 hdr->sh_flags |= SHF_MIPS_GPREL; 5627 else if (strcmp (name, ".MIPS.interfaces") == 0) 5628 { 5629 hdr->sh_type = SHT_MIPS_IFACE; 5630 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 5631 } 5632 else if (strncmp (name, ".MIPS.content", strlen (".MIPS.content")) == 0) 5633 { 5634 hdr->sh_type = SHT_MIPS_CONTENT; 5635 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 5636 /* The sh_info field is set in final_write_processing. */ 5637 } 5638 else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name)) 5639 { 5640 hdr->sh_type = SHT_MIPS_OPTIONS; 5641 hdr->sh_entsize = 1; 5642 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 5643 } 5644 else if (strncmp (name, ".debug_", sizeof ".debug_" - 1) == 0) 5645 hdr->sh_type = SHT_MIPS_DWARF; 5646 else if (strcmp (name, ".MIPS.symlib") == 0) 5647 { 5648 hdr->sh_type = SHT_MIPS_SYMBOL_LIB; 5649 /* The sh_link and sh_info fields are set in 5650 final_write_processing. */ 5651 } 5652 else if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0 5653 || strncmp (name, ".MIPS.post_rel", 5654 sizeof ".MIPS.post_rel" - 1) == 0) 5655 { 5656 hdr->sh_type = SHT_MIPS_EVENTS; 5657 hdr->sh_flags |= SHF_MIPS_NOSTRIP; 5658 /* The sh_link field is set in final_write_processing. */ 5659 } 5660 else if (strcmp (name, ".msym") == 0) 5661 { 5662 hdr->sh_type = SHT_MIPS_MSYM; 5663 hdr->sh_flags |= SHF_ALLOC; 5664 hdr->sh_entsize = 8; 5665 } 5666 5667 /* In the unlikely event a special section is empty it has to lose its 5668 special meaning. This may happen e.g. when using `strip' with the 5669 "--only-keep-debug" option. */ 5670 if (sec->size > 0 && !(sec->flags & SEC_HAS_CONTENTS)) 5671 hdr->sh_type = sh_type; 5672 5673 /* The generic elf_fake_sections will set up REL_HDR using the default 5674 kind of relocations. We used to set up a second header for the 5675 non-default kind of relocations here, but only NewABI would use 5676 these, and the IRIX ld doesn't like resulting empty RELA sections. 5677 Thus we create those header only on demand now. */ 5678 5679 return TRUE; 5680 } 5681 5682 /* Given a BFD section, try to locate the corresponding ELF section 5683 index. This is used by both the 32-bit and the 64-bit ABI. 5684 Actually, it's not clear to me that the 64-bit ABI supports these, 5685 but for non-PIC objects we will certainly want support for at least 5686 the .scommon section. */ 5687 5688 bfd_boolean 5689 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED, 5690 asection *sec, int *retval) 5691 { 5692 if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0) 5693 { 5694 *retval = SHN_MIPS_SCOMMON; 5695 return TRUE; 5696 } 5697 if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0) 5698 { 5699 *retval = SHN_MIPS_ACOMMON; 5700 return TRUE; 5701 } 5702 return FALSE; 5703 } 5704 5705 /* Hook called by the linker routine which adds symbols from an object 5706 file. We must handle the special MIPS section numbers here. */ 5707 5708 bfd_boolean 5709 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, 5710 Elf_Internal_Sym *sym, const char **namep, 5711 flagword *flagsp ATTRIBUTE_UNUSED, 5712 asection **secp, bfd_vma *valp) 5713 { 5714 if (SGI_COMPAT (abfd) 5715 && (abfd->flags & DYNAMIC) != 0 5716 && strcmp (*namep, "_rld_new_interface") == 0) 5717 { 5718 /* Skip IRIX5 rld entry name. */ 5719 *namep = NULL; 5720 return TRUE; 5721 } 5722 5723 /* Shared objects may have a dynamic symbol '_gp_disp' defined as 5724 a SECTION *ABS*. This causes ld to think it can resolve _gp_disp 5725 by setting a DT_NEEDED for the shared object. Since _gp_disp is 5726 a magic symbol resolved by the linker, we ignore this bogus definition 5727 of _gp_disp. New ABI objects do not suffer from this problem so this 5728 is not done for them. */ 5729 if (!NEWABI_P(abfd) 5730 && (sym->st_shndx == SHN_ABS) 5731 && (strcmp (*namep, "_gp_disp") == 0)) 5732 { 5733 *namep = NULL; 5734 return TRUE; 5735 } 5736 5737 switch (sym->st_shndx) 5738 { 5739 case SHN_COMMON: 5740 /* Common symbols less than the GP size are automatically 5741 treated as SHN_MIPS_SCOMMON symbols. */ 5742 if (sym->st_size > elf_gp_size (abfd) 5743 || IRIX_COMPAT (abfd) == ict_irix6) 5744 break; 5745 /* Fall through. */ 5746 case SHN_MIPS_SCOMMON: 5747 *secp = bfd_make_section_old_way (abfd, ".scommon"); 5748 (*secp)->flags |= SEC_IS_COMMON; 5749 *valp = sym->st_size; 5750 break; 5751 5752 case SHN_MIPS_TEXT: 5753 /* This section is used in a shared object. */ 5754 if (elf_tdata (abfd)->elf_text_section == NULL) 5755 { 5756 asymbol *elf_text_symbol; 5757 asection *elf_text_section; 5758 bfd_size_type amt = sizeof (asection); 5759 5760 elf_text_section = bfd_zalloc (abfd, amt); 5761 if (elf_text_section == NULL) 5762 return FALSE; 5763 5764 amt = sizeof (asymbol); 5765 elf_text_symbol = bfd_zalloc (abfd, amt); 5766 if (elf_text_symbol == NULL) 5767 return FALSE; 5768 5769 /* Initialize the section. */ 5770 5771 elf_tdata (abfd)->elf_text_section = elf_text_section; 5772 elf_tdata (abfd)->elf_text_symbol = elf_text_symbol; 5773 5774 elf_text_section->symbol = elf_text_symbol; 5775 elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol; 5776 5777 elf_text_section->name = ".text"; 5778 elf_text_section->flags = SEC_NO_FLAGS; 5779 elf_text_section->output_section = NULL; 5780 elf_text_section->owner = abfd; 5781 elf_text_symbol->name = ".text"; 5782 elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC; 5783 elf_text_symbol->section = elf_text_section; 5784 } 5785 /* This code used to do *secp = bfd_und_section_ptr if 5786 info->shared. I don't know why, and that doesn't make sense, 5787 so I took it out. */ 5788 *secp = elf_tdata (abfd)->elf_text_section; 5789 break; 5790 5791 case SHN_MIPS_ACOMMON: 5792 /* Fall through. XXX Can we treat this as allocated data? */ 5793 case SHN_MIPS_DATA: 5794 /* This section is used in a shared object. */ 5795 if (elf_tdata (abfd)->elf_data_section == NULL) 5796 { 5797 asymbol *elf_data_symbol; 5798 asection *elf_data_section; 5799 bfd_size_type amt = sizeof (asection); 5800 5801 elf_data_section = bfd_zalloc (abfd, amt); 5802 if (elf_data_section == NULL) 5803 return FALSE; 5804 5805 amt = sizeof (asymbol); 5806 elf_data_symbol = bfd_zalloc (abfd, amt); 5807 if (elf_data_symbol == NULL) 5808 return FALSE; 5809 5810 /* Initialize the section. */ 5811 5812 elf_tdata (abfd)->elf_data_section = elf_data_section; 5813 elf_tdata (abfd)->elf_data_symbol = elf_data_symbol; 5814 5815 elf_data_section->symbol = elf_data_symbol; 5816 elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol; 5817 5818 elf_data_section->name = ".data"; 5819 elf_data_section->flags = SEC_NO_FLAGS; 5820 elf_data_section->output_section = NULL; 5821 elf_data_section->owner = abfd; 5822 elf_data_symbol->name = ".data"; 5823 elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC; 5824 elf_data_symbol->section = elf_data_section; 5825 } 5826 /* This code used to do *secp = bfd_und_section_ptr if 5827 info->shared. I don't know why, and that doesn't make sense, 5828 so I took it out. */ 5829 *secp = elf_tdata (abfd)->elf_data_section; 5830 break; 5831 5832 case SHN_MIPS_SUNDEFINED: 5833 *secp = bfd_und_section_ptr; 5834 break; 5835 } 5836 5837 if (SGI_COMPAT (abfd) 5838 && ! info->shared 5839 && info->hash->creator == abfd->xvec 5840 && strcmp (*namep, "__rld_obj_head") == 0) 5841 { 5842 struct elf_link_hash_entry *h; 5843 struct bfd_link_hash_entry *bh; 5844 5845 /* Mark __rld_obj_head as dynamic. */ 5846 bh = NULL; 5847 if (! (_bfd_generic_link_add_one_symbol 5848 (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE, 5849 get_elf_backend_data (abfd)->collect, &bh))) 5850 return FALSE; 5851 5852 h = (struct elf_link_hash_entry *) bh; 5853 h->non_elf = 0; 5854 h->def_regular = 1; 5855 h->type = STT_OBJECT; 5856 5857 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 5858 return FALSE; 5859 5860 mips_elf_hash_table (info)->use_rld_obj_head = TRUE; 5861 } 5862 5863 /* If this is a mips16 text symbol, add 1 to the value to make it 5864 odd. This will cause something like .word SYM to come up with 5865 the right value when it is loaded into the PC. */ 5866 if (sym->st_other == STO_MIPS16) 5867 ++*valp; 5868 5869 return TRUE; 5870 } 5871 5872 /* This hook function is called before the linker writes out a global 5873 symbol. We mark symbols as small common if appropriate. This is 5874 also where we undo the increment of the value for a mips16 symbol. */ 5875 5876 bfd_boolean 5877 _bfd_mips_elf_link_output_symbol_hook 5878 (struct bfd_link_info *info ATTRIBUTE_UNUSED, 5879 const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym, 5880 asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED) 5881 { 5882 /* If we see a common symbol, which implies a relocatable link, then 5883 if a symbol was small common in an input file, mark it as small 5884 common in the output file. */ 5885 if (sym->st_shndx == SHN_COMMON 5886 && strcmp (input_sec->name, ".scommon") == 0) 5887 sym->st_shndx = SHN_MIPS_SCOMMON; 5888 5889 if (sym->st_other == STO_MIPS16) 5890 sym->st_value &= ~1; 5891 5892 return TRUE; 5893 } 5894 5895 /* Functions for the dynamic linker. */ 5896 5897 /* Create dynamic sections when linking against a dynamic object. */ 5898 5899 bfd_boolean 5900 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) 5901 { 5902 struct elf_link_hash_entry *h; 5903 struct bfd_link_hash_entry *bh; 5904 flagword flags; 5905 register asection *s; 5906 const char * const *namep; 5907 struct mips_elf_link_hash_table *htab; 5908 5909 htab = mips_elf_hash_table (info); 5910 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY 5911 | SEC_LINKER_CREATED | SEC_READONLY); 5912 5913 /* The psABI requires a read-only .dynamic section, but the VxWorks 5914 EABI doesn't. */ 5915 if (!htab->is_vxworks) 5916 { 5917 s = bfd_get_section_by_name (abfd, ".dynamic"); 5918 if (s != NULL) 5919 { 5920 if (! bfd_set_section_flags (abfd, s, flags)) 5921 return FALSE; 5922 } 5923 } 5924 5925 /* We need to create .got section. */ 5926 if (! mips_elf_create_got_section (abfd, info, FALSE)) 5927 return FALSE; 5928 5929 if (! mips_elf_rel_dyn_section (info, TRUE)) 5930 return FALSE; 5931 5932 /* Create .stub section. */ 5933 if (bfd_get_section_by_name (abfd, 5934 MIPS_ELF_STUB_SECTION_NAME (abfd)) == NULL) 5935 { 5936 s = bfd_make_section_with_flags (abfd, 5937 MIPS_ELF_STUB_SECTION_NAME (abfd), 5938 flags | SEC_CODE); 5939 if (s == NULL 5940 || ! bfd_set_section_alignment (abfd, s, 5941 MIPS_ELF_LOG_FILE_ALIGN (abfd))) 5942 return FALSE; 5943 } 5944 5945 if ((IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none) 5946 && !info->shared 5947 && bfd_get_section_by_name (abfd, ".rld_map") == NULL) 5948 { 5949 s = bfd_make_section_with_flags (abfd, ".rld_map", 5950 flags &~ (flagword) SEC_READONLY); 5951 if (s == NULL 5952 || ! bfd_set_section_alignment (abfd, s, 5953 MIPS_ELF_LOG_FILE_ALIGN (abfd))) 5954 return FALSE; 5955 } 5956 5957 /* On IRIX5, we adjust add some additional symbols and change the 5958 alignments of several sections. There is no ABI documentation 5959 indicating that this is necessary on IRIX6, nor any evidence that 5960 the linker takes such action. */ 5961 if (IRIX_COMPAT (abfd) == ict_irix5) 5962 { 5963 for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++) 5964 { 5965 bh = NULL; 5966 if (! (_bfd_generic_link_add_one_symbol 5967 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0, 5968 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) 5969 return FALSE; 5970 5971 h = (struct elf_link_hash_entry *) bh; 5972 h->non_elf = 0; 5973 h->def_regular = 1; 5974 h->type = STT_SECTION; 5975 5976 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 5977 return FALSE; 5978 } 5979 5980 /* We need to create a .compact_rel section. */ 5981 if (SGI_COMPAT (abfd)) 5982 { 5983 if (!mips_elf_create_compact_rel_section (abfd, info)) 5984 return FALSE; 5985 } 5986 5987 /* Change alignments of some sections. */ 5988 s = bfd_get_section_by_name (abfd, ".hash"); 5989 if (s != NULL) 5990 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 5991 s = bfd_get_section_by_name (abfd, ".dynsym"); 5992 if (s != NULL) 5993 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 5994 s = bfd_get_section_by_name (abfd, ".dynstr"); 5995 if (s != NULL) 5996 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 5997 s = bfd_get_section_by_name (abfd, ".reginfo"); 5998 if (s != NULL) 5999 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 6000 s = bfd_get_section_by_name (abfd, ".dynamic"); 6001 if (s != NULL) 6002 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); 6003 } 6004 6005 if (!info->shared) 6006 { 6007 const char *name; 6008 6009 name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING"; 6010 bh = NULL; 6011 if (!(_bfd_generic_link_add_one_symbol 6012 (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0, 6013 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) 6014 return FALSE; 6015 6016 h = (struct elf_link_hash_entry *) bh; 6017 h->non_elf = 0; 6018 h->def_regular = 1; 6019 h->type = STT_SECTION; 6020 6021 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 6022 return FALSE; 6023 6024 if (! mips_elf_hash_table (info)->use_rld_obj_head) 6025 { 6026 /* __rld_map is a four byte word located in the .data section 6027 and is filled in by the rtld to contain a pointer to 6028 the _r_debug structure. Its symbol value will be set in 6029 _bfd_mips_elf_finish_dynamic_symbol. */ 6030 s = bfd_get_section_by_name (abfd, ".rld_map"); 6031 BFD_ASSERT (s != NULL); 6032 6033 name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP"; 6034 bh = NULL; 6035 if (!(_bfd_generic_link_add_one_symbol 6036 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE, 6037 get_elf_backend_data (abfd)->collect, &bh))) 6038 return FALSE; 6039 6040 h = (struct elf_link_hash_entry *) bh; 6041 h->non_elf = 0; 6042 h->def_regular = 1; 6043 h->type = STT_OBJECT; 6044 6045 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 6046 return FALSE; 6047 } 6048 } 6049 6050 if (htab->is_vxworks) 6051 { 6052 /* Create the .plt, .rela.plt, .dynbss and .rela.bss sections. 6053 Also create the _PROCEDURE_LINKAGE_TABLE symbol. */ 6054 if (!_bfd_elf_create_dynamic_sections (abfd, info)) 6055 return FALSE; 6056 6057 /* Cache the sections created above. */ 6058 htab->sdynbss = bfd_get_section_by_name (abfd, ".dynbss"); 6059 htab->srelbss = bfd_get_section_by_name (abfd, ".rela.bss"); 6060 htab->srelplt = bfd_get_section_by_name (abfd, ".rela.plt"); 6061 htab->splt = bfd_get_section_by_name (abfd, ".plt"); 6062 if (!htab->sdynbss 6063 || (!htab->srelbss && !info->shared) 6064 || !htab->srelplt 6065 || !htab->splt) 6066 abort (); 6067 6068 /* Do the usual VxWorks handling. */ 6069 if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2)) 6070 return FALSE; 6071 6072 /* Work out the PLT sizes. */ 6073 if (info->shared) 6074 { 6075 htab->plt_header_size 6076 = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry); 6077 htab->plt_entry_size 6078 = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry); 6079 } 6080 else 6081 { 6082 htab->plt_header_size 6083 = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry); 6084 htab->plt_entry_size 6085 = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry); 6086 } 6087 } 6088 6089 return TRUE; 6090 } 6091 6092 /* Look through the relocs for a section during the first phase, and 6093 allocate space in the global offset table. */ 6094 6095 bfd_boolean 6096 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, 6097 asection *sec, const Elf_Internal_Rela *relocs) 6098 { 6099 const char *name; 6100 bfd *dynobj; 6101 Elf_Internal_Shdr *symtab_hdr; 6102 struct elf_link_hash_entry **sym_hashes; 6103 struct mips_got_info *g; 6104 size_t extsymoff; 6105 const Elf_Internal_Rela *rel; 6106 const Elf_Internal_Rela *rel_end; 6107 asection *sgot; 6108 asection *sreloc; 6109 const struct elf_backend_data *bed; 6110 struct mips_elf_link_hash_table *htab; 6111 6112 if (info->relocatable) 6113 return TRUE; 6114 6115 htab = mips_elf_hash_table (info); 6116 dynobj = elf_hash_table (info)->dynobj; 6117 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 6118 sym_hashes = elf_sym_hashes (abfd); 6119 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info; 6120 6121 /* Check for the mips16 stub sections. */ 6122 6123 name = bfd_get_section_name (abfd, sec); 6124 if (strncmp (name, FN_STUB, sizeof FN_STUB - 1) == 0) 6125 { 6126 unsigned long r_symndx; 6127 6128 /* Look at the relocation information to figure out which symbol 6129 this is for. */ 6130 6131 r_symndx = ELF_R_SYM (abfd, relocs->r_info); 6132 6133 if (r_symndx < extsymoff 6134 || sym_hashes[r_symndx - extsymoff] == NULL) 6135 { 6136 asection *o; 6137 6138 /* This stub is for a local symbol. This stub will only be 6139 needed if there is some relocation in this BFD, other 6140 than a 16 bit function call, which refers to this symbol. */ 6141 for (o = abfd->sections; o != NULL; o = o->next) 6142 { 6143 Elf_Internal_Rela *sec_relocs; 6144 const Elf_Internal_Rela *r, *rend; 6145 6146 /* We can ignore stub sections when looking for relocs. */ 6147 if ((o->flags & SEC_RELOC) == 0 6148 || o->reloc_count == 0 6149 || strncmp (bfd_get_section_name (abfd, o), FN_STUB, 6150 sizeof FN_STUB - 1) == 0 6151 || strncmp (bfd_get_section_name (abfd, o), CALL_STUB, 6152 sizeof CALL_STUB - 1) == 0 6153 || strncmp (bfd_get_section_name (abfd, o), CALL_FP_STUB, 6154 sizeof CALL_FP_STUB - 1) == 0) 6155 continue; 6156 6157 sec_relocs 6158 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, 6159 info->keep_memory); 6160 if (sec_relocs == NULL) 6161 return FALSE; 6162 6163 rend = sec_relocs + o->reloc_count; 6164 for (r = sec_relocs; r < rend; r++) 6165 if (ELF_R_SYM (abfd, r->r_info) == r_symndx 6166 && ELF_R_TYPE (abfd, r->r_info) != R_MIPS16_26) 6167 break; 6168 6169 if (elf_section_data (o)->relocs != sec_relocs) 6170 free (sec_relocs); 6171 6172 if (r < rend) 6173 break; 6174 } 6175 6176 if (o == NULL) 6177 { 6178 /* There is no non-call reloc for this stub, so we do 6179 not need it. Since this function is called before 6180 the linker maps input sections to output sections, we 6181 can easily discard it by setting the SEC_EXCLUDE 6182 flag. */ 6183 sec->flags |= SEC_EXCLUDE; 6184 return TRUE; 6185 } 6186 6187 /* Record this stub in an array of local symbol stubs for 6188 this BFD. */ 6189 if (elf_tdata (abfd)->local_stubs == NULL) 6190 { 6191 unsigned long symcount; 6192 asection **n; 6193 bfd_size_type amt; 6194 6195 if (elf_bad_symtab (abfd)) 6196 symcount = NUM_SHDR_ENTRIES (symtab_hdr); 6197 else 6198 symcount = symtab_hdr->sh_info; 6199 amt = symcount * sizeof (asection *); 6200 n = bfd_zalloc (abfd, amt); 6201 if (n == NULL) 6202 return FALSE; 6203 elf_tdata (abfd)->local_stubs = n; 6204 } 6205 6206 elf_tdata (abfd)->local_stubs[r_symndx] = sec; 6207 6208 /* We don't need to set mips16_stubs_seen in this case. 6209 That flag is used to see whether we need to look through 6210 the global symbol table for stubs. We don't need to set 6211 it here, because we just have a local stub. */ 6212 } 6213 else 6214 { 6215 struct mips_elf_link_hash_entry *h; 6216 6217 h = ((struct mips_elf_link_hash_entry *) 6218 sym_hashes[r_symndx - extsymoff]); 6219 6220 while (h->root.root.type == bfd_link_hash_indirect 6221 || h->root.root.type == bfd_link_hash_warning) 6222 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 6223 6224 /* H is the symbol this stub is for. */ 6225 6226 h->fn_stub = sec; 6227 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE; 6228 } 6229 } 6230 else if (strncmp (name, CALL_STUB, sizeof CALL_STUB - 1) == 0 6231 || strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0) 6232 { 6233 unsigned long r_symndx; 6234 struct mips_elf_link_hash_entry *h; 6235 asection **loc; 6236 6237 /* Look at the relocation information to figure out which symbol 6238 this is for. */ 6239 6240 r_symndx = ELF_R_SYM (abfd, relocs->r_info); 6241 6242 if (r_symndx < extsymoff 6243 || sym_hashes[r_symndx - extsymoff] == NULL) 6244 { 6245 /* This stub was actually built for a static symbol defined 6246 in the same file. We assume that all static symbols in 6247 mips16 code are themselves mips16, so we can simply 6248 discard this stub. Since this function is called before 6249 the linker maps input sections to output sections, we can 6250 easily discard it by setting the SEC_EXCLUDE flag. */ 6251 sec->flags |= SEC_EXCLUDE; 6252 return TRUE; 6253 } 6254 6255 h = ((struct mips_elf_link_hash_entry *) 6256 sym_hashes[r_symndx - extsymoff]); 6257 6258 /* H is the symbol this stub is for. */ 6259 6260 if (strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0) 6261 loc = &h->call_fp_stub; 6262 else 6263 loc = &h->call_stub; 6264 6265 /* If we already have an appropriate stub for this function, we 6266 don't need another one, so we can discard this one. Since 6267 this function is called before the linker maps input sections 6268 to output sections, we can easily discard it by setting the 6269 SEC_EXCLUDE flag. We can also discard this section if we 6270 happen to already know that this is a mips16 function; it is 6271 not necessary to check this here, as it is checked later, but 6272 it is slightly faster to check now. */ 6273 if (*loc != NULL || h->root.other == STO_MIPS16) 6274 { 6275 sec->flags |= SEC_EXCLUDE; 6276 return TRUE; 6277 } 6278 6279 *loc = sec; 6280 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE; 6281 } 6282 6283 if (dynobj == NULL) 6284 { 6285 sgot = NULL; 6286 g = NULL; 6287 } 6288 else 6289 { 6290 sgot = mips_elf_got_section (dynobj, FALSE); 6291 if (sgot == NULL) 6292 g = NULL; 6293 else 6294 { 6295 BFD_ASSERT (mips_elf_section_data (sgot) != NULL); 6296 g = mips_elf_section_data (sgot)->u.got_info; 6297 BFD_ASSERT (g != NULL); 6298 } 6299 } 6300 6301 sreloc = NULL; 6302 bed = get_elf_backend_data (abfd); 6303 rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel; 6304 for (rel = relocs; rel < rel_end; ++rel) 6305 { 6306 unsigned long r_symndx; 6307 unsigned int r_type; 6308 struct elf_link_hash_entry *h; 6309 6310 r_symndx = ELF_R_SYM (abfd, rel->r_info); 6311 r_type = ELF_R_TYPE (abfd, rel->r_info); 6312 6313 if (r_symndx < extsymoff) 6314 h = NULL; 6315 else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr)) 6316 { 6317 (*_bfd_error_handler) 6318 (_("%B: Malformed reloc detected for section %s"), 6319 abfd, name); 6320 bfd_set_error (bfd_error_bad_value); 6321 return FALSE; 6322 } 6323 else 6324 { 6325 h = sym_hashes[r_symndx - extsymoff]; 6326 6327 /* This may be an indirect symbol created because of a version. */ 6328 if (h != NULL) 6329 { 6330 while (h->root.type == bfd_link_hash_indirect) 6331 h = (struct elf_link_hash_entry *) h->root.u.i.link; 6332 } 6333 } 6334 6335 /* Some relocs require a global offset table. */ 6336 if (dynobj == NULL || sgot == NULL) 6337 { 6338 switch (r_type) 6339 { 6340 case R_MIPS_GOT16: 6341 case R_MIPS_CALL16: 6342 case R_MIPS_CALL_HI16: 6343 case R_MIPS_CALL_LO16: 6344 case R_MIPS_GOT_HI16: 6345 case R_MIPS_GOT_LO16: 6346 case R_MIPS_GOT_PAGE: 6347 case R_MIPS_GOT_OFST: 6348 case R_MIPS_GOT_DISP: 6349 case R_MIPS_TLS_GOTTPREL: 6350 case R_MIPS_TLS_GD: 6351 case R_MIPS_TLS_LDM: 6352 if (dynobj == NULL) 6353 elf_hash_table (info)->dynobj = dynobj = abfd; 6354 if (! mips_elf_create_got_section (dynobj, info, FALSE)) 6355 return FALSE; 6356 g = mips_elf_got_info (dynobj, &sgot); 6357 if (htab->is_vxworks && !info->shared) 6358 { 6359 (*_bfd_error_handler) 6360 (_("%B: GOT reloc at 0x%lx not expected in executables"), 6361 abfd, (unsigned long) rel->r_offset); 6362 bfd_set_error (bfd_error_bad_value); 6363 return FALSE; 6364 } 6365 break; 6366 6367 case R_MIPS_32: 6368 case R_MIPS_REL32: 6369 case R_MIPS_64: 6370 /* In VxWorks executables, references to external symbols 6371 are handled using copy relocs or PLT stubs, so there's 6372 no need to add a dynamic relocation here. */ 6373 if (dynobj == NULL 6374 && (info->shared || (h != NULL && !htab->is_vxworks)) 6375 && (sec->flags & SEC_ALLOC) != 0) 6376 elf_hash_table (info)->dynobj = dynobj = abfd; 6377 break; 6378 6379 default: 6380 break; 6381 } 6382 } 6383 6384 if (h) 6385 { 6386 ((struct mips_elf_link_hash_entry *) h)->is_relocation_target = TRUE; 6387 6388 /* Relocations against the special VxWorks __GOTT_BASE__ and 6389 __GOTT_INDEX__ symbols must be left to the loader. Allocate 6390 room for them in .rela.dyn. */ 6391 if (is_gott_symbol (info, h)) 6392 { 6393 if (sreloc == NULL) 6394 { 6395 sreloc = mips_elf_rel_dyn_section (info, TRUE); 6396 if (sreloc == NULL) 6397 return FALSE; 6398 } 6399 mips_elf_allocate_dynamic_relocations (dynobj, info, 1); 6400 } 6401 } 6402 else if (r_type == R_MIPS_CALL_LO16 6403 || r_type == R_MIPS_GOT_LO16 6404 || r_type == R_MIPS_GOT_DISP 6405 || (r_type == R_MIPS_GOT16 && htab->is_vxworks)) 6406 { 6407 /* We may need a local GOT entry for this relocation. We 6408 don't count R_MIPS_GOT_PAGE because we can estimate the 6409 maximum number of pages needed by looking at the size of 6410 the segment. Similar comments apply to R_MIPS_GOT16 and 6411 R_MIPS_CALL16, except on VxWorks, where GOT relocations 6412 always evaluate to "G". We don't count R_MIPS_GOT_HI16, or 6413 R_MIPS_CALL_HI16 because these are always followed by an 6414 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */ 6415 if (! mips_elf_record_local_got_symbol (abfd, r_symndx, 6416 rel->r_addend, g, 0)) 6417 return FALSE; 6418 } 6419 6420 switch (r_type) 6421 { 6422 case R_MIPS_CALL16: 6423 if (h == NULL) 6424 { 6425 (*_bfd_error_handler) 6426 (_("%B: CALL16 reloc at 0x%lx not against global symbol"), 6427 abfd, (unsigned long) rel->r_offset); 6428 bfd_set_error (bfd_error_bad_value); 6429 return FALSE; 6430 } 6431 /* Fall through. */ 6432 6433 case R_MIPS_CALL_HI16: 6434 case R_MIPS_CALL_LO16: 6435 if (h != NULL) 6436 { 6437 /* VxWorks call relocations point the function's .got.plt 6438 entry, which will be allocated by adjust_dynamic_symbol. 6439 Otherwise, this symbol requires a global GOT entry. */ 6440 if (!htab->is_vxworks 6441 && !mips_elf_record_global_got_symbol (h, abfd, info, g, 0)) 6442 return FALSE; 6443 6444 /* We need a stub, not a plt entry for the undefined 6445 function. But we record it as if it needs plt. See 6446 _bfd_elf_adjust_dynamic_symbol. */ 6447 h->needs_plt = 1; 6448 h->type = STT_FUNC; 6449 } 6450 break; 6451 6452 case R_MIPS_GOT_PAGE: 6453 /* If this is a global, overridable symbol, GOT_PAGE will 6454 decay to GOT_DISP, so we'll need a GOT entry for it. */ 6455 if (h == NULL) 6456 break; 6457 else 6458 { 6459 struct mips_elf_link_hash_entry *hmips = 6460 (struct mips_elf_link_hash_entry *) h; 6461 6462 while (hmips->root.root.type == bfd_link_hash_indirect 6463 || hmips->root.root.type == bfd_link_hash_warning) 6464 hmips = (struct mips_elf_link_hash_entry *) 6465 hmips->root.root.u.i.link; 6466 6467 if (hmips->root.def_regular 6468 && ! (info->shared && ! info->symbolic 6469 && ! hmips->root.forced_local)) 6470 break; 6471 } 6472 /* Fall through. */ 6473 6474 case R_MIPS_GOT16: 6475 case R_MIPS_GOT_HI16: 6476 case R_MIPS_GOT_LO16: 6477 case R_MIPS_GOT_DISP: 6478 if (h && ! mips_elf_record_global_got_symbol (h, abfd, info, g, 0)) 6479 return FALSE; 6480 break; 6481 6482 case R_MIPS_TLS_GOTTPREL: 6483 if (info->shared) 6484 info->flags |= DF_STATIC_TLS; 6485 /* Fall through */ 6486 6487 case R_MIPS_TLS_LDM: 6488 if (r_type == R_MIPS_TLS_LDM) 6489 { 6490 r_symndx = 0; 6491 h = NULL; 6492 } 6493 /* Fall through */ 6494 6495 case R_MIPS_TLS_GD: 6496 /* This symbol requires a global offset table entry, or two 6497 for TLS GD relocations. */ 6498 { 6499 unsigned char flag = (r_type == R_MIPS_TLS_GD 6500 ? GOT_TLS_GD 6501 : r_type == R_MIPS_TLS_LDM 6502 ? GOT_TLS_LDM 6503 : GOT_TLS_IE); 6504 if (h != NULL) 6505 { 6506 struct mips_elf_link_hash_entry *hmips = 6507 (struct mips_elf_link_hash_entry *) h; 6508 hmips->tls_type |= flag; 6509 6510 if (h && ! mips_elf_record_global_got_symbol (h, abfd, info, g, flag)) 6511 return FALSE; 6512 } 6513 else 6514 { 6515 BFD_ASSERT (flag == GOT_TLS_LDM || r_symndx != 0); 6516 6517 if (! mips_elf_record_local_got_symbol (abfd, r_symndx, 6518 rel->r_addend, g, flag)) 6519 return FALSE; 6520 } 6521 } 6522 break; 6523 6524 case R_MIPS_32: 6525 case R_MIPS_REL32: 6526 case R_MIPS_64: 6527 /* In VxWorks executables, references to external symbols 6528 are handled using copy relocs or PLT stubs, so there's 6529 no need to add a .rela.dyn entry for this relocation. */ 6530 if ((info->shared || (h != NULL && !htab->is_vxworks)) 6531 && (sec->flags & SEC_ALLOC) != 0) 6532 { 6533 if (sreloc == NULL) 6534 { 6535 sreloc = mips_elf_rel_dyn_section (info, TRUE); 6536 if (sreloc == NULL) 6537 return FALSE; 6538 } 6539 if (info->shared) 6540 { 6541 /* When creating a shared object, we must copy these 6542 reloc types into the output file as R_MIPS_REL32 6543 relocs. Make room for this reloc in .rel(a).dyn. */ 6544 mips_elf_allocate_dynamic_relocations (dynobj, info, 1); 6545 if (MIPS_ELF_READONLY_SECTION (sec)) 6546 /* We tell the dynamic linker that there are 6547 relocations against the text segment. */ 6548 info->flags |= DF_TEXTREL; 6549 } 6550 else 6551 { 6552 struct mips_elf_link_hash_entry *hmips; 6553 6554 /* We only need to copy this reloc if the symbol is 6555 defined in a dynamic object. */ 6556 hmips = (struct mips_elf_link_hash_entry *) h; 6557 ++hmips->possibly_dynamic_relocs; 6558 if (MIPS_ELF_READONLY_SECTION (sec)) 6559 /* We need it to tell the dynamic linker if there 6560 are relocations against the text segment. */ 6561 hmips->readonly_reloc = TRUE; 6562 } 6563 6564 /* Even though we don't directly need a GOT entry for 6565 this symbol, a symbol must have a dynamic symbol 6566 table index greater that DT_MIPS_GOTSYM if there are 6567 dynamic relocations against it. This does not apply 6568 to VxWorks, which does not have the usual coupling 6569 between global GOT entries and .dynsym entries. */ 6570 if (h != NULL && !htab->is_vxworks) 6571 { 6572 if (dynobj == NULL) 6573 elf_hash_table (info)->dynobj = dynobj = abfd; 6574 if (! mips_elf_create_got_section (dynobj, info, TRUE)) 6575 return FALSE; 6576 g = mips_elf_got_info (dynobj, &sgot); 6577 if (! mips_elf_record_global_got_symbol (h, abfd, info, g, 0)) 6578 return FALSE; 6579 } 6580 } 6581 6582 if (SGI_COMPAT (abfd)) 6583 mips_elf_hash_table (info)->compact_rel_size += 6584 sizeof (Elf32_External_crinfo); 6585 break; 6586 6587 case R_MIPS_PC16: 6588 if (h) 6589 ((struct mips_elf_link_hash_entry *) h)->is_branch_target = TRUE; 6590 break; 6591 6592 case R_MIPS_26: 6593 if (h) 6594 ((struct mips_elf_link_hash_entry *) h)->is_branch_target = TRUE; 6595 /* Fall through. */ 6596 6597 case R_MIPS_GPREL16: 6598 case R_MIPS_LITERAL: 6599 case R_MIPS_GPREL32: 6600 if (SGI_COMPAT (abfd)) 6601 mips_elf_hash_table (info)->compact_rel_size += 6602 sizeof (Elf32_External_crinfo); 6603 break; 6604 6605 /* This relocation describes the C++ object vtable hierarchy. 6606 Reconstruct it for later use during GC. */ 6607 case R_MIPS_GNU_VTINHERIT: 6608 if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) 6609 return FALSE; 6610 break; 6611 6612 /* This relocation describes which C++ vtable entries are actually 6613 used. Record for later use during GC. */ 6614 case R_MIPS_GNU_VTENTRY: 6615 if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) 6616 return FALSE; 6617 break; 6618 6619 default: 6620 break; 6621 } 6622 6623 /* We must not create a stub for a symbol that has relocations 6624 related to taking the function's address. This doesn't apply to 6625 VxWorks, where CALL relocs refer to a .got.plt entry instead of 6626 a normal .got entry. */ 6627 if (!htab->is_vxworks && h != NULL) 6628 switch (r_type) 6629 { 6630 default: 6631 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE; 6632 break; 6633 case R_MIPS_CALL16: 6634 case R_MIPS_CALL_HI16: 6635 case R_MIPS_CALL_LO16: 6636 case R_MIPS_JALR: 6637 break; 6638 } 6639 6640 /* If this reloc is not a 16 bit call, and it has a global 6641 symbol, then we will need the fn_stub if there is one. 6642 References from a stub section do not count. */ 6643 if (h != NULL 6644 && r_type != R_MIPS16_26 6645 && strncmp (bfd_get_section_name (abfd, sec), FN_STUB, 6646 sizeof FN_STUB - 1) != 0 6647 && strncmp (bfd_get_section_name (abfd, sec), CALL_STUB, 6648 sizeof CALL_STUB - 1) != 0 6649 && strncmp (bfd_get_section_name (abfd, sec), CALL_FP_STUB, 6650 sizeof CALL_FP_STUB - 1) != 0) 6651 { 6652 struct mips_elf_link_hash_entry *mh; 6653 6654 mh = (struct mips_elf_link_hash_entry *) h; 6655 mh->need_fn_stub = TRUE; 6656 } 6657 } 6658 6659 return TRUE; 6660 } 6661 6662 bfd_boolean 6663 _bfd_mips_relax_section (bfd *abfd, asection *sec, 6664 struct bfd_link_info *link_info, 6665 bfd_boolean *again) 6666 { 6667 Elf_Internal_Rela *internal_relocs; 6668 Elf_Internal_Rela *irel, *irelend; 6669 Elf_Internal_Shdr *symtab_hdr; 6670 bfd_byte *contents = NULL; 6671 size_t extsymoff; 6672 bfd_boolean changed_contents = FALSE; 6673 bfd_vma sec_start = sec->output_section->vma + sec->output_offset; 6674 Elf_Internal_Sym *isymbuf = NULL; 6675 6676 /* We are not currently changing any sizes, so only one pass. */ 6677 *again = FALSE; 6678 6679 if (link_info->relocatable) 6680 return TRUE; 6681 6682 internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL, 6683 link_info->keep_memory); 6684 if (internal_relocs == NULL) 6685 return TRUE; 6686 6687 irelend = internal_relocs + sec->reloc_count 6688 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel; 6689 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 6690 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info; 6691 6692 for (irel = internal_relocs; irel < irelend; irel++) 6693 { 6694 bfd_vma symval; 6695 bfd_signed_vma sym_offset; 6696 unsigned int r_type; 6697 unsigned long r_symndx; 6698 asection *sym_sec; 6699 unsigned long instruction; 6700 6701 /* Turn jalr into bgezal, and jr into beq, if they're marked 6702 with a JALR relocation, that indicate where they jump to. 6703 This saves some pipeline bubbles. */ 6704 r_type = ELF_R_TYPE (abfd, irel->r_info); 6705 if (r_type != R_MIPS_JALR) 6706 continue; 6707 6708 r_symndx = ELF_R_SYM (abfd, irel->r_info); 6709 /* Compute the address of the jump target. */ 6710 if (r_symndx >= extsymoff) 6711 { 6712 struct mips_elf_link_hash_entry *h 6713 = ((struct mips_elf_link_hash_entry *) 6714 elf_sym_hashes (abfd) [r_symndx - extsymoff]); 6715 6716 while (h->root.root.type == bfd_link_hash_indirect 6717 || h->root.root.type == bfd_link_hash_warning) 6718 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; 6719 6720 /* If a symbol is undefined, or if it may be overridden, 6721 skip it. */ 6722 if (! ((h->root.root.type == bfd_link_hash_defined 6723 || h->root.root.type == bfd_link_hash_defweak) 6724 && h->root.root.u.def.section) 6725 || (link_info->shared && ! link_info->symbolic 6726 && !h->root.forced_local)) 6727 continue; 6728 6729 sym_sec = h->root.root.u.def.section; 6730 if (sym_sec->output_section) 6731 symval = (h->root.root.u.def.value 6732 + sym_sec->output_section->vma 6733 + sym_sec->output_offset); 6734 else 6735 symval = h->root.root.u.def.value; 6736 } 6737 else 6738 { 6739 Elf_Internal_Sym *isym; 6740 6741 /* Read this BFD's symbols if we haven't done so already. */ 6742 if (isymbuf == NULL && symtab_hdr->sh_info != 0) 6743 { 6744 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; 6745 if (isymbuf == NULL) 6746 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr, 6747 symtab_hdr->sh_info, 0, 6748 NULL, NULL, NULL); 6749 if (isymbuf == NULL) 6750 goto relax_return; 6751 } 6752 6753 isym = isymbuf + r_symndx; 6754 if (isym->st_shndx == SHN_UNDEF) 6755 continue; 6756 else if (isym->st_shndx == SHN_ABS) 6757 sym_sec = bfd_abs_section_ptr; 6758 else if (isym->st_shndx == SHN_COMMON) 6759 sym_sec = bfd_com_section_ptr; 6760 else 6761 sym_sec 6762 = bfd_section_from_elf_index (abfd, isym->st_shndx); 6763 symval = isym->st_value 6764 + sym_sec->output_section->vma 6765 + sym_sec->output_offset; 6766 } 6767 6768 /* Compute branch offset, from delay slot of the jump to the 6769 branch target. */ 6770 sym_offset = (symval + irel->r_addend) 6771 - (sec_start + irel->r_offset + 4); 6772 6773 /* Branch offset must be properly aligned. */ 6774 if ((sym_offset & 3) != 0) 6775 continue; 6776 6777 sym_offset >>= 2; 6778 6779 /* Check that it's in range. */ 6780 if (sym_offset < -0x8000 || sym_offset >= 0x8000) 6781 continue; 6782 6783 /* Get the section contents if we haven't done so already. */ 6784 if (contents == NULL) 6785 { 6786 /* Get cached copy if it exists. */ 6787 if (elf_section_data (sec)->this_hdr.contents != NULL) 6788 contents = elf_section_data (sec)->this_hdr.contents; 6789 else 6790 { 6791 if (!bfd_malloc_and_get_section (abfd, sec, &contents)) 6792 goto relax_return; 6793 } 6794 } 6795 6796 instruction = bfd_get_32 (abfd, contents + irel->r_offset); 6797 6798 /* If it was jalr <reg>, turn it into bgezal $zero, <target>. */ 6799 if ((instruction & 0xfc1fffff) == 0x0000f809) 6800 instruction = 0x04110000; 6801 /* If it was jr <reg>, turn it into b <target>. */ 6802 else if ((instruction & 0xfc1fffff) == 0x00000008) 6803 instruction = 0x10000000; 6804 else 6805 continue; 6806 6807 instruction |= (sym_offset & 0xffff); 6808 bfd_put_32 (abfd, instruction, contents + irel->r_offset); 6809 changed_contents = TRUE; 6810 } 6811 6812 if (contents != NULL 6813 && elf_section_data (sec)->this_hdr.contents != contents) 6814 { 6815 if (!changed_contents && !link_info->keep_memory) 6816 free (contents); 6817 else 6818 { 6819 /* Cache the section contents for elf_link_input_bfd. */ 6820 elf_section_data (sec)->this_hdr.contents = contents; 6821 } 6822 } 6823 return TRUE; 6824 6825 relax_return: 6826 if (contents != NULL 6827 && elf_section_data (sec)->this_hdr.contents != contents) 6828 free (contents); 6829 return FALSE; 6830 } 6831 6832 /* Adjust a symbol defined by a dynamic object and referenced by a 6833 regular object. The current definition is in some section of the 6834 dynamic object, but we're not including those sections. We have to 6835 change the definition to something the rest of the link can 6836 understand. */ 6837 6838 bfd_boolean 6839 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info, 6840 struct elf_link_hash_entry *h) 6841 { 6842 bfd *dynobj; 6843 struct mips_elf_link_hash_entry *hmips; 6844 asection *s; 6845 struct mips_elf_link_hash_table *htab; 6846 6847 htab = mips_elf_hash_table (info); 6848 dynobj = elf_hash_table (info)->dynobj; 6849 6850 /* Make sure we know what is going on here. */ 6851 BFD_ASSERT (dynobj != NULL 6852 && (h->needs_plt 6853 || h->u.weakdef != NULL 6854 || (h->def_dynamic 6855 && h->ref_regular 6856 && !h->def_regular))); 6857 6858 /* If this symbol is defined in a dynamic object, we need to copy 6859 any R_MIPS_32 or R_MIPS_REL32 relocs against it into the output 6860 file. */ 6861 hmips = (struct mips_elf_link_hash_entry *) h; 6862 if (! info->relocatable 6863 && hmips->possibly_dynamic_relocs != 0 6864 && (h->root.type == bfd_link_hash_defweak 6865 || !h->def_regular)) 6866 { 6867 mips_elf_allocate_dynamic_relocations 6868 (dynobj, info, hmips->possibly_dynamic_relocs); 6869 if (hmips->readonly_reloc) 6870 /* We tell the dynamic linker that there are relocations 6871 against the text segment. */ 6872 info->flags |= DF_TEXTREL; 6873 } 6874 6875 /* For a function, create a stub, if allowed. */ 6876 if (! hmips->no_fn_stub 6877 && h->needs_plt) 6878 { 6879 if (! elf_hash_table (info)->dynamic_sections_created) 6880 return TRUE; 6881 6882 /* If this symbol is not defined in a regular file, then set 6883 the symbol to the stub location. This is required to make 6884 function pointers compare as equal between the normal 6885 executable and the shared library. */ 6886 if (!h->def_regular) 6887 { 6888 /* We need .stub section. */ 6889 s = bfd_get_section_by_name (dynobj, 6890 MIPS_ELF_STUB_SECTION_NAME (dynobj)); 6891 BFD_ASSERT (s != NULL); 6892 6893 h->root.u.def.section = s; 6894 h->root.u.def.value = s->size; 6895 6896 /* XXX Write this stub address somewhere. */ 6897 h->plt.offset = s->size; 6898 6899 /* Make room for this stub code. */ 6900 s->size += htab->function_stub_size; 6901 6902 /* The last half word of the stub will be filled with the index 6903 of this symbol in .dynsym section. */ 6904 return TRUE; 6905 } 6906 } 6907 else if ((h->type == STT_FUNC) 6908 && !h->needs_plt) 6909 { 6910 /* This will set the entry for this symbol in the GOT to 0, and 6911 the dynamic linker will take care of this. */ 6912 h->root.u.def.value = 0; 6913 return TRUE; 6914 } 6915 6916 /* If this is a weak symbol, and there is a real definition, the 6917 processor independent code will have arranged for us to see the 6918 real definition first, and we can just use the same value. */ 6919 if (h->u.weakdef != NULL) 6920 { 6921 BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined 6922 || h->u.weakdef->root.type == bfd_link_hash_defweak); 6923 h->root.u.def.section = h->u.weakdef->root.u.def.section; 6924 h->root.u.def.value = h->u.weakdef->root.u.def.value; 6925 return TRUE; 6926 } 6927 6928 /* This is a reference to a symbol defined by a dynamic object which 6929 is not a function. */ 6930 6931 return TRUE; 6932 } 6933 6934 /* Likewise, for VxWorks. */ 6935 6936 bfd_boolean 6937 _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info, 6938 struct elf_link_hash_entry *h) 6939 { 6940 bfd *dynobj; 6941 struct mips_elf_link_hash_entry *hmips; 6942 struct mips_elf_link_hash_table *htab; 6943 unsigned int power_of_two; 6944 6945 htab = mips_elf_hash_table (info); 6946 dynobj = elf_hash_table (info)->dynobj; 6947 hmips = (struct mips_elf_link_hash_entry *) h; 6948 6949 /* Make sure we know what is going on here. */ 6950 BFD_ASSERT (dynobj != NULL 6951 && (h->needs_plt 6952 || h->needs_copy 6953 || h->u.weakdef != NULL 6954 || (h->def_dynamic 6955 && h->ref_regular 6956 && !h->def_regular))); 6957 6958 /* If the symbol is defined by a dynamic object, we need a PLT stub if 6959 either (a) we want to branch to the symbol or (b) we're linking an 6960 executable that needs a canonical function address. In the latter 6961 case, the canonical address will be the address of the executable's 6962 load stub. */ 6963 if ((hmips->is_branch_target 6964 || (!info->shared 6965 && h->type == STT_FUNC 6966 && hmips->is_relocation_target)) 6967 && h->def_dynamic 6968 && h->ref_regular 6969 && !h->def_regular 6970 && !h->forced_local) 6971 h->needs_plt = 1; 6972 6973 /* Locally-binding symbols do not need a PLT stub; we can refer to 6974 the functions directly. */ 6975 else if (h->needs_plt 6976 && (SYMBOL_CALLS_LOCAL (info, h) 6977 || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT 6978 && h->root.type == bfd_link_hash_undefweak))) 6979 { 6980 h->needs_plt = 0; 6981 return TRUE; 6982 } 6983 6984 if (h->needs_plt) 6985 { 6986 /* If this is the first symbol to need a PLT entry, allocate room 6987 for the header, and for the header's .rela.plt.unloaded entries. */ 6988 if (htab->splt->size == 0) 6989 { 6990 htab->splt->size += htab->plt_header_size; 6991 if (!info->shared) 6992 htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela); 6993 } 6994 6995 /* Assign the next .plt entry to this symbol. */ 6996 h->plt.offset = htab->splt->size; 6997 htab->splt->size += htab->plt_entry_size; 6998 6999 /* If the output file has no definition of the symbol, set the 7000 symbol's value to the address of the stub. For executables, 7001 point at the PLT load stub rather than the lazy resolution stub; 7002 this stub will become the canonical function address. */ 7003 if (!h->def_regular) 7004 { 7005 h->root.u.def.section = htab->splt; 7006 h->root.u.def.value = h->plt.offset; 7007 if (!info->shared) 7008 h->root.u.def.value += 8; 7009 } 7010 7011 /* Make room for the .got.plt entry and the R_JUMP_SLOT relocation. */ 7012 htab->sgotplt->size += 4; 7013 htab->srelplt->size += sizeof (Elf32_External_Rela); 7014 7015 /* Make room for the .rela.plt.unloaded relocations. */ 7016 if (!info->shared) 7017 htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela); 7018 7019 return TRUE; 7020 } 7021 7022 /* If a function symbol is defined by a dynamic object, and we do not 7023 need a PLT stub for it, the symbol's value should be zero. */ 7024 if (h->type == STT_FUNC 7025 && h->def_dynamic 7026 && h->ref_regular 7027 && !h->def_regular) 7028 { 7029 h->root.u.def.value = 0; 7030 return TRUE; 7031 } 7032 7033 /* If this is a weak symbol, and there is a real definition, the 7034 processor independent code will have arranged for us to see the 7035 real definition first, and we can just use the same value. */ 7036 if (h->u.weakdef != NULL) 7037 { 7038 BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined 7039 || h->u.weakdef->root.type == bfd_link_hash_defweak); 7040 h->root.u.def.section = h->u.weakdef->root.u.def.section; 7041 h->root.u.def.value = h->u.weakdef->root.u.def.value; 7042 return TRUE; 7043 } 7044 7045 /* This is a reference to a symbol defined by a dynamic object which 7046 is not a function. */ 7047 if (info->shared) 7048 return TRUE; 7049 7050 /* We must allocate the symbol in our .dynbss section, which will 7051 become part of the .bss section of the executable. There will be 7052 an entry for this symbol in the .dynsym section. The dynamic 7053 object will contain position independent code, so all references 7054 from the dynamic object to this symbol will go through the global 7055 offset table. The dynamic linker will use the .dynsym entry to 7056 determine the address it must put in the global offset table, so 7057 both the dynamic object and the regular object will refer to the 7058 same memory location for the variable. */ 7059 7060 if ((h->root.u.def.section->flags & SEC_ALLOC) != 0) 7061 { 7062 htab->srelbss->size += sizeof (Elf32_External_Rela); 7063 h->needs_copy = 1; 7064 } 7065 7066 /* We need to figure out the alignment required for this symbol. */ 7067 power_of_two = bfd_log2 (h->size); 7068 if (power_of_two > 4) 7069 power_of_two = 4; 7070 7071 /* Apply the required alignment. */ 7072 htab->sdynbss->size = BFD_ALIGN (htab->sdynbss->size, 7073 (bfd_size_type) 1 << power_of_two); 7074 if (power_of_two > bfd_get_section_alignment (dynobj, htab->sdynbss) 7075 && !bfd_set_section_alignment (dynobj, htab->sdynbss, power_of_two)) 7076 return FALSE; 7077 7078 /* Define the symbol as being at this point in the section. */ 7079 h->root.u.def.section = htab->sdynbss; 7080 h->root.u.def.value = htab->sdynbss->size; 7081 7082 /* Increment the section size to make room for the symbol. */ 7083 htab->sdynbss->size += h->size; 7084 7085 return TRUE; 7086 } 7087 7088 /* Return the number of dynamic section symbols required by OUTPUT_BFD. 7089 The number might be exact or a worst-case estimate, depending on how 7090 much information is available to elf_backend_omit_section_dynsym at 7091 the current linking stage. */ 7092 7093 static bfd_size_type 7094 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info) 7095 { 7096 bfd_size_type count; 7097 7098 count = 0; 7099 if (info->shared) 7100 { 7101 asection *p; 7102 const struct elf_backend_data *bed; 7103 7104 bed = get_elf_backend_data (output_bfd); 7105 for (p = output_bfd->sections; p ; p = p->next) 7106 if ((p->flags & SEC_EXCLUDE) == 0 7107 && (p->flags & SEC_ALLOC) != 0 7108 && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p)) 7109 ++count; 7110 } 7111 return count; 7112 } 7113 7114 /* This function is called after all the input files have been read, 7115 and the input sections have been assigned to output sections. We 7116 check for any mips16 stub sections that we can discard. */ 7117 7118 bfd_boolean 7119 _bfd_mips_elf_always_size_sections (bfd *output_bfd, 7120 struct bfd_link_info *info) 7121 { 7122 asection *ri; 7123 7124 bfd *dynobj; 7125 asection *s; 7126 struct mips_got_info *g; 7127 int i; 7128 bfd_size_type loadable_size = 0; 7129 bfd_size_type local_gotno; 7130 bfd_size_type dynsymcount; 7131 bfd *sub; 7132 struct mips_elf_count_tls_arg count_tls_arg; 7133 struct mips_elf_link_hash_table *htab; 7134 7135 htab = mips_elf_hash_table (info); 7136 7137 /* The .reginfo section has a fixed size. */ 7138 ri = bfd_get_section_by_name (output_bfd, ".reginfo"); 7139 if (ri != NULL) 7140 bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo)); 7141 7142 if (! (info->relocatable 7143 || ! mips_elf_hash_table (info)->mips16_stubs_seen)) 7144 mips_elf_link_hash_traverse (mips_elf_hash_table (info), 7145 mips_elf_check_mips16_stubs, NULL); 7146 7147 dynobj = elf_hash_table (info)->dynobj; 7148 if (dynobj == NULL) 7149 /* Relocatable links don't have it. */ 7150 return TRUE; 7151 7152 g = mips_elf_got_info (dynobj, &s); 7153 if (s == NULL) 7154 return TRUE; 7155 7156 /* Calculate the total loadable size of the output. That 7157 will give us the maximum number of GOT_PAGE entries 7158 required. */ 7159 for (sub = info->input_bfds; sub; sub = sub->link_next) 7160 { 7161 asection *subsection; 7162 7163 for (subsection = sub->sections; 7164 subsection; 7165 subsection = subsection->next) 7166 { 7167 if ((subsection->flags & SEC_ALLOC) == 0) 7168 continue; 7169 loadable_size += ((subsection->size + 0xf) 7170 &~ (bfd_size_type) 0xf); 7171 } 7172 } 7173 7174 /* There has to be a global GOT entry for every symbol with 7175 a dynamic symbol table index of DT_MIPS_GOTSYM or 7176 higher. Therefore, it make sense to put those symbols 7177 that need GOT entries at the end of the symbol table. We 7178 do that here. */ 7179 if (! mips_elf_sort_hash_table (info, 1)) 7180 return FALSE; 7181 7182 if (g->global_gotsym != NULL) 7183 i = elf_hash_table (info)->dynsymcount - g->global_gotsym->dynindx; 7184 else 7185 /* If there are no global symbols, or none requiring 7186 relocations, then GLOBAL_GOTSYM will be NULL. */ 7187 i = 0; 7188 7189 /* Get a worst-case estimate of the number of dynamic symbols needed. 7190 At this point, dynsymcount does not account for section symbols 7191 and count_section_dynsyms may overestimate the number that will 7192 be needed. */ 7193 dynsymcount = (elf_hash_table (info)->dynsymcount 7194 + count_section_dynsyms (output_bfd, info)); 7195 7196 /* Determine the size of one stub entry. */ 7197 htab->function_stub_size = (dynsymcount > 0x10000 7198 ? MIPS_FUNCTION_STUB_BIG_SIZE 7199 : MIPS_FUNCTION_STUB_NORMAL_SIZE); 7200 7201 /* In the worst case, we'll get one stub per dynamic symbol, plus 7202 one to account for the dummy entry at the end required by IRIX 7203 rld. */ 7204 loadable_size += htab->function_stub_size * (i + 1); 7205 7206 if (htab->is_vxworks) 7207 /* There's no need to allocate page entries for VxWorks; R_MIPS_GOT16 7208 relocations against local symbols evaluate to "G", and the EABI does 7209 not include R_MIPS_GOT_PAGE. */ 7210 local_gotno = 0; 7211 else 7212 /* Assume there are four loadable segments consisting of contiguous 7213 sections. Is 7 enough? */ 7214 local_gotno = (loadable_size >> 16) + 7; 7215 7216 g->local_gotno += local_gotno; 7217 s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd); 7218 7219 g->global_gotno = i; 7220 s->size += i * MIPS_ELF_GOT_SIZE (output_bfd); 7221 7222 /* We need to calculate tls_gotno for global symbols at this point 7223 instead of building it up earlier, to avoid doublecounting 7224 entries for one global symbol from multiple input files. */ 7225 count_tls_arg.info = info; 7226 count_tls_arg.needed = 0; 7227 elf_link_hash_traverse (elf_hash_table (info), 7228 mips_elf_count_global_tls_entries, 7229 &count_tls_arg); 7230 g->tls_gotno += count_tls_arg.needed; 7231 s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd); 7232 7233 mips_elf_resolve_final_got_entries (g); 7234 7235 /* VxWorks does not support multiple GOTs. It initializes $gp to 7236 __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the 7237 dynamic loader. */ 7238 if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info)) 7239 { 7240 if (! mips_elf_multi_got (output_bfd, info, g, s, local_gotno)) 7241 return FALSE; 7242 } 7243 else 7244 { 7245 /* Set up TLS entries for the first GOT. */ 7246 g->tls_assigned_gotno = g->global_gotno + g->local_gotno; 7247 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g); 7248 } 7249 7250 return TRUE; 7251 } 7252 7253 /* Set the sizes of the dynamic sections. */ 7254 7255 bfd_boolean 7256 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, 7257 struct bfd_link_info *info) 7258 { 7259 bfd *dynobj; 7260 asection *s, *sreldyn; 7261 bfd_boolean reltext; 7262 struct mips_elf_link_hash_table *htab; 7263 7264 htab = mips_elf_hash_table (info); 7265 dynobj = elf_hash_table (info)->dynobj; 7266 BFD_ASSERT (dynobj != NULL); 7267 7268 if (elf_hash_table (info)->dynamic_sections_created) 7269 { 7270 /* Set the contents of the .interp section to the interpreter. */ 7271 if (info->executable && !info->static_link) 7272 { 7273 s = bfd_get_section_by_name (dynobj, ".interp"); 7274 BFD_ASSERT (s != NULL); 7275 s->size 7276 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1; 7277 s->contents 7278 = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd); 7279 } 7280 } 7281 7282 /* The check_relocs and adjust_dynamic_symbol entry points have 7283 determined the sizes of the various dynamic sections. Allocate 7284 memory for them. */ 7285 reltext = FALSE; 7286 sreldyn = NULL; 7287 for (s = dynobj->sections; s != NULL; s = s->next) 7288 { 7289 const char *name; 7290 7291 /* It's OK to base decisions on the section name, because none 7292 of the dynobj section names depend upon the input files. */ 7293 name = bfd_get_section_name (dynobj, s); 7294 7295 if ((s->flags & SEC_LINKER_CREATED) == 0) 7296 continue; 7297 7298 if (strncmp (name, ".rel", 4) == 0) 7299 { 7300 if (s->size != 0) 7301 { 7302 const char *outname; 7303 asection *target; 7304 7305 /* If this relocation section applies to a read only 7306 section, then we probably need a DT_TEXTREL entry. 7307 If the relocation section is .rel(a).dyn, we always 7308 assert a DT_TEXTREL entry rather than testing whether 7309 there exists a relocation to a read only section or 7310 not. */ 7311 outname = bfd_get_section_name (output_bfd, 7312 s->output_section); 7313 target = bfd_get_section_by_name (output_bfd, outname + 4); 7314 if ((target != NULL 7315 && (target->flags & SEC_READONLY) != 0 7316 && (target->flags & SEC_ALLOC) != 0) 7317 || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0) 7318 reltext = TRUE; 7319 7320 /* We use the reloc_count field as a counter if we need 7321 to copy relocs into the output file. */ 7322 if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0) 7323 s->reloc_count = 0; 7324 7325 /* If combreloc is enabled, elf_link_sort_relocs() will 7326 sort relocations, but in a different way than we do, 7327 and before we're done creating relocations. Also, it 7328 will move them around between input sections' 7329 relocation's contents, so our sorting would be 7330 broken, so don't let it run. */ 7331 info->combreloc = 0; 7332 } 7333 } 7334 else if (htab->is_vxworks && strcmp (name, ".got") == 0) 7335 { 7336 /* Executables do not need a GOT. */ 7337 if (info->shared) 7338 { 7339 /* Allocate relocations for all but the reserved entries. */ 7340 struct mips_got_info *g; 7341 unsigned int count; 7342 7343 g = mips_elf_got_info (dynobj, NULL); 7344 count = (g->global_gotno 7345 + g->local_gotno 7346 - MIPS_RESERVED_GOTNO (info)); 7347 mips_elf_allocate_dynamic_relocations (dynobj, info, count); 7348 } 7349 } 7350 else if (!htab->is_vxworks && strncmp (name, ".got", 4) == 0) 7351 { 7352 /* _bfd_mips_elf_always_size_sections() has already done 7353 most of the work, but some symbols may have been mapped 7354 to versions that we must now resolve in the got_entries 7355 hash tables. */ 7356 struct mips_got_info *gg = mips_elf_got_info (dynobj, NULL); 7357 struct mips_got_info *g = gg; 7358 struct mips_elf_set_global_got_offset_arg set_got_offset_arg; 7359 unsigned int needed_relocs = 0; 7360 7361 if (gg->next) 7362 { 7363 set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (output_bfd); 7364 set_got_offset_arg.info = info; 7365 7366 /* NOTE 2005-02-03: How can this call, or the next, ever 7367 find any indirect entries to resolve? They were all 7368 resolved in mips_elf_multi_got. */ 7369 mips_elf_resolve_final_got_entries (gg); 7370 for (g = gg->next; g && g->next != gg; g = g->next) 7371 { 7372 unsigned int save_assign; 7373 7374 mips_elf_resolve_final_got_entries (g); 7375 7376 /* Assign offsets to global GOT entries. */ 7377 save_assign = g->assigned_gotno; 7378 g->assigned_gotno = g->local_gotno; 7379 set_got_offset_arg.g = g; 7380 set_got_offset_arg.needed_relocs = 0; 7381 htab_traverse (g->got_entries, 7382 mips_elf_set_global_got_offset, 7383 &set_got_offset_arg); 7384 needed_relocs += set_got_offset_arg.needed_relocs; 7385 BFD_ASSERT (g->assigned_gotno - g->local_gotno 7386 <= g->global_gotno); 7387 7388 g->assigned_gotno = save_assign; 7389 if (info->shared) 7390 { 7391 needed_relocs += g->local_gotno - g->assigned_gotno; 7392 BFD_ASSERT (g->assigned_gotno == g->next->local_gotno 7393 + g->next->global_gotno 7394 + g->next->tls_gotno 7395 + MIPS_RESERVED_GOTNO (info)); 7396 } 7397 } 7398 } 7399 else 7400 { 7401 struct mips_elf_count_tls_arg arg; 7402 arg.info = info; 7403 arg.needed = 0; 7404 7405 htab_traverse (gg->got_entries, mips_elf_count_local_tls_relocs, 7406 &arg); 7407 elf_link_hash_traverse (elf_hash_table (info), 7408 mips_elf_count_global_tls_relocs, 7409 &arg); 7410 7411 needed_relocs += arg.needed; 7412 } 7413 7414 if (needed_relocs) 7415 mips_elf_allocate_dynamic_relocations (dynobj, info, 7416 needed_relocs); 7417 } 7418 else if (strcmp (name, MIPS_ELF_STUB_SECTION_NAME (output_bfd)) == 0) 7419 { 7420 /* IRIX rld assumes that the function stub isn't at the end 7421 of .text section. So put a dummy. XXX */ 7422 s->size += htab->function_stub_size; 7423 } 7424 else if (! info->shared 7425 && ! mips_elf_hash_table (info)->use_rld_obj_head 7426 && strncmp (name, ".rld_map", 8) == 0) 7427 { 7428 /* We add a room for __rld_map. It will be filled in by the 7429 rtld to contain a pointer to the _r_debug structure. */ 7430 s->size += 4; 7431 } 7432 else if (SGI_COMPAT (output_bfd) 7433 && strncmp (name, ".compact_rel", 12) == 0) 7434 s->size += mips_elf_hash_table (info)->compact_rel_size; 7435 else if (strncmp (name, ".init", 5) != 0 7436 && s != htab->sgotplt 7437 && s != htab->splt) 7438 { 7439 /* It's not one of our sections, so don't allocate space. */ 7440 continue; 7441 } 7442 7443 if (s->size == 0) 7444 { 7445 s->flags |= SEC_EXCLUDE; 7446 continue; 7447 } 7448 7449 if ((s->flags & SEC_HAS_CONTENTS) == 0) 7450 continue; 7451 7452 /* Allocate memory for this section last, since we may increase its 7453 size above. */ 7454 if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) == 0) 7455 { 7456 sreldyn = s; 7457 continue; 7458 } 7459 7460 /* Allocate memory for the section contents. */ 7461 s->contents = bfd_zalloc (dynobj, s->size); 7462 if (s->contents == NULL) 7463 { 7464 bfd_set_error (bfd_error_no_memory); 7465 return FALSE; 7466 } 7467 } 7468 7469 /* Allocate memory for the .rel(a).dyn section. */ 7470 if (sreldyn != NULL) 7471 { 7472 sreldyn->contents = bfd_zalloc (dynobj, sreldyn->size); 7473 if (sreldyn->contents == NULL) 7474 { 7475 bfd_set_error (bfd_error_no_memory); 7476 return FALSE; 7477 } 7478 } 7479 7480 if (elf_hash_table (info)->dynamic_sections_created) 7481 { 7482 /* Add some entries to the .dynamic section. We fill in the 7483 values later, in _bfd_mips_elf_finish_dynamic_sections, but we 7484 must add the entries now so that we get the correct size for 7485 the .dynamic section. The DT_DEBUG entry is filled in by the 7486 dynamic linker and used by the debugger. */ 7487 if (! info->shared) 7488 { 7489 /* SGI object has the equivalence of DT_DEBUG in the 7490 DT_MIPS_RLD_MAP entry. */ 7491 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0)) 7492 return FALSE; 7493 if (!SGI_COMPAT (output_bfd)) 7494 { 7495 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0)) 7496 return FALSE; 7497 } 7498 } 7499 else 7500 { 7501 /* Shared libraries on traditional mips have DT_DEBUG. */ 7502 if (!SGI_COMPAT (output_bfd)) 7503 { 7504 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0)) 7505 return FALSE; 7506 } 7507 } 7508 7509 if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks)) 7510 info->flags |= DF_TEXTREL; 7511 7512 if ((info->flags & DF_TEXTREL) != 0) 7513 { 7514 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0)) 7515 return FALSE; 7516 7517 /* Clear the DF_TEXTREL flag. It will be set again if we 7518 write out an actual text relocation; we may not, because 7519 at this point we do not know whether e.g. any .eh_frame 7520 absolute relocations have been converted to PC-relative. */ 7521 info->flags &= ~DF_TEXTREL; 7522 } 7523 7524 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0)) 7525 return FALSE; 7526 7527 if (htab->is_vxworks) 7528 { 7529 /* VxWorks uses .rela.dyn instead of .rel.dyn. It does not 7530 use any of the DT_MIPS_* tags. */ 7531 if (mips_elf_rel_dyn_section (info, FALSE)) 7532 { 7533 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0)) 7534 return FALSE; 7535 7536 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0)) 7537 return FALSE; 7538 7539 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0)) 7540 return FALSE; 7541 } 7542 if (htab->splt->size > 0) 7543 { 7544 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0)) 7545 return FALSE; 7546 7547 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0)) 7548 return FALSE; 7549 7550 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0)) 7551 return FALSE; 7552 } 7553 } 7554 else 7555 { 7556 if (mips_elf_rel_dyn_section (info, FALSE)) 7557 { 7558 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0)) 7559 return FALSE; 7560 7561 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0)) 7562 return FALSE; 7563 7564 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0)) 7565 return FALSE; 7566 } 7567 7568 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0)) 7569 return FALSE; 7570 7571 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0)) 7572 return FALSE; 7573 7574 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0)) 7575 return FALSE; 7576 7577 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0)) 7578 return FALSE; 7579 7580 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0)) 7581 return FALSE; 7582 7583 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0)) 7584 return FALSE; 7585 7586 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0)) 7587 return FALSE; 7588 7589 if (IRIX_COMPAT (dynobj) == ict_irix5 7590 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0)) 7591 return FALSE; 7592 7593 if (IRIX_COMPAT (dynobj) == ict_irix6 7594 && (bfd_get_section_by_name 7595 (dynobj, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj))) 7596 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0)) 7597 return FALSE; 7598 } 7599 } 7600 7601 return TRUE; 7602 } 7603 7604 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD. 7605 Adjust its R_ADDEND field so that it is correct for the output file. 7606 LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols 7607 and sections respectively; both use symbol indexes. */ 7608 7609 static void 7610 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info, 7611 bfd *input_bfd, Elf_Internal_Sym *local_syms, 7612 asection **local_sections, Elf_Internal_Rela *rel) 7613 { 7614 unsigned int r_type, r_symndx; 7615 Elf_Internal_Sym *sym; 7616 asection *sec; 7617 7618 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections, FALSE)) 7619 { 7620 r_type = ELF_R_TYPE (output_bfd, rel->r_info); 7621 if (r_type == R_MIPS16_GPREL 7622 || r_type == R_MIPS_GPREL16 7623 || r_type == R_MIPS_GPREL32 7624 || r_type == R_MIPS_LITERAL) 7625 { 7626 rel->r_addend += _bfd_get_gp_value (input_bfd); 7627 rel->r_addend -= _bfd_get_gp_value (output_bfd); 7628 } 7629 7630 r_symndx = ELF_R_SYM (output_bfd, rel->r_info); 7631 sym = local_syms + r_symndx; 7632 7633 /* Adjust REL's addend to account for section merging. */ 7634 if (!info->relocatable) 7635 { 7636 sec = local_sections[r_symndx]; 7637 _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); 7638 } 7639 7640 /* This would normally be done by the rela_normal code in elflink.c. */ 7641 if (ELF_ST_TYPE (sym->st_info) == STT_SECTION) 7642 rel->r_addend += local_sections[r_symndx]->output_offset; 7643 } 7644 } 7645 7646 /* Relocate a MIPS ELF section. */ 7647 7648 bfd_boolean 7649 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, 7650 bfd *input_bfd, asection *input_section, 7651 bfd_byte *contents, Elf_Internal_Rela *relocs, 7652 Elf_Internal_Sym *local_syms, 7653 asection **local_sections) 7654 { 7655 Elf_Internal_Rela *rel; 7656 const Elf_Internal_Rela *relend; 7657 bfd_vma addend = 0; 7658 bfd_boolean use_saved_addend_p = FALSE; 7659 const struct elf_backend_data *bed; 7660 7661 bed = get_elf_backend_data (output_bfd); 7662 relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel; 7663 for (rel = relocs; rel < relend; ++rel) 7664 { 7665 const char *name; 7666 bfd_vma value = 0; 7667 reloc_howto_type *howto; 7668 bfd_boolean require_jalx; 7669 /* TRUE if the relocation is a RELA relocation, rather than a 7670 REL relocation. */ 7671 bfd_boolean rela_relocation_p = TRUE; 7672 unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info); 7673 const char *msg; 7674 7675 /* Find the relocation howto for this relocation. */ 7676 if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd)) 7677 { 7678 /* Some 32-bit code uses R_MIPS_64. In particular, people use 7679 64-bit code, but make sure all their addresses are in the 7680 lowermost or uppermost 32-bit section of the 64-bit address 7681 space. Thus, when they use an R_MIPS_64 they mean what is 7682 usually meant by R_MIPS_32, with the exception that the 7683 stored value is sign-extended to 64 bits. */ 7684 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE); 7685 7686 /* On big-endian systems, we need to lie about the position 7687 of the reloc. */ 7688 if (bfd_big_endian (input_bfd)) 7689 rel->r_offset += 4; 7690 } 7691 else 7692 /* NewABI defaults to RELA relocations. */ 7693 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, 7694 NEWABI_P (input_bfd) 7695 && (MIPS_RELOC_RELA_P 7696 (input_bfd, input_section, 7697 rel - relocs))); 7698 7699 if (!use_saved_addend_p) 7700 { 7701 Elf_Internal_Shdr *rel_hdr; 7702 7703 /* If these relocations were originally of the REL variety, 7704 we must pull the addend out of the field that will be 7705 relocated. Otherwise, we simply use the contents of the 7706 RELA relocation. To determine which flavor or relocation 7707 this is, we depend on the fact that the INPUT_SECTION's 7708 REL_HDR is read before its REL_HDR2. */ 7709 rel_hdr = &elf_section_data (input_section)->rel_hdr; 7710 if ((size_t) (rel - relocs) 7711 >= (NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel)) 7712 rel_hdr = elf_section_data (input_section)->rel_hdr2; 7713 if (rel_hdr->sh_entsize == MIPS_ELF_REL_SIZE (input_bfd)) 7714 { 7715 bfd_byte *location = contents + rel->r_offset; 7716 7717 /* Note that this is a REL relocation. */ 7718 rela_relocation_p = FALSE; 7719 7720 /* Get the addend, which is stored in the input file. */ 7721 _bfd_mips16_elf_reloc_unshuffle (input_bfd, r_type, FALSE, 7722 location); 7723 addend = mips_elf_obtain_contents (howto, rel, input_bfd, 7724 contents); 7725 _bfd_mips16_elf_reloc_shuffle(input_bfd, r_type, FALSE, 7726 location); 7727 7728 addend &= howto->src_mask; 7729 7730 /* For some kinds of relocations, the ADDEND is a 7731 combination of the addend stored in two different 7732 relocations. */ 7733 if (r_type == R_MIPS_HI16 || r_type == R_MIPS16_HI16 7734 || (r_type == R_MIPS_GOT16 7735 && mips_elf_local_relocation_p (input_bfd, rel, 7736 local_sections, FALSE))) 7737 { 7738 bfd_vma l; 7739 const Elf_Internal_Rela *lo16_relocation; 7740 reloc_howto_type *lo16_howto; 7741 bfd_byte *lo16_location; 7742 int lo16_type; 7743 7744 if (r_type == R_MIPS16_HI16) 7745 lo16_type = R_MIPS16_LO16; 7746 else 7747 lo16_type = R_MIPS_LO16; 7748 7749 /* The combined value is the sum of the HI16 addend, 7750 left-shifted by sixteen bits, and the LO16 7751 addend, sign extended. (Usually, the code does 7752 a `lui' of the HI16 value, and then an `addiu' of 7753 the LO16 value.) 7754 7755 Scan ahead to find a matching LO16 relocation. 7756 7757 According to the MIPS ELF ABI, the R_MIPS_LO16 7758 relocation must be immediately following. 7759 However, for the IRIX6 ABI, the next relocation 7760 may be a composed relocation consisting of 7761 several relocations for the same address. In 7762 that case, the R_MIPS_LO16 relocation may occur 7763 as one of these. We permit a similar extension 7764 in general, as that is useful for GCC. */ 7765 lo16_relocation = mips_elf_next_relocation (input_bfd, 7766 lo16_type, 7767 rel, relend); 7768 if (lo16_relocation == NULL) 7769 return FALSE; 7770 7771 lo16_location = contents + lo16_relocation->r_offset; 7772 7773 /* Obtain the addend kept there. */ 7774 lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, 7775 lo16_type, FALSE); 7776 _bfd_mips16_elf_reloc_unshuffle (input_bfd, lo16_type, FALSE, 7777 lo16_location); 7778 l = mips_elf_obtain_contents (lo16_howto, lo16_relocation, 7779 input_bfd, contents); 7780 _bfd_mips16_elf_reloc_shuffle (input_bfd, lo16_type, FALSE, 7781 lo16_location); 7782 l &= lo16_howto->src_mask; 7783 l <<= lo16_howto->rightshift; 7784 l = _bfd_mips_elf_sign_extend (l, 16); 7785 7786 addend <<= 16; 7787 7788 /* Compute the combined addend. */ 7789 addend += l; 7790 } 7791 else 7792 addend <<= howto->rightshift; 7793 } 7794 else 7795 addend = rel->r_addend; 7796 mips_elf_adjust_addend (output_bfd, info, input_bfd, 7797 local_syms, local_sections, rel); 7798 } 7799 7800 if (info->relocatable) 7801 { 7802 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd) 7803 && bfd_big_endian (input_bfd)) 7804 rel->r_offset -= 4; 7805 7806 if (!rela_relocation_p && rel->r_addend) 7807 { 7808 addend += rel->r_addend; 7809 if (r_type == R_MIPS_HI16 7810 || r_type == R_MIPS_GOT16) 7811 addend = mips_elf_high (addend); 7812 else if (r_type == R_MIPS_HIGHER) 7813 addend = mips_elf_higher (addend); 7814 else if (r_type == R_MIPS_HIGHEST) 7815 addend = mips_elf_highest (addend); 7816 else 7817 addend >>= howto->rightshift; 7818 7819 /* We use the source mask, rather than the destination 7820 mask because the place to which we are writing will be 7821 source of the addend in the final link. */ 7822 addend &= howto->src_mask; 7823 7824 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)) 7825 /* See the comment above about using R_MIPS_64 in the 32-bit 7826 ABI. Here, we need to update the addend. It would be 7827 possible to get away with just using the R_MIPS_32 reloc 7828 but for endianness. */ 7829 { 7830 bfd_vma sign_bits; 7831 bfd_vma low_bits; 7832 bfd_vma high_bits; 7833 7834 if (addend & ((bfd_vma) 1 << 31)) 7835 #ifdef BFD64 7836 sign_bits = ((bfd_vma) 1 << 32) - 1; 7837 #else 7838 sign_bits = -1; 7839 #endif 7840 else 7841 sign_bits = 0; 7842 7843 /* If we don't know that we have a 64-bit type, 7844 do two separate stores. */ 7845 if (bfd_big_endian (input_bfd)) 7846 { 7847 /* Store the sign-bits (which are most significant) 7848 first. */ 7849 low_bits = sign_bits; 7850 high_bits = addend; 7851 } 7852 else 7853 { 7854 low_bits = addend; 7855 high_bits = sign_bits; 7856 } 7857 bfd_put_32 (input_bfd, low_bits, 7858 contents + rel->r_offset); 7859 bfd_put_32 (input_bfd, high_bits, 7860 contents + rel->r_offset + 4); 7861 continue; 7862 } 7863 7864 if (! mips_elf_perform_relocation (info, howto, rel, addend, 7865 input_bfd, input_section, 7866 contents, FALSE)) 7867 return FALSE; 7868 } 7869 7870 /* Go on to the next relocation. */ 7871 continue; 7872 } 7873 7874 /* In the N32 and 64-bit ABIs there may be multiple consecutive 7875 relocations for the same offset. In that case we are 7876 supposed to treat the output of each relocation as the addend 7877 for the next. */ 7878 if (rel + 1 < relend 7879 && rel->r_offset == rel[1].r_offset 7880 && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE) 7881 use_saved_addend_p = TRUE; 7882 else 7883 use_saved_addend_p = FALSE; 7884 7885 /* Figure out what value we are supposed to relocate. */ 7886 switch (mips_elf_calculate_relocation (output_bfd, input_bfd, 7887 input_section, info, rel, 7888 addend, howto, local_syms, 7889 local_sections, &value, 7890 &name, &require_jalx, 7891 use_saved_addend_p)) 7892 { 7893 case bfd_reloc_continue: 7894 /* There's nothing to do. */ 7895 continue; 7896 7897 case bfd_reloc_undefined: 7898 /* mips_elf_calculate_relocation already called the 7899 undefined_symbol callback. There's no real point in 7900 trying to perform the relocation at this point, so we 7901 just skip ahead to the next relocation. */ 7902 continue; 7903 7904 case bfd_reloc_notsupported: 7905 msg = _("internal error: unsupported relocation error"); 7906 info->callbacks->warning 7907 (info, msg, name, input_bfd, input_section, rel->r_offset); 7908 return FALSE; 7909 7910 case bfd_reloc_overflow: 7911 if (use_saved_addend_p) 7912 /* Ignore overflow until we reach the last relocation for 7913 a given location. */ 7914 ; 7915 else 7916 { 7917 BFD_ASSERT (name != NULL); 7918 if (! ((*info->callbacks->reloc_overflow) 7919 (info, NULL, name, howto->name, (bfd_vma) 0, 7920 input_bfd, input_section, rel->r_offset))) 7921 return FALSE; 7922 } 7923 break; 7924 7925 case bfd_reloc_ok: 7926 break; 7927 7928 default: 7929 abort (); 7930 break; 7931 } 7932 7933 /* If we've got another relocation for the address, keep going 7934 until we reach the last one. */ 7935 if (use_saved_addend_p) 7936 { 7937 addend = value; 7938 continue; 7939 } 7940 7941 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)) 7942 /* See the comment above about using R_MIPS_64 in the 32-bit 7943 ABI. Until now, we've been using the HOWTO for R_MIPS_32; 7944 that calculated the right value. Now, however, we 7945 sign-extend the 32-bit result to 64-bits, and store it as a 7946 64-bit value. We are especially generous here in that we 7947 go to extreme lengths to support this usage on systems with 7948 only a 32-bit VMA. */ 7949 { 7950 bfd_vma sign_bits; 7951 bfd_vma low_bits; 7952 bfd_vma high_bits; 7953 7954 if (value & ((bfd_vma) 1 << 31)) 7955 #ifdef BFD64 7956 sign_bits = ((bfd_vma) 1 << 32) - 1; 7957 #else 7958 sign_bits = -1; 7959 #endif 7960 else 7961 sign_bits = 0; 7962 7963 /* If we don't know that we have a 64-bit type, 7964 do two separate stores. */ 7965 if (bfd_big_endian (input_bfd)) 7966 { 7967 /* Undo what we did above. */ 7968 rel->r_offset -= 4; 7969 /* Store the sign-bits (which are most significant) 7970 first. */ 7971 low_bits = sign_bits; 7972 high_bits = value; 7973 } 7974 else 7975 { 7976 low_bits = value; 7977 high_bits = sign_bits; 7978 } 7979 bfd_put_32 (input_bfd, low_bits, 7980 contents + rel->r_offset); 7981 bfd_put_32 (input_bfd, high_bits, 7982 contents + rel->r_offset + 4); 7983 continue; 7984 } 7985 7986 /* Actually perform the relocation. */ 7987 if (! mips_elf_perform_relocation (info, howto, rel, value, 7988 input_bfd, input_section, 7989 contents, require_jalx)) 7990 return FALSE; 7991 } 7992 7993 return TRUE; 7994 } 7995 7996 /* If NAME is one of the special IRIX6 symbols defined by the linker, 7997 adjust it appropriately now. */ 7998 7999 static void 8000 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED, 8001 const char *name, Elf_Internal_Sym *sym) 8002 { 8003 /* The linker script takes care of providing names and values for 8004 these, but we must place them into the right sections. */ 8005 static const char* const text_section_symbols[] = { 8006 "_ftext", 8007 "_etext", 8008 "__dso_displacement", 8009 "__elf_header", 8010 "__program_header_table", 8011 NULL 8012 }; 8013 8014 static const char* const data_section_symbols[] = { 8015 "_fdata", 8016 "_edata", 8017 "_end", 8018 "_fbss", 8019 NULL 8020 }; 8021 8022 const char* const *p; 8023 int i; 8024 8025 for (i = 0; i < 2; ++i) 8026 for (p = (i == 0) ? text_section_symbols : data_section_symbols; 8027 *p; 8028 ++p) 8029 if (strcmp (*p, name) == 0) 8030 { 8031 /* All of these symbols are given type STT_SECTION by the 8032 IRIX6 linker. */ 8033 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 8034 sym->st_other = STO_PROTECTED; 8035 8036 /* The IRIX linker puts these symbols in special sections. */ 8037 if (i == 0) 8038 sym->st_shndx = SHN_MIPS_TEXT; 8039 else 8040 sym->st_shndx = SHN_MIPS_DATA; 8041 8042 break; 8043 } 8044 } 8045 8046 /* Finish up dynamic symbol handling. We set the contents of various 8047 dynamic sections here. */ 8048 8049 bfd_boolean 8050 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, 8051 struct bfd_link_info *info, 8052 struct elf_link_hash_entry *h, 8053 Elf_Internal_Sym *sym) 8054 { 8055 bfd *dynobj; 8056 asection *sgot; 8057 struct mips_got_info *g, *gg; 8058 const char *name; 8059 int idx; 8060 struct mips_elf_link_hash_table *htab; 8061 8062 htab = mips_elf_hash_table (info); 8063 dynobj = elf_hash_table (info)->dynobj; 8064 8065 if (h->plt.offset != MINUS_ONE) 8066 { 8067 asection *s; 8068 bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE]; 8069 8070 /* This symbol has a stub. Set it up. */ 8071 8072 BFD_ASSERT (h->dynindx != -1); 8073 8074 s = bfd_get_section_by_name (dynobj, 8075 MIPS_ELF_STUB_SECTION_NAME (dynobj)); 8076 BFD_ASSERT (s != NULL); 8077 8078 BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE) 8079 || (h->dynindx <= 0xffff)); 8080 8081 /* Values up to 2^31 - 1 are allowed. Larger values would cause 8082 sign extension at runtime in the stub, resulting in a negative 8083 index value. */ 8084 if (h->dynindx & ~0x7fffffff) 8085 return FALSE; 8086 8087 /* Fill the stub. */ 8088 idx = 0; 8089 bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx); 8090 idx += 4; 8091 bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx); 8092 idx += 4; 8093 if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE) 8094 { 8095 bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff), 8096 stub + idx); 8097 idx += 4; 8098 } 8099 bfd_put_32 (output_bfd, STUB_JALR, stub + idx); 8100 idx += 4; 8101 8102 /* If a large stub is not required and sign extension is not a 8103 problem, then use legacy code in the stub. */ 8104 if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE) 8105 bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx); 8106 else if (h->dynindx & ~0x7fff) 8107 bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx); 8108 else 8109 bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx), 8110 stub + idx); 8111 8112 BFD_ASSERT (h->plt.offset <= s->size); 8113 memcpy (s->contents + h->plt.offset, stub, htab->function_stub_size); 8114 8115 /* Mark the symbol as undefined. plt.offset != -1 occurs 8116 only for the referenced symbol. */ 8117 sym->st_shndx = SHN_UNDEF; 8118 8119 /* The run-time linker uses the st_value field of the symbol 8120 to reset the global offset table entry for this external 8121 to its stub address when unlinking a shared object. */ 8122 sym->st_value = (s->output_section->vma + s->output_offset 8123 + h->plt.offset); 8124 } 8125 8126 BFD_ASSERT (h->dynindx != -1 8127 || h->forced_local); 8128 8129 sgot = mips_elf_got_section (dynobj, FALSE); 8130 BFD_ASSERT (sgot != NULL); 8131 BFD_ASSERT (mips_elf_section_data (sgot) != NULL); 8132 g = mips_elf_section_data (sgot)->u.got_info; 8133 BFD_ASSERT (g != NULL); 8134 8135 /* Run through the global symbol table, creating GOT entries for all 8136 the symbols that need them. */ 8137 if (g->global_gotsym != NULL 8138 && h->dynindx >= g->global_gotsym->dynindx) 8139 { 8140 bfd_vma offset; 8141 bfd_vma value; 8142 8143 value = sym->st_value; 8144 offset = mips_elf_global_got_index (dynobj, output_bfd, h, R_MIPS_GOT16, info); 8145 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset); 8146 } 8147 8148 if (g->next && h->dynindx != -1 && h->type != STT_TLS) 8149 { 8150 struct mips_got_entry e, *p; 8151 bfd_vma entry; 8152 bfd_vma offset; 8153 8154 gg = g; 8155 8156 e.abfd = output_bfd; 8157 e.symndx = -1; 8158 e.d.h = (struct mips_elf_link_hash_entry *)h; 8159 e.tls_type = 0; 8160 8161 for (g = g->next; g->next != gg; g = g->next) 8162 { 8163 if (g->got_entries 8164 && (p = (struct mips_got_entry *) htab_find (g->got_entries, 8165 &e))) 8166 { 8167 offset = p->gotidx; 8168 if (info->shared 8169 || (elf_hash_table (info)->dynamic_sections_created 8170 && p->d.h != NULL 8171 && p->d.h->root.def_dynamic 8172 && !p->d.h->root.def_regular)) 8173 { 8174 /* Create an R_MIPS_REL32 relocation for this entry. Due to 8175 the various compatibility problems, it's easier to mock 8176 up an R_MIPS_32 or R_MIPS_64 relocation and leave 8177 mips_elf_create_dynamic_relocation to calculate the 8178 appropriate addend. */ 8179 Elf_Internal_Rela rel[3]; 8180 8181 memset (rel, 0, sizeof (rel)); 8182 if (ABI_64_P (output_bfd)) 8183 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64); 8184 else 8185 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32); 8186 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset; 8187 8188 entry = 0; 8189 if (! (mips_elf_create_dynamic_relocation 8190 (output_bfd, info, rel, 8191 e.d.h, NULL, sym->st_value, &entry, sgot))) 8192 return FALSE; 8193 } 8194 else 8195 entry = sym->st_value; 8196 MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset); 8197 } 8198 } 8199 } 8200 8201 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */ 8202 name = h->root.root.string; 8203 if (strcmp (name, "_DYNAMIC") == 0 8204 || h == elf_hash_table (info)->hgot) 8205 sym->st_shndx = SHN_ABS; 8206 else if (strcmp (name, "_DYNAMIC_LINK") == 0 8207 || strcmp (name, "_DYNAMIC_LINKING") == 0) 8208 { 8209 sym->st_shndx = SHN_ABS; 8210 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 8211 sym->st_value = 1; 8212 } 8213 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd)) 8214 { 8215 sym->st_shndx = SHN_ABS; 8216 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 8217 sym->st_value = elf_gp (output_bfd); 8218 } 8219 else if (SGI_COMPAT (output_bfd)) 8220 { 8221 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0 8222 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0) 8223 { 8224 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 8225 sym->st_other = STO_PROTECTED; 8226 sym->st_value = 0; 8227 sym->st_shndx = SHN_MIPS_DATA; 8228 } 8229 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0) 8230 { 8231 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 8232 sym->st_other = STO_PROTECTED; 8233 sym->st_value = mips_elf_hash_table (info)->procedure_count; 8234 sym->st_shndx = SHN_ABS; 8235 } 8236 else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS) 8237 { 8238 if (h->type == STT_FUNC) 8239 sym->st_shndx = SHN_MIPS_TEXT; 8240 else if (h->type == STT_OBJECT) 8241 sym->st_shndx = SHN_MIPS_DATA; 8242 } 8243 } 8244 8245 /* Handle the IRIX6-specific symbols. */ 8246 if (IRIX_COMPAT (output_bfd) == ict_irix6) 8247 mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym); 8248 8249 if (! info->shared) 8250 { 8251 if (! mips_elf_hash_table (info)->use_rld_obj_head 8252 && (strcmp (name, "__rld_map") == 0 8253 || strcmp (name, "__RLD_MAP") == 0)) 8254 { 8255 asection *s = bfd_get_section_by_name (dynobj, ".rld_map"); 8256 BFD_ASSERT (s != NULL); 8257 sym->st_value = s->output_section->vma + s->output_offset; 8258 bfd_put_32 (output_bfd, 0, s->contents); 8259 if (mips_elf_hash_table (info)->rld_value == 0) 8260 mips_elf_hash_table (info)->rld_value = sym->st_value; 8261 } 8262 else if (mips_elf_hash_table (info)->use_rld_obj_head 8263 && strcmp (name, "__rld_obj_head") == 0) 8264 { 8265 /* IRIX6 does not use a .rld_map section. */ 8266 if (IRIX_COMPAT (output_bfd) == ict_irix5 8267 || IRIX_COMPAT (output_bfd) == ict_none) 8268 BFD_ASSERT (bfd_get_section_by_name (dynobj, ".rld_map") 8269 != NULL); 8270 mips_elf_hash_table (info)->rld_value = sym->st_value; 8271 } 8272 } 8273 8274 /* If this is a mips16 symbol, force the value to be even. */ 8275 if (sym->st_other == STO_MIPS16) 8276 sym->st_value &= ~1; 8277 8278 return TRUE; 8279 } 8280 8281 /* Likewise, for VxWorks. */ 8282 8283 bfd_boolean 8284 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd, 8285 struct bfd_link_info *info, 8286 struct elf_link_hash_entry *h, 8287 Elf_Internal_Sym *sym) 8288 { 8289 bfd *dynobj; 8290 asection *sgot; 8291 struct mips_got_info *g; 8292 struct mips_elf_link_hash_table *htab; 8293 8294 htab = mips_elf_hash_table (info); 8295 dynobj = elf_hash_table (info)->dynobj; 8296 8297 if (h->plt.offset != (bfd_vma) -1) 8298 { 8299 bfd_byte *loc; 8300 bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset; 8301 Elf_Internal_Rela rel; 8302 static const bfd_vma *plt_entry; 8303 8304 BFD_ASSERT (h->dynindx != -1); 8305 BFD_ASSERT (htab->splt != NULL); 8306 BFD_ASSERT (h->plt.offset <= htab->splt->size); 8307 8308 /* Calculate the address of the .plt entry. */ 8309 plt_address = (htab->splt->output_section->vma 8310 + htab->splt->output_offset 8311 + h->plt.offset); 8312 8313 /* Calculate the index of the entry. */ 8314 plt_index = ((h->plt.offset - htab->plt_header_size) 8315 / htab->plt_entry_size); 8316 8317 /* Calculate the address of the .got.plt entry. */ 8318 got_address = (htab->sgotplt->output_section->vma 8319 + htab->sgotplt->output_offset 8320 + plt_index * 4); 8321 8322 /* Calculate the offset of the .got.plt entry from 8323 _GLOBAL_OFFSET_TABLE_. */ 8324 got_offset = mips_elf_gotplt_index (info, h); 8325 8326 /* Calculate the offset for the branch at the start of the PLT 8327 entry. The branch jumps to the beginning of .plt. */ 8328 branch_offset = -(h->plt.offset / 4 + 1) & 0xffff; 8329 8330 /* Fill in the initial value of the .got.plt entry. */ 8331 bfd_put_32 (output_bfd, plt_address, 8332 htab->sgotplt->contents + plt_index * 4); 8333 8334 /* Find out where the .plt entry should go. */ 8335 loc = htab->splt->contents + h->plt.offset; 8336 8337 if (info->shared) 8338 { 8339 plt_entry = mips_vxworks_shared_plt_entry; 8340 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc); 8341 bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4); 8342 } 8343 else 8344 { 8345 bfd_vma got_address_high, got_address_low; 8346 8347 plt_entry = mips_vxworks_exec_plt_entry; 8348 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff; 8349 got_address_low = got_address & 0xffff; 8350 8351 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc); 8352 bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4); 8353 bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8); 8354 bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12); 8355 bfd_put_32 (output_bfd, plt_entry[4], loc + 16); 8356 bfd_put_32 (output_bfd, plt_entry[5], loc + 20); 8357 bfd_put_32 (output_bfd, plt_entry[6], loc + 24); 8358 bfd_put_32 (output_bfd, plt_entry[7], loc + 28); 8359 8360 loc = (htab->srelplt2->contents 8361 + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela)); 8362 8363 /* Emit a relocation for the .got.plt entry. */ 8364 rel.r_offset = got_address; 8365 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32); 8366 rel.r_addend = h->plt.offset; 8367 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 8368 8369 /* Emit a relocation for the lui of %hi(<.got.plt slot>). */ 8370 loc += sizeof (Elf32_External_Rela); 8371 rel.r_offset = plt_address + 8; 8372 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16); 8373 rel.r_addend = got_offset; 8374 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 8375 8376 /* Emit a relocation for the addiu of %lo(<.got.plt slot>). */ 8377 loc += sizeof (Elf32_External_Rela); 8378 rel.r_offset += 4; 8379 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16); 8380 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 8381 } 8382 8383 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */ 8384 loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela); 8385 rel.r_offset = got_address; 8386 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT); 8387 rel.r_addend = 0; 8388 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 8389 8390 if (!h->def_regular) 8391 sym->st_shndx = SHN_UNDEF; 8392 } 8393 8394 BFD_ASSERT (h->dynindx != -1 || h->forced_local); 8395 8396 sgot = mips_elf_got_section (dynobj, FALSE); 8397 BFD_ASSERT (sgot != NULL); 8398 BFD_ASSERT (mips_elf_section_data (sgot) != NULL); 8399 g = mips_elf_section_data (sgot)->u.got_info; 8400 BFD_ASSERT (g != NULL); 8401 8402 /* See if this symbol has an entry in the GOT. */ 8403 if (g->global_gotsym != NULL 8404 && h->dynindx >= g->global_gotsym->dynindx) 8405 { 8406 bfd_vma offset; 8407 Elf_Internal_Rela outrel; 8408 bfd_byte *loc; 8409 asection *s; 8410 8411 /* Install the symbol value in the GOT. */ 8412 offset = mips_elf_global_got_index (dynobj, output_bfd, h, 8413 R_MIPS_GOT16, info); 8414 MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset); 8415 8416 /* Add a dynamic relocation for it. */ 8417 s = mips_elf_rel_dyn_section (info, FALSE); 8418 loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela)); 8419 outrel.r_offset = (sgot->output_section->vma 8420 + sgot->output_offset 8421 + offset); 8422 outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32); 8423 outrel.r_addend = 0; 8424 bfd_elf32_swap_reloca_out (dynobj, &outrel, loc); 8425 } 8426 8427 /* Emit a copy reloc, if needed. */ 8428 if (h->needs_copy) 8429 { 8430 Elf_Internal_Rela rel; 8431 8432 BFD_ASSERT (h->dynindx != -1); 8433 8434 rel.r_offset = (h->root.u.def.section->output_section->vma 8435 + h->root.u.def.section->output_offset 8436 + h->root.u.def.value); 8437 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY); 8438 rel.r_addend = 0; 8439 bfd_elf32_swap_reloca_out (output_bfd, &rel, 8440 htab->srelbss->contents 8441 + (htab->srelbss->reloc_count 8442 * sizeof (Elf32_External_Rela))); 8443 ++htab->srelbss->reloc_count; 8444 } 8445 8446 /* If this is a mips16 symbol, force the value to be even. */ 8447 if (sym->st_other == STO_MIPS16) 8448 sym->st_value &= ~1; 8449 8450 return TRUE; 8451 } 8452 8453 /* Install the PLT header for a VxWorks executable and finalize the 8454 contents of .rela.plt.unloaded. */ 8455 8456 static void 8457 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info) 8458 { 8459 Elf_Internal_Rela rela; 8460 bfd_byte *loc; 8461 bfd_vma got_value, got_value_high, got_value_low, plt_address; 8462 static const bfd_vma *plt_entry; 8463 struct mips_elf_link_hash_table *htab; 8464 8465 htab = mips_elf_hash_table (info); 8466 plt_entry = mips_vxworks_exec_plt0_entry; 8467 8468 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */ 8469 got_value = (htab->root.hgot->root.u.def.section->output_section->vma 8470 + htab->root.hgot->root.u.def.section->output_offset 8471 + htab->root.hgot->root.u.def.value); 8472 8473 got_value_high = ((got_value + 0x8000) >> 16) & 0xffff; 8474 got_value_low = got_value & 0xffff; 8475 8476 /* Calculate the address of the PLT header. */ 8477 plt_address = htab->splt->output_section->vma + htab->splt->output_offset; 8478 8479 /* Install the PLT header. */ 8480 loc = htab->splt->contents; 8481 bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc); 8482 bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4); 8483 bfd_put_32 (output_bfd, plt_entry[2], loc + 8); 8484 bfd_put_32 (output_bfd, plt_entry[3], loc + 12); 8485 bfd_put_32 (output_bfd, plt_entry[4], loc + 16); 8486 bfd_put_32 (output_bfd, plt_entry[5], loc + 20); 8487 8488 /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_). */ 8489 loc = htab->srelplt2->contents; 8490 rela.r_offset = plt_address; 8491 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16); 8492 rela.r_addend = 0; 8493 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); 8494 loc += sizeof (Elf32_External_Rela); 8495 8496 /* Output the relocation for the following addiu of 8497 %lo(_GLOBAL_OFFSET_TABLE_). */ 8498 rela.r_offset += 4; 8499 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16); 8500 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); 8501 loc += sizeof (Elf32_External_Rela); 8502 8503 /* Fix up the remaining relocations. They may have the wrong 8504 symbol index for _G_O_T_ or _P_L_T_ depending on the order 8505 in which symbols were output. */ 8506 while (loc < htab->srelplt2->contents + htab->srelplt2->size) 8507 { 8508 Elf_Internal_Rela rel; 8509 8510 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel); 8511 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32); 8512 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 8513 loc += sizeof (Elf32_External_Rela); 8514 8515 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel); 8516 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16); 8517 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 8518 loc += sizeof (Elf32_External_Rela); 8519 8520 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel); 8521 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16); 8522 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); 8523 loc += sizeof (Elf32_External_Rela); 8524 } 8525 } 8526 8527 /* Install the PLT header for a VxWorks shared library. */ 8528 8529 static void 8530 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info) 8531 { 8532 unsigned int i; 8533 struct mips_elf_link_hash_table *htab; 8534 8535 htab = mips_elf_hash_table (info); 8536 8537 /* We just need to copy the entry byte-by-byte. */ 8538 for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++) 8539 bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i], 8540 htab->splt->contents + i * 4); 8541 } 8542 8543 /* Finish up the dynamic sections. */ 8544 8545 bfd_boolean 8546 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, 8547 struct bfd_link_info *info) 8548 { 8549 bfd *dynobj; 8550 asection *sdyn; 8551 asection *sgot; 8552 struct mips_got_info *gg, *g; 8553 struct mips_elf_link_hash_table *htab; 8554 8555 htab = mips_elf_hash_table (info); 8556 dynobj = elf_hash_table (info)->dynobj; 8557 8558 sdyn = bfd_get_section_by_name (dynobj, ".dynamic"); 8559 8560 sgot = mips_elf_got_section (dynobj, FALSE); 8561 if (sgot == NULL) 8562 gg = g = NULL; 8563 else 8564 { 8565 BFD_ASSERT (mips_elf_section_data (sgot) != NULL); 8566 gg = mips_elf_section_data (sgot)->u.got_info; 8567 BFD_ASSERT (gg != NULL); 8568 g = mips_elf_got_for_ibfd (gg, output_bfd); 8569 BFD_ASSERT (g != NULL); 8570 } 8571 8572 if (elf_hash_table (info)->dynamic_sections_created) 8573 { 8574 bfd_byte *b; 8575 int dyn_to_skip = 0, dyn_skipped = 0; 8576 8577 BFD_ASSERT (sdyn != NULL); 8578 BFD_ASSERT (g != NULL); 8579 8580 for (b = sdyn->contents; 8581 b < sdyn->contents + sdyn->size; 8582 b += MIPS_ELF_DYN_SIZE (dynobj)) 8583 { 8584 Elf_Internal_Dyn dyn; 8585 const char *name; 8586 size_t elemsize; 8587 asection *s; 8588 bfd_boolean swap_out_p; 8589 8590 /* Read in the current dynamic entry. */ 8591 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn); 8592 8593 /* Assume that we're going to modify it and write it out. */ 8594 swap_out_p = TRUE; 8595 8596 switch (dyn.d_tag) 8597 { 8598 case DT_RELENT: 8599 dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj); 8600 break; 8601 8602 case DT_RELAENT: 8603 BFD_ASSERT (htab->is_vxworks); 8604 dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj); 8605 break; 8606 8607 case DT_STRSZ: 8608 /* Rewrite DT_STRSZ. */ 8609 dyn.d_un.d_val = 8610 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr); 8611 break; 8612 8613 case DT_PLTGOT: 8614 name = ".got"; 8615 if (htab->is_vxworks) 8616 { 8617 /* _GLOBAL_OFFSET_TABLE_ is defined to be the beginning 8618 of the ".got" section in DYNOBJ. */ 8619 s = bfd_get_section_by_name (dynobj, name); 8620 BFD_ASSERT (s != NULL); 8621 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; 8622 } 8623 else 8624 { 8625 s = bfd_get_section_by_name (output_bfd, name); 8626 BFD_ASSERT (s != NULL); 8627 dyn.d_un.d_ptr = s->vma; 8628 } 8629 break; 8630 8631 case DT_MIPS_RLD_VERSION: 8632 dyn.d_un.d_val = 1; /* XXX */ 8633 break; 8634 8635 case DT_MIPS_FLAGS: 8636 dyn.d_un.d_val = RHF_NOTPOT; /* XXX */ 8637 break; 8638 8639 case DT_MIPS_TIME_STAMP: 8640 { 8641 time_t t; 8642 time (&t); 8643 dyn.d_un.d_val = t; 8644 } 8645 break; 8646 8647 case DT_MIPS_ICHECKSUM: 8648 /* XXX FIXME: */ 8649 swap_out_p = FALSE; 8650 break; 8651 8652 case DT_MIPS_IVERSION: 8653 /* XXX FIXME: */ 8654 swap_out_p = FALSE; 8655 break; 8656 8657 case DT_MIPS_BASE_ADDRESS: 8658 s = output_bfd->sections; 8659 BFD_ASSERT (s != NULL); 8660 dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff; 8661 break; 8662 8663 case DT_MIPS_LOCAL_GOTNO: 8664 dyn.d_un.d_val = g->local_gotno; 8665 break; 8666 8667 case DT_MIPS_UNREFEXTNO: 8668 /* The index into the dynamic symbol table which is the 8669 entry of the first external symbol that is not 8670 referenced within the same object. */ 8671 dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1; 8672 break; 8673 8674 case DT_MIPS_GOTSYM: 8675 if (gg->global_gotsym) 8676 { 8677 dyn.d_un.d_val = gg->global_gotsym->dynindx; 8678 break; 8679 } 8680 /* In case if we don't have global got symbols we default 8681 to setting DT_MIPS_GOTSYM to the same value as 8682 DT_MIPS_SYMTABNO, so we just fall through. */ 8683 8684 case DT_MIPS_SYMTABNO: 8685 name = ".dynsym"; 8686 elemsize = MIPS_ELF_SYM_SIZE (output_bfd); 8687 s = bfd_get_section_by_name (output_bfd, name); 8688 BFD_ASSERT (s != NULL); 8689 8690 dyn.d_un.d_val = s->size / elemsize; 8691 break; 8692 8693 case DT_MIPS_HIPAGENO: 8694 dyn.d_un.d_val = g->local_gotno - MIPS_RESERVED_GOTNO (info); 8695 break; 8696 8697 case DT_MIPS_RLD_MAP: 8698 dyn.d_un.d_ptr = mips_elf_hash_table (info)->rld_value; 8699 break; 8700 8701 case DT_MIPS_OPTIONS: 8702 s = (bfd_get_section_by_name 8703 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd))); 8704 dyn.d_un.d_ptr = s->vma; 8705 break; 8706 8707 case DT_RELASZ: 8708 BFD_ASSERT (htab->is_vxworks); 8709 /* The count does not include the JUMP_SLOT relocations. */ 8710 if (htab->srelplt) 8711 dyn.d_un.d_val -= htab->srelplt->size; 8712 break; 8713 8714 case DT_PLTREL: 8715 BFD_ASSERT (htab->is_vxworks); 8716 dyn.d_un.d_val = DT_RELA; 8717 break; 8718 8719 case DT_PLTRELSZ: 8720 BFD_ASSERT (htab->is_vxworks); 8721 dyn.d_un.d_val = htab->srelplt->size; 8722 break; 8723 8724 case DT_JMPREL: 8725 BFD_ASSERT (htab->is_vxworks); 8726 dyn.d_un.d_val = (htab->srelplt->output_section->vma 8727 + htab->srelplt->output_offset); 8728 break; 8729 8730 case DT_TEXTREL: 8731 /* If we didn't need any text relocations after all, delete 8732 the dynamic tag. */ 8733 if (!(info->flags & DF_TEXTREL)) 8734 { 8735 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj); 8736 swap_out_p = FALSE; 8737 } 8738 break; 8739 8740 case DT_FLAGS: 8741 /* If we didn't need any text relocations after all, clear 8742 DF_TEXTREL from DT_FLAGS. */ 8743 if (!(info->flags & DF_TEXTREL)) 8744 dyn.d_un.d_val &= ~DF_TEXTREL; 8745 else 8746 swap_out_p = FALSE; 8747 break; 8748 8749 default: 8750 swap_out_p = FALSE; 8751 break; 8752 } 8753 8754 if (swap_out_p || dyn_skipped) 8755 (*get_elf_backend_data (dynobj)->s->swap_dyn_out) 8756 (dynobj, &dyn, b - dyn_skipped); 8757 8758 if (dyn_to_skip) 8759 { 8760 dyn_skipped += dyn_to_skip; 8761 dyn_to_skip = 0; 8762 } 8763 } 8764 8765 /* Wipe out any trailing entries if we shifted down a dynamic tag. */ 8766 if (dyn_skipped > 0) 8767 memset (b - dyn_skipped, 0, dyn_skipped); 8768 } 8769 8770 if (sgot != NULL && sgot->size > 0) 8771 { 8772 if (htab->is_vxworks) 8773 { 8774 /* The first entry of the global offset table points to the 8775 ".dynamic" section. The second is initialized by the 8776 loader and contains the shared library identifier. 8777 The third is also initialized by the loader and points 8778 to the lazy resolution stub. */ 8779 MIPS_ELF_PUT_WORD (output_bfd, 8780 sdyn->output_offset + sdyn->output_section->vma, 8781 sgot->contents); 8782 MIPS_ELF_PUT_WORD (output_bfd, 0, 8783 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd)); 8784 MIPS_ELF_PUT_WORD (output_bfd, 0, 8785 sgot->contents 8786 + 2 * MIPS_ELF_GOT_SIZE (output_bfd)); 8787 } 8788 else 8789 { 8790 /* The first entry of the global offset table will be filled at 8791 runtime. The second entry will be used by some runtime loaders. 8792 This isn't the case of IRIX rld. */ 8793 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents); 8794 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000, 8795 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd)); 8796 } 8797 } 8798 8799 if (sgot != NULL) 8800 elf_section_data (sgot->output_section)->this_hdr.sh_entsize 8801 = MIPS_ELF_GOT_SIZE (output_bfd); 8802 8803 /* Generate dynamic relocations for the non-primary gots. */ 8804 if (gg != NULL && gg->next) 8805 { 8806 Elf_Internal_Rela rel[3]; 8807 bfd_vma addend = 0; 8808 8809 memset (rel, 0, sizeof (rel)); 8810 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32); 8811 8812 for (g = gg->next; g->next != gg; g = g->next) 8813 { 8814 bfd_vma index = g->next->local_gotno + g->next->global_gotno 8815 + g->next->tls_gotno; 8816 8817 MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents 8818 + index++ * MIPS_ELF_GOT_SIZE (output_bfd)); 8819 MIPS_ELF_PUT_WORD (output_bfd, 0x80000000, sgot->contents 8820 + index++ * MIPS_ELF_GOT_SIZE (output_bfd)); 8821 8822 if (! info->shared) 8823 continue; 8824 8825 while (index < g->assigned_gotno) 8826 { 8827 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset 8828 = index++ * MIPS_ELF_GOT_SIZE (output_bfd); 8829 if (!(mips_elf_create_dynamic_relocation 8830 (output_bfd, info, rel, NULL, 8831 bfd_abs_section_ptr, 8832 0, &addend, sgot))) 8833 return FALSE; 8834 BFD_ASSERT (addend == 0); 8835 } 8836 } 8837 } 8838 8839 /* The generation of dynamic relocations for the non-primary gots 8840 adds more dynamic relocations. We cannot count them until 8841 here. */ 8842 8843 if (elf_hash_table (info)->dynamic_sections_created) 8844 { 8845 bfd_byte *b; 8846 bfd_boolean swap_out_p; 8847 8848 BFD_ASSERT (sdyn != NULL); 8849 8850 for (b = sdyn->contents; 8851 b < sdyn->contents + sdyn->size; 8852 b += MIPS_ELF_DYN_SIZE (dynobj)) 8853 { 8854 Elf_Internal_Dyn dyn; 8855 asection *s; 8856 8857 /* Read in the current dynamic entry. */ 8858 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn); 8859 8860 /* Assume that we're going to modify it and write it out. */ 8861 swap_out_p = TRUE; 8862 8863 switch (dyn.d_tag) 8864 { 8865 case DT_RELSZ: 8866 /* Reduce DT_RELSZ to account for any relocations we 8867 decided not to make. This is for the n64 irix rld, 8868 which doesn't seem to apply any relocations if there 8869 are trailing null entries. */ 8870 if (SGI_COMPAT (output_bfd)) 8871 { 8872 s = mips_elf_rel_dyn_section (info, FALSE); 8873 dyn.d_un.d_val = (s->reloc_count 8874 * (ABI_64_P (output_bfd) 8875 ? sizeof (Elf64_Mips_External_Rel) 8876 : sizeof (Elf32_External_Rel))); 8877 } 8878 else 8879 swap_out_p = FALSE; 8880 break; 8881 8882 default: 8883 swap_out_p = FALSE; 8884 break; 8885 } 8886 8887 if (swap_out_p) 8888 (*get_elf_backend_data (dynobj)->s->swap_dyn_out) 8889 (dynobj, &dyn, b); 8890 } 8891 } 8892 8893 { 8894 asection *s; 8895 Elf32_compact_rel cpt; 8896 8897 if (SGI_COMPAT (output_bfd)) 8898 { 8899 /* Write .compact_rel section out. */ 8900 s = bfd_get_section_by_name (dynobj, ".compact_rel"); 8901 if (s != NULL) 8902 { 8903 cpt.id1 = 1; 8904 cpt.num = s->reloc_count; 8905 cpt.id2 = 2; 8906 cpt.offset = (s->output_section->filepos 8907 + sizeof (Elf32_External_compact_rel)); 8908 cpt.reserved0 = 0; 8909 cpt.reserved1 = 0; 8910 bfd_elf32_swap_compact_rel_out (output_bfd, &cpt, 8911 ((Elf32_External_compact_rel *) 8912 s->contents)); 8913 8914 /* Clean up a dummy stub function entry in .text. */ 8915 s = bfd_get_section_by_name (dynobj, 8916 MIPS_ELF_STUB_SECTION_NAME (dynobj)); 8917 if (s != NULL) 8918 { 8919 file_ptr dummy_offset; 8920 8921 BFD_ASSERT (s->size >= htab->function_stub_size); 8922 dummy_offset = s->size - htab->function_stub_size; 8923 memset (s->contents + dummy_offset, 0, 8924 htab->function_stub_size); 8925 } 8926 } 8927 } 8928 8929 /* The psABI says that the dynamic relocations must be sorted in 8930 increasing order of r_symndx. The VxWorks EABI doesn't require 8931 this, and because the code below handles REL rather than RELA 8932 relocations, using it for VxWorks would be outright harmful. */ 8933 if (!htab->is_vxworks) 8934 { 8935 s = mips_elf_rel_dyn_section (info, FALSE); 8936 if (s != NULL 8937 && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd)) 8938 { 8939 reldyn_sorting_bfd = output_bfd; 8940 8941 if (ABI_64_P (output_bfd)) 8942 qsort ((Elf64_External_Rel *) s->contents + 1, 8943 s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel), 8944 sort_dynamic_relocs_64); 8945 else 8946 qsort ((Elf32_External_Rel *) s->contents + 1, 8947 s->reloc_count - 1, sizeof (Elf32_External_Rel), 8948 sort_dynamic_relocs); 8949 } 8950 } 8951 } 8952 8953 if (htab->is_vxworks && htab->splt->size > 0) 8954 { 8955 if (info->shared) 8956 mips_vxworks_finish_shared_plt (output_bfd, info); 8957 else 8958 mips_vxworks_finish_exec_plt (output_bfd, info); 8959 } 8960 return TRUE; 8961 } 8962 8963 8964 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags. */ 8965 8966 static void 8967 mips_set_isa_flags (bfd *abfd) 8968 { 8969 flagword val; 8970 8971 switch (bfd_get_mach (abfd)) 8972 { 8973 default: 8974 case bfd_mach_mips3000: 8975 val = E_MIPS_ARCH_1; 8976 break; 8977 8978 case bfd_mach_mips3900: 8979 val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900; 8980 break; 8981 8982 case bfd_mach_mips6000: 8983 val = E_MIPS_ARCH_2; 8984 break; 8985 8986 case bfd_mach_mips4000: 8987 case bfd_mach_mips4300: 8988 case bfd_mach_mips4400: 8989 case bfd_mach_mips4600: 8990 val = E_MIPS_ARCH_3; 8991 break; 8992 8993 case bfd_mach_mips4010: 8994 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010; 8995 break; 8996 8997 case bfd_mach_mips4100: 8998 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100; 8999 break; 9000 9001 case bfd_mach_mips4111: 9002 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111; 9003 break; 9004 9005 case bfd_mach_mips4120: 9006 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120; 9007 break; 9008 9009 case bfd_mach_mips4650: 9010 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650; 9011 break; 9012 9013 case bfd_mach_mips5400: 9014 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400; 9015 break; 9016 9017 case bfd_mach_mips5500: 9018 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500; 9019 break; 9020 9021 case bfd_mach_mips9000: 9022 val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000; 9023 break; 9024 9025 case bfd_mach_mips5000: 9026 case bfd_mach_mips7000: 9027 case bfd_mach_mips8000: 9028 case bfd_mach_mips10000: 9029 case bfd_mach_mips12000: 9030 val = E_MIPS_ARCH_4; 9031 break; 9032 9033 case bfd_mach_mips5: 9034 val = E_MIPS_ARCH_5; 9035 break; 9036 9037 case bfd_mach_mips_sb1: 9038 val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1; 9039 break; 9040 9041 case bfd_mach_mips_octeon: 9042 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON; 9043 break; 9044 9045 case bfd_mach_mipsisa32: 9046 val = E_MIPS_ARCH_32; 9047 break; 9048 9049 case bfd_mach_mipsisa64: 9050 val = E_MIPS_ARCH_64; 9051 break; 9052 9053 case bfd_mach_mipsisa32r2: 9054 val = E_MIPS_ARCH_32R2; 9055 break; 9056 9057 case bfd_mach_mipsisa64r2: 9058 val = E_MIPS_ARCH_64R2; 9059 break; 9060 } 9061 elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH); 9062 elf_elfheader (abfd)->e_flags |= val; 9063 9064 } 9065 9066 9067 /* The final processing done just before writing out a MIPS ELF object 9068 file. This gets the MIPS architecture right based on the machine 9069 number. This is used by both the 32-bit and the 64-bit ABI. */ 9070 9071 void 9072 _bfd_mips_elf_final_write_processing (bfd *abfd, 9073 bfd_boolean linker ATTRIBUTE_UNUSED) 9074 { 9075 unsigned int i; 9076 Elf_Internal_Shdr **hdrpp; 9077 const char *name; 9078 asection *sec; 9079 9080 /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former 9081 is nonzero. This is for compatibility with old objects, which used 9082 a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH. */ 9083 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0) 9084 mips_set_isa_flags (abfd); 9085 9086 /* Set the sh_info field for .gptab sections and other appropriate 9087 info for each special section. */ 9088 for (i = 1, hdrpp = elf_elfsections (abfd) + 1; 9089 i < elf_numsections (abfd); 9090 i++, hdrpp++) 9091 { 9092 switch ((*hdrpp)->sh_type) 9093 { 9094 case SHT_MIPS_MSYM: 9095 case SHT_MIPS_LIBLIST: 9096 sec = bfd_get_section_by_name (abfd, ".dynstr"); 9097 if (sec != NULL) 9098 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 9099 break; 9100 9101 case SHT_MIPS_GPTAB: 9102 BFD_ASSERT ((*hdrpp)->bfd_section != NULL); 9103 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section); 9104 BFD_ASSERT (name != NULL 9105 && strncmp (name, ".gptab.", sizeof ".gptab." - 1) == 0); 9106 sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1); 9107 BFD_ASSERT (sec != NULL); 9108 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx; 9109 break; 9110 9111 case SHT_MIPS_CONTENT: 9112 BFD_ASSERT ((*hdrpp)->bfd_section != NULL); 9113 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section); 9114 BFD_ASSERT (name != NULL 9115 && strncmp (name, ".MIPS.content", 9116 sizeof ".MIPS.content" - 1) == 0); 9117 sec = bfd_get_section_by_name (abfd, 9118 name + sizeof ".MIPS.content" - 1); 9119 BFD_ASSERT (sec != NULL); 9120 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 9121 break; 9122 9123 case SHT_MIPS_SYMBOL_LIB: 9124 sec = bfd_get_section_by_name (abfd, ".dynsym"); 9125 if (sec != NULL) 9126 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 9127 sec = bfd_get_section_by_name (abfd, ".liblist"); 9128 if (sec != NULL) 9129 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx; 9130 break; 9131 9132 case SHT_MIPS_EVENTS: 9133 BFD_ASSERT ((*hdrpp)->bfd_section != NULL); 9134 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section); 9135 BFD_ASSERT (name != NULL); 9136 if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0) 9137 sec = bfd_get_section_by_name (abfd, 9138 name + sizeof ".MIPS.events" - 1); 9139 else 9140 { 9141 BFD_ASSERT (strncmp (name, ".MIPS.post_rel", 9142 sizeof ".MIPS.post_rel" - 1) == 0); 9143 sec = bfd_get_section_by_name (abfd, 9144 (name 9145 + sizeof ".MIPS.post_rel" - 1)); 9146 } 9147 BFD_ASSERT (sec != NULL); 9148 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx; 9149 break; 9150 9151 } 9152 } 9153 } 9154 9155 /* When creating an IRIX5 executable, we need REGINFO and RTPROC 9156 segments. */ 9157 9158 int 9159 _bfd_mips_elf_additional_program_headers (bfd *abfd) 9160 { 9161 asection *s; 9162 int ret = 0; 9163 9164 /* See if we need a PT_MIPS_REGINFO segment. */ 9165 s = bfd_get_section_by_name (abfd, ".reginfo"); 9166 if (s && (s->flags & SEC_LOAD)) 9167 ++ret; 9168 9169 /* See if we need a PT_MIPS_OPTIONS segment. */ 9170 if (IRIX_COMPAT (abfd) == ict_irix6 9171 && bfd_get_section_by_name (abfd, 9172 MIPS_ELF_OPTIONS_SECTION_NAME (abfd))) 9173 ++ret; 9174 9175 /* See if we need a PT_MIPS_RTPROC segment. */ 9176 if (IRIX_COMPAT (abfd) == ict_irix5 9177 && bfd_get_section_by_name (abfd, ".dynamic") 9178 && bfd_get_section_by_name (abfd, ".mdebug")) 9179 ++ret; 9180 9181 return ret; 9182 } 9183 9184 /* Modify the segment map for an IRIX5 executable. */ 9185 9186 bfd_boolean 9187 _bfd_mips_elf_modify_segment_map (bfd *abfd, 9188 struct bfd_link_info *info ATTRIBUTE_UNUSED) 9189 { 9190 asection *s; 9191 struct elf_segment_map *m, **pm; 9192 bfd_size_type amt; 9193 9194 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO 9195 segment. */ 9196 s = bfd_get_section_by_name (abfd, ".reginfo"); 9197 if (s != NULL && (s->flags & SEC_LOAD) != 0) 9198 { 9199 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next) 9200 if (m->p_type == PT_MIPS_REGINFO) 9201 break; 9202 if (m == NULL) 9203 { 9204 amt = sizeof *m; 9205 m = bfd_zalloc (abfd, amt); 9206 if (m == NULL) 9207 return FALSE; 9208 9209 m->p_type = PT_MIPS_REGINFO; 9210 m->count = 1; 9211 m->sections[0] = s; 9212 9213 /* We want to put it after the PHDR and INTERP segments. */ 9214 pm = &elf_tdata (abfd)->segment_map; 9215 while (*pm != NULL 9216 && ((*pm)->p_type == PT_PHDR 9217 || (*pm)->p_type == PT_INTERP)) 9218 pm = &(*pm)->next; 9219 9220 m->next = *pm; 9221 *pm = m; 9222 } 9223 } 9224 9225 /* For IRIX 6, we don't have .mdebug sections, nor does anything but 9226 .dynamic end up in PT_DYNAMIC. However, we do have to insert a 9227 PT_MIPS_OPTIONS segment immediately following the program header 9228 table. */ 9229 if (NEWABI_P (abfd) 9230 /* On non-IRIX6 new abi, we'll have already created a segment 9231 for this section, so don't create another. I'm not sure this 9232 is not also the case for IRIX 6, but I can't test it right 9233 now. */ 9234 && IRIX_COMPAT (abfd) == ict_irix6) 9235 { 9236 for (s = abfd->sections; s; s = s->next) 9237 if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS) 9238 break; 9239 9240 if (s) 9241 { 9242 struct elf_segment_map *options_segment; 9243 9244 pm = &elf_tdata (abfd)->segment_map; 9245 while (*pm != NULL 9246 && ((*pm)->p_type == PT_PHDR 9247 || (*pm)->p_type == PT_INTERP)) 9248 pm = &(*pm)->next; 9249 9250 amt = sizeof (struct elf_segment_map); 9251 options_segment = bfd_zalloc (abfd, amt); 9252 options_segment->next = *pm; 9253 options_segment->p_type = PT_MIPS_OPTIONS; 9254 options_segment->p_flags = PF_R; 9255 options_segment->p_flags_valid = TRUE; 9256 options_segment->count = 1; 9257 options_segment->sections[0] = s; 9258 *pm = options_segment; 9259 } 9260 } 9261 else 9262 { 9263 if (IRIX_COMPAT (abfd) == ict_irix5) 9264 { 9265 /* If there are .dynamic and .mdebug sections, we make a room 9266 for the RTPROC header. FIXME: Rewrite without section names. */ 9267 if (bfd_get_section_by_name (abfd, ".interp") == NULL 9268 && bfd_get_section_by_name (abfd, ".dynamic") != NULL 9269 && bfd_get_section_by_name (abfd, ".mdebug") != NULL) 9270 { 9271 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next) 9272 if (m->p_type == PT_MIPS_RTPROC) 9273 break; 9274 if (m == NULL) 9275 { 9276 amt = sizeof *m; 9277 m = bfd_zalloc (abfd, amt); 9278 if (m == NULL) 9279 return FALSE; 9280 9281 m->p_type = PT_MIPS_RTPROC; 9282 9283 s = bfd_get_section_by_name (abfd, ".rtproc"); 9284 if (s == NULL) 9285 { 9286 m->count = 0; 9287 m->p_flags = 0; 9288 m->p_flags_valid = 1; 9289 } 9290 else 9291 { 9292 m->count = 1; 9293 m->sections[0] = s; 9294 } 9295 9296 /* We want to put it after the DYNAMIC segment. */ 9297 pm = &elf_tdata (abfd)->segment_map; 9298 while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC) 9299 pm = &(*pm)->next; 9300 if (*pm != NULL) 9301 pm = &(*pm)->next; 9302 9303 m->next = *pm; 9304 *pm = m; 9305 } 9306 } 9307 } 9308 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic, 9309 .dynstr, .dynsym, and .hash sections, and everything in 9310 between. */ 9311 for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; 9312 pm = &(*pm)->next) 9313 if ((*pm)->p_type == PT_DYNAMIC) 9314 break; 9315 m = *pm; 9316 if (m != NULL && IRIX_COMPAT (abfd) == ict_none) 9317 { 9318 /* For a normal mips executable the permissions for the PT_DYNAMIC 9319 segment are read, write and execute. We do that here since 9320 the code in elf.c sets only the read permission. This matters 9321 sometimes for the dynamic linker. */ 9322 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL) 9323 { 9324 m->p_flags = PF_R | PF_W | PF_X; 9325 m->p_flags_valid = 1; 9326 } 9327 } 9328 if (m != NULL 9329 && m->count == 1 && strcmp (m->sections[0]->name, ".dynamic") == 0) 9330 { 9331 static const char *sec_names[] = 9332 { 9333 ".dynamic", ".dynstr", ".dynsym", ".hash" 9334 }; 9335 bfd_vma low, high; 9336 unsigned int i, c; 9337 struct elf_segment_map *n; 9338 9339 low = ~(bfd_vma) 0; 9340 high = 0; 9341 for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++) 9342 { 9343 s = bfd_get_section_by_name (abfd, sec_names[i]); 9344 if (s != NULL && (s->flags & SEC_LOAD) != 0) 9345 { 9346 bfd_size_type sz; 9347 9348 if (low > s->vma) 9349 low = s->vma; 9350 sz = s->size; 9351 if (high < s->vma + sz) 9352 high = s->vma + sz; 9353 } 9354 } 9355 9356 c = 0; 9357 for (s = abfd->sections; s != NULL; s = s->next) 9358 if ((s->flags & SEC_LOAD) != 0 9359 && s->vma >= low 9360 && s->vma + s->size <= high) 9361 ++c; 9362 9363 amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *); 9364 n = bfd_zalloc (abfd, amt); 9365 if (n == NULL) 9366 return FALSE; 9367 *n = *m; 9368 n->count = c; 9369 9370 i = 0; 9371 for (s = abfd->sections; s != NULL; s = s->next) 9372 { 9373 if ((s->flags & SEC_LOAD) != 0 9374 && s->vma >= low 9375 && s->vma + s->size <= high) 9376 { 9377 n->sections[i] = s; 9378 ++i; 9379 } 9380 } 9381 9382 *pm = n; 9383 } 9384 } 9385 9386 return TRUE; 9387 } 9388 9389 /* Return the section that should be marked against GC for a given 9390 relocation. */ 9391 9392 asection * 9393 _bfd_mips_elf_gc_mark_hook (asection *sec, 9394 struct bfd_link_info *info ATTRIBUTE_UNUSED, 9395 Elf_Internal_Rela *rel, 9396 struct elf_link_hash_entry *h, 9397 Elf_Internal_Sym *sym) 9398 { 9399 /* ??? Do mips16 stub sections need to be handled special? */ 9400 9401 if (h != NULL) 9402 { 9403 switch (ELF_R_TYPE (sec->owner, rel->r_info)) 9404 { 9405 case R_MIPS_GNU_VTINHERIT: 9406 case R_MIPS_GNU_VTENTRY: 9407 break; 9408 9409 default: 9410 switch (h->root.type) 9411 { 9412 case bfd_link_hash_defined: 9413 case bfd_link_hash_defweak: 9414 return h->root.u.def.section; 9415 9416 case bfd_link_hash_common: 9417 return h->root.u.c.p->section; 9418 9419 default: 9420 break; 9421 } 9422 } 9423 } 9424 else 9425 return bfd_section_from_elf_index (sec->owner, sym->st_shndx); 9426 9427 return NULL; 9428 } 9429 9430 /* Update the got entry reference counts for the section being removed. */ 9431 9432 bfd_boolean 9433 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED, 9434 struct bfd_link_info *info ATTRIBUTE_UNUSED, 9435 asection *sec ATTRIBUTE_UNUSED, 9436 const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED) 9437 { 9438 #if 0 9439 Elf_Internal_Shdr *symtab_hdr; 9440 struct elf_link_hash_entry **sym_hashes; 9441 bfd_signed_vma *local_got_refcounts; 9442 const Elf_Internal_Rela *rel, *relend; 9443 unsigned long r_symndx; 9444 struct elf_link_hash_entry *h; 9445 9446 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 9447 sym_hashes = elf_sym_hashes (abfd); 9448 local_got_refcounts = elf_local_got_refcounts (abfd); 9449 9450 relend = relocs + sec->reloc_count; 9451 for (rel = relocs; rel < relend; rel++) 9452 switch (ELF_R_TYPE (abfd, rel->r_info)) 9453 { 9454 case R_MIPS_GOT16: 9455 case R_MIPS_CALL16: 9456 case R_MIPS_CALL_HI16: 9457 case R_MIPS_CALL_LO16: 9458 case R_MIPS_GOT_HI16: 9459 case R_MIPS_GOT_LO16: 9460 case R_MIPS_GOT_DISP: 9461 case R_MIPS_GOT_PAGE: 9462 case R_MIPS_GOT_OFST: 9463 /* ??? It would seem that the existing MIPS code does no sort 9464 of reference counting or whatnot on its GOT and PLT entries, 9465 so it is not possible to garbage collect them at this time. */ 9466 break; 9467 9468 default: 9469 break; 9470 } 9471 #endif 9472 9473 return TRUE; 9474 } 9475 9476 /* Copy data from a MIPS ELF indirect symbol to its direct symbol, 9477 hiding the old indirect symbol. Process additional relocation 9478 information. Also called for weakdefs, in which case we just let 9479 _bfd_elf_link_hash_copy_indirect copy the flags for us. */ 9480 9481 void 9482 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info, 9483 struct elf_link_hash_entry *dir, 9484 struct elf_link_hash_entry *ind) 9485 { 9486 struct mips_elf_link_hash_entry *dirmips, *indmips; 9487 9488 _bfd_elf_link_hash_copy_indirect (info, dir, ind); 9489 9490 if (ind->root.type != bfd_link_hash_indirect) 9491 return; 9492 9493 dirmips = (struct mips_elf_link_hash_entry *) dir; 9494 indmips = (struct mips_elf_link_hash_entry *) ind; 9495 dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs; 9496 if (indmips->readonly_reloc) 9497 dirmips->readonly_reloc = TRUE; 9498 if (indmips->no_fn_stub) 9499 dirmips->no_fn_stub = TRUE; 9500 9501 if (dirmips->tls_type == 0) 9502 dirmips->tls_type = indmips->tls_type; 9503 } 9504 9505 void 9506 _bfd_mips_elf_hide_symbol (struct bfd_link_info *info, 9507 struct elf_link_hash_entry *entry, 9508 bfd_boolean force_local) 9509 { 9510 bfd *dynobj; 9511 asection *got; 9512 struct mips_got_info *g; 9513 struct mips_elf_link_hash_entry *h; 9514 9515 h = (struct mips_elf_link_hash_entry *) entry; 9516 if (h->forced_local) 9517 return; 9518 h->forced_local = force_local; 9519 9520 dynobj = elf_hash_table (info)->dynobj; 9521 if (dynobj != NULL && force_local && h->root.type != STT_TLS 9522 && (got = mips_elf_got_section (dynobj, FALSE)) != NULL 9523 && (g = mips_elf_section_data (got)->u.got_info) != NULL) 9524 { 9525 if (g->next) 9526 { 9527 struct mips_got_entry e; 9528 struct mips_got_info *gg = g; 9529 9530 /* Since we're turning what used to be a global symbol into a 9531 local one, bump up the number of local entries of each GOT 9532 that had an entry for it. This will automatically decrease 9533 the number of global entries, since global_gotno is actually 9534 the upper limit of global entries. */ 9535 e.abfd = dynobj; 9536 e.symndx = -1; 9537 e.d.h = h; 9538 e.tls_type = 0; 9539 9540 for (g = g->next; g != gg; g = g->next) 9541 if (htab_find (g->got_entries, &e)) 9542 { 9543 BFD_ASSERT (g->global_gotno > 0); 9544 g->local_gotno++; 9545 g->global_gotno--; 9546 } 9547 9548 /* If this was a global symbol forced into the primary GOT, we 9549 no longer need an entry for it. We can't release the entry 9550 at this point, but we must at least stop counting it as one 9551 of the symbols that required a forced got entry. */ 9552 if (h->root.got.offset == 2) 9553 { 9554 BFD_ASSERT (gg->assigned_gotno > 0); 9555 gg->assigned_gotno--; 9556 } 9557 } 9558 else if (g->global_gotno == 0 && g->global_gotsym == NULL) 9559 /* If we haven't got through GOT allocation yet, just bump up the 9560 number of local entries, as this symbol won't be counted as 9561 global. */ 9562 g->local_gotno++; 9563 else if (h->root.got.offset == 1) 9564 { 9565 /* If we're past non-multi-GOT allocation and this symbol had 9566 been marked for a global got entry, give it a local entry 9567 instead. */ 9568 BFD_ASSERT (g->global_gotno > 0); 9569 g->local_gotno++; 9570 g->global_gotno--; 9571 } 9572 } 9573 9574 _bfd_elf_link_hash_hide_symbol (info, &h->root, force_local); 9575 } 9576 9577 #define PDR_SIZE 32 9578 9579 bfd_boolean 9580 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie, 9581 struct bfd_link_info *info) 9582 { 9583 asection *o; 9584 bfd_boolean ret = FALSE; 9585 unsigned char *tdata; 9586 size_t i, skip; 9587 9588 o = bfd_get_section_by_name (abfd, ".pdr"); 9589 if (! o) 9590 return FALSE; 9591 if (o->size == 0) 9592 return FALSE; 9593 if (o->size % PDR_SIZE != 0) 9594 return FALSE; 9595 if (o->output_section != NULL 9596 && bfd_is_abs_section (o->output_section)) 9597 return FALSE; 9598 9599 tdata = bfd_zmalloc (o->size / PDR_SIZE); 9600 if (! tdata) 9601 return FALSE; 9602 9603 cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, 9604 info->keep_memory); 9605 if (!cookie->rels) 9606 { 9607 free (tdata); 9608 return FALSE; 9609 } 9610 9611 cookie->rel = cookie->rels; 9612 cookie->relend = cookie->rels + o->reloc_count; 9613 9614 for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++) 9615 { 9616 if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie)) 9617 { 9618 tdata[i] = 1; 9619 skip ++; 9620 } 9621 } 9622 9623 if (skip != 0) 9624 { 9625 mips_elf_section_data (o)->u.tdata = tdata; 9626 o->size -= skip * PDR_SIZE; 9627 ret = TRUE; 9628 } 9629 else 9630 free (tdata); 9631 9632 if (! info->keep_memory) 9633 free (cookie->rels); 9634 9635 return ret; 9636 } 9637 9638 bfd_boolean 9639 _bfd_mips_elf_ignore_discarded_relocs (asection *sec) 9640 { 9641 if (strcmp (sec->name, ".pdr") == 0) 9642 return TRUE; 9643 return FALSE; 9644 } 9645 9646 bfd_boolean 9647 _bfd_mips_elf_write_section (bfd *output_bfd, asection *sec, 9648 bfd_byte *contents) 9649 { 9650 bfd_byte *to, *from, *end; 9651 int i; 9652 9653 if (strcmp (sec->name, ".pdr") != 0) 9654 return FALSE; 9655 9656 if (mips_elf_section_data (sec)->u.tdata == NULL) 9657 return FALSE; 9658 9659 to = contents; 9660 end = contents + sec->size; 9661 for (from = contents, i = 0; 9662 from < end; 9663 from += PDR_SIZE, i++) 9664 { 9665 if ((mips_elf_section_data (sec)->u.tdata)[i] == 1) 9666 continue; 9667 if (to != from) 9668 memcpy (to, from, PDR_SIZE); 9669 to += PDR_SIZE; 9670 } 9671 bfd_set_section_contents (output_bfd, sec->output_section, contents, 9672 sec->output_offset, sec->size); 9673 return TRUE; 9674 } 9675 9676 /* MIPS ELF uses a special find_nearest_line routine in order the 9677 handle the ECOFF debugging information. */ 9678 9679 struct mips_elf_find_line 9680 { 9681 struct ecoff_debug_info d; 9682 struct ecoff_find_line i; 9683 }; 9684 9685 bfd_boolean 9686 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section, 9687 asymbol **symbols, bfd_vma offset, 9688 const char **filename_ptr, 9689 const char **functionname_ptr, 9690 unsigned int *line_ptr) 9691 { 9692 asection *msec; 9693 9694 if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset, 9695 filename_ptr, functionname_ptr, 9696 line_ptr)) 9697 return TRUE; 9698 9699 if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset, 9700 filename_ptr, functionname_ptr, 9701 line_ptr, ABI_64_P (abfd) ? 8 : 0, 9702 &elf_tdata (abfd)->dwarf2_find_line_info)) 9703 return TRUE; 9704 9705 msec = bfd_get_section_by_name (abfd, ".mdebug"); 9706 if (msec != NULL) 9707 { 9708 flagword origflags; 9709 struct mips_elf_find_line *fi; 9710 const struct ecoff_debug_swap * const swap = 9711 get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap; 9712 9713 /* If we are called during a link, mips_elf_final_link may have 9714 cleared the SEC_HAS_CONTENTS field. We force it back on here 9715 if appropriate (which it normally will be). */ 9716 origflags = msec->flags; 9717 if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS) 9718 msec->flags |= SEC_HAS_CONTENTS; 9719 9720 fi = elf_tdata (abfd)->find_line_info; 9721 if (fi == NULL) 9722 { 9723 bfd_size_type external_fdr_size; 9724 char *fraw_src; 9725 char *fraw_end; 9726 struct fdr *fdr_ptr; 9727 bfd_size_type amt = sizeof (struct mips_elf_find_line); 9728 9729 fi = bfd_zalloc (abfd, amt); 9730 if (fi == NULL) 9731 { 9732 msec->flags = origflags; 9733 return FALSE; 9734 } 9735 9736 if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d)) 9737 { 9738 msec->flags = origflags; 9739 return FALSE; 9740 } 9741 9742 /* Swap in the FDR information. */ 9743 amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr); 9744 fi->d.fdr = bfd_alloc (abfd, amt); 9745 if (fi->d.fdr == NULL) 9746 { 9747 msec->flags = origflags; 9748 return FALSE; 9749 } 9750 external_fdr_size = swap->external_fdr_size; 9751 fdr_ptr = fi->d.fdr; 9752 fraw_src = (char *) fi->d.external_fdr; 9753 fraw_end = (fraw_src 9754 + fi->d.symbolic_header.ifdMax * external_fdr_size); 9755 for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++) 9756 (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr); 9757 9758 elf_tdata (abfd)->find_line_info = fi; 9759 9760 /* Note that we don't bother to ever free this information. 9761 find_nearest_line is either called all the time, as in 9762 objdump -l, so the information should be saved, or it is 9763 rarely called, as in ld error messages, so the memory 9764 wasted is unimportant. Still, it would probably be a 9765 good idea for free_cached_info to throw it away. */ 9766 } 9767 9768 if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap, 9769 &fi->i, filename_ptr, functionname_ptr, 9770 line_ptr)) 9771 { 9772 msec->flags = origflags; 9773 return TRUE; 9774 } 9775 9776 msec->flags = origflags; 9777 } 9778 9779 /* Fall back on the generic ELF find_nearest_line routine. */ 9780 9781 return _bfd_elf_find_nearest_line (abfd, section, symbols, offset, 9782 filename_ptr, functionname_ptr, 9783 line_ptr); 9784 } 9785 9786 bfd_boolean 9787 _bfd_mips_elf_find_inliner_info (bfd *abfd, 9788 const char **filename_ptr, 9789 const char **functionname_ptr, 9790 unsigned int *line_ptr) 9791 { 9792 bfd_boolean found; 9793 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr, 9794 functionname_ptr, line_ptr, 9795 & elf_tdata (abfd)->dwarf2_find_line_info); 9796 return found; 9797 } 9798 9799 9800 /* When are writing out the .options or .MIPS.options section, 9801 remember the bytes we are writing out, so that we can install the 9802 GP value in the section_processing routine. */ 9803 9804 bfd_boolean 9805 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section, 9806 const void *location, 9807 file_ptr offset, bfd_size_type count) 9808 { 9809 if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name)) 9810 { 9811 bfd_byte *c; 9812 9813 if (elf_section_data (section) == NULL) 9814 { 9815 bfd_size_type amt = sizeof (struct bfd_elf_section_data); 9816 section->used_by_bfd = bfd_zalloc (abfd, amt); 9817 if (elf_section_data (section) == NULL) 9818 return FALSE; 9819 } 9820 c = mips_elf_section_data (section)->u.tdata; 9821 if (c == NULL) 9822 { 9823 c = bfd_zalloc (abfd, section->size); 9824 if (c == NULL) 9825 return FALSE; 9826 mips_elf_section_data (section)->u.tdata = c; 9827 } 9828 9829 memcpy (c + offset, location, count); 9830 } 9831 9832 return _bfd_elf_set_section_contents (abfd, section, location, offset, 9833 count); 9834 } 9835 9836 /* This is almost identical to bfd_generic_get_... except that some 9837 MIPS relocations need to be handled specially. Sigh. */ 9838 9839 bfd_byte * 9840 _bfd_elf_mips_get_relocated_section_contents 9841 (bfd *abfd, 9842 struct bfd_link_info *link_info, 9843 struct bfd_link_order *link_order, 9844 bfd_byte *data, 9845 bfd_boolean relocatable, 9846 asymbol **symbols) 9847 { 9848 /* Get enough memory to hold the stuff */ 9849 bfd *input_bfd = link_order->u.indirect.section->owner; 9850 asection *input_section = link_order->u.indirect.section; 9851 bfd_size_type sz; 9852 9853 long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section); 9854 arelent **reloc_vector = NULL; 9855 long reloc_count; 9856 9857 if (reloc_size < 0) 9858 goto error_return; 9859 9860 reloc_vector = bfd_malloc (reloc_size); 9861 if (reloc_vector == NULL && reloc_size != 0) 9862 goto error_return; 9863 9864 /* read in the section */ 9865 sz = input_section->rawsize ? input_section->rawsize : input_section->size; 9866 if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz)) 9867 goto error_return; 9868 9869 reloc_count = bfd_canonicalize_reloc (input_bfd, 9870 input_section, 9871 reloc_vector, 9872 symbols); 9873 if (reloc_count < 0) 9874 goto error_return; 9875 9876 if (reloc_count > 0) 9877 { 9878 arelent **parent; 9879 /* for mips */ 9880 int gp_found; 9881 bfd_vma gp = 0x12345678; /* initialize just to shut gcc up */ 9882 9883 { 9884 struct bfd_hash_entry *h; 9885 struct bfd_link_hash_entry *lh; 9886 /* Skip all this stuff if we aren't mixing formats. */ 9887 if (abfd && input_bfd 9888 && abfd->xvec == input_bfd->xvec) 9889 lh = 0; 9890 else 9891 { 9892 h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE); 9893 lh = (struct bfd_link_hash_entry *) h; 9894 } 9895 lookup: 9896 if (lh) 9897 { 9898 switch (lh->type) 9899 { 9900 case bfd_link_hash_undefined: 9901 case bfd_link_hash_undefweak: 9902 case bfd_link_hash_common: 9903 gp_found = 0; 9904 break; 9905 case bfd_link_hash_defined: 9906 case bfd_link_hash_defweak: 9907 gp_found = 1; 9908 gp = lh->u.def.value; 9909 break; 9910 case bfd_link_hash_indirect: 9911 case bfd_link_hash_warning: 9912 lh = lh->u.i.link; 9913 /* @@FIXME ignoring warning for now */ 9914 goto lookup; 9915 case bfd_link_hash_new: 9916 default: 9917 abort (); 9918 } 9919 } 9920 else 9921 gp_found = 0; 9922 } 9923 /* end mips */ 9924 for (parent = reloc_vector; *parent != NULL; parent++) 9925 { 9926 char *error_message = NULL; 9927 bfd_reloc_status_type r; 9928 9929 /* Specific to MIPS: Deal with relocation types that require 9930 knowing the gp of the output bfd. */ 9931 asymbol *sym = *(*parent)->sym_ptr_ptr; 9932 9933 /* If we've managed to find the gp and have a special 9934 function for the relocation then go ahead, else default 9935 to the generic handling. */ 9936 if (gp_found 9937 && (*parent)->howto->special_function 9938 == _bfd_mips_elf32_gprel16_reloc) 9939 r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent, 9940 input_section, relocatable, 9941 data, gp); 9942 else 9943 r = bfd_perform_relocation (input_bfd, *parent, data, 9944 input_section, 9945 relocatable ? abfd : NULL, 9946 &error_message); 9947 9948 if (relocatable) 9949 { 9950 asection *os = input_section->output_section; 9951 9952 /* A partial link, so keep the relocs */ 9953 os->orelocation[os->reloc_count] = *parent; 9954 os->reloc_count++; 9955 } 9956 9957 if (r != bfd_reloc_ok) 9958 { 9959 switch (r) 9960 { 9961 case bfd_reloc_undefined: 9962 if (!((*link_info->callbacks->undefined_symbol) 9963 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), 9964 input_bfd, input_section, (*parent)->address, TRUE))) 9965 goto error_return; 9966 break; 9967 case bfd_reloc_dangerous: 9968 BFD_ASSERT (error_message != NULL); 9969 if (!((*link_info->callbacks->reloc_dangerous) 9970 (link_info, error_message, input_bfd, input_section, 9971 (*parent)->address))) 9972 goto error_return; 9973 break; 9974 case bfd_reloc_overflow: 9975 if (!((*link_info->callbacks->reloc_overflow) 9976 (link_info, NULL, 9977 bfd_asymbol_name (*(*parent)->sym_ptr_ptr), 9978 (*parent)->howto->name, (*parent)->addend, 9979 input_bfd, input_section, (*parent)->address))) 9980 goto error_return; 9981 break; 9982 case bfd_reloc_outofrange: 9983 default: 9984 abort (); 9985 break; 9986 } 9987 9988 } 9989 } 9990 } 9991 if (reloc_vector != NULL) 9992 free (reloc_vector); 9993 return data; 9994 9995 error_return: 9996 if (reloc_vector != NULL) 9997 free (reloc_vector); 9998 return NULL; 9999 } 10000 10001 /* Create a MIPS ELF linker hash table. */ 10002 10003 struct bfd_link_hash_table * 10004 _bfd_mips_elf_link_hash_table_create (bfd *abfd) 10005 { 10006 struct mips_elf_link_hash_table *ret; 10007 bfd_size_type amt = sizeof (struct mips_elf_link_hash_table); 10008 10009 ret = bfd_malloc (amt); 10010 if (ret == NULL) 10011 return NULL; 10012 10013 if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, 10014 mips_elf_link_hash_newfunc, 10015 sizeof (struct mips_elf_link_hash_entry))) 10016 { 10017 free (ret); 10018 return NULL; 10019 } 10020 10021 #if 0 10022 /* We no longer use this. */ 10023 for (i = 0; i < SIZEOF_MIPS_DYNSYM_SECNAMES; i++) 10024 ret->dynsym_sec_strindex[i] = (bfd_size_type) -1; 10025 #endif 10026 ret->procedure_count = 0; 10027 ret->compact_rel_size = 0; 10028 ret->use_rld_obj_head = FALSE; 10029 ret->rld_value = 0; 10030 ret->mips16_stubs_seen = FALSE; 10031 ret->is_vxworks = FALSE; 10032 ret->srelbss = NULL; 10033 ret->sdynbss = NULL; 10034 ret->srelplt = NULL; 10035 ret->srelplt2 = NULL; 10036 ret->sgotplt = NULL; 10037 ret->splt = NULL; 10038 ret->plt_header_size = 0; 10039 ret->plt_entry_size = 0; 10040 ret->function_stub_size = 0; 10041 10042 return &ret->root.root; 10043 } 10044 10045 /* Likewise, but indicate that the target is VxWorks. */ 10046 10047 struct bfd_link_hash_table * 10048 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd) 10049 { 10050 struct bfd_link_hash_table *ret; 10051 10052 ret = _bfd_mips_elf_link_hash_table_create (abfd); 10053 if (ret) 10054 { 10055 struct mips_elf_link_hash_table *htab; 10056 10057 htab = (struct mips_elf_link_hash_table *) ret; 10058 htab->is_vxworks = 1; 10059 } 10060 return ret; 10061 } 10062 10063 /* We need to use a special link routine to handle the .reginfo and 10064 the .mdebug sections. We need to merge all instances of these 10065 sections together, not write them all out sequentially. */ 10066 10067 bfd_boolean 10068 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info) 10069 { 10070 asection *o; 10071 struct bfd_link_order *p; 10072 asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec; 10073 asection *rtproc_sec; 10074 Elf32_RegInfo reginfo; 10075 struct ecoff_debug_info debug; 10076 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 10077 const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap; 10078 HDRR *symhdr = &debug.symbolic_header; 10079 void *mdebug_handle = NULL; 10080 asection *s; 10081 EXTR esym; 10082 unsigned int i; 10083 bfd_size_type amt; 10084 struct mips_elf_link_hash_table *htab; 10085 10086 static const char * const secname[] = 10087 { 10088 ".text", ".init", ".fini", ".data", 10089 ".rodata", ".sdata", ".sbss", ".bss" 10090 }; 10091 static const int sc[] = 10092 { 10093 scText, scInit, scFini, scData, 10094 scRData, scSData, scSBss, scBss 10095 }; 10096 10097 /* We'd carefully arranged the dynamic symbol indices, and then the 10098 generic size_dynamic_sections renumbered them out from under us. 10099 Rather than trying somehow to prevent the renumbering, just do 10100 the sort again. */ 10101 htab = mips_elf_hash_table (info); 10102 if (elf_hash_table (info)->dynamic_sections_created) 10103 { 10104 bfd *dynobj; 10105 asection *got; 10106 struct mips_got_info *g; 10107 bfd_size_type dynsecsymcount; 10108 10109 /* When we resort, we must tell mips_elf_sort_hash_table what 10110 the lowest index it may use is. That's the number of section 10111 symbols we're going to add. The generic ELF linker only 10112 adds these symbols when building a shared object. Note that 10113 we count the sections after (possibly) removing the .options 10114 section above. */ 10115 10116 dynsecsymcount = count_section_dynsyms (abfd, info); 10117 if (! mips_elf_sort_hash_table (info, dynsecsymcount + 1)) 10118 return FALSE; 10119 10120 /* Make sure we didn't grow the global .got region. */ 10121 dynobj = elf_hash_table (info)->dynobj; 10122 got = mips_elf_got_section (dynobj, FALSE); 10123 g = mips_elf_section_data (got)->u.got_info; 10124 10125 if (g->global_gotsym != NULL) 10126 BFD_ASSERT ((elf_hash_table (info)->dynsymcount 10127 - g->global_gotsym->dynindx) 10128 <= g->global_gotno); 10129 } 10130 10131 /* Get a value for the GP register. */ 10132 if (elf_gp (abfd) == 0) 10133 { 10134 struct bfd_link_hash_entry *h; 10135 10136 h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE); 10137 if (h != NULL && h->type == bfd_link_hash_defined) 10138 elf_gp (abfd) = (h->u.def.value 10139 + h->u.def.section->output_section->vma 10140 + h->u.def.section->output_offset); 10141 else if (htab->is_vxworks 10142 && (h = bfd_link_hash_lookup (info->hash, 10143 "_GLOBAL_OFFSET_TABLE_", 10144 FALSE, FALSE, TRUE)) 10145 && h->type == bfd_link_hash_defined) 10146 elf_gp (abfd) = (h->u.def.section->output_section->vma 10147 + h->u.def.section->output_offset 10148 + h->u.def.value); 10149 else if (info->relocatable) 10150 { 10151 bfd_vma lo = MINUS_ONE; 10152 10153 /* Find the GP-relative section with the lowest offset. */ 10154 for (o = abfd->sections; o != NULL; o = o->next) 10155 if (o->vma < lo 10156 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL)) 10157 lo = o->vma; 10158 10159 /* And calculate GP relative to that. */ 10160 elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info); 10161 } 10162 else 10163 { 10164 /* If the relocate_section function needs to do a reloc 10165 involving the GP value, it should make a reloc_dangerous 10166 callback to warn that GP is not defined. */ 10167 } 10168 } 10169 10170 /* Go through the sections and collect the .reginfo and .mdebug 10171 information. */ 10172 reginfo_sec = NULL; 10173 mdebug_sec = NULL; 10174 gptab_data_sec = NULL; 10175 gptab_bss_sec = NULL; 10176 for (o = abfd->sections; o != NULL; o = o->next) 10177 { 10178 if (strcmp (o->name, ".reginfo") == 0) 10179 { 10180 memset (®info, 0, sizeof reginfo); 10181 10182 /* We have found the .reginfo section in the output file. 10183 Look through all the link_orders comprising it and merge 10184 the information together. */ 10185 for (p = o->map_head.link_order; p != NULL; p = p->next) 10186 { 10187 asection *input_section; 10188 bfd *input_bfd; 10189 Elf32_External_RegInfo ext; 10190 Elf32_RegInfo sub; 10191 10192 if (p->type != bfd_indirect_link_order) 10193 { 10194 if (p->type == bfd_data_link_order) 10195 continue; 10196 abort (); 10197 } 10198 10199 input_section = p->u.indirect.section; 10200 input_bfd = input_section->owner; 10201 10202 if (! bfd_get_section_contents (input_bfd, input_section, 10203 &ext, 0, sizeof ext)) 10204 return FALSE; 10205 10206 bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub); 10207 10208 reginfo.ri_gprmask |= sub.ri_gprmask; 10209 reginfo.ri_cprmask[0] |= sub.ri_cprmask[0]; 10210 reginfo.ri_cprmask[1] |= sub.ri_cprmask[1]; 10211 reginfo.ri_cprmask[2] |= sub.ri_cprmask[2]; 10212 reginfo.ri_cprmask[3] |= sub.ri_cprmask[3]; 10213 10214 /* ri_gp_value is set by the function 10215 mips_elf32_section_processing when the section is 10216 finally written out. */ 10217 10218 /* Hack: reset the SEC_HAS_CONTENTS flag so that 10219 elf_link_input_bfd ignores this section. */ 10220 input_section->flags &= ~SEC_HAS_CONTENTS; 10221 } 10222 10223 /* Size has been set in _bfd_mips_elf_always_size_sections. */ 10224 BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo)); 10225 10226 /* Skip this section later on (I don't think this currently 10227 matters, but someday it might). */ 10228 o->map_head.link_order = NULL; 10229 10230 reginfo_sec = o; 10231 } 10232 10233 if (strcmp (o->name, ".mdebug") == 0) 10234 { 10235 struct extsym_info einfo; 10236 bfd_vma last; 10237 10238 /* We have found the .mdebug section in the output file. 10239 Look through all the link_orders comprising it and merge 10240 the information together. */ 10241 symhdr->magic = swap->sym_magic; 10242 /* FIXME: What should the version stamp be? */ 10243 symhdr->vstamp = 0; 10244 symhdr->ilineMax = 0; 10245 symhdr->cbLine = 0; 10246 symhdr->idnMax = 0; 10247 symhdr->ipdMax = 0; 10248 symhdr->isymMax = 0; 10249 symhdr->ioptMax = 0; 10250 symhdr->iauxMax = 0; 10251 symhdr->issMax = 0; 10252 symhdr->issExtMax = 0; 10253 symhdr->ifdMax = 0; 10254 symhdr->crfd = 0; 10255 symhdr->iextMax = 0; 10256 10257 /* We accumulate the debugging information itself in the 10258 debug_info structure. */ 10259 debug.line = NULL; 10260 debug.external_dnr = NULL; 10261 debug.external_pdr = NULL; 10262 debug.external_sym = NULL; 10263 debug.external_opt = NULL; 10264 debug.external_aux = NULL; 10265 debug.ss = NULL; 10266 debug.ssext = debug.ssext_end = NULL; 10267 debug.external_fdr = NULL; 10268 debug.external_rfd = NULL; 10269 debug.external_ext = debug.external_ext_end = NULL; 10270 10271 mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info); 10272 if (mdebug_handle == NULL) 10273 return FALSE; 10274 10275 esym.jmptbl = 0; 10276 esym.cobol_main = 0; 10277 esym.weakext = 0; 10278 esym.reserved = 0; 10279 esym.ifd = ifdNil; 10280 esym.asym.iss = issNil; 10281 esym.asym.st = stLocal; 10282 esym.asym.reserved = 0; 10283 esym.asym.index = indexNil; 10284 last = 0; 10285 for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++) 10286 { 10287 esym.asym.sc = sc[i]; 10288 s = bfd_get_section_by_name (abfd, secname[i]); 10289 if (s != NULL) 10290 { 10291 esym.asym.value = s->vma; 10292 last = s->vma + s->size; 10293 } 10294 else 10295 esym.asym.value = last; 10296 if (!bfd_ecoff_debug_one_external (abfd, &debug, swap, 10297 secname[i], &esym)) 10298 return FALSE; 10299 } 10300 10301 for (p = o->map_head.link_order; p != NULL; p = p->next) 10302 { 10303 asection *input_section; 10304 bfd *input_bfd; 10305 const struct ecoff_debug_swap *input_swap; 10306 struct ecoff_debug_info input_debug; 10307 char *eraw_src; 10308 char *eraw_end; 10309 10310 if (p->type != bfd_indirect_link_order) 10311 { 10312 if (p->type == bfd_data_link_order) 10313 continue; 10314 abort (); 10315 } 10316 10317 input_section = p->u.indirect.section; 10318 input_bfd = input_section->owner; 10319 10320 if (bfd_get_flavour (input_bfd) != bfd_target_elf_flavour 10321 || (get_elf_backend_data (input_bfd) 10322 ->elf_backend_ecoff_debug_swap) == NULL) 10323 { 10324 /* I don't know what a non MIPS ELF bfd would be 10325 doing with a .mdebug section, but I don't really 10326 want to deal with it. */ 10327 continue; 10328 } 10329 10330 input_swap = (get_elf_backend_data (input_bfd) 10331 ->elf_backend_ecoff_debug_swap); 10332 10333 BFD_ASSERT (p->size == input_section->size); 10334 10335 /* The ECOFF linking code expects that we have already 10336 read in the debugging information and set up an 10337 ecoff_debug_info structure, so we do that now. */ 10338 if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section, 10339 &input_debug)) 10340 return FALSE; 10341 10342 if (! (bfd_ecoff_debug_accumulate 10343 (mdebug_handle, abfd, &debug, swap, input_bfd, 10344 &input_debug, input_swap, info))) 10345 return FALSE; 10346 10347 /* Loop through the external symbols. For each one with 10348 interesting information, try to find the symbol in 10349 the linker global hash table and save the information 10350 for the output external symbols. */ 10351 eraw_src = input_debug.external_ext; 10352 eraw_end = (eraw_src 10353 + (input_debug.symbolic_header.iextMax 10354 * input_swap->external_ext_size)); 10355 for (; 10356 eraw_src < eraw_end; 10357 eraw_src += input_swap->external_ext_size) 10358 { 10359 EXTR ext; 10360 const char *name; 10361 struct mips_elf_link_hash_entry *h; 10362 10363 (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext); 10364 if (ext.asym.sc == scNil 10365 || ext.asym.sc == scUndefined 10366 || ext.asym.sc == scSUndefined) 10367 continue; 10368 10369 name = input_debug.ssext + ext.asym.iss; 10370 h = mips_elf_link_hash_lookup (mips_elf_hash_table (info), 10371 name, FALSE, FALSE, TRUE); 10372 if (h == NULL || h->esym.ifd != -2) 10373 continue; 10374 10375 if (ext.ifd != -1) 10376 { 10377 BFD_ASSERT (ext.ifd 10378 < input_debug.symbolic_header.ifdMax); 10379 ext.ifd = input_debug.ifdmap[ext.ifd]; 10380 } 10381 10382 h->esym = ext; 10383 } 10384 10385 /* Free up the information we just read. */ 10386 free (input_debug.line); 10387 free (input_debug.external_dnr); 10388 free (input_debug.external_pdr); 10389 free (input_debug.external_sym); 10390 free (input_debug.external_opt); 10391 free (input_debug.external_aux); 10392 free (input_debug.ss); 10393 free (input_debug.ssext); 10394 free (input_debug.external_fdr); 10395 free (input_debug.external_rfd); 10396 free (input_debug.external_ext); 10397 10398 /* Hack: reset the SEC_HAS_CONTENTS flag so that 10399 elf_link_input_bfd ignores this section. */ 10400 input_section->flags &= ~SEC_HAS_CONTENTS; 10401 } 10402 10403 if (SGI_COMPAT (abfd) && info->shared) 10404 { 10405 /* Create .rtproc section. */ 10406 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc"); 10407 if (rtproc_sec == NULL) 10408 { 10409 flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY 10410 | SEC_LINKER_CREATED | SEC_READONLY); 10411 10412 rtproc_sec = bfd_make_section_with_flags (abfd, 10413 ".rtproc", 10414 flags); 10415 if (rtproc_sec == NULL 10416 || ! bfd_set_section_alignment (abfd, rtproc_sec, 4)) 10417 return FALSE; 10418 } 10419 10420 if (! mips_elf_create_procedure_table (mdebug_handle, abfd, 10421 info, rtproc_sec, 10422 &debug)) 10423 return FALSE; 10424 } 10425 10426 /* Build the external symbol information. */ 10427 einfo.abfd = abfd; 10428 einfo.info = info; 10429 einfo.debug = &debug; 10430 einfo.swap = swap; 10431 einfo.failed = FALSE; 10432 mips_elf_link_hash_traverse (mips_elf_hash_table (info), 10433 mips_elf_output_extsym, &einfo); 10434 if (einfo.failed) 10435 return FALSE; 10436 10437 /* Set the size of the .mdebug section. */ 10438 o->size = bfd_ecoff_debug_size (abfd, &debug, swap); 10439 10440 /* Skip this section later on (I don't think this currently 10441 matters, but someday it might). */ 10442 o->map_head.link_order = NULL; 10443 10444 mdebug_sec = o; 10445 } 10446 10447 if (strncmp (o->name, ".gptab.", sizeof ".gptab." - 1) == 0) 10448 { 10449 const char *subname; 10450 unsigned int c; 10451 Elf32_gptab *tab; 10452 Elf32_External_gptab *ext_tab; 10453 unsigned int j; 10454 10455 /* The .gptab.sdata and .gptab.sbss sections hold 10456 information describing how the small data area would 10457 change depending upon the -G switch. These sections 10458 not used in executables files. */ 10459 if (! info->relocatable) 10460 { 10461 for (p = o->map_head.link_order; p != NULL; p = p->next) 10462 { 10463 asection *input_section; 10464 10465 if (p->type != bfd_indirect_link_order) 10466 { 10467 if (p->type == bfd_data_link_order) 10468 continue; 10469 abort (); 10470 } 10471 10472 input_section = p->u.indirect.section; 10473 10474 /* Hack: reset the SEC_HAS_CONTENTS flag so that 10475 elf_link_input_bfd ignores this section. */ 10476 input_section->flags &= ~SEC_HAS_CONTENTS; 10477 } 10478 10479 /* Skip this section later on (I don't think this 10480 currently matters, but someday it might). */ 10481 o->map_head.link_order = NULL; 10482 10483 /* Really remove the section. */ 10484 bfd_section_list_remove (abfd, o); 10485 --abfd->section_count; 10486 10487 continue; 10488 } 10489 10490 /* There is one gptab for initialized data, and one for 10491 uninitialized data. */ 10492 if (strcmp (o->name, ".gptab.sdata") == 0) 10493 gptab_data_sec = o; 10494 else if (strcmp (o->name, ".gptab.sbss") == 0) 10495 gptab_bss_sec = o; 10496 else 10497 { 10498 (*_bfd_error_handler) 10499 (_("%s: illegal section name `%s'"), 10500 bfd_get_filename (abfd), o->name); 10501 bfd_set_error (bfd_error_nonrepresentable_section); 10502 return FALSE; 10503 } 10504 10505 /* The linker script always combines .gptab.data and 10506 .gptab.sdata into .gptab.sdata, and likewise for 10507 .gptab.bss and .gptab.sbss. It is possible that there is 10508 no .sdata or .sbss section in the output file, in which 10509 case we must change the name of the output section. */ 10510 subname = o->name + sizeof ".gptab" - 1; 10511 if (bfd_get_section_by_name (abfd, subname) == NULL) 10512 { 10513 if (o == gptab_data_sec) 10514 o->name = ".gptab.data"; 10515 else 10516 o->name = ".gptab.bss"; 10517 subname = o->name + sizeof ".gptab" - 1; 10518 BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL); 10519 } 10520 10521 /* Set up the first entry. */ 10522 c = 1; 10523 amt = c * sizeof (Elf32_gptab); 10524 tab = bfd_malloc (amt); 10525 if (tab == NULL) 10526 return FALSE; 10527 tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd); 10528 tab[0].gt_header.gt_unused = 0; 10529 10530 /* Combine the input sections. */ 10531 for (p = o->map_head.link_order; p != NULL; p = p->next) 10532 { 10533 asection *input_section; 10534 bfd *input_bfd; 10535 bfd_size_type size; 10536 unsigned long last; 10537 bfd_size_type gpentry; 10538 10539 if (p->type != bfd_indirect_link_order) 10540 { 10541 if (p->type == bfd_data_link_order) 10542 continue; 10543 abort (); 10544 } 10545 10546 input_section = p->u.indirect.section; 10547 input_bfd = input_section->owner; 10548 10549 /* Combine the gptab entries for this input section one 10550 by one. We know that the input gptab entries are 10551 sorted by ascending -G value. */ 10552 size = input_section->size; 10553 last = 0; 10554 for (gpentry = sizeof (Elf32_External_gptab); 10555 gpentry < size; 10556 gpentry += sizeof (Elf32_External_gptab)) 10557 { 10558 Elf32_External_gptab ext_gptab; 10559 Elf32_gptab int_gptab; 10560 unsigned long val; 10561 unsigned long add; 10562 bfd_boolean exact; 10563 unsigned int look; 10564 10565 if (! (bfd_get_section_contents 10566 (input_bfd, input_section, &ext_gptab, gpentry, 10567 sizeof (Elf32_External_gptab)))) 10568 { 10569 free (tab); 10570 return FALSE; 10571 } 10572 10573 bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab, 10574 &int_gptab); 10575 val = int_gptab.gt_entry.gt_g_value; 10576 add = int_gptab.gt_entry.gt_bytes - last; 10577 10578 exact = FALSE; 10579 for (look = 1; look < c; look++) 10580 { 10581 if (tab[look].gt_entry.gt_g_value >= val) 10582 tab[look].gt_entry.gt_bytes += add; 10583 10584 if (tab[look].gt_entry.gt_g_value == val) 10585 exact = TRUE; 10586 } 10587 10588 if (! exact) 10589 { 10590 Elf32_gptab *new_tab; 10591 unsigned int max; 10592 10593 /* We need a new table entry. */ 10594 amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab); 10595 new_tab = bfd_realloc (tab, amt); 10596 if (new_tab == NULL) 10597 { 10598 free (tab); 10599 return FALSE; 10600 } 10601 tab = new_tab; 10602 tab[c].gt_entry.gt_g_value = val; 10603 tab[c].gt_entry.gt_bytes = add; 10604 10605 /* Merge in the size for the next smallest -G 10606 value, since that will be implied by this new 10607 value. */ 10608 max = 0; 10609 for (look = 1; look < c; look++) 10610 { 10611 if (tab[look].gt_entry.gt_g_value < val 10612 && (max == 0 10613 || (tab[look].gt_entry.gt_g_value 10614 > tab[max].gt_entry.gt_g_value))) 10615 max = look; 10616 } 10617 if (max != 0) 10618 tab[c].gt_entry.gt_bytes += 10619 tab[max].gt_entry.gt_bytes; 10620 10621 ++c; 10622 } 10623 10624 last = int_gptab.gt_entry.gt_bytes; 10625 } 10626 10627 /* Hack: reset the SEC_HAS_CONTENTS flag so that 10628 elf_link_input_bfd ignores this section. */ 10629 input_section->flags &= ~SEC_HAS_CONTENTS; 10630 } 10631 10632 /* The table must be sorted by -G value. */ 10633 if (c > 2) 10634 qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare); 10635 10636 /* Swap out the table. */ 10637 amt = (bfd_size_type) c * sizeof (Elf32_External_gptab); 10638 ext_tab = bfd_alloc (abfd, amt); 10639 if (ext_tab == NULL) 10640 { 10641 free (tab); 10642 return FALSE; 10643 } 10644 10645 for (j = 0; j < c; j++) 10646 bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j); 10647 free (tab); 10648 10649 o->size = c * sizeof (Elf32_External_gptab); 10650 o->contents = (bfd_byte *) ext_tab; 10651 10652 /* Skip this section later on (I don't think this currently 10653 matters, but someday it might). */ 10654 o->map_head.link_order = NULL; 10655 } 10656 } 10657 10658 /* Invoke the regular ELF backend linker to do all the work. */ 10659 if (!bfd_elf_final_link (abfd, info)) 10660 return FALSE; 10661 10662 /* Now write out the computed sections. */ 10663 10664 if (reginfo_sec != NULL) 10665 { 10666 Elf32_External_RegInfo ext; 10667 10668 bfd_mips_elf32_swap_reginfo_out (abfd, ®info, &ext); 10669 if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext)) 10670 return FALSE; 10671 } 10672 10673 if (mdebug_sec != NULL) 10674 { 10675 BFD_ASSERT (abfd->output_has_begun); 10676 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug, 10677 swap, info, 10678 mdebug_sec->filepos)) 10679 return FALSE; 10680 10681 bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info); 10682 } 10683 10684 if (gptab_data_sec != NULL) 10685 { 10686 if (! bfd_set_section_contents (abfd, gptab_data_sec, 10687 gptab_data_sec->contents, 10688 0, gptab_data_sec->size)) 10689 return FALSE; 10690 } 10691 10692 if (gptab_bss_sec != NULL) 10693 { 10694 if (! bfd_set_section_contents (abfd, gptab_bss_sec, 10695 gptab_bss_sec->contents, 10696 0, gptab_bss_sec->size)) 10697 return FALSE; 10698 } 10699 10700 if (SGI_COMPAT (abfd)) 10701 { 10702 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc"); 10703 if (rtproc_sec != NULL) 10704 { 10705 if (! bfd_set_section_contents (abfd, rtproc_sec, 10706 rtproc_sec->contents, 10707 0, rtproc_sec->size)) 10708 return FALSE; 10709 } 10710 } 10711 10712 return TRUE; 10713 } 10714 10715 /* Structure for saying that BFD machine EXTENSION extends BASE. */ 10716 10717 struct mips_mach_extension { 10718 unsigned long extension, base; 10719 }; 10720 10721 10722 /* An array describing how BFD machines relate to one another. The entries 10723 are ordered topologically with MIPS I extensions listed last. */ 10724 10725 static const struct mips_mach_extension mips_mach_extensions[] = { 10726 /* MIPS64r2 extensions. */ 10727 { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 }, 10728 10729 /* MIPS64 extensions. */ 10730 { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 }, 10731 { bfd_mach_mips_sb1, bfd_mach_mipsisa64 }, 10732 10733 /* MIPS V extensions. */ 10734 { bfd_mach_mipsisa64, bfd_mach_mips5 }, 10735 10736 /* R10000 extensions. */ 10737 { bfd_mach_mips12000, bfd_mach_mips10000 }, 10738 10739 /* R5000 extensions. Note: the vr5500 ISA is an extension of the core 10740 vr5400 ISA, but doesn't include the multimedia stuff. It seems 10741 better to allow vr5400 and vr5500 code to be merged anyway, since 10742 many libraries will just use the core ISA. Perhaps we could add 10743 some sort of ASE flag if this ever proves a problem. */ 10744 { bfd_mach_mips5500, bfd_mach_mips5400 }, 10745 { bfd_mach_mips5400, bfd_mach_mips5000 }, 10746 10747 /* MIPS IV extensions. */ 10748 { bfd_mach_mips5, bfd_mach_mips8000 }, 10749 { bfd_mach_mips10000, bfd_mach_mips8000 }, 10750 { bfd_mach_mips5000, bfd_mach_mips8000 }, 10751 { bfd_mach_mips7000, bfd_mach_mips8000 }, 10752 { bfd_mach_mips9000, bfd_mach_mips8000 }, 10753 10754 /* VR4100 extensions. */ 10755 { bfd_mach_mips4120, bfd_mach_mips4100 }, 10756 { bfd_mach_mips4111, bfd_mach_mips4100 }, 10757 10758 /* MIPS III extensions. */ 10759 { bfd_mach_mips8000, bfd_mach_mips4000 }, 10760 { bfd_mach_mips4650, bfd_mach_mips4000 }, 10761 { bfd_mach_mips4600, bfd_mach_mips4000 }, 10762 { bfd_mach_mips4400, bfd_mach_mips4000 }, 10763 { bfd_mach_mips4300, bfd_mach_mips4000 }, 10764 { bfd_mach_mips4100, bfd_mach_mips4000 }, 10765 { bfd_mach_mips4010, bfd_mach_mips4000 }, 10766 10767 /* MIPS32 extensions. */ 10768 { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 }, 10769 10770 /* MIPS II extensions. */ 10771 { bfd_mach_mips4000, bfd_mach_mips6000 }, 10772 { bfd_mach_mipsisa32, bfd_mach_mips6000 }, 10773 10774 /* MIPS I extensions. */ 10775 { bfd_mach_mips6000, bfd_mach_mips3000 }, 10776 { bfd_mach_mips3900, bfd_mach_mips3000 } 10777 }; 10778 10779 10780 /* Return true if bfd machine EXTENSION is an extension of machine BASE. */ 10781 10782 static bfd_boolean 10783 mips_mach_extends_p (unsigned long base, unsigned long extension) 10784 { 10785 size_t i; 10786 10787 if (extension == base) 10788 return TRUE; 10789 10790 if (base == bfd_mach_mipsisa32 10791 && mips_mach_extends_p (bfd_mach_mipsisa64, extension)) 10792 return TRUE; 10793 10794 if (base == bfd_mach_mipsisa32r2 10795 && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension)) 10796 return TRUE; 10797 10798 for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++) 10799 if (extension == mips_mach_extensions[i].extension) 10800 { 10801 extension = mips_mach_extensions[i].base; 10802 if (extension == base) 10803 return TRUE; 10804 } 10805 10806 return FALSE; 10807 } 10808 10809 10810 /* Return true if the given ELF header flags describe a 32-bit binary. */ 10811 10812 static bfd_boolean 10813 mips_32bit_flags_p (flagword flags) 10814 { 10815 return ((flags & EF_MIPS_32BITMODE) != 0 10816 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32 10817 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32 10818 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1 10819 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2 10820 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32 10821 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2); 10822 } 10823 10824 10825 /* Merge backend specific data from an object file to the output 10826 object file when linking. */ 10827 10828 bfd_boolean 10829 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd) 10830 { 10831 flagword old_flags; 10832 flagword new_flags; 10833 bfd_boolean ok; 10834 bfd_boolean null_input_bfd = TRUE; 10835 asection *sec; 10836 10837 /* Check if we have the same endianess */ 10838 if (! _bfd_generic_verify_endian_match (ibfd, obfd)) 10839 { 10840 (*_bfd_error_handler) 10841 (_("%B: endianness incompatible with that of the selected emulation"), 10842 ibfd); 10843 return FALSE; 10844 } 10845 10846 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour 10847 || bfd_get_flavour (obfd) != bfd_target_elf_flavour) 10848 return TRUE; 10849 10850 if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0) 10851 { 10852 (*_bfd_error_handler) 10853 (_("%B: ABI is incompatible with that of the selected emulation"), 10854 ibfd); 10855 return FALSE; 10856 } 10857 10858 new_flags = elf_elfheader (ibfd)->e_flags; 10859 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER; 10860 old_flags = elf_elfheader (obfd)->e_flags; 10861 10862 if (! elf_flags_init (obfd)) 10863 { 10864 elf_flags_init (obfd) = TRUE; 10865 elf_elfheader (obfd)->e_flags = new_flags; 10866 elf_elfheader (obfd)->e_ident[EI_CLASS] 10867 = elf_elfheader (ibfd)->e_ident[EI_CLASS]; 10868 10869 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd) 10870 && bfd_get_arch_info (obfd)->the_default) 10871 { 10872 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), 10873 bfd_get_mach (ibfd))) 10874 return FALSE; 10875 } 10876 10877 return TRUE; 10878 } 10879 10880 /* Check flag compatibility. */ 10881 10882 new_flags &= ~EF_MIPS_NOREORDER; 10883 old_flags &= ~EF_MIPS_NOREORDER; 10884 10885 /* Some IRIX 6 BSD-compatibility objects have this bit set. It 10886 doesn't seem to matter. */ 10887 new_flags &= ~EF_MIPS_XGOT; 10888 old_flags &= ~EF_MIPS_XGOT; 10889 10890 /* MIPSpro generates ucode info in n64 objects. Again, we should 10891 just be able to ignore this. */ 10892 new_flags &= ~EF_MIPS_UCODE; 10893 old_flags &= ~EF_MIPS_UCODE; 10894 10895 /* Don't care about the PIC flags from dynamic objects; they are 10896 PIC by design. */ 10897 if ((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0 10898 && (ibfd->flags & DYNAMIC) != 0) 10899 new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC); 10900 10901 if (new_flags == old_flags) 10902 return TRUE; 10903 10904 /* Check to see if the input BFD actually contains any sections. 10905 If not, its flags may not have been initialised either, but it cannot 10906 actually cause any incompatibility. */ 10907 for (sec = ibfd->sections; sec != NULL; sec = sec->next) 10908 { 10909 /* Ignore synthetic sections and empty .text, .data and .bss sections 10910 which are automatically generated by gas. */ 10911 if (strcmp (sec->name, ".reginfo") 10912 && strcmp (sec->name, ".mdebug") 10913 && (sec->size != 0 10914 || (strcmp (sec->name, ".text") 10915 && strcmp (sec->name, ".data") 10916 && strcmp (sec->name, ".bss")))) 10917 { 10918 null_input_bfd = FALSE; 10919 break; 10920 } 10921 } 10922 if (null_input_bfd) 10923 return TRUE; 10924 10925 ok = TRUE; 10926 10927 if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0) 10928 != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)) 10929 { 10930 (*_bfd_error_handler) 10931 (_("%B: warning: linking PIC files with non-PIC files"), 10932 ibfd); 10933 ok = TRUE; 10934 } 10935 10936 if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) 10937 elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC; 10938 if (! (new_flags & EF_MIPS_PIC)) 10939 elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC; 10940 10941 new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC); 10942 old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC); 10943 10944 /* Compare the ISAs. */ 10945 if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags)) 10946 { 10947 (*_bfd_error_handler) 10948 (_("%B: linking 32-bit code with 64-bit code"), 10949 ibfd); 10950 ok = FALSE; 10951 } 10952 else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd))) 10953 { 10954 /* OBFD's ISA isn't the same as, or an extension of, IBFD's. */ 10955 if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd))) 10956 { 10957 /* Copy the architecture info from IBFD to OBFD. Also copy 10958 the 32-bit flag (if set) so that we continue to recognise 10959 OBFD as a 32-bit binary. */ 10960 bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd)); 10961 elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH); 10962 elf_elfheader (obfd)->e_flags 10963 |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE); 10964 10965 /* Copy across the ABI flags if OBFD doesn't use them 10966 and if that was what caused us to treat IBFD as 32-bit. */ 10967 if ((old_flags & EF_MIPS_ABI) == 0 10968 && mips_32bit_flags_p (new_flags) 10969 && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI)) 10970 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI; 10971 } 10972 else 10973 { 10974 /* The ISAs aren't compatible. */ 10975 (*_bfd_error_handler) 10976 (_("%B: linking %s module with previous %s modules"), 10977 ibfd, 10978 bfd_printable_name (ibfd), 10979 bfd_printable_name (obfd)); 10980 ok = FALSE; 10981 } 10982 } 10983 10984 new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE); 10985 old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE); 10986 10987 /* Compare ABIs. The 64-bit ABI does not use EF_MIPS_ABI. But, it 10988 does set EI_CLASS differently from any 32-bit ABI. */ 10989 if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI) 10990 || (elf_elfheader (ibfd)->e_ident[EI_CLASS] 10991 != elf_elfheader (obfd)->e_ident[EI_CLASS])) 10992 { 10993 /* Only error if both are set (to different values). */ 10994 if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI)) 10995 || (elf_elfheader (ibfd)->e_ident[EI_CLASS] 10996 != elf_elfheader (obfd)->e_ident[EI_CLASS])) 10997 { 10998 (*_bfd_error_handler) 10999 (_("%B: ABI mismatch: linking %s module with previous %s modules"), 11000 ibfd, 11001 elf_mips_abi_name (ibfd), 11002 elf_mips_abi_name (obfd)); 11003 ok = FALSE; 11004 } 11005 new_flags &= ~EF_MIPS_ABI; 11006 old_flags &= ~EF_MIPS_ABI; 11007 } 11008 11009 /* For now, allow arbitrary mixing of ASEs (retain the union). */ 11010 if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE)) 11011 { 11012 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE; 11013 11014 new_flags &= ~ EF_MIPS_ARCH_ASE; 11015 old_flags &= ~ EF_MIPS_ARCH_ASE; 11016 } 11017 11018 /* Warn about any other mismatches */ 11019 if (new_flags != old_flags) 11020 { 11021 (*_bfd_error_handler) 11022 (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"), 11023 ibfd, (unsigned long) new_flags, 11024 (unsigned long) old_flags); 11025 ok = FALSE; 11026 } 11027 11028 if (! ok) 11029 { 11030 bfd_set_error (bfd_error_bad_value); 11031 return FALSE; 11032 } 11033 11034 return TRUE; 11035 } 11036 11037 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */ 11038 11039 bfd_boolean 11040 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags) 11041 { 11042 BFD_ASSERT (!elf_flags_init (abfd) 11043 || elf_elfheader (abfd)->e_flags == flags); 11044 11045 elf_elfheader (abfd)->e_flags = flags; 11046 elf_flags_init (abfd) = TRUE; 11047 return TRUE; 11048 } 11049 11050 bfd_boolean 11051 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr) 11052 { 11053 FILE *file = ptr; 11054 11055 BFD_ASSERT (abfd != NULL && ptr != NULL); 11056 11057 /* Print normal ELF private data. */ 11058 _bfd_elf_print_private_bfd_data (abfd, ptr); 11059 11060 /* xgettext:c-format */ 11061 fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags); 11062 11063 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32) 11064 fprintf (file, _(" [abi=O32]")); 11065 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64) 11066 fprintf (file, _(" [abi=O64]")); 11067 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32) 11068 fprintf (file, _(" [abi=EABI32]")); 11069 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64) 11070 fprintf (file, _(" [abi=EABI64]")); 11071 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI)) 11072 fprintf (file, _(" [abi unknown]")); 11073 else if (ABI_N32_P (abfd)) 11074 fprintf (file, _(" [abi=N32]")); 11075 else if (ABI_64_P (abfd)) 11076 fprintf (file, _(" [abi=64]")); 11077 else 11078 fprintf (file, _(" [no abi set]")); 11079 11080 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1) 11081 fprintf (file, _(" [mips1]")); 11082 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2) 11083 fprintf (file, _(" [mips2]")); 11084 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3) 11085 fprintf (file, _(" [mips3]")); 11086 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4) 11087 fprintf (file, _(" [mips4]")); 11088 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5) 11089 fprintf (file, _(" [mips5]")); 11090 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32) 11091 fprintf (file, _(" [mips32]")); 11092 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64) 11093 fprintf (file, _(" [mips64]")); 11094 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2) 11095 fprintf (file, _(" [mips32r2]")); 11096 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2) 11097 fprintf (file, _(" [mips64r2]")); 11098 else 11099 fprintf (file, _(" [unknown ISA]")); 11100 11101 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX) 11102 fprintf (file, _(" [mdmx]")); 11103 11104 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16) 11105 fprintf (file, _(" [mips16]")); 11106 11107 if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE) 11108 fprintf (file, _(" [32bitmode]")); 11109 else 11110 fprintf (file, _(" [not 32bitmode]")); 11111 11112 fputc ('\n', file); 11113 11114 return TRUE; 11115 } 11116 11117 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] = 11118 { 11119 { ".lit4", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 11120 { ".lit8", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 11121 { ".mdebug", 7, 0, SHT_MIPS_DEBUG, 0 }, 11122 { ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 11123 { ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, 11124 { ".ucode", 6, 0, SHT_MIPS_UCODE, 0 }, 11125 { NULL, 0, 0, 0, 0 } 11126 }; 11127 11128 /* Ensure that the STO_OPTIONAL flag is copied into h->other, 11129 even if this is not a defintion of the symbol. */ 11130 void 11131 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h, 11132 const Elf_Internal_Sym *isym, 11133 bfd_boolean definition, 11134 bfd_boolean dynamic ATTRIBUTE_UNUSED) 11135 { 11136 if (! definition 11137 && ELF_MIPS_IS_OPTIONAL (isym->st_other)) 11138 h->other |= STO_OPTIONAL; 11139 } 11140 11141 /* Decide whether an undefined symbol is special and can be ignored. 11142 This is the case for OPTIONAL symbols on IRIX. */ 11143 bfd_boolean 11144 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h) 11145 { 11146 return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE; 11147 } 11148 11149 bfd_boolean 11150 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym) 11151 { 11152 return (sym->st_shndx == SHN_COMMON 11153 || sym->st_shndx == SHN_MIPS_ACOMMON 11154 || sym->st_shndx == SHN_MIPS_SCOMMON); 11155 } 11156