1 /* opncls.c -- open and close a BFD. 2 Copyright (C) 1990-2024 Free Software Foundation, Inc. 3 4 Written by Cygnus Support. 5 6 This file is part of BFD, the Binary File Descriptor library. 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 3 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 21 MA 02110-1301, USA. */ 22 23 #include "sysdep.h" 24 #include "bfd.h" 25 #include "objalloc.h" 26 #include "libbfd.h" 27 #include "libiberty.h" 28 #include "elf-bfd.h" 29 30 #ifndef S_IXUSR 31 #define S_IXUSR 0100 /* Execute by owner. */ 32 #endif 33 #ifndef S_IXGRP 34 #define S_IXGRP 0010 /* Execute by group. */ 35 #endif 36 #ifndef S_IXOTH 37 #define S_IXOTH 0001 /* Execute by others. */ 38 #endif 39 40 /* 41 SECTION 42 Opening and closing BFDs 43 44 SUBSECTION 45 Functions for opening and closing 46 */ 47 48 /* Counters used to initialize the bfd identifier. */ 49 50 static unsigned int bfd_id_counter = 0; 51 static unsigned int bfd_reserved_id_counter = 0; 52 53 /* 54 EXTERNAL 55 .{* Set to N to open the next N BFDs using an alternate id space. *} 56 .extern unsigned int bfd_use_reserved_id; 57 . 58 */ 59 unsigned int bfd_use_reserved_id = 0; 60 61 /* fdopen is a loser -- we should use stdio exclusively. Unfortunately 62 if we do that we can't use fcntl. */ 63 64 /* 65 INTERNAL_FUNCTION 66 _bfd_new_bfd 67 68 SYNOPSIS 69 bfd *_bfd_new_bfd (void); 70 71 DESCRIPTION 72 Return a new BFD. All BFD's are allocated through this routine. 73 */ 74 75 bfd * 76 _bfd_new_bfd (void) 77 { 78 bfd *nbfd; 79 80 nbfd = (bfd *) bfd_zmalloc (sizeof (bfd)); 81 if (nbfd == NULL) 82 return NULL; 83 84 if (!bfd_lock ()) 85 return NULL; 86 if (bfd_use_reserved_id) 87 { 88 nbfd->id = --bfd_reserved_id_counter; 89 --bfd_use_reserved_id; 90 } 91 else 92 nbfd->id = bfd_id_counter++; 93 if (!bfd_unlock ()) 94 { 95 free (nbfd); 96 return NULL; 97 } 98 99 nbfd->memory = objalloc_create (); 100 if (nbfd->memory == NULL) 101 { 102 bfd_set_error (bfd_error_no_memory); 103 free (nbfd); 104 return NULL; 105 } 106 107 nbfd->arch_info = &bfd_default_arch_struct; 108 109 if (!bfd_hash_table_init_n (& nbfd->section_htab, bfd_section_hash_newfunc, 110 sizeof (struct section_hash_entry), 13)) 111 { 112 objalloc_free ((struct objalloc *) nbfd->memory); 113 free (nbfd); 114 return NULL; 115 } 116 117 nbfd->archive_plugin_fd = -1; 118 119 return nbfd; 120 } 121 122 static const struct bfd_iovec opncls_iovec; 123 124 /* 125 INTERNAL_FUNCTION 126 _bfd_new_bfd_contained_in 127 128 SYNOPSIS 129 bfd *_bfd_new_bfd_contained_in (bfd *); 130 131 DESCRIPTION 132 Allocate a new BFD as a member of archive OBFD. 133 */ 134 135 bfd * 136 _bfd_new_bfd_contained_in (bfd *obfd) 137 { 138 bfd *nbfd; 139 140 /* Nested archives in bims are unsupported. */ 141 if ((obfd->flags & BFD_IN_MEMORY) != 0) 142 { 143 bfd_set_error (bfd_error_malformed_archive); 144 return NULL; 145 } 146 nbfd = _bfd_new_bfd (); 147 if (nbfd == NULL) 148 return NULL; 149 nbfd->xvec = obfd->xvec; 150 nbfd->iovec = obfd->iovec; 151 if (obfd->iovec == &opncls_iovec) 152 nbfd->iostream = obfd->iostream; 153 nbfd->my_archive = obfd; 154 nbfd->direction = read_direction; 155 nbfd->target_defaulted = obfd->target_defaulted; 156 nbfd->lto_output = obfd->lto_output; 157 nbfd->no_export = obfd->no_export; 158 return nbfd; 159 } 160 161 /* Delete a BFD. */ 162 163 static void 164 _bfd_delete_bfd (bfd *abfd) 165 { 166 #ifdef USE_MMAP 167 if (abfd->xvec 168 && abfd->xvec->flavour == bfd_target_elf_flavour) 169 { 170 asection *sec; 171 for (sec = abfd->sections; sec != NULL; sec = sec->next) 172 if (sec->mmapped_p) 173 munmap (elf_section_data (sec)->contents_addr, 174 elf_section_data (sec)->contents_size); 175 } 176 #endif 177 178 /* Give the target _bfd_free_cached_info a chance to free memory. */ 179 if (abfd->memory && abfd->xvec) 180 bfd_free_cached_info (abfd); 181 182 /* The target _bfd_free_cached_info may not have done anything.. */ 183 if (abfd->memory) 184 { 185 bfd_hash_table_free (&abfd->section_htab); 186 objalloc_free ((struct objalloc *) abfd->memory); 187 } 188 else 189 free ((char *) bfd_get_filename (abfd)); 190 191 #ifdef USE_MMAP 192 struct bfd_mmapped *mmapped, *next; 193 for (mmapped = abfd->mmapped; mmapped != NULL; mmapped = next) 194 { 195 struct bfd_mmapped_entry *entries = mmapped->entries; 196 next = mmapped->next; 197 for (unsigned int i = 0; i < mmapped->next_entry; i++) 198 munmap (entries[i].addr, entries[i].size); 199 munmap (mmapped, _bfd_pagesize); 200 } 201 #endif 202 203 free (abfd->arelt_data); 204 free (abfd); 205 } 206 207 /* 208 INTERNAL_FUNCTION 209 _bfd_free_cached_info 210 211 SYNOPSIS 212 bool _bfd_free_cached_info (bfd *); 213 214 DESCRIPTION 215 Free objalloc memory. 216 */ 217 218 bool 219 _bfd_free_cached_info (bfd *abfd) 220 { 221 if (abfd->memory) 222 { 223 const char *filename = bfd_get_filename (abfd); 224 if (filename) 225 { 226 /* We can't afford to lose the bfd filename when freeing 227 abfd->memory, because that would kill the cache.c scheme 228 of closing and reopening files in order to limit the 229 number of open files. To reopen, you need the filename. 230 And indeed _bfd_compute_and_write_armap calls 231 _bfd_free_cached_info to free up space used by symbols 232 and by check_format_matches. Which we want to continue 233 doing to handle very large archives. Later the archive 234 elements are copied, which might require reopening files. 235 We also want to keep using objalloc memory for the 236 filename since that allows the name to be updated 237 without either leaking memory or implementing some sort 238 of reference counted string for copies of the filename. */ 239 size_t len = strlen (filename) + 1; 240 char *copy = bfd_malloc (len); 241 if (copy == NULL) 242 return false; 243 memcpy (copy, filename, len); 244 abfd->filename = copy; 245 } 246 bfd_hash_table_free (&abfd->section_htab); 247 objalloc_free ((struct objalloc *) abfd->memory); 248 249 abfd->sections = NULL; 250 abfd->section_last = NULL; 251 abfd->outsymbols = NULL; 252 abfd->tdata.any = NULL; 253 abfd->usrdata = NULL; 254 abfd->memory = NULL; 255 } 256 257 return true; 258 } 259 260 /* 261 FUNCTION 262 bfd_fopen 263 264 SYNOPSIS 265 bfd *bfd_fopen (const char *filename, const char *target, 266 const char *mode, int fd); 267 268 DESCRIPTION 269 Open the file @var{filename} with the target @var{target}. 270 Return a pointer to the created BFD. If @var{fd} is not -1, 271 then <<fdopen>> is used to open the file; otherwise, <<fopen>> 272 is used. @var{mode} is passed directly to <<fopen>> or 273 <<fdopen>>. 274 275 Calls <<bfd_find_target>>, so @var{target} is interpreted as by 276 that function. 277 278 The new BFD is marked as cacheable iff @var{fd} is -1. 279 280 If <<NULL>> is returned then an error has occured. Possible errors 281 are <<bfd_error_no_memory>>, <<bfd_error_invalid_target>> or 282 <<system_call>> error. 283 284 On error, @var{fd} is always closed. 285 286 A copy of the @var{filename} argument is stored in the newly created 287 BFD. It can be accessed via the bfd_get_filename() macro. 288 */ 289 290 bfd * 291 bfd_fopen (const char *filename, const char *target, const char *mode, int fd) 292 { 293 bfd *nbfd; 294 const bfd_target *target_vec; 295 296 nbfd = _bfd_new_bfd (); 297 if (nbfd == NULL) 298 { 299 if (fd != -1) 300 close (fd); 301 return NULL; 302 } 303 304 target_vec = bfd_find_target (target, nbfd); 305 if (target_vec == NULL) 306 { 307 if (fd != -1) 308 close (fd); 309 _bfd_delete_bfd (nbfd); 310 return NULL; 311 } 312 313 #ifdef HAVE_FDOPEN 314 if (fd != -1) 315 nbfd->iostream = fdopen (fd, mode); 316 else 317 #endif 318 nbfd->iostream = _bfd_real_fopen (filename, mode); 319 if (nbfd->iostream == NULL) 320 { 321 bfd_set_error (bfd_error_system_call); 322 if (fd != -1) 323 close (fd); 324 _bfd_delete_bfd (nbfd); 325 return NULL; 326 } 327 328 /* OK, put everything where it belongs. */ 329 330 /* PR 11983: Do not cache the original filename, but 331 rather make a copy - the original might go away. */ 332 if (!bfd_set_filename (nbfd, filename)) 333 { 334 fclose (nbfd->iostream); 335 _bfd_delete_bfd (nbfd); 336 return NULL; 337 } 338 339 /* Figure out whether the user is opening the file for reading, 340 writing, or both, by looking at the MODE argument. */ 341 if ((mode[0] == 'r' || mode[0] == 'w' || mode[0] == 'a') 342 && mode[1] == '+') 343 nbfd->direction = both_direction; 344 else if (mode[0] == 'r') 345 nbfd->direction = read_direction; 346 else 347 nbfd->direction = write_direction; 348 349 if (!bfd_cache_init (nbfd)) 350 { 351 fclose (nbfd->iostream); 352 _bfd_delete_bfd (nbfd); 353 return NULL; 354 } 355 nbfd->opened_once = true; 356 357 /* If we opened the file by name, mark it cacheable; we can close it 358 and reopen it later. However, if a file descriptor was provided, 359 then it may have been opened with special flags that make it 360 unsafe to close and reopen the file. */ 361 if (fd == -1) 362 (void) bfd_set_cacheable (nbfd, true); 363 364 return nbfd; 365 } 366 367 /* 368 FUNCTION 369 bfd_openr 370 371 SYNOPSIS 372 bfd *bfd_openr (const char *filename, const char *target); 373 374 DESCRIPTION 375 Open the file @var{filename} (using <<fopen>>) with the target 376 @var{target}. Return a pointer to the created BFD. 377 378 Calls <<bfd_find_target>>, so @var{target} is interpreted as by 379 that function. 380 381 If <<NULL>> is returned then an error has occured. Possible errors 382 are <<bfd_error_no_memory>>, <<bfd_error_invalid_target>> or 383 <<system_call>> error. 384 385 A copy of the @var{filename} argument is stored in the newly created 386 BFD. It can be accessed via the bfd_get_filename() macro. 387 */ 388 389 bfd * 390 bfd_openr (const char *filename, const char *target) 391 { 392 return bfd_fopen (filename, target, FOPEN_RB, -1); 393 } 394 395 /* Don't try to `optimize' this function: 396 397 o - We lock using stack space so that interrupting the locking 398 won't cause a storage leak. 399 o - We open the file stream last, since we don't want to have to 400 close it if anything goes wrong. Closing the stream means closing 401 the file descriptor too, even though we didn't open it. */ 402 /* 403 FUNCTION 404 bfd_fdopenr 405 406 SYNOPSIS 407 bfd *bfd_fdopenr (const char *filename, const char *target, int fd); 408 409 DESCRIPTION 410 <<bfd_fdopenr>> is to <<bfd_fopenr>> much like <<fdopen>> is to 411 <<fopen>>. It opens a BFD on a file already described by the 412 @var{fd} supplied. 413 414 When the file is later <<bfd_close>>d, the file descriptor will 415 be closed. If the caller desires that this file descriptor be 416 cached by BFD (opened as needed, closed as needed to free 417 descriptors for other opens), with the supplied @var{fd} used as 418 an initial file descriptor (but subject to closure at any time), 419 call bfd_set_cacheable(bfd, 1) on the returned BFD. The default 420 is to assume no caching; the file descriptor will remain open 421 until <<bfd_close>>, and will not be affected by BFD operations 422 on other files. 423 424 Possible errors are <<bfd_error_no_memory>>, 425 <<bfd_error_invalid_target>> and <<bfd_error_system_call>>. 426 427 On error, @var{fd} is closed. 428 429 A copy of the @var{filename} argument is stored in the newly created 430 BFD. It can be accessed via the bfd_get_filename() macro. 431 */ 432 433 bfd * 434 bfd_fdopenr (const char *filename, const char *target, int fd) 435 { 436 const char *mode; 437 #if defined(HAVE_FCNTL) && defined(F_GETFL) 438 int fdflags; 439 #endif 440 441 #if ! defined(HAVE_FCNTL) || ! defined(F_GETFL) 442 mode = FOPEN_RUB; /* Assume full access. */ 443 #else 444 fdflags = fcntl (fd, F_GETFL, NULL); 445 if (fdflags == -1) 446 { 447 int save = errno; 448 449 close (fd); 450 errno = save; 451 bfd_set_error (bfd_error_system_call); 452 return NULL; 453 } 454 455 /* (O_ACCMODE) parens are to avoid Ultrix header file bug. */ 456 switch (fdflags & (O_ACCMODE)) 457 { 458 case O_RDONLY: mode = FOPEN_RB; break; 459 case O_WRONLY: mode = FOPEN_RUB; break; 460 case O_RDWR: mode = FOPEN_RUB; break; 461 default: abort (); 462 } 463 #endif 464 465 return bfd_fopen (filename, target, mode, fd); 466 } 467 468 /* 469 FUNCTION 470 bfd_fdopenw 471 472 SYNOPSIS 473 bfd *bfd_fdopenw (const char *filename, const char *target, int fd); 474 475 DESCRIPTION 476 <<bfd_fdopenw>> is exactly like <<bfd_fdopenr>> with the exception that 477 the resulting BFD is suitable for output. 478 */ 479 480 bfd * 481 bfd_fdopenw (const char *filename, const char *target, int fd) 482 { 483 bfd *out = bfd_fdopenr (filename, target, fd); 484 485 if (out != NULL) 486 { 487 if (!bfd_write_p (out)) 488 { 489 close (fd); 490 _bfd_delete_bfd (out); 491 out = NULL; 492 bfd_set_error (bfd_error_invalid_operation); 493 } 494 else 495 out->direction = write_direction; 496 } 497 498 return out; 499 } 500 501 /* 502 FUNCTION 503 bfd_openstreamr 504 505 SYNOPSIS 506 bfd *bfd_openstreamr (const char * filename, const char * target, 507 void * stream); 508 509 DESCRIPTION 510 Open a BFD for read access on an existing stdio stream. When 511 the BFD is passed to <<bfd_close>>, the stream will be closed. 512 513 A copy of the @var{filename} argument is stored in the newly created 514 BFD. It can be accessed via the bfd_get_filename() macro. 515 */ 516 517 bfd * 518 bfd_openstreamr (const char *filename, const char *target, void *streamarg) 519 { 520 FILE *stream = (FILE *) streamarg; 521 bfd *nbfd; 522 const bfd_target *target_vec; 523 524 nbfd = _bfd_new_bfd (); 525 if (nbfd == NULL) 526 return NULL; 527 528 target_vec = bfd_find_target (target, nbfd); 529 if (target_vec == NULL) 530 { 531 _bfd_delete_bfd (nbfd); 532 return NULL; 533 } 534 535 nbfd->iostream = stream; 536 /* PR 11983: Do not cache the original filename, but 537 rather make a copy - the original might go away. */ 538 if (!bfd_set_filename (nbfd, filename)) 539 { 540 _bfd_delete_bfd (nbfd); 541 return NULL; 542 } 543 nbfd->direction = read_direction; 544 545 if (! bfd_cache_init (nbfd)) 546 { 547 _bfd_delete_bfd (nbfd); 548 return NULL; 549 } 550 551 return nbfd; 552 } 553 554 /* 555 FUNCTION 556 bfd_openr_iovec 557 558 SYNOPSIS 559 bfd *bfd_openr_iovec (const char *filename, const char *target, 560 void *(*open_func) (struct bfd *nbfd, 561 void *open_closure), 562 void *open_closure, 563 file_ptr (*pread_func) (struct bfd *nbfd, 564 void *stream, 565 void *buf, 566 file_ptr nbytes, 567 file_ptr offset), 568 int (*close_func) (struct bfd *nbfd, 569 void *stream), 570 int (*stat_func) (struct bfd *abfd, 571 void *stream, 572 struct stat *sb)); 573 574 DESCRIPTION 575 Create and return a BFD backed by a read-only @var{stream}. 576 The @var{stream} is created using @var{open_func}, accessed using 577 @var{pread_func} and destroyed using @var{close_func}. 578 579 Calls <<bfd_find_target>>, so @var{target} is interpreted as by 580 that function. 581 582 Calls @var{open_func} (which can call <<bfd_zalloc>> and 583 <<bfd_get_filename>>) to obtain the read-only stream backing 584 the BFD. @var{open_func} either succeeds returning the 585 non-<<NULL>> @var{stream}, or fails returning <<NULL>> 586 (setting <<bfd_error>>). 587 588 Calls @var{pread_func} to request @var{nbytes} of data from 589 @var{stream} starting at @var{offset} (e.g., via a call to 590 <<bfd_read>>). @var{pread_func} either succeeds returning the 591 number of bytes read (which can be less than @var{nbytes} when 592 end-of-file), or fails returning -1 (setting <<bfd_error>>). 593 594 Calls @var{close_func} when the BFD is later closed using 595 <<bfd_close>>. @var{close_func} either succeeds returning 0, or 596 fails returning -1 (setting <<bfd_error>>). 597 598 Calls @var{stat_func} to fill in a stat structure for bfd_stat, 599 bfd_get_size, and bfd_get_mtime calls. @var{stat_func} returns 0 600 on success, or returns -1 on failure (setting <<bfd_error>>). 601 602 If <<bfd_openr_iovec>> returns <<NULL>> then an error has 603 occurred. Possible errors are <<bfd_error_no_memory>>, 604 <<bfd_error_invalid_target>> and <<bfd_error_system_call>>. 605 606 A copy of the @var{filename} argument is stored in the newly created 607 BFD. It can be accessed via the bfd_get_filename() macro. 608 */ 609 610 struct opncls 611 { 612 void *stream; 613 file_ptr (*pread) (struct bfd *abfd, void *stream, void *buf, 614 file_ptr nbytes, file_ptr offset); 615 int (*close) (struct bfd *abfd, void *stream); 616 int (*stat) (struct bfd *abfd, void *stream, struct stat *sb); 617 file_ptr where; 618 }; 619 620 static file_ptr 621 opncls_btell (struct bfd *abfd) 622 { 623 struct opncls *vec = (struct opncls *) abfd->iostream; 624 return vec->where; 625 } 626 627 static int 628 opncls_bseek (struct bfd *abfd, file_ptr offset, int whence) 629 { 630 struct opncls *vec = (struct opncls *) abfd->iostream; 631 switch (whence) 632 { 633 case SEEK_SET: vec->where = offset; break; 634 case SEEK_CUR: vec->where += offset; break; 635 case SEEK_END: return -1; 636 } 637 return 0; 638 } 639 640 static file_ptr 641 opncls_bread (struct bfd *abfd, void *buf, file_ptr nbytes) 642 { 643 struct opncls *vec = (struct opncls *) abfd->iostream; 644 file_ptr nread = (vec->pread) (abfd, vec->stream, buf, nbytes, vec->where); 645 646 if (nread < 0) 647 return nread; 648 vec->where += nread; 649 return nread; 650 } 651 652 static file_ptr 653 opncls_bwrite (struct bfd *abfd ATTRIBUTE_UNUSED, 654 const void *where ATTRIBUTE_UNUSED, 655 file_ptr nbytes ATTRIBUTE_UNUSED) 656 { 657 return -1; 658 } 659 660 static int 661 opncls_bclose (struct bfd *abfd) 662 { 663 struct opncls *vec = (struct opncls *) abfd->iostream; 664 /* Since the VEC's memory is bound to the bfd deleting the bfd will 665 free it. */ 666 int status = 0; 667 668 if (vec->close != NULL) 669 status = (vec->close) (abfd, vec->stream); 670 abfd->iostream = NULL; 671 return status; 672 } 673 674 static int 675 opncls_bflush (struct bfd *abfd ATTRIBUTE_UNUSED) 676 { 677 return 0; 678 } 679 680 static int 681 opncls_bstat (struct bfd *abfd, struct stat *sb) 682 { 683 struct opncls *vec = (struct opncls *) abfd->iostream; 684 685 memset (sb, 0, sizeof (*sb)); 686 if (vec->stat == NULL) 687 return 0; 688 689 return (vec->stat) (abfd, vec->stream, sb); 690 } 691 692 static void * 693 opncls_bmmap (struct bfd *abfd ATTRIBUTE_UNUSED, 694 void *addr ATTRIBUTE_UNUSED, 695 size_t len ATTRIBUTE_UNUSED, 696 int prot ATTRIBUTE_UNUSED, 697 int flags ATTRIBUTE_UNUSED, 698 file_ptr offset ATTRIBUTE_UNUSED, 699 void **map_addr ATTRIBUTE_UNUSED, 700 size_t *map_len ATTRIBUTE_UNUSED) 701 { 702 return MAP_FAILED; 703 } 704 705 static const struct bfd_iovec opncls_iovec = 706 { 707 &opncls_bread, &opncls_bwrite, &opncls_btell, &opncls_bseek, 708 &opncls_bclose, &opncls_bflush, &opncls_bstat, &opncls_bmmap 709 }; 710 711 bfd * 712 bfd_openr_iovec (const char *filename, const char *target, 713 void *(*open_p) (struct bfd *, void *), 714 void *open_closure, 715 file_ptr (*pread_p) (struct bfd *, void *, void *, 716 file_ptr, file_ptr), 717 int (*close_p) (struct bfd *, void *), 718 int (*stat_p) (struct bfd *, void *, struct stat *)) 719 { 720 bfd *nbfd; 721 const bfd_target *target_vec; 722 struct opncls *vec; 723 void *stream; 724 725 nbfd = _bfd_new_bfd (); 726 if (nbfd == NULL) 727 return NULL; 728 729 target_vec = bfd_find_target (target, nbfd); 730 if (target_vec == NULL) 731 { 732 _bfd_delete_bfd (nbfd); 733 return NULL; 734 } 735 736 /* PR 11983: Do not cache the original filename, but 737 rather make a copy - the original might go away. */ 738 if (!bfd_set_filename (nbfd, filename)) 739 { 740 _bfd_delete_bfd (nbfd); 741 return NULL; 742 } 743 nbfd->direction = read_direction; 744 745 /* `open_p (...)' would get expanded by an the open(2) syscall macro. */ 746 stream = (*open_p) (nbfd, open_closure); 747 if (stream == NULL) 748 { 749 _bfd_delete_bfd (nbfd); 750 return NULL; 751 } 752 753 vec = (struct opncls *) bfd_zalloc (nbfd, sizeof (struct opncls)); 754 vec->stream = stream; 755 vec->pread = pread_p; 756 vec->close = close_p; 757 vec->stat = stat_p; 758 759 nbfd->iovec = &opncls_iovec; 760 nbfd->iostream = vec; 761 762 return nbfd; 763 } 764 765 /* bfd_openw -- open for writing. 766 Returns a pointer to a freshly-allocated BFD on success, or NULL. 767 768 See comment by bfd_fdopenr before you try to modify this function. */ 769 770 /* 771 FUNCTION 772 bfd_openw 773 774 SYNOPSIS 775 bfd *bfd_openw (const char *filename, const char *target); 776 777 DESCRIPTION 778 Create a BFD, associated with file @var{filename}, using the 779 file format @var{target}, and return a pointer to it. 780 781 Possible errors are <<bfd_error_system_call>>, <<bfd_error_no_memory>>, 782 <<bfd_error_invalid_target>>. 783 784 A copy of the @var{filename} argument is stored in the newly created 785 BFD. It can be accessed via the bfd_get_filename() macro. 786 */ 787 788 bfd * 789 bfd_openw (const char *filename, const char *target) 790 { 791 bfd *nbfd; 792 const bfd_target *target_vec; 793 794 /* nbfd has to point to head of malloc'ed block so that bfd_close may 795 reclaim it correctly. */ 796 nbfd = _bfd_new_bfd (); 797 if (nbfd == NULL) 798 return NULL; 799 800 target_vec = bfd_find_target (target, nbfd); 801 if (target_vec == NULL) 802 { 803 _bfd_delete_bfd (nbfd); 804 return NULL; 805 } 806 807 /* PR 11983: Do not cache the original filename, but 808 rather make a copy - the original might go away. */ 809 if (!bfd_set_filename (nbfd, filename)) 810 { 811 _bfd_delete_bfd (nbfd); 812 return NULL; 813 } 814 nbfd->direction = write_direction; 815 816 if (bfd_open_file (nbfd) == NULL) 817 { 818 /* File not writeable, etc. */ 819 bfd_set_error (bfd_error_system_call); 820 _bfd_delete_bfd (nbfd); 821 return NULL; 822 } 823 824 return nbfd; 825 } 826 827 /* 828 FUNCTION 829 bfd_elf_bfd_from_remote_memory 830 831 SYNOPSIS 832 bfd *bfd_elf_bfd_from_remote_memory 833 (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep, 834 int (*target_read_memory) 835 (bfd_vma vma, bfd_byte *myaddr, bfd_size_type len)); 836 837 DESCRIPTION 838 Create a new BFD as if by bfd_openr. Rather than opening a 839 file, reconstruct an ELF file by reading the segments out of 840 remote memory based on the ELF file header at EHDR_VMA and the 841 ELF program headers it points to. If non-zero, SIZE is the 842 known extent of the object. If not null, *LOADBASEP is filled 843 in with the difference between the VMAs from which the 844 segments were read, and the VMAs the file headers (and hence 845 BFD's idea of each section's VMA) put them at. 846 847 The function TARGET_READ_MEMORY is called to copy LEN bytes 848 from the remote memory at target address VMA into the local 849 buffer at MYADDR; it should return zero on success or an 850 errno code on failure. TEMPL must be a BFD for an ELF 851 target with the word size and byte order found in the remote 852 memory. 853 */ 854 855 bfd * 856 bfd_elf_bfd_from_remote_memory 857 (bfd *templ, 858 bfd_vma ehdr_vma, 859 bfd_size_type size, 860 bfd_vma *loadbasep, 861 int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type)) 862 { 863 if (bfd_get_flavour (templ) != bfd_target_elf_flavour) 864 { 865 bfd_set_error (bfd_error_invalid_operation); 866 return NULL; 867 } 868 return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory) 869 (templ, ehdr_vma, size, loadbasep, target_read_memory); 870 } 871 872 static inline void 873 _maybe_make_executable (bfd * abfd) 874 { 875 /* If the file was open for writing and is now executable, 876 make it so. */ 877 if (abfd->direction == write_direction 878 && (abfd->flags & (EXEC_P | DYNAMIC)) != 0) 879 { 880 struct stat buf; 881 882 if (stat (bfd_get_filename (abfd), &buf) == 0 883 /* Do not attempt to change non-regular files. This is 884 here especially for configure scripts and kernel builds 885 which run tests with "ld [...] -o /dev/null". */ 886 && S_ISREG(buf.st_mode)) 887 { 888 unsigned int mask = umask (0); 889 890 umask (mask); 891 chmod (bfd_get_filename (abfd), 892 (0777 893 & (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask)))); 894 } 895 } 896 } 897 898 /* 899 FUNCTION 900 bfd_close 901 902 SYNOPSIS 903 bool bfd_close (bfd *abfd); 904 905 DESCRIPTION 906 Close a BFD. If the BFD was open for writing, then pending 907 operations are completed and the file written out and closed. 908 If the created file is executable, then <<chmod>> is called 909 to mark it as such. 910 911 All memory attached to the BFD is released. 912 913 The file descriptor associated with the BFD is closed (even 914 if it was passed in to BFD by <<bfd_fdopenr>>). 915 916 <<TRUE>> is returned if all is ok, otherwise <<FALSE>>. 917 */ 918 919 bool 920 bfd_close (bfd *abfd) 921 { 922 bool ret = (!bfd_write_p (abfd) 923 || BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd))); 924 925 return bfd_close_all_done (abfd) && ret; 926 } 927 928 /* 929 FUNCTION 930 bfd_close_all_done 931 932 SYNOPSIS 933 bool bfd_close_all_done (bfd *); 934 935 DESCRIPTION 936 Close a BFD. Differs from <<bfd_close>> since it does not 937 complete any pending operations. This routine would be used 938 if the application had just used BFD for swapping and didn't 939 want to use any of the writing code. 940 941 If the created file is executable, then <<chmod>> is called 942 to mark it as such. 943 944 All memory attached to the BFD is released. 945 946 <<TRUE>> is returned if all is ok, otherwise <<FALSE>>. 947 */ 948 949 bool 950 bfd_close_all_done (bfd *abfd) 951 { 952 bool ret = BFD_SEND (abfd, _close_and_cleanup, (abfd)); 953 954 if (abfd->iovec != NULL) 955 ret &= abfd->iovec->bclose (abfd) == 0; 956 957 if (ret) 958 _maybe_make_executable (abfd); 959 960 _bfd_delete_bfd (abfd); 961 _bfd_clear_error_data (); 962 963 return ret; 964 } 965 966 /* 967 FUNCTION 968 bfd_create 969 970 SYNOPSIS 971 bfd *bfd_create (const char *filename, bfd *templ); 972 973 DESCRIPTION 974 Create a new BFD in the manner of <<bfd_openw>>, but without 975 opening a file. The new BFD takes the target from the target 976 used by @var{templ}. The format is always set to <<bfd_object>>. 977 978 A copy of the @var{filename} argument is stored in the newly created 979 BFD. It can be accessed via the bfd_get_filename() macro. 980 */ 981 982 bfd * 983 bfd_create (const char *filename, bfd *templ) 984 { 985 bfd *nbfd; 986 987 nbfd = _bfd_new_bfd (); 988 if (nbfd == NULL) 989 return NULL; 990 /* PR 11983: Do not cache the original filename, but 991 rather make a copy - the original might go away. */ 992 if (!bfd_set_filename (nbfd, filename)) 993 { 994 _bfd_delete_bfd (nbfd); 995 return NULL; 996 } 997 if (templ) 998 nbfd->xvec = templ->xvec; 999 nbfd->direction = no_direction; 1000 bfd_set_format (nbfd, bfd_object); 1001 1002 return nbfd; 1003 } 1004 1005 /* 1006 FUNCTION 1007 bfd_make_writable 1008 1009 SYNOPSIS 1010 bool bfd_make_writable (bfd *abfd); 1011 1012 DESCRIPTION 1013 Takes a BFD as created by <<bfd_create>> and converts it 1014 into one like as returned by <<bfd_openw>>. It does this 1015 by converting the BFD to BFD_IN_MEMORY. It's assumed that 1016 you will call <<bfd_make_readable>> on this bfd later. 1017 1018 <<TRUE>> is returned if all is ok, otherwise <<FALSE>>. 1019 */ 1020 1021 bool 1022 bfd_make_writable (bfd *abfd) 1023 { 1024 struct bfd_in_memory *bim; 1025 1026 if (abfd->direction != no_direction) 1027 { 1028 bfd_set_error (bfd_error_invalid_operation); 1029 return false; 1030 } 1031 1032 bim = (struct bfd_in_memory *) bfd_malloc (sizeof (struct bfd_in_memory)); 1033 if (bim == NULL) 1034 return false; /* bfd_error already set. */ 1035 abfd->iostream = bim; 1036 /* bfd_write will grow these as needed. */ 1037 bim->size = 0; 1038 bim->buffer = 0; 1039 1040 abfd->flags |= BFD_IN_MEMORY; 1041 abfd->iovec = &_bfd_memory_iovec; 1042 abfd->origin = 0; 1043 abfd->direction = write_direction; 1044 abfd->where = 0; 1045 1046 return true; 1047 } 1048 1049 /* 1050 FUNCTION 1051 bfd_make_readable 1052 1053 SYNOPSIS 1054 bool bfd_make_readable (bfd *abfd); 1055 1056 DESCRIPTION 1057 Takes a BFD as created by <<bfd_create>> and 1058 <<bfd_make_writable>> and converts it into one like as 1059 returned by <<bfd_openr>>. It does this by writing the 1060 contents out to the memory buffer, then reversing the 1061 direction. 1062 1063 <<TRUE>> is returned if all is ok, otherwise <<FALSE>>. */ 1064 1065 bool 1066 bfd_make_readable (bfd *abfd) 1067 { 1068 if (abfd->direction != write_direction || !(abfd->flags & BFD_IN_MEMORY)) 1069 { 1070 bfd_set_error (bfd_error_invalid_operation); 1071 return false; 1072 } 1073 1074 if (! BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd))) 1075 return false; 1076 1077 if (! BFD_SEND (abfd, _close_and_cleanup, (abfd))) 1078 return false; 1079 1080 abfd->arch_info = &bfd_default_arch_struct; 1081 1082 abfd->where = 0; 1083 abfd->format = bfd_unknown; 1084 abfd->my_archive = NULL; 1085 abfd->origin = 0; 1086 abfd->opened_once = false; 1087 abfd->output_has_begun = false; 1088 abfd->section_count = 0; 1089 abfd->usrdata = NULL; 1090 abfd->cacheable = false; 1091 abfd->mtime_set = false; 1092 1093 abfd->target_defaulted = true; 1094 abfd->direction = read_direction; 1095 abfd->sections = 0; 1096 abfd->symcount = 0; 1097 abfd->outsymbols = 0; 1098 abfd->tdata.any = 0; 1099 abfd->size = 0; 1100 1101 bfd_section_list_clear (abfd); 1102 bfd_check_format (abfd, bfd_object); 1103 1104 return true; 1105 } 1106 1107 /* 1108 GNU Extension: separate debug-info files 1109 1110 The idea here is that a special section called .gnu_debuglink might be 1111 embedded in a binary file, which indicates that some *other* file 1112 contains the real debugging information. This special section contains a 1113 filename and CRC32 checksum, which we read and resolve to another file, 1114 if it exists. 1115 1116 This facilitates "optional" provision of debugging information, without 1117 having to provide two complete copies of every binary object (with and 1118 without debug symbols). */ 1119 1120 #define GNU_DEBUGLINK ".gnu_debuglink" 1121 #define GNU_DEBUGALTLINK ".gnu_debugaltlink" 1122 1123 /* 1124 FUNCTION 1125 bfd_calc_gnu_debuglink_crc32 1126 1127 SYNOPSIS 1128 uint32_t bfd_calc_gnu_debuglink_crc32 1129 (uint32_t crc, const bfd_byte *buf, bfd_size_type len); 1130 1131 DESCRIPTION 1132 Computes a CRC value as used in the .gnu_debuglink section. 1133 Advances the previously computed @var{crc} value by computing 1134 and adding in the crc32 for @var{len} bytes of @var{buf}. 1135 1136 Return the updated CRC32 value. 1137 */ 1138 1139 uint32_t 1140 bfd_calc_gnu_debuglink_crc32 (uint32_t crc, 1141 const bfd_byte *buf, 1142 bfd_size_type len) 1143 { 1144 static const uint32_t crc32_table[256] = 1145 { 1146 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 1147 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 1148 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 1149 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 1150 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 1151 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 1152 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 1153 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 1154 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 1155 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 1156 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 1157 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 1158 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 1159 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 1160 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 1161 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 1162 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 1163 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 1164 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 1165 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 1166 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 1167 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 1168 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 1169 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 1170 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 1171 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 1172 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 1173 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 1174 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 1175 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 1176 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 1177 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 1178 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 1179 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 1180 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 1181 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 1182 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 1183 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 1184 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 1185 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 1186 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 1187 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 1188 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 1189 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 1190 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 1191 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 1192 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 1193 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 1194 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 1195 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 1196 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 1197 0x2d02ef8d 1198 }; 1199 const bfd_byte *end; 1200 1201 crc = ~crc & 0xffffffff; 1202 for (end = buf + len; buf < end; ++ buf) 1203 crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8); 1204 return ~crc & 0xffffffff; 1205 } 1206 1207 1208 /* Extracts the filename and CRC32 value for any separate debug 1209 information file associated with @var{abfd}. 1210 1211 The @var{crc32_out} parameter is an untyped pointer because 1212 this routine is used as a @code{get_func_type} function, but it 1213 is expected to be a uint32_t pointer. 1214 1215 Returns the filename of the associated debug information file, 1216 or NULL if there is no such file. If the filename was found 1217 then the contents of @var{crc32_out} are updated to hold the 1218 corresponding CRC32 value for the file. 1219 1220 The returned filename is allocated with @code{malloc}; freeing 1221 it is the responsibility of the caller. */ 1222 1223 static char * 1224 bfd_get_debug_link_info_1 (bfd *abfd, void *crc32_out) 1225 { 1226 asection *sect; 1227 uint32_t *crc32 = crc32_out; 1228 bfd_byte *contents; 1229 unsigned int crc_offset; 1230 char *name; 1231 bfd_size_type size; 1232 1233 BFD_ASSERT (abfd); 1234 BFD_ASSERT (crc32_out); 1235 1236 sect = bfd_get_section_by_name (abfd, GNU_DEBUGLINK); 1237 1238 if (sect == NULL || (sect->flags & SEC_HAS_CONTENTS) == 0) 1239 return NULL; 1240 1241 size = bfd_section_size (sect); 1242 1243 /* PR 22794: Make sure that the section has a reasonable size. */ 1244 if (size < 8) 1245 return NULL; 1246 1247 if (!bfd_malloc_and_get_section (abfd, sect, &contents)) 1248 return NULL; 1249 1250 /* CRC value is stored after the filename, aligned up to 4 bytes. */ 1251 name = (char *) contents; 1252 /* PR 17597: Avoid reading off the end of the buffer. */ 1253 crc_offset = strnlen (name, size) + 1; 1254 crc_offset = (crc_offset + 3) & ~3; 1255 if (crc_offset + 4 > size) 1256 { 1257 free (name); 1258 return NULL; 1259 } 1260 1261 *crc32 = bfd_get_32 (abfd, contents + crc_offset); 1262 return name; 1263 } 1264 1265 1266 /* 1267 FUNCTION 1268 bfd_get_debug_link_info 1269 1270 SYNOPSIS 1271 char *bfd_get_debug_link_info (bfd *abfd, uint32_t *crc32_out); 1272 1273 DESCRIPTION 1274 Extracts the filename and CRC32 value for any separate debug 1275 information file associated with @var{abfd}. 1276 1277 Returns the filename of the associated debug information file, 1278 or NULL if there is no such file. If the filename was found 1279 then the contents of @var{crc32_out} are updated to hold the 1280 corresponding CRC32 value for the file. 1281 1282 The returned filename is allocated with @code{malloc}; freeing 1283 it is the responsibility of the caller. 1284 */ 1285 1286 char * 1287 bfd_get_debug_link_info (bfd *abfd, uint32_t *crc32_out) 1288 { 1289 return bfd_get_debug_link_info_1 (abfd, crc32_out); 1290 } 1291 1292 /* 1293 FUNCTION 1294 bfd_get_alt_debug_link_info 1295 1296 SYNOPSIS 1297 char *bfd_get_alt_debug_link_info (bfd * abfd, 1298 bfd_size_type *buildid_len, 1299 bfd_byte **buildid_out); 1300 1301 DESCRIPTION 1302 Fetch the filename and BuildID value for any alternate debuginfo 1303 associated with @var{abfd}. Return NULL if no such info found, 1304 otherwise return filename and update @var{buildid_len} and 1305 @var{buildid_out}. The returned filename and build_id are 1306 allocated with @code{malloc}; freeing them is the responsibility 1307 of the caller. 1308 */ 1309 1310 char * 1311 bfd_get_alt_debug_link_info (bfd * abfd, bfd_size_type *buildid_len, 1312 bfd_byte **buildid_out) 1313 { 1314 asection *sect; 1315 bfd_byte *contents; 1316 unsigned int buildid_offset; 1317 char *name; 1318 bfd_size_type size; 1319 1320 BFD_ASSERT (abfd); 1321 BFD_ASSERT (buildid_len); 1322 BFD_ASSERT (buildid_out); 1323 1324 sect = bfd_get_section_by_name (abfd, GNU_DEBUGALTLINK); 1325 1326 if (sect == NULL || (sect->flags & SEC_HAS_CONTENTS) == 0) 1327 return NULL; 1328 1329 size = bfd_section_size (sect); 1330 if (size < 8) 1331 return NULL; 1332 1333 if (!bfd_malloc_and_get_section (abfd, sect, & contents)) 1334 return NULL; 1335 1336 /* BuildID value is stored after the filename. */ 1337 name = (char *) contents; 1338 buildid_offset = strnlen (name, size) + 1; 1339 if (buildid_offset >= bfd_section_size (sect)) 1340 return NULL; 1341 1342 *buildid_len = size - buildid_offset; 1343 *buildid_out = bfd_malloc (*buildid_len); 1344 memcpy (*buildid_out, contents + buildid_offset, *buildid_len); 1345 1346 return name; 1347 } 1348 1349 /* Checks to see if @var{name} is a file and if its contents match 1350 @var{crc32}, which is a pointer to a @code{uint32_t} 1351 containing a CRC32. 1352 1353 The @var{crc32_p} parameter is an untyped pointer because this 1354 routine is used as a @code{check_func_type} function. */ 1355 1356 static bool 1357 separate_debug_file_exists (const char *name, void *crc32_p) 1358 { 1359 unsigned char buffer[8 * 1024]; 1360 uint32_t file_crc = 0; 1361 FILE *f; 1362 bfd_size_type count; 1363 uint32_t crc; 1364 1365 BFD_ASSERT (name); 1366 BFD_ASSERT (crc32_p); 1367 1368 crc = *(uint32_t *) crc32_p; 1369 1370 f = _bfd_real_fopen (name, FOPEN_RB); 1371 if (f == NULL) 1372 return false; 1373 1374 while ((count = fread (buffer, 1, sizeof (buffer), f)) > 0) 1375 file_crc = bfd_calc_gnu_debuglink_crc32 (file_crc, buffer, count); 1376 1377 fclose (f); 1378 1379 return crc == file_crc; 1380 } 1381 1382 /* Checks to see if @var{name} is a file. */ 1383 1384 static bool 1385 separate_alt_debug_file_exists (const char *name, void *unused ATTRIBUTE_UNUSED) 1386 { 1387 FILE *f; 1388 1389 BFD_ASSERT (name); 1390 1391 f = _bfd_real_fopen (name, FOPEN_RB); 1392 if (f == NULL) 1393 return false; 1394 1395 fclose (f); 1396 1397 return true; 1398 } 1399 1400 /* Searches for a debug information file corresponding to @var{abfd}. 1401 1402 The name of the separate debug info file is returned by the 1403 @var{get} function. This function scans various fixed locations 1404 in the filesystem, including the file tree rooted at @var{dir}. 1405 If the @var{include_dirs} parameter is true then the directory 1406 components of @var{abfd}'s filename will be included in the 1407 searched locations. 1408 1409 @var{data} is passed unmodified to the @var{get} and @var{check} 1410 functions. It is generally used to implement build-id-like 1411 matching in the callback functions. 1412 1413 Returns the filename of the first file to be found which 1414 receives a TRUE result from the @var{check} function. 1415 Returns NULL if no valid file could be found. */ 1416 1417 typedef char * (*get_func_type) (bfd *, void *); 1418 typedef bool (*check_func_type) (const char *, void *); 1419 1420 static char * 1421 find_separate_debug_file (bfd *abfd, 1422 const char *debug_file_directory, 1423 bool include_dirs, 1424 get_func_type get_func, 1425 check_func_type check_func, 1426 void *func_data) 1427 { 1428 char *base; 1429 char *dir; 1430 char *debugfile; 1431 char *canon_dir; 1432 size_t dirlen; 1433 size_t canon_dirlen; 1434 1435 BFD_ASSERT (abfd); 1436 if (debug_file_directory == NULL) 1437 debug_file_directory = "."; 1438 1439 /* BFD may have been opened from a stream. */ 1440 if (bfd_get_filename (abfd) == NULL) 1441 { 1442 bfd_set_error (bfd_error_invalid_operation); 1443 return NULL; 1444 } 1445 1446 base = get_func (abfd, func_data); 1447 1448 if (base == NULL) 1449 return NULL; 1450 1451 if (base[0] == '\0') 1452 { 1453 free (base); 1454 bfd_set_error (bfd_error_no_debug_section); 1455 return NULL; 1456 } 1457 1458 if (include_dirs) 1459 { 1460 const char *fname = bfd_get_filename (abfd); 1461 for (dirlen = strlen (fname); dirlen > 0; dirlen--) 1462 if (IS_DIR_SEPARATOR (fname[dirlen - 1])) 1463 break; 1464 1465 dir = (char *) bfd_malloc (dirlen + 1); 1466 if (dir == NULL) 1467 { 1468 free (base); 1469 return NULL; 1470 } 1471 memcpy (dir, fname, dirlen); 1472 dir[dirlen] = '\0'; 1473 } 1474 else 1475 { 1476 dir = (char *) bfd_malloc (1); 1477 * dir = 0; 1478 dirlen = 0; 1479 } 1480 1481 /* Compute the canonical name of the bfd object with all symbolic links 1482 resolved, for use in the global debugfile directory. */ 1483 canon_dir = lrealpath (bfd_get_filename (abfd)); 1484 for (canon_dirlen = strlen (canon_dir); canon_dirlen > 0; canon_dirlen--) 1485 if (IS_DIR_SEPARATOR (canon_dir[canon_dirlen - 1])) 1486 break; 1487 canon_dir[canon_dirlen] = '\0'; 1488 1489 #ifndef EXTRA_DEBUG_ROOT1 1490 #define EXTRA_DEBUG_ROOT1 "/usr/lib/debug" 1491 #endif 1492 #ifndef EXTRA_DEBUG_ROOT2 1493 #define EXTRA_DEBUG_ROOT2 "/usr/lib/debug/usr" 1494 #endif 1495 1496 debugfile = (char *) 1497 bfd_malloc (strlen (debug_file_directory) + 1 1498 + (canon_dirlen > dirlen ? canon_dirlen : dirlen) 1499 + strlen (".debug/") 1500 #ifdef EXTRA_DEBUG_ROOT1 1501 + strlen (EXTRA_DEBUG_ROOT1) 1502 #endif 1503 #ifdef EXTRA_DEBUG_ROOT2 1504 + strlen (EXTRA_DEBUG_ROOT2) 1505 #endif 1506 + strlen (base) 1507 + 1); 1508 if (debugfile == NULL) 1509 goto found; /* Actually this returns NULL. */ 1510 1511 /* First try in the same directory as the original file. 1512 1513 FIXME: Strictly speaking if we are using the build-id method, 1514 (ie include_dirs == FALSE) then we should only check absolute 1515 paths, not relative ones like this one (and the next one). 1516 The check is left in however as this allows the binutils 1517 testsuite to exercise this feature without having to install 1518 a file into the root filesystem. (See binutils/testsuite/ 1519 binutils-all/objdump.exp for the test). */ 1520 sprintf (debugfile, "%s%s", dir, base); 1521 if (check_func (debugfile, func_data)) 1522 goto found; 1523 1524 /* Then try in a subdirectory called .debug. */ 1525 sprintf (debugfile, "%s.debug/%s", dir, base); 1526 if (check_func (debugfile, func_data)) 1527 goto found; 1528 1529 #ifdef EXTRA_DEBUG_ROOT1 1530 /* Try the first extra debug file root. */ 1531 sprintf (debugfile, "%s%s%s", EXTRA_DEBUG_ROOT1, 1532 include_dirs ? canon_dir : "/", base); 1533 if (check_func (debugfile, func_data)) 1534 goto found; 1535 #endif 1536 1537 #ifdef EXTRA_DEBUG_ROOT2 1538 /* Try the second extra debug file root. */ 1539 sprintf (debugfile, "%s%s%s", EXTRA_DEBUG_ROOT2, 1540 include_dirs ? canon_dir : "/", base); 1541 if (check_func (debugfile, func_data)) 1542 goto found; 1543 #endif 1544 1545 /* Then try in the global debugfile directory. */ 1546 strcpy (debugfile, debug_file_directory); 1547 dirlen = strlen (debug_file_directory) - 1; 1548 if (include_dirs) 1549 { 1550 if (dirlen > 0 1551 && debug_file_directory[dirlen] != '/' 1552 && canon_dir[0] != '/') 1553 strcat (debugfile, "/"); 1554 strcat (debugfile, canon_dir); 1555 } 1556 else 1557 { 1558 if (dirlen > 0 && debug_file_directory[dirlen] != '/') 1559 strcat (debugfile, "/"); 1560 } 1561 strcat (debugfile, base); 1562 1563 if (check_func (debugfile, func_data)) 1564 goto found; 1565 1566 /* Failed to find the file. */ 1567 free (debugfile); 1568 debugfile = NULL; 1569 1570 found: 1571 free (base); 1572 free (dir); 1573 free (canon_dir); 1574 return debugfile; 1575 } 1576 1577 /* 1578 FUNCTION 1579 bfd_follow_gnu_debuglink 1580 1581 SYNOPSIS 1582 char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir); 1583 1584 DESCRIPTION 1585 Takes a BFD and searches it for a .gnu_debuglink section. If this 1586 section is found, it examines the section for the name and checksum 1587 of a '.debug' file containing auxiliary debugging information. It 1588 then searches the filesystem for this .debug file in some standard 1589 locations, including the directory tree rooted at @var{dir}, and if 1590 found returns the full filename. 1591 1592 If @var{dir} is NULL, the search will take place starting at 1593 the current directory. 1594 1595 Returns <<NULL>> on any errors or failure to locate the .debug 1596 file, otherwise a pointer to a heap-allocated string 1597 containing the filename. The caller is responsible for 1598 freeing this string. 1599 */ 1600 1601 char * 1602 bfd_follow_gnu_debuglink (bfd *abfd, const char *dir) 1603 { 1604 uint32_t crc32; 1605 1606 return find_separate_debug_file (abfd, dir, true, 1607 bfd_get_debug_link_info_1, 1608 separate_debug_file_exists, &crc32); 1609 } 1610 1611 /* Helper for bfd_follow_gnu_debugaltlink. It just returns the name 1612 of the separate debug file. */ 1613 1614 static char * 1615 get_alt_debug_link_info_shim (bfd * abfd, void *unused ATTRIBUTE_UNUSED) 1616 { 1617 bfd_size_type len; 1618 bfd_byte *buildid = NULL; 1619 char *result = bfd_get_alt_debug_link_info (abfd, &len, &buildid); 1620 1621 free (buildid); 1622 1623 return result; 1624 } 1625 1626 /* 1627 FUNCTION 1628 bfd_follow_gnu_debugaltlink 1629 1630 SYNOPSIS 1631 char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir); 1632 1633 DESCRIPTION 1634 Takes a BFD and searches it for a .gnu_debugaltlink section. If this 1635 section is found, it examines the section for the name of a file 1636 containing auxiliary debugging information. It then searches the 1637 filesystem for this file in a set of standard locations, including 1638 the directory tree rooted at @var{dir}, and if found returns the 1639 full filename. 1640 1641 If @var{dir} is NULL, the search will take place starting at 1642 the current directory. 1643 1644 Returns <<NULL>> on any errors or failure to locate the debug 1645 file, otherwise a pointer to a heap-allocated string 1646 containing the filename. The caller is responsible for 1647 freeing this string. 1648 */ 1649 1650 char * 1651 bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir) 1652 { 1653 return find_separate_debug_file (abfd, dir, true, 1654 get_alt_debug_link_info_shim, 1655 separate_alt_debug_file_exists, 1656 NULL); 1657 } 1658 1659 /* 1660 FUNCTION 1661 bfd_create_gnu_debuglink_section 1662 1663 SYNOPSIS 1664 struct bfd_section *bfd_create_gnu_debuglink_section 1665 (bfd *abfd, const char *filename); 1666 1667 DESCRIPTION 1668 Takes a @var{BFD} and adds a .gnu_debuglink section to it. The 1669 section is sized to be big enough to contain a link to the specified 1670 @var{filename}. 1671 1672 A pointer to the new section is returned if all is ok. Otherwise 1673 <<NULL>> is returned and bfd_error is set. 1674 */ 1675 1676 asection * 1677 bfd_create_gnu_debuglink_section (bfd *abfd, const char *filename) 1678 { 1679 asection *sect; 1680 bfd_size_type debuglink_size; 1681 flagword flags; 1682 1683 if (abfd == NULL || filename == NULL) 1684 { 1685 bfd_set_error (bfd_error_invalid_operation); 1686 return NULL; 1687 } 1688 1689 /* Strip off any path components in filename. */ 1690 filename = lbasename (filename); 1691 1692 sect = bfd_get_section_by_name (abfd, GNU_DEBUGLINK); 1693 if (sect) 1694 { 1695 /* Section already exists. */ 1696 bfd_set_error (bfd_error_invalid_operation); 1697 return NULL; 1698 } 1699 1700 flags = SEC_HAS_CONTENTS | SEC_READONLY | SEC_DEBUGGING; 1701 sect = bfd_make_section_with_flags (abfd, GNU_DEBUGLINK, flags); 1702 if (sect == NULL) 1703 return NULL; 1704 1705 /* Compute the size of the section. Allow for the CRC after the filename, 1706 and padding so that it will start on a 4-byte boundary. */ 1707 debuglink_size = strlen (filename) + 1; 1708 debuglink_size += 3; 1709 debuglink_size &= ~3; 1710 debuglink_size += 4; 1711 1712 if (!bfd_set_section_size (sect, debuglink_size)) 1713 /* XXX Should we delete the section from the bfd ? */ 1714 return NULL; 1715 1716 /* PR 21193: Ensure that the section has 4-byte alignment for the CRC. 1717 Note - despite the name of the function being called, we are 1718 setting an alignment power, not a byte alignment value. */ 1719 bfd_set_section_alignment (sect, 2); 1720 1721 return sect; 1722 } 1723 1724 1725 /* 1726 FUNCTION 1727 bfd_fill_in_gnu_debuglink_section 1728 1729 SYNOPSIS 1730 bool bfd_fill_in_gnu_debuglink_section 1731 (bfd *abfd, struct bfd_section *sect, const char *filename); 1732 1733 DESCRIPTION 1734 Takes a @var{BFD} and containing a .gnu_debuglink section @var{SECT} 1735 and fills in the contents of the section to contain a link to the 1736 specified @var{filename}. The filename should be absolute or 1737 relative to the current directory. 1738 1739 <<TRUE>> is returned if all is ok. Otherwise <<FALSE>> is returned 1740 and bfd_error is set. 1741 */ 1742 1743 bool 1744 bfd_fill_in_gnu_debuglink_section (bfd *abfd, 1745 struct bfd_section *sect, 1746 const char *filename) 1747 { 1748 bfd_size_type debuglink_size; 1749 uint32_t crc32; 1750 char * contents; 1751 bfd_size_type crc_offset; 1752 FILE * handle; 1753 unsigned char buffer[8 * 1024]; 1754 size_t count; 1755 size_t filelen; 1756 1757 if (abfd == NULL || sect == NULL || filename == NULL) 1758 { 1759 bfd_set_error (bfd_error_invalid_operation); 1760 return false; 1761 } 1762 1763 /* Open the linked file so that we can compute a CRC. */ 1764 handle = _bfd_real_fopen (filename, FOPEN_RB); 1765 if (handle == NULL) 1766 { 1767 bfd_set_error (bfd_error_system_call); 1768 return false; 1769 } 1770 1771 crc32 = 0; 1772 while ((count = fread (buffer, 1, sizeof buffer, handle)) > 0) 1773 crc32 = bfd_calc_gnu_debuglink_crc32 (crc32, buffer, count); 1774 fclose (handle); 1775 1776 /* Strip off any path components in filename, 1777 now that we no longer need them. */ 1778 filename = lbasename (filename); 1779 1780 filelen = strlen (filename); 1781 debuglink_size = filelen + 1; 1782 debuglink_size += 3; 1783 debuglink_size &= ~3; 1784 debuglink_size += 4; 1785 1786 contents = (char *) bfd_malloc (debuglink_size); 1787 if (contents == NULL) 1788 { 1789 /* XXX Should we delete the section from the bfd ? */ 1790 return false; 1791 } 1792 1793 crc_offset = debuglink_size - 4; 1794 memcpy (contents, filename, filelen); 1795 memset (contents + filelen, 0, crc_offset - filelen); 1796 1797 bfd_put_32 (abfd, crc32, contents + crc_offset); 1798 1799 if (! bfd_set_section_contents (abfd, sect, contents, 0, debuglink_size)) 1800 { 1801 /* XXX Should we delete the section from the bfd ? */ 1802 free (contents); 1803 return false; 1804 } 1805 1806 return true; 1807 } 1808 1809 /* Finds the build-id associated with @var{abfd}. If the build-id is 1810 extracted from the note section then a build-id structure is built 1811 for it, using memory allocated to @var{abfd}, and this is then 1812 attached to the @var{abfd}. 1813 1814 Returns a pointer to the build-id structure if a build-id could be 1815 found. If no build-id is found NULL is returned and error code is 1816 set. */ 1817 1818 static struct bfd_build_id * 1819 get_build_id (bfd *abfd) 1820 { 1821 struct bfd_build_id *build_id; 1822 Elf_Internal_Note inote; 1823 Elf_External_Note *enote; 1824 bfd_byte *contents; 1825 asection *sect; 1826 bfd_size_type size; 1827 1828 BFD_ASSERT (abfd); 1829 1830 if (abfd->build_id && abfd->build_id->size > 0) 1831 /* Save some time by using the already computed build-id. */ 1832 return (struct bfd_build_id *) abfd->build_id; 1833 1834 sect = bfd_get_section_by_name (abfd, ".note.gnu.build-id"); 1835 if (sect == NULL 1836 || (sect->flags & SEC_HAS_CONTENTS) == 0) 1837 { 1838 bfd_set_error (bfd_error_no_debug_section); 1839 return NULL; 1840 } 1841 1842 size = bfd_section_size (sect); 1843 /* FIXME: Should we support smaller build-id notes ? */ 1844 if (size < 0x24) 1845 { 1846 bfd_set_error (bfd_error_invalid_operation); 1847 return NULL; 1848 } 1849 1850 if (!bfd_malloc_and_get_section (abfd, sect, & contents)) 1851 return NULL; 1852 1853 /* FIXME: Paranoia - allow for compressed build-id sections. 1854 Maybe we should complain if this size is different from 1855 the one obtained above... */ 1856 size = bfd_section_size (sect); 1857 if (size < sizeof (Elf_External_Note)) 1858 { 1859 bfd_set_error (bfd_error_invalid_operation); 1860 free (contents); 1861 return NULL; 1862 } 1863 1864 enote = (Elf_External_Note *) contents; 1865 inote.type = H_GET_32 (abfd, enote->type); 1866 inote.namesz = H_GET_32 (abfd, enote->namesz); 1867 inote.namedata = enote->name; 1868 inote.descsz = H_GET_32 (abfd, enote->descsz); 1869 inote.descdata = inote.namedata + BFD_ALIGN (inote.namesz, 4); 1870 /* FIXME: Should we check for extra notes in this section ? */ 1871 1872 if (inote.descsz <= 0 1873 || inote.type != NT_GNU_BUILD_ID 1874 || inote.namesz != 4 /* sizeof "GNU" */ 1875 || !startswith (inote.namedata, "GNU") 1876 || inote.descsz > 0x7ffffffe 1877 || size < (12 + BFD_ALIGN (inote.namesz, 4) + inote.descsz)) 1878 { 1879 free (contents); 1880 bfd_set_error (bfd_error_invalid_operation); 1881 return NULL; 1882 } 1883 1884 build_id = bfd_alloc (abfd, sizeof (struct bfd_build_id) + inote.descsz); 1885 if (build_id == NULL) 1886 { 1887 free (contents); 1888 return NULL; 1889 } 1890 1891 build_id->size = inote.descsz; 1892 memcpy (build_id->data, inote.descdata, inote.descsz); 1893 abfd->build_id = build_id; 1894 free (contents); 1895 1896 return build_id; 1897 } 1898 1899 /* Searches @var{abfd} for a build-id, and then constructs a pathname 1900 from it. The path is computed as .build-id/NN/NN+NN.debug where 1901 NNNN+NN is the build-id value as a hexadecimal string. 1902 1903 Returns the constructed filename or NULL upon error. It is the 1904 caller's responsibility to free the memory used to hold the 1905 filename. If a filename is returned then the @var{build_id_out_p} 1906 parameter (which points to a @code{struct bfd_build_id} pointer) is 1907 set to a pointer to the build_id structure. */ 1908 1909 static char * 1910 get_build_id_name (bfd *abfd, void *build_id_out_p) 1911 { 1912 struct bfd_build_id **build_id_out = build_id_out_p; 1913 struct bfd_build_id *build_id; 1914 char *name; 1915 char *n; 1916 bfd_size_type s; 1917 bfd_byte *d; 1918 1919 if (abfd == NULL || bfd_get_filename (abfd) == NULL || build_id_out == NULL) 1920 { 1921 bfd_set_error (bfd_error_invalid_operation); 1922 return NULL; 1923 } 1924 1925 build_id = get_build_id (abfd); 1926 if (build_id == NULL) 1927 return NULL; 1928 1929 /* Compute the debug pathname corresponding to the build-id. */ 1930 name = bfd_malloc (strlen (".build-id/") + build_id->size * 2 + 2 + strlen (".debug")); 1931 if (name == NULL) 1932 { 1933 bfd_set_error (bfd_error_no_memory); 1934 return NULL; 1935 } 1936 n = name; 1937 d = build_id->data; 1938 s = build_id->size; 1939 1940 n += sprintf (n, ".build-id/"); 1941 n += sprintf (n, "%02x", (unsigned) *d++); s--; 1942 n += sprintf (n, "/"); 1943 while (s--) 1944 n += sprintf (n, "%02x", (unsigned) *d++); 1945 n += sprintf (n, ".debug"); 1946 1947 *build_id_out = build_id; 1948 return name; 1949 } 1950 1951 /* Checks to see if @var{name} is a readable file and if its build-id 1952 matches @var{buildid}. 1953 1954 Returns TRUE if the file exists, is readable, and contains a 1955 build-id which matches the build-id pointed at by @var{build_id_p} 1956 (which is really a @code{struct bfd_build_id **}). */ 1957 1958 static bool 1959 check_build_id_file (const char *name, void *buildid_p) 1960 { 1961 struct bfd_build_id *orig_build_id; 1962 struct bfd_build_id *build_id; 1963 bfd * file; 1964 bool result; 1965 1966 BFD_ASSERT (name); 1967 BFD_ASSERT (buildid_p); 1968 1969 file = bfd_openr (name, NULL); 1970 if (file == NULL) 1971 return false; 1972 1973 /* If the file is an archive, process all of its elements. */ 1974 if (! bfd_check_format (file, bfd_object)) 1975 { 1976 bfd_close (file); 1977 return false; 1978 } 1979 1980 build_id = get_build_id (file); 1981 if (build_id == NULL) 1982 { 1983 bfd_close (file); 1984 return false; 1985 } 1986 1987 orig_build_id = *(struct bfd_build_id **) buildid_p; 1988 1989 result = build_id->size == orig_build_id->size 1990 && memcmp (build_id->data, orig_build_id->data, build_id->size) == 0; 1991 1992 (void) bfd_close (file); 1993 1994 return result; 1995 } 1996 1997 /* 1998 FUNCTION 1999 bfd_follow_build_id_debuglink 2000 2001 SYNOPSIS 2002 char *bfd_follow_build_id_debuglink (bfd *abfd, const char *dir); 2003 2004 DESCRIPTION 2005 Takes @var{abfd} and searches it for a .note.gnu.build-id section. 2006 If this section is found, it extracts the value of the NT_GNU_BUILD_ID 2007 note, which should be a hexadecimal value @var{NNNN+NN} (for 2008 32+ hex digits). It then searches the filesystem for a file named 2009 @var{.build-id/NN/NN+NN.debug} in a set of standard locations, 2010 including the directory tree rooted at @var{dir}. The filename 2011 of the first matching file to be found is returned. A matching 2012 file should contain a .note.gnu.build-id section with the same 2013 @var{NNNN+NN} note as @var{abfd}, although this check is currently 2014 not implemented. 2015 2016 If @var{dir} is NULL, the search will take place starting at 2017 the current directory. 2018 2019 Returns <<NULL>> on any errors or failure to locate the debug 2020 file, otherwise a pointer to a heap-allocated string 2021 containing the filename. The caller is responsible for 2022 freeing this string. 2023 */ 2024 2025 char * 2026 bfd_follow_build_id_debuglink (bfd *abfd, const char *dir) 2027 { 2028 struct bfd_build_id *build_id; 2029 2030 return find_separate_debug_file (abfd, dir, false, 2031 get_build_id_name, 2032 check_build_id_file, &build_id); 2033 } 2034 2035 /* 2036 FUNCTION 2037 bfd_set_filename 2038 2039 SYNOPSIS 2040 const char *bfd_set_filename (bfd *abfd, const char *filename); 2041 2042 DESCRIPTION 2043 Set the filename of @var{abfd}, copying the FILENAME parameter to 2044 bfd_alloc'd memory owned by @var{abfd}. Returns a pointer the 2045 newly allocated name, or NULL if the allocation failed. 2046 */ 2047 2048 const char * 2049 bfd_set_filename (bfd *abfd, const char *filename) 2050 { 2051 size_t len = strlen (filename) + 1; 2052 char *n = bfd_alloc (abfd, len); 2053 2054 if (n == NULL) 2055 return NULL; 2056 2057 if (abfd->filename != NULL) 2058 { 2059 /* PR 29389. If we attempt to rename a file that has been closed due 2060 to caching, then we will not be able to reopen it later on. */ 2061 if (abfd->iostream == NULL && (abfd->flags & BFD_CLOSED_BY_CACHE)) 2062 { 2063 bfd_set_error (bfd_error_invalid_operation); 2064 return NULL; 2065 } 2066 2067 /* Similarly if we attempt to close a renamed file because the 2068 cache is now full, we will not be able to reopen it later on. */ 2069 if (abfd->iostream != NULL) 2070 abfd->cacheable = 0; 2071 } 2072 2073 memcpy (n, filename, len); 2074 abfd->filename = n; 2075 2076 return n; 2077 } 2078