1/* ELF executable support for BFD. 2 3 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 4 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 5 Free Software Foundation, Inc. 6 7 This file is part of BFD, the Binary File Descriptor library. 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 3 of the License, or 12 (at your option) any later version. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; if not, write to the Free Software 21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 22 MA 02110-1301, USA. */ 23 24 25/* 26SECTION 27 ELF backends 28 29 BFD support for ELF formats is being worked on. 30 Currently, the best supported back ends are for sparc and i386 31 (running svr4 or Solaris 2). 32 33 Documentation of the internals of the support code still needs 34 to be written. The code is changing quickly enough that we 35 haven't bothered yet. */ 36 37/* For sparc64-cross-sparc32. */ 38#define _SYSCALL32 39#include "sysdep.h" 40#include "bfd.h" 41#include "bfdlink.h" 42#include "libbfd.h" 43#define ARCH_SIZE 0 44#include "elf-bfd.h" 45#include "libiberty.h" 46#include "safe-ctype.h" 47 48#ifdef CORE_HEADER 49#include CORE_HEADER 50#endif 51 52static int elf_sort_sections (const void *, const void *); 53static bfd_boolean assign_file_positions_except_relocs (bfd *, struct bfd_link_info *); 54static bfd_boolean prep_headers (bfd *); 55static bfd_boolean swap_out_syms (bfd *, struct bfd_strtab_hash **, int) ; 56static bfd_boolean elf_read_notes (bfd *, file_ptr, bfd_size_type) ; 57static bfd_boolean elf_parse_notes (bfd *abfd, char *buf, size_t size, 58 file_ptr offset); 59 60/* Swap version information in and out. The version information is 61 currently size independent. If that ever changes, this code will 62 need to move into elfcode.h. */ 63 64/* Swap in a Verdef structure. */ 65 66void 67_bfd_elf_swap_verdef_in (bfd *abfd, 68 const Elf_External_Verdef *src, 69 Elf_Internal_Verdef *dst) 70{ 71 dst->vd_version = H_GET_16 (abfd, src->vd_version); 72 dst->vd_flags = H_GET_16 (abfd, src->vd_flags); 73 dst->vd_ndx = H_GET_16 (abfd, src->vd_ndx); 74 dst->vd_cnt = H_GET_16 (abfd, src->vd_cnt); 75 dst->vd_hash = H_GET_32 (abfd, src->vd_hash); 76 dst->vd_aux = H_GET_32 (abfd, src->vd_aux); 77 dst->vd_next = H_GET_32 (abfd, src->vd_next); 78} 79 80/* Swap out a Verdef structure. */ 81 82void 83_bfd_elf_swap_verdef_out (bfd *abfd, 84 const Elf_Internal_Verdef *src, 85 Elf_External_Verdef *dst) 86{ 87 H_PUT_16 (abfd, src->vd_version, dst->vd_version); 88 H_PUT_16 (abfd, src->vd_flags, dst->vd_flags); 89 H_PUT_16 (abfd, src->vd_ndx, dst->vd_ndx); 90 H_PUT_16 (abfd, src->vd_cnt, dst->vd_cnt); 91 H_PUT_32 (abfd, src->vd_hash, dst->vd_hash); 92 H_PUT_32 (abfd, src->vd_aux, dst->vd_aux); 93 H_PUT_32 (abfd, src->vd_next, dst->vd_next); 94} 95 96/* Swap in a Verdaux structure. */ 97 98void 99_bfd_elf_swap_verdaux_in (bfd *abfd, 100 const Elf_External_Verdaux *src, 101 Elf_Internal_Verdaux *dst) 102{ 103 dst->vda_name = H_GET_32 (abfd, src->vda_name); 104 dst->vda_next = H_GET_32 (abfd, src->vda_next); 105} 106 107/* Swap out a Verdaux structure. */ 108 109void 110_bfd_elf_swap_verdaux_out (bfd *abfd, 111 const Elf_Internal_Verdaux *src, 112 Elf_External_Verdaux *dst) 113{ 114 H_PUT_32 (abfd, src->vda_name, dst->vda_name); 115 H_PUT_32 (abfd, src->vda_next, dst->vda_next); 116} 117 118/* Swap in a Verneed structure. */ 119 120void 121_bfd_elf_swap_verneed_in (bfd *abfd, 122 const Elf_External_Verneed *src, 123 Elf_Internal_Verneed *dst) 124{ 125 dst->vn_version = H_GET_16 (abfd, src->vn_version); 126 dst->vn_cnt = H_GET_16 (abfd, src->vn_cnt); 127 dst->vn_file = H_GET_32 (abfd, src->vn_file); 128 dst->vn_aux = H_GET_32 (abfd, src->vn_aux); 129 dst->vn_next = H_GET_32 (abfd, src->vn_next); 130} 131 132/* Swap out a Verneed structure. */ 133 134void 135_bfd_elf_swap_verneed_out (bfd *abfd, 136 const Elf_Internal_Verneed *src, 137 Elf_External_Verneed *dst) 138{ 139 H_PUT_16 (abfd, src->vn_version, dst->vn_version); 140 H_PUT_16 (abfd, src->vn_cnt, dst->vn_cnt); 141 H_PUT_32 (abfd, src->vn_file, dst->vn_file); 142 H_PUT_32 (abfd, src->vn_aux, dst->vn_aux); 143 H_PUT_32 (abfd, src->vn_next, dst->vn_next); 144} 145 146/* Swap in a Vernaux structure. */ 147 148void 149_bfd_elf_swap_vernaux_in (bfd *abfd, 150 const Elf_External_Vernaux *src, 151 Elf_Internal_Vernaux *dst) 152{ 153 dst->vna_hash = H_GET_32 (abfd, src->vna_hash); 154 dst->vna_flags = H_GET_16 (abfd, src->vna_flags); 155 dst->vna_other = H_GET_16 (abfd, src->vna_other); 156 dst->vna_name = H_GET_32 (abfd, src->vna_name); 157 dst->vna_next = H_GET_32 (abfd, src->vna_next); 158} 159 160/* Swap out a Vernaux structure. */ 161 162void 163_bfd_elf_swap_vernaux_out (bfd *abfd, 164 const Elf_Internal_Vernaux *src, 165 Elf_External_Vernaux *dst) 166{ 167 H_PUT_32 (abfd, src->vna_hash, dst->vna_hash); 168 H_PUT_16 (abfd, src->vna_flags, dst->vna_flags); 169 H_PUT_16 (abfd, src->vna_other, dst->vna_other); 170 H_PUT_32 (abfd, src->vna_name, dst->vna_name); 171 H_PUT_32 (abfd, src->vna_next, dst->vna_next); 172} 173 174/* Swap in a Versym structure. */ 175 176void 177_bfd_elf_swap_versym_in (bfd *abfd, 178 const Elf_External_Versym *src, 179 Elf_Internal_Versym *dst) 180{ 181 dst->vs_vers = H_GET_16 (abfd, src->vs_vers); 182} 183 184/* Swap out a Versym structure. */ 185 186void 187_bfd_elf_swap_versym_out (bfd *abfd, 188 const Elf_Internal_Versym *src, 189 Elf_External_Versym *dst) 190{ 191 H_PUT_16 (abfd, src->vs_vers, dst->vs_vers); 192} 193 194/* Standard ELF hash function. Do not change this function; you will 195 cause invalid hash tables to be generated. */ 196 197unsigned long 198bfd_elf_hash (const char *namearg) 199{ 200 const unsigned char *name = (const unsigned char *) namearg; 201 unsigned long h = 0; 202 unsigned long g; 203 int ch; 204 205 while ((ch = *name++) != '\0') 206 { 207 h = (h << 4) + ch; 208 if ((g = (h & 0xf0000000)) != 0) 209 { 210 h ^= g >> 24; 211 /* The ELF ABI says `h &= ~g', but this is equivalent in 212 this case and on some machines one insn instead of two. */ 213 h ^= g; 214 } 215 } 216 return h & 0xffffffff; 217} 218 219/* DT_GNU_HASH hash function. Do not change this function; you will 220 cause invalid hash tables to be generated. */ 221 222unsigned long 223bfd_elf_gnu_hash (const char *namearg) 224{ 225 const unsigned char *name = (const unsigned char *) namearg; 226 unsigned long h = 5381; 227 unsigned char ch; 228 229 while ((ch = *name++) != '\0') 230 h = (h << 5) + h + ch; 231 return h & 0xffffffff; 232} 233 234/* Create a tdata field OBJECT_SIZE bytes in length, zeroed out and with 235 the object_id field of an elf_obj_tdata field set to OBJECT_ID. */ 236bfd_boolean 237bfd_elf_allocate_object (bfd *abfd, 238 size_t object_size, 239 enum elf_target_id object_id) 240{ 241 BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata)); 242 abfd->tdata.any = bfd_zalloc (abfd, object_size); 243 if (abfd->tdata.any == NULL) 244 return FALSE; 245 246 elf_object_id (abfd) = object_id; 247 elf_program_header_size (abfd) = (bfd_size_type) -1; 248 return TRUE; 249} 250 251 252bfd_boolean 253bfd_elf_make_object (bfd *abfd) 254{ 255 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 256 return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata), 257 bed->target_id); 258} 259 260bfd_boolean 261bfd_elf_mkcorefile (bfd *abfd) 262{ 263 /* I think this can be done just like an object file. */ 264 return abfd->xvec->_bfd_set_format[(int) bfd_object] (abfd); 265} 266 267static char * 268bfd_elf_get_str_section (bfd *abfd, unsigned int shindex) 269{ 270 Elf_Internal_Shdr **i_shdrp; 271 bfd_byte *shstrtab = NULL; 272 file_ptr offset; 273 bfd_size_type shstrtabsize; 274 275 i_shdrp = elf_elfsections (abfd); 276 if (i_shdrp == 0 277 || shindex >= elf_numsections (abfd) 278 || i_shdrp[shindex] == 0) 279 return NULL; 280 281 shstrtab = i_shdrp[shindex]->contents; 282 if (shstrtab == NULL) 283 { 284 /* No cached one, attempt to read, and cache what we read. */ 285 offset = i_shdrp[shindex]->sh_offset; 286 shstrtabsize = i_shdrp[shindex]->sh_size; 287 288 /* Allocate and clear an extra byte at the end, to prevent crashes 289 in case the string table is not terminated. */ 290 if (shstrtabsize + 1 <= 1 291 || (shstrtab = (bfd_byte *) bfd_alloc (abfd, shstrtabsize + 1)) == NULL 292 || bfd_seek (abfd, offset, SEEK_SET) != 0) 293 shstrtab = NULL; 294 else if (bfd_bread (shstrtab, shstrtabsize, abfd) != shstrtabsize) 295 { 296 if (bfd_get_error () != bfd_error_system_call) 297 bfd_set_error (bfd_error_file_truncated); 298 shstrtab = NULL; 299 /* Once we've failed to read it, make sure we don't keep 300 trying. Otherwise, we'll keep allocating space for 301 the string table over and over. */ 302 i_shdrp[shindex]->sh_size = 0; 303 } 304 else 305 shstrtab[shstrtabsize] = '\0'; 306 i_shdrp[shindex]->contents = shstrtab; 307 } 308 return (char *) shstrtab; 309} 310 311char * 312bfd_elf_string_from_elf_section (bfd *abfd, 313 unsigned int shindex, 314 unsigned int strindex) 315{ 316 Elf_Internal_Shdr *hdr; 317 318 if (strindex == 0) 319 return ""; 320 321 if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd)) 322 return NULL; 323 324 hdr = elf_elfsections (abfd)[shindex]; 325 326 if (hdr->contents == NULL 327 && bfd_elf_get_str_section (abfd, shindex) == NULL) 328 return NULL; 329 330 if (strindex >= hdr->sh_size) 331 { 332 unsigned int shstrndx = elf_elfheader(abfd)->e_shstrndx; 333 (*_bfd_error_handler) 334 (_("%B: invalid string offset %u >= %lu for section `%s'"), 335 abfd, strindex, (unsigned long) hdr->sh_size, 336 (shindex == shstrndx && strindex == hdr->sh_name 337 ? ".shstrtab" 338 : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name))); 339 return NULL; 340 } 341 342 return ((char *) hdr->contents) + strindex; 343} 344 345/* Read and convert symbols to internal format. 346 SYMCOUNT specifies the number of symbols to read, starting from 347 symbol SYMOFFSET. If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF 348 are non-NULL, they are used to store the internal symbols, external 349 symbols, and symbol section index extensions, respectively. 350 Returns a pointer to the internal symbol buffer (malloced if necessary) 351 or NULL if there were no symbols or some kind of problem. */ 352 353Elf_Internal_Sym * 354bfd_elf_get_elf_syms (bfd *ibfd, 355 Elf_Internal_Shdr *symtab_hdr, 356 size_t symcount, 357 size_t symoffset, 358 Elf_Internal_Sym *intsym_buf, 359 void *extsym_buf, 360 Elf_External_Sym_Shndx *extshndx_buf) 361{ 362 Elf_Internal_Shdr *shndx_hdr; 363 void *alloc_ext; 364 const bfd_byte *esym; 365 Elf_External_Sym_Shndx *alloc_extshndx; 366 Elf_External_Sym_Shndx *shndx; 367 Elf_Internal_Sym *alloc_intsym; 368 Elf_Internal_Sym *isym; 369 Elf_Internal_Sym *isymend; 370 const struct elf_backend_data *bed; 371 size_t extsym_size; 372 bfd_size_type amt; 373 file_ptr pos; 374 375 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) 376 abort (); 377 378 if (symcount == 0) 379 return intsym_buf; 380 381 /* Normal syms might have section extension entries. */ 382 shndx_hdr = NULL; 383 if (symtab_hdr == &elf_tdata (ibfd)->symtab_hdr) 384 shndx_hdr = &elf_tdata (ibfd)->symtab_shndx_hdr; 385 386 /* Read the symbols. */ 387 alloc_ext = NULL; 388 alloc_extshndx = NULL; 389 alloc_intsym = NULL; 390 bed = get_elf_backend_data (ibfd); 391 extsym_size = bed->s->sizeof_sym; 392 amt = symcount * extsym_size; 393 pos = symtab_hdr->sh_offset + symoffset * extsym_size; 394 if (extsym_buf == NULL) 395 { 396 alloc_ext = bfd_malloc2 (symcount, extsym_size); 397 extsym_buf = alloc_ext; 398 } 399 if (extsym_buf == NULL 400 || bfd_seek (ibfd, pos, SEEK_SET) != 0 401 || bfd_bread (extsym_buf, amt, ibfd) != amt) 402 { 403 intsym_buf = NULL; 404 goto out; 405 } 406 407 if (shndx_hdr == NULL || shndx_hdr->sh_size == 0) 408 extshndx_buf = NULL; 409 else 410 { 411 amt = symcount * sizeof (Elf_External_Sym_Shndx); 412 pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx); 413 if (extshndx_buf == NULL) 414 { 415 alloc_extshndx = (Elf_External_Sym_Shndx *) 416 bfd_malloc2 (symcount, sizeof (Elf_External_Sym_Shndx)); 417 extshndx_buf = alloc_extshndx; 418 } 419 if (extshndx_buf == NULL 420 || bfd_seek (ibfd, pos, SEEK_SET) != 0 421 || bfd_bread (extshndx_buf, amt, ibfd) != amt) 422 { 423 intsym_buf = NULL; 424 goto out; 425 } 426 } 427 428 if (intsym_buf == NULL) 429 { 430 alloc_intsym = (Elf_Internal_Sym *) 431 bfd_malloc2 (symcount, sizeof (Elf_Internal_Sym)); 432 intsym_buf = alloc_intsym; 433 if (intsym_buf == NULL) 434 goto out; 435 } 436 437 /* Convert the symbols to internal form. */ 438 isymend = intsym_buf + symcount; 439 for (esym = (const bfd_byte *) extsym_buf, isym = intsym_buf, 440 shndx = extshndx_buf; 441 isym < isymend; 442 esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL) 443 if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym)) 444 { 445 symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size; 446 (*_bfd_error_handler) (_("%B symbol number %lu references " 447 "nonexistent SHT_SYMTAB_SHNDX section"), 448 ibfd, (unsigned long) symoffset); 449 if (alloc_intsym != NULL) 450 free (alloc_intsym); 451 intsym_buf = NULL; 452 goto out; 453 } 454 455 out: 456 if (alloc_ext != NULL) 457 free (alloc_ext); 458 if (alloc_extshndx != NULL) 459 free (alloc_extshndx); 460 461 return intsym_buf; 462} 463 464/* Look up a symbol name. */ 465const char * 466bfd_elf_sym_name (bfd *abfd, 467 Elf_Internal_Shdr *symtab_hdr, 468 Elf_Internal_Sym *isym, 469 asection *sym_sec) 470{ 471 const char *name; 472 unsigned int iname = isym->st_name; 473 unsigned int shindex = symtab_hdr->sh_link; 474 475 if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION 476 /* Check for a bogus st_shndx to avoid crashing. */ 477 && isym->st_shndx < elf_numsections (abfd)) 478 { 479 iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name; 480 shindex = elf_elfheader (abfd)->e_shstrndx; 481 } 482 483 name = bfd_elf_string_from_elf_section (abfd, shindex, iname); 484 if (name == NULL) 485 name = "(null)"; 486 else if (sym_sec && *name == '\0') 487 name = bfd_section_name (abfd, sym_sec); 488 489 return name; 490} 491 492/* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP 493 sections. The first element is the flags, the rest are section 494 pointers. */ 495 496typedef union elf_internal_group { 497 Elf_Internal_Shdr *shdr; 498 unsigned int flags; 499} Elf_Internal_Group; 500 501/* Return the name of the group signature symbol. Why isn't the 502 signature just a string? */ 503 504static const char * 505group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr) 506{ 507 Elf_Internal_Shdr *hdr; 508 unsigned char esym[sizeof (Elf64_External_Sym)]; 509 Elf_External_Sym_Shndx eshndx; 510 Elf_Internal_Sym isym; 511 512 /* First we need to ensure the symbol table is available. Make sure 513 that it is a symbol table section. */ 514 if (ghdr->sh_link >= elf_numsections (abfd)) 515 return NULL; 516 hdr = elf_elfsections (abfd) [ghdr->sh_link]; 517 if (hdr->sh_type != SHT_SYMTAB 518 || ! bfd_section_from_shdr (abfd, ghdr->sh_link)) 519 return NULL; 520 521 /* Go read the symbol. */ 522 hdr = &elf_tdata (abfd)->symtab_hdr; 523 if (bfd_elf_get_elf_syms (abfd, hdr, 1, ghdr->sh_info, 524 &isym, esym, &eshndx) == NULL) 525 return NULL; 526 527 return bfd_elf_sym_name (abfd, hdr, &isym, NULL); 528} 529 530/* Set next_in_group list pointer, and group name for NEWSECT. */ 531 532static bfd_boolean 533setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect) 534{ 535 unsigned int num_group = elf_tdata (abfd)->num_group; 536 537 /* If num_group is zero, read in all SHT_GROUP sections. The count 538 is set to -1 if there are no SHT_GROUP sections. */ 539 if (num_group == 0) 540 { 541 unsigned int i, shnum; 542 543 /* First count the number of groups. If we have a SHT_GROUP 544 section with just a flag word (ie. sh_size is 4), ignore it. */ 545 shnum = elf_numsections (abfd); 546 num_group = 0; 547 548#define IS_VALID_GROUP_SECTION_HEADER(shdr) \ 549 ( (shdr)->sh_type == SHT_GROUP \ 550 && (shdr)->sh_size >= (2 * GRP_ENTRY_SIZE) \ 551 && (shdr)->sh_entsize == GRP_ENTRY_SIZE \ 552 && ((shdr)->sh_size % GRP_ENTRY_SIZE) == 0) 553 554 for (i = 0; i < shnum; i++) 555 { 556 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i]; 557 558 if (IS_VALID_GROUP_SECTION_HEADER (shdr)) 559 num_group += 1; 560 } 561 562 if (num_group == 0) 563 { 564 num_group = (unsigned) -1; 565 elf_tdata (abfd)->num_group = num_group; 566 } 567 else 568 { 569 /* We keep a list of elf section headers for group sections, 570 so we can find them quickly. */ 571 bfd_size_type amt; 572 573 elf_tdata (abfd)->num_group = num_group; 574 elf_tdata (abfd)->group_sect_ptr = (Elf_Internal_Shdr **) 575 bfd_alloc2 (abfd, num_group, sizeof (Elf_Internal_Shdr *)); 576 if (elf_tdata (abfd)->group_sect_ptr == NULL) 577 return FALSE; 578 579 num_group = 0; 580 for (i = 0; i < shnum; i++) 581 { 582 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i]; 583 584 if (IS_VALID_GROUP_SECTION_HEADER (shdr)) 585 { 586 unsigned char *src; 587 Elf_Internal_Group *dest; 588 589 /* Add to list of sections. */ 590 elf_tdata (abfd)->group_sect_ptr[num_group] = shdr; 591 num_group += 1; 592 593 /* Read the raw contents. */ 594 BFD_ASSERT (sizeof (*dest) >= 4); 595 amt = shdr->sh_size * sizeof (*dest) / 4; 596 shdr->contents = (unsigned char *) 597 bfd_alloc2 (abfd, shdr->sh_size, sizeof (*dest) / 4); 598 /* PR binutils/4110: Handle corrupt group headers. */ 599 if (shdr->contents == NULL) 600 { 601 _bfd_error_handler 602 (_("%B: Corrupt size field in group section header: 0x%lx"), abfd, shdr->sh_size); 603 bfd_set_error (bfd_error_bad_value); 604 return FALSE; 605 } 606 607 memset (shdr->contents, 0, amt); 608 609 if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0 610 || (bfd_bread (shdr->contents, shdr->sh_size, abfd) 611 != shdr->sh_size)) 612 return FALSE; 613 614 /* Translate raw contents, a flag word followed by an 615 array of elf section indices all in target byte order, 616 to the flag word followed by an array of elf section 617 pointers. */ 618 src = shdr->contents + shdr->sh_size; 619 dest = (Elf_Internal_Group *) (shdr->contents + amt); 620 while (1) 621 { 622 unsigned int idx; 623 624 src -= 4; 625 --dest; 626 idx = H_GET_32 (abfd, src); 627 if (src == shdr->contents) 628 { 629 dest->flags = idx; 630 if (shdr->bfd_section != NULL && (idx & GRP_COMDAT)) 631 shdr->bfd_section->flags 632 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD; 633 break; 634 } 635 if (idx >= shnum) 636 { 637 ((*_bfd_error_handler) 638 (_("%B: invalid SHT_GROUP entry"), abfd)); 639 idx = 0; 640 } 641 dest->shdr = elf_elfsections (abfd)[idx]; 642 } 643 } 644 } 645 } 646 } 647 648 if (num_group != (unsigned) -1) 649 { 650 unsigned int i; 651 652 for (i = 0; i < num_group; i++) 653 { 654 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i]; 655 Elf_Internal_Group *idx = (Elf_Internal_Group *) shdr->contents; 656 unsigned int n_elt = shdr->sh_size / 4; 657 658 /* Look through this group's sections to see if current 659 section is a member. */ 660 while (--n_elt != 0) 661 if ((++idx)->shdr == hdr) 662 { 663 asection *s = NULL; 664 665 /* We are a member of this group. Go looking through 666 other members to see if any others are linked via 667 next_in_group. */ 668 idx = (Elf_Internal_Group *) shdr->contents; 669 n_elt = shdr->sh_size / 4; 670 while (--n_elt != 0) 671 if ((s = (++idx)->shdr->bfd_section) != NULL 672 && elf_next_in_group (s) != NULL) 673 break; 674 if (n_elt != 0) 675 { 676 /* Snarf the group name from other member, and 677 insert current section in circular list. */ 678 elf_group_name (newsect) = elf_group_name (s); 679 elf_next_in_group (newsect) = elf_next_in_group (s); 680 elf_next_in_group (s) = newsect; 681 } 682 else 683 { 684 const char *gname; 685 686 gname = group_signature (abfd, shdr); 687 if (gname == NULL) 688 return FALSE; 689 elf_group_name (newsect) = gname; 690 691 /* Start a circular list with one element. */ 692 elf_next_in_group (newsect) = newsect; 693 } 694 695 /* If the group section has been created, point to the 696 new member. */ 697 if (shdr->bfd_section != NULL) 698 elf_next_in_group (shdr->bfd_section) = newsect; 699 700 i = num_group - 1; 701 break; 702 } 703 } 704 } 705 706 if (elf_group_name (newsect) == NULL) 707 { 708 (*_bfd_error_handler) (_("%B: no group info for section %A"), 709 abfd, newsect); 710 } 711 return TRUE; 712} 713 714bfd_boolean 715_bfd_elf_setup_sections (bfd *abfd) 716{ 717 unsigned int i; 718 unsigned int num_group = elf_tdata (abfd)->num_group; 719 bfd_boolean result = TRUE; 720 asection *s; 721 722 /* Process SHF_LINK_ORDER. */ 723 for (s = abfd->sections; s != NULL; s = s->next) 724 { 725 Elf_Internal_Shdr *this_hdr = &elf_section_data (s)->this_hdr; 726 if ((this_hdr->sh_flags & SHF_LINK_ORDER) != 0) 727 { 728 unsigned int elfsec = this_hdr->sh_link; 729 /* FIXME: The old Intel compiler and old strip/objcopy may 730 not set the sh_link or sh_info fields. Hence we could 731 get the situation where elfsec is 0. */ 732 if (elfsec == 0) 733 { 734 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 735 if (bed->link_order_error_handler) 736 bed->link_order_error_handler 737 (_("%B: warning: sh_link not set for section `%A'"), 738 abfd, s); 739 } 740 else 741 { 742 asection *linksec = NULL; 743 744 if (elfsec < elf_numsections (abfd)) 745 { 746 this_hdr = elf_elfsections (abfd)[elfsec]; 747 linksec = this_hdr->bfd_section; 748 } 749 750 /* PR 1991, 2008: 751 Some strip/objcopy may leave an incorrect value in 752 sh_link. We don't want to proceed. */ 753 if (linksec == NULL) 754 { 755 (*_bfd_error_handler) 756 (_("%B: sh_link [%d] in section `%A' is incorrect"), 757 s->owner, s, elfsec); 758 result = FALSE; 759 } 760 761 elf_linked_to_section (s) = linksec; 762 } 763 } 764 } 765 766 /* Process section groups. */ 767 if (num_group == (unsigned) -1) 768 return result; 769 770 for (i = 0; i < num_group; i++) 771 { 772 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i]; 773 Elf_Internal_Group *idx = (Elf_Internal_Group *) shdr->contents; 774 unsigned int n_elt = shdr->sh_size / 4; 775 776 while (--n_elt != 0) 777 if ((++idx)->shdr->bfd_section) 778 elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section; 779 else if (idx->shdr->sh_type == SHT_RELA 780 || idx->shdr->sh_type == SHT_REL) 781 /* We won't include relocation sections in section groups in 782 output object files. We adjust the group section size here 783 so that relocatable link will work correctly when 784 relocation sections are in section group in input object 785 files. */ 786 shdr->bfd_section->size -= 4; 787 else 788 { 789 /* There are some unknown sections in the group. */ 790 (*_bfd_error_handler) 791 (_("%B: unknown [%d] section `%s' in group [%s]"), 792 abfd, 793 (unsigned int) idx->shdr->sh_type, 794 bfd_elf_string_from_elf_section (abfd, 795 (elf_elfheader (abfd) 796 ->e_shstrndx), 797 idx->shdr->sh_name), 798 shdr->bfd_section->name); 799 result = FALSE; 800 } 801 } 802 return result; 803} 804 805bfd_boolean 806bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec) 807{ 808 return elf_next_in_group (sec) != NULL; 809} 810 811/* Make a BFD section from an ELF section. We store a pointer to the 812 BFD section in the bfd_section field of the header. */ 813 814bfd_boolean 815_bfd_elf_make_section_from_shdr (bfd *abfd, 816 Elf_Internal_Shdr *hdr, 817 const char *name, 818 int shindex) 819{ 820 asection *newsect; 821 flagword flags; 822 const struct elf_backend_data *bed; 823 824 if (hdr->bfd_section != NULL) 825 return TRUE; 826 827 newsect = bfd_make_section_anyway (abfd, name); 828 if (newsect == NULL) 829 return FALSE; 830 831 hdr->bfd_section = newsect; 832 elf_section_data (newsect)->this_hdr = *hdr; 833 elf_section_data (newsect)->this_idx = shindex; 834 835 /* Always use the real type/flags. */ 836 elf_section_type (newsect) = hdr->sh_type; 837 elf_section_flags (newsect) = hdr->sh_flags; 838 839 newsect->filepos = hdr->sh_offset; 840 841 if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr) 842 || ! bfd_set_section_size (abfd, newsect, hdr->sh_size) 843 || ! bfd_set_section_alignment (abfd, newsect, 844 bfd_log2 (hdr->sh_addralign))) 845 return FALSE; 846 847 flags = SEC_NO_FLAGS; 848 if (hdr->sh_type != SHT_NOBITS) 849 flags |= SEC_HAS_CONTENTS; 850 if (hdr->sh_type == SHT_GROUP) 851 flags |= SEC_GROUP | SEC_EXCLUDE; 852 if ((hdr->sh_flags & SHF_ALLOC) != 0) 853 { 854 flags |= SEC_ALLOC; 855 if (hdr->sh_type != SHT_NOBITS) 856 flags |= SEC_LOAD; 857 } 858 if ((hdr->sh_flags & SHF_WRITE) == 0) 859 flags |= SEC_READONLY; 860 if ((hdr->sh_flags & SHF_EXECINSTR) != 0) 861 flags |= SEC_CODE; 862 else if ((flags & SEC_LOAD) != 0) 863 flags |= SEC_DATA; 864 if ((hdr->sh_flags & SHF_MERGE) != 0) 865 { 866 flags |= SEC_MERGE; 867 newsect->entsize = hdr->sh_entsize; 868 if ((hdr->sh_flags & SHF_STRINGS) != 0) 869 flags |= SEC_STRINGS; 870 } 871 if (hdr->sh_flags & SHF_GROUP) 872 if (!setup_group (abfd, hdr, newsect)) 873 return FALSE; 874 if ((hdr->sh_flags & SHF_TLS) != 0) 875 flags |= SEC_THREAD_LOCAL; 876 if ((hdr->sh_flags & SHF_EXCLUDE) != 0) 877 flags |= SEC_EXCLUDE; 878 879 if ((flags & SEC_ALLOC) == 0) 880 { 881 /* The debugging sections appear to be recognized only by name, 882 not any sort of flag. Their SEC_ALLOC bits are cleared. */ 883 static const struct 884 { 885 const char *name; 886 int len; 887 } debug_sections [] = 888 { 889 { STRING_COMMA_LEN ("debug") }, /* 'd' */ 890 { NULL, 0 }, /* 'e' */ 891 { NULL, 0 }, /* 'f' */ 892 { STRING_COMMA_LEN ("gnu.linkonce.wi.") }, /* 'g' */ 893 { NULL, 0 }, /* 'h' */ 894 { NULL, 0 }, /* 'i' */ 895 { NULL, 0 }, /* 'j' */ 896 { NULL, 0 }, /* 'k' */ 897 { STRING_COMMA_LEN ("line") }, /* 'l' */ 898 { NULL, 0 }, /* 'm' */ 899 { NULL, 0 }, /* 'n' */ 900 { NULL, 0 }, /* 'o' */ 901 { NULL, 0 }, /* 'p' */ 902 { NULL, 0 }, /* 'q' */ 903 { NULL, 0 }, /* 'r' */ 904 { STRING_COMMA_LEN ("stab") }, /* 's' */ 905 { NULL, 0 }, /* 't' */ 906 { NULL, 0 }, /* 'u' */ 907 { NULL, 0 }, /* 'v' */ 908 { NULL, 0 }, /* 'w' */ 909 { NULL, 0 }, /* 'x' */ 910 { NULL, 0 }, /* 'y' */ 911 { STRING_COMMA_LEN ("zdebug") } /* 'z' */ 912 }; 913 914 if (name [0] == '.') 915 { 916 int i = name [1] - 'd'; 917 if (i >= 0 918 && i < (int) ARRAY_SIZE (debug_sections) 919 && debug_sections [i].name != NULL 920 && strncmp (&name [1], debug_sections [i].name, 921 debug_sections [i].len) == 0) 922 flags |= SEC_DEBUGGING; 923 } 924 } 925 926 /* As a GNU extension, if the name begins with .gnu.linkonce, we 927 only link a single copy of the section. This is used to support 928 g++. g++ will emit each template expansion in its own section. 929 The symbols will be defined as weak, so that multiple definitions 930 are permitted. The GNU linker extension is to actually discard 931 all but one of the sections. */ 932 if (CONST_STRNEQ (name, ".gnu.linkonce") 933 && elf_next_in_group (newsect) == NULL) 934 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD; 935 936 bed = get_elf_backend_data (abfd); 937 if (bed->elf_backend_section_flags) 938 if (! bed->elf_backend_section_flags (&flags, hdr)) 939 return FALSE; 940 941 if (! bfd_set_section_flags (abfd, newsect, flags)) 942 return FALSE; 943 944 /* We do not parse the PT_NOTE segments as we are interested even in the 945 separate debug info files which may have the segments offsets corrupted. 946 PT_NOTEs from the core files are currently not parsed using BFD. */ 947 if (hdr->sh_type == SHT_NOTE) 948 { 949 bfd_byte *contents; 950 951 if (!bfd_malloc_and_get_section (abfd, newsect, &contents)) 952 return FALSE; 953 954 elf_parse_notes (abfd, (char *) contents, hdr->sh_size, -1); 955 free (contents); 956 } 957 958 if ((flags & SEC_ALLOC) != 0) 959 { 960 Elf_Internal_Phdr *phdr; 961 unsigned int i, nload; 962 963 /* Some ELF linkers produce binaries with all the program header 964 p_paddr fields zero. If we have such a binary with more than 965 one PT_LOAD header, then leave the section lma equal to vma 966 so that we don't create sections with overlapping lma. */ 967 phdr = elf_tdata (abfd)->phdr; 968 for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++) 969 if (phdr->p_paddr != 0) 970 break; 971 else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0) 972 ++nload; 973 if (i >= elf_elfheader (abfd)->e_phnum && nload > 1) 974 return TRUE; 975 976 phdr = elf_tdata (abfd)->phdr; 977 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++) 978 { 979 if (((phdr->p_type == PT_LOAD 980 && (hdr->sh_flags & SHF_TLS) == 0) 981 || phdr->p_type == PT_TLS) 982 && ELF_SECTION_IN_SEGMENT (hdr, phdr)) 983 { 984 if ((flags & SEC_LOAD) == 0) 985 newsect->lma = (phdr->p_paddr 986 + hdr->sh_addr - phdr->p_vaddr); 987 else 988 /* We used to use the same adjustment for SEC_LOAD 989 sections, but that doesn't work if the segment 990 is packed with code from multiple VMAs. 991 Instead we calculate the section LMA based on 992 the segment LMA. It is assumed that the 993 segment will contain sections with contiguous 994 LMAs, even if the VMAs are not. */ 995 newsect->lma = (phdr->p_paddr 996 + hdr->sh_offset - phdr->p_offset); 997 998 /* With contiguous segments, we can't tell from file 999 offsets whether a section with zero size should 1000 be placed at the end of one segment or the 1001 beginning of the next. Decide based on vaddr. */ 1002 if (hdr->sh_addr >= phdr->p_vaddr 1003 && (hdr->sh_addr + hdr->sh_size 1004 <= phdr->p_vaddr + phdr->p_memsz)) 1005 break; 1006 } 1007 } 1008 } 1009 1010 /* Compress/decompress DWARF debug sections with names: .debug_* and 1011 .zdebug_*, after the section flags is set. */ 1012 if ((flags & SEC_DEBUGGING) 1013 && ((name[1] == 'd' && name[6] == '_') 1014 || (name[1] == 'z' && name[7] == '_'))) 1015 { 1016 enum { nothing, compress, decompress } action = nothing; 1017 char *new_name; 1018 1019 if (bfd_is_section_compressed (abfd, newsect)) 1020 { 1021 /* Compressed section. Check if we should decompress. */ 1022 if ((abfd->flags & BFD_DECOMPRESS)) 1023 action = decompress; 1024 } 1025 else 1026 { 1027 /* Normal section. Check if we should compress. */ 1028 if ((abfd->flags & BFD_COMPRESS)) 1029 action = compress; 1030 } 1031 1032 new_name = NULL; 1033 switch (action) 1034 { 1035 case nothing: 1036 break; 1037 case compress: 1038 if (!bfd_init_section_compress_status (abfd, newsect)) 1039 { 1040 (*_bfd_error_handler) 1041 (_("%B: unable to initialize commpress status for section %s"), 1042 abfd, name); 1043 return FALSE; 1044 } 1045 if (name[1] != 'z') 1046 { 1047 unsigned int len = strlen (name); 1048 1049 new_name = bfd_alloc (abfd, len + 2); 1050 if (new_name == NULL) 1051 return FALSE; 1052 new_name[0] = '.'; 1053 new_name[1] = 'z'; 1054 memcpy (new_name + 2, name + 1, len); 1055 } 1056 break; 1057 case decompress: 1058 if (!bfd_init_section_decompress_status (abfd, newsect)) 1059 { 1060 (*_bfd_error_handler) 1061 (_("%B: unable to initialize decommpress status for section %s"), 1062 abfd, name); 1063 return FALSE; 1064 } 1065 if (name[1] == 'z') 1066 { 1067 unsigned int len = strlen (name); 1068 1069 new_name = bfd_alloc (abfd, len); 1070 if (new_name == NULL) 1071 return FALSE; 1072 new_name[0] = '.'; 1073 memcpy (new_name + 1, name + 2, len - 1); 1074 } 1075 break; 1076 } 1077 if (new_name != NULL) 1078 bfd_rename_section (abfd, newsect, new_name); 1079 } 1080 1081 return TRUE; 1082} 1083 1084const char *const bfd_elf_section_type_names[] = { 1085 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB", 1086 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE", 1087 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM", 1088}; 1089 1090/* ELF relocs are against symbols. If we are producing relocatable 1091 output, and the reloc is against an external symbol, and nothing 1092 has given us any additional addend, the resulting reloc will also 1093 be against the same symbol. In such a case, we don't want to 1094 change anything about the way the reloc is handled, since it will 1095 all be done at final link time. Rather than put special case code 1096 into bfd_perform_relocation, all the reloc types use this howto 1097 function. It just short circuits the reloc if producing 1098 relocatable output against an external symbol. */ 1099 1100bfd_reloc_status_type 1101bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, 1102 arelent *reloc_entry, 1103 asymbol *symbol, 1104 void *data ATTRIBUTE_UNUSED, 1105 asection *input_section, 1106 bfd *output_bfd, 1107 char **error_message ATTRIBUTE_UNUSED) 1108{ 1109 if (output_bfd != NULL 1110 && (symbol->flags & BSF_SECTION_SYM) == 0 1111 && (! reloc_entry->howto->partial_inplace 1112 || reloc_entry->addend == 0)) 1113 { 1114 reloc_entry->address += input_section->output_offset; 1115 return bfd_reloc_ok; 1116 } 1117 1118 return bfd_reloc_continue; 1119} 1120 1121/* Copy the program header and other data from one object module to 1122 another. */ 1123 1124bfd_boolean 1125_bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd) 1126{ 1127 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour 1128 || bfd_get_flavour (obfd) != bfd_target_elf_flavour) 1129 return TRUE; 1130 1131 BFD_ASSERT (!elf_flags_init (obfd) 1132 || (elf_elfheader (obfd)->e_flags 1133 == elf_elfheader (ibfd)->e_flags)); 1134 1135 elf_gp (obfd) = elf_gp (ibfd); 1136 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags; 1137 elf_flags_init (obfd) = TRUE; 1138 1139 /* Copy object attributes. */ 1140 _bfd_elf_copy_obj_attributes (ibfd, obfd); 1141 return TRUE; 1142} 1143 1144static const char * 1145get_segment_type (unsigned int p_type) 1146{ 1147 const char *pt; 1148 switch (p_type) 1149 { 1150 case PT_NULL: pt = "NULL"; break; 1151 case PT_LOAD: pt = "LOAD"; break; 1152 case PT_DYNAMIC: pt = "DYNAMIC"; break; 1153 case PT_INTERP: pt = "INTERP"; break; 1154 case PT_NOTE: pt = "NOTE"; break; 1155 case PT_SHLIB: pt = "SHLIB"; break; 1156 case PT_PHDR: pt = "PHDR"; break; 1157 case PT_TLS: pt = "TLS"; break; 1158 case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break; 1159 case PT_GNU_STACK: pt = "STACK"; break; 1160 case PT_GNU_RELRO: pt = "RELRO"; break; 1161 default: pt = NULL; break; 1162 } 1163 return pt; 1164} 1165 1166/* Print out the program headers. */ 1167 1168bfd_boolean 1169_bfd_elf_print_private_bfd_data (bfd *abfd, void *farg) 1170{ 1171 FILE *f = (FILE *) farg; 1172 Elf_Internal_Phdr *p; 1173 asection *s; 1174 bfd_byte *dynbuf = NULL; 1175 1176 p = elf_tdata (abfd)->phdr; 1177 if (p != NULL) 1178 { 1179 unsigned int i, c; 1180 1181 fprintf (f, _("\nProgram Header:\n")); 1182 c = elf_elfheader (abfd)->e_phnum; 1183 for (i = 0; i < c; i++, p++) 1184 { 1185 const char *pt = get_segment_type (p->p_type); 1186 char buf[20]; 1187 1188 if (pt == NULL) 1189 { 1190 sprintf (buf, "0x%lx", p->p_type); 1191 pt = buf; 1192 } 1193 fprintf (f, "%8s off 0x", pt); 1194 bfd_fprintf_vma (abfd, f, p->p_offset); 1195 fprintf (f, " vaddr 0x"); 1196 bfd_fprintf_vma (abfd, f, p->p_vaddr); 1197 fprintf (f, " paddr 0x"); 1198 bfd_fprintf_vma (abfd, f, p->p_paddr); 1199 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align)); 1200 fprintf (f, " filesz 0x"); 1201 bfd_fprintf_vma (abfd, f, p->p_filesz); 1202 fprintf (f, " memsz 0x"); 1203 bfd_fprintf_vma (abfd, f, p->p_memsz); 1204 fprintf (f, " flags %c%c%c", 1205 (p->p_flags & PF_R) != 0 ? 'r' : '-', 1206 (p->p_flags & PF_W) != 0 ? 'w' : '-', 1207 (p->p_flags & PF_X) != 0 ? 'x' : '-'); 1208 if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0) 1209 fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)); 1210 fprintf (f, "\n"); 1211 } 1212 } 1213 1214 s = bfd_get_section_by_name (abfd, ".dynamic"); 1215 if (s != NULL) 1216 { 1217 unsigned int elfsec; 1218 unsigned long shlink; 1219 bfd_byte *extdyn, *extdynend; 1220 size_t extdynsize; 1221 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *); 1222 1223 fprintf (f, _("\nDynamic Section:\n")); 1224 1225 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf)) 1226 goto error_return; 1227 1228 elfsec = _bfd_elf_section_from_bfd_section (abfd, s); 1229 if (elfsec == SHN_BAD) 1230 goto error_return; 1231 shlink = elf_elfsections (abfd)[elfsec]->sh_link; 1232 1233 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn; 1234 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in; 1235 1236 extdyn = dynbuf; 1237 extdynend = extdyn + s->size; 1238 for (; extdyn < extdynend; extdyn += extdynsize) 1239 { 1240 Elf_Internal_Dyn dyn; 1241 const char *name = ""; 1242 char ab[20]; 1243 bfd_boolean stringp; 1244 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 1245 1246 (*swap_dyn_in) (abfd, extdyn, &dyn); 1247 1248 if (dyn.d_tag == DT_NULL) 1249 break; 1250 1251 stringp = FALSE; 1252 switch (dyn.d_tag) 1253 { 1254 default: 1255 if (bed->elf_backend_get_target_dtag) 1256 name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag); 1257 1258 if (!strcmp (name, "")) 1259 { 1260 sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag); 1261 name = ab; 1262 } 1263 break; 1264 1265 case DT_NEEDED: name = "NEEDED"; stringp = TRUE; break; 1266 case DT_PLTRELSZ: name = "PLTRELSZ"; break; 1267 case DT_PLTGOT: name = "PLTGOT"; break; 1268 case DT_HASH: name = "HASH"; break; 1269 case DT_STRTAB: name = "STRTAB"; break; 1270 case DT_SYMTAB: name = "SYMTAB"; break; 1271 case DT_RELA: name = "RELA"; break; 1272 case DT_RELASZ: name = "RELASZ"; break; 1273 case DT_RELAENT: name = "RELAENT"; break; 1274 case DT_STRSZ: name = "STRSZ"; break; 1275 case DT_SYMENT: name = "SYMENT"; break; 1276 case DT_INIT: name = "INIT"; break; 1277 case DT_FINI: name = "FINI"; break; 1278 case DT_SONAME: name = "SONAME"; stringp = TRUE; break; 1279 case DT_RPATH: name = "RPATH"; stringp = TRUE; break; 1280 case DT_SYMBOLIC: name = "SYMBOLIC"; break; 1281 case DT_REL: name = "REL"; break; 1282 case DT_RELSZ: name = "RELSZ"; break; 1283 case DT_RELENT: name = "RELENT"; break; 1284 case DT_PLTREL: name = "PLTREL"; break; 1285 case DT_DEBUG: name = "DEBUG"; break; 1286 case DT_TEXTREL: name = "TEXTREL"; break; 1287 case DT_JMPREL: name = "JMPREL"; break; 1288 case DT_BIND_NOW: name = "BIND_NOW"; break; 1289 case DT_INIT_ARRAY: name = "INIT_ARRAY"; break; 1290 case DT_FINI_ARRAY: name = "FINI_ARRAY"; break; 1291 case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break; 1292 case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break; 1293 case DT_RUNPATH: name = "RUNPATH"; stringp = TRUE; break; 1294 case DT_FLAGS: name = "FLAGS"; break; 1295 case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break; 1296 case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break; 1297 case DT_CHECKSUM: name = "CHECKSUM"; break; 1298 case DT_PLTPADSZ: name = "PLTPADSZ"; break; 1299 case DT_MOVEENT: name = "MOVEENT"; break; 1300 case DT_MOVESZ: name = "MOVESZ"; break; 1301 case DT_FEATURE: name = "FEATURE"; break; 1302 case DT_POSFLAG_1: name = "POSFLAG_1"; break; 1303 case DT_SYMINSZ: name = "SYMINSZ"; break; 1304 case DT_SYMINENT: name = "SYMINENT"; break; 1305 case DT_CONFIG: name = "CONFIG"; stringp = TRUE; break; 1306 case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = TRUE; break; 1307 case DT_AUDIT: name = "AUDIT"; stringp = TRUE; break; 1308 case DT_PLTPAD: name = "PLTPAD"; break; 1309 case DT_MOVETAB: name = "MOVETAB"; break; 1310 case DT_SYMINFO: name = "SYMINFO"; break; 1311 case DT_RELACOUNT: name = "RELACOUNT"; break; 1312 case DT_RELCOUNT: name = "RELCOUNT"; break; 1313 case DT_FLAGS_1: name = "FLAGS_1"; break; 1314 case DT_VERSYM: name = "VERSYM"; break; 1315 case DT_VERDEF: name = "VERDEF"; break; 1316 case DT_VERDEFNUM: name = "VERDEFNUM"; break; 1317 case DT_VERNEED: name = "VERNEED"; break; 1318 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break; 1319 case DT_AUXILIARY: name = "AUXILIARY"; stringp = TRUE; break; 1320 case DT_USED: name = "USED"; break; 1321 case DT_FILTER: name = "FILTER"; stringp = TRUE; break; 1322 case DT_GNU_HASH: name = "GNU_HASH"; break; 1323 } 1324 1325 fprintf (f, " %-20s ", name); 1326 if (! stringp) 1327 { 1328 fprintf (f, "0x"); 1329 bfd_fprintf_vma (abfd, f, dyn.d_un.d_val); 1330 } 1331 else 1332 { 1333 const char *string; 1334 unsigned int tagv = dyn.d_un.d_val; 1335 1336 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv); 1337 if (string == NULL) 1338 goto error_return; 1339 fprintf (f, "%s", string); 1340 } 1341 fprintf (f, "\n"); 1342 } 1343 1344 free (dynbuf); 1345 dynbuf = NULL; 1346 } 1347 1348 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL) 1349 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL)) 1350 { 1351 if (! _bfd_elf_slurp_version_tables (abfd, FALSE)) 1352 return FALSE; 1353 } 1354 1355 if (elf_dynverdef (abfd) != 0) 1356 { 1357 Elf_Internal_Verdef *t; 1358 1359 fprintf (f, _("\nVersion definitions:\n")); 1360 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef) 1361 { 1362 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx, 1363 t->vd_flags, t->vd_hash, 1364 t->vd_nodename ? t->vd_nodename : "<corrupt>"); 1365 if (t->vd_auxptr != NULL && t->vd_auxptr->vda_nextptr != NULL) 1366 { 1367 Elf_Internal_Verdaux *a; 1368 1369 fprintf (f, "\t"); 1370 for (a = t->vd_auxptr->vda_nextptr; 1371 a != NULL; 1372 a = a->vda_nextptr) 1373 fprintf (f, "%s ", 1374 a->vda_nodename ? a->vda_nodename : "<corrupt>"); 1375 fprintf (f, "\n"); 1376 } 1377 } 1378 } 1379 1380 if (elf_dynverref (abfd) != 0) 1381 { 1382 Elf_Internal_Verneed *t; 1383 1384 fprintf (f, _("\nVersion References:\n")); 1385 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref) 1386 { 1387 Elf_Internal_Vernaux *a; 1388 1389 fprintf (f, _(" required from %s:\n"), 1390 t->vn_filename ? t->vn_filename : "<corrupt>"); 1391 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 1392 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash, 1393 a->vna_flags, a->vna_other, 1394 a->vna_nodename ? a->vna_nodename : "<corrupt>"); 1395 } 1396 } 1397 1398 return TRUE; 1399 1400 error_return: 1401 if (dynbuf != NULL) 1402 free (dynbuf); 1403 return FALSE; 1404} 1405 1406/* Display ELF-specific fields of a symbol. */ 1407 1408void 1409bfd_elf_print_symbol (bfd *abfd, 1410 void *filep, 1411 asymbol *symbol, 1412 bfd_print_symbol_type how) 1413{ 1414 FILE *file = (FILE *) filep; 1415 switch (how) 1416 { 1417 case bfd_print_symbol_name: 1418 fprintf (file, "%s", symbol->name); 1419 break; 1420 case bfd_print_symbol_more: 1421 fprintf (file, "elf "); 1422 bfd_fprintf_vma (abfd, file, symbol->value); 1423 fprintf (file, " %lx", (unsigned long) symbol->flags); 1424 break; 1425 case bfd_print_symbol_all: 1426 { 1427 const char *section_name; 1428 const char *name = NULL; 1429 const struct elf_backend_data *bed; 1430 unsigned char st_other; 1431 bfd_vma val; 1432 1433 section_name = symbol->section ? symbol->section->name : "(*none*)"; 1434 1435 bed = get_elf_backend_data (abfd); 1436 if (bed->elf_backend_print_symbol_all) 1437 name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol); 1438 1439 if (name == NULL) 1440 { 1441 name = symbol->name; 1442 bfd_print_symbol_vandf (abfd, file, symbol); 1443 } 1444 1445 fprintf (file, " %s\t", section_name); 1446 /* Print the "other" value for a symbol. For common symbols, 1447 we've already printed the size; now print the alignment. 1448 For other symbols, we have no specified alignment, and 1449 we've printed the address; now print the size. */ 1450 if (symbol->section && bfd_is_com_section (symbol->section)) 1451 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value; 1452 else 1453 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size; 1454 bfd_fprintf_vma (abfd, file, val); 1455 1456 /* If we have version information, print it. */ 1457 if (elf_tdata (abfd)->dynversym_section != 0 1458 && (elf_tdata (abfd)->dynverdef_section != 0 1459 || elf_tdata (abfd)->dynverref_section != 0)) 1460 { 1461 unsigned int vernum; 1462 const char *version_string; 1463 1464 vernum = ((elf_symbol_type *) symbol)->version & VERSYM_VERSION; 1465 1466 if (vernum == 0) 1467 version_string = ""; 1468 else if (vernum == 1) 1469 version_string = "Base"; 1470 else if (vernum <= elf_tdata (abfd)->cverdefs) 1471 version_string = 1472 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename; 1473 else 1474 { 1475 Elf_Internal_Verneed *t; 1476 1477 version_string = ""; 1478 for (t = elf_tdata (abfd)->verref; 1479 t != NULL; 1480 t = t->vn_nextref) 1481 { 1482 Elf_Internal_Vernaux *a; 1483 1484 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 1485 { 1486 if (a->vna_other == vernum) 1487 { 1488 version_string = a->vna_nodename; 1489 break; 1490 } 1491 } 1492 } 1493 } 1494 1495 if ((((elf_symbol_type *) symbol)->version & VERSYM_HIDDEN) == 0) 1496 fprintf (file, " %-11s", version_string); 1497 else 1498 { 1499 int i; 1500 1501 fprintf (file, " (%s)", version_string); 1502 for (i = 10 - strlen (version_string); i > 0; --i) 1503 putc (' ', file); 1504 } 1505 } 1506 1507 /* If the st_other field is not zero, print it. */ 1508 st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other; 1509 1510 switch (st_other) 1511 { 1512 case 0: break; 1513 case STV_INTERNAL: fprintf (file, " .internal"); break; 1514 case STV_HIDDEN: fprintf (file, " .hidden"); break; 1515 case STV_PROTECTED: fprintf (file, " .protected"); break; 1516 default: 1517 /* Some other non-defined flags are also present, so print 1518 everything hex. */ 1519 fprintf (file, " 0x%02x", (unsigned int) st_other); 1520 } 1521 1522 fprintf (file, " %s", name); 1523 } 1524 break; 1525 } 1526} 1527 1528/* Allocate an ELF string table--force the first byte to be zero. */ 1529 1530struct bfd_strtab_hash * 1531_bfd_elf_stringtab_init (void) 1532{ 1533 struct bfd_strtab_hash *ret; 1534 1535 ret = _bfd_stringtab_init (); 1536 if (ret != NULL) 1537 { 1538 bfd_size_type loc; 1539 1540 loc = _bfd_stringtab_add (ret, "", TRUE, FALSE); 1541 BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1); 1542 if (loc == (bfd_size_type) -1) 1543 { 1544 _bfd_stringtab_free (ret); 1545 ret = NULL; 1546 } 1547 } 1548 return ret; 1549} 1550 1551/* ELF .o/exec file reading */ 1552 1553/* Create a new bfd section from an ELF section header. */ 1554 1555bfd_boolean 1556bfd_section_from_shdr (bfd *abfd, unsigned int shindex) 1557{ 1558 Elf_Internal_Shdr *hdr; 1559 Elf_Internal_Ehdr *ehdr; 1560 const struct elf_backend_data *bed; 1561 const char *name; 1562 1563 if (shindex >= elf_numsections (abfd)) 1564 return FALSE; 1565 1566 hdr = elf_elfsections (abfd)[shindex]; 1567 ehdr = elf_elfheader (abfd); 1568 name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx, 1569 hdr->sh_name); 1570 if (name == NULL) 1571 return FALSE; 1572 1573 bed = get_elf_backend_data (abfd); 1574 switch (hdr->sh_type) 1575 { 1576 case SHT_NULL: 1577 /* Inactive section. Throw it away. */ 1578 return TRUE; 1579 1580 case SHT_PROGBITS: /* Normal section with contents. */ 1581 case SHT_NOBITS: /* .bss section. */ 1582 case SHT_HASH: /* .hash section. */ 1583 case SHT_NOTE: /* .note section. */ 1584 case SHT_INIT_ARRAY: /* .init_array section. */ 1585 case SHT_FINI_ARRAY: /* .fini_array section. */ 1586 case SHT_PREINIT_ARRAY: /* .preinit_array section. */ 1587 case SHT_GNU_LIBLIST: /* .gnu.liblist section. */ 1588 case SHT_GNU_HASH: /* .gnu.hash section. */ 1589 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); 1590 1591 case SHT_DYNAMIC: /* Dynamic linking information. */ 1592 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) 1593 return FALSE; 1594 if (hdr->sh_link > elf_numsections (abfd)) 1595 { 1596 /* PR 10478: Accept Solaris binaries with a sh_link 1597 field set to SHN_BEFORE or SHN_AFTER. */ 1598 switch (bfd_get_arch (abfd)) 1599 { 1600 case bfd_arch_i386: 1601 case bfd_arch_sparc: 1602 if (hdr->sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */ 1603 || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */) 1604 break; 1605 /* Otherwise fall through. */ 1606 default: 1607 return FALSE; 1608 } 1609 } 1610 else if (elf_elfsections (abfd)[hdr->sh_link] == NULL) 1611 return FALSE; 1612 else if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB) 1613 { 1614 Elf_Internal_Shdr *dynsymhdr; 1615 1616 /* The shared libraries distributed with hpux11 have a bogus 1617 sh_link field for the ".dynamic" section. Find the 1618 string table for the ".dynsym" section instead. */ 1619 if (elf_dynsymtab (abfd) != 0) 1620 { 1621 dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)]; 1622 hdr->sh_link = dynsymhdr->sh_link; 1623 } 1624 else 1625 { 1626 unsigned int i, num_sec; 1627 1628 num_sec = elf_numsections (abfd); 1629 for (i = 1; i < num_sec; i++) 1630 { 1631 dynsymhdr = elf_elfsections (abfd)[i]; 1632 if (dynsymhdr->sh_type == SHT_DYNSYM) 1633 { 1634 hdr->sh_link = dynsymhdr->sh_link; 1635 break; 1636 } 1637 } 1638 } 1639 } 1640 break; 1641 1642 case SHT_SYMTAB: /* A symbol table */ 1643 if (elf_onesymtab (abfd) == shindex) 1644 return TRUE; 1645 1646 if (hdr->sh_entsize != bed->s->sizeof_sym) 1647 return FALSE; 1648 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size) 1649 return FALSE; 1650 BFD_ASSERT (elf_onesymtab (abfd) == 0); 1651 elf_onesymtab (abfd) = shindex; 1652 elf_tdata (abfd)->symtab_hdr = *hdr; 1653 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr; 1654 abfd->flags |= HAS_SYMS; 1655 1656 /* Sometimes a shared object will map in the symbol table. If 1657 SHF_ALLOC is set, and this is a shared object, then we also 1658 treat this section as a BFD section. We can not base the 1659 decision purely on SHF_ALLOC, because that flag is sometimes 1660 set in a relocatable object file, which would confuse the 1661 linker. */ 1662 if ((hdr->sh_flags & SHF_ALLOC) != 0 1663 && (abfd->flags & DYNAMIC) != 0 1664 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name, 1665 shindex)) 1666 return FALSE; 1667 1668 /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we 1669 can't read symbols without that section loaded as well. It 1670 is most likely specified by the next section header. */ 1671 if (elf_elfsections (abfd)[elf_symtab_shndx (abfd)]->sh_link != shindex) 1672 { 1673 unsigned int i, num_sec; 1674 1675 num_sec = elf_numsections (abfd); 1676 for (i = shindex + 1; i < num_sec; i++) 1677 { 1678 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i]; 1679 if (hdr2->sh_type == SHT_SYMTAB_SHNDX 1680 && hdr2->sh_link == shindex) 1681 break; 1682 } 1683 if (i == num_sec) 1684 for (i = 1; i < shindex; i++) 1685 { 1686 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i]; 1687 if (hdr2->sh_type == SHT_SYMTAB_SHNDX 1688 && hdr2->sh_link == shindex) 1689 break; 1690 } 1691 if (i != shindex) 1692 return bfd_section_from_shdr (abfd, i); 1693 } 1694 return TRUE; 1695 1696 case SHT_DYNSYM: /* A dynamic symbol table */ 1697 if (elf_dynsymtab (abfd) == shindex) 1698 return TRUE; 1699 1700 if (hdr->sh_entsize != bed->s->sizeof_sym) 1701 return FALSE; 1702 BFD_ASSERT (elf_dynsymtab (abfd) == 0); 1703 elf_dynsymtab (abfd) = shindex; 1704 elf_tdata (abfd)->dynsymtab_hdr = *hdr; 1705 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr; 1706 abfd->flags |= HAS_SYMS; 1707 1708 /* Besides being a symbol table, we also treat this as a regular 1709 section, so that objcopy can handle it. */ 1710 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); 1711 1712 case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections */ 1713 if (elf_symtab_shndx (abfd) == shindex) 1714 return TRUE; 1715 1716 BFD_ASSERT (elf_symtab_shndx (abfd) == 0); 1717 elf_symtab_shndx (abfd) = shindex; 1718 elf_tdata (abfd)->symtab_shndx_hdr = *hdr; 1719 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->symtab_shndx_hdr; 1720 return TRUE; 1721 1722 case SHT_STRTAB: /* A string table */ 1723 if (hdr->bfd_section != NULL) 1724 return TRUE; 1725 if (ehdr->e_shstrndx == shindex) 1726 { 1727 elf_tdata (abfd)->shstrtab_hdr = *hdr; 1728 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr; 1729 return TRUE; 1730 } 1731 if (elf_elfsections (abfd)[elf_onesymtab (abfd)]->sh_link == shindex) 1732 { 1733 symtab_strtab: 1734 elf_tdata (abfd)->strtab_hdr = *hdr; 1735 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->strtab_hdr; 1736 return TRUE; 1737 } 1738 if (elf_elfsections (abfd)[elf_dynsymtab (abfd)]->sh_link == shindex) 1739 { 1740 dynsymtab_strtab: 1741 elf_tdata (abfd)->dynstrtab_hdr = *hdr; 1742 hdr = &elf_tdata (abfd)->dynstrtab_hdr; 1743 elf_elfsections (abfd)[shindex] = hdr; 1744 /* We also treat this as a regular section, so that objcopy 1745 can handle it. */ 1746 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, 1747 shindex); 1748 } 1749 1750 /* If the string table isn't one of the above, then treat it as a 1751 regular section. We need to scan all the headers to be sure, 1752 just in case this strtab section appeared before the above. */ 1753 if (elf_onesymtab (abfd) == 0 || elf_dynsymtab (abfd) == 0) 1754 { 1755 unsigned int i, num_sec; 1756 1757 num_sec = elf_numsections (abfd); 1758 for (i = 1; i < num_sec; i++) 1759 { 1760 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i]; 1761 if (hdr2->sh_link == shindex) 1762 { 1763 /* Prevent endless recursion on broken objects. */ 1764 if (i == shindex) 1765 return FALSE; 1766 if (! bfd_section_from_shdr (abfd, i)) 1767 return FALSE; 1768 if (elf_onesymtab (abfd) == i) 1769 goto symtab_strtab; 1770 if (elf_dynsymtab (abfd) == i) 1771 goto dynsymtab_strtab; 1772 } 1773 } 1774 } 1775 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); 1776 1777 case SHT_REL: 1778 case SHT_RELA: 1779 /* *These* do a lot of work -- but build no sections! */ 1780 { 1781 asection *target_sect; 1782 Elf_Internal_Shdr *hdr2, **p_hdr; 1783 unsigned int num_sec = elf_numsections (abfd); 1784 struct bfd_elf_section_data *esdt; 1785 bfd_size_type amt; 1786 1787 if (hdr->sh_entsize 1788 != (bfd_size_type) (hdr->sh_type == SHT_REL 1789 ? bed->s->sizeof_rel : bed->s->sizeof_rela)) 1790 return FALSE; 1791 1792 /* Check for a bogus link to avoid crashing. */ 1793 if (hdr->sh_link >= num_sec) 1794 { 1795 ((*_bfd_error_handler) 1796 (_("%B: invalid link %lu for reloc section %s (index %u)"), 1797 abfd, hdr->sh_link, name, shindex)); 1798 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, 1799 shindex); 1800 } 1801 1802 /* For some incomprehensible reason Oracle distributes 1803 libraries for Solaris in which some of the objects have 1804 bogus sh_link fields. It would be nice if we could just 1805 reject them, but, unfortunately, some people need to use 1806 them. We scan through the section headers; if we find only 1807 one suitable symbol table, we clobber the sh_link to point 1808 to it. I hope this doesn't break anything. 1809 1810 Don't do it on executable nor shared library. */ 1811 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 1812 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB 1813 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM) 1814 { 1815 unsigned int scan; 1816 int found; 1817 1818 found = 0; 1819 for (scan = 1; scan < num_sec; scan++) 1820 { 1821 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB 1822 || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM) 1823 { 1824 if (found != 0) 1825 { 1826 found = 0; 1827 break; 1828 } 1829 found = scan; 1830 } 1831 } 1832 if (found != 0) 1833 hdr->sh_link = found; 1834 } 1835 1836 /* Get the symbol table. */ 1837 if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB 1838 || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM) 1839 && ! bfd_section_from_shdr (abfd, hdr->sh_link)) 1840 return FALSE; 1841 1842 /* If this reloc section does not use the main symbol table we 1843 don't treat it as a reloc section. BFD can't adequately 1844 represent such a section, so at least for now, we don't 1845 try. We just present it as a normal section. We also 1846 can't use it as a reloc section if it points to the null 1847 section, an invalid section, another reloc section, or its 1848 sh_link points to the null section. */ 1849 if (hdr->sh_link != elf_onesymtab (abfd) 1850 || hdr->sh_link == SHN_UNDEF 1851 || hdr->sh_info == SHN_UNDEF 1852 || hdr->sh_info >= num_sec 1853 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL 1854 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA) 1855 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, 1856 shindex); 1857 1858 if (! bfd_section_from_shdr (abfd, hdr->sh_info)) 1859 return FALSE; 1860 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info); 1861 if (target_sect == NULL) 1862 return FALSE; 1863 1864 esdt = elf_section_data (target_sect); 1865 if (hdr->sh_type == SHT_RELA) 1866 p_hdr = &esdt->rela.hdr; 1867 else 1868 p_hdr = &esdt->rel.hdr; 1869 1870 BFD_ASSERT (*p_hdr == NULL); 1871 amt = sizeof (*hdr2); 1872 hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt); 1873 if (hdr2 == NULL) 1874 return FALSE; 1875 *hdr2 = *hdr; 1876 *p_hdr = hdr2; 1877 elf_elfsections (abfd)[shindex] = hdr2; 1878 target_sect->reloc_count += NUM_SHDR_ENTRIES (hdr); 1879 target_sect->flags |= SEC_RELOC; 1880 target_sect->relocation = NULL; 1881 target_sect->rel_filepos = hdr->sh_offset; 1882 /* In the section to which the relocations apply, mark whether 1883 its relocations are of the REL or RELA variety. */ 1884 if (hdr->sh_size != 0) 1885 { 1886 if (hdr->sh_type == SHT_RELA) 1887 target_sect->use_rela_p = 1; 1888 } 1889 abfd->flags |= HAS_RELOC; 1890 return TRUE; 1891 } 1892 1893 case SHT_GNU_verdef: 1894 elf_dynverdef (abfd) = shindex; 1895 elf_tdata (abfd)->dynverdef_hdr = *hdr; 1896 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); 1897 1898 case SHT_GNU_versym: 1899 if (hdr->sh_entsize != sizeof (Elf_External_Versym)) 1900 return FALSE; 1901 elf_dynversym (abfd) = shindex; 1902 elf_tdata (abfd)->dynversym_hdr = *hdr; 1903 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); 1904 1905 case SHT_GNU_verneed: 1906 elf_dynverref (abfd) = shindex; 1907 elf_tdata (abfd)->dynverref_hdr = *hdr; 1908 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); 1909 1910 case SHT_SHLIB: 1911 return TRUE; 1912 1913 case SHT_GROUP: 1914 if (! IS_VALID_GROUP_SECTION_HEADER (hdr)) 1915 return FALSE; 1916 if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) 1917 return FALSE; 1918 if (hdr->contents != NULL) 1919 { 1920 Elf_Internal_Group *idx = (Elf_Internal_Group *) hdr->contents; 1921 unsigned int n_elt = hdr->sh_size / GRP_ENTRY_SIZE; 1922 asection *s; 1923 1924 if (idx->flags & GRP_COMDAT) 1925 hdr->bfd_section->flags 1926 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD; 1927 1928 /* We try to keep the same section order as it comes in. */ 1929 idx += n_elt; 1930 while (--n_elt != 0) 1931 { 1932 --idx; 1933 1934 if (idx->shdr != NULL 1935 && (s = idx->shdr->bfd_section) != NULL 1936 && elf_next_in_group (s) != NULL) 1937 { 1938 elf_next_in_group (hdr->bfd_section) = s; 1939 break; 1940 } 1941 } 1942 } 1943 break; 1944 1945 default: 1946 /* Possibly an attributes section. */ 1947 if (hdr->sh_type == SHT_GNU_ATTRIBUTES 1948 || hdr->sh_type == bed->obj_attrs_section_type) 1949 { 1950 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) 1951 return FALSE; 1952 _bfd_elf_parse_attributes (abfd, hdr); 1953 return TRUE; 1954 } 1955 1956 /* Check for any processor-specific section types. */ 1957 if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex)) 1958 return TRUE; 1959 1960 if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER) 1961 { 1962 if ((hdr->sh_flags & SHF_ALLOC) != 0) 1963 /* FIXME: How to properly handle allocated section reserved 1964 for applications? */ 1965 (*_bfd_error_handler) 1966 (_("%B: don't know how to handle allocated, application " 1967 "specific section `%s' [0x%8x]"), 1968 abfd, name, hdr->sh_type); 1969 else 1970 /* Allow sections reserved for applications. */ 1971 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, 1972 shindex); 1973 } 1974 else if (hdr->sh_type >= SHT_LOPROC 1975 && hdr->sh_type <= SHT_HIPROC) 1976 /* FIXME: We should handle this section. */ 1977 (*_bfd_error_handler) 1978 (_("%B: don't know how to handle processor specific section " 1979 "`%s' [0x%8x]"), 1980 abfd, name, hdr->sh_type); 1981 else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS) 1982 { 1983 /* Unrecognised OS-specific sections. */ 1984 if ((hdr->sh_flags & SHF_OS_NONCONFORMING) != 0) 1985 /* SHF_OS_NONCONFORMING indicates that special knowledge is 1986 required to correctly process the section and the file should 1987 be rejected with an error message. */ 1988 (*_bfd_error_handler) 1989 (_("%B: don't know how to handle OS specific section " 1990 "`%s' [0x%8x]"), 1991 abfd, name, hdr->sh_type); 1992 else 1993 /* Otherwise it should be processed. */ 1994 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); 1995 } 1996 else 1997 /* FIXME: We should handle this section. */ 1998 (*_bfd_error_handler) 1999 (_("%B: don't know how to handle section `%s' [0x%8x]"), 2000 abfd, name, hdr->sh_type); 2001 2002 return FALSE; 2003 } 2004 2005 return TRUE; 2006} 2007 2008/* Return the local symbol specified by ABFD, R_SYMNDX. */ 2009 2010Elf_Internal_Sym * 2011bfd_sym_from_r_symndx (struct sym_cache *cache, 2012 bfd *abfd, 2013 unsigned long r_symndx) 2014{ 2015 unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE; 2016 2017 if (cache->abfd != abfd || cache->indx[ent] != r_symndx) 2018 { 2019 Elf_Internal_Shdr *symtab_hdr; 2020 unsigned char esym[sizeof (Elf64_External_Sym)]; 2021 Elf_External_Sym_Shndx eshndx; 2022 2023 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 2024 if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx, 2025 &cache->sym[ent], esym, &eshndx) == NULL) 2026 return NULL; 2027 2028 if (cache->abfd != abfd) 2029 { 2030 memset (cache->indx, -1, sizeof (cache->indx)); 2031 cache->abfd = abfd; 2032 } 2033 cache->indx[ent] = r_symndx; 2034 } 2035 2036 return &cache->sym[ent]; 2037} 2038 2039/* Given an ELF section number, retrieve the corresponding BFD 2040 section. */ 2041 2042asection * 2043bfd_section_from_elf_index (bfd *abfd, unsigned int sec_index) 2044{ 2045 if (sec_index >= elf_numsections (abfd)) 2046 return NULL; 2047 return elf_elfsections (abfd)[sec_index]->bfd_section; 2048} 2049 2050static const struct bfd_elf_special_section special_sections_b[] = 2051{ 2052 { STRING_COMMA_LEN (".bss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE }, 2053 { NULL, 0, 0, 0, 0 } 2054}; 2055 2056static const struct bfd_elf_special_section special_sections_c[] = 2057{ 2058 { STRING_COMMA_LEN (".comment"), 0, SHT_PROGBITS, 0 }, 2059 { NULL, 0, 0, 0, 0 } 2060}; 2061 2062static const struct bfd_elf_special_section special_sections_d[] = 2063{ 2064 { STRING_COMMA_LEN (".data"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, 2065 { STRING_COMMA_LEN (".data1"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, 2066 { STRING_COMMA_LEN (".debug"), 0, SHT_PROGBITS, 0 }, 2067 { STRING_COMMA_LEN (".debug_line"), 0, SHT_PROGBITS, 0 }, 2068 { STRING_COMMA_LEN (".debug_info"), 0, SHT_PROGBITS, 0 }, 2069 { STRING_COMMA_LEN (".debug_abbrev"), 0, SHT_PROGBITS, 0 }, 2070 { STRING_COMMA_LEN (".debug_aranges"), 0, SHT_PROGBITS, 0 }, 2071 { STRING_COMMA_LEN (".dynamic"), 0, SHT_DYNAMIC, SHF_ALLOC }, 2072 { STRING_COMMA_LEN (".dynstr"), 0, SHT_STRTAB, SHF_ALLOC }, 2073 { STRING_COMMA_LEN (".dynsym"), 0, SHT_DYNSYM, SHF_ALLOC }, 2074 { NULL, 0, 0, 0, 0 } 2075}; 2076 2077static const struct bfd_elf_special_section special_sections_f[] = 2078{ 2079 { STRING_COMMA_LEN (".fini"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR }, 2080 { STRING_COMMA_LEN (".fini_array"), 0, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE }, 2081 { NULL, 0, 0, 0, 0 } 2082}; 2083 2084static const struct bfd_elf_special_section special_sections_g[] = 2085{ 2086 { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE }, 2087 { STRING_COMMA_LEN (".gnu.lto_"), -1, SHT_PROGBITS, SHF_EXCLUDE }, 2088 { STRING_COMMA_LEN (".got"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, 2089 { STRING_COMMA_LEN (".gnu.version"), 0, SHT_GNU_versym, 0 }, 2090 { STRING_COMMA_LEN (".gnu.version_d"), 0, SHT_GNU_verdef, 0 }, 2091 { STRING_COMMA_LEN (".gnu.version_r"), 0, SHT_GNU_verneed, 0 }, 2092 { STRING_COMMA_LEN (".gnu.liblist"), 0, SHT_GNU_LIBLIST, SHF_ALLOC }, 2093 { STRING_COMMA_LEN (".gnu.conflict"), 0, SHT_RELA, SHF_ALLOC }, 2094 { STRING_COMMA_LEN (".gnu.hash"), 0, SHT_GNU_HASH, SHF_ALLOC }, 2095 { NULL, 0, 0, 0, 0 } 2096}; 2097 2098static const struct bfd_elf_special_section special_sections_h[] = 2099{ 2100 { STRING_COMMA_LEN (".hash"), 0, SHT_HASH, SHF_ALLOC }, 2101 { NULL, 0, 0, 0, 0 } 2102}; 2103 2104static const struct bfd_elf_special_section special_sections_i[] = 2105{ 2106 { STRING_COMMA_LEN (".init"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR }, 2107 { STRING_COMMA_LEN (".init_array"), 0, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE }, 2108 { STRING_COMMA_LEN (".interp"), 0, SHT_PROGBITS, 0 }, 2109 { NULL, 0, 0, 0, 0 } 2110}; 2111 2112static const struct bfd_elf_special_section special_sections_l[] = 2113{ 2114 { STRING_COMMA_LEN (".line"), 0, SHT_PROGBITS, 0 }, 2115 { NULL, 0, 0, 0, 0 } 2116}; 2117 2118static const struct bfd_elf_special_section special_sections_n[] = 2119{ 2120 { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 }, 2121 { STRING_COMMA_LEN (".note"), -1, SHT_NOTE, 0 }, 2122 { NULL, 0, 0, 0, 0 } 2123}; 2124 2125static const struct bfd_elf_special_section special_sections_p[] = 2126{ 2127 { STRING_COMMA_LEN (".preinit_array"), 0, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE }, 2128 { STRING_COMMA_LEN (".plt"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR }, 2129 { NULL, 0, 0, 0, 0 } 2130}; 2131 2132static const struct bfd_elf_special_section special_sections_r[] = 2133{ 2134 { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC }, 2135 { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC }, 2136 { STRING_COMMA_LEN (".rela"), -1, SHT_RELA, 0 }, 2137 { STRING_COMMA_LEN (".rel"), -1, SHT_REL, 0 }, 2138 { NULL, 0, 0, 0, 0 } 2139}; 2140 2141static const struct bfd_elf_special_section special_sections_s[] = 2142{ 2143 { STRING_COMMA_LEN (".shstrtab"), 0, SHT_STRTAB, 0 }, 2144 { STRING_COMMA_LEN (".strtab"), 0, SHT_STRTAB, 0 }, 2145 { STRING_COMMA_LEN (".symtab"), 0, SHT_SYMTAB, 0 }, 2146 /* See struct bfd_elf_special_section declaration for the semantics of 2147 this special case where .prefix_length != strlen (.prefix). */ 2148 { ".stabstr", 5, 3, SHT_STRTAB, 0 }, 2149 { NULL, 0, 0, 0, 0 } 2150}; 2151 2152static const struct bfd_elf_special_section special_sections_t[] = 2153{ 2154 { STRING_COMMA_LEN (".text"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR }, 2155 { STRING_COMMA_LEN (".tbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS }, 2156 { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS }, 2157 { NULL, 0, 0, 0, 0 } 2158}; 2159 2160static const struct bfd_elf_special_section special_sections_z[] = 2161{ 2162 { STRING_COMMA_LEN (".zdebug_line"), 0, SHT_PROGBITS, 0 }, 2163 { STRING_COMMA_LEN (".zdebug_info"), 0, SHT_PROGBITS, 0 }, 2164 { STRING_COMMA_LEN (".zdebug_abbrev"), 0, SHT_PROGBITS, 0 }, 2165 { STRING_COMMA_LEN (".zdebug_aranges"), 0, SHT_PROGBITS, 0 }, 2166 { NULL, 0, 0, 0, 0 } 2167}; 2168 2169static const struct bfd_elf_special_section *special_sections[] = 2170{ 2171 special_sections_b, /* 'b' */ 2172 special_sections_c, /* 'c' */ 2173 special_sections_d, /* 'd' */ 2174 NULL, /* 'e' */ 2175 special_sections_f, /* 'f' */ 2176 special_sections_g, /* 'g' */ 2177 special_sections_h, /* 'h' */ 2178 special_sections_i, /* 'i' */ 2179 NULL, /* 'j' */ 2180 NULL, /* 'k' */ 2181 special_sections_l, /* 'l' */ 2182 NULL, /* 'm' */ 2183 special_sections_n, /* 'n' */ 2184 NULL, /* 'o' */ 2185 special_sections_p, /* 'p' */ 2186 NULL, /* 'q' */ 2187 special_sections_r, /* 'r' */ 2188 special_sections_s, /* 's' */ 2189 special_sections_t, /* 't' */ 2190 NULL, /* 'u' */ 2191 NULL, /* 'v' */ 2192 NULL, /* 'w' */ 2193 NULL, /* 'x' */ 2194 NULL, /* 'y' */ 2195 special_sections_z /* 'z' */ 2196}; 2197 2198const struct bfd_elf_special_section * 2199_bfd_elf_get_special_section (const char *name, 2200 const struct bfd_elf_special_section *spec, 2201 unsigned int rela) 2202{ 2203 int i; 2204 int len; 2205 2206 len = strlen (name); 2207 2208 for (i = 0; spec[i].prefix != NULL; i++) 2209 { 2210 int suffix_len; 2211 int prefix_len = spec[i].prefix_length; 2212 2213 if (len < prefix_len) 2214 continue; 2215 if (memcmp (name, spec[i].prefix, prefix_len) != 0) 2216 continue; 2217 2218 suffix_len = spec[i].suffix_length; 2219 if (suffix_len <= 0) 2220 { 2221 if (name[prefix_len] != 0) 2222 { 2223 if (suffix_len == 0) 2224 continue; 2225 if (name[prefix_len] != '.' 2226 && (suffix_len == -2 2227 || (rela && spec[i].type == SHT_REL))) 2228 continue; 2229 } 2230 } 2231 else 2232 { 2233 if (len < prefix_len + suffix_len) 2234 continue; 2235 if (memcmp (name + len - suffix_len, 2236 spec[i].prefix + prefix_len, 2237 suffix_len) != 0) 2238 continue; 2239 } 2240 return &spec[i]; 2241 } 2242 2243 return NULL; 2244} 2245 2246const struct bfd_elf_special_section * 2247_bfd_elf_get_sec_type_attr (bfd *abfd, asection *sec) 2248{ 2249 int i; 2250 const struct bfd_elf_special_section *spec; 2251 const struct elf_backend_data *bed; 2252 2253 /* See if this is one of the special sections. */ 2254 if (sec->name == NULL) 2255 return NULL; 2256 2257 bed = get_elf_backend_data (abfd); 2258 spec = bed->special_sections; 2259 if (spec) 2260 { 2261 spec = _bfd_elf_get_special_section (sec->name, 2262 bed->special_sections, 2263 sec->use_rela_p); 2264 if (spec != NULL) 2265 return spec; 2266 } 2267 2268 if (sec->name[0] != '.') 2269 return NULL; 2270 2271 i = sec->name[1] - 'b'; 2272 if (i < 0 || i > 'z' - 'b') 2273 return NULL; 2274 2275 spec = special_sections[i]; 2276 2277 if (spec == NULL) 2278 return NULL; 2279 2280 return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p); 2281} 2282 2283bfd_boolean 2284_bfd_elf_new_section_hook (bfd *abfd, asection *sec) 2285{ 2286 struct bfd_elf_section_data *sdata; 2287 const struct elf_backend_data *bed; 2288 const struct bfd_elf_special_section *ssect; 2289 2290 sdata = (struct bfd_elf_section_data *) sec->used_by_bfd; 2291 if (sdata == NULL) 2292 { 2293 sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd, 2294 sizeof (*sdata)); 2295 if (sdata == NULL) 2296 return FALSE; 2297 sec->used_by_bfd = sdata; 2298 } 2299 2300 /* Indicate whether or not this section should use RELA relocations. */ 2301 bed = get_elf_backend_data (abfd); 2302 sec->use_rela_p = bed->default_use_rela_p; 2303 2304 /* When we read a file, we don't need to set ELF section type and 2305 flags. They will be overridden in _bfd_elf_make_section_from_shdr 2306 anyway. We will set ELF section type and flags for all linker 2307 created sections. If user specifies BFD section flags, we will 2308 set ELF section type and flags based on BFD section flags in 2309 elf_fake_sections. */ 2310 if ((!sec->flags && abfd->direction != read_direction) 2311 || (sec->flags & SEC_LINKER_CREATED) != 0) 2312 { 2313 ssect = (*bed->get_sec_type_attr) (abfd, sec); 2314 if (ssect != NULL) 2315 { 2316 elf_section_type (sec) = ssect->type; 2317 elf_section_flags (sec) = ssect->attr; 2318 } 2319 } 2320 2321 return _bfd_generic_new_section_hook (abfd, sec); 2322} 2323 2324/* Create a new bfd section from an ELF program header. 2325 2326 Since program segments have no names, we generate a synthetic name 2327 of the form segment<NUM>, where NUM is generally the index in the 2328 program header table. For segments that are split (see below) we 2329 generate the names segment<NUM>a and segment<NUM>b. 2330 2331 Note that some program segments may have a file size that is different than 2332 (less than) the memory size. All this means is that at execution the 2333 system must allocate the amount of memory specified by the memory size, 2334 but only initialize it with the first "file size" bytes read from the 2335 file. This would occur for example, with program segments consisting 2336 of combined data+bss. 2337 2338 To handle the above situation, this routine generates TWO bfd sections 2339 for the single program segment. The first has the length specified by 2340 the file size of the segment, and the second has the length specified 2341 by the difference between the two sizes. In effect, the segment is split 2342 into its initialized and uninitialized parts. 2343 2344 */ 2345 2346bfd_boolean 2347_bfd_elf_make_section_from_phdr (bfd *abfd, 2348 Elf_Internal_Phdr *hdr, 2349 int hdr_index, 2350 const char *type_name) 2351{ 2352 asection *newsect; 2353 char *name; 2354 char namebuf[64]; 2355 size_t len; 2356 int split; 2357 2358 split = ((hdr->p_memsz > 0) 2359 && (hdr->p_filesz > 0) 2360 && (hdr->p_memsz > hdr->p_filesz)); 2361 2362 if (hdr->p_filesz > 0) 2363 { 2364 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "a" : ""); 2365 len = strlen (namebuf) + 1; 2366 name = (char *) bfd_alloc (abfd, len); 2367 if (!name) 2368 return FALSE; 2369 memcpy (name, namebuf, len); 2370 newsect = bfd_make_section (abfd, name); 2371 if (newsect == NULL) 2372 return FALSE; 2373 newsect->vma = hdr->p_vaddr; 2374 newsect->lma = hdr->p_paddr; 2375 newsect->size = hdr->p_filesz; 2376 newsect->filepos = hdr->p_offset; 2377 newsect->flags |= SEC_HAS_CONTENTS; 2378 newsect->alignment_power = bfd_log2 (hdr->p_align); 2379 if (hdr->p_type == PT_LOAD) 2380 { 2381 newsect->flags |= SEC_ALLOC; 2382 newsect->flags |= SEC_LOAD; 2383 if (hdr->p_flags & PF_X) 2384 { 2385 /* FIXME: all we known is that it has execute PERMISSION, 2386 may be data. */ 2387 newsect->flags |= SEC_CODE; 2388 } 2389 } 2390 if (!(hdr->p_flags & PF_W)) 2391 { 2392 newsect->flags |= SEC_READONLY; 2393 } 2394 } 2395 2396 if (hdr->p_memsz > hdr->p_filesz) 2397 { 2398 bfd_vma align; 2399 2400 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "b" : ""); 2401 len = strlen (namebuf) + 1; 2402 name = (char *) bfd_alloc (abfd, len); 2403 if (!name) 2404 return FALSE; 2405 memcpy (name, namebuf, len); 2406 newsect = bfd_make_section (abfd, name); 2407 if (newsect == NULL) 2408 return FALSE; 2409 newsect->vma = hdr->p_vaddr + hdr->p_filesz; 2410 newsect->lma = hdr->p_paddr + hdr->p_filesz; 2411 newsect->size = hdr->p_memsz - hdr->p_filesz; 2412 newsect->filepos = hdr->p_offset + hdr->p_filesz; 2413 align = newsect->vma & -newsect->vma; 2414 if (align == 0 || align > hdr->p_align) 2415 align = hdr->p_align; 2416 newsect->alignment_power = bfd_log2 (align); 2417 if (hdr->p_type == PT_LOAD) 2418 { 2419 /* Hack for gdb. Segments that have not been modified do 2420 not have their contents written to a core file, on the 2421 assumption that a debugger can find the contents in the 2422 executable. We flag this case by setting the fake 2423 section size to zero. Note that "real" bss sections will 2424 always have their contents dumped to the core file. */ 2425 if (bfd_get_format (abfd) == bfd_core) 2426 newsect->size = 0; 2427 newsect->flags |= SEC_ALLOC; 2428 if (hdr->p_flags & PF_X) 2429 newsect->flags |= SEC_CODE; 2430 } 2431 if (!(hdr->p_flags & PF_W)) 2432 newsect->flags |= SEC_READONLY; 2433 } 2434 2435 return TRUE; 2436} 2437 2438bfd_boolean 2439bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index) 2440{ 2441 const struct elf_backend_data *bed; 2442 2443 switch (hdr->p_type) 2444 { 2445 case PT_NULL: 2446 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "null"); 2447 2448 case PT_LOAD: 2449 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "load"); 2450 2451 case PT_DYNAMIC: 2452 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "dynamic"); 2453 2454 case PT_INTERP: 2455 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "interp"); 2456 2457 case PT_NOTE: 2458 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "note")) 2459 return FALSE; 2460 if (! elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz)) 2461 return FALSE; 2462 return TRUE; 2463 2464 case PT_SHLIB: 2465 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "shlib"); 2466 2467 case PT_PHDR: 2468 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "phdr"); 2469 2470 case PT_GNU_EH_FRAME: 2471 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, 2472 "eh_frame_hdr"); 2473 2474 case PT_GNU_STACK: 2475 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "stack"); 2476 2477 case PT_GNU_RELRO: 2478 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro"); 2479 2480 default: 2481 /* Check for any processor-specific program segment types. */ 2482 bed = get_elf_backend_data (abfd); 2483 return bed->elf_backend_section_from_phdr (abfd, hdr, hdr_index, "proc"); 2484 } 2485} 2486 2487/* Return the REL_HDR for SEC, assuming there is only a single one, either 2488 REL or RELA. */ 2489 2490Elf_Internal_Shdr * 2491_bfd_elf_single_rel_hdr (asection *sec) 2492{ 2493 if (elf_section_data (sec)->rel.hdr) 2494 { 2495 BFD_ASSERT (elf_section_data (sec)->rela.hdr == NULL); 2496 return elf_section_data (sec)->rel.hdr; 2497 } 2498 else 2499 return elf_section_data (sec)->rela.hdr; 2500} 2501 2502/* Allocate and initialize a section-header for a new reloc section, 2503 containing relocations against ASECT. It is stored in RELDATA. If 2504 USE_RELA_P is TRUE, we use RELA relocations; otherwise, we use REL 2505 relocations. */ 2506 2507bfd_boolean 2508_bfd_elf_init_reloc_shdr (bfd *abfd, 2509 struct bfd_elf_section_reloc_data *reldata, 2510 asection *asect, 2511 bfd_boolean use_rela_p) 2512{ 2513 Elf_Internal_Shdr *rel_hdr; 2514 char *name; 2515 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 2516 bfd_size_type amt; 2517 2518 amt = sizeof (Elf_Internal_Shdr); 2519 BFD_ASSERT (reldata->hdr == NULL); 2520 rel_hdr = bfd_zalloc (abfd, amt); 2521 reldata->hdr = rel_hdr; 2522 2523 amt = sizeof ".rela" + strlen (asect->name); 2524 name = (char *) bfd_alloc (abfd, amt); 2525 if (name == NULL) 2526 return FALSE; 2527 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name); 2528 rel_hdr->sh_name = 2529 (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name, 2530 FALSE); 2531 if (rel_hdr->sh_name == (unsigned int) -1) 2532 return FALSE; 2533 rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL; 2534 rel_hdr->sh_entsize = (use_rela_p 2535 ? bed->s->sizeof_rela 2536 : bed->s->sizeof_rel); 2537 rel_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align; 2538 rel_hdr->sh_flags = 0; 2539 rel_hdr->sh_addr = 0; 2540 rel_hdr->sh_size = 0; 2541 rel_hdr->sh_offset = 0; 2542 2543 return TRUE; 2544} 2545 2546/* Return the default section type based on the passed in section flags. */ 2547 2548int 2549bfd_elf_get_default_section_type (flagword flags) 2550{ 2551 if ((flags & SEC_ALLOC) != 0 2552 && (flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0) 2553 return SHT_NOBITS; 2554 return SHT_PROGBITS; 2555} 2556 2557struct fake_section_arg 2558{ 2559 struct bfd_link_info *link_info; 2560 bfd_boolean failed; 2561}; 2562 2563/* Set up an ELF internal section header for a section. */ 2564 2565static void 2566elf_fake_sections (bfd *abfd, asection *asect, void *fsarg) 2567{ 2568 struct fake_section_arg *arg = (struct fake_section_arg *)fsarg; 2569 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 2570 struct bfd_elf_section_data *esd = elf_section_data (asect); 2571 Elf_Internal_Shdr *this_hdr; 2572 unsigned int sh_type; 2573 2574 if (arg->failed) 2575 { 2576 /* We already failed; just get out of the bfd_map_over_sections 2577 loop. */ 2578 return; 2579 } 2580 2581 this_hdr = &esd->this_hdr; 2582 2583 this_hdr->sh_name = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), 2584 asect->name, FALSE); 2585 if (this_hdr->sh_name == (unsigned int) -1) 2586 { 2587 arg->failed = TRUE; 2588 return; 2589 } 2590 2591 /* Don't clear sh_flags. Assembler may set additional bits. */ 2592 2593 if ((asect->flags & SEC_ALLOC) != 0 2594 || asect->user_set_vma) 2595 this_hdr->sh_addr = asect->vma; 2596 else 2597 this_hdr->sh_addr = 0; 2598 2599 this_hdr->sh_offset = 0; 2600 this_hdr->sh_size = asect->size; 2601 this_hdr->sh_link = 0; 2602 this_hdr->sh_addralign = (bfd_vma) 1 << asect->alignment_power; 2603 /* The sh_entsize and sh_info fields may have been set already by 2604 copy_private_section_data. */ 2605 2606 this_hdr->bfd_section = asect; 2607 this_hdr->contents = NULL; 2608 2609 /* If the section type is unspecified, we set it based on 2610 asect->flags. */ 2611 if ((asect->flags & SEC_GROUP) != 0) 2612 sh_type = SHT_GROUP; 2613 else 2614 sh_type = bfd_elf_get_default_section_type (asect->flags); 2615 2616 if (this_hdr->sh_type == SHT_NULL) 2617 this_hdr->sh_type = sh_type; 2618 else if (this_hdr->sh_type == SHT_NOBITS 2619 && sh_type == SHT_PROGBITS 2620 && (asect->flags & SEC_ALLOC) != 0) 2621 { 2622 /* Warn if we are changing a NOBITS section to PROGBITS, but 2623 allow the link to proceed. This can happen when users link 2624 non-bss input sections to bss output sections, or emit data 2625 to a bss output section via a linker script. */ 2626 (*_bfd_error_handler) 2627 (_("warning: section `%A' type changed to PROGBITS"), asect); 2628 this_hdr->sh_type = sh_type; 2629 } 2630 2631 switch (this_hdr->sh_type) 2632 { 2633 default: 2634 break; 2635 2636 case SHT_STRTAB: 2637 case SHT_INIT_ARRAY: 2638 case SHT_FINI_ARRAY: 2639 case SHT_PREINIT_ARRAY: 2640 case SHT_NOTE: 2641 case SHT_NOBITS: 2642 case SHT_PROGBITS: 2643 break; 2644 2645 case SHT_HASH: 2646 this_hdr->sh_entsize = bed->s->sizeof_hash_entry; 2647 break; 2648 2649 case SHT_DYNSYM: 2650 this_hdr->sh_entsize = bed->s->sizeof_sym; 2651 break; 2652 2653 case SHT_DYNAMIC: 2654 this_hdr->sh_entsize = bed->s->sizeof_dyn; 2655 break; 2656 2657 case SHT_RELA: 2658 if (get_elf_backend_data (abfd)->may_use_rela_p) 2659 this_hdr->sh_entsize = bed->s->sizeof_rela; 2660 break; 2661 2662 case SHT_REL: 2663 if (get_elf_backend_data (abfd)->may_use_rel_p) 2664 this_hdr->sh_entsize = bed->s->sizeof_rel; 2665 break; 2666 2667 case SHT_GNU_versym: 2668 this_hdr->sh_entsize = sizeof (Elf_External_Versym); 2669 break; 2670 2671 case SHT_GNU_verdef: 2672 this_hdr->sh_entsize = 0; 2673 /* objcopy or strip will copy over sh_info, but may not set 2674 cverdefs. The linker will set cverdefs, but sh_info will be 2675 zero. */ 2676 if (this_hdr->sh_info == 0) 2677 this_hdr->sh_info = elf_tdata (abfd)->cverdefs; 2678 else 2679 BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0 2680 || this_hdr->sh_info == elf_tdata (abfd)->cverdefs); 2681 break; 2682 2683 case SHT_GNU_verneed: 2684 this_hdr->sh_entsize = 0; 2685 /* objcopy or strip will copy over sh_info, but may not set 2686 cverrefs. The linker will set cverrefs, but sh_info will be 2687 zero. */ 2688 if (this_hdr->sh_info == 0) 2689 this_hdr->sh_info = elf_tdata (abfd)->cverrefs; 2690 else 2691 BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0 2692 || this_hdr->sh_info == elf_tdata (abfd)->cverrefs); 2693 break; 2694 2695 case SHT_GROUP: 2696 this_hdr->sh_entsize = GRP_ENTRY_SIZE; 2697 break; 2698 2699 case SHT_GNU_HASH: 2700 this_hdr->sh_entsize = bed->s->arch_size == 64 ? 0 : 4; 2701 break; 2702 } 2703 2704 if ((asect->flags & SEC_ALLOC) != 0) 2705 this_hdr->sh_flags |= SHF_ALLOC; 2706 if ((asect->flags & SEC_READONLY) == 0) 2707 this_hdr->sh_flags |= SHF_WRITE; 2708 if ((asect->flags & SEC_CODE) != 0) 2709 this_hdr->sh_flags |= SHF_EXECINSTR; 2710 if ((asect->flags & SEC_MERGE) != 0) 2711 { 2712 this_hdr->sh_flags |= SHF_MERGE; 2713 this_hdr->sh_entsize = asect->entsize; 2714 if ((asect->flags & SEC_STRINGS) != 0) 2715 this_hdr->sh_flags |= SHF_STRINGS; 2716 } 2717 if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL) 2718 this_hdr->sh_flags |= SHF_GROUP; 2719 if ((asect->flags & SEC_THREAD_LOCAL) != 0) 2720 { 2721 this_hdr->sh_flags |= SHF_TLS; 2722 if (asect->size == 0 2723 && (asect->flags & SEC_HAS_CONTENTS) == 0) 2724 { 2725 struct bfd_link_order *o = asect->map_tail.link_order; 2726 2727 this_hdr->sh_size = 0; 2728 if (o != NULL) 2729 { 2730 this_hdr->sh_size = o->offset + o->size; 2731 if (this_hdr->sh_size != 0) 2732 this_hdr->sh_type = SHT_NOBITS; 2733 } 2734 } 2735 } 2736 if ((asect->flags & (SEC_GROUP | SEC_EXCLUDE)) == SEC_EXCLUDE) 2737 this_hdr->sh_flags |= SHF_EXCLUDE; 2738 2739 /* If the section has relocs, set up a section header for the 2740 SHT_REL[A] section. If two relocation sections are required for 2741 this section, it is up to the processor-specific back-end to 2742 create the other. */ 2743 if ((asect->flags & SEC_RELOC) != 0) 2744 { 2745 /* When doing a relocatable link, create both REL and RELA sections if 2746 needed. */ 2747 if (arg->link_info 2748 /* Do the normal setup if we wouldn't create any sections here. */ 2749 && esd->rel.count + esd->rela.count > 0 2750 && (arg->link_info->relocatable || arg->link_info->emitrelocations)) 2751 { 2752 if (esd->rel.count && esd->rel.hdr == NULL 2753 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, asect, FALSE)) 2754 { 2755 arg->failed = TRUE; 2756 return; 2757 } 2758 if (esd->rela.count && esd->rela.hdr == NULL 2759 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, asect, TRUE)) 2760 { 2761 arg->failed = TRUE; 2762 return; 2763 } 2764 } 2765 else if (!_bfd_elf_init_reloc_shdr (abfd, 2766 (asect->use_rela_p 2767 ? &esd->rela : &esd->rel), 2768 asect, 2769 asect->use_rela_p)) 2770 arg->failed = TRUE; 2771 } 2772 2773 /* Check for processor-specific section types. */ 2774 sh_type = this_hdr->sh_type; 2775 if (bed->elf_backend_fake_sections 2776 && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect)) 2777 arg->failed = TRUE; 2778 2779 if (sh_type == SHT_NOBITS && asect->size != 0) 2780 { 2781 /* Don't change the header type from NOBITS if we are being 2782 called for objcopy --only-keep-debug. */ 2783 this_hdr->sh_type = sh_type; 2784 } 2785} 2786 2787/* Fill in the contents of a SHT_GROUP section. Called from 2788 _bfd_elf_compute_section_file_positions for gas, objcopy, and 2789 when ELF targets use the generic linker, ld. Called for ld -r 2790 from bfd_elf_final_link. */ 2791 2792void 2793bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg) 2794{ 2795 bfd_boolean *failedptr = (bfd_boolean *) failedptrarg; 2796 asection *elt, *first; 2797 unsigned char *loc; 2798 bfd_boolean gas; 2799 2800 /* Ignore linker created group section. See elfNN_ia64_object_p in 2801 elfxx-ia64.c. */ 2802 if (((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) != SEC_GROUP) 2803 || *failedptr) 2804 return; 2805 2806 if (elf_section_data (sec)->this_hdr.sh_info == 0) 2807 { 2808 unsigned long symindx = 0; 2809 2810 /* elf_group_id will have been set up by objcopy and the 2811 generic linker. */ 2812 if (elf_group_id (sec) != NULL) 2813 symindx = elf_group_id (sec)->udata.i; 2814 2815 if (symindx == 0) 2816 { 2817 /* If called from the assembler, swap_out_syms will have set up 2818 elf_section_syms. */ 2819 BFD_ASSERT (elf_section_syms (abfd) != NULL); 2820 symindx = elf_section_syms (abfd)[sec->index]->udata.i; 2821 } 2822 elf_section_data (sec)->this_hdr.sh_info = symindx; 2823 } 2824 else if (elf_section_data (sec)->this_hdr.sh_info == (unsigned int) -2) 2825 { 2826 /* The ELF backend linker sets sh_info to -2 when the group 2827 signature symbol is global, and thus the index can't be 2828 set until all local symbols are output. */ 2829 asection *igroup = elf_sec_group (elf_next_in_group (sec)); 2830 struct bfd_elf_section_data *sec_data = elf_section_data (igroup); 2831 unsigned long symndx = sec_data->this_hdr.sh_info; 2832 unsigned long extsymoff = 0; 2833 struct elf_link_hash_entry *h; 2834 2835 if (!elf_bad_symtab (igroup->owner)) 2836 { 2837 Elf_Internal_Shdr *symtab_hdr; 2838 2839 symtab_hdr = &elf_tdata (igroup->owner)->symtab_hdr; 2840 extsymoff = symtab_hdr->sh_info; 2841 } 2842 h = elf_sym_hashes (igroup->owner)[symndx - extsymoff]; 2843 while (h->root.type == bfd_link_hash_indirect 2844 || h->root.type == bfd_link_hash_warning) 2845 h = (struct elf_link_hash_entry *) h->root.u.i.link; 2846 2847 elf_section_data (sec)->this_hdr.sh_info = h->indx; 2848 } 2849 2850 /* The contents won't be allocated for "ld -r" or objcopy. */ 2851 gas = TRUE; 2852 if (sec->contents == NULL) 2853 { 2854 gas = FALSE; 2855 sec->contents = (unsigned char *) bfd_alloc (abfd, sec->size); 2856 2857 /* Arrange for the section to be written out. */ 2858 elf_section_data (sec)->this_hdr.contents = sec->contents; 2859 if (sec->contents == NULL) 2860 { 2861 *failedptr = TRUE; 2862 return; 2863 } 2864 } 2865 2866 loc = sec->contents + sec->size; 2867 2868 /* Get the pointer to the first section in the group that gas 2869 squirreled away here. objcopy arranges for this to be set to the 2870 start of the input section group. */ 2871 first = elt = elf_next_in_group (sec); 2872 2873 /* First element is a flag word. Rest of section is elf section 2874 indices for all the sections of the group. Write them backwards 2875 just to keep the group in the same order as given in .section 2876 directives, not that it matters. */ 2877 while (elt != NULL) 2878 { 2879 asection *s; 2880 2881 s = elt; 2882 if (!gas) 2883 s = s->output_section; 2884 if (s != NULL 2885 && !bfd_is_abs_section (s)) 2886 { 2887 unsigned int idx = elf_section_data (s)->this_idx; 2888 2889 loc -= 4; 2890 H_PUT_32 (abfd, idx, loc); 2891 } 2892 elt = elf_next_in_group (elt); 2893 if (elt == first) 2894 break; 2895 } 2896 2897 if ((loc -= 4) != sec->contents) 2898 abort (); 2899 2900 H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc); 2901} 2902 2903/* Assign all ELF section numbers. The dummy first section is handled here 2904 too. The link/info pointers for the standard section types are filled 2905 in here too, while we're at it. */ 2906 2907static bfd_boolean 2908assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) 2909{ 2910 struct elf_obj_tdata *t = elf_tdata (abfd); 2911 asection *sec; 2912 unsigned int section_number, secn; 2913 Elf_Internal_Shdr **i_shdrp; 2914 struct bfd_elf_section_data *d; 2915 bfd_boolean need_symtab; 2916 2917 section_number = 1; 2918 2919 _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd)); 2920 2921 /* SHT_GROUP sections are in relocatable files only. */ 2922 if (link_info == NULL || link_info->relocatable) 2923 { 2924 /* Put SHT_GROUP sections first. */ 2925 for (sec = abfd->sections; sec != NULL; sec = sec->next) 2926 { 2927 d = elf_section_data (sec); 2928 2929 if (d->this_hdr.sh_type == SHT_GROUP) 2930 { 2931 if (sec->flags & SEC_LINKER_CREATED) 2932 { 2933 /* Remove the linker created SHT_GROUP sections. */ 2934 bfd_section_list_remove (abfd, sec); 2935 abfd->section_count--; 2936 } 2937 else 2938 d->this_idx = section_number++; 2939 } 2940 } 2941 } 2942 2943 for (sec = abfd->sections; sec; sec = sec->next) 2944 { 2945 d = elf_section_data (sec); 2946 2947 if (d->this_hdr.sh_type != SHT_GROUP) 2948 d->this_idx = section_number++; 2949 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name); 2950 if (d->rel.hdr) 2951 { 2952 d->rel.idx = section_number++; 2953 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel.hdr->sh_name); 2954 } 2955 else 2956 d->rel.idx = 0; 2957 2958 if (d->rela.hdr) 2959 { 2960 d->rela.idx = section_number++; 2961 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rela.hdr->sh_name); 2962 } 2963 else 2964 d->rela.idx = 0; 2965 } 2966 2967 t->shstrtab_section = section_number++; 2968 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name); 2969 elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section; 2970 2971 need_symtab = (bfd_get_symcount (abfd) > 0 2972 || (link_info == NULL 2973 && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC)) 2974 == HAS_RELOC))); 2975 if (need_symtab) 2976 { 2977 t->symtab_section = section_number++; 2978 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name); 2979 if (section_number > ((SHN_LORESERVE - 2) & 0xFFFF)) 2980 { 2981 t->symtab_shndx_section = section_number++; 2982 t->symtab_shndx_hdr.sh_name 2983 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), 2984 ".symtab_shndx", FALSE); 2985 if (t->symtab_shndx_hdr.sh_name == (unsigned int) -1) 2986 return FALSE; 2987 } 2988 t->strtab_section = section_number++; 2989 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name); 2990 } 2991 2992 _bfd_elf_strtab_finalize (elf_shstrtab (abfd)); 2993 t->shstrtab_hdr.sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd)); 2994 2995 elf_numsections (abfd) = section_number; 2996 elf_elfheader (abfd)->e_shnum = section_number; 2997 2998 /* Set up the list of section header pointers, in agreement with the 2999 indices. */ 3000 i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc2 (abfd, section_number, 3001 sizeof (Elf_Internal_Shdr *)); 3002 if (i_shdrp == NULL) 3003 return FALSE; 3004 3005 i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd, 3006 sizeof (Elf_Internal_Shdr)); 3007 if (i_shdrp[0] == NULL) 3008 { 3009 bfd_release (abfd, i_shdrp); 3010 return FALSE; 3011 } 3012 3013 elf_elfsections (abfd) = i_shdrp; 3014 3015 i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr; 3016 if (need_symtab) 3017 { 3018 i_shdrp[t->symtab_section] = &t->symtab_hdr; 3019 if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF)) 3020 { 3021 i_shdrp[t->symtab_shndx_section] = &t->symtab_shndx_hdr; 3022 t->symtab_shndx_hdr.sh_link = t->symtab_section; 3023 } 3024 i_shdrp[t->strtab_section] = &t->strtab_hdr; 3025 t->symtab_hdr.sh_link = t->strtab_section; 3026 } 3027 3028 for (sec = abfd->sections; sec; sec = sec->next) 3029 { 3030 asection *s; 3031 const char *name; 3032 3033 d = elf_section_data (sec); 3034 3035 i_shdrp[d->this_idx] = &d->this_hdr; 3036 if (d->rel.idx != 0) 3037 i_shdrp[d->rel.idx] = d->rel.hdr; 3038 if (d->rela.idx != 0) 3039 i_shdrp[d->rela.idx] = d->rela.hdr; 3040 3041 /* Fill in the sh_link and sh_info fields while we're at it. */ 3042 3043 /* sh_link of a reloc section is the section index of the symbol 3044 table. sh_info is the section index of the section to which 3045 the relocation entries apply. */ 3046 if (d->rel.idx != 0) 3047 { 3048 d->rel.hdr->sh_link = t->symtab_section; 3049 d->rel.hdr->sh_info = d->this_idx; 3050 } 3051 if (d->rela.idx != 0) 3052 { 3053 d->rela.hdr->sh_link = t->symtab_section; 3054 d->rela.hdr->sh_info = d->this_idx; 3055 } 3056 3057 /* We need to set up sh_link for SHF_LINK_ORDER. */ 3058 if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0) 3059 { 3060 s = elf_linked_to_section (sec); 3061 if (s) 3062 { 3063 /* elf_linked_to_section points to the input section. */ 3064 if (link_info != NULL) 3065 { 3066 /* Check discarded linkonce section. */ 3067 if (elf_discarded_section (s)) 3068 { 3069 asection *kept; 3070 (*_bfd_error_handler) 3071 (_("%B: sh_link of section `%A' points to discarded section `%A' of `%B'"), 3072 abfd, d->this_hdr.bfd_section, 3073 s, s->owner); 3074 /* Point to the kept section if it has the same 3075 size as the discarded one. */ 3076 kept = _bfd_elf_check_kept_section (s, link_info); 3077 if (kept == NULL) 3078 { 3079 bfd_set_error (bfd_error_bad_value); 3080 return FALSE; 3081 } 3082 s = kept; 3083 } 3084 3085 s = s->output_section; 3086 BFD_ASSERT (s != NULL); 3087 } 3088 else 3089 { 3090 /* Handle objcopy. */ 3091 if (s->output_section == NULL) 3092 { 3093 (*_bfd_error_handler) 3094 (_("%B: sh_link of section `%A' points to removed section `%A' of `%B'"), 3095 abfd, d->this_hdr.bfd_section, s, s->owner); 3096 bfd_set_error (bfd_error_bad_value); 3097 return FALSE; 3098 } 3099 s = s->output_section; 3100 } 3101 d->this_hdr.sh_link = elf_section_data (s)->this_idx; 3102 } 3103 else 3104 { 3105 /* PR 290: 3106 The Intel C compiler generates SHT_IA_64_UNWIND with 3107 SHF_LINK_ORDER. But it doesn't set the sh_link or 3108 sh_info fields. Hence we could get the situation 3109 where s is NULL. */ 3110 const struct elf_backend_data *bed 3111 = get_elf_backend_data (abfd); 3112 if (bed->link_order_error_handler) 3113 bed->link_order_error_handler 3114 (_("%B: warning: sh_link not set for section `%A'"), 3115 abfd, sec); 3116 } 3117 } 3118 3119 switch (d->this_hdr.sh_type) 3120 { 3121 case SHT_REL: 3122 case SHT_RELA: 3123 /* A reloc section which we are treating as a normal BFD 3124 section. sh_link is the section index of the symbol 3125 table. sh_info is the section index of the section to 3126 which the relocation entries apply. We assume that an 3127 allocated reloc section uses the dynamic symbol table. 3128 FIXME: How can we be sure? */ 3129 s = bfd_get_section_by_name (abfd, ".dynsym"); 3130 if (s != NULL) 3131 d->this_hdr.sh_link = elf_section_data (s)->this_idx; 3132 3133 /* We look up the section the relocs apply to by name. */ 3134 name = sec->name; 3135 if (d->this_hdr.sh_type == SHT_REL) 3136 name += 4; 3137 else 3138 name += 5; 3139 s = bfd_get_section_by_name (abfd, name); 3140 if (s != NULL) 3141 d->this_hdr.sh_info = elf_section_data (s)->this_idx; 3142 break; 3143 3144 case SHT_STRTAB: 3145 /* We assume that a section named .stab*str is a stabs 3146 string section. We look for a section with the same name 3147 but without the trailing ``str'', and set its sh_link 3148 field to point to this section. */ 3149 if (CONST_STRNEQ (sec->name, ".stab") 3150 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0) 3151 { 3152 size_t len; 3153 char *alc; 3154 3155 len = strlen (sec->name); 3156 alc = (char *) bfd_malloc (len - 2); 3157 if (alc == NULL) 3158 return FALSE; 3159 memcpy (alc, sec->name, len - 3); 3160 alc[len - 3] = '\0'; 3161 s = bfd_get_section_by_name (abfd, alc); 3162 free (alc); 3163 if (s != NULL) 3164 { 3165 elf_section_data (s)->this_hdr.sh_link = d->this_idx; 3166 3167 /* This is a .stab section. */ 3168 if (elf_section_data (s)->this_hdr.sh_entsize == 0) 3169 elf_section_data (s)->this_hdr.sh_entsize 3170 = 4 + 2 * bfd_get_arch_size (abfd) / 8; 3171 } 3172 } 3173 break; 3174 3175 case SHT_DYNAMIC: 3176 case SHT_DYNSYM: 3177 case SHT_GNU_verneed: 3178 case SHT_GNU_verdef: 3179 /* sh_link is the section header index of the string table 3180 used for the dynamic entries, or the symbol table, or the 3181 version strings. */ 3182 s = bfd_get_section_by_name (abfd, ".dynstr"); 3183 if (s != NULL) 3184 d->this_hdr.sh_link = elf_section_data (s)->this_idx; 3185 break; 3186 3187 case SHT_GNU_LIBLIST: 3188 /* sh_link is the section header index of the prelink library 3189 list used for the dynamic entries, or the symbol table, or 3190 the version strings. */ 3191 s = bfd_get_section_by_name (abfd, (sec->flags & SEC_ALLOC) 3192 ? ".dynstr" : ".gnu.libstr"); 3193 if (s != NULL) 3194 d->this_hdr.sh_link = elf_section_data (s)->this_idx; 3195 break; 3196 3197 case SHT_HASH: 3198 case SHT_GNU_HASH: 3199 case SHT_GNU_versym: 3200 /* sh_link is the section header index of the symbol table 3201 this hash table or version table is for. */ 3202 s = bfd_get_section_by_name (abfd, ".dynsym"); 3203 if (s != NULL) 3204 d->this_hdr.sh_link = elf_section_data (s)->this_idx; 3205 break; 3206 3207 case SHT_GROUP: 3208 d->this_hdr.sh_link = t->symtab_section; 3209 } 3210 } 3211 3212 for (secn = 1; secn < section_number; ++secn) 3213 if (i_shdrp[secn] == NULL) 3214 i_shdrp[secn] = i_shdrp[0]; 3215 else 3216 i_shdrp[secn]->sh_name = _bfd_elf_strtab_offset (elf_shstrtab (abfd), 3217 i_shdrp[secn]->sh_name); 3218 return TRUE; 3219} 3220 3221/* Map symbol from it's internal number to the external number, moving 3222 all local symbols to be at the head of the list. */ 3223 3224static bfd_boolean 3225sym_is_global (bfd *abfd, asymbol *sym) 3226{ 3227 /* If the backend has a special mapping, use it. */ 3228 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 3229 if (bed->elf_backend_sym_is_global) 3230 return (*bed->elf_backend_sym_is_global) (abfd, sym); 3231 3232 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0 3233 || bfd_is_und_section (bfd_get_section (sym)) 3234 || bfd_is_com_section (bfd_get_section (sym))); 3235} 3236 3237/* Don't output section symbols for sections that are not going to be 3238 output. */ 3239 3240static bfd_boolean 3241ignore_section_sym (bfd *abfd, asymbol *sym) 3242{ 3243 return ((sym->flags & BSF_SECTION_SYM) != 0 3244 && !(sym->section->owner == abfd 3245 || (sym->section->output_section->owner == abfd 3246 && sym->section->output_offset == 0))); 3247} 3248 3249static bfd_boolean 3250elf_map_symbols (bfd *abfd) 3251{ 3252 unsigned int symcount = bfd_get_symcount (abfd); 3253 asymbol **syms = bfd_get_outsymbols (abfd); 3254 asymbol **sect_syms; 3255 unsigned int num_locals = 0; 3256 unsigned int num_globals = 0; 3257 unsigned int num_locals2 = 0; 3258 unsigned int num_globals2 = 0; 3259 int max_index = 0; 3260 unsigned int idx; 3261 asection *asect; 3262 asymbol **new_syms; 3263 3264#ifdef DEBUG 3265 fprintf (stderr, "elf_map_symbols\n"); 3266 fflush (stderr); 3267#endif 3268 3269 for (asect = abfd->sections; asect; asect = asect->next) 3270 { 3271 if (max_index < asect->index) 3272 max_index = asect->index; 3273 } 3274 3275 max_index++; 3276 sect_syms = (asymbol **) bfd_zalloc2 (abfd, max_index, sizeof (asymbol *)); 3277 if (sect_syms == NULL) 3278 return FALSE; 3279 elf_section_syms (abfd) = sect_syms; 3280 elf_num_section_syms (abfd) = max_index; 3281 3282 /* Init sect_syms entries for any section symbols we have already 3283 decided to output. */ 3284 for (idx = 0; idx < symcount; idx++) 3285 { 3286 asymbol *sym = syms[idx]; 3287 3288 if ((sym->flags & BSF_SECTION_SYM) != 0 3289 && sym->value == 0 3290 && !ignore_section_sym (abfd, sym)) 3291 { 3292 asection *sec = sym->section; 3293 3294 if (sec->owner != abfd) 3295 sec = sec->output_section; 3296 3297 sect_syms[sec->index] = syms[idx]; 3298 } 3299 } 3300 3301 /* Classify all of the symbols. */ 3302 for (idx = 0; idx < symcount; idx++) 3303 { 3304 if (ignore_section_sym (abfd, syms[idx])) 3305 continue; 3306 if (!sym_is_global (abfd, syms[idx])) 3307 num_locals++; 3308 else 3309 num_globals++; 3310 } 3311 3312 /* We will be adding a section symbol for each normal BFD section. Most 3313 sections will already have a section symbol in outsymbols, but 3314 eg. SHT_GROUP sections will not, and we need the section symbol mapped 3315 at least in that case. */ 3316 for (asect = abfd->sections; asect; asect = asect->next) 3317 { 3318 if (sect_syms[asect->index] == NULL) 3319 { 3320 if (!sym_is_global (abfd, asect->symbol)) 3321 num_locals++; 3322 else 3323 num_globals++; 3324 } 3325 } 3326 3327 /* Now sort the symbols so the local symbols are first. */ 3328 new_syms = (asymbol **) bfd_alloc2 (abfd, num_locals + num_globals, 3329 sizeof (asymbol *)); 3330 3331 if (new_syms == NULL) 3332 return FALSE; 3333 3334 for (idx = 0; idx < symcount; idx++) 3335 { 3336 asymbol *sym = syms[idx]; 3337 unsigned int i; 3338 3339 if (ignore_section_sym (abfd, sym)) 3340 continue; 3341 if (!sym_is_global (abfd, sym)) 3342 i = num_locals2++; 3343 else 3344 i = num_locals + num_globals2++; 3345 new_syms[i] = sym; 3346 sym->udata.i = i + 1; 3347 } 3348 for (asect = abfd->sections; asect; asect = asect->next) 3349 { 3350 if (sect_syms[asect->index] == NULL) 3351 { 3352 asymbol *sym = asect->symbol; 3353 unsigned int i; 3354 3355 sect_syms[asect->index] = sym; 3356 if (!sym_is_global (abfd, sym)) 3357 i = num_locals2++; 3358 else 3359 i = num_locals + num_globals2++; 3360 new_syms[i] = sym; 3361 sym->udata.i = i + 1; 3362 } 3363 } 3364 3365 bfd_set_symtab (abfd, new_syms, num_locals + num_globals); 3366 3367 elf_num_locals (abfd) = num_locals; 3368 elf_num_globals (abfd) = num_globals; 3369 return TRUE; 3370} 3371 3372/* Align to the maximum file alignment that could be required for any 3373 ELF data structure. */ 3374 3375static inline file_ptr 3376align_file_position (file_ptr off, int align) 3377{ 3378 return (off + align - 1) & ~(align - 1); 3379} 3380 3381/* Assign a file position to a section, optionally aligning to the 3382 required section alignment. */ 3383 3384file_ptr 3385_bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp, 3386 file_ptr offset, 3387 bfd_boolean align) 3388{ 3389 if (align && i_shdrp->sh_addralign > 1) 3390 offset = BFD_ALIGN (offset, i_shdrp->sh_addralign); 3391 i_shdrp->sh_offset = offset; 3392 if (i_shdrp->bfd_section != NULL) 3393 i_shdrp->bfd_section->filepos = offset; 3394 if (i_shdrp->sh_type != SHT_NOBITS) 3395 offset += i_shdrp->sh_size; 3396 return offset; 3397} 3398 3399/* Compute the file positions we are going to put the sections at, and 3400 otherwise prepare to begin writing out the ELF file. If LINK_INFO 3401 is not NULL, this is being called by the ELF backend linker. */ 3402 3403bfd_boolean 3404_bfd_elf_compute_section_file_positions (bfd *abfd, 3405 struct bfd_link_info *link_info) 3406{ 3407 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 3408 struct fake_section_arg fsargs; 3409 bfd_boolean failed; 3410 struct bfd_strtab_hash *strtab = NULL; 3411 Elf_Internal_Shdr *shstrtab_hdr; 3412 bfd_boolean need_symtab; 3413 3414 if (abfd->output_has_begun) 3415 return TRUE; 3416 3417 /* Do any elf backend specific processing first. */ 3418 if (bed->elf_backend_begin_write_processing) 3419 (*bed->elf_backend_begin_write_processing) (abfd, link_info); 3420 3421 if (! prep_headers (abfd)) 3422 return FALSE; 3423 3424 /* Post process the headers if necessary. */ 3425 if (bed->elf_backend_post_process_headers) 3426 (*bed->elf_backend_post_process_headers) (abfd, link_info); 3427 3428 fsargs.failed = FALSE; 3429 fsargs.link_info = link_info; 3430 bfd_map_over_sections (abfd, elf_fake_sections, &fsargs); 3431 if (fsargs.failed) 3432 return FALSE; 3433 3434 if (!assign_section_numbers (abfd, link_info)) 3435 return FALSE; 3436 3437 /* The backend linker builds symbol table information itself. */ 3438 need_symtab = (link_info == NULL 3439 && (bfd_get_symcount (abfd) > 0 3440 || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC)) 3441 == HAS_RELOC))); 3442 if (need_symtab) 3443 { 3444 /* Non-zero if doing a relocatable link. */ 3445 int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC)); 3446 3447 if (! swap_out_syms (abfd, &strtab, relocatable_p)) 3448 return FALSE; 3449 } 3450 3451 failed = FALSE; 3452 if (link_info == NULL) 3453 { 3454 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed); 3455 if (failed) 3456 return FALSE; 3457 } 3458 3459 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr; 3460 /* sh_name was set in prep_headers. */ 3461 shstrtab_hdr->sh_type = SHT_STRTAB; 3462 shstrtab_hdr->sh_flags = 0; 3463 shstrtab_hdr->sh_addr = 0; 3464 shstrtab_hdr->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd)); 3465 shstrtab_hdr->sh_entsize = 0; 3466 shstrtab_hdr->sh_link = 0; 3467 shstrtab_hdr->sh_info = 0; 3468 /* sh_offset is set in assign_file_positions_except_relocs. */ 3469 shstrtab_hdr->sh_addralign = 1; 3470 3471 if (!assign_file_positions_except_relocs (abfd, link_info)) 3472 return FALSE; 3473 3474 if (need_symtab) 3475 { 3476 file_ptr off; 3477 Elf_Internal_Shdr *hdr; 3478 3479 off = elf_tdata (abfd)->next_file_pos; 3480 3481 hdr = &elf_tdata (abfd)->symtab_hdr; 3482 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE); 3483 3484 hdr = &elf_tdata (abfd)->symtab_shndx_hdr; 3485 if (hdr->sh_size != 0) 3486 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE); 3487 3488 hdr = &elf_tdata (abfd)->strtab_hdr; 3489 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE); 3490 3491 elf_tdata (abfd)->next_file_pos = off; 3492 3493 /* Now that we know where the .strtab section goes, write it 3494 out. */ 3495 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0 3496 || ! _bfd_stringtab_emit (abfd, strtab)) 3497 return FALSE; 3498 _bfd_stringtab_free (strtab); 3499 } 3500 3501 abfd->output_has_begun = TRUE; 3502 3503 return TRUE; 3504} 3505 3506/* Make an initial estimate of the size of the program header. If we 3507 get the number wrong here, we'll redo section placement. */ 3508 3509static bfd_size_type 3510get_program_header_size (bfd *abfd, struct bfd_link_info *info) 3511{ 3512 size_t segs; 3513 asection *s; 3514 const struct elf_backend_data *bed; 3515 3516 /* Assume we will need exactly two PT_LOAD segments: one for text 3517 and one for data. */ 3518 segs = 2; 3519 3520 s = bfd_get_section_by_name (abfd, ".interp"); 3521 if (s != NULL && (s->flags & SEC_LOAD) != 0) 3522 { 3523 /* If we have a loadable interpreter section, we need a 3524 PT_INTERP segment. In this case, assume we also need a 3525 PT_PHDR segment, although that may not be true for all 3526 targets. */ 3527 segs += 2; 3528 } 3529 3530 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL) 3531 { 3532 /* We need a PT_DYNAMIC segment. */ 3533 ++segs; 3534 } 3535 3536 if (info != NULL && info->relro) 3537 { 3538 /* We need a PT_GNU_RELRO segment. */ 3539 ++segs; 3540 } 3541 3542 if (elf_tdata (abfd)->eh_frame_hdr) 3543 { 3544 /* We need a PT_GNU_EH_FRAME segment. */ 3545 ++segs; 3546 } 3547 3548 if (elf_tdata (abfd)->stack_flags) 3549 { 3550 /* We need a PT_GNU_STACK segment. */ 3551 ++segs; 3552 } 3553 3554 for (s = abfd->sections; s != NULL; s = s->next) 3555 { 3556 if ((s->flags & SEC_LOAD) != 0 3557 && CONST_STRNEQ (s->name, ".note")) 3558 { 3559 /* We need a PT_NOTE segment. */ 3560 ++segs; 3561 /* Try to create just one PT_NOTE segment 3562 for all adjacent loadable .note* sections. 3563 gABI requires that within a PT_NOTE segment 3564 (and also inside of each SHT_NOTE section) 3565 each note is padded to a multiple of 4 size, 3566 so we check whether the sections are correctly 3567 aligned. */ 3568 if (s->alignment_power == 2) 3569 while (s->next != NULL 3570 && s->next->alignment_power == 2 3571 && (s->next->flags & SEC_LOAD) != 0 3572 && CONST_STRNEQ (s->next->name, ".note")) 3573 s = s->next; 3574 } 3575 } 3576 3577 for (s = abfd->sections; s != NULL; s = s->next) 3578 { 3579 if (s->flags & SEC_THREAD_LOCAL) 3580 { 3581 /* We need a PT_TLS segment. */ 3582 ++segs; 3583 break; 3584 } 3585 } 3586 3587 /* Let the backend count up any program headers it might need. */ 3588 bed = get_elf_backend_data (abfd); 3589 if (bed->elf_backend_additional_program_headers) 3590 { 3591 int a; 3592 3593 a = (*bed->elf_backend_additional_program_headers) (abfd, info); 3594 if (a == -1) 3595 abort (); 3596 segs += a; 3597 } 3598 3599 return segs * bed->s->sizeof_phdr; 3600} 3601 3602/* Find the segment that contains the output_section of section. */ 3603 3604Elf_Internal_Phdr * 3605_bfd_elf_find_segment_containing_section (bfd * abfd, asection * section) 3606{ 3607 struct elf_segment_map *m; 3608 Elf_Internal_Phdr *p; 3609 3610 for (m = elf_tdata (abfd)->segment_map, 3611 p = elf_tdata (abfd)->phdr; 3612 m != NULL; 3613 m = m->next, p++) 3614 { 3615 int i; 3616 3617 for (i = m->count - 1; i >= 0; i--) 3618 if (m->sections[i] == section) 3619 return p; 3620 } 3621 3622 return NULL; 3623} 3624 3625/* Create a mapping from a set of sections to a program segment. */ 3626 3627static struct elf_segment_map * 3628make_mapping (bfd *abfd, 3629 asection **sections, 3630 unsigned int from, 3631 unsigned int to, 3632 bfd_boolean phdr) 3633{ 3634 struct elf_segment_map *m; 3635 unsigned int i; 3636 asection **hdrpp; 3637 bfd_size_type amt; 3638 3639 amt = sizeof (struct elf_segment_map); 3640 amt += (to - from - 1) * sizeof (asection *); 3641 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); 3642 if (m == NULL) 3643 return NULL; 3644 m->next = NULL; 3645 m->p_type = PT_LOAD; 3646 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++) 3647 m->sections[i - from] = *hdrpp; 3648 m->count = to - from; 3649 3650 if (from == 0 && phdr) 3651 { 3652 /* Include the headers in the first PT_LOAD segment. */ 3653 m->includes_filehdr = 1; 3654 m->includes_phdrs = 1; 3655 } 3656 3657 return m; 3658} 3659 3660/* Create the PT_DYNAMIC segment, which includes DYNSEC. Returns NULL 3661 on failure. */ 3662 3663struct elf_segment_map * 3664_bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec) 3665{ 3666 struct elf_segment_map *m; 3667 3668 m = (struct elf_segment_map *) bfd_zalloc (abfd, 3669 sizeof (struct elf_segment_map)); 3670 if (m == NULL) 3671 return NULL; 3672 m->next = NULL; 3673 m->p_type = PT_DYNAMIC; 3674 m->count = 1; 3675 m->sections[0] = dynsec; 3676 3677 return m; 3678} 3679 3680/* Possibly add or remove segments from the segment map. */ 3681 3682static bfd_boolean 3683elf_modify_segment_map (bfd *abfd, 3684 struct bfd_link_info *info, 3685 bfd_boolean remove_empty_load) 3686{ 3687 struct elf_segment_map **m; 3688 const struct elf_backend_data *bed; 3689 3690 /* The placement algorithm assumes that non allocated sections are 3691 not in PT_LOAD segments. We ensure this here by removing such 3692 sections from the segment map. We also remove excluded 3693 sections. Finally, any PT_LOAD segment without sections is 3694 removed. */ 3695 m = &elf_tdata (abfd)->segment_map; 3696 while (*m) 3697 { 3698 unsigned int i, new_count; 3699 3700 for (new_count = 0, i = 0; i < (*m)->count; i++) 3701 { 3702 if (((*m)->sections[i]->flags & SEC_EXCLUDE) == 0 3703 && (((*m)->sections[i]->flags & SEC_ALLOC) != 0 3704 || (*m)->p_type != PT_LOAD)) 3705 { 3706 (*m)->sections[new_count] = (*m)->sections[i]; 3707 new_count++; 3708 } 3709 } 3710 (*m)->count = new_count; 3711 3712 if (remove_empty_load && (*m)->p_type == PT_LOAD && (*m)->count == 0) 3713 *m = (*m)->next; 3714 else 3715 m = &(*m)->next; 3716 } 3717 3718 bed = get_elf_backend_data (abfd); 3719 if (bed->elf_backend_modify_segment_map != NULL) 3720 { 3721 if (!(*bed->elf_backend_modify_segment_map) (abfd, info)) 3722 return FALSE; 3723 } 3724 3725 return TRUE; 3726} 3727 3728/* Set up a mapping from BFD sections to program segments. */ 3729 3730bfd_boolean 3731_bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) 3732{ 3733 unsigned int count; 3734 struct elf_segment_map *m; 3735 asection **sections = NULL; 3736 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 3737 bfd_boolean no_user_phdrs; 3738 3739 no_user_phdrs = elf_tdata (abfd)->segment_map == NULL; 3740 if (no_user_phdrs && bfd_count_sections (abfd) != 0) 3741 { 3742 asection *s; 3743 unsigned int i; 3744 struct elf_segment_map *mfirst; 3745 struct elf_segment_map **pm; 3746 asection *last_hdr; 3747 bfd_vma last_size; 3748 unsigned int phdr_index; 3749 bfd_vma maxpagesize; 3750 asection **hdrpp; 3751 bfd_boolean phdr_in_segment = TRUE; 3752 bfd_boolean writable; 3753 int tls_count = 0; 3754 asection *first_tls = NULL; 3755 asection *dynsec, *eh_frame_hdr; 3756 bfd_size_type amt; 3757 bfd_vma addr_mask, wrap_to = 0; 3758 3759 /* Select the allocated sections, and sort them. */ 3760 3761 sections = (asection **) bfd_malloc2 (bfd_count_sections (abfd), 3762 sizeof (asection *)); 3763 if (sections == NULL) 3764 goto error_return; 3765 3766 /* Calculate top address, avoiding undefined behaviour of shift 3767 left operator when shift count is equal to size of type 3768 being shifted. */ 3769 addr_mask = ((bfd_vma) 1 << (bfd_arch_bits_per_address (abfd) - 1)) - 1; 3770 addr_mask = (addr_mask << 1) + 1; 3771 3772 i = 0; 3773 for (s = abfd->sections; s != NULL; s = s->next) 3774 { 3775 if ((s->flags & SEC_ALLOC) != 0) 3776 { 3777 sections[i] = s; 3778 ++i; 3779 /* A wrapping section potentially clashes with header. */ 3780 if (((s->lma + s->size) & addr_mask) < (s->lma & addr_mask)) 3781 wrap_to = (s->lma + s->size) & addr_mask; 3782 } 3783 } 3784 BFD_ASSERT (i <= bfd_count_sections (abfd)); 3785 count = i; 3786 3787 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections); 3788 3789 /* Build the mapping. */ 3790 3791 mfirst = NULL; 3792 pm = &mfirst; 3793 3794 /* If we have a .interp section, then create a PT_PHDR segment for 3795 the program headers and a PT_INTERP segment for the .interp 3796 section. */ 3797 s = bfd_get_section_by_name (abfd, ".interp"); 3798 if (s != NULL && (s->flags & SEC_LOAD) != 0) 3799 { 3800 amt = sizeof (struct elf_segment_map); 3801 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); 3802 if (m == NULL) 3803 goto error_return; 3804 m->next = NULL; 3805 m->p_type = PT_PHDR; 3806 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */ 3807 m->p_flags = PF_R | PF_X; 3808 m->p_flags_valid = 1; 3809 m->includes_phdrs = 1; 3810 3811 *pm = m; 3812 pm = &m->next; 3813 3814 amt = sizeof (struct elf_segment_map); 3815 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); 3816 if (m == NULL) 3817 goto error_return; 3818 m->next = NULL; 3819 m->p_type = PT_INTERP; 3820 m->count = 1; 3821 m->sections[0] = s; 3822 3823 *pm = m; 3824 pm = &m->next; 3825 } 3826 3827 /* Look through the sections. We put sections in the same program 3828 segment when the start of the second section can be placed within 3829 a few bytes of the end of the first section. */ 3830 last_hdr = NULL; 3831 last_size = 0; 3832 phdr_index = 0; 3833 maxpagesize = bed->maxpagesize; 3834 writable = FALSE; 3835 dynsec = bfd_get_section_by_name (abfd, ".dynamic"); 3836 if (dynsec != NULL 3837 && (dynsec->flags & SEC_LOAD) == 0) 3838 dynsec = NULL; 3839 3840 /* Deal with -Ttext or something similar such that the first section 3841 is not adjacent to the program headers. This is an 3842 approximation, since at this point we don't know exactly how many 3843 program headers we will need. */ 3844 if (count > 0) 3845 { 3846 bfd_size_type phdr_size = elf_tdata (abfd)->program_header_size; 3847 3848 if (phdr_size == (bfd_size_type) -1) 3849 phdr_size = get_program_header_size (abfd, info); 3850 if ((abfd->flags & D_PAGED) == 0 3851 || (sections[0]->lma & addr_mask) < phdr_size 3852 || ((sections[0]->lma & addr_mask) % maxpagesize 3853 < phdr_size % maxpagesize) 3854 || (sections[0]->lma & addr_mask & -maxpagesize) < wrap_to) 3855 phdr_in_segment = FALSE; 3856 } 3857 3858 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++) 3859 { 3860 asection *hdr; 3861 bfd_boolean new_segment; 3862 3863 hdr = *hdrpp; 3864 3865 /* See if this section and the last one will fit in the same 3866 segment. */ 3867 3868 if (last_hdr == NULL) 3869 { 3870 /* If we don't have a segment yet, then we don't need a new 3871 one (we build the last one after this loop). */ 3872 new_segment = FALSE; 3873 } 3874 else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma) 3875 { 3876 /* If this section has a different relation between the 3877 virtual address and the load address, then we need a new 3878 segment. */ 3879 new_segment = TRUE; 3880 } 3881 else if (hdr->lma < last_hdr->lma + last_size 3882 || last_hdr->lma + last_size < last_hdr->lma) 3883 { 3884 /* If this section has a load address that makes it overlap 3885 the previous section, then we need a new segment. */ 3886 new_segment = TRUE; 3887 } 3888 /* In the next test we have to be careful when last_hdr->lma is close 3889 to the end of the address space. If the aligned address wraps 3890 around to the start of the address space, then there are no more 3891 pages left in memory and it is OK to assume that the current 3892 section can be included in the current segment. */ 3893 else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize 3894 > last_hdr->lma) 3895 && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize 3896 <= hdr->lma)) 3897 { 3898 /* If putting this section in this segment would force us to 3899 skip a page in the segment, then we need a new segment. */ 3900 new_segment = TRUE; 3901 } 3902 else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0 3903 && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0) 3904 { 3905 /* We don't want to put a loadable section after a 3906 nonloadable section in the same segment. 3907 Consider .tbss sections as loadable for this purpose. */ 3908 new_segment = TRUE; 3909 } 3910 else if ((abfd->flags & D_PAGED) == 0) 3911 { 3912 /* If the file is not demand paged, which means that we 3913 don't require the sections to be correctly aligned in the 3914 file, then there is no other reason for a new segment. */ 3915 new_segment = FALSE; 3916 } 3917 else if (! writable 3918 && (hdr->flags & SEC_READONLY) == 0 3919 && (((last_hdr->lma + last_size - 1) & -maxpagesize) 3920 != (hdr->lma & -maxpagesize))) 3921 { 3922 /* We don't want to put a writable section in a read only 3923 segment, unless they are on the same page in memory 3924 anyhow. We already know that the last section does not 3925 bring us past the current section on the page, so the 3926 only case in which the new section is not on the same 3927 page as the previous section is when the previous section 3928 ends precisely on a page boundary. */ 3929 new_segment = TRUE; 3930 } 3931 else 3932 { 3933 /* Otherwise, we can use the same segment. */ 3934 new_segment = FALSE; 3935 } 3936 3937 /* Allow interested parties a chance to override our decision. */ 3938 if (last_hdr != NULL 3939 && info != NULL 3940 && info->callbacks->override_segment_assignment != NULL) 3941 new_segment 3942 = info->callbacks->override_segment_assignment (info, abfd, hdr, 3943 last_hdr, 3944 new_segment); 3945 3946 if (! new_segment) 3947 { 3948 if ((hdr->flags & SEC_READONLY) == 0) 3949 writable = TRUE; 3950 last_hdr = hdr; 3951 /* .tbss sections effectively have zero size. */ 3952 if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) 3953 != SEC_THREAD_LOCAL) 3954 last_size = hdr->size; 3955 else 3956 last_size = 0; 3957 continue; 3958 } 3959 3960 /* We need a new program segment. We must create a new program 3961 header holding all the sections from phdr_index until hdr. */ 3962 3963 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment); 3964 if (m == NULL) 3965 goto error_return; 3966 3967 *pm = m; 3968 pm = &m->next; 3969 3970 if ((hdr->flags & SEC_READONLY) == 0) 3971 writable = TRUE; 3972 else 3973 writable = FALSE; 3974 3975 last_hdr = hdr; 3976 /* .tbss sections effectively have zero size. */ 3977 if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) != SEC_THREAD_LOCAL) 3978 last_size = hdr->size; 3979 else 3980 last_size = 0; 3981 phdr_index = i; 3982 phdr_in_segment = FALSE; 3983 } 3984 3985 /* Create a final PT_LOAD program segment, but not if it's just 3986 for .tbss. */ 3987 if (last_hdr != NULL 3988 && (i - phdr_index != 1 3989 || ((last_hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) 3990 != SEC_THREAD_LOCAL))) 3991 { 3992 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment); 3993 if (m == NULL) 3994 goto error_return; 3995 3996 *pm = m; 3997 pm = &m->next; 3998 } 3999 4000 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */ 4001 if (dynsec != NULL) 4002 { 4003 m = _bfd_elf_make_dynamic_segment (abfd, dynsec); 4004 if (m == NULL) 4005 goto error_return; 4006 *pm = m; 4007 pm = &m->next; 4008 } 4009 4010 /* For each batch of consecutive loadable .note sections, 4011 add a PT_NOTE segment. We don't use bfd_get_section_by_name, 4012 because if we link together nonloadable .note sections and 4013 loadable .note sections, we will generate two .note sections 4014 in the output file. FIXME: Using names for section types is 4015 bogus anyhow. */ 4016 for (s = abfd->sections; s != NULL; s = s->next) 4017 { 4018 if ((s->flags & SEC_LOAD) != 0 4019 && CONST_STRNEQ (s->name, ".note")) 4020 { 4021 asection *s2; 4022 4023 count = 1; 4024 amt = sizeof (struct elf_segment_map); 4025 if (s->alignment_power == 2) 4026 for (s2 = s; s2->next != NULL; s2 = s2->next) 4027 { 4028 if (s2->next->alignment_power == 2 4029 && (s2->next->flags & SEC_LOAD) != 0 4030 && CONST_STRNEQ (s2->next->name, ".note") 4031 && align_power (s2->lma + s2->size, 2) 4032 == s2->next->lma) 4033 count++; 4034 else 4035 break; 4036 } 4037 amt += (count - 1) * sizeof (asection *); 4038 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); 4039 if (m == NULL) 4040 goto error_return; 4041 m->next = NULL; 4042 m->p_type = PT_NOTE; 4043 m->count = count; 4044 while (count > 1) 4045 { 4046 m->sections[m->count - count--] = s; 4047 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0); 4048 s = s->next; 4049 } 4050 m->sections[m->count - 1] = s; 4051 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0); 4052 *pm = m; 4053 pm = &m->next; 4054 } 4055 if (s->flags & SEC_THREAD_LOCAL) 4056 { 4057 if (! tls_count) 4058 first_tls = s; 4059 tls_count++; 4060 } 4061 } 4062 4063 /* If there are any SHF_TLS output sections, add PT_TLS segment. */ 4064 if (tls_count > 0) 4065 { 4066 amt = sizeof (struct elf_segment_map); 4067 amt += (tls_count - 1) * sizeof (asection *); 4068 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); 4069 if (m == NULL) 4070 goto error_return; 4071 m->next = NULL; 4072 m->p_type = PT_TLS; 4073 m->count = tls_count; 4074 /* Mandated PF_R. */ 4075 m->p_flags = PF_R; 4076 m->p_flags_valid = 1; 4077 for (i = 0; i < (unsigned int) tls_count; ++i) 4078 { 4079 BFD_ASSERT (first_tls->flags & SEC_THREAD_LOCAL); 4080 m->sections[i] = first_tls; 4081 first_tls = first_tls->next; 4082 } 4083 4084 *pm = m; 4085 pm = &m->next; 4086 } 4087 4088 /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME 4089 segment. */ 4090 eh_frame_hdr = elf_tdata (abfd)->eh_frame_hdr; 4091 if (eh_frame_hdr != NULL 4092 && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0) 4093 { 4094 amt = sizeof (struct elf_segment_map); 4095 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); 4096 if (m == NULL) 4097 goto error_return; 4098 m->next = NULL; 4099 m->p_type = PT_GNU_EH_FRAME; 4100 m->count = 1; 4101 m->sections[0] = eh_frame_hdr->output_section; 4102 4103 *pm = m; 4104 pm = &m->next; 4105 } 4106 4107 if (elf_tdata (abfd)->stack_flags) 4108 { 4109 amt = sizeof (struct elf_segment_map); 4110 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); 4111 if (m == NULL) 4112 goto error_return; 4113 m->next = NULL; 4114 m->p_type = PT_GNU_STACK; 4115 m->p_flags = elf_tdata (abfd)->stack_flags; 4116 m->p_flags_valid = 1; 4117 4118 *pm = m; 4119 pm = &m->next; 4120 } 4121 4122 if (info != NULL && info->relro) 4123 { 4124 for (m = mfirst; m != NULL; m = m->next) 4125 { 4126 if (m->p_type == PT_LOAD) 4127 { 4128 asection *last = m->sections[m->count - 1]; 4129 bfd_vma vaddr = m->sections[0]->vma; 4130 bfd_vma filesz = last->vma - vaddr + last->size; 4131 4132 if (vaddr < info->relro_end 4133 && vaddr >= info->relro_start 4134 && (vaddr + filesz) >= info->relro_end) 4135 break; 4136 } 4137 } 4138 4139 /* Make a PT_GNU_RELRO segment only when it isn't empty. */ 4140 if (m != NULL) 4141 { 4142 amt = sizeof (struct elf_segment_map); 4143 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); 4144 if (m == NULL) 4145 goto error_return; 4146 m->next = NULL; 4147 m->p_type = PT_GNU_RELRO; 4148 m->p_flags = PF_R; 4149 m->p_flags_valid = 1; 4150 4151 *pm = m; 4152 pm = &m->next; 4153 } 4154 } 4155 4156 free (sections); 4157 elf_tdata (abfd)->segment_map = mfirst; 4158 } 4159 4160 if (!elf_modify_segment_map (abfd, info, no_user_phdrs)) 4161 return FALSE; 4162 4163 for (count = 0, m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next) 4164 ++count; 4165 elf_tdata (abfd)->program_header_size = count * bed->s->sizeof_phdr; 4166 4167 return TRUE; 4168 4169 error_return: 4170 if (sections != NULL) 4171 free (sections); 4172 return FALSE; 4173} 4174 4175/* Sort sections by address. */ 4176 4177static int 4178elf_sort_sections (const void *arg1, const void *arg2) 4179{ 4180 const asection *sec1 = *(const asection **) arg1; 4181 const asection *sec2 = *(const asection **) arg2; 4182 bfd_size_type size1, size2; 4183 4184 /* Sort by LMA first, since this is the address used to 4185 place the section into a segment. */ 4186 if (sec1->lma < sec2->lma) 4187 return -1; 4188 else if (sec1->lma > sec2->lma) 4189 return 1; 4190 4191 /* Then sort by VMA. Normally the LMA and the VMA will be 4192 the same, and this will do nothing. */ 4193 if (sec1->vma < sec2->vma) 4194 return -1; 4195 else if (sec1->vma > sec2->vma) 4196 return 1; 4197 4198 /* Put !SEC_LOAD sections after SEC_LOAD ones. */ 4199 4200#define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0) 4201 4202 if (TOEND (sec1)) 4203 { 4204 if (TOEND (sec2)) 4205 { 4206 /* If the indicies are the same, do not return 0 4207 here, but continue to try the next comparison. */ 4208 if (sec1->target_index - sec2->target_index != 0) 4209 return sec1->target_index - sec2->target_index; 4210 } 4211 else 4212 return 1; 4213 } 4214 else if (TOEND (sec2)) 4215 return -1; 4216 4217#undef TOEND 4218 4219 /* Sort by size, to put zero sized sections 4220 before others at the same address. */ 4221 4222 size1 = (sec1->flags & SEC_LOAD) ? sec1->size : 0; 4223 size2 = (sec2->flags & SEC_LOAD) ? sec2->size : 0; 4224 4225 if (size1 < size2) 4226 return -1; 4227 if (size1 > size2) 4228 return 1; 4229 4230 return sec1->target_index - sec2->target_index; 4231} 4232 4233/* Ian Lance Taylor writes: 4234 4235 We shouldn't be using % with a negative signed number. That's just 4236 not good. We have to make sure either that the number is not 4237 negative, or that the number has an unsigned type. When the types 4238 are all the same size they wind up as unsigned. When file_ptr is a 4239 larger signed type, the arithmetic winds up as signed long long, 4240 which is wrong. 4241 4242 What we're trying to say here is something like ``increase OFF by 4243 the least amount that will cause it to be equal to the VMA modulo 4244 the page size.'' */ 4245/* In other words, something like: 4246 4247 vma_offset = m->sections[0]->vma % bed->maxpagesize; 4248 off_offset = off % bed->maxpagesize; 4249 if (vma_offset < off_offset) 4250 adjustment = vma_offset + bed->maxpagesize - off_offset; 4251 else 4252 adjustment = vma_offset - off_offset; 4253 4254 which can can be collapsed into the expression below. */ 4255 4256static file_ptr 4257vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize) 4258{ 4259 return ((vma - off) % maxpagesize); 4260} 4261 4262static void 4263print_segment_map (const struct elf_segment_map *m) 4264{ 4265 unsigned int j; 4266 const char *pt = get_segment_type (m->p_type); 4267 char buf[32]; 4268 4269 if (pt == NULL) 4270 { 4271 if (m->p_type >= PT_LOPROC && m->p_type <= PT_HIPROC) 4272 sprintf (buf, "LOPROC+%7.7x", 4273 (unsigned int) (m->p_type - PT_LOPROC)); 4274 else if (m->p_type >= PT_LOOS && m->p_type <= PT_HIOS) 4275 sprintf (buf, "LOOS+%7.7x", 4276 (unsigned int) (m->p_type - PT_LOOS)); 4277 else 4278 snprintf (buf, sizeof (buf), "%8.8x", 4279 (unsigned int) m->p_type); 4280 pt = buf; 4281 } 4282 fflush (stdout); 4283 fprintf (stderr, "%s:", pt); 4284 for (j = 0; j < m->count; j++) 4285 fprintf (stderr, " %s", m->sections [j]->name); 4286 putc ('\n',stderr); 4287 fflush (stderr); 4288} 4289 4290static bfd_boolean 4291write_zeros (bfd *abfd, file_ptr pos, bfd_size_type len) 4292{ 4293 void *buf; 4294 bfd_boolean ret; 4295 4296 if (bfd_seek (abfd, pos, SEEK_SET) != 0) 4297 return FALSE; 4298 buf = bfd_zmalloc (len); 4299 if (buf == NULL) 4300 return FALSE; 4301 ret = bfd_bwrite (buf, len, abfd) == len; 4302 free (buf); 4303 return ret; 4304} 4305 4306/* Assign file positions to the sections based on the mapping from 4307 sections to segments. This function also sets up some fields in 4308 the file header. */ 4309 4310static bfd_boolean 4311assign_file_positions_for_load_sections (bfd *abfd, 4312 struct bfd_link_info *link_info) 4313{ 4314 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 4315 struct elf_segment_map *m; 4316 Elf_Internal_Phdr *phdrs; 4317 Elf_Internal_Phdr *p; 4318 file_ptr off; 4319 bfd_size_type maxpagesize; 4320 unsigned int alloc; 4321 unsigned int i, j; 4322 bfd_vma header_pad = 0; 4323 4324 if (link_info == NULL 4325 && !_bfd_elf_map_sections_to_segments (abfd, link_info)) 4326 return FALSE; 4327 4328 alloc = 0; 4329 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next) 4330 { 4331 ++alloc; 4332 if (m->header_size) 4333 header_pad = m->header_size; 4334 } 4335 4336 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr; 4337 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr; 4338 elf_elfheader (abfd)->e_phnum = alloc; 4339 4340 if (elf_tdata (abfd)->program_header_size == (bfd_size_type) -1) 4341 elf_tdata (abfd)->program_header_size = alloc * bed->s->sizeof_phdr; 4342 else 4343 BFD_ASSERT (elf_tdata (abfd)->program_header_size 4344 >= alloc * bed->s->sizeof_phdr); 4345 4346 if (alloc == 0) 4347 { 4348 elf_tdata (abfd)->next_file_pos = bed->s->sizeof_ehdr; 4349 return TRUE; 4350 } 4351 4352 /* We're writing the size in elf_tdata (abfd)->program_header_size, 4353 see assign_file_positions_except_relocs, so make sure we have 4354 that amount allocated, with trailing space cleared. 4355 The variable alloc contains the computed need, while elf_tdata 4356 (abfd)->program_header_size contains the size used for the 4357 layout. 4358 See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments 4359 where the layout is forced to according to a larger size in the 4360 last iterations for the testcase ld-elf/header. */ 4361 BFD_ASSERT (elf_tdata (abfd)->program_header_size % bed->s->sizeof_phdr 4362 == 0); 4363 phdrs = (Elf_Internal_Phdr *) 4364 bfd_zalloc2 (abfd, 4365 (elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr), 4366 sizeof (Elf_Internal_Phdr)); 4367 elf_tdata (abfd)->phdr = phdrs; 4368 if (phdrs == NULL) 4369 return FALSE; 4370 4371 maxpagesize = 1; 4372 if ((abfd->flags & D_PAGED) != 0) 4373 maxpagesize = bed->maxpagesize; 4374 4375 off = bed->s->sizeof_ehdr; 4376 off += alloc * bed->s->sizeof_phdr; 4377 if (header_pad < (bfd_vma) off) 4378 header_pad = 0; 4379 else 4380 header_pad -= off; 4381 off += header_pad; 4382 4383 for (m = elf_tdata (abfd)->segment_map, p = phdrs, j = 0; 4384 m != NULL; 4385 m = m->next, p++, j++) 4386 { 4387 asection **secpp; 4388 bfd_vma off_adjust; 4389 bfd_boolean no_contents; 4390 4391 /* If elf_segment_map is not from map_sections_to_segments, the 4392 sections may not be correctly ordered. NOTE: sorting should 4393 not be done to the PT_NOTE section of a corefile, which may 4394 contain several pseudo-sections artificially created by bfd. 4395 Sorting these pseudo-sections breaks things badly. */ 4396 if (m->count > 1 4397 && !(elf_elfheader (abfd)->e_type == ET_CORE 4398 && m->p_type == PT_NOTE)) 4399 qsort (m->sections, (size_t) m->count, sizeof (asection *), 4400 elf_sort_sections); 4401 4402 /* An ELF segment (described by Elf_Internal_Phdr) may contain a 4403 number of sections with contents contributing to both p_filesz 4404 and p_memsz, followed by a number of sections with no contents 4405 that just contribute to p_memsz. In this loop, OFF tracks next 4406 available file offset for PT_LOAD and PT_NOTE segments. */ 4407 p->p_type = m->p_type; 4408 p->p_flags = m->p_flags; 4409 4410 if (m->count == 0) 4411 p->p_vaddr = 0; 4412 else 4413 p->p_vaddr = m->sections[0]->vma - m->p_vaddr_offset; 4414 4415 if (m->p_paddr_valid) 4416 p->p_paddr = m->p_paddr; 4417 else if (m->count == 0) 4418 p->p_paddr = 0; 4419 else 4420 p->p_paddr = m->sections[0]->lma - m->p_vaddr_offset; 4421 4422 if (p->p_type == PT_LOAD 4423 && (abfd->flags & D_PAGED) != 0) 4424 { 4425 /* p_align in demand paged PT_LOAD segments effectively stores 4426 the maximum page size. When copying an executable with 4427 objcopy, we set m->p_align from the input file. Use this 4428 value for maxpagesize rather than bed->maxpagesize, which 4429 may be different. Note that we use maxpagesize for PT_TLS 4430 segment alignment later in this function, so we are relying 4431 on at least one PT_LOAD segment appearing before a PT_TLS 4432 segment. */ 4433 if (m->p_align_valid) 4434 maxpagesize = m->p_align; 4435 4436 p->p_align = maxpagesize; 4437 } 4438 else if (m->p_align_valid) 4439 p->p_align = m->p_align; 4440 else if (m->count == 0) 4441 p->p_align = 1 << bed->s->log_file_align; 4442 else 4443 p->p_align = 0; 4444 4445 no_contents = FALSE; 4446 off_adjust = 0; 4447 if (p->p_type == PT_LOAD 4448 && m->count > 0) 4449 { 4450 bfd_size_type align; 4451 unsigned int align_power = 0; 4452 4453 if (m->p_align_valid) 4454 align = p->p_align; 4455 else 4456 { 4457 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++) 4458 { 4459 unsigned int secalign; 4460 4461 secalign = bfd_get_section_alignment (abfd, *secpp); 4462 if (secalign > align_power) 4463 align_power = secalign; 4464 } 4465 align = (bfd_size_type) 1 << align_power; 4466 if (align < maxpagesize) 4467 align = maxpagesize; 4468 } 4469 4470 for (i = 0; i < m->count; i++) 4471 if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0) 4472 /* If we aren't making room for this section, then 4473 it must be SHT_NOBITS regardless of what we've 4474 set via struct bfd_elf_special_section. */ 4475 elf_section_type (m->sections[i]) = SHT_NOBITS; 4476 4477 /* Find out whether this segment contains any loadable 4478 sections. */ 4479 no_contents = TRUE; 4480 for (i = 0; i < m->count; i++) 4481 if (elf_section_type (m->sections[i]) != SHT_NOBITS) 4482 { 4483 no_contents = FALSE; 4484 break; 4485 } 4486 4487 off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align); 4488 off += off_adjust; 4489 if (no_contents) 4490 { 4491 /* We shouldn't need to align the segment on disk since 4492 the segment doesn't need file space, but the gABI 4493 arguably requires the alignment and glibc ld.so 4494 checks it. So to comply with the alignment 4495 requirement but not waste file space, we adjust 4496 p_offset for just this segment. (OFF_ADJUST is 4497 subtracted from OFF later.) This may put p_offset 4498 past the end of file, but that shouldn't matter. */ 4499 } 4500 else 4501 off_adjust = 0; 4502 } 4503 /* Make sure the .dynamic section is the first section in the 4504 PT_DYNAMIC segment. */ 4505 else if (p->p_type == PT_DYNAMIC 4506 && m->count > 1 4507 && strcmp (m->sections[0]->name, ".dynamic") != 0) 4508 { 4509 _bfd_error_handler 4510 (_("%B: The first section in the PT_DYNAMIC segment is not the .dynamic section"), 4511 abfd); 4512 bfd_set_error (bfd_error_bad_value); 4513 return FALSE; 4514 } 4515 /* Set the note section type to SHT_NOTE. */ 4516 else if (p->p_type == PT_NOTE) 4517 for (i = 0; i < m->count; i++) 4518 elf_section_type (m->sections[i]) = SHT_NOTE; 4519 4520 p->p_offset = 0; 4521 p->p_filesz = 0; 4522 p->p_memsz = 0; 4523 4524 if (m->includes_filehdr) 4525 { 4526 if (!m->p_flags_valid) 4527 p->p_flags |= PF_R; 4528 p->p_filesz = bed->s->sizeof_ehdr; 4529 p->p_memsz = bed->s->sizeof_ehdr; 4530 if (m->count > 0) 4531 { 4532 BFD_ASSERT (p->p_type == PT_LOAD); 4533 4534 if (p->p_vaddr < (bfd_vma) off) 4535 { 4536 (*_bfd_error_handler) 4537 (_("%B: Not enough room for program headers, try linking with -N"), 4538 abfd); 4539 bfd_set_error (bfd_error_bad_value); 4540 return FALSE; 4541 } 4542 4543 p->p_vaddr -= off; 4544 if (!m->p_paddr_valid) 4545 p->p_paddr -= off; 4546 } 4547 } 4548 4549 if (m->includes_phdrs) 4550 { 4551 if (!m->p_flags_valid) 4552 p->p_flags |= PF_R; 4553 4554 if (!m->includes_filehdr) 4555 { 4556 p->p_offset = bed->s->sizeof_ehdr; 4557 4558 if (m->count > 0) 4559 { 4560 BFD_ASSERT (p->p_type == PT_LOAD); 4561 p->p_vaddr -= off - p->p_offset; 4562 if (!m->p_paddr_valid) 4563 p->p_paddr -= off - p->p_offset; 4564 } 4565 } 4566 4567 p->p_filesz += alloc * bed->s->sizeof_phdr; 4568 p->p_memsz += alloc * bed->s->sizeof_phdr; 4569 if (m->count) 4570 { 4571 p->p_filesz += header_pad; 4572 p->p_memsz += header_pad; 4573 } 4574 } 4575 4576 if (p->p_type == PT_LOAD 4577 || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)) 4578 { 4579 if (!m->includes_filehdr && !m->includes_phdrs) 4580 p->p_offset = off; 4581 else 4582 { 4583 file_ptr adjust; 4584 4585 adjust = off - (p->p_offset + p->p_filesz); 4586 if (!no_contents) 4587 p->p_filesz += adjust; 4588 p->p_memsz += adjust; 4589 } 4590 } 4591 4592 /* Set up p_filesz, p_memsz, p_align and p_flags from the section 4593 maps. Set filepos for sections in PT_LOAD segments, and in 4594 core files, for sections in PT_NOTE segments. 4595 assign_file_positions_for_non_load_sections will set filepos 4596 for other sections and update p_filesz for other segments. */ 4597 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++) 4598 { 4599 asection *sec; 4600 bfd_size_type align; 4601 Elf_Internal_Shdr *this_hdr; 4602 4603 sec = *secpp; 4604 this_hdr = &elf_section_data (sec)->this_hdr; 4605 align = (bfd_size_type) 1 << bfd_get_section_alignment (abfd, sec); 4606 4607 if ((p->p_type == PT_LOAD 4608 || p->p_type == PT_TLS) 4609 && (this_hdr->sh_type != SHT_NOBITS 4610 || ((this_hdr->sh_flags & SHF_ALLOC) != 0 4611 && ((this_hdr->sh_flags & SHF_TLS) == 0 4612 || p->p_type == PT_TLS)))) 4613 { 4614 bfd_vma p_start = p->p_paddr; 4615 bfd_vma p_end = p_start + p->p_memsz; 4616 bfd_vma s_start = sec->lma; 4617 bfd_vma adjust = s_start - p_end; 4618 4619 if (adjust != 0 4620 && (s_start < p_end 4621 || p_end < p_start)) 4622 { 4623 (*_bfd_error_handler) 4624 (_("%B: section %A lma %#lx adjusted to %#lx"), abfd, sec, 4625 (unsigned long) s_start, (unsigned long) p_end); 4626 adjust = 0; 4627 sec->lma = p_end; 4628 } 4629 p->p_memsz += adjust; 4630 4631 if (this_hdr->sh_type != SHT_NOBITS) 4632 { 4633 if (p->p_filesz + adjust < p->p_memsz) 4634 { 4635 /* We have a PROGBITS section following NOBITS ones. 4636 Allocate file space for the NOBITS section(s) and 4637 zero it. */ 4638 adjust = p->p_memsz - p->p_filesz; 4639 if (!write_zeros (abfd, off, adjust)) 4640 return FALSE; 4641 } 4642 off += adjust; 4643 p->p_filesz += adjust; 4644 } 4645 } 4646 4647 if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core) 4648 { 4649 /* The section at i == 0 is the one that actually contains 4650 everything. */ 4651 if (i == 0) 4652 { 4653 this_hdr->sh_offset = sec->filepos = off; 4654 off += this_hdr->sh_size; 4655 p->p_filesz = this_hdr->sh_size; 4656 p->p_memsz = 0; 4657 p->p_align = 1; 4658 } 4659 else 4660 { 4661 /* The rest are fake sections that shouldn't be written. */ 4662 sec->filepos = 0; 4663 sec->size = 0; 4664 sec->flags = 0; 4665 continue; 4666 } 4667 } 4668 else 4669 { 4670 if (p->p_type == PT_LOAD) 4671 { 4672 this_hdr->sh_offset = sec->filepos = off; 4673 if (this_hdr->sh_type != SHT_NOBITS) 4674 off += this_hdr->sh_size; 4675 } 4676 else if (this_hdr->sh_type == SHT_NOBITS 4677 && (this_hdr->sh_flags & SHF_TLS) != 0 4678 && this_hdr->sh_offset == 0) 4679 { 4680 /* This is a .tbss section that didn't get a PT_LOAD. 4681 (See _bfd_elf_map_sections_to_segments "Create a 4682 final PT_LOAD".) Set sh_offset to the value it 4683 would have if we had created a zero p_filesz and 4684 p_memsz PT_LOAD header for the section. This 4685 also makes the PT_TLS header have the same 4686 p_offset value. */ 4687 bfd_vma adjust = vma_page_aligned_bias (this_hdr->sh_addr, 4688 off, align); 4689 this_hdr->sh_offset = sec->filepos = off + adjust; 4690 } 4691 4692 if (this_hdr->sh_type != SHT_NOBITS) 4693 { 4694 p->p_filesz += this_hdr->sh_size; 4695 /* A load section without SHF_ALLOC is something like 4696 a note section in a PT_NOTE segment. These take 4697 file space but are not loaded into memory. */ 4698 if ((this_hdr->sh_flags & SHF_ALLOC) != 0) 4699 p->p_memsz += this_hdr->sh_size; 4700 } 4701 else if ((this_hdr->sh_flags & SHF_ALLOC) != 0) 4702 { 4703 if (p->p_type == PT_TLS) 4704 p->p_memsz += this_hdr->sh_size; 4705 4706 /* .tbss is special. It doesn't contribute to p_memsz of 4707 normal segments. */ 4708 else if ((this_hdr->sh_flags & SHF_TLS) == 0) 4709 p->p_memsz += this_hdr->sh_size; 4710 } 4711 4712 if (align > p->p_align 4713 && !m->p_align_valid 4714 && (p->p_type != PT_LOAD 4715 || (abfd->flags & D_PAGED) == 0)) 4716 p->p_align = align; 4717 } 4718 4719 if (!m->p_flags_valid) 4720 { 4721 p->p_flags |= PF_R; 4722 if ((this_hdr->sh_flags & SHF_EXECINSTR) != 0) 4723 p->p_flags |= PF_X; 4724 if ((this_hdr->sh_flags & SHF_WRITE) != 0) 4725 p->p_flags |= PF_W; 4726 } 4727 } 4728 off -= off_adjust; 4729 4730 /* Check that all sections are in a PT_LOAD segment. 4731 Don't check funky gdb generated core files. */ 4732 if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core) 4733 { 4734 bfd_boolean check_vma = TRUE; 4735 4736 for (i = 1; i < m->count; i++) 4737 if (m->sections[i]->vma == m->sections[i - 1]->vma 4738 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i]) 4739 ->this_hdr), p) != 0 4740 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i - 1]) 4741 ->this_hdr), p) != 0) 4742 { 4743 /* Looks like we have overlays packed into the segment. */ 4744 check_vma = FALSE; 4745 break; 4746 } 4747 4748 for (i = 0; i < m->count; i++) 4749 { 4750 Elf_Internal_Shdr *this_hdr; 4751 asection *sec; 4752 4753 sec = m->sections[i]; 4754 this_hdr = &(elf_section_data(sec)->this_hdr); 4755 if (!ELF_SECTION_IN_SEGMENT_1 (this_hdr, p, check_vma, 0) 4756 && !ELF_TBSS_SPECIAL (this_hdr, p)) 4757 { 4758 (*_bfd_error_handler) 4759 (_("%B: section `%A' can't be allocated in segment %d"), 4760 abfd, sec, j); 4761 print_segment_map (m); 4762 } 4763 } 4764 } 4765 } 4766 4767 elf_tdata (abfd)->next_file_pos = off; 4768 return TRUE; 4769} 4770 4771/* Assign file positions for the other sections. */ 4772 4773static bfd_boolean 4774assign_file_positions_for_non_load_sections (bfd *abfd, 4775 struct bfd_link_info *link_info) 4776{ 4777 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 4778 Elf_Internal_Shdr **i_shdrpp; 4779 Elf_Internal_Shdr **hdrpp; 4780 Elf_Internal_Phdr *phdrs; 4781 Elf_Internal_Phdr *p; 4782 struct elf_segment_map *m; 4783 bfd_vma filehdr_vaddr, filehdr_paddr; 4784 bfd_vma phdrs_vaddr, phdrs_paddr; 4785 file_ptr off; 4786 unsigned int num_sec; 4787 unsigned int i; 4788 unsigned int count; 4789 4790 i_shdrpp = elf_elfsections (abfd); 4791 num_sec = elf_numsections (abfd); 4792 off = elf_tdata (abfd)->next_file_pos; 4793 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++) 4794 { 4795 struct elf_obj_tdata *tdata = elf_tdata (abfd); 4796 Elf_Internal_Shdr *hdr; 4797 4798 hdr = *hdrpp; 4799 if (hdr->bfd_section != NULL 4800 && (hdr->bfd_section->filepos != 0 4801 || (hdr->sh_type == SHT_NOBITS 4802 && hdr->contents == NULL))) 4803 BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos); 4804 else if ((hdr->sh_flags & SHF_ALLOC) != 0) 4805 { 4806 (*_bfd_error_handler) 4807 (_("%B: warning: allocated section `%s' not in segment"), 4808 abfd, 4809 (hdr->bfd_section == NULL 4810 ? "*unknown*" 4811 : hdr->bfd_section->name)); 4812 /* We don't need to page align empty sections. */ 4813 if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0) 4814 off += vma_page_aligned_bias (hdr->sh_addr, off, 4815 bed->maxpagesize); 4816 else 4817 off += vma_page_aligned_bias (hdr->sh_addr, off, 4818 hdr->sh_addralign); 4819 off = _bfd_elf_assign_file_position_for_section (hdr, off, 4820 FALSE); 4821 } 4822 else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA) 4823 && hdr->bfd_section == NULL) 4824 || hdr == i_shdrpp[tdata->symtab_section] 4825 || hdr == i_shdrpp[tdata->symtab_shndx_section] 4826 || hdr == i_shdrpp[tdata->strtab_section]) 4827 hdr->sh_offset = -1; 4828 else 4829 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE); 4830 } 4831 4832 /* Now that we have set the section file positions, we can set up 4833 the file positions for the non PT_LOAD segments. */ 4834 count = 0; 4835 filehdr_vaddr = 0; 4836 filehdr_paddr = 0; 4837 phdrs_vaddr = bed->maxpagesize + bed->s->sizeof_ehdr; 4838 phdrs_paddr = 0; 4839 phdrs = elf_tdata (abfd)->phdr; 4840 for (m = elf_tdata (abfd)->segment_map, p = phdrs; 4841 m != NULL; 4842 m = m->next, p++) 4843 { 4844 ++count; 4845 if (p->p_type != PT_LOAD) 4846 continue; 4847 4848 if (m->includes_filehdr) 4849 { 4850 filehdr_vaddr = p->p_vaddr; 4851 filehdr_paddr = p->p_paddr; 4852 } 4853 if (m->includes_phdrs) 4854 { 4855 phdrs_vaddr = p->p_vaddr; 4856 phdrs_paddr = p->p_paddr; 4857 if (m->includes_filehdr) 4858 { 4859 phdrs_vaddr += bed->s->sizeof_ehdr; 4860 phdrs_paddr += bed->s->sizeof_ehdr; 4861 } 4862 } 4863 } 4864 4865 for (m = elf_tdata (abfd)->segment_map, p = phdrs; 4866 m != NULL; 4867 m = m->next, p++) 4868 { 4869 if (p->p_type == PT_GNU_RELRO) 4870 { 4871 const Elf_Internal_Phdr *lp; 4872 4873 BFD_ASSERT (!m->includes_filehdr && !m->includes_phdrs); 4874 4875 if (link_info != NULL) 4876 { 4877 /* During linking the range of the RELRO segment is passed 4878 in link_info. */ 4879 for (lp = phdrs; lp < phdrs + count; ++lp) 4880 { 4881 if (lp->p_type == PT_LOAD 4882 && lp->p_vaddr >= link_info->relro_start 4883 && lp->p_vaddr < link_info->relro_end 4884 && lp->p_vaddr + lp->p_filesz >= link_info->relro_end) 4885 break; 4886 } 4887 } 4888 else 4889 { 4890 /* Otherwise we are copying an executable or shared 4891 library, but we need to use the same linker logic. */ 4892 for (lp = phdrs; lp < phdrs + count; ++lp) 4893 { 4894 if (lp->p_type == PT_LOAD 4895 && lp->p_paddr == p->p_paddr) 4896 break; 4897 } 4898 } 4899 4900 if (lp < phdrs + count) 4901 { 4902 p->p_vaddr = lp->p_vaddr; 4903 p->p_paddr = lp->p_paddr; 4904 p->p_offset = lp->p_offset; 4905 if (link_info != NULL) 4906 p->p_filesz = link_info->relro_end - lp->p_vaddr; 4907 else if (m->p_size_valid) 4908 p->p_filesz = m->p_size; 4909 else 4910 abort (); 4911 p->p_memsz = p->p_filesz; 4912 p->p_align = 1; 4913 p->p_flags = (lp->p_flags & ~PF_W); 4914 } 4915 else 4916 { 4917 memset (p, 0, sizeof *p); 4918 p->p_type = PT_NULL; 4919 } 4920 } 4921 else if (m->count != 0) 4922 { 4923 if (p->p_type != PT_LOAD 4924 && (p->p_type != PT_NOTE 4925 || bfd_get_format (abfd) != bfd_core)) 4926 { 4927 BFD_ASSERT (!m->includes_filehdr && !m->includes_phdrs); 4928 4929 p->p_filesz = 0; 4930 p->p_offset = m->sections[0]->filepos; 4931 for (i = m->count; i-- != 0;) 4932 { 4933 asection *sect = m->sections[i]; 4934 Elf_Internal_Shdr *hdr = &elf_section_data (sect)->this_hdr; 4935 if (hdr->sh_type != SHT_NOBITS) 4936 { 4937 p->p_filesz = (sect->filepos - m->sections[0]->filepos 4938 + hdr->sh_size); 4939 break; 4940 } 4941 } 4942 } 4943 } 4944 else if (m->includes_filehdr) 4945 { 4946 p->p_vaddr = filehdr_vaddr; 4947 if (! m->p_paddr_valid) 4948 p->p_paddr = filehdr_paddr; 4949 } 4950 else if (m->includes_phdrs) 4951 { 4952 p->p_vaddr = phdrs_vaddr; 4953 if (! m->p_paddr_valid) 4954 p->p_paddr = phdrs_paddr; 4955 } 4956 } 4957 4958 elf_tdata (abfd)->next_file_pos = off; 4959 4960 return TRUE; 4961} 4962 4963/* Work out the file positions of all the sections. This is called by 4964 _bfd_elf_compute_section_file_positions. All the section sizes and 4965 VMAs must be known before this is called. 4966 4967 Reloc sections come in two flavours: Those processed specially as 4968 "side-channel" data attached to a section to which they apply, and 4969 those that bfd doesn't process as relocations. The latter sort are 4970 stored in a normal bfd section by bfd_section_from_shdr. We don't 4971 consider the former sort here, unless they form part of the loadable 4972 image. Reloc sections not assigned here will be handled later by 4973 assign_file_positions_for_relocs. 4974 4975 We also don't set the positions of the .symtab and .strtab here. */ 4976 4977static bfd_boolean 4978assign_file_positions_except_relocs (bfd *abfd, 4979 struct bfd_link_info *link_info) 4980{ 4981 struct elf_obj_tdata *tdata = elf_tdata (abfd); 4982 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd); 4983 file_ptr off; 4984 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 4985 4986 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0 4987 && bfd_get_format (abfd) != bfd_core) 4988 { 4989 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd); 4990 unsigned int num_sec = elf_numsections (abfd); 4991 Elf_Internal_Shdr **hdrpp; 4992 unsigned int i; 4993 4994 /* Start after the ELF header. */ 4995 off = i_ehdrp->e_ehsize; 4996 4997 /* We are not creating an executable, which means that we are 4998 not creating a program header, and that the actual order of 4999 the sections in the file is unimportant. */ 5000 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++) 5001 { 5002 Elf_Internal_Shdr *hdr; 5003 5004 hdr = *hdrpp; 5005 if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA) 5006 && hdr->bfd_section == NULL) 5007 || i == tdata->symtab_section 5008 || i == tdata->symtab_shndx_section 5009 || i == tdata->strtab_section) 5010 { 5011 hdr->sh_offset = -1; 5012 } 5013 else 5014 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE); 5015 } 5016 } 5017 else 5018 { 5019 unsigned int alloc; 5020 5021 /* Assign file positions for the loaded sections based on the 5022 assignment of sections to segments. */ 5023 if (!assign_file_positions_for_load_sections (abfd, link_info)) 5024 return FALSE; 5025 5026 /* And for non-load sections. */ 5027 if (!assign_file_positions_for_non_load_sections (abfd, link_info)) 5028 return FALSE; 5029 5030 if (bed->elf_backend_modify_program_headers != NULL) 5031 { 5032 if (!(*bed->elf_backend_modify_program_headers) (abfd, link_info)) 5033 return FALSE; 5034 } 5035 5036 /* Write out the program headers. */ 5037 alloc = tdata->program_header_size / bed->s->sizeof_phdr; 5038 if (bfd_seek (abfd, (bfd_signed_vma) bed->s->sizeof_ehdr, SEEK_SET) != 0 5039 || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0) 5040 return FALSE; 5041 5042 off = tdata->next_file_pos; 5043 } 5044 5045 /* Place the section headers. */ 5046 off = align_file_position (off, 1 << bed->s->log_file_align); 5047 i_ehdrp->e_shoff = off; 5048 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize; 5049 5050 tdata->next_file_pos = off; 5051 5052 return TRUE; 5053} 5054 5055static bfd_boolean 5056prep_headers (bfd *abfd) 5057{ 5058 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form. */ 5059 struct elf_strtab_hash *shstrtab; 5060 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 5061 5062 i_ehdrp = elf_elfheader (abfd); 5063 5064 shstrtab = _bfd_elf_strtab_init (); 5065 if (shstrtab == NULL) 5066 return FALSE; 5067 5068 elf_shstrtab (abfd) = shstrtab; 5069 5070 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0; 5071 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1; 5072 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2; 5073 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3; 5074 5075 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass; 5076 i_ehdrp->e_ident[EI_DATA] = 5077 bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB; 5078 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current; 5079 5080 if ((abfd->flags & DYNAMIC) != 0) 5081 i_ehdrp->e_type = ET_DYN; 5082 else if ((abfd->flags & EXEC_P) != 0) 5083 i_ehdrp->e_type = ET_EXEC; 5084 else if (bfd_get_format (abfd) == bfd_core) 5085 i_ehdrp->e_type = ET_CORE; 5086 else 5087 i_ehdrp->e_type = ET_REL; 5088 5089 switch (bfd_get_arch (abfd)) 5090 { 5091 case bfd_arch_unknown: 5092 i_ehdrp->e_machine = EM_NONE; 5093 break; 5094 5095 /* There used to be a long list of cases here, each one setting 5096 e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE 5097 in the corresponding bfd definition. To avoid duplication, 5098 the switch was removed. Machines that need special handling 5099 can generally do it in elf_backend_final_write_processing(), 5100 unless they need the information earlier than the final write. 5101 Such need can generally be supplied by replacing the tests for 5102 e_machine with the conditions used to determine it. */ 5103 default: 5104 i_ehdrp->e_machine = bed->elf_machine_code; 5105 } 5106 5107 i_ehdrp->e_version = bed->s->ev_current; 5108 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr; 5109 5110 /* No program header, for now. */ 5111 i_ehdrp->e_phoff = 0; 5112 i_ehdrp->e_phentsize = 0; 5113 i_ehdrp->e_phnum = 0; 5114 5115 /* Each bfd section is section header entry. */ 5116 i_ehdrp->e_entry = bfd_get_start_address (abfd); 5117 i_ehdrp->e_shentsize = bed->s->sizeof_shdr; 5118 5119 /* If we're building an executable, we'll need a program header table. */ 5120 if (abfd->flags & EXEC_P) 5121 /* It all happens later. */ 5122 ; 5123 else 5124 { 5125 i_ehdrp->e_phentsize = 0; 5126 i_ehdrp->e_phoff = 0; 5127 } 5128 5129 elf_tdata (abfd)->symtab_hdr.sh_name = 5130 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", FALSE); 5131 elf_tdata (abfd)->strtab_hdr.sh_name = 5132 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", FALSE); 5133 elf_tdata (abfd)->shstrtab_hdr.sh_name = 5134 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", FALSE); 5135 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1 5136 || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1 5137 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1) 5138 return FALSE; 5139 5140 return TRUE; 5141} 5142 5143/* Assign file positions for all the reloc sections which are not part 5144 of the loadable file image. */ 5145 5146void 5147_bfd_elf_assign_file_positions_for_relocs (bfd *abfd) 5148{ 5149 file_ptr off; 5150 unsigned int i, num_sec; 5151 Elf_Internal_Shdr **shdrpp; 5152 5153 off = elf_tdata (abfd)->next_file_pos; 5154 5155 num_sec = elf_numsections (abfd); 5156 for (i = 1, shdrpp = elf_elfsections (abfd) + 1; i < num_sec; i++, shdrpp++) 5157 { 5158 Elf_Internal_Shdr *shdrp; 5159 5160 shdrp = *shdrpp; 5161 if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA) 5162 && shdrp->sh_offset == -1) 5163 off = _bfd_elf_assign_file_position_for_section (shdrp, off, TRUE); 5164 } 5165 5166 elf_tdata (abfd)->next_file_pos = off; 5167} 5168 5169bfd_boolean 5170_bfd_elf_write_object_contents (bfd *abfd) 5171{ 5172 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 5173 Elf_Internal_Shdr **i_shdrp; 5174 bfd_boolean failed; 5175 unsigned int count, num_sec; 5176 5177 if (! abfd->output_has_begun 5178 && ! _bfd_elf_compute_section_file_positions (abfd, NULL)) 5179 return FALSE; 5180 5181 i_shdrp = elf_elfsections (abfd); 5182 5183 failed = FALSE; 5184 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed); 5185 if (failed) 5186 return FALSE; 5187 5188 _bfd_elf_assign_file_positions_for_relocs (abfd); 5189 5190 /* After writing the headers, we need to write the sections too... */ 5191 num_sec = elf_numsections (abfd); 5192 for (count = 1; count < num_sec; count++) 5193 { 5194 if (bed->elf_backend_section_processing) 5195 (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]); 5196 if (i_shdrp[count]->contents) 5197 { 5198 bfd_size_type amt = i_shdrp[count]->sh_size; 5199 5200 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0 5201 || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt) 5202 return FALSE; 5203 } 5204 } 5205 5206 /* Write out the section header names. */ 5207 if (elf_shstrtab (abfd) != NULL 5208 && (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0 5209 || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd)))) 5210 return FALSE; 5211 5212 if (bed->elf_backend_final_write_processing) 5213 (*bed->elf_backend_final_write_processing) (abfd, 5214 elf_tdata (abfd)->linker); 5215 5216 if (!bed->s->write_shdrs_and_ehdr (abfd)) 5217 return FALSE; 5218 5219 /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */ 5220 if (elf_tdata (abfd)->after_write_object_contents) 5221 return (*elf_tdata (abfd)->after_write_object_contents) (abfd); 5222 5223 return TRUE; 5224} 5225 5226bfd_boolean 5227_bfd_elf_write_corefile_contents (bfd *abfd) 5228{ 5229 /* Hopefully this can be done just like an object file. */ 5230 return _bfd_elf_write_object_contents (abfd); 5231} 5232 5233/* Given a section, search the header to find them. */ 5234 5235unsigned int 5236_bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect) 5237{ 5238 const struct elf_backend_data *bed; 5239 unsigned int sec_index; 5240 5241 if (elf_section_data (asect) != NULL 5242 && elf_section_data (asect)->this_idx != 0) 5243 return elf_section_data (asect)->this_idx; 5244 5245 if (bfd_is_abs_section (asect)) 5246 sec_index = SHN_ABS; 5247 else if (bfd_is_com_section (asect)) 5248 sec_index = SHN_COMMON; 5249 else if (bfd_is_und_section (asect)) 5250 sec_index = SHN_UNDEF; 5251 else 5252 sec_index = SHN_BAD; 5253 5254 bed = get_elf_backend_data (abfd); 5255 if (bed->elf_backend_section_from_bfd_section) 5256 { 5257 int retval = sec_index; 5258 5259 if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval)) 5260 return retval; 5261 } 5262 5263 if (sec_index == SHN_BAD) 5264 bfd_set_error (bfd_error_nonrepresentable_section); 5265 5266 return sec_index; 5267} 5268 5269/* Given a BFD symbol, return the index in the ELF symbol table, or -1 5270 on error. */ 5271 5272int 5273_bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr) 5274{ 5275 asymbol *asym_ptr = *asym_ptr_ptr; 5276 int idx; 5277 flagword flags = asym_ptr->flags; 5278 5279 /* When gas creates relocations against local labels, it creates its 5280 own symbol for the section, but does put the symbol into the 5281 symbol chain, so udata is 0. When the linker is generating 5282 relocatable output, this section symbol may be for one of the 5283 input sections rather than the output section. */ 5284 if (asym_ptr->udata.i == 0 5285 && (flags & BSF_SECTION_SYM) 5286 && asym_ptr->section) 5287 { 5288 asection *sec; 5289 int indx; 5290 5291 sec = asym_ptr->section; 5292 if (sec->owner != abfd && sec->output_section != NULL) 5293 sec = sec->output_section; 5294 if (sec->owner == abfd 5295 && (indx = sec->index) < elf_num_section_syms (abfd) 5296 && elf_section_syms (abfd)[indx] != NULL) 5297 asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i; 5298 } 5299 5300 idx = asym_ptr->udata.i; 5301 5302 if (idx == 0) 5303 { 5304 /* This case can occur when using --strip-symbol on a symbol 5305 which is used in a relocation entry. */ 5306 (*_bfd_error_handler) 5307 (_("%B: symbol `%s' required but not present"), 5308 abfd, bfd_asymbol_name (asym_ptr)); 5309 bfd_set_error (bfd_error_no_symbols); 5310 return -1; 5311 } 5312 5313#if DEBUG & 4 5314 { 5315 fprintf (stderr, 5316 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx\n", 5317 (long) asym_ptr, asym_ptr->name, idx, (long) flags); 5318 fflush (stderr); 5319 } 5320#endif 5321 5322 return idx; 5323} 5324 5325/* Rewrite program header information. */ 5326 5327static bfd_boolean 5328rewrite_elf_program_header (bfd *ibfd, bfd *obfd) 5329{ 5330 Elf_Internal_Ehdr *iehdr; 5331 struct elf_segment_map *map; 5332 struct elf_segment_map *map_first; 5333 struct elf_segment_map **pointer_to_map; 5334 Elf_Internal_Phdr *segment; 5335 asection *section; 5336 unsigned int i; 5337 unsigned int num_segments; 5338 bfd_boolean phdr_included = FALSE; 5339 bfd_boolean p_paddr_valid; 5340 bfd_vma maxpagesize; 5341 struct elf_segment_map *phdr_adjust_seg = NULL; 5342 unsigned int phdr_adjust_num = 0; 5343 const struct elf_backend_data *bed; 5344 5345 bed = get_elf_backend_data (ibfd); 5346 iehdr = elf_elfheader (ibfd); 5347 5348 map_first = NULL; 5349 pointer_to_map = &map_first; 5350 5351 num_segments = elf_elfheader (ibfd)->e_phnum; 5352 maxpagesize = get_elf_backend_data (obfd)->maxpagesize; 5353 5354 /* Returns the end address of the segment + 1. */ 5355#define SEGMENT_END(segment, start) \ 5356 (start + (segment->p_memsz > segment->p_filesz \ 5357 ? segment->p_memsz : segment->p_filesz)) 5358 5359#define SECTION_SIZE(section, segment) \ 5360 (((section->flags & (SEC_HAS_CONTENTS | SEC_THREAD_LOCAL)) \ 5361 != SEC_THREAD_LOCAL || segment->p_type == PT_TLS) \ 5362 ? section->size : 0) 5363 5364 /* Returns TRUE if the given section is contained within 5365 the given segment. VMA addresses are compared. */ 5366#define IS_CONTAINED_BY_VMA(section, segment) \ 5367 (section->vma >= segment->p_vaddr \ 5368 && (section->vma + SECTION_SIZE (section, segment) \ 5369 <= (SEGMENT_END (segment, segment->p_vaddr)))) 5370 5371 /* Returns TRUE if the given section is contained within 5372 the given segment. LMA addresses are compared. */ 5373#define IS_CONTAINED_BY_LMA(section, segment, base) \ 5374 (section->lma >= base \ 5375 && (section->lma + SECTION_SIZE (section, segment) \ 5376 <= SEGMENT_END (segment, base))) 5377 5378 /* Handle PT_NOTE segment. */ 5379#define IS_NOTE(p, s) \ 5380 (p->p_type == PT_NOTE \ 5381 && elf_section_type (s) == SHT_NOTE \ 5382 && (bfd_vma) s->filepos >= p->p_offset \ 5383 && ((bfd_vma) s->filepos + s->size \ 5384 <= p->p_offset + p->p_filesz)) 5385 5386 /* Special case: corefile "NOTE" section containing regs, prpsinfo 5387 etc. */ 5388#define IS_COREFILE_NOTE(p, s) \ 5389 (IS_NOTE (p, s) \ 5390 && bfd_get_format (ibfd) == bfd_core \ 5391 && s->vma == 0 \ 5392 && s->lma == 0) 5393 5394 /* The complicated case when p_vaddr is 0 is to handle the Solaris 5395 linker, which generates a PT_INTERP section with p_vaddr and 5396 p_memsz set to 0. */ 5397#define IS_SOLARIS_PT_INTERP(p, s) \ 5398 (p->p_vaddr == 0 \ 5399 && p->p_paddr == 0 \ 5400 && p->p_memsz == 0 \ 5401 && p->p_filesz > 0 \ 5402 && (s->flags & SEC_HAS_CONTENTS) != 0 \ 5403 && s->size > 0 \ 5404 && (bfd_vma) s->filepos >= p->p_offset \ 5405 && ((bfd_vma) s->filepos + s->size \ 5406 <= p->p_offset + p->p_filesz)) 5407 5408 /* Decide if the given section should be included in the given segment. 5409 A section will be included if: 5410 1. It is within the address space of the segment -- we use the LMA 5411 if that is set for the segment and the VMA otherwise, 5412 2. It is an allocated section or a NOTE section in a PT_NOTE 5413 segment. 5414 3. There is an output section associated with it, 5415 4. The section has not already been allocated to a previous segment. 5416 5. PT_GNU_STACK segments do not include any sections. 5417 6. PT_TLS segment includes only SHF_TLS sections. 5418 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments. 5419 8. PT_DYNAMIC should not contain empty sections at the beginning 5420 (with the possible exception of .dynamic). */ 5421#define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed) \ 5422 ((((segment->p_paddr \ 5423 ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \ 5424 : IS_CONTAINED_BY_VMA (section, segment)) \ 5425 && (section->flags & SEC_ALLOC) != 0) \ 5426 || IS_NOTE (segment, section)) \ 5427 && segment->p_type != PT_GNU_STACK \ 5428 && (segment->p_type != PT_TLS \ 5429 || (section->flags & SEC_THREAD_LOCAL)) \ 5430 && (segment->p_type == PT_LOAD \ 5431 || segment->p_type == PT_TLS \ 5432 || (section->flags & SEC_THREAD_LOCAL) == 0) \ 5433 && (segment->p_type != PT_DYNAMIC \ 5434 || SECTION_SIZE (section, segment) > 0 \ 5435 || (segment->p_paddr \ 5436 ? segment->p_paddr != section->lma \ 5437 : segment->p_vaddr != section->vma) \ 5438 || (strcmp (bfd_get_section_name (ibfd, section), ".dynamic") \ 5439 == 0)) \ 5440 && !section->segment_mark) 5441 5442/* If the output section of a section in the input segment is NULL, 5443 it is removed from the corresponding output segment. */ 5444#define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed) \ 5445 (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed) \ 5446 && section->output_section != NULL) 5447 5448 /* Returns TRUE iff seg1 starts after the end of seg2. */ 5449#define SEGMENT_AFTER_SEGMENT(seg1, seg2, field) \ 5450 (seg1->field >= SEGMENT_END (seg2, seg2->field)) 5451 5452 /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both 5453 their VMA address ranges and their LMA address ranges overlap. 5454 It is possible to have overlapping VMA ranges without overlapping LMA 5455 ranges. RedBoot images for example can have both .data and .bss mapped 5456 to the same VMA range, but with the .data section mapped to a different 5457 LMA. */ 5458#define SEGMENT_OVERLAPS(seg1, seg2) \ 5459 ( !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr) \ 5460 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr)) \ 5461 && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr) \ 5462 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr))) 5463 5464 /* Initialise the segment mark field. */ 5465 for (section = ibfd->sections; section != NULL; section = section->next) 5466 section->segment_mark = FALSE; 5467 5468 /* The Solaris linker creates program headers in which all the 5469 p_paddr fields are zero. When we try to objcopy or strip such a 5470 file, we get confused. Check for this case, and if we find it 5471 don't set the p_paddr_valid fields. */ 5472 p_paddr_valid = FALSE; 5473 for (i = 0, segment = elf_tdata (ibfd)->phdr; 5474 i < num_segments; 5475 i++, segment++) 5476 if (segment->p_paddr != 0) 5477 { 5478 p_paddr_valid = TRUE; 5479 break; 5480 } 5481 5482 /* Scan through the segments specified in the program header 5483 of the input BFD. For this first scan we look for overlaps 5484 in the loadable segments. These can be created by weird 5485 parameters to objcopy. Also, fix some solaris weirdness. */ 5486 for (i = 0, segment = elf_tdata (ibfd)->phdr; 5487 i < num_segments; 5488 i++, segment++) 5489 { 5490 unsigned int j; 5491 Elf_Internal_Phdr *segment2; 5492 5493 if (segment->p_type == PT_INTERP) 5494 for (section = ibfd->sections; section; section = section->next) 5495 if (IS_SOLARIS_PT_INTERP (segment, section)) 5496 { 5497 /* Mininal change so that the normal section to segment 5498 assignment code will work. */ 5499 segment->p_vaddr = section->vma; 5500 break; 5501 } 5502 5503 if (segment->p_type != PT_LOAD) 5504 { 5505 /* Remove PT_GNU_RELRO segment. */ 5506 if (segment->p_type == PT_GNU_RELRO) 5507 segment->p_type = PT_NULL; 5508 continue; 5509 } 5510 5511 /* Determine if this segment overlaps any previous segments. */ 5512 for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2++) 5513 { 5514 bfd_signed_vma extra_length; 5515 5516 if (segment2->p_type != PT_LOAD 5517 || !SEGMENT_OVERLAPS (segment, segment2)) 5518 continue; 5519 5520 /* Merge the two segments together. */ 5521 if (segment2->p_vaddr < segment->p_vaddr) 5522 { 5523 /* Extend SEGMENT2 to include SEGMENT and then delete 5524 SEGMENT. */ 5525 extra_length = (SEGMENT_END (segment, segment->p_vaddr) 5526 - SEGMENT_END (segment2, segment2->p_vaddr)); 5527 5528 if (extra_length > 0) 5529 { 5530 segment2->p_memsz += extra_length; 5531 segment2->p_filesz += extra_length; 5532 } 5533 5534 segment->p_type = PT_NULL; 5535 5536 /* Since we have deleted P we must restart the outer loop. */ 5537 i = 0; 5538 segment = elf_tdata (ibfd)->phdr; 5539 break; 5540 } 5541 else 5542 { 5543 /* Extend SEGMENT to include SEGMENT2 and then delete 5544 SEGMENT2. */ 5545 extra_length = (SEGMENT_END (segment2, segment2->p_vaddr) 5546 - SEGMENT_END (segment, segment->p_vaddr)); 5547 5548 if (extra_length > 0) 5549 { 5550 segment->p_memsz += extra_length; 5551 segment->p_filesz += extra_length; 5552 } 5553 5554 segment2->p_type = PT_NULL; 5555 } 5556 } 5557 } 5558 5559 /* The second scan attempts to assign sections to segments. */ 5560 for (i = 0, segment = elf_tdata (ibfd)->phdr; 5561 i < num_segments; 5562 i++, segment++) 5563 { 5564 unsigned int section_count; 5565 asection **sections; 5566 asection *output_section; 5567 unsigned int isec; 5568 bfd_vma matching_lma; 5569 bfd_vma suggested_lma; 5570 unsigned int j; 5571 bfd_size_type amt; 5572 asection *first_section; 5573 bfd_boolean first_matching_lma; 5574 bfd_boolean first_suggested_lma; 5575 5576 if (segment->p_type == PT_NULL) 5577 continue; 5578 5579 first_section = NULL; 5580 /* Compute how many sections might be placed into this segment. */ 5581 for (section = ibfd->sections, section_count = 0; 5582 section != NULL; 5583 section = section->next) 5584 { 5585 /* Find the first section in the input segment, which may be 5586 removed from the corresponding output segment. */ 5587 if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed)) 5588 { 5589 if (first_section == NULL) 5590 first_section = section; 5591 if (section->output_section != NULL) 5592 ++section_count; 5593 } 5594 } 5595 5596 /* Allocate a segment map big enough to contain 5597 all of the sections we have selected. */ 5598 amt = sizeof (struct elf_segment_map); 5599 amt += ((bfd_size_type) section_count - 1) * sizeof (asection *); 5600 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt); 5601 if (map == NULL) 5602 return FALSE; 5603 5604 /* Initialise the fields of the segment map. Default to 5605 using the physical address of the segment in the input BFD. */ 5606 map->next = NULL; 5607 map->p_type = segment->p_type; 5608 map->p_flags = segment->p_flags; 5609 map->p_flags_valid = 1; 5610 5611 /* If the first section in the input segment is removed, there is 5612 no need to preserve segment physical address in the corresponding 5613 output segment. */ 5614 if (!first_section || first_section->output_section != NULL) 5615 { 5616 map->p_paddr = segment->p_paddr; 5617 map->p_paddr_valid = p_paddr_valid; 5618 } 5619 5620 /* Determine if this segment contains the ELF file header 5621 and if it contains the program headers themselves. */ 5622 map->includes_filehdr = (segment->p_offset == 0 5623 && segment->p_filesz >= iehdr->e_ehsize); 5624 map->includes_phdrs = 0; 5625 5626 if (!phdr_included || segment->p_type != PT_LOAD) 5627 { 5628 map->includes_phdrs = 5629 (segment->p_offset <= (bfd_vma) iehdr->e_phoff 5630 && (segment->p_offset + segment->p_filesz 5631 >= ((bfd_vma) iehdr->e_phoff 5632 + iehdr->e_phnum * iehdr->e_phentsize))); 5633 5634 if (segment->p_type == PT_LOAD && map->includes_phdrs) 5635 phdr_included = TRUE; 5636 } 5637 5638 if (section_count == 0) 5639 { 5640 /* Special segments, such as the PT_PHDR segment, may contain 5641 no sections, but ordinary, loadable segments should contain 5642 something. They are allowed by the ELF spec however, so only 5643 a warning is produced. */ 5644 if (segment->p_type == PT_LOAD) 5645 (*_bfd_error_handler) (_("%B: warning: Empty loadable segment" 5646 " detected, is this intentional ?\n"), 5647 ibfd); 5648 5649 map->count = 0; 5650 *pointer_to_map = map; 5651 pointer_to_map = &map->next; 5652 5653 continue; 5654 } 5655 5656 /* Now scan the sections in the input BFD again and attempt 5657 to add their corresponding output sections to the segment map. 5658 The problem here is how to handle an output section which has 5659 been moved (ie had its LMA changed). There are four possibilities: 5660 5661 1. None of the sections have been moved. 5662 In this case we can continue to use the segment LMA from the 5663 input BFD. 5664 5665 2. All of the sections have been moved by the same amount. 5666 In this case we can change the segment's LMA to match the LMA 5667 of the first section. 5668 5669 3. Some of the sections have been moved, others have not. 5670 In this case those sections which have not been moved can be 5671 placed in the current segment which will have to have its size, 5672 and possibly its LMA changed, and a new segment or segments will 5673 have to be created to contain the other sections. 5674 5675 4. The sections have been moved, but not by the same amount. 5676 In this case we can change the segment's LMA to match the LMA 5677 of the first section and we will have to create a new segment 5678 or segments to contain the other sections. 5679 5680 In order to save time, we allocate an array to hold the section 5681 pointers that we are interested in. As these sections get assigned 5682 to a segment, they are removed from this array. */ 5683 5684 sections = (asection **) bfd_malloc2 (section_count, sizeof (asection *)); 5685 if (sections == NULL) 5686 return FALSE; 5687 5688 /* Step One: Scan for segment vs section LMA conflicts. 5689 Also add the sections to the section array allocated above. 5690 Also add the sections to the current segment. In the common 5691 case, where the sections have not been moved, this means that 5692 we have completely filled the segment, and there is nothing 5693 more to do. */ 5694 isec = 0; 5695 matching_lma = 0; 5696 suggested_lma = 0; 5697 first_matching_lma = TRUE; 5698 first_suggested_lma = TRUE; 5699 5700 for (section = ibfd->sections; 5701 section != NULL; 5702 section = section->next) 5703 if (section == first_section) 5704 break; 5705 5706 for (j = 0; section != NULL; section = section->next) 5707 { 5708 if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed)) 5709 { 5710 output_section = section->output_section; 5711 5712 sections[j++] = section; 5713 5714 /* The Solaris native linker always sets p_paddr to 0. 5715 We try to catch that case here, and set it to the 5716 correct value. Note - some backends require that 5717 p_paddr be left as zero. */ 5718 if (!p_paddr_valid 5719 && segment->p_vaddr != 0 5720 && !bed->want_p_paddr_set_to_zero 5721 && isec == 0 5722 && output_section->lma != 0 5723 && output_section->vma == (segment->p_vaddr 5724 + (map->includes_filehdr 5725 ? iehdr->e_ehsize 5726 : 0) 5727 + (map->includes_phdrs 5728 ? (iehdr->e_phnum 5729 * iehdr->e_phentsize) 5730 : 0))) 5731 map->p_paddr = segment->p_vaddr; 5732 5733 /* Match up the physical address of the segment with the 5734 LMA address of the output section. */ 5735 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr) 5736 || IS_COREFILE_NOTE (segment, section) 5737 || (bed->want_p_paddr_set_to_zero 5738 && IS_CONTAINED_BY_VMA (output_section, segment))) 5739 { 5740 if (first_matching_lma || output_section->lma < matching_lma) 5741 { 5742 matching_lma = output_section->lma; 5743 first_matching_lma = FALSE; 5744 } 5745 5746 /* We assume that if the section fits within the segment 5747 then it does not overlap any other section within that 5748 segment. */ 5749 map->sections[isec++] = output_section; 5750 } 5751 else if (first_suggested_lma) 5752 { 5753 suggested_lma = output_section->lma; 5754 first_suggested_lma = FALSE; 5755 } 5756 5757 if (j == section_count) 5758 break; 5759 } 5760 } 5761 5762 BFD_ASSERT (j == section_count); 5763 5764 /* Step Two: Adjust the physical address of the current segment, 5765 if necessary. */ 5766 if (isec == section_count) 5767 { 5768 /* All of the sections fitted within the segment as currently 5769 specified. This is the default case. Add the segment to 5770 the list of built segments and carry on to process the next 5771 program header in the input BFD. */ 5772 map->count = section_count; 5773 *pointer_to_map = map; 5774 pointer_to_map = &map->next; 5775 5776 if (p_paddr_valid 5777 && !bed->want_p_paddr_set_to_zero 5778 && matching_lma != map->p_paddr 5779 && !map->includes_filehdr 5780 && !map->includes_phdrs) 5781 /* There is some padding before the first section in the 5782 segment. So, we must account for that in the output 5783 segment's vma. */ 5784 map->p_vaddr_offset = matching_lma - map->p_paddr; 5785 5786 free (sections); 5787 continue; 5788 } 5789 else 5790 { 5791 if (!first_matching_lma) 5792 { 5793 /* At least one section fits inside the current segment. 5794 Keep it, but modify its physical address to match the 5795 LMA of the first section that fitted. */ 5796 map->p_paddr = matching_lma; 5797 } 5798 else 5799 { 5800 /* None of the sections fitted inside the current segment. 5801 Change the current segment's physical address to match 5802 the LMA of the first section. */ 5803 map->p_paddr = suggested_lma; 5804 } 5805 5806 /* Offset the segment physical address from the lma 5807 to allow for space taken up by elf headers. */ 5808 if (map->includes_filehdr) 5809 { 5810 if (map->p_paddr >= iehdr->e_ehsize) 5811 map->p_paddr -= iehdr->e_ehsize; 5812 else 5813 { 5814 map->includes_filehdr = FALSE; 5815 map->includes_phdrs = FALSE; 5816 } 5817 } 5818 5819 if (map->includes_phdrs) 5820 { 5821 if (map->p_paddr >= iehdr->e_phnum * iehdr->e_phentsize) 5822 { 5823 map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize; 5824 5825 /* iehdr->e_phnum is just an estimate of the number 5826 of program headers that we will need. Make a note 5827 here of the number we used and the segment we chose 5828 to hold these headers, so that we can adjust the 5829 offset when we know the correct value. */ 5830 phdr_adjust_num = iehdr->e_phnum; 5831 phdr_adjust_seg = map; 5832 } 5833 else 5834 map->includes_phdrs = FALSE; 5835 } 5836 } 5837 5838 /* Step Three: Loop over the sections again, this time assigning 5839 those that fit to the current segment and removing them from the 5840 sections array; but making sure not to leave large gaps. Once all 5841 possible sections have been assigned to the current segment it is 5842 added to the list of built segments and if sections still remain 5843 to be assigned, a new segment is constructed before repeating 5844 the loop. */ 5845 isec = 0; 5846 do 5847 { 5848 map->count = 0; 5849 suggested_lma = 0; 5850 first_suggested_lma = TRUE; 5851 5852 /* Fill the current segment with sections that fit. */ 5853 for (j = 0; j < section_count; j++) 5854 { 5855 section = sections[j]; 5856 5857 if (section == NULL) 5858 continue; 5859 5860 output_section = section->output_section; 5861 5862 BFD_ASSERT (output_section != NULL); 5863 5864 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr) 5865 || IS_COREFILE_NOTE (segment, section)) 5866 { 5867 if (map->count == 0) 5868 { 5869 /* If the first section in a segment does not start at 5870 the beginning of the segment, then something is 5871 wrong. */ 5872 if (output_section->lma 5873 != (map->p_paddr 5874 + (map->includes_filehdr ? iehdr->e_ehsize : 0) 5875 + (map->includes_phdrs 5876 ? iehdr->e_phnum * iehdr->e_phentsize 5877 : 0))) 5878 abort (); 5879 } 5880 else 5881 { 5882 asection *prev_sec; 5883 5884 prev_sec = map->sections[map->count - 1]; 5885 5886 /* If the gap between the end of the previous section 5887 and the start of this section is more than 5888 maxpagesize then we need to start a new segment. */ 5889 if ((BFD_ALIGN (prev_sec->lma + prev_sec->size, 5890 maxpagesize) 5891 < BFD_ALIGN (output_section->lma, maxpagesize)) 5892 || (prev_sec->lma + prev_sec->size 5893 > output_section->lma)) 5894 { 5895 if (first_suggested_lma) 5896 { 5897 suggested_lma = output_section->lma; 5898 first_suggested_lma = FALSE; 5899 } 5900 5901 continue; 5902 } 5903 } 5904 5905 map->sections[map->count++] = output_section; 5906 ++isec; 5907 sections[j] = NULL; 5908 section->segment_mark = TRUE; 5909 } 5910 else if (first_suggested_lma) 5911 { 5912 suggested_lma = output_section->lma; 5913 first_suggested_lma = FALSE; 5914 } 5915 } 5916 5917 BFD_ASSERT (map->count > 0); 5918 5919 /* Add the current segment to the list of built segments. */ 5920 *pointer_to_map = map; 5921 pointer_to_map = &map->next; 5922 5923 if (isec < section_count) 5924 { 5925 /* We still have not allocated all of the sections to 5926 segments. Create a new segment here, initialise it 5927 and carry on looping. */ 5928 amt = sizeof (struct elf_segment_map); 5929 amt += ((bfd_size_type) section_count - 1) * sizeof (asection *); 5930 map = (struct elf_segment_map *) bfd_alloc (obfd, amt); 5931 if (map == NULL) 5932 { 5933 free (sections); 5934 return FALSE; 5935 } 5936 5937 /* Initialise the fields of the segment map. Set the physical 5938 physical address to the LMA of the first section that has 5939 not yet been assigned. */ 5940 map->next = NULL; 5941 map->p_type = segment->p_type; 5942 map->p_flags = segment->p_flags; 5943 map->p_flags_valid = 1; 5944 map->p_paddr = suggested_lma; 5945 map->p_paddr_valid = p_paddr_valid; 5946 map->includes_filehdr = 0; 5947 map->includes_phdrs = 0; 5948 } 5949 } 5950 while (isec < section_count); 5951 5952 free (sections); 5953 } 5954 5955 elf_tdata (obfd)->segment_map = map_first; 5956 5957 /* If we had to estimate the number of program headers that were 5958 going to be needed, then check our estimate now and adjust 5959 the offset if necessary. */ 5960 if (phdr_adjust_seg != NULL) 5961 { 5962 unsigned int count; 5963 5964 for (count = 0, map = map_first; map != NULL; map = map->next) 5965 count++; 5966 5967 if (count > phdr_adjust_num) 5968 phdr_adjust_seg->p_paddr 5969 -= (count - phdr_adjust_num) * iehdr->e_phentsize; 5970 } 5971 5972#undef SEGMENT_END 5973#undef SECTION_SIZE 5974#undef IS_CONTAINED_BY_VMA 5975#undef IS_CONTAINED_BY_LMA 5976#undef IS_NOTE 5977#undef IS_COREFILE_NOTE 5978#undef IS_SOLARIS_PT_INTERP 5979#undef IS_SECTION_IN_INPUT_SEGMENT 5980#undef INCLUDE_SECTION_IN_SEGMENT 5981#undef SEGMENT_AFTER_SEGMENT 5982#undef SEGMENT_OVERLAPS 5983 return TRUE; 5984} 5985 5986/* Copy ELF program header information. */ 5987 5988static bfd_boolean 5989copy_elf_program_header (bfd *ibfd, bfd *obfd) 5990{ 5991 Elf_Internal_Ehdr *iehdr; 5992 struct elf_segment_map *map; 5993 struct elf_segment_map *map_first; 5994 struct elf_segment_map **pointer_to_map; 5995 Elf_Internal_Phdr *segment; 5996 unsigned int i; 5997 unsigned int num_segments; 5998 bfd_boolean phdr_included = FALSE; 5999 bfd_boolean p_paddr_valid; 6000 6001 iehdr = elf_elfheader (ibfd); 6002 6003 map_first = NULL; 6004 pointer_to_map = &map_first; 6005 6006 /* If all the segment p_paddr fields are zero, don't set 6007 map->p_paddr_valid. */ 6008 p_paddr_valid = FALSE; 6009 num_segments = elf_elfheader (ibfd)->e_phnum; 6010 for (i = 0, segment = elf_tdata (ibfd)->phdr; 6011 i < num_segments; 6012 i++, segment++) 6013 if (segment->p_paddr != 0) 6014 { 6015 p_paddr_valid = TRUE; 6016 break; 6017 } 6018 6019 for (i = 0, segment = elf_tdata (ibfd)->phdr; 6020 i < num_segments; 6021 i++, segment++) 6022 { 6023 asection *section; 6024 unsigned int section_count; 6025 bfd_size_type amt; 6026 Elf_Internal_Shdr *this_hdr; 6027 asection *first_section = NULL; 6028 asection *lowest_section; 6029 6030 /* Compute how many sections are in this segment. */ 6031 for (section = ibfd->sections, section_count = 0; 6032 section != NULL; 6033 section = section->next) 6034 { 6035 this_hdr = &(elf_section_data(section)->this_hdr); 6036 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment)) 6037 { 6038 if (first_section == NULL) 6039 first_section = section; 6040 section_count++; 6041 } 6042 } 6043 6044 /* Allocate a segment map big enough to contain 6045 all of the sections we have selected. */ 6046 amt = sizeof (struct elf_segment_map); 6047 if (section_count != 0) 6048 amt += ((bfd_size_type) section_count - 1) * sizeof (asection *); 6049 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt); 6050 if (map == NULL) 6051 return FALSE; 6052 6053 /* Initialize the fields of the output segment map with the 6054 input segment. */ 6055 map->next = NULL; 6056 map->p_type = segment->p_type; 6057 map->p_flags = segment->p_flags; 6058 map->p_flags_valid = 1; 6059 map->p_paddr = segment->p_paddr; 6060 map->p_paddr_valid = p_paddr_valid; 6061 map->p_align = segment->p_align; 6062 map->p_align_valid = 1; 6063 map->p_vaddr_offset = 0; 6064 6065 if (map->p_type == PT_GNU_RELRO) 6066 { 6067 /* The PT_GNU_RELRO segment may contain the first a few 6068 bytes in the .got.plt section even if the whole .got.plt 6069 section isn't in the PT_GNU_RELRO segment. We won't 6070 change the size of the PT_GNU_RELRO segment. */ 6071 map->p_size = segment->p_memsz; 6072 map->p_size_valid = 1; 6073 } 6074 6075 /* Determine if this segment contains the ELF file header 6076 and if it contains the program headers themselves. */ 6077 map->includes_filehdr = (segment->p_offset == 0 6078 && segment->p_filesz >= iehdr->e_ehsize); 6079 6080 map->includes_phdrs = 0; 6081 if (! phdr_included || segment->p_type != PT_LOAD) 6082 { 6083 map->includes_phdrs = 6084 (segment->p_offset <= (bfd_vma) iehdr->e_phoff 6085 && (segment->p_offset + segment->p_filesz 6086 >= ((bfd_vma) iehdr->e_phoff 6087 + iehdr->e_phnum * iehdr->e_phentsize))); 6088 6089 if (segment->p_type == PT_LOAD && map->includes_phdrs) 6090 phdr_included = TRUE; 6091 } 6092 6093 lowest_section = first_section; 6094 if (section_count != 0) 6095 { 6096 unsigned int isec = 0; 6097 6098 for (section = first_section; 6099 section != NULL; 6100 section = section->next) 6101 { 6102 this_hdr = &(elf_section_data(section)->this_hdr); 6103 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment)) 6104 { 6105 map->sections[isec++] = section->output_section; 6106 if (section->lma < lowest_section->lma) 6107 lowest_section = section; 6108 if ((section->flags & SEC_ALLOC) != 0) 6109 { 6110 bfd_vma seg_off; 6111 6112 /* Section lmas are set up from PT_LOAD header 6113 p_paddr in _bfd_elf_make_section_from_shdr. 6114 If this header has a p_paddr that disagrees 6115 with the section lma, flag the p_paddr as 6116 invalid. */ 6117 if ((section->flags & SEC_LOAD) != 0) 6118 seg_off = this_hdr->sh_offset - segment->p_offset; 6119 else 6120 seg_off = this_hdr->sh_addr - segment->p_vaddr; 6121 if (section->lma - segment->p_paddr != seg_off) 6122 map->p_paddr_valid = FALSE; 6123 } 6124 if (isec == section_count) 6125 break; 6126 } 6127 } 6128 } 6129 6130 if (map->includes_filehdr && lowest_section != NULL) 6131 /* We need to keep the space used by the headers fixed. */ 6132 map->header_size = lowest_section->vma - segment->p_vaddr; 6133 6134 if (!map->includes_phdrs 6135 && !map->includes_filehdr 6136 && map->p_paddr_valid) 6137 /* There is some other padding before the first section. */ 6138 map->p_vaddr_offset = ((lowest_section ? lowest_section->lma : 0) 6139 - segment->p_paddr); 6140 6141 map->count = section_count; 6142 *pointer_to_map = map; 6143 pointer_to_map = &map->next; 6144 } 6145 6146 elf_tdata (obfd)->segment_map = map_first; 6147 return TRUE; 6148} 6149 6150/* Copy private BFD data. This copies or rewrites ELF program header 6151 information. */ 6152 6153static bfd_boolean 6154copy_private_bfd_data (bfd *ibfd, bfd *obfd) 6155{ 6156 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour 6157 || bfd_get_flavour (obfd) != bfd_target_elf_flavour) 6158 return TRUE; 6159 6160 if (elf_tdata (ibfd)->phdr == NULL) 6161 return TRUE; 6162 6163 if (ibfd->xvec == obfd->xvec) 6164 { 6165 /* Check to see if any sections in the input BFD 6166 covered by ELF program header have changed. */ 6167 Elf_Internal_Phdr *segment; 6168 asection *section, *osec; 6169 unsigned int i, num_segments; 6170 Elf_Internal_Shdr *this_hdr; 6171 const struct elf_backend_data *bed; 6172 6173 bed = get_elf_backend_data (ibfd); 6174 6175 /* Regenerate the segment map if p_paddr is set to 0. */ 6176 if (bed->want_p_paddr_set_to_zero) 6177 goto rewrite; 6178 6179 /* Initialize the segment mark field. */ 6180 for (section = obfd->sections; section != NULL; 6181 section = section->next) 6182 section->segment_mark = FALSE; 6183 6184 num_segments = elf_elfheader (ibfd)->e_phnum; 6185 for (i = 0, segment = elf_tdata (ibfd)->phdr; 6186 i < num_segments; 6187 i++, segment++) 6188 { 6189 /* PR binutils/3535. The Solaris linker always sets the p_paddr 6190 and p_memsz fields of special segments (DYNAMIC, INTERP) to 0 6191 which severly confuses things, so always regenerate the segment 6192 map in this case. */ 6193 if (segment->p_paddr == 0 6194 && segment->p_memsz == 0 6195 && (segment->p_type == PT_INTERP || segment->p_type == PT_DYNAMIC)) 6196 goto rewrite; 6197 6198 for (section = ibfd->sections; 6199 section != NULL; section = section->next) 6200 { 6201 /* We mark the output section so that we know it comes 6202 from the input BFD. */ 6203 osec = section->output_section; 6204 if (osec) 6205 osec->segment_mark = TRUE; 6206 6207 /* Check if this section is covered by the segment. */ 6208 this_hdr = &(elf_section_data(section)->this_hdr); 6209 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment)) 6210 { 6211 /* FIXME: Check if its output section is changed or 6212 removed. What else do we need to check? */ 6213 if (osec == NULL 6214 || section->flags != osec->flags 6215 || section->lma != osec->lma 6216 || section->vma != osec->vma 6217 || section->size != osec->size 6218 || section->rawsize != osec->rawsize 6219 || section->alignment_power != osec->alignment_power) 6220 goto rewrite; 6221 } 6222 } 6223 } 6224 6225 /* Check to see if any output section do not come from the 6226 input BFD. */ 6227 for (section = obfd->sections; section != NULL; 6228 section = section->next) 6229 { 6230 if (section->segment_mark == FALSE) 6231 goto rewrite; 6232 else 6233 section->segment_mark = FALSE; 6234 } 6235 6236 return copy_elf_program_header (ibfd, obfd); 6237 } 6238 6239rewrite: 6240 return rewrite_elf_program_header (ibfd, obfd); 6241} 6242 6243/* Initialize private output section information from input section. */ 6244 6245bfd_boolean 6246_bfd_elf_init_private_section_data (bfd *ibfd, 6247 asection *isec, 6248 bfd *obfd, 6249 asection *osec, 6250 struct bfd_link_info *link_info) 6251 6252{ 6253 Elf_Internal_Shdr *ihdr, *ohdr; 6254 bfd_boolean final_link = link_info != NULL && !link_info->relocatable; 6255 6256 if (ibfd->xvec->flavour != bfd_target_elf_flavour 6257 || obfd->xvec->flavour != bfd_target_elf_flavour) 6258 return TRUE; 6259 6260 /* For objcopy and relocatable link, don't copy the output ELF 6261 section type from input if the output BFD section flags have been 6262 set to something different. For a final link allow some flags 6263 that the linker clears to differ. */ 6264 if (elf_section_type (osec) == SHT_NULL 6265 && (osec->flags == isec->flags 6266 || (final_link 6267 && ((osec->flags ^ isec->flags) 6268 & ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC)) == 0))) 6269 elf_section_type (osec) = elf_section_type (isec); 6270 6271 /* FIXME: Is this correct for all OS/PROC specific flags? */ 6272 elf_section_flags (osec) |= (elf_section_flags (isec) 6273 & (SHF_MASKOS | SHF_MASKPROC)); 6274 6275 /* Set things up for objcopy and relocatable link. The output 6276 SHT_GROUP section will have its elf_next_in_group pointing back 6277 to the input group members. Ignore linker created group section. 6278 See elfNN_ia64_object_p in elfxx-ia64.c. */ 6279 if (!final_link) 6280 { 6281 if (elf_sec_group (isec) == NULL 6282 || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0) 6283 { 6284 if (elf_section_flags (isec) & SHF_GROUP) 6285 elf_section_flags (osec) |= SHF_GROUP; 6286 elf_next_in_group (osec) = elf_next_in_group (isec); 6287 elf_section_data (osec)->group = elf_section_data (isec)->group; 6288 } 6289 } 6290 6291 ihdr = &elf_section_data (isec)->this_hdr; 6292 6293 /* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We 6294 don't use the output section of the linked-to section since it 6295 may be NULL at this point. */ 6296 if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0) 6297 { 6298 ohdr = &elf_section_data (osec)->this_hdr; 6299 ohdr->sh_flags |= SHF_LINK_ORDER; 6300 elf_linked_to_section (osec) = elf_linked_to_section (isec); 6301 } 6302 6303 osec->use_rela_p = isec->use_rela_p; 6304 6305 return TRUE; 6306} 6307 6308/* Copy private section information. This copies over the entsize 6309 field, and sometimes the info field. */ 6310 6311bfd_boolean 6312_bfd_elf_copy_private_section_data (bfd *ibfd, 6313 asection *isec, 6314 bfd *obfd, 6315 asection *osec) 6316{ 6317 Elf_Internal_Shdr *ihdr, *ohdr; 6318 6319 if (ibfd->xvec->flavour != bfd_target_elf_flavour 6320 || obfd->xvec->flavour != bfd_target_elf_flavour) 6321 return TRUE; 6322 6323 ihdr = &elf_section_data (isec)->this_hdr; 6324 ohdr = &elf_section_data (osec)->this_hdr; 6325 6326 ohdr->sh_entsize = ihdr->sh_entsize; 6327 6328 if (ihdr->sh_type == SHT_SYMTAB 6329 || ihdr->sh_type == SHT_DYNSYM 6330 || ihdr->sh_type == SHT_GNU_verneed 6331 || ihdr->sh_type == SHT_GNU_verdef) 6332 ohdr->sh_info = ihdr->sh_info; 6333 6334 return _bfd_elf_init_private_section_data (ibfd, isec, obfd, osec, 6335 NULL); 6336} 6337 6338/* Look at all the SHT_GROUP sections in IBFD, making any adjustments 6339 necessary if we are removing either the SHT_GROUP section or any of 6340 the group member sections. DISCARDED is the value that a section's 6341 output_section has if the section will be discarded, NULL when this 6342 function is called from objcopy, bfd_abs_section_ptr when called 6343 from the linker. */ 6344 6345bfd_boolean 6346_bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded) 6347{ 6348 asection *isec; 6349 6350 for (isec = ibfd->sections; isec != NULL; isec = isec->next) 6351 if (elf_section_type (isec) == SHT_GROUP) 6352 { 6353 asection *first = elf_next_in_group (isec); 6354 asection *s = first; 6355 bfd_size_type removed = 0; 6356 6357 while (s != NULL) 6358 { 6359 /* If this member section is being output but the 6360 SHT_GROUP section is not, then clear the group info 6361 set up by _bfd_elf_copy_private_section_data. */ 6362 if (s->output_section != discarded 6363 && isec->output_section == discarded) 6364 { 6365 elf_section_flags (s->output_section) &= ~SHF_GROUP; 6366 elf_group_name (s->output_section) = NULL; 6367 } 6368 /* Conversely, if the member section is not being output 6369 but the SHT_GROUP section is, then adjust its size. */ 6370 else if (s->output_section == discarded 6371 && isec->output_section != discarded) 6372 removed += 4; 6373 s = elf_next_in_group (s); 6374 if (s == first) 6375 break; 6376 } 6377 if (removed != 0) 6378 { 6379 if (discarded != NULL) 6380 { 6381 /* If we've been called for ld -r, then we need to 6382 adjust the input section size. This function may 6383 be called multiple times, so save the original 6384 size. */ 6385 if (isec->rawsize == 0) 6386 isec->rawsize = isec->size; 6387 isec->size = isec->rawsize - removed; 6388 } 6389 else 6390 { 6391 /* Adjust the output section size when called from 6392 objcopy. */ 6393 isec->output_section->size -= removed; 6394 } 6395 } 6396 } 6397 6398 return TRUE; 6399} 6400 6401/* Copy private header information. */ 6402 6403bfd_boolean 6404_bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd) 6405{ 6406 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour 6407 || bfd_get_flavour (obfd) != bfd_target_elf_flavour) 6408 return TRUE; 6409 6410 /* Copy over private BFD data if it has not already been copied. 6411 This must be done here, rather than in the copy_private_bfd_data 6412 entry point, because the latter is called after the section 6413 contents have been set, which means that the program headers have 6414 already been worked out. */ 6415 if (elf_tdata (obfd)->segment_map == NULL && elf_tdata (ibfd)->phdr != NULL) 6416 { 6417 if (! copy_private_bfd_data (ibfd, obfd)) 6418 return FALSE; 6419 } 6420 6421 return _bfd_elf_fixup_group_sections (ibfd, NULL); 6422} 6423 6424/* Copy private symbol information. If this symbol is in a section 6425 which we did not map into a BFD section, try to map the section 6426 index correctly. We use special macro definitions for the mapped 6427 section indices; these definitions are interpreted by the 6428 swap_out_syms function. */ 6429 6430#define MAP_ONESYMTAB (SHN_HIOS + 1) 6431#define MAP_DYNSYMTAB (SHN_HIOS + 2) 6432#define MAP_STRTAB (SHN_HIOS + 3) 6433#define MAP_SHSTRTAB (SHN_HIOS + 4) 6434#define MAP_SYM_SHNDX (SHN_HIOS + 5) 6435 6436bfd_boolean 6437_bfd_elf_copy_private_symbol_data (bfd *ibfd, 6438 asymbol *isymarg, 6439 bfd *obfd, 6440 asymbol *osymarg) 6441{ 6442 elf_symbol_type *isym, *osym; 6443 6444 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour 6445 || bfd_get_flavour (obfd) != bfd_target_elf_flavour) 6446 return TRUE; 6447 6448 isym = elf_symbol_from (ibfd, isymarg); 6449 osym = elf_symbol_from (obfd, osymarg); 6450 6451 if (isym != NULL 6452 && isym->internal_elf_sym.st_shndx != 0 6453 && osym != NULL 6454 && bfd_is_abs_section (isym->symbol.section)) 6455 { 6456 unsigned int shndx; 6457 6458 shndx = isym->internal_elf_sym.st_shndx; 6459 if (shndx == elf_onesymtab (ibfd)) 6460 shndx = MAP_ONESYMTAB; 6461 else if (shndx == elf_dynsymtab (ibfd)) 6462 shndx = MAP_DYNSYMTAB; 6463 else if (shndx == elf_tdata (ibfd)->strtab_section) 6464 shndx = MAP_STRTAB; 6465 else if (shndx == elf_tdata (ibfd)->shstrtab_section) 6466 shndx = MAP_SHSTRTAB; 6467 else if (shndx == elf_tdata (ibfd)->symtab_shndx_section) 6468 shndx = MAP_SYM_SHNDX; 6469 osym->internal_elf_sym.st_shndx = shndx; 6470 } 6471 6472 return TRUE; 6473} 6474 6475/* Swap out the symbols. */ 6476 6477static bfd_boolean 6478swap_out_syms (bfd *abfd, 6479 struct bfd_strtab_hash **sttp, 6480 int relocatable_p) 6481{ 6482 const struct elf_backend_data *bed; 6483 int symcount; 6484 asymbol **syms; 6485 struct bfd_strtab_hash *stt; 6486 Elf_Internal_Shdr *symtab_hdr; 6487 Elf_Internal_Shdr *symtab_shndx_hdr; 6488 Elf_Internal_Shdr *symstrtab_hdr; 6489 bfd_byte *outbound_syms; 6490 bfd_byte *outbound_shndx; 6491 int idx; 6492 bfd_size_type amt; 6493 bfd_boolean name_local_sections; 6494 6495 if (!elf_map_symbols (abfd)) 6496 return FALSE; 6497 6498 /* Dump out the symtabs. */ 6499 stt = _bfd_elf_stringtab_init (); 6500 if (stt == NULL) 6501 return FALSE; 6502 6503 bed = get_elf_backend_data (abfd); 6504 symcount = bfd_get_symcount (abfd); 6505 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 6506 symtab_hdr->sh_type = SHT_SYMTAB; 6507 symtab_hdr->sh_entsize = bed->s->sizeof_sym; 6508 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1); 6509 symtab_hdr->sh_info = elf_num_locals (abfd) + 1; 6510 symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align; 6511 6512 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr; 6513 symstrtab_hdr->sh_type = SHT_STRTAB; 6514 6515 outbound_syms = (bfd_byte *) bfd_alloc2 (abfd, 1 + symcount, 6516 bed->s->sizeof_sym); 6517 if (outbound_syms == NULL) 6518 { 6519 _bfd_stringtab_free (stt); 6520 return FALSE; 6521 } 6522 symtab_hdr->contents = outbound_syms; 6523 6524 outbound_shndx = NULL; 6525 symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr; 6526 if (symtab_shndx_hdr->sh_name != 0) 6527 { 6528 amt = (bfd_size_type) (1 + symcount) * sizeof (Elf_External_Sym_Shndx); 6529 outbound_shndx = (bfd_byte *) 6530 bfd_zalloc2 (abfd, 1 + symcount, sizeof (Elf_External_Sym_Shndx)); 6531 if (outbound_shndx == NULL) 6532 { 6533 _bfd_stringtab_free (stt); 6534 return FALSE; 6535 } 6536 6537 symtab_shndx_hdr->contents = outbound_shndx; 6538 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX; 6539 symtab_shndx_hdr->sh_size = amt; 6540 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx); 6541 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx); 6542 } 6543 6544 /* Now generate the data (for "contents"). */ 6545 { 6546 /* Fill in zeroth symbol and swap it out. */ 6547 Elf_Internal_Sym sym; 6548 sym.st_name = 0; 6549 sym.st_value = 0; 6550 sym.st_size = 0; 6551 sym.st_info = 0; 6552 sym.st_other = 0; 6553 sym.st_shndx = SHN_UNDEF; 6554 bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx); 6555 outbound_syms += bed->s->sizeof_sym; 6556 if (outbound_shndx != NULL) 6557 outbound_shndx += sizeof (Elf_External_Sym_Shndx); 6558 } 6559 6560 name_local_sections 6561 = (bed->elf_backend_name_local_section_symbols 6562 && bed->elf_backend_name_local_section_symbols (abfd)); 6563 6564 syms = bfd_get_outsymbols (abfd); 6565 for (idx = 0; idx < symcount; idx++) 6566 { 6567 Elf_Internal_Sym sym; 6568 bfd_vma value = syms[idx]->value; 6569 elf_symbol_type *type_ptr; 6570 flagword flags = syms[idx]->flags; 6571 int type; 6572 6573 if (!name_local_sections 6574 && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM) 6575 { 6576 /* Local section symbols have no name. */ 6577 sym.st_name = 0; 6578 } 6579 else 6580 { 6581 sym.st_name = (unsigned long) _bfd_stringtab_add (stt, 6582 syms[idx]->name, 6583 TRUE, FALSE); 6584 if (sym.st_name == (unsigned long) -1) 6585 { 6586 _bfd_stringtab_free (stt); 6587 return FALSE; 6588 } 6589 } 6590 6591 type_ptr = elf_symbol_from (abfd, syms[idx]); 6592 6593 if ((flags & BSF_SECTION_SYM) == 0 6594 && bfd_is_com_section (syms[idx]->section)) 6595 { 6596 /* ELF common symbols put the alignment into the `value' field, 6597 and the size into the `size' field. This is backwards from 6598 how BFD handles it, so reverse it here. */ 6599 sym.st_size = value; 6600 if (type_ptr == NULL 6601 || type_ptr->internal_elf_sym.st_value == 0) 6602 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value)); 6603 else 6604 sym.st_value = type_ptr->internal_elf_sym.st_value; 6605 sym.st_shndx = _bfd_elf_section_from_bfd_section 6606 (abfd, syms[idx]->section); 6607 } 6608 else 6609 { 6610 asection *sec = syms[idx]->section; 6611 unsigned int shndx; 6612 6613 if (sec->output_section) 6614 { 6615 value += sec->output_offset; 6616 sec = sec->output_section; 6617 } 6618 6619 /* Don't add in the section vma for relocatable output. */ 6620 if (! relocatable_p) 6621 value += sec->vma; 6622 sym.st_value = value; 6623 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0; 6624 6625 if (bfd_is_abs_section (sec) 6626 && type_ptr != NULL 6627 && type_ptr->internal_elf_sym.st_shndx != 0) 6628 { 6629 /* This symbol is in a real ELF section which we did 6630 not create as a BFD section. Undo the mapping done 6631 by copy_private_symbol_data. */ 6632 shndx = type_ptr->internal_elf_sym.st_shndx; 6633 switch (shndx) 6634 { 6635 case MAP_ONESYMTAB: 6636 shndx = elf_onesymtab (abfd); 6637 break; 6638 case MAP_DYNSYMTAB: 6639 shndx = elf_dynsymtab (abfd); 6640 break; 6641 case MAP_STRTAB: 6642 shndx = elf_tdata (abfd)->strtab_section; 6643 break; 6644 case MAP_SHSTRTAB: 6645 shndx = elf_tdata (abfd)->shstrtab_section; 6646 break; 6647 case MAP_SYM_SHNDX: 6648 shndx = elf_tdata (abfd)->symtab_shndx_section; 6649 break; 6650 default: 6651 break; 6652 } 6653 } 6654 else 6655 { 6656 shndx = _bfd_elf_section_from_bfd_section (abfd, sec); 6657 6658 if (shndx == SHN_BAD) 6659 { 6660 asection *sec2; 6661 6662 /* Writing this would be a hell of a lot easier if 6663 we had some decent documentation on bfd, and 6664 knew what to expect of the library, and what to 6665 demand of applications. For example, it 6666 appears that `objcopy' might not set the 6667 section of a symbol to be a section that is 6668 actually in the output file. */ 6669 sec2 = bfd_get_section_by_name (abfd, sec->name); 6670 if (sec2 == NULL) 6671 { 6672 _bfd_error_handler (_("\ 6673Unable to find equivalent output section for symbol '%s' from section '%s'"), 6674 syms[idx]->name ? syms[idx]->name : "<Local sym>", 6675 sec->name); 6676 bfd_set_error (bfd_error_invalid_operation); 6677 _bfd_stringtab_free (stt); 6678 return FALSE; 6679 } 6680 6681 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2); 6682 BFD_ASSERT (shndx != SHN_BAD); 6683 } 6684 } 6685 6686 sym.st_shndx = shndx; 6687 } 6688 6689 if ((flags & BSF_THREAD_LOCAL) != 0) 6690 type = STT_TLS; 6691 else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0) 6692 type = STT_GNU_IFUNC; 6693 else if ((flags & BSF_FUNCTION) != 0) 6694 type = STT_FUNC; 6695 else if ((flags & BSF_OBJECT) != 0) 6696 type = STT_OBJECT; 6697 else if ((flags & BSF_RELC) != 0) 6698 type = STT_RELC; 6699 else if ((flags & BSF_SRELC) != 0) 6700 type = STT_SRELC; 6701 else 6702 type = STT_NOTYPE; 6703 6704 if (syms[idx]->section->flags & SEC_THREAD_LOCAL) 6705 type = STT_TLS; 6706 6707 /* Processor-specific types. */ 6708 if (type_ptr != NULL 6709 && bed->elf_backend_get_symbol_type) 6710 type = ((*bed->elf_backend_get_symbol_type) 6711 (&type_ptr->internal_elf_sym, type)); 6712 6713 if (flags & BSF_SECTION_SYM) 6714 { 6715 if (flags & BSF_GLOBAL) 6716 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION); 6717 else 6718 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION); 6719 } 6720 else if (bfd_is_com_section (syms[idx]->section)) 6721 { 6722#ifdef USE_STT_COMMON 6723 if (type == STT_OBJECT) 6724 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_COMMON); 6725 else 6726#endif 6727 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type); 6728 } 6729 else if (bfd_is_und_section (syms[idx]->section)) 6730 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK) 6731 ? STB_WEAK 6732 : STB_GLOBAL), 6733 type); 6734 else if (flags & BSF_FILE) 6735 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE); 6736 else 6737 { 6738 int bind = STB_LOCAL; 6739 6740 if (flags & BSF_LOCAL) 6741 bind = STB_LOCAL; 6742 else if (flags & BSF_GNU_UNIQUE) 6743 bind = STB_GNU_UNIQUE; 6744 else if (flags & BSF_WEAK) 6745 bind = STB_WEAK; 6746 else if (flags & BSF_GLOBAL) 6747 bind = STB_GLOBAL; 6748 6749 sym.st_info = ELF_ST_INFO (bind, type); 6750 } 6751 6752 if (type_ptr != NULL) 6753 sym.st_other = type_ptr->internal_elf_sym.st_other; 6754 else 6755 sym.st_other = 0; 6756 6757 bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx); 6758 outbound_syms += bed->s->sizeof_sym; 6759 if (outbound_shndx != NULL) 6760 outbound_shndx += sizeof (Elf_External_Sym_Shndx); 6761 } 6762 6763 *sttp = stt; 6764 symstrtab_hdr->sh_size = _bfd_stringtab_size (stt); 6765 symstrtab_hdr->sh_type = SHT_STRTAB; 6766 6767 symstrtab_hdr->sh_flags = 0; 6768 symstrtab_hdr->sh_addr = 0; 6769 symstrtab_hdr->sh_entsize = 0; 6770 symstrtab_hdr->sh_link = 0; 6771 symstrtab_hdr->sh_info = 0; 6772 symstrtab_hdr->sh_addralign = 1; 6773 6774 return TRUE; 6775} 6776 6777/* Return the number of bytes required to hold the symtab vector. 6778 6779 Note that we base it on the count plus 1, since we will null terminate 6780 the vector allocated based on this size. However, the ELF symbol table 6781 always has a dummy entry as symbol #0, so it ends up even. */ 6782 6783long 6784_bfd_elf_get_symtab_upper_bound (bfd *abfd) 6785{ 6786 long symcount; 6787 long symtab_size; 6788 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr; 6789 6790 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym; 6791 symtab_size = (symcount + 1) * (sizeof (asymbol *)); 6792 if (symcount > 0) 6793 symtab_size -= sizeof (asymbol *); 6794 6795 return symtab_size; 6796} 6797 6798long 6799_bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd) 6800{ 6801 long symcount; 6802 long symtab_size; 6803 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr; 6804 6805 if (elf_dynsymtab (abfd) == 0) 6806 { 6807 bfd_set_error (bfd_error_invalid_operation); 6808 return -1; 6809 } 6810 6811 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym; 6812 symtab_size = (symcount + 1) * (sizeof (asymbol *)); 6813 if (symcount > 0) 6814 symtab_size -= sizeof (asymbol *); 6815 6816 return symtab_size; 6817} 6818 6819long 6820_bfd_elf_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED, 6821 sec_ptr asect) 6822{ 6823 return (asect->reloc_count + 1) * sizeof (arelent *); 6824} 6825 6826/* Canonicalize the relocs. */ 6827 6828long 6829_bfd_elf_canonicalize_reloc (bfd *abfd, 6830 sec_ptr section, 6831 arelent **relptr, 6832 asymbol **symbols) 6833{ 6834 arelent *tblptr; 6835 unsigned int i; 6836 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 6837 6838 if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE)) 6839 return -1; 6840 6841 tblptr = section->relocation; 6842 for (i = 0; i < section->reloc_count; i++) 6843 *relptr++ = tblptr++; 6844 6845 *relptr = NULL; 6846 6847 return section->reloc_count; 6848} 6849 6850long 6851_bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation) 6852{ 6853 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 6854 long symcount = bed->s->slurp_symbol_table (abfd, allocation, FALSE); 6855 6856 if (symcount >= 0) 6857 bfd_get_symcount (abfd) = symcount; 6858 return symcount; 6859} 6860 6861long 6862_bfd_elf_canonicalize_dynamic_symtab (bfd *abfd, 6863 asymbol **allocation) 6864{ 6865 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 6866 long symcount = bed->s->slurp_symbol_table (abfd, allocation, TRUE); 6867 6868 if (symcount >= 0) 6869 bfd_get_dynamic_symcount (abfd) = symcount; 6870 return symcount; 6871} 6872 6873/* Return the size required for the dynamic reloc entries. Any loadable 6874 section that was actually installed in the BFD, and has type SHT_REL 6875 or SHT_RELA, and uses the dynamic symbol table, is considered to be a 6876 dynamic reloc section. */ 6877 6878long 6879_bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd) 6880{ 6881 long ret; 6882 asection *s; 6883 6884 if (elf_dynsymtab (abfd) == 0) 6885 { 6886 bfd_set_error (bfd_error_invalid_operation); 6887 return -1; 6888 } 6889 6890 ret = sizeof (arelent *); 6891 for (s = abfd->sections; s != NULL; s = s->next) 6892 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd) 6893 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL 6894 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)) 6895 ret += ((s->size / elf_section_data (s)->this_hdr.sh_entsize) 6896 * sizeof (arelent *)); 6897 6898 return ret; 6899} 6900 6901/* Canonicalize the dynamic relocation entries. Note that we return the 6902 dynamic relocations as a single block, although they are actually 6903 associated with particular sections; the interface, which was 6904 designed for SunOS style shared libraries, expects that there is only 6905 one set of dynamic relocs. Any loadable section that was actually 6906 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the 6907 dynamic symbol table, is considered to be a dynamic reloc section. */ 6908 6909long 6910_bfd_elf_canonicalize_dynamic_reloc (bfd *abfd, 6911 arelent **storage, 6912 asymbol **syms) 6913{ 6914 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean); 6915 asection *s; 6916 long ret; 6917 6918 if (elf_dynsymtab (abfd) == 0) 6919 { 6920 bfd_set_error (bfd_error_invalid_operation); 6921 return -1; 6922 } 6923 6924 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table; 6925 ret = 0; 6926 for (s = abfd->sections; s != NULL; s = s->next) 6927 { 6928 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd) 6929 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL 6930 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)) 6931 { 6932 arelent *p; 6933 long count, i; 6934 6935 if (! (*slurp_relocs) (abfd, s, syms, TRUE)) 6936 return -1; 6937 count = s->size / elf_section_data (s)->this_hdr.sh_entsize; 6938 p = s->relocation; 6939 for (i = 0; i < count; i++) 6940 *storage++ = p++; 6941 ret += count; 6942 } 6943 } 6944 6945 *storage = NULL; 6946 6947 return ret; 6948} 6949 6950/* Read in the version information. */ 6951 6952bfd_boolean 6953_bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver) 6954{ 6955 bfd_byte *contents = NULL; 6956 unsigned int freeidx = 0; 6957 6958 if (elf_dynverref (abfd) != 0) 6959 { 6960 Elf_Internal_Shdr *hdr; 6961 Elf_External_Verneed *everneed; 6962 Elf_Internal_Verneed *iverneed; 6963 unsigned int i; 6964 bfd_byte *contents_end; 6965 6966 hdr = &elf_tdata (abfd)->dynverref_hdr; 6967 6968 elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) 6969 bfd_zalloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed)); 6970 if (elf_tdata (abfd)->verref == NULL) 6971 goto error_return; 6972 6973 elf_tdata (abfd)->cverrefs = hdr->sh_info; 6974 6975 contents = (bfd_byte *) bfd_malloc (hdr->sh_size); 6976 if (contents == NULL) 6977 { 6978error_return_verref: 6979 elf_tdata (abfd)->verref = NULL; 6980 elf_tdata (abfd)->cverrefs = 0; 6981 goto error_return; 6982 } 6983 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0 6984 || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size) 6985 goto error_return_verref; 6986 6987 if (hdr->sh_info && hdr->sh_size < sizeof (Elf_External_Verneed)) 6988 goto error_return_verref; 6989 6990 BFD_ASSERT (sizeof (Elf_External_Verneed) 6991 == sizeof (Elf_External_Vernaux)); 6992 contents_end = contents + hdr->sh_size - sizeof (Elf_External_Verneed); 6993 everneed = (Elf_External_Verneed *) contents; 6994 iverneed = elf_tdata (abfd)->verref; 6995 for (i = 0; i < hdr->sh_info; i++, iverneed++) 6996 { 6997 Elf_External_Vernaux *evernaux; 6998 Elf_Internal_Vernaux *ivernaux; 6999 unsigned int j; 7000 7001 _bfd_elf_swap_verneed_in (abfd, everneed, iverneed); 7002 7003 iverneed->vn_bfd = abfd; 7004 7005 iverneed->vn_filename = 7006 bfd_elf_string_from_elf_section (abfd, hdr->sh_link, 7007 iverneed->vn_file); 7008 if (iverneed->vn_filename == NULL) 7009 goto error_return_verref; 7010 7011 if (iverneed->vn_cnt == 0) 7012 iverneed->vn_auxptr = NULL; 7013 else 7014 { 7015 iverneed->vn_auxptr = (struct elf_internal_vernaux *) 7016 bfd_alloc2 (abfd, iverneed->vn_cnt, 7017 sizeof (Elf_Internal_Vernaux)); 7018 if (iverneed->vn_auxptr == NULL) 7019 goto error_return_verref; 7020 } 7021 7022 if (iverneed->vn_aux 7023 > (size_t) (contents_end - (bfd_byte *) everneed)) 7024 goto error_return_verref; 7025 7026 evernaux = ((Elf_External_Vernaux *) 7027 ((bfd_byte *) everneed + iverneed->vn_aux)); 7028 ivernaux = iverneed->vn_auxptr; 7029 for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++) 7030 { 7031 _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux); 7032 7033 ivernaux->vna_nodename = 7034 bfd_elf_string_from_elf_section (abfd, hdr->sh_link, 7035 ivernaux->vna_name); 7036 if (ivernaux->vna_nodename == NULL) 7037 goto error_return_verref; 7038 7039 if (j + 1 < iverneed->vn_cnt) 7040 ivernaux->vna_nextptr = ivernaux + 1; 7041 else 7042 ivernaux->vna_nextptr = NULL; 7043 7044 if (ivernaux->vna_next 7045 > (size_t) (contents_end - (bfd_byte *) evernaux)) 7046 goto error_return_verref; 7047 7048 evernaux = ((Elf_External_Vernaux *) 7049 ((bfd_byte *) evernaux + ivernaux->vna_next)); 7050 7051 if (ivernaux->vna_other > freeidx) 7052 freeidx = ivernaux->vna_other; 7053 } 7054 7055 if (i + 1 < hdr->sh_info) 7056 iverneed->vn_nextref = iverneed + 1; 7057 else 7058 iverneed->vn_nextref = NULL; 7059 7060 if (iverneed->vn_next 7061 > (size_t) (contents_end - (bfd_byte *) everneed)) 7062 goto error_return_verref; 7063 7064 everneed = ((Elf_External_Verneed *) 7065 ((bfd_byte *) everneed + iverneed->vn_next)); 7066 } 7067 7068 free (contents); 7069 contents = NULL; 7070 } 7071 7072 if (elf_dynverdef (abfd) != 0) 7073 { 7074 Elf_Internal_Shdr *hdr; 7075 Elf_External_Verdef *everdef; 7076 Elf_Internal_Verdef *iverdef; 7077 Elf_Internal_Verdef *iverdefarr; 7078 Elf_Internal_Verdef iverdefmem; 7079 unsigned int i; 7080 unsigned int maxidx; 7081 bfd_byte *contents_end_def, *contents_end_aux; 7082 7083 hdr = &elf_tdata (abfd)->dynverdef_hdr; 7084 7085 contents = (bfd_byte *) bfd_malloc (hdr->sh_size); 7086 if (contents == NULL) 7087 goto error_return; 7088 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0 7089 || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size) 7090 goto error_return; 7091 7092 if (hdr->sh_info && hdr->sh_size < sizeof (Elf_External_Verdef)) 7093 goto error_return; 7094 7095 BFD_ASSERT (sizeof (Elf_External_Verdef) 7096 >= sizeof (Elf_External_Verdaux)); 7097 contents_end_def = contents + hdr->sh_size 7098 - sizeof (Elf_External_Verdef); 7099 contents_end_aux = contents + hdr->sh_size 7100 - sizeof (Elf_External_Verdaux); 7101 7102 /* We know the number of entries in the section but not the maximum 7103 index. Therefore we have to run through all entries and find 7104 the maximum. */ 7105 everdef = (Elf_External_Verdef *) contents; 7106 maxidx = 0; 7107 for (i = 0; i < hdr->sh_info; ++i) 7108 { 7109 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem); 7110 7111 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx) 7112 maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION); 7113 7114 if (iverdefmem.vd_next 7115 > (size_t) (contents_end_def - (bfd_byte *) everdef)) 7116 goto error_return; 7117 7118 everdef = ((Elf_External_Verdef *) 7119 ((bfd_byte *) everdef + iverdefmem.vd_next)); 7120 } 7121 7122 if (default_imported_symver) 7123 { 7124 if (freeidx > maxidx) 7125 maxidx = ++freeidx; 7126 else 7127 freeidx = ++maxidx; 7128 } 7129 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) 7130 bfd_zalloc2 (abfd, maxidx, sizeof (Elf_Internal_Verdef)); 7131 if (elf_tdata (abfd)->verdef == NULL) 7132 goto error_return; 7133 7134 elf_tdata (abfd)->cverdefs = maxidx; 7135 7136 everdef = (Elf_External_Verdef *) contents; 7137 iverdefarr = elf_tdata (abfd)->verdef; 7138 for (i = 0; i < hdr->sh_info; i++) 7139 { 7140 Elf_External_Verdaux *everdaux; 7141 Elf_Internal_Verdaux *iverdaux; 7142 unsigned int j; 7143 7144 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem); 7145 7146 if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0) 7147 { 7148error_return_verdef: 7149 elf_tdata (abfd)->verdef = NULL; 7150 elf_tdata (abfd)->cverdefs = 0; 7151 goto error_return; 7152 } 7153 7154 iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1]; 7155 memcpy (iverdef, &iverdefmem, sizeof (Elf_Internal_Verdef)); 7156 7157 iverdef->vd_bfd = abfd; 7158 7159 if (iverdef->vd_cnt == 0) 7160 iverdef->vd_auxptr = NULL; 7161 else 7162 { 7163 iverdef->vd_auxptr = (struct elf_internal_verdaux *) 7164 bfd_alloc2 (abfd, iverdef->vd_cnt, 7165 sizeof (Elf_Internal_Verdaux)); 7166 if (iverdef->vd_auxptr == NULL) 7167 goto error_return_verdef; 7168 } 7169 7170 if (iverdef->vd_aux 7171 > (size_t) (contents_end_aux - (bfd_byte *) everdef)) 7172 goto error_return_verdef; 7173 7174 everdaux = ((Elf_External_Verdaux *) 7175 ((bfd_byte *) everdef + iverdef->vd_aux)); 7176 iverdaux = iverdef->vd_auxptr; 7177 for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++) 7178 { 7179 _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux); 7180 7181 iverdaux->vda_nodename = 7182 bfd_elf_string_from_elf_section (abfd, hdr->sh_link, 7183 iverdaux->vda_name); 7184 if (iverdaux->vda_nodename == NULL) 7185 goto error_return_verdef; 7186 7187 if (j + 1 < iverdef->vd_cnt) 7188 iverdaux->vda_nextptr = iverdaux + 1; 7189 else 7190 iverdaux->vda_nextptr = NULL; 7191 7192 if (iverdaux->vda_next 7193 > (size_t) (contents_end_aux - (bfd_byte *) everdaux)) 7194 goto error_return_verdef; 7195 7196 everdaux = ((Elf_External_Verdaux *) 7197 ((bfd_byte *) everdaux + iverdaux->vda_next)); 7198 } 7199 7200 if (iverdef->vd_cnt) 7201 iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename; 7202 7203 if ((size_t) (iverdef - iverdefarr) + 1 < maxidx) 7204 iverdef->vd_nextdef = iverdef + 1; 7205 else 7206 iverdef->vd_nextdef = NULL; 7207 7208 everdef = ((Elf_External_Verdef *) 7209 ((bfd_byte *) everdef + iverdef->vd_next)); 7210 } 7211 7212 free (contents); 7213 contents = NULL; 7214 } 7215 else if (default_imported_symver) 7216 { 7217 if (freeidx < 3) 7218 freeidx = 3; 7219 else 7220 freeidx++; 7221 7222 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) 7223 bfd_zalloc2 (abfd, freeidx, sizeof (Elf_Internal_Verdef)); 7224 if (elf_tdata (abfd)->verdef == NULL) 7225 goto error_return; 7226 7227 elf_tdata (abfd)->cverdefs = freeidx; 7228 } 7229 7230 /* Create a default version based on the soname. */ 7231 if (default_imported_symver) 7232 { 7233 Elf_Internal_Verdef *iverdef; 7234 Elf_Internal_Verdaux *iverdaux; 7235 7236 iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];; 7237 7238 iverdef->vd_version = VER_DEF_CURRENT; 7239 iverdef->vd_flags = 0; 7240 iverdef->vd_ndx = freeidx; 7241 iverdef->vd_cnt = 1; 7242 7243 iverdef->vd_bfd = abfd; 7244 7245 iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd); 7246 if (iverdef->vd_nodename == NULL) 7247 goto error_return_verdef; 7248 iverdef->vd_nextdef = NULL; 7249 iverdef->vd_auxptr = (struct elf_internal_verdaux *) 7250 bfd_alloc (abfd, sizeof (Elf_Internal_Verdaux)); 7251 if (iverdef->vd_auxptr == NULL) 7252 goto error_return_verdef; 7253 7254 iverdaux = iverdef->vd_auxptr; 7255 iverdaux->vda_nodename = iverdef->vd_nodename; 7256 iverdaux->vda_nextptr = NULL; 7257 } 7258 7259 return TRUE; 7260 7261 error_return: 7262 if (contents != NULL) 7263 free (contents); 7264 return FALSE; 7265} 7266 7267asymbol * 7268_bfd_elf_make_empty_symbol (bfd *abfd) 7269{ 7270 elf_symbol_type *newsym; 7271 bfd_size_type amt = sizeof (elf_symbol_type); 7272 7273 newsym = (elf_symbol_type *) bfd_zalloc (abfd, amt); 7274 if (!newsym) 7275 return NULL; 7276 else 7277 { 7278 newsym->symbol.the_bfd = abfd; 7279 return &newsym->symbol; 7280 } 7281} 7282 7283void 7284_bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED, 7285 asymbol *symbol, 7286 symbol_info *ret) 7287{ 7288 bfd_symbol_info (symbol, ret); 7289} 7290 7291/* Return whether a symbol name implies a local symbol. Most targets 7292 use this function for the is_local_label_name entry point, but some 7293 override it. */ 7294 7295bfd_boolean 7296_bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, 7297 const char *name) 7298{ 7299 /* Normal local symbols start with ``.L''. */ 7300 if (name[0] == '.' && name[1] == 'L') 7301 return TRUE; 7302 7303 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate 7304 DWARF debugging symbols starting with ``..''. */ 7305 if (name[0] == '.' && name[1] == '.') 7306 return TRUE; 7307 7308 /* gcc will sometimes generate symbols beginning with ``_.L_'' when 7309 emitting DWARF debugging output. I suspect this is actually a 7310 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call 7311 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading 7312 underscore to be emitted on some ELF targets). For ease of use, 7313 we treat such symbols as local. */ 7314 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_') 7315 return TRUE; 7316 7317 return FALSE; 7318} 7319 7320alent * 7321_bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED, 7322 asymbol *symbol ATTRIBUTE_UNUSED) 7323{ 7324 abort (); 7325 return NULL; 7326} 7327 7328bfd_boolean 7329_bfd_elf_set_arch_mach (bfd *abfd, 7330 enum bfd_architecture arch, 7331 unsigned long machine) 7332{ 7333 /* If this isn't the right architecture for this backend, and this 7334 isn't the generic backend, fail. */ 7335 if (arch != get_elf_backend_data (abfd)->arch 7336 && arch != bfd_arch_unknown 7337 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown) 7338 return FALSE; 7339 7340 return bfd_default_set_arch_mach (abfd, arch, machine); 7341} 7342 7343/* Find the function to a particular section and offset, 7344 for error reporting. */ 7345 7346static bfd_boolean 7347elf_find_function (bfd *abfd, 7348 asection *section, 7349 asymbol **symbols, 7350 bfd_vma offset, 7351 const char **filename_ptr, 7352 const char **functionname_ptr) 7353{ 7354 const char *filename; 7355 asymbol *func, *file; 7356 bfd_vma low_func; 7357 asymbol **p; 7358 /* ??? Given multiple file symbols, it is impossible to reliably 7359 choose the right file name for global symbols. File symbols are 7360 local symbols, and thus all file symbols must sort before any 7361 global symbols. The ELF spec may be interpreted to say that a 7362 file symbol must sort before other local symbols, but currently 7363 ld -r doesn't do this. So, for ld -r output, it is possible to 7364 make a better choice of file name for local symbols by ignoring 7365 file symbols appearing after a given local symbol. */ 7366 enum { nothing_seen, symbol_seen, file_after_symbol_seen } state; 7367 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 7368 7369 filename = NULL; 7370 func = NULL; 7371 file = NULL; 7372 low_func = 0; 7373 state = nothing_seen; 7374 7375 for (p = symbols; *p != NULL; p++) 7376 { 7377 elf_symbol_type *q; 7378 unsigned int type; 7379 7380 q = (elf_symbol_type *) *p; 7381 7382 type = ELF_ST_TYPE (q->internal_elf_sym.st_info); 7383 switch (type) 7384 { 7385 case STT_FILE: 7386 file = &q->symbol; 7387 if (state == symbol_seen) 7388 state = file_after_symbol_seen; 7389 continue; 7390 default: 7391 if (!bed->is_function_type (type)) 7392 break; 7393 case STT_NOTYPE: 7394 if (bfd_get_section (&q->symbol) == section 7395 && q->symbol.value >= low_func 7396 && q->symbol.value <= offset) 7397 { 7398 func = (asymbol *) q; 7399 low_func = q->symbol.value; 7400 filename = NULL; 7401 if (file != NULL 7402 && (ELF_ST_BIND (q->internal_elf_sym.st_info) == STB_LOCAL 7403 || state != file_after_symbol_seen)) 7404 filename = bfd_asymbol_name (file); 7405 } 7406 break; 7407 } 7408 if (state == nothing_seen) 7409 state = symbol_seen; 7410 } 7411 7412 if (func == NULL) 7413 return FALSE; 7414 7415 if (filename_ptr) 7416 *filename_ptr = filename; 7417 if (functionname_ptr) 7418 *functionname_ptr = bfd_asymbol_name (func); 7419 7420 return TRUE; 7421} 7422 7423/* Find the nearest line to a particular section and offset, 7424 for error reporting. */ 7425 7426bfd_boolean 7427_bfd_elf_find_nearest_line (bfd *abfd, 7428 asection *section, 7429 asymbol **symbols, 7430 bfd_vma offset, 7431 const char **filename_ptr, 7432 const char **functionname_ptr, 7433 unsigned int *line_ptr) 7434{ 7435 bfd_boolean found; 7436 7437 if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset, 7438 filename_ptr, functionname_ptr, 7439 line_ptr)) 7440 { 7441 if (!*functionname_ptr) 7442 elf_find_function (abfd, section, symbols, offset, 7443 *filename_ptr ? NULL : filename_ptr, 7444 functionname_ptr); 7445 7446 return TRUE; 7447 } 7448 7449 if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset, 7450 filename_ptr, functionname_ptr, 7451 line_ptr, 0, 7452 &elf_tdata (abfd)->dwarf2_find_line_info)) 7453 { 7454 if (!*functionname_ptr) 7455 elf_find_function (abfd, section, symbols, offset, 7456 *filename_ptr ? NULL : filename_ptr, 7457 functionname_ptr); 7458 7459 return TRUE; 7460 } 7461 7462 if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset, 7463 &found, filename_ptr, 7464 functionname_ptr, line_ptr, 7465 &elf_tdata (abfd)->line_info)) 7466 return FALSE; 7467 if (found && (*functionname_ptr || *line_ptr)) 7468 return TRUE; 7469 7470 if (symbols == NULL) 7471 return FALSE; 7472 7473 if (! elf_find_function (abfd, section, symbols, offset, 7474 filename_ptr, functionname_ptr)) 7475 return FALSE; 7476 7477 *line_ptr = 0; 7478 return TRUE; 7479} 7480 7481/* Find the line for a symbol. */ 7482 7483bfd_boolean 7484_bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol, 7485 const char **filename_ptr, unsigned int *line_ptr) 7486{ 7487 return _bfd_dwarf2_find_line (abfd, symbols, symbol, 7488 filename_ptr, line_ptr, 0, 7489 &elf_tdata (abfd)->dwarf2_find_line_info); 7490} 7491 7492/* After a call to bfd_find_nearest_line, successive calls to 7493 bfd_find_inliner_info can be used to get source information about 7494 each level of function inlining that terminated at the address 7495 passed to bfd_find_nearest_line. Currently this is only supported 7496 for DWARF2 with appropriate DWARF3 extensions. */ 7497 7498bfd_boolean 7499_bfd_elf_find_inliner_info (bfd *abfd, 7500 const char **filename_ptr, 7501 const char **functionname_ptr, 7502 unsigned int *line_ptr) 7503{ 7504 bfd_boolean found; 7505 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr, 7506 functionname_ptr, line_ptr, 7507 & elf_tdata (abfd)->dwarf2_find_line_info); 7508 return found; 7509} 7510 7511int 7512_bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info) 7513{ 7514 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 7515 int ret = bed->s->sizeof_ehdr; 7516 7517 if (!info->relocatable) 7518 { 7519 bfd_size_type phdr_size = elf_tdata (abfd)->program_header_size; 7520 7521 if (phdr_size == (bfd_size_type) -1) 7522 { 7523 struct elf_segment_map *m; 7524 7525 phdr_size = 0; 7526 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next) 7527 phdr_size += bed->s->sizeof_phdr; 7528 7529 if (phdr_size == 0) 7530 phdr_size = get_program_header_size (abfd, info); 7531 } 7532 7533 elf_tdata (abfd)->program_header_size = phdr_size; 7534 ret += phdr_size; 7535 } 7536 7537 return ret; 7538} 7539 7540bfd_boolean 7541_bfd_elf_set_section_contents (bfd *abfd, 7542 sec_ptr section, 7543 const void *location, 7544 file_ptr offset, 7545 bfd_size_type count) 7546{ 7547 Elf_Internal_Shdr *hdr; 7548 bfd_signed_vma pos; 7549 7550 if (! abfd->output_has_begun 7551 && ! _bfd_elf_compute_section_file_positions (abfd, NULL)) 7552 return FALSE; 7553 7554 hdr = &elf_section_data (section)->this_hdr; 7555 pos = hdr->sh_offset + offset; 7556 if (bfd_seek (abfd, pos, SEEK_SET) != 0 7557 || bfd_bwrite (location, count, abfd) != count) 7558 return FALSE; 7559 7560 return TRUE; 7561} 7562 7563void 7564_bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, 7565 arelent *cache_ptr ATTRIBUTE_UNUSED, 7566 Elf_Internal_Rela *dst ATTRIBUTE_UNUSED) 7567{ 7568 abort (); 7569} 7570 7571/* Try to convert a non-ELF reloc into an ELF one. */ 7572 7573bfd_boolean 7574_bfd_elf_validate_reloc (bfd *abfd, arelent *areloc) 7575{ 7576 /* Check whether we really have an ELF howto. */ 7577 7578 if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec) 7579 { 7580 bfd_reloc_code_real_type code; 7581 reloc_howto_type *howto; 7582 7583 /* Alien reloc: Try to determine its type to replace it with an 7584 equivalent ELF reloc. */ 7585 7586 if (areloc->howto->pc_relative) 7587 { 7588 switch (areloc->howto->bitsize) 7589 { 7590 case 8: 7591 code = BFD_RELOC_8_PCREL; 7592 break; 7593 case 12: 7594 code = BFD_RELOC_12_PCREL; 7595 break; 7596 case 16: 7597 code = BFD_RELOC_16_PCREL; 7598 break; 7599 case 24: 7600 code = BFD_RELOC_24_PCREL; 7601 break; 7602 case 32: 7603 code = BFD_RELOC_32_PCREL; 7604 break; 7605 case 64: 7606 code = BFD_RELOC_64_PCREL; 7607 break; 7608 default: 7609 goto fail; 7610 } 7611 7612 howto = bfd_reloc_type_lookup (abfd, code); 7613 7614 if (areloc->howto->pcrel_offset != howto->pcrel_offset) 7615 { 7616 if (howto->pcrel_offset) 7617 areloc->addend += areloc->address; 7618 else 7619 areloc->addend -= areloc->address; /* addend is unsigned!! */ 7620 } 7621 } 7622 else 7623 { 7624 switch (areloc->howto->bitsize) 7625 { 7626 case 8: 7627 code = BFD_RELOC_8; 7628 break; 7629 case 14: 7630 code = BFD_RELOC_14; 7631 break; 7632 case 16: 7633 code = BFD_RELOC_16; 7634 break; 7635 case 26: 7636 code = BFD_RELOC_26; 7637 break; 7638 case 32: 7639 code = BFD_RELOC_32; 7640 break; 7641 case 64: 7642 code = BFD_RELOC_64; 7643 break; 7644 default: 7645 goto fail; 7646 } 7647 7648 howto = bfd_reloc_type_lookup (abfd, code); 7649 } 7650 7651 if (howto) 7652 areloc->howto = howto; 7653 else 7654 goto fail; 7655 } 7656 7657 return TRUE; 7658 7659 fail: 7660 (*_bfd_error_handler) 7661 (_("%B: unsupported relocation type %s"), 7662 abfd, areloc->howto->name); 7663 bfd_set_error (bfd_error_bad_value); 7664 return FALSE; 7665} 7666 7667bfd_boolean 7668_bfd_elf_close_and_cleanup (bfd *abfd) 7669{ 7670 if (bfd_get_format (abfd) == bfd_object) 7671 { 7672 if (elf_tdata (abfd) != NULL && elf_shstrtab (abfd) != NULL) 7673 _bfd_elf_strtab_free (elf_shstrtab (abfd)); 7674 _bfd_dwarf2_cleanup_debug_info (abfd); 7675 } 7676 7677 return _bfd_generic_close_and_cleanup (abfd); 7678} 7679 7680/* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY 7681 in the relocation's offset. Thus we cannot allow any sort of sanity 7682 range-checking to interfere. There is nothing else to do in processing 7683 this reloc. */ 7684 7685bfd_reloc_status_type 7686_bfd_elf_rel_vtable_reloc_fn 7687 (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED, 7688 struct bfd_symbol *symbol ATTRIBUTE_UNUSED, 7689 void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED, 7690 bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED) 7691{ 7692 return bfd_reloc_ok; 7693} 7694 7695/* Elf core file support. Much of this only works on native 7696 toolchains, since we rely on knowing the 7697 machine-dependent procfs structure in order to pick 7698 out details about the corefile. */ 7699 7700#ifdef HAVE_SYS_PROCFS_H 7701/* Needed for new procfs interface on sparc-solaris. */ 7702# define _STRUCTURED_PROC 1 7703# include <sys/procfs.h> 7704#endif 7705 7706/* Return a PID that identifies a "thread" for threaded cores, or the 7707 PID of the main process for non-threaded cores. */ 7708 7709static int 7710elfcore_make_pid (bfd *abfd) 7711{ 7712 int pid; 7713 7714 pid = elf_tdata (abfd)->core_lwpid; 7715 if (pid == 0) 7716 pid = elf_tdata (abfd)->core_pid; 7717 7718 return pid; 7719} 7720 7721/* If there isn't a section called NAME, make one, using 7722 data from SECT. Note, this function will generate a 7723 reference to NAME, so you shouldn't deallocate or 7724 overwrite it. */ 7725 7726static bfd_boolean 7727elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect) 7728{ 7729 asection *sect2; 7730 7731 if (bfd_get_section_by_name (abfd, name) != NULL) 7732 return TRUE; 7733 7734 sect2 = bfd_make_section_with_flags (abfd, name, sect->flags); 7735 if (sect2 == NULL) 7736 return FALSE; 7737 7738 sect2->size = sect->size; 7739 sect2->filepos = sect->filepos; 7740 sect2->alignment_power = sect->alignment_power; 7741 return TRUE; 7742} 7743 7744/* Create a pseudosection containing SIZE bytes at FILEPOS. This 7745 actually creates up to two pseudosections: 7746 - For the single-threaded case, a section named NAME, unless 7747 such a section already exists. 7748 - For the multi-threaded case, a section named "NAME/PID", where 7749 PID is elfcore_make_pid (abfd). 7750 Both pseudosections have identical contents. */ 7751bfd_boolean 7752_bfd_elfcore_make_pseudosection (bfd *abfd, 7753 char *name, 7754 size_t size, 7755 ufile_ptr filepos) 7756{ 7757 char buf[100]; 7758 char *threaded_name; 7759 size_t len; 7760 asection *sect; 7761 7762 /* Build the section name. */ 7763 7764 sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd)); 7765 len = strlen (buf) + 1; 7766 threaded_name = (char *) bfd_alloc (abfd, len); 7767 if (threaded_name == NULL) 7768 return FALSE; 7769 memcpy (threaded_name, buf, len); 7770 7771 sect = bfd_make_section_anyway_with_flags (abfd, threaded_name, 7772 SEC_HAS_CONTENTS); 7773 if (sect == NULL) 7774 return FALSE; 7775 sect->size = size; 7776 sect->filepos = filepos; 7777 sect->alignment_power = 2; 7778 7779 return elfcore_maybe_make_sect (abfd, name, sect); 7780} 7781 7782/* prstatus_t exists on: 7783 solaris 2.5+ 7784 linux 2.[01] + glibc 7785 unixware 4.2 7786*/ 7787 7788#if defined (HAVE_PRSTATUS_T) 7789 7790static bfd_boolean 7791elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) 7792{ 7793 size_t size; 7794 int offset; 7795 7796 if (note->descsz == sizeof (prstatus_t)) 7797 { 7798 prstatus_t prstat; 7799 7800 size = sizeof (prstat.pr_reg); 7801 offset = offsetof (prstatus_t, pr_reg); 7802 memcpy (&prstat, note->descdata, sizeof (prstat)); 7803 7804 /* Do not overwrite the core signal if it 7805 has already been set by another thread. */ 7806 if (elf_tdata (abfd)->core_signal == 0) 7807 elf_tdata (abfd)->core_signal = prstat.pr_cursig; 7808 if (elf_tdata (abfd)->core_pid == 0) 7809 elf_tdata (abfd)->core_pid = prstat.pr_pid; 7810 7811 /* pr_who exists on: 7812 solaris 2.5+ 7813 unixware 4.2 7814 pr_who doesn't exist on: 7815 linux 2.[01] 7816 */ 7817#if defined (HAVE_PRSTATUS_T_PR_WHO) 7818 elf_tdata (abfd)->core_lwpid = prstat.pr_who; 7819#else 7820 elf_tdata (abfd)->core_lwpid = prstat.pr_pid; 7821#endif 7822 } 7823#if defined (HAVE_PRSTATUS32_T) 7824 else if (note->descsz == sizeof (prstatus32_t)) 7825 { 7826 /* 64-bit host, 32-bit corefile */ 7827 prstatus32_t prstat; 7828 7829 size = sizeof (prstat.pr_reg); 7830 offset = offsetof (prstatus32_t, pr_reg); 7831 memcpy (&prstat, note->descdata, sizeof (prstat)); 7832 7833 /* Do not overwrite the core signal if it 7834 has already been set by another thread. */ 7835 if (elf_tdata (abfd)->core_signal == 0) 7836 elf_tdata (abfd)->core_signal = prstat.pr_cursig; 7837 if (elf_tdata (abfd)->core_pid == 0) 7838 elf_tdata (abfd)->core_pid = prstat.pr_pid; 7839 7840 /* pr_who exists on: 7841 solaris 2.5+ 7842 unixware 4.2 7843 pr_who doesn't exist on: 7844 linux 2.[01] 7845 */ 7846#if defined (HAVE_PRSTATUS32_T_PR_WHO) 7847 elf_tdata (abfd)->core_lwpid = prstat.pr_who; 7848#else 7849 elf_tdata (abfd)->core_lwpid = prstat.pr_pid; 7850#endif 7851 } 7852#endif /* HAVE_PRSTATUS32_T */ 7853 else 7854 { 7855 /* Fail - we don't know how to handle any other 7856 note size (ie. data object type). */ 7857 return TRUE; 7858 } 7859 7860 /* Make a ".reg/999" section and a ".reg" section. */ 7861 return _bfd_elfcore_make_pseudosection (abfd, ".reg", 7862 size, note->descpos + offset); 7863} 7864#endif /* defined (HAVE_PRSTATUS_T) */ 7865 7866/* Create a pseudosection containing the exact contents of NOTE. */ 7867static bfd_boolean 7868elfcore_make_note_pseudosection (bfd *abfd, 7869 char *name, 7870 Elf_Internal_Note *note) 7871{ 7872 return _bfd_elfcore_make_pseudosection (abfd, name, 7873 note->descsz, note->descpos); 7874} 7875 7876/* There isn't a consistent prfpregset_t across platforms, 7877 but it doesn't matter, because we don't have to pick this 7878 data structure apart. */ 7879 7880static bfd_boolean 7881elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note) 7882{ 7883 return elfcore_make_note_pseudosection (abfd, ".reg2", note); 7884} 7885 7886/* Linux dumps the Intel SSE regs in a note named "LINUX" with a note 7887 type of NT_PRXFPREG. Just include the whole note's contents 7888 literally. */ 7889 7890static bfd_boolean 7891elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note) 7892{ 7893 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note); 7894} 7895 7896/* Linux dumps the Intel XSAVE extended state in a note named "LINUX" 7897 with a note type of NT_X86_XSTATE. Just include the whole note's 7898 contents literally. */ 7899 7900static bfd_boolean 7901elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note) 7902{ 7903 return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note); 7904} 7905 7906static bfd_boolean 7907elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note) 7908{ 7909 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note); 7910} 7911 7912static bfd_boolean 7913elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note) 7914{ 7915 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note); 7916} 7917 7918static bfd_boolean 7919elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note) 7920{ 7921 return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note); 7922} 7923 7924static bfd_boolean 7925elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note) 7926{ 7927 return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note); 7928} 7929 7930static bfd_boolean 7931elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note) 7932{ 7933 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note); 7934} 7935 7936static bfd_boolean 7937elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note) 7938{ 7939 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note); 7940} 7941 7942static bfd_boolean 7943elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note) 7944{ 7945 return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note); 7946} 7947 7948static bfd_boolean 7949elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note) 7950{ 7951 return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note); 7952} 7953 7954#if defined (HAVE_PRPSINFO_T) 7955typedef prpsinfo_t elfcore_psinfo_t; 7956#if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */ 7957typedef prpsinfo32_t elfcore_psinfo32_t; 7958#endif 7959#endif 7960 7961#if defined (HAVE_PSINFO_T) 7962typedef psinfo_t elfcore_psinfo_t; 7963#if defined (HAVE_PSINFO32_T) /* Sparc64 cross Sparc32 */ 7964typedef psinfo32_t elfcore_psinfo32_t; 7965#endif 7966#endif 7967 7968/* return a malloc'ed copy of a string at START which is at 7969 most MAX bytes long, possibly without a terminating '\0'. 7970 the copy will always have a terminating '\0'. */ 7971 7972char * 7973_bfd_elfcore_strndup (bfd *abfd, char *start, size_t max) 7974{ 7975 char *dups; 7976 char *end = (char *) memchr (start, '\0', max); 7977 size_t len; 7978 7979 if (end == NULL) 7980 len = max; 7981 else 7982 len = end - start; 7983 7984 dups = (char *) bfd_alloc (abfd, len + 1); 7985 if (dups == NULL) 7986 return NULL; 7987 7988 memcpy (dups, start, len); 7989 dups[len] = '\0'; 7990 7991 return dups; 7992} 7993 7994#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) 7995static bfd_boolean 7996elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) 7997{ 7998 if (note->descsz == sizeof (elfcore_psinfo_t)) 7999 { 8000 elfcore_psinfo_t psinfo; 8001 8002 memcpy (&psinfo, note->descdata, sizeof (psinfo)); 8003 8004#if defined (HAVE_PSINFO_T_PR_PID) || defined (HAVE_PRPSINFO_T_PR_PID) 8005 elf_tdata (abfd)->core_pid = psinfo.pr_pid; 8006#endif 8007 elf_tdata (abfd)->core_program 8008 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname, 8009 sizeof (psinfo.pr_fname)); 8010 8011 elf_tdata (abfd)->core_command 8012 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs, 8013 sizeof (psinfo.pr_psargs)); 8014 } 8015#if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T) 8016 else if (note->descsz == sizeof (elfcore_psinfo32_t)) 8017 { 8018 /* 64-bit host, 32-bit corefile */ 8019 elfcore_psinfo32_t psinfo; 8020 8021 memcpy (&psinfo, note->descdata, sizeof (psinfo)); 8022 8023#if defined (HAVE_PSINFO32_T_PR_PID) || defined (HAVE_PRPSINFO32_T_PR_PID) 8024 elf_tdata (abfd)->core_pid = psinfo.pr_pid; 8025#endif 8026 elf_tdata (abfd)->core_program 8027 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname, 8028 sizeof (psinfo.pr_fname)); 8029 8030 elf_tdata (abfd)->core_command 8031 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs, 8032 sizeof (psinfo.pr_psargs)); 8033 } 8034#endif 8035 8036 else 8037 { 8038 /* Fail - we don't know how to handle any other 8039 note size (ie. data object type). */ 8040 return TRUE; 8041 } 8042 8043 /* Note that for some reason, a spurious space is tacked 8044 onto the end of the args in some (at least one anyway) 8045 implementations, so strip it off if it exists. */ 8046 8047 { 8048 char *command = elf_tdata (abfd)->core_command; 8049 int n = strlen (command); 8050 8051 if (0 < n && command[n - 1] == ' ') 8052 command[n - 1] = '\0'; 8053 } 8054 8055 return TRUE; 8056} 8057#endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */ 8058 8059#if defined (HAVE_PSTATUS_T) 8060static bfd_boolean 8061elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note) 8062{ 8063 if (note->descsz == sizeof (pstatus_t) 8064#if defined (HAVE_PXSTATUS_T) 8065 || note->descsz == sizeof (pxstatus_t) 8066#endif 8067 ) 8068 { 8069 pstatus_t pstat; 8070 8071 memcpy (&pstat, note->descdata, sizeof (pstat)); 8072 8073 elf_tdata (abfd)->core_pid = pstat.pr_pid; 8074 } 8075#if defined (HAVE_PSTATUS32_T) 8076 else if (note->descsz == sizeof (pstatus32_t)) 8077 { 8078 /* 64-bit host, 32-bit corefile */ 8079 pstatus32_t pstat; 8080 8081 memcpy (&pstat, note->descdata, sizeof (pstat)); 8082 8083 elf_tdata (abfd)->core_pid = pstat.pr_pid; 8084 } 8085#endif 8086 /* Could grab some more details from the "representative" 8087 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an 8088 NT_LWPSTATUS note, presumably. */ 8089 8090 return TRUE; 8091} 8092#endif /* defined (HAVE_PSTATUS_T) */ 8093 8094#if defined (HAVE_LWPSTATUS_T) 8095static bfd_boolean 8096elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note) 8097{ 8098 lwpstatus_t lwpstat; 8099 char buf[100]; 8100 char *name; 8101 size_t len; 8102 asection *sect; 8103 8104 if (note->descsz != sizeof (lwpstat) 8105#if defined (HAVE_LWPXSTATUS_T) 8106 && note->descsz != sizeof (lwpxstatus_t) 8107#endif 8108 ) 8109 return TRUE; 8110 8111 memcpy (&lwpstat, note->descdata, sizeof (lwpstat)); 8112 8113 elf_tdata (abfd)->core_lwpid = lwpstat.pr_lwpid; 8114 /* Do not overwrite the core signal if it has already been set by 8115 another thread. */ 8116 if (elf_tdata (abfd)->core_signal == 0) 8117 elf_tdata (abfd)->core_signal = lwpstat.pr_cursig; 8118 8119 /* Make a ".reg/999" section. */ 8120 8121 sprintf (buf, ".reg/%d", elfcore_make_pid (abfd)); 8122 len = strlen (buf) + 1; 8123 name = bfd_alloc (abfd, len); 8124 if (name == NULL) 8125 return FALSE; 8126 memcpy (name, buf, len); 8127 8128 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS); 8129 if (sect == NULL) 8130 return FALSE; 8131 8132#if defined (HAVE_LWPSTATUS_T_PR_CONTEXT) 8133 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs); 8134 sect->filepos = note->descpos 8135 + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs); 8136#endif 8137 8138#if defined (HAVE_LWPSTATUS_T_PR_REG) 8139 sect->size = sizeof (lwpstat.pr_reg); 8140 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg); 8141#endif 8142 8143 sect->alignment_power = 2; 8144 8145 if (!elfcore_maybe_make_sect (abfd, ".reg", sect)) 8146 return FALSE; 8147 8148 /* Make a ".reg2/999" section */ 8149 8150 sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd)); 8151 len = strlen (buf) + 1; 8152 name = bfd_alloc (abfd, len); 8153 if (name == NULL) 8154 return FALSE; 8155 memcpy (name, buf, len); 8156 8157 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS); 8158 if (sect == NULL) 8159 return FALSE; 8160 8161#if defined (HAVE_LWPSTATUS_T_PR_CONTEXT) 8162 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs); 8163 sect->filepos = note->descpos 8164 + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs); 8165#endif 8166 8167#if defined (HAVE_LWPSTATUS_T_PR_FPREG) 8168 sect->size = sizeof (lwpstat.pr_fpreg); 8169 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg); 8170#endif 8171 8172 sect->alignment_power = 2; 8173 8174 return elfcore_maybe_make_sect (abfd, ".reg2", sect); 8175} 8176#endif /* defined (HAVE_LWPSTATUS_T) */ 8177 8178static bfd_boolean 8179elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note) 8180{ 8181 char buf[30]; 8182 char *name; 8183 size_t len; 8184 asection *sect; 8185 int type; 8186 int is_active_thread; 8187 bfd_vma base_addr; 8188 8189 if (note->descsz < 728) 8190 return TRUE; 8191 8192 if (! CONST_STRNEQ (note->namedata, "win32")) 8193 return TRUE; 8194 8195 type = bfd_get_32 (abfd, note->descdata); 8196 8197 switch (type) 8198 { 8199 case 1 /* NOTE_INFO_PROCESS */: 8200 /* FIXME: need to add ->core_command. */ 8201 /* process_info.pid */ 8202 elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 8); 8203 /* process_info.signal */ 8204 elf_tdata (abfd)->core_signal = bfd_get_32 (abfd, note->descdata + 12); 8205 break; 8206 8207 case 2 /* NOTE_INFO_THREAD */: 8208 /* Make a ".reg/999" section. */ 8209 /* thread_info.tid */ 8210 sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 8)); 8211 8212 len = strlen (buf) + 1; 8213 name = (char *) bfd_alloc (abfd, len); 8214 if (name == NULL) 8215 return FALSE; 8216 8217 memcpy (name, buf, len); 8218 8219 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS); 8220 if (sect == NULL) 8221 return FALSE; 8222 8223 /* sizeof (thread_info.thread_context) */ 8224 sect->size = 716; 8225 /* offsetof (thread_info.thread_context) */ 8226 sect->filepos = note->descpos + 12; 8227 sect->alignment_power = 2; 8228 8229 /* thread_info.is_active_thread */ 8230 is_active_thread = bfd_get_32 (abfd, note->descdata + 8); 8231 8232 if (is_active_thread) 8233 if (! elfcore_maybe_make_sect (abfd, ".reg", sect)) 8234 return FALSE; 8235 break; 8236 8237 case 3 /* NOTE_INFO_MODULE */: 8238 /* Make a ".module/xxxxxxxx" section. */ 8239 /* module_info.base_address */ 8240 base_addr = bfd_get_32 (abfd, note->descdata + 4); 8241 sprintf (buf, ".module/%08lx", (unsigned long) base_addr); 8242 8243 len = strlen (buf) + 1; 8244 name = (char *) bfd_alloc (abfd, len); 8245 if (name == NULL) 8246 return FALSE; 8247 8248 memcpy (name, buf, len); 8249 8250 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS); 8251 8252 if (sect == NULL) 8253 return FALSE; 8254 8255 sect->size = note->descsz; 8256 sect->filepos = note->descpos; 8257 sect->alignment_power = 2; 8258 break; 8259 8260 default: 8261 return TRUE; 8262 } 8263 8264 return TRUE; 8265} 8266 8267static bfd_boolean 8268elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) 8269{ 8270 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 8271 8272 switch (note->type) 8273 { 8274 default: 8275 return TRUE; 8276 8277 case NT_PRSTATUS: 8278 if (bed->elf_backend_grok_prstatus) 8279 if ((*bed->elf_backend_grok_prstatus) (abfd, note)) 8280 return TRUE; 8281#if defined (HAVE_PRSTATUS_T) 8282 return elfcore_grok_prstatus (abfd, note); 8283#else 8284 return TRUE; 8285#endif 8286 8287#if defined (HAVE_PSTATUS_T) 8288 case NT_PSTATUS: 8289 return elfcore_grok_pstatus (abfd, note); 8290#endif 8291 8292#if defined (HAVE_LWPSTATUS_T) 8293 case NT_LWPSTATUS: 8294 return elfcore_grok_lwpstatus (abfd, note); 8295#endif 8296 8297 case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */ 8298 return elfcore_grok_prfpreg (abfd, note); 8299 8300 case NT_WIN32PSTATUS: 8301 return elfcore_grok_win32pstatus (abfd, note); 8302 8303 case NT_PRXFPREG: /* Linux SSE extension */ 8304 if (note->namesz == 6 8305 && strcmp (note->namedata, "LINUX") == 0) 8306 return elfcore_grok_prxfpreg (abfd, note); 8307 else 8308 return TRUE; 8309 8310 case NT_X86_XSTATE: /* Linux XSAVE extension */ 8311 if (note->namesz == 6 8312 && strcmp (note->namedata, "LINUX") == 0) 8313 return elfcore_grok_xstatereg (abfd, note); 8314 else 8315 return TRUE; 8316 8317 case NT_PPC_VMX: 8318 if (note->namesz == 6 8319 && strcmp (note->namedata, "LINUX") == 0) 8320 return elfcore_grok_ppc_vmx (abfd, note); 8321 else 8322 return TRUE; 8323 8324 case NT_PPC_VSX: 8325 if (note->namesz == 6 8326 && strcmp (note->namedata, "LINUX") == 0) 8327 return elfcore_grok_ppc_vsx (abfd, note); 8328 else 8329 return TRUE; 8330 8331 case NT_S390_HIGH_GPRS: 8332 if (note->namesz == 6 8333 && strcmp (note->namedata, "LINUX") == 0) 8334 return elfcore_grok_s390_high_gprs (abfd, note); 8335 else 8336 return TRUE; 8337 8338 case NT_S390_TIMER: 8339 if (note->namesz == 6 8340 && strcmp (note->namedata, "LINUX") == 0) 8341 return elfcore_grok_s390_timer (abfd, note); 8342 else 8343 return TRUE; 8344 8345 case NT_S390_TODCMP: 8346 if (note->namesz == 6 8347 && strcmp (note->namedata, "LINUX") == 0) 8348 return elfcore_grok_s390_todcmp (abfd, note); 8349 else 8350 return TRUE; 8351 8352 case NT_S390_TODPREG: 8353 if (note->namesz == 6 8354 && strcmp (note->namedata, "LINUX") == 0) 8355 return elfcore_grok_s390_todpreg (abfd, note); 8356 else 8357 return TRUE; 8358 8359 case NT_S390_CTRS: 8360 if (note->namesz == 6 8361 && strcmp (note->namedata, "LINUX") == 0) 8362 return elfcore_grok_s390_ctrs (abfd, note); 8363 else 8364 return TRUE; 8365 8366 case NT_S390_PREFIX: 8367 if (note->namesz == 6 8368 && strcmp (note->namedata, "LINUX") == 0) 8369 return elfcore_grok_s390_prefix (abfd, note); 8370 else 8371 return TRUE; 8372 8373 case NT_PRPSINFO: 8374 case NT_PSINFO: 8375 if (bed->elf_backend_grok_psinfo) 8376 if ((*bed->elf_backend_grok_psinfo) (abfd, note)) 8377 return TRUE; 8378#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) 8379 return elfcore_grok_psinfo (abfd, note); 8380#else 8381 return TRUE; 8382#endif 8383 8384 case NT_AUXV: 8385 { 8386 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv", 8387 SEC_HAS_CONTENTS); 8388 8389 if (sect == NULL) 8390 return FALSE; 8391 sect->size = note->descsz; 8392 sect->filepos = note->descpos; 8393 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32; 8394 8395 return TRUE; 8396 } 8397 } 8398} 8399 8400static bfd_boolean 8401elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note) 8402{ 8403 elf_tdata (abfd)->build_id_size = note->descsz; 8404 elf_tdata (abfd)->build_id = (bfd_byte *) bfd_alloc (abfd, note->descsz); 8405 if (elf_tdata (abfd)->build_id == NULL) 8406 return FALSE; 8407 8408 memcpy (elf_tdata (abfd)->build_id, note->descdata, note->descsz); 8409 8410 return TRUE; 8411} 8412 8413static bfd_boolean 8414elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note) 8415{ 8416 switch (note->type) 8417 { 8418 default: 8419 return TRUE; 8420 8421 case NT_GNU_BUILD_ID: 8422 return elfobj_grok_gnu_build_id (abfd, note); 8423 } 8424} 8425 8426static bfd_boolean 8427elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp) 8428{ 8429 char *cp; 8430 8431 cp = strchr (note->namedata, '@'); 8432 if (cp != NULL) 8433 { 8434 *lwpidp = atoi(cp + 1); 8435 return TRUE; 8436 } 8437 return FALSE; 8438} 8439 8440static bfd_boolean 8441elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note) 8442{ 8443 /* Signal number at offset 0x08. */ 8444 elf_tdata (abfd)->core_signal 8445 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08); 8446 8447 /* Process ID at offset 0x50. */ 8448 elf_tdata (abfd)->core_pid 8449 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50); 8450 8451 /* Command name at 0x7c (max 32 bytes, including nul). */ 8452 elf_tdata (abfd)->core_command 8453 = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31); 8454 8455 return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo", 8456 note); 8457} 8458 8459static bfd_boolean 8460elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note) 8461{ 8462 int lwp; 8463 8464 if (elfcore_netbsd_get_lwpid (note, &lwp)) 8465 elf_tdata (abfd)->core_lwpid = lwp; 8466 8467 if (note->type == NT_NETBSDCORE_PROCINFO) 8468 { 8469 /* NetBSD-specific core "procinfo". Note that we expect to 8470 find this note before any of the others, which is fine, 8471 since the kernel writes this note out first when it 8472 creates a core file. */ 8473 8474 return elfcore_grok_netbsd_procinfo (abfd, note); 8475 } 8476 8477 /* As of Jan 2002 there are no other machine-independent notes 8478 defined for NetBSD core files. If the note type is less 8479 than the start of the machine-dependent note types, we don't 8480 understand it. */ 8481 8482 if (note->type < NT_NETBSDCORE_FIRSTMACH) 8483 return TRUE; 8484 8485 8486 switch (bfd_get_arch (abfd)) 8487 { 8488 /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and 8489 PT_GETFPREGS == mach+2. */ 8490 8491 case bfd_arch_alpha: 8492 case bfd_arch_sparc: 8493 switch (note->type) 8494 { 8495 case NT_NETBSDCORE_FIRSTMACH+0: 8496 return elfcore_make_note_pseudosection (abfd, ".reg", note); 8497 8498 case NT_NETBSDCORE_FIRSTMACH+2: 8499 return elfcore_make_note_pseudosection (abfd, ".reg2", note); 8500 8501 default: 8502 return TRUE; 8503 } 8504 8505 /* On SuperH, PT_GETREGS == mach+3 and PT_GETFPREGS == mach+5. 8506 There's also old PT___GETREGS40 == mach + 1 for old reg 8507 structure which lacks GBR. */ 8508 8509 case bfd_arch_sh: 8510 switch (note->type) 8511 { 8512 case NT_NETBSDCORE_FIRSTMACH+3: 8513 return elfcore_make_note_pseudosection (abfd, ".reg", note); 8514 8515 case NT_NETBSDCORE_FIRSTMACH+5: 8516 return elfcore_make_note_pseudosection (abfd, ".reg2", note); 8517 8518 default: 8519 return TRUE; 8520 } 8521 8522 /* On all other arch's, PT_GETREGS == mach+1 and 8523 PT_GETFPREGS == mach+3. */ 8524 8525 default: 8526 switch (note->type) 8527 { 8528 case NT_NETBSDCORE_FIRSTMACH+1: 8529 return elfcore_make_note_pseudosection (abfd, ".reg", note); 8530 8531 case NT_NETBSDCORE_FIRSTMACH+3: 8532 return elfcore_make_note_pseudosection (abfd, ".reg2", note); 8533 8534 default: 8535 return TRUE; 8536 } 8537 } 8538 /* NOTREACHED */ 8539} 8540 8541static bfd_boolean 8542elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note) 8543{ 8544 /* Signal number at offset 0x08. */ 8545 elf_tdata (abfd)->core_signal 8546 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08); 8547 8548 /* Process ID at offset 0x20. */ 8549 elf_tdata (abfd)->core_pid 8550 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20); 8551 8552 /* Command name at 0x48 (max 32 bytes, including nul). */ 8553 elf_tdata (abfd)->core_command 8554 = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31); 8555 8556 return TRUE; 8557} 8558 8559static bfd_boolean 8560elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note) 8561{ 8562 if (note->type == NT_OPENBSD_PROCINFO) 8563 return elfcore_grok_openbsd_procinfo (abfd, note); 8564 8565 if (note->type == NT_OPENBSD_REGS) 8566 return elfcore_make_note_pseudosection (abfd, ".reg", note); 8567 8568 if (note->type == NT_OPENBSD_FPREGS) 8569 return elfcore_make_note_pseudosection (abfd, ".reg2", note); 8570 8571 if (note->type == NT_OPENBSD_XFPREGS) 8572 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note); 8573 8574 if (note->type == NT_OPENBSD_AUXV) 8575 { 8576 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv", 8577 SEC_HAS_CONTENTS); 8578 8579 if (sect == NULL) 8580 return FALSE; 8581 sect->size = note->descsz; 8582 sect->filepos = note->descpos; 8583 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32; 8584 8585 return TRUE; 8586 } 8587 8588 if (note->type == NT_OPENBSD_WCOOKIE) 8589 { 8590 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie", 8591 SEC_HAS_CONTENTS); 8592 8593 if (sect == NULL) 8594 return FALSE; 8595 sect->size = note->descsz; 8596 sect->filepos = note->descpos; 8597 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32; 8598 8599 return TRUE; 8600 } 8601 8602 return TRUE; 8603} 8604 8605static bfd_boolean 8606elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid) 8607{ 8608 void *ddata = note->descdata; 8609 char buf[100]; 8610 char *name; 8611 asection *sect; 8612 short sig; 8613 unsigned flags; 8614 8615 /* nto_procfs_status 'pid' field is at offset 0. */ 8616 elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, (bfd_byte *) ddata); 8617 8618 /* nto_procfs_status 'tid' field is at offset 4. Pass it back. */ 8619 *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4); 8620 8621 /* nto_procfs_status 'flags' field is at offset 8. */ 8622 flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8); 8623 8624 /* nto_procfs_status 'what' field is at offset 14. */ 8625 if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0) 8626 { 8627 elf_tdata (abfd)->core_signal = sig; 8628 elf_tdata (abfd)->core_lwpid = *tid; 8629 } 8630 8631 /* _DEBUG_FLAG_CURTID (current thread) is 0x80. Some cores 8632 do not come from signals so we make sure we set the current 8633 thread just in case. */ 8634 if (flags & 0x00000080) 8635 elf_tdata (abfd)->core_lwpid = *tid; 8636 8637 /* Make a ".qnx_core_status/%d" section. */ 8638 sprintf (buf, ".qnx_core_status/%ld", *tid); 8639 8640 name = (char *) bfd_alloc (abfd, strlen (buf) + 1); 8641 if (name == NULL) 8642 return FALSE; 8643 strcpy (name, buf); 8644 8645 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS); 8646 if (sect == NULL) 8647 return FALSE; 8648 8649 sect->size = note->descsz; 8650 sect->filepos = note->descpos; 8651 sect->alignment_power = 2; 8652 8653 return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect)); 8654} 8655 8656static bfd_boolean 8657elfcore_grok_nto_regs (bfd *abfd, 8658 Elf_Internal_Note *note, 8659 long tid, 8660 char *base) 8661{ 8662 char buf[100]; 8663 char *name; 8664 asection *sect; 8665 8666 /* Make a "(base)/%d" section. */ 8667 sprintf (buf, "%s/%ld", base, tid); 8668 8669 name = (char *) bfd_alloc (abfd, strlen (buf) + 1); 8670 if (name == NULL) 8671 return FALSE; 8672 strcpy (name, buf); 8673 8674 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS); 8675 if (sect == NULL) 8676 return FALSE; 8677 8678 sect->size = note->descsz; 8679 sect->filepos = note->descpos; 8680 sect->alignment_power = 2; 8681 8682 /* This is the current thread. */ 8683 if (elf_tdata (abfd)->core_lwpid == tid) 8684 return elfcore_maybe_make_sect (abfd, base, sect); 8685 8686 return TRUE; 8687} 8688 8689#define BFD_QNT_CORE_INFO 7 8690#define BFD_QNT_CORE_STATUS 8 8691#define BFD_QNT_CORE_GREG 9 8692#define BFD_QNT_CORE_FPREG 10 8693 8694static bfd_boolean 8695elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note) 8696{ 8697 /* Every GREG section has a STATUS section before it. Store the 8698 tid from the previous call to pass down to the next gregs 8699 function. */ 8700 static long tid = 1; 8701 8702 switch (note->type) 8703 { 8704 case BFD_QNT_CORE_INFO: 8705 return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note); 8706 case BFD_QNT_CORE_STATUS: 8707 return elfcore_grok_nto_status (abfd, note, &tid); 8708 case BFD_QNT_CORE_GREG: 8709 return elfcore_grok_nto_regs (abfd, note, tid, ".reg"); 8710 case BFD_QNT_CORE_FPREG: 8711 return elfcore_grok_nto_regs (abfd, note, tid, ".reg2"); 8712 default: 8713 return TRUE; 8714 } 8715} 8716 8717static bfd_boolean 8718elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note) 8719{ 8720 char *name; 8721 asection *sect; 8722 size_t len; 8723 8724 /* Use note name as section name. */ 8725 len = note->namesz; 8726 name = (char *) bfd_alloc (abfd, len); 8727 if (name == NULL) 8728 return FALSE; 8729 memcpy (name, note->namedata, len); 8730 name[len - 1] = '\0'; 8731 8732 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS); 8733 if (sect == NULL) 8734 return FALSE; 8735 8736 sect->size = note->descsz; 8737 sect->filepos = note->descpos; 8738 sect->alignment_power = 1; 8739 8740 return TRUE; 8741} 8742 8743/* Function: elfcore_write_note 8744 8745 Inputs: 8746 buffer to hold note, and current size of buffer 8747 name of note 8748 type of note 8749 data for note 8750 size of data for note 8751 8752 Writes note to end of buffer. ELF64 notes are written exactly as 8753 for ELF32, despite the current (as of 2006) ELF gabi specifying 8754 that they ought to have 8-byte namesz and descsz field, and have 8755 8-byte alignment. Other writers, eg. Linux kernel, do the same. 8756 8757 Return: 8758 Pointer to realloc'd buffer, *BUFSIZ updated. */ 8759 8760char * 8761elfcore_write_note (bfd *abfd, 8762 char *buf, 8763 int *bufsiz, 8764 const char *name, 8765 int type, 8766 const void *input, 8767 int size) 8768{ 8769 Elf_External_Note *xnp; 8770 size_t namesz; 8771 size_t newspace; 8772 char *dest; 8773 8774 namesz = 0; 8775 if (name != NULL) 8776 namesz = strlen (name) + 1; 8777 8778 newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4); 8779 8780 buf = (char *) realloc (buf, *bufsiz + newspace); 8781 if (buf == NULL) 8782 return buf; 8783 dest = buf + *bufsiz; 8784 *bufsiz += newspace; 8785 xnp = (Elf_External_Note *) dest; 8786 H_PUT_32 (abfd, namesz, xnp->namesz); 8787 H_PUT_32 (abfd, size, xnp->descsz); 8788 H_PUT_32 (abfd, type, xnp->type); 8789 dest = xnp->name; 8790 if (name != NULL) 8791 { 8792 memcpy (dest, name, namesz); 8793 dest += namesz; 8794 while (namesz & 3) 8795 { 8796 *dest++ = '\0'; 8797 ++namesz; 8798 } 8799 } 8800 memcpy (dest, input, size); 8801 dest += size; 8802 while (size & 3) 8803 { 8804 *dest++ = '\0'; 8805 ++size; 8806 } 8807 return buf; 8808} 8809 8810#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) 8811char * 8812elfcore_write_prpsinfo (bfd *abfd, 8813 char *buf, 8814 int *bufsiz, 8815 const char *fname, 8816 const char *psargs) 8817{ 8818 const char *note_name = "CORE"; 8819 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 8820 8821 if (bed->elf_backend_write_core_note != NULL) 8822 { 8823 char *ret; 8824 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz, 8825 NT_PRPSINFO, fname, psargs); 8826 if (ret != NULL) 8827 return ret; 8828 } 8829 8830#if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T) 8831 if (bed->s->elfclass == ELFCLASS32) 8832 { 8833#if defined (HAVE_PSINFO32_T) 8834 psinfo32_t data; 8835 int note_type = NT_PSINFO; 8836#else 8837 prpsinfo32_t data; 8838 int note_type = NT_PRPSINFO; 8839#endif 8840 8841 memset (&data, 0, sizeof (data)); 8842 strncpy (data.pr_fname, fname, sizeof (data.pr_fname)); 8843 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs)); 8844 return elfcore_write_note (abfd, buf, bufsiz, 8845 note_name, note_type, &data, sizeof (data)); 8846 } 8847 else 8848#endif 8849 { 8850#if defined (HAVE_PSINFO_T) 8851 psinfo_t data; 8852 int note_type = NT_PSINFO; 8853#else 8854 prpsinfo_t data; 8855 int note_type = NT_PRPSINFO; 8856#endif 8857 8858 memset (&data, 0, sizeof (data)); 8859 strncpy (data.pr_fname, fname, sizeof (data.pr_fname)); 8860 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs)); 8861 return elfcore_write_note (abfd, buf, bufsiz, 8862 note_name, note_type, &data, sizeof (data)); 8863 } 8864} 8865#endif /* PSINFO_T or PRPSINFO_T */ 8866 8867#if defined (HAVE_PRSTATUS_T) 8868char * 8869elfcore_write_prstatus (bfd *abfd, 8870 char *buf, 8871 int *bufsiz, 8872 long pid, 8873 int cursig, 8874 const void *gregs) 8875{ 8876 const char *note_name = "CORE"; 8877 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 8878 8879 if (bed->elf_backend_write_core_note != NULL) 8880 { 8881 char *ret; 8882 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz, 8883 NT_PRSTATUS, 8884 pid, cursig, gregs); 8885 if (ret != NULL) 8886 return ret; 8887 } 8888 8889#if defined (HAVE_PRSTATUS32_T) 8890 if (bed->s->elfclass == ELFCLASS32) 8891 { 8892 prstatus32_t prstat; 8893 8894 memset (&prstat, 0, sizeof (prstat)); 8895 prstat.pr_pid = pid; 8896 prstat.pr_cursig = cursig; 8897 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg)); 8898 return elfcore_write_note (abfd, buf, bufsiz, note_name, 8899 NT_PRSTATUS, &prstat, sizeof (prstat)); 8900 } 8901 else 8902#endif 8903 { 8904 prstatus_t prstat; 8905 8906 memset (&prstat, 0, sizeof (prstat)); 8907 prstat.pr_pid = pid; 8908 prstat.pr_cursig = cursig; 8909 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg)); 8910 return elfcore_write_note (abfd, buf, bufsiz, note_name, 8911 NT_PRSTATUS, &prstat, sizeof (prstat)); 8912 } 8913} 8914#endif /* HAVE_PRSTATUS_T */ 8915 8916#if defined (HAVE_LWPSTATUS_T) 8917char * 8918elfcore_write_lwpstatus (bfd *abfd, 8919 char *buf, 8920 int *bufsiz, 8921 long pid, 8922 int cursig, 8923 const void *gregs) 8924{ 8925 lwpstatus_t lwpstat; 8926 const char *note_name = "CORE"; 8927 8928 memset (&lwpstat, 0, sizeof (lwpstat)); 8929 lwpstat.pr_lwpid = pid >> 16; 8930 lwpstat.pr_cursig = cursig; 8931#if defined (HAVE_LWPSTATUS_T_PR_REG) 8932 memcpy (lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg)); 8933#elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT) 8934#if !defined(gregs) 8935 memcpy (lwpstat.pr_context.uc_mcontext.gregs, 8936 gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs)); 8937#else 8938 memcpy (lwpstat.pr_context.uc_mcontext.__gregs, 8939 gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs)); 8940#endif 8941#endif 8942 return elfcore_write_note (abfd, buf, bufsiz, note_name, 8943 NT_LWPSTATUS, &lwpstat, sizeof (lwpstat)); 8944} 8945#endif /* HAVE_LWPSTATUS_T */ 8946 8947#if defined (HAVE_PSTATUS_T) 8948char * 8949elfcore_write_pstatus (bfd *abfd, 8950 char *buf, 8951 int *bufsiz, 8952 long pid, 8953 int cursig ATTRIBUTE_UNUSED, 8954 const void *gregs ATTRIBUTE_UNUSED) 8955{ 8956 const char *note_name = "CORE"; 8957#if defined (HAVE_PSTATUS32_T) 8958 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 8959 8960 if (bed->s->elfclass == ELFCLASS32) 8961 { 8962 pstatus32_t pstat; 8963 8964 memset (&pstat, 0, sizeof (pstat)); 8965 pstat.pr_pid = pid & 0xffff; 8966 buf = elfcore_write_note (abfd, buf, bufsiz, note_name, 8967 NT_PSTATUS, &pstat, sizeof (pstat)); 8968 return buf; 8969 } 8970 else 8971#endif 8972 { 8973 pstatus_t pstat; 8974 8975 memset (&pstat, 0, sizeof (pstat)); 8976 pstat.pr_pid = pid & 0xffff; 8977 buf = elfcore_write_note (abfd, buf, bufsiz, note_name, 8978 NT_PSTATUS, &pstat, sizeof (pstat)); 8979 return buf; 8980 } 8981} 8982#endif /* HAVE_PSTATUS_T */ 8983 8984char * 8985elfcore_write_prfpreg (bfd *abfd, 8986 char *buf, 8987 int *bufsiz, 8988 const void *fpregs, 8989 int size) 8990{ 8991 const char *note_name = "CORE"; 8992 return elfcore_write_note (abfd, buf, bufsiz, 8993 note_name, NT_FPREGSET, fpregs, size); 8994} 8995 8996char * 8997elfcore_write_prxfpreg (bfd *abfd, 8998 char *buf, 8999 int *bufsiz, 9000 const void *xfpregs, 9001 int size) 9002{ 9003 char *note_name = "LINUX"; 9004 return elfcore_write_note (abfd, buf, bufsiz, 9005 note_name, NT_PRXFPREG, xfpregs, size); 9006} 9007 9008char * 9009elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz, 9010 const void *xfpregs, int size) 9011{ 9012 char *note_name = "LINUX"; 9013 return elfcore_write_note (abfd, buf, bufsiz, 9014 note_name, NT_X86_XSTATE, xfpregs, size); 9015} 9016 9017char * 9018elfcore_write_ppc_vmx (bfd *abfd, 9019 char *buf, 9020 int *bufsiz, 9021 const void *ppc_vmx, 9022 int size) 9023{ 9024 char *note_name = "LINUX"; 9025 return elfcore_write_note (abfd, buf, bufsiz, 9026 note_name, NT_PPC_VMX, ppc_vmx, size); 9027} 9028 9029char * 9030elfcore_write_ppc_vsx (bfd *abfd, 9031 char *buf, 9032 int *bufsiz, 9033 const void *ppc_vsx, 9034 int size) 9035{ 9036 char *note_name = "LINUX"; 9037 return elfcore_write_note (abfd, buf, bufsiz, 9038 note_name, NT_PPC_VSX, ppc_vsx, size); 9039} 9040 9041static char * 9042elfcore_write_s390_high_gprs (bfd *abfd, 9043 char *buf, 9044 int *bufsiz, 9045 const void *s390_high_gprs, 9046 int size) 9047{ 9048 char *note_name = "LINUX"; 9049 return elfcore_write_note (abfd, buf, bufsiz, 9050 note_name, NT_S390_HIGH_GPRS, 9051 s390_high_gprs, size); 9052} 9053 9054char * 9055elfcore_write_s390_timer (bfd *abfd, 9056 char *buf, 9057 int *bufsiz, 9058 const void *s390_timer, 9059 int size) 9060{ 9061 char *note_name = "LINUX"; 9062 return elfcore_write_note (abfd, buf, bufsiz, 9063 note_name, NT_S390_TIMER, s390_timer, size); 9064} 9065 9066char * 9067elfcore_write_s390_todcmp (bfd *abfd, 9068 char *buf, 9069 int *bufsiz, 9070 const void *s390_todcmp, 9071 int size) 9072{ 9073 char *note_name = "LINUX"; 9074 return elfcore_write_note (abfd, buf, bufsiz, 9075 note_name, NT_S390_TODCMP, s390_todcmp, size); 9076} 9077 9078char * 9079elfcore_write_s390_todpreg (bfd *abfd, 9080 char *buf, 9081 int *bufsiz, 9082 const void *s390_todpreg, 9083 int size) 9084{ 9085 char *note_name = "LINUX"; 9086 return elfcore_write_note (abfd, buf, bufsiz, 9087 note_name, NT_S390_TODPREG, s390_todpreg, size); 9088} 9089 9090char * 9091elfcore_write_s390_ctrs (bfd *abfd, 9092 char *buf, 9093 int *bufsiz, 9094 const void *s390_ctrs, 9095 int size) 9096{ 9097 char *note_name = "LINUX"; 9098 return elfcore_write_note (abfd, buf, bufsiz, 9099 note_name, NT_S390_CTRS, s390_ctrs, size); 9100} 9101 9102char * 9103elfcore_write_s390_prefix (bfd *abfd, 9104 char *buf, 9105 int *bufsiz, 9106 const void *s390_prefix, 9107 int size) 9108{ 9109 char *note_name = "LINUX"; 9110 return elfcore_write_note (abfd, buf, bufsiz, 9111 note_name, NT_S390_PREFIX, s390_prefix, size); 9112} 9113 9114char * 9115elfcore_write_register_note (bfd *abfd, 9116 char *buf, 9117 int *bufsiz, 9118 const char *section, 9119 const void *data, 9120 int size) 9121{ 9122 if (strcmp (section, ".reg2") == 0) 9123 return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size); 9124 if (strcmp (section, ".reg-xfp") == 0) 9125 return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size); 9126 if (strcmp (section, ".reg-xstate") == 0) 9127 return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size); 9128 if (strcmp (section, ".reg-ppc-vmx") == 0) 9129 return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size); 9130 if (strcmp (section, ".reg-ppc-vsx") == 0) 9131 return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size); 9132 if (strcmp (section, ".reg-s390-high-gprs") == 0) 9133 return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size); 9134 if (strcmp (section, ".reg-s390-timer") == 0) 9135 return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size); 9136 if (strcmp (section, ".reg-s390-todcmp") == 0) 9137 return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size); 9138 if (strcmp (section, ".reg-s390-todpreg") == 0) 9139 return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size); 9140 if (strcmp (section, ".reg-s390-ctrs") == 0) 9141 return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size); 9142 if (strcmp (section, ".reg-s390-prefix") == 0) 9143 return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size); 9144 return NULL; 9145} 9146 9147static bfd_boolean 9148elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset) 9149{ 9150 char *p; 9151 9152 p = buf; 9153 while (p < buf + size) 9154 { 9155 /* FIXME: bad alignment assumption. */ 9156 Elf_External_Note *xnp = (Elf_External_Note *) p; 9157 Elf_Internal_Note in; 9158 9159 if (offsetof (Elf_External_Note, name) > buf - p + size) 9160 return FALSE; 9161 9162 in.type = H_GET_32 (abfd, xnp->type); 9163 9164 in.namesz = H_GET_32 (abfd, xnp->namesz); 9165 in.namedata = xnp->name; 9166 if (in.namesz > buf - in.namedata + size) 9167 return FALSE; 9168 9169 in.descsz = H_GET_32 (abfd, xnp->descsz); 9170 in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4); 9171 in.descpos = offset + (in.descdata - buf); 9172 if (in.descsz != 0 9173 && (in.descdata >= buf + size 9174 || in.descsz > buf - in.descdata + size)) 9175 return FALSE; 9176 9177 switch (bfd_get_format (abfd)) 9178 { 9179 default: 9180 return TRUE; 9181 9182 case bfd_core: 9183 if (CONST_STRNEQ (in.namedata, "NetBSD-CORE")) 9184 { 9185 if (! elfcore_grok_netbsd_note (abfd, &in)) 9186 return FALSE; 9187 } 9188 else if (CONST_STRNEQ (in.namedata, "OpenBSD")) 9189 { 9190 if (! elfcore_grok_openbsd_note (abfd, &in)) 9191 return FALSE; 9192 } 9193 else if (CONST_STRNEQ (in.namedata, "QNX")) 9194 { 9195 if (! elfcore_grok_nto_note (abfd, &in)) 9196 return FALSE; 9197 } 9198 else if (CONST_STRNEQ (in.namedata, "SPU/")) 9199 { 9200 if (! elfcore_grok_spu_note (abfd, &in)) 9201 return FALSE; 9202 } 9203 else 9204 { 9205 if (! elfcore_grok_note (abfd, &in)) 9206 return FALSE; 9207 } 9208 break; 9209 9210 case bfd_object: 9211 if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0) 9212 { 9213 if (! elfobj_grok_gnu_note (abfd, &in)) 9214 return FALSE; 9215 } 9216 break; 9217 } 9218 9219 p = in.descdata + BFD_ALIGN (in.descsz, 4); 9220 } 9221 9222 return TRUE; 9223} 9224 9225static bfd_boolean 9226elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size) 9227{ 9228 char *buf; 9229 9230 if (size <= 0) 9231 return TRUE; 9232 9233 if (bfd_seek (abfd, offset, SEEK_SET) != 0) 9234 return FALSE; 9235 9236 buf = (char *) bfd_malloc (size); 9237 if (buf == NULL) 9238 return FALSE; 9239 9240 if (bfd_bread (buf, size, abfd) != size 9241 || !elf_parse_notes (abfd, buf, size, offset)) 9242 { 9243 free (buf); 9244 return FALSE; 9245 } 9246 9247 free (buf); 9248 return TRUE; 9249} 9250 9251/* Providing external access to the ELF program header table. */ 9252 9253/* Return an upper bound on the number of bytes required to store a 9254 copy of ABFD's program header table entries. Return -1 if an error 9255 occurs; bfd_get_error will return an appropriate code. */ 9256 9257long 9258bfd_get_elf_phdr_upper_bound (bfd *abfd) 9259{ 9260 if (abfd->xvec->flavour != bfd_target_elf_flavour) 9261 { 9262 bfd_set_error (bfd_error_wrong_format); 9263 return -1; 9264 } 9265 9266 return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr); 9267} 9268 9269/* Copy ABFD's program header table entries to *PHDRS. The entries 9270 will be stored as an array of Elf_Internal_Phdr structures, as 9271 defined in include/elf/internal.h. To find out how large the 9272 buffer needs to be, call bfd_get_elf_phdr_upper_bound. 9273 9274 Return the number of program header table entries read, or -1 if an 9275 error occurs; bfd_get_error will return an appropriate code. */ 9276 9277int 9278bfd_get_elf_phdrs (bfd *abfd, void *phdrs) 9279{ 9280 int num_phdrs; 9281 9282 if (abfd->xvec->flavour != bfd_target_elf_flavour) 9283 { 9284 bfd_set_error (bfd_error_wrong_format); 9285 return -1; 9286 } 9287 9288 num_phdrs = elf_elfheader (abfd)->e_phnum; 9289 memcpy (phdrs, elf_tdata (abfd)->phdr, 9290 num_phdrs * sizeof (Elf_Internal_Phdr)); 9291 9292 return num_phdrs; 9293} 9294 9295enum elf_reloc_type_class 9296_bfd_elf_reloc_type_class (const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED) 9297{ 9298 return reloc_class_normal; 9299} 9300 9301/* For RELA architectures, return the relocation value for a 9302 relocation against a local symbol. */ 9303 9304bfd_vma 9305_bfd_elf_rela_local_sym (bfd *abfd, 9306 Elf_Internal_Sym *sym, 9307 asection **psec, 9308 Elf_Internal_Rela *rel) 9309{ 9310 asection *sec = *psec; 9311 bfd_vma relocation; 9312 9313 relocation = (sec->output_section->vma 9314 + sec->output_offset 9315 + sym->st_value); 9316 if ((sec->flags & SEC_MERGE) 9317 && ELF_ST_TYPE (sym->st_info) == STT_SECTION 9318 && sec->sec_info_type == ELF_INFO_TYPE_MERGE) 9319 { 9320 rel->r_addend = 9321 _bfd_merged_section_offset (abfd, psec, 9322 elf_section_data (sec)->sec_info, 9323 sym->st_value + rel->r_addend); 9324 if (sec != *psec) 9325 { 9326 /* If we have changed the section, and our original section is 9327 marked with SEC_EXCLUDE, it means that the original 9328 SEC_MERGE section has been completely subsumed in some 9329 other SEC_MERGE section. In this case, we need to leave 9330 some info around for --emit-relocs. */ 9331 if ((sec->flags & SEC_EXCLUDE) != 0) 9332 sec->kept_section = *psec; 9333 sec = *psec; 9334 } 9335 rel->r_addend -= relocation; 9336 rel->r_addend += sec->output_section->vma + sec->output_offset; 9337 } 9338 return relocation; 9339} 9340 9341bfd_vma 9342_bfd_elf_rel_local_sym (bfd *abfd, 9343 Elf_Internal_Sym *sym, 9344 asection **psec, 9345 bfd_vma addend) 9346{ 9347 asection *sec = *psec; 9348 9349 if (sec->sec_info_type != ELF_INFO_TYPE_MERGE) 9350 return sym->st_value + addend; 9351 9352 return _bfd_merged_section_offset (abfd, psec, 9353 elf_section_data (sec)->sec_info, 9354 sym->st_value + addend); 9355} 9356 9357bfd_vma 9358_bfd_elf_section_offset (bfd *abfd, 9359 struct bfd_link_info *info, 9360 asection *sec, 9361 bfd_vma offset) 9362{ 9363 switch (sec->sec_info_type) 9364 { 9365 case ELF_INFO_TYPE_STABS: 9366 return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info, 9367 offset); 9368 case ELF_INFO_TYPE_EH_FRAME: 9369 return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset); 9370 default: 9371 return offset; 9372 } 9373} 9374 9375/* Create a new BFD as if by bfd_openr. Rather than opening a file, 9376 reconstruct an ELF file by reading the segments out of remote memory 9377 based on the ELF file header at EHDR_VMA and the ELF program headers it 9378 points to. If not null, *LOADBASEP is filled in with the difference 9379 between the VMAs from which the segments were read, and the VMAs the 9380 file headers (and hence BFD's idea of each section's VMA) put them at. 9381 9382 The function TARGET_READ_MEMORY is called to copy LEN bytes from the 9383 remote memory at target address VMA into the local buffer at MYADDR; it 9384 should return zero on success or an `errno' code on failure. TEMPL must 9385 be a BFD for an ELF target with the word size and byte order found in 9386 the remote memory. */ 9387 9388bfd * 9389bfd_elf_bfd_from_remote_memory 9390 (bfd *templ, 9391 bfd_vma ehdr_vma, 9392 bfd_vma *loadbasep, 9393 int (*target_read_memory) (bfd_vma, bfd_byte *, int)) 9394{ 9395 return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory) 9396 (templ, ehdr_vma, loadbasep, target_read_memory); 9397} 9398 9399long 9400_bfd_elf_get_synthetic_symtab (bfd *abfd, 9401 long symcount ATTRIBUTE_UNUSED, 9402 asymbol **syms ATTRIBUTE_UNUSED, 9403 long dynsymcount, 9404 asymbol **dynsyms, 9405 asymbol **ret) 9406{ 9407 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 9408 asection *relplt; 9409 asymbol *s; 9410 const char *relplt_name; 9411 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean); 9412 arelent *p; 9413 long count, i, n; 9414 size_t size; 9415 Elf_Internal_Shdr *hdr; 9416 char *names; 9417 asection *plt; 9418 9419 *ret = NULL; 9420 9421 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0) 9422 return 0; 9423 9424 if (dynsymcount <= 0) 9425 return 0; 9426 9427 if (!bed->plt_sym_val) 9428 return 0; 9429 9430 relplt_name = bed->relplt_name; 9431 if (relplt_name == NULL) 9432 relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt"; 9433 relplt = bfd_get_section_by_name (abfd, relplt_name); 9434 if (relplt == NULL) 9435 return 0; 9436 9437 hdr = &elf_section_data (relplt)->this_hdr; 9438 if (hdr->sh_link != elf_dynsymtab (abfd) 9439 || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA)) 9440 return 0; 9441 9442 plt = bfd_get_section_by_name (abfd, ".plt"); 9443 if (plt == NULL) 9444 return 0; 9445 9446 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table; 9447 if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE)) 9448 return -1; 9449 9450 count = relplt->size / hdr->sh_entsize; 9451 size = count * sizeof (asymbol); 9452 p = relplt->relocation; 9453 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel) 9454 { 9455 size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt"); 9456 if (p->addend != 0) 9457 { 9458#ifdef BFD64 9459 size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64); 9460#else 9461 size += sizeof ("+0x") - 1 + 8; 9462#endif 9463 } 9464 } 9465 9466 s = *ret = (asymbol *) bfd_malloc (size); 9467 if (s == NULL) 9468 return -1; 9469 9470 names = (char *) (s + count); 9471 p = relplt->relocation; 9472 n = 0; 9473 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel) 9474 { 9475 size_t len; 9476 bfd_vma addr; 9477 9478 addr = bed->plt_sym_val (i, plt, p); 9479 if (addr == (bfd_vma) -1) 9480 continue; 9481 9482 *s = **p->sym_ptr_ptr; 9483 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since 9484 we are defining a symbol, ensure one of them is set. */ 9485 if ((s->flags & BSF_LOCAL) == 0) 9486 s->flags |= BSF_GLOBAL; 9487 s->flags |= BSF_SYNTHETIC; 9488 s->section = plt; 9489 s->value = addr - plt->vma; 9490 s->name = names; 9491 s->udata.p = NULL; 9492 len = strlen ((*p->sym_ptr_ptr)->name); 9493 memcpy (names, (*p->sym_ptr_ptr)->name, len); 9494 names += len; 9495 if (p->addend != 0) 9496 { 9497 char buf[30], *a; 9498 9499 memcpy (names, "+0x", sizeof ("+0x") - 1); 9500 names += sizeof ("+0x") - 1; 9501 bfd_sprintf_vma (abfd, buf, p->addend); 9502 for (a = buf; *a == '0'; ++a) 9503 ; 9504 len = strlen (a); 9505 memcpy (names, a, len); 9506 names += len; 9507 } 9508 memcpy (names, "@plt", sizeof ("@plt")); 9509 names += sizeof ("@plt"); 9510 ++s, ++n; 9511 } 9512 9513 return n; 9514} 9515 9516/* It is only used by x86-64 so far. */ 9517asection _bfd_elf_large_com_section 9518 = BFD_FAKE_SECTION (_bfd_elf_large_com_section, 9519 SEC_IS_COMMON, NULL, "LARGE_COMMON", 0); 9520 9521void 9522_bfd_elf_set_osabi (bfd * abfd, 9523 struct bfd_link_info * link_info ATTRIBUTE_UNUSED) 9524{ 9525 Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */ 9526 9527 i_ehdrp = elf_elfheader (abfd); 9528 9529 i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi; 9530 9531 /* To make things simpler for the loader on Linux systems we set the 9532 osabi field to ELFOSABI_LINUX if the binary contains symbols of 9533 the STT_GNU_IFUNC type or STB_GNU_UNIQUE binding. */ 9534 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE 9535 && elf_tdata (abfd)->has_gnu_symbols) 9536 i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_LINUX; 9537} 9538 9539 9540/* Return TRUE for ELF symbol types that represent functions. 9541 This is the default version of this function, which is sufficient for 9542 most targets. It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC. */ 9543 9544bfd_boolean 9545_bfd_elf_is_function_type (unsigned int type) 9546{ 9547 return (type == STT_FUNC 9548 || type == STT_GNU_IFUNC); 9549} 9550