Home | History | Annotate | Line # | Download | only in bfd
opncls.c revision 1.1.1.9
      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.
    767    Returns a pointer to a freshly-allocated BFD on success, or NULL.
    768 
    769    See comment by bfd_fdopenr before you try to modify this function.  */
    770 
    771 /*
    772 FUNCTION
    773 	bfd_openw
    774 
    775 SYNOPSIS
    776 	bfd *bfd_openw (const char *filename, const char *target);
    777 
    778 DESCRIPTION
    779 	Create a BFD, associated with file @var{filename}, using the
    780 	file format @var{target}, and return a pointer to it.
    781 
    782 	Possible errors are <<bfd_error_system_call>>, <<bfd_error_no_memory>>,
    783 	<<bfd_error_invalid_target>>.
    784 
    785 	A copy of the @var{filename} argument is stored in the newly created
    786 	BFD.  It can be accessed via the bfd_get_filename() macro.
    787 */
    788 
    789 bfd *
    790 bfd_openw (const char *filename, const char *target)
    791 {
    792   bfd *nbfd;
    793   const bfd_target *target_vec;
    794 
    795   /* nbfd has to point to head of malloc'ed block so that bfd_close may
    796      reclaim it correctly.  */
    797   nbfd = _bfd_new_bfd ();
    798   if (nbfd == NULL)
    799     return NULL;
    800 
    801   target_vec = bfd_find_target (target, nbfd);
    802   if (target_vec == NULL)
    803     {
    804       _bfd_delete_bfd (nbfd);
    805       return NULL;
    806     }
    807 
    808   /* PR 11983: Do not cache the original filename, but
    809      rather make a copy - the original might go away.  */
    810   if (!bfd_set_filename (nbfd, filename))
    811     {
    812       _bfd_delete_bfd (nbfd);
    813       return NULL;
    814     }
    815   nbfd->direction = write_direction;
    816 
    817   if (bfd_open_file (nbfd) == NULL)
    818     {
    819       /* File not writeable, etc.  */
    820       bfd_set_error (bfd_error_system_call);
    821       _bfd_delete_bfd (nbfd);
    822       return NULL;
    823   }
    824 
    825   return nbfd;
    826 }
    827 
    828 /*
    829 FUNCTION
    830 	bfd_elf_bfd_from_remote_memory
    831 
    832 SYNOPSIS
    833 	bfd *bfd_elf_bfd_from_remote_memory
    834 	  (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
    835 	   int (*target_read_memory)
    836 	     (bfd_vma vma, bfd_byte *myaddr, bfd_size_type len));
    837 
    838 DESCRIPTION
    839 	Create a new BFD as if by bfd_openr.  Rather than opening a
    840 	file, reconstruct an ELF file by reading the segments out of
    841 	remote memory based on the ELF file header at EHDR_VMA and the
    842 	ELF program headers it points to.  If non-zero, SIZE is the
    843 	known extent of the object.  If not null, *LOADBASEP is filled
    844 	in with the difference between the VMAs from which the
    845 	segments were read, and the VMAs the file headers (and hence
    846 	BFD's idea of each section's VMA) put them at.
    847 
    848 	The function TARGET_READ_MEMORY is called to copy LEN bytes
    849 	from the remote memory at target address VMA into the local
    850 	buffer at MYADDR; it should return zero on success or an
    851 	errno code on failure.  TEMPL must be a BFD for an ELF
    852 	target with the word size and byte order found in the remote
    853 	memory.
    854 */
    855 
    856 bfd *
    857 bfd_elf_bfd_from_remote_memory
    858   (bfd *templ,
    859    bfd_vma ehdr_vma,
    860    bfd_size_type size,
    861    bfd_vma *loadbasep,
    862    int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
    863 {
    864   if (bfd_get_flavour (templ) != bfd_target_elf_flavour)
    865     {
    866       bfd_set_error (bfd_error_invalid_operation);
    867       return NULL;
    868     }
    869   return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
    870     (templ, ehdr_vma, size, loadbasep, target_read_memory);
    871 }
    872 
    873 static inline void
    874 _maybe_make_executable (bfd * abfd)
    875 {
    876   /* If the file was open for writing and is now executable,
    877      make it so.  */
    878   if (abfd->direction == write_direction
    879       && (abfd->flags & (EXEC_P | DYNAMIC)) != 0)
    880     {
    881       struct stat buf;
    882 
    883       if (stat (bfd_get_filename (abfd), &buf) == 0
    884 	  /* Do not attempt to change non-regular files.  This is
    885 	     here especially for configure scripts and kernel builds
    886 	     which run tests with "ld [...] -o /dev/null".  */
    887 	  && S_ISREG(buf.st_mode))
    888 	{
    889 	  unsigned int mask = umask (0);
    890 
    891 	  umask (mask);
    892 	  chmod (bfd_get_filename (abfd),
    893 		 (0777
    894 		  & (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask))));
    895 	}
    896     }
    897 }
    898 
    899 /*
    900 FUNCTION
    901 	bfd_close
    902 
    903 SYNOPSIS
    904 	bool bfd_close (bfd *abfd);
    905 
    906 DESCRIPTION
    907 	Close a BFD. If the BFD was open for writing, then pending
    908 	operations are completed and the file written out and closed.
    909 	If the created file is executable, then <<chmod>> is called
    910 	to mark it as such.
    911 
    912 	All memory attached to the BFD is released.
    913 
    914 	The file descriptor associated with the BFD is closed (even
    915 	if it was passed in to BFD by <<bfd_fdopenr>>).
    916 
    917 	<<TRUE>> is returned if all is ok, otherwise <<FALSE>>.
    918 */
    919 
    920 bool
    921 bfd_close (bfd *abfd)
    922 {
    923   bool ret = (!bfd_write_p (abfd)
    924 	      || BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd)));
    925 
    926   return bfd_close_all_done (abfd) && ret;
    927 }
    928 
    929 /*
    930 FUNCTION
    931 	bfd_close_all_done
    932 
    933 SYNOPSIS
    934 	bool bfd_close_all_done (bfd *);
    935 
    936 DESCRIPTION
    937 	Close a BFD.  Differs from <<bfd_close>> since it does not
    938 	complete any pending operations.  This routine would be used
    939 	if the application had just used BFD for swapping and didn't
    940 	want to use any of the writing code.
    941 
    942 	If the created file is executable, then <<chmod>> is called
    943 	to mark it as such.
    944 
    945 	All memory attached to the BFD is released.
    946 
    947 	<<TRUE>> is returned if all is ok, otherwise <<FALSE>>.
    948 */
    949 
    950 bool
    951 bfd_close_all_done (bfd *abfd)
    952 {
    953   bool ret = BFD_SEND (abfd, _close_and_cleanup, (abfd));
    954 
    955   if (abfd->iovec != NULL)
    956     ret &= abfd->iovec->bclose (abfd) == 0;
    957 
    958   if (ret)
    959     _maybe_make_executable (abfd);
    960 
    961   _bfd_delete_bfd (abfd);
    962   _bfd_clear_error_data ();
    963 
    964   return ret;
    965 }
    966 
    967 /*
    968 FUNCTION
    969 	bfd_create
    970 
    971 SYNOPSIS
    972 	bfd *bfd_create (const char *filename, bfd *templ);
    973 
    974 DESCRIPTION
    975 	Create a new BFD in the manner of <<bfd_openw>>, but without
    976 	opening a file. The new BFD takes the target from the target
    977 	used by @var{templ}. The format is always set to <<bfd_object>>.
    978 
    979 	A copy of the @var{filename} argument is stored in the newly created
    980 	BFD.  It can be accessed via the bfd_get_filename() macro.
    981 */
    982 
    983 bfd *
    984 bfd_create (const char *filename, bfd *templ)
    985 {
    986   bfd *nbfd;
    987 
    988   nbfd = _bfd_new_bfd ();
    989   if (nbfd == NULL)
    990     return NULL;
    991   /* PR 11983: Do not cache the original filename, but
    992      rather make a copy - the original might go away.  */
    993   if (!bfd_set_filename (nbfd, filename))
    994     {
    995       _bfd_delete_bfd (nbfd);
    996       return NULL;
    997     }
    998   if (templ)
    999     nbfd->xvec = templ->xvec;
   1000   nbfd->direction = no_direction;
   1001   bfd_set_format (nbfd, bfd_object);
   1002 
   1003   return nbfd;
   1004 }
   1005 
   1006 /*
   1007 FUNCTION
   1008 	bfd_make_writable
   1009 
   1010 SYNOPSIS
   1011 	bool bfd_make_writable (bfd *abfd);
   1012 
   1013 DESCRIPTION
   1014 	Takes a BFD as created by <<bfd_create>> and converts it
   1015 	into one like as returned by <<bfd_openw>>.  It does this
   1016 	by converting the BFD to BFD_IN_MEMORY.  It's assumed that
   1017 	you will call <<bfd_make_readable>> on this bfd later.
   1018 
   1019 	<<TRUE>> is returned if all is ok, otherwise <<FALSE>>.
   1020 */
   1021 
   1022 bool
   1023 bfd_make_writable (bfd *abfd)
   1024 {
   1025   struct bfd_in_memory *bim;
   1026 
   1027   if (abfd->direction != no_direction)
   1028     {
   1029       bfd_set_error (bfd_error_invalid_operation);
   1030       return false;
   1031     }
   1032 
   1033   bim = (struct bfd_in_memory *) bfd_malloc (sizeof (struct bfd_in_memory));
   1034   if (bim == NULL)
   1035     return false;	/* bfd_error already set.  */
   1036   abfd->iostream = bim;
   1037   /* bfd_write will grow these as needed.  */
   1038   bim->size = 0;
   1039   bim->buffer = 0;
   1040 
   1041   abfd->flags |= BFD_IN_MEMORY;
   1042   abfd->iovec = &_bfd_memory_iovec;
   1043   abfd->origin = 0;
   1044   abfd->direction = write_direction;
   1045   abfd->where = 0;
   1046 
   1047   return true;
   1048 }
   1049 
   1050 /*
   1051 FUNCTION
   1052 	bfd_make_readable
   1053 
   1054 SYNOPSIS
   1055 	bool bfd_make_readable (bfd *abfd);
   1056 
   1057 DESCRIPTION
   1058 	Takes a BFD as created by <<bfd_create>> and
   1059 	<<bfd_make_writable>> and converts it into one like as
   1060 	returned by <<bfd_openr>>.  It does this by writing the
   1061 	contents out to the memory buffer, then reversing the
   1062 	direction.
   1063 
   1064 	<<TRUE>> is returned if all is ok, otherwise <<FALSE>>.  */
   1065 
   1066 bool
   1067 bfd_make_readable (bfd *abfd)
   1068 {
   1069   if (abfd->direction != write_direction || !(abfd->flags & BFD_IN_MEMORY))
   1070     {
   1071       bfd_set_error (bfd_error_invalid_operation);
   1072       return false;
   1073     }
   1074 
   1075   if (! BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd)))
   1076     return false;
   1077 
   1078   if (! BFD_SEND (abfd, _close_and_cleanup, (abfd)))
   1079     return false;
   1080 
   1081   abfd->arch_info = &bfd_default_arch_struct;
   1082 
   1083   abfd->where = 0;
   1084   abfd->format = bfd_unknown;
   1085   abfd->my_archive = NULL;
   1086   abfd->origin = 0;
   1087   abfd->opened_once = false;
   1088   abfd->output_has_begun = false;
   1089   abfd->section_count = 0;
   1090   abfd->usrdata = NULL;
   1091   abfd->cacheable = false;
   1092   abfd->mtime_set = false;
   1093 
   1094   abfd->target_defaulted = true;
   1095   abfd->direction = read_direction;
   1096   abfd->sections = 0;
   1097   abfd->symcount = 0;
   1098   abfd->outsymbols = 0;
   1099   abfd->tdata.any = 0;
   1100   abfd->size = 0;
   1101 
   1102   bfd_section_list_clear (abfd);
   1103   bfd_check_format (abfd, bfd_object);
   1104 
   1105   return true;
   1106 }
   1107 
   1108 /*
   1109    GNU Extension: separate debug-info files
   1110 
   1111    The idea here is that a special section called .gnu_debuglink might be
   1112    embedded in a binary file, which indicates that some *other* file
   1113    contains the real debugging information. This special section contains a
   1114    filename and CRC32 checksum, which we read and resolve to another file,
   1115    if it exists.
   1116 
   1117    This facilitates "optional" provision of debugging information, without
   1118    having to provide two complete copies of every binary object (with and
   1119    without debug symbols).  */
   1120 
   1121 #define GNU_DEBUGLINK		".gnu_debuglink"
   1122 #define GNU_DEBUGALTLINK	".gnu_debugaltlink"
   1123 
   1124 /*
   1125 FUNCTION
   1126 	bfd_calc_gnu_debuglink_crc32
   1127 
   1128 SYNOPSIS
   1129 	uint32_t bfd_calc_gnu_debuglink_crc32
   1130 	  (uint32_t crc, const bfd_byte *buf, bfd_size_type len);
   1131 
   1132 DESCRIPTION
   1133 	Computes a CRC value as used in the .gnu_debuglink section.
   1134 	Advances the previously computed @var{crc} value by computing
   1135 	and adding in the crc32 for @var{len} bytes of @var{buf}.
   1136 
   1137 	Return the updated CRC32 value.
   1138 */
   1139 
   1140 uint32_t
   1141 bfd_calc_gnu_debuglink_crc32 (uint32_t crc,
   1142 			      const bfd_byte *buf,
   1143 			      bfd_size_type len)
   1144 {
   1145   static const uint32_t crc32_table[256] =
   1146     {
   1147       0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
   1148       0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
   1149       0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
   1150       0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
   1151       0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
   1152       0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
   1153       0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
   1154       0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
   1155       0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
   1156       0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
   1157       0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
   1158       0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
   1159       0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
   1160       0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
   1161       0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
   1162       0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
   1163       0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
   1164       0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
   1165       0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
   1166       0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
   1167       0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
   1168       0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
   1169       0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
   1170       0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
   1171       0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
   1172       0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
   1173       0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
   1174       0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
   1175       0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
   1176       0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
   1177       0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
   1178       0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
   1179       0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
   1180       0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
   1181       0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
   1182       0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
   1183       0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
   1184       0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
   1185       0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
   1186       0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
   1187       0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
   1188       0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
   1189       0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
   1190       0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
   1191       0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
   1192       0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
   1193       0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
   1194       0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
   1195       0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
   1196       0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
   1197       0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
   1198       0x2d02ef8d
   1199     };
   1200   const bfd_byte *end;
   1201 
   1202   crc = ~crc & 0xffffffff;
   1203   for (end = buf + len; buf < end; ++ buf)
   1204     crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
   1205   return ~crc & 0xffffffff;
   1206 }
   1207 
   1208 
   1209 /* Extracts the filename and CRC32 value for any separate debug
   1210    information file associated with @var{abfd}.
   1211 
   1212    The @var{crc32_out} parameter is an untyped pointer because
   1213    this routine is used as a @code{get_func_type} function, but it
   1214    is expected to be a uint32_t pointer.
   1215 
   1216    Returns the filename of the associated debug information file,
   1217    or NULL if there is no such file.  If the filename was found
   1218    then the contents of @var{crc32_out} are updated to hold the
   1219    corresponding CRC32 value for the file.
   1220 
   1221    The returned filename is allocated with @code{malloc}; freeing
   1222    it is the responsibility of the caller.  */
   1223 
   1224 static char *
   1225 bfd_get_debug_link_info_1 (bfd *abfd, void *crc32_out)
   1226 {
   1227   asection *sect;
   1228   uint32_t *crc32 = crc32_out;
   1229   bfd_byte *contents;
   1230   unsigned int crc_offset;
   1231   char *name;
   1232   bfd_size_type size;
   1233 
   1234   BFD_ASSERT (abfd);
   1235   BFD_ASSERT (crc32_out);
   1236 
   1237   sect = bfd_get_section_by_name (abfd, GNU_DEBUGLINK);
   1238 
   1239   if (sect == NULL || (sect->flags & SEC_HAS_CONTENTS) == 0)
   1240     return NULL;
   1241 
   1242   size = bfd_section_size (sect);
   1243 
   1244   /* PR 22794: Make sure that the section has a reasonable size.  */
   1245   if (size < 8)
   1246     return NULL;
   1247 
   1248   if (!bfd_malloc_and_get_section (abfd, sect, &contents))
   1249     return NULL;
   1250 
   1251   /* CRC value is stored after the filename, aligned up to 4 bytes.  */
   1252   name = (char *) contents;
   1253   /* PR 17597: Avoid reading off the end of the buffer.  */
   1254   crc_offset = strnlen (name, size) + 1;
   1255   crc_offset = (crc_offset + 3) & ~3;
   1256   if (crc_offset + 4 > size)
   1257     {
   1258       free (name);
   1259       return NULL;
   1260     }
   1261 
   1262   *crc32 = bfd_get_32 (abfd, contents + crc_offset);
   1263   return name;
   1264 }
   1265 
   1266 
   1267 /*
   1268 FUNCTION
   1269 	bfd_get_debug_link_info
   1270 
   1271 SYNOPSIS
   1272 	char *bfd_get_debug_link_info (bfd *abfd, uint32_t *crc32_out);
   1273 
   1274 DESCRIPTION
   1275 	Extracts the filename and CRC32 value for any separate debug
   1276 	information file associated with @var{abfd}.
   1277 
   1278 	Returns the filename of the associated debug information file,
   1279 	or NULL if there is no such file.  If the filename was found
   1280 	then the contents of @var{crc32_out} are updated to hold the
   1281 	corresponding CRC32 value for the file.
   1282 
   1283 	The returned filename is allocated with @code{malloc}; freeing
   1284 	it is the responsibility of the caller.
   1285 */
   1286 
   1287 char *
   1288 bfd_get_debug_link_info (bfd *abfd, uint32_t *crc32_out)
   1289 {
   1290   return bfd_get_debug_link_info_1 (abfd, crc32_out);
   1291 }
   1292 
   1293 /*
   1294 FUNCTION
   1295 	bfd_get_alt_debug_link_info
   1296 
   1297 SYNOPSIS
   1298 	char *bfd_get_alt_debug_link_info (bfd * abfd,
   1299 					   bfd_size_type *buildid_len,
   1300 					   bfd_byte **buildid_out);
   1301 
   1302 DESCRIPTION
   1303 	Fetch the filename and BuildID value for any alternate debuginfo
   1304 	associated with @var{abfd}.  Return NULL if no such info found,
   1305 	otherwise return filename and update @var{buildid_len} and
   1306 	@var{buildid_out}.  The returned filename and build_id are
   1307 	allocated with @code{malloc}; freeing them is the responsibility
   1308 	of the caller.
   1309 */
   1310 
   1311 char *
   1312 bfd_get_alt_debug_link_info (bfd * abfd, bfd_size_type *buildid_len,
   1313 			     bfd_byte **buildid_out)
   1314 {
   1315   asection *sect;
   1316   bfd_byte *contents;
   1317   unsigned int buildid_offset;
   1318   char *name;
   1319   bfd_size_type size;
   1320 
   1321   BFD_ASSERT (abfd);
   1322   BFD_ASSERT (buildid_len);
   1323   BFD_ASSERT (buildid_out);
   1324 
   1325   sect = bfd_get_section_by_name (abfd, GNU_DEBUGALTLINK);
   1326 
   1327   if (sect == NULL || (sect->flags & SEC_HAS_CONTENTS) == 0)
   1328     return NULL;
   1329 
   1330   size = bfd_section_size (sect);
   1331   if (size < 8)
   1332     return NULL;
   1333 
   1334   if (!bfd_malloc_and_get_section (abfd, sect, & contents))
   1335     return NULL;
   1336 
   1337   /* BuildID value is stored after the filename.  */
   1338   name = (char *) contents;
   1339   buildid_offset = strnlen (name, size) + 1;
   1340   if (buildid_offset >= bfd_section_size (sect))
   1341     return NULL;
   1342 
   1343   *buildid_len = size - buildid_offset;
   1344   *buildid_out = bfd_malloc (*buildid_len);
   1345   memcpy (*buildid_out, contents + buildid_offset, *buildid_len);
   1346 
   1347   return name;
   1348 }
   1349 
   1350 /* Checks to see if @var{name} is a file and if its contents match
   1351    @var{crc32}, which is a pointer to a @code{uint32_t}
   1352    containing a CRC32.
   1353 
   1354    The @var{crc32_p} parameter is an untyped pointer because this
   1355    routine is used as a @code{check_func_type} function.  */
   1356 
   1357 static bool
   1358 separate_debug_file_exists (const char *name, void *crc32_p)
   1359 {
   1360   unsigned char buffer[8 * 1024];
   1361   uint32_t file_crc = 0;
   1362   FILE *f;
   1363   bfd_size_type count;
   1364   uint32_t crc;
   1365 
   1366   BFD_ASSERT (name);
   1367   BFD_ASSERT (crc32_p);
   1368 
   1369   crc = *(uint32_t *) crc32_p;
   1370 
   1371   f = _bfd_real_fopen (name, FOPEN_RB);
   1372   if (f == NULL)
   1373     return false;
   1374 
   1375   while ((count = fread (buffer, 1, sizeof (buffer), f)) > 0)
   1376     file_crc = bfd_calc_gnu_debuglink_crc32 (file_crc, buffer, count);
   1377 
   1378   fclose (f);
   1379 
   1380   return crc == file_crc;
   1381 }
   1382 
   1383 /* Checks to see if @var{name} is a file.  */
   1384 
   1385 static bool
   1386 separate_alt_debug_file_exists (const char *name, void *unused ATTRIBUTE_UNUSED)
   1387 {
   1388   FILE *f;
   1389 
   1390   BFD_ASSERT (name);
   1391 
   1392   f = _bfd_real_fopen (name, FOPEN_RB);
   1393   if (f == NULL)
   1394     return false;
   1395 
   1396   fclose (f);
   1397 
   1398   return true;
   1399 }
   1400 
   1401 /* Searches for a debug information file corresponding to @var{abfd}.
   1402 
   1403    The name of the separate debug info file is returned by the
   1404    @var{get} function.  This function scans various fixed locations
   1405    in the filesystem, including the file tree rooted at @var{dir}.
   1406    If the @var{include_dirs} parameter is true then the directory
   1407    components of @var{abfd}'s filename will be included in the
   1408    searched locations.
   1409 
   1410    @var{data} is passed unmodified to the @var{get} and @var{check}
   1411    functions.  It is generally used to implement build-id-like
   1412    matching in the callback functions.
   1413 
   1414    Returns the filename of the first file to be found which
   1415    receives a TRUE result from the @var{check} function.
   1416    Returns NULL if no valid file could be found.  */
   1417 
   1418 typedef char * (*get_func_type) (bfd *, void *);
   1419 typedef bool (*check_func_type) (const char *, void *);
   1420 
   1421 static char *
   1422 find_separate_debug_file (bfd *abfd,
   1423 			  const char *debug_file_directory,
   1424 			  bool include_dirs,
   1425 			  get_func_type get_func,
   1426 			  check_func_type check_func,
   1427 			  void *func_data)
   1428 {
   1429   char *base;
   1430   char *dir;
   1431   char *debugfile;
   1432   char *canon_dir;
   1433   size_t dirlen;
   1434   size_t canon_dirlen;
   1435 
   1436   BFD_ASSERT (abfd);
   1437   if (debug_file_directory == NULL)
   1438     debug_file_directory = ".";
   1439 
   1440   /* BFD may have been opened from a stream.  */
   1441   if (bfd_get_filename (abfd) == NULL)
   1442     {
   1443       bfd_set_error (bfd_error_invalid_operation);
   1444       return NULL;
   1445     }
   1446 
   1447   base = get_func (abfd, func_data);
   1448 
   1449   if (base == NULL)
   1450     return NULL;
   1451 
   1452   if (base[0] == '\0')
   1453     {
   1454       free (base);
   1455       bfd_set_error (bfd_error_no_debug_section);
   1456       return NULL;
   1457     }
   1458 
   1459   if (include_dirs)
   1460     {
   1461       const char *fname = bfd_get_filename (abfd);
   1462       for (dirlen = strlen (fname); dirlen > 0; dirlen--)
   1463 	if (IS_DIR_SEPARATOR (fname[dirlen - 1]))
   1464 	  break;
   1465 
   1466       dir = (char *) bfd_malloc (dirlen + 1);
   1467       if (dir == NULL)
   1468 	{
   1469 	  free (base);
   1470 	  return NULL;
   1471 	}
   1472       memcpy (dir, fname, dirlen);
   1473       dir[dirlen] = '\0';
   1474     }
   1475   else
   1476     {
   1477       dir = (char *) bfd_malloc (1);
   1478       * dir = 0;
   1479       dirlen = 0;
   1480     }
   1481 
   1482   /* Compute the canonical name of the bfd object with all symbolic links
   1483      resolved, for use in the global debugfile directory.  */
   1484   canon_dir = lrealpath (bfd_get_filename (abfd));
   1485   for (canon_dirlen = strlen (canon_dir); canon_dirlen > 0; canon_dirlen--)
   1486     if (IS_DIR_SEPARATOR (canon_dir[canon_dirlen - 1]))
   1487       break;
   1488   canon_dir[canon_dirlen] = '\0';
   1489 
   1490 #ifndef EXTRA_DEBUG_ROOT1
   1491 #define EXTRA_DEBUG_ROOT1 "/usr/lib/debug"
   1492 #endif
   1493 #ifndef EXTRA_DEBUG_ROOT2
   1494 #define EXTRA_DEBUG_ROOT2 "/usr/lib/debug/usr"
   1495 #endif
   1496 
   1497   debugfile = (char *)
   1498       bfd_malloc (strlen (debug_file_directory) + 1
   1499 		  + (canon_dirlen > dirlen ? canon_dirlen : dirlen)
   1500 		  + strlen (".debug/")
   1501 #ifdef EXTRA_DEBUG_ROOT1
   1502 		  + strlen (EXTRA_DEBUG_ROOT1)
   1503 #endif
   1504 #ifdef EXTRA_DEBUG_ROOT2
   1505 		  + strlen (EXTRA_DEBUG_ROOT2)
   1506 #endif
   1507 		  + strlen (base)
   1508 		  + 1);
   1509   if (debugfile == NULL)
   1510     goto found; /* Actually this returns NULL.  */
   1511 
   1512   /* First try in the same directory as the original file.
   1513 
   1514      FIXME: Strictly speaking if we are using the build-id method,
   1515      (ie include_dirs == FALSE) then we should only check absolute
   1516      paths, not relative ones like this one (and the next one).
   1517      The check is left in however as this allows the binutils
   1518      testsuite to exercise this feature without having to install
   1519      a file into the root filesystem.  (See binutils/testsuite/
   1520      binutils-all/objdump.exp for the test).  */
   1521   sprintf (debugfile, "%s%s", dir, base);
   1522   if (check_func (debugfile, func_data))
   1523     goto found;
   1524 
   1525   /* Then try in a subdirectory called .debug.  */
   1526   sprintf (debugfile, "%s.debug/%s", dir, base);
   1527   if (check_func (debugfile, func_data))
   1528     goto found;
   1529 
   1530 #ifdef EXTRA_DEBUG_ROOT1
   1531   /* Try the first extra debug file root.  */
   1532   sprintf (debugfile, "%s%s%s", EXTRA_DEBUG_ROOT1,
   1533 	   include_dirs ? canon_dir : "/", base);
   1534   if (check_func (debugfile, func_data))
   1535     goto found;
   1536 #endif
   1537 
   1538 #ifdef EXTRA_DEBUG_ROOT2
   1539   /* Try the second extra debug file root.  */
   1540   sprintf (debugfile, "%s%s%s", EXTRA_DEBUG_ROOT2,
   1541 	   include_dirs ? canon_dir : "/", base);
   1542   if (check_func (debugfile, func_data))
   1543     goto found;
   1544 #endif
   1545 
   1546   /* Then try in the global debugfile directory.  */
   1547   strcpy (debugfile, debug_file_directory);
   1548   dirlen = strlen (debug_file_directory) - 1;
   1549   if (include_dirs)
   1550     {
   1551       if (dirlen > 0
   1552 	  && debug_file_directory[dirlen] != '/'
   1553 	  && canon_dir[0] != '/')
   1554 	strcat (debugfile, "/");
   1555       strcat (debugfile, canon_dir);
   1556     }
   1557   else
   1558     {
   1559       if (dirlen > 0 && debug_file_directory[dirlen] != '/')
   1560 	strcat (debugfile, "/");
   1561     }
   1562   strcat (debugfile, base);
   1563 
   1564   if (check_func (debugfile, func_data))
   1565     goto found;
   1566 
   1567   /* Failed to find the file.  */
   1568   free (debugfile);
   1569   debugfile = NULL;
   1570 
   1571  found:
   1572   free (base);
   1573   free (dir);
   1574   free (canon_dir);
   1575   return debugfile;
   1576 }
   1577 
   1578 /*
   1579 FUNCTION
   1580 	bfd_follow_gnu_debuglink
   1581 
   1582 SYNOPSIS
   1583 	char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
   1584 
   1585 DESCRIPTION
   1586 	Takes a BFD and searches it for a .gnu_debuglink section.  If this
   1587 	section is found, it examines the section for the name and checksum
   1588 	of a '.debug' file containing auxiliary debugging information.  It
   1589 	then searches the filesystem for this .debug file in some standard
   1590 	locations, including the directory tree rooted at @var{dir}, and if
   1591 	found returns the full filename.
   1592 
   1593 	If @var{dir} is NULL, the search will take place starting at
   1594 	the current directory.
   1595 
   1596 	Returns <<NULL>> on any errors or failure to locate the .debug
   1597 	file, otherwise a pointer to a heap-allocated string
   1598 	containing the filename.  The caller is responsible for
   1599 	freeing this string.
   1600 */
   1601 
   1602 char *
   1603 bfd_follow_gnu_debuglink (bfd *abfd, const char *dir)
   1604 {
   1605   uint32_t crc32;
   1606 
   1607   return find_separate_debug_file (abfd, dir, true,
   1608 				   bfd_get_debug_link_info_1,
   1609 				   separate_debug_file_exists, &crc32);
   1610 }
   1611 
   1612 /* Helper for bfd_follow_gnu_debugaltlink.  It just returns the name
   1613    of the separate debug file.  */
   1614 
   1615 static char *
   1616 get_alt_debug_link_info_shim (bfd * abfd, void *unused ATTRIBUTE_UNUSED)
   1617 {
   1618   bfd_size_type len;
   1619   bfd_byte *buildid = NULL;
   1620   char *result = bfd_get_alt_debug_link_info (abfd, &len, &buildid);
   1621 
   1622   free (buildid);
   1623 
   1624   return result;
   1625 }
   1626 
   1627 /*
   1628 FUNCTION
   1629 	bfd_follow_gnu_debugaltlink
   1630 
   1631 SYNOPSIS
   1632 	char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir);
   1633 
   1634 DESCRIPTION
   1635 	Takes a BFD and searches it for a .gnu_debugaltlink section.  If this
   1636 	section is found, it examines the section for the name of a file
   1637 	containing auxiliary debugging information.  It then searches the
   1638 	filesystem for this file in a set of standard locations, including
   1639 	the directory tree rooted at @var{dir}, and if found returns the
   1640 	full filename.
   1641 
   1642 	If @var{dir} is NULL, the search will take place starting at
   1643 	the current directory.
   1644 
   1645 	Returns <<NULL>> on any errors or failure to locate the debug
   1646 	file, otherwise a pointer to a heap-allocated string
   1647 	containing the filename.  The caller is responsible for
   1648 	freeing this string.
   1649 */
   1650 
   1651 char *
   1652 bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir)
   1653 {
   1654   return find_separate_debug_file (abfd, dir, true,
   1655 				   get_alt_debug_link_info_shim,
   1656 				   separate_alt_debug_file_exists,
   1657 				   NULL);
   1658 }
   1659 
   1660 /*
   1661 FUNCTION
   1662 	bfd_create_gnu_debuglink_section
   1663 
   1664 SYNOPSIS
   1665 	struct bfd_section *bfd_create_gnu_debuglink_section
   1666 	  (bfd *abfd, const char *filename);
   1667 
   1668 DESCRIPTION
   1669 	Takes a @var{BFD} and adds a .gnu_debuglink section to it.  The
   1670 	section is sized to be big enough to contain a link to the specified
   1671 	@var{filename}.
   1672 
   1673 	A pointer to the new section is returned if all is ok.  Otherwise
   1674 	<<NULL>> is returned and bfd_error is set.
   1675 */
   1676 
   1677 asection *
   1678 bfd_create_gnu_debuglink_section (bfd *abfd, const char *filename)
   1679 {
   1680   asection *sect;
   1681   bfd_size_type debuglink_size;
   1682   flagword flags;
   1683 
   1684   if (abfd == NULL || filename == NULL)
   1685     {
   1686       bfd_set_error (bfd_error_invalid_operation);
   1687       return NULL;
   1688     }
   1689 
   1690   /* Strip off any path components in filename.  */
   1691   filename = lbasename (filename);
   1692 
   1693   sect = bfd_get_section_by_name (abfd, GNU_DEBUGLINK);
   1694   if (sect)
   1695     {
   1696       /* Section already exists.  */
   1697       bfd_set_error (bfd_error_invalid_operation);
   1698       return NULL;
   1699     }
   1700 
   1701   flags = SEC_HAS_CONTENTS | SEC_READONLY | SEC_DEBUGGING;
   1702   sect = bfd_make_section_with_flags (abfd, GNU_DEBUGLINK, flags);
   1703   if (sect == NULL)
   1704     return NULL;
   1705 
   1706   /* Compute the size of the section.  Allow for the CRC after the filename,
   1707      and padding so that it will start on a 4-byte boundary.  */
   1708   debuglink_size = strlen (filename) + 1;
   1709   debuglink_size += 3;
   1710   debuglink_size &= ~3;
   1711   debuglink_size += 4;
   1712 
   1713   if (!bfd_set_section_size (sect, debuglink_size))
   1714     /* XXX Should we delete the section from the bfd ?  */
   1715     return NULL;
   1716 
   1717   /* PR 21193: Ensure that the section has 4-byte alignment for the CRC.
   1718      Note - despite the name of the function being called, we are
   1719      setting an alignment power, not a byte alignment value.  */
   1720   bfd_set_section_alignment (sect, 2);
   1721 
   1722   return sect;
   1723 }
   1724 
   1725 
   1726 /*
   1727 FUNCTION
   1728 	bfd_fill_in_gnu_debuglink_section
   1729 
   1730 SYNOPSIS
   1731 	bool bfd_fill_in_gnu_debuglink_section
   1732 	  (bfd *abfd, struct bfd_section *sect, const char *filename);
   1733 
   1734 DESCRIPTION
   1735 	Takes a @var{BFD} and containing a .gnu_debuglink section @var{SECT}
   1736 	and fills in the contents of the section to contain a link to the
   1737 	specified @var{filename}.  The filename should be absolute or
   1738 	relative to the current directory.
   1739 
   1740 	<<TRUE>> is returned if all is ok.  Otherwise <<FALSE>> is returned
   1741 	and bfd_error is set.
   1742 */
   1743 
   1744 bool
   1745 bfd_fill_in_gnu_debuglink_section (bfd *abfd,
   1746 				   struct bfd_section *sect,
   1747 				   const char *filename)
   1748 {
   1749   bfd_size_type debuglink_size;
   1750   uint32_t crc32;
   1751   char * contents;
   1752   bfd_size_type crc_offset;
   1753   FILE * handle;
   1754   unsigned char buffer[8 * 1024];
   1755   size_t count;
   1756   size_t filelen;
   1757 
   1758   if (abfd == NULL || sect == NULL || filename == NULL)
   1759     {
   1760       bfd_set_error (bfd_error_invalid_operation);
   1761       return false;
   1762     }
   1763 
   1764   /* Open the linked file so that we can compute a CRC.  */
   1765   handle = _bfd_real_fopen (filename, FOPEN_RB);
   1766   if (handle == NULL)
   1767     {
   1768       bfd_set_error (bfd_error_system_call);
   1769       return false;
   1770     }
   1771 
   1772   crc32 = 0;
   1773   while ((count = fread (buffer, 1, sizeof buffer, handle)) > 0)
   1774     crc32 = bfd_calc_gnu_debuglink_crc32 (crc32, buffer, count);
   1775   fclose (handle);
   1776 
   1777   /* Strip off any path components in filename,
   1778      now that we no longer need them.  */
   1779   filename = lbasename (filename);
   1780 
   1781   filelen = strlen (filename);
   1782   debuglink_size = filelen + 1;
   1783   debuglink_size += 3;
   1784   debuglink_size &= ~3;
   1785   debuglink_size += 4;
   1786 
   1787   contents = (char *) bfd_malloc (debuglink_size);
   1788   if (contents == NULL)
   1789     {
   1790       /* XXX Should we delete the section from the bfd ?  */
   1791       return false;
   1792     }
   1793 
   1794   crc_offset = debuglink_size - 4;
   1795   memcpy (contents, filename, filelen);
   1796   memset (contents + filelen, 0, crc_offset - filelen);
   1797 
   1798   bfd_put_32 (abfd, crc32, contents + crc_offset);
   1799 
   1800   if (! bfd_set_section_contents (abfd, sect, contents, 0, debuglink_size))
   1801     {
   1802       /* XXX Should we delete the section from the bfd ?  */
   1803       free (contents);
   1804       return false;
   1805     }
   1806 
   1807   return true;
   1808 }
   1809 
   1810 /* Finds the build-id associated with @var{abfd}.  If the build-id is
   1811    extracted from the note section then a build-id structure is built
   1812    for it, using memory allocated to @var{abfd}, and this is then
   1813    attached to the @var{abfd}.
   1814 
   1815    Returns a pointer to the build-id structure if a build-id could be
   1816    found.  If no build-id is found NULL is returned and error code is
   1817    set.  */
   1818 
   1819 static struct bfd_build_id *
   1820 get_build_id (bfd *abfd)
   1821 {
   1822   struct bfd_build_id *build_id;
   1823   Elf_Internal_Note inote;
   1824   Elf_External_Note *enote;
   1825   bfd_byte *contents;
   1826   asection *sect;
   1827   bfd_size_type size;
   1828 
   1829   BFD_ASSERT (abfd);
   1830 
   1831   if (abfd->build_id && abfd->build_id->size > 0)
   1832     /* Save some time by using the already computed build-id.  */
   1833     return (struct bfd_build_id *) abfd->build_id;
   1834 
   1835   sect = bfd_get_section_by_name (abfd, ".note.gnu.build-id");
   1836   if (sect == NULL
   1837       || (sect->flags & SEC_HAS_CONTENTS) == 0)
   1838     {
   1839       bfd_set_error (bfd_error_no_debug_section);
   1840       return NULL;
   1841     }
   1842 
   1843   size = bfd_section_size (sect);
   1844   /* FIXME: Should we support smaller build-id notes ?  */
   1845   if (size < 0x24)
   1846     {
   1847       bfd_set_error (bfd_error_invalid_operation);
   1848       return NULL;
   1849     }
   1850 
   1851   if (!bfd_malloc_and_get_section (abfd, sect, & contents))
   1852     return NULL;
   1853 
   1854   /* FIXME: Paranoia - allow for compressed build-id sections.
   1855      Maybe we should complain if this size is different from
   1856      the one obtained above...  */
   1857   size = bfd_section_size (sect);
   1858   if (size < sizeof (Elf_External_Note))
   1859     {
   1860       bfd_set_error (bfd_error_invalid_operation);
   1861       free (contents);
   1862       return NULL;
   1863     }
   1864 
   1865   enote = (Elf_External_Note *) contents;
   1866   inote.type = H_GET_32 (abfd, enote->type);
   1867   inote.namesz = H_GET_32 (abfd, enote->namesz);
   1868   inote.namedata = enote->name;
   1869   inote.descsz = H_GET_32 (abfd, enote->descsz);
   1870   inote.descdata = inote.namedata + BFD_ALIGN (inote.namesz, 4);
   1871   /* FIXME: Should we check for extra notes in this section ?  */
   1872 
   1873   if (inote.descsz <= 0
   1874       || inote.type != NT_GNU_BUILD_ID
   1875       || inote.namesz != 4 /* sizeof "GNU"  */
   1876       || !startswith (inote.namedata, "GNU")
   1877       || inote.descsz > 0x7ffffffe
   1878       || size < (12 + BFD_ALIGN (inote.namesz, 4) + inote.descsz))
   1879     {
   1880       free (contents);
   1881       bfd_set_error (bfd_error_invalid_operation);
   1882       return NULL;
   1883     }
   1884 
   1885   build_id = bfd_alloc (abfd, sizeof (struct bfd_build_id) + inote.descsz);
   1886   if (build_id == NULL)
   1887     {
   1888       free (contents);
   1889       return NULL;
   1890     }
   1891 
   1892   build_id->size = inote.descsz;
   1893   memcpy (build_id->data, inote.descdata, inote.descsz);
   1894   abfd->build_id = build_id;
   1895   free (contents);
   1896 
   1897   return build_id;
   1898 }
   1899 
   1900 /* Searches @var{abfd} for a build-id, and then constructs a pathname
   1901    from it.  The path is computed as .build-id/NN/NN+NN.debug where
   1902    NNNN+NN is the build-id value as a hexadecimal string.
   1903 
   1904    Returns the constructed filename or NULL upon error.  It is the
   1905    caller's responsibility to free the memory used to hold the
   1906    filename.  If a filename is returned then the @var{build_id_out_p}
   1907    parameter (which points to a @code{struct bfd_build_id} pointer) is
   1908    set to a pointer to the build_id structure.  */
   1909 
   1910 static char *
   1911 get_build_id_name (bfd *abfd, void *build_id_out_p)
   1912 {
   1913   struct bfd_build_id **build_id_out = build_id_out_p;
   1914   struct bfd_build_id *build_id;
   1915   char *name;
   1916   char *n;
   1917   bfd_size_type s;
   1918   bfd_byte *d;
   1919 
   1920   if (abfd == NULL || bfd_get_filename (abfd) == NULL || build_id_out == NULL)
   1921     {
   1922       bfd_set_error (bfd_error_invalid_operation);
   1923       return NULL;
   1924     }
   1925 
   1926   build_id = get_build_id (abfd);
   1927   if (build_id == NULL)
   1928     return NULL;
   1929 
   1930   /* Compute the debug pathname corresponding to the build-id.  */
   1931   name = bfd_malloc (strlen (".build-id/") + build_id->size * 2 + 2 + strlen (".debug"));
   1932   if (name == NULL)
   1933     {
   1934       bfd_set_error (bfd_error_no_memory);
   1935       return NULL;
   1936     }
   1937   n = name;
   1938   d = build_id->data;
   1939   s = build_id->size;
   1940 
   1941   n += sprintf (n, ".build-id/");
   1942   n += sprintf (n, "%02x", (unsigned) *d++); s--;
   1943   n += sprintf (n, "/");
   1944   while (s--)
   1945     n += sprintf (n, "%02x", (unsigned) *d++);
   1946   n += sprintf (n, ".debug");
   1947 
   1948   *build_id_out = build_id;
   1949   return name;
   1950 }
   1951 
   1952 /* Checks to see if @var{name} is a readable file and if its build-id
   1953    matches @var{buildid}.
   1954 
   1955    Returns TRUE if the file exists, is readable, and contains a
   1956    build-id which matches the build-id pointed at by @var{build_id_p}
   1957    (which is really a @code{struct bfd_build_id **}).  */
   1958 
   1959 static bool
   1960 check_build_id_file (const char *name, void *buildid_p)
   1961 {
   1962   struct bfd_build_id *orig_build_id;
   1963   struct bfd_build_id *build_id;
   1964   bfd * file;
   1965   bool result;
   1966 
   1967   BFD_ASSERT (name);
   1968   BFD_ASSERT (buildid_p);
   1969 
   1970   file = bfd_openr (name, NULL);
   1971   if (file == NULL)
   1972     return false;
   1973 
   1974   /* If the file is an archive, process all of its elements.  */
   1975   if (! bfd_check_format (file, bfd_object))
   1976     {
   1977       bfd_close (file);
   1978       return false;
   1979     }
   1980 
   1981   build_id = get_build_id (file);
   1982   if (build_id == NULL)
   1983     {
   1984       bfd_close (file);
   1985       return false;
   1986     }
   1987 
   1988   orig_build_id = *(struct bfd_build_id **) buildid_p;
   1989 
   1990   result = build_id->size == orig_build_id->size
   1991     && memcmp (build_id->data, orig_build_id->data, build_id->size) == 0;
   1992 
   1993   (void) bfd_close (file);
   1994 
   1995   return result;
   1996 }
   1997 
   1998 /*
   1999 FUNCTION
   2000 	bfd_follow_build_id_debuglink
   2001 
   2002 SYNOPSIS
   2003 	char *bfd_follow_build_id_debuglink (bfd *abfd, const char *dir);
   2004 
   2005 DESCRIPTION
   2006 	Takes @var{abfd} and searches it for a .note.gnu.build-id section.
   2007 	If this section is found, it extracts the value of the NT_GNU_BUILD_ID
   2008 	note, which should be a hexadecimal value @var{NNNN+NN} (for
   2009 	32+ hex digits).  It then searches the filesystem for a file named
   2010 	@var{.build-id/NN/NN+NN.debug} in a set of standard locations,
   2011 	including the directory tree rooted at @var{dir}.  The filename
   2012 	of the first matching file to be found is returned.  A matching
   2013 	file should contain a .note.gnu.build-id section with the same
   2014 	@var{NNNN+NN} note as @var{abfd}, although this check is currently
   2015 	not implemented.
   2016 
   2017 	If @var{dir} is NULL, the search will take place starting at
   2018 	the current directory.
   2019 
   2020 	Returns <<NULL>> on any errors or failure to locate the debug
   2021 	file, otherwise a pointer to a heap-allocated string
   2022 	containing the filename.  The caller is responsible for
   2023 	freeing this string.
   2024 */
   2025 
   2026 char *
   2027 bfd_follow_build_id_debuglink (bfd *abfd, const char *dir)
   2028 {
   2029   struct bfd_build_id *build_id;
   2030 
   2031   return find_separate_debug_file (abfd, dir, false,
   2032 				   get_build_id_name,
   2033 				   check_build_id_file, &build_id);
   2034 }
   2035 
   2036 /*
   2037 FUNCTION
   2038 	bfd_set_filename
   2039 
   2040 SYNOPSIS
   2041 	const char *bfd_set_filename (bfd *abfd, const char *filename);
   2042 
   2043 DESCRIPTION
   2044 	Set the filename of @var{abfd}, copying the FILENAME parameter to
   2045 	bfd_alloc'd memory owned by @var{abfd}.  Returns a pointer the
   2046 	newly allocated name, or NULL if the allocation failed.
   2047 */
   2048 
   2049 const char *
   2050 bfd_set_filename (bfd *abfd, const char *filename)
   2051 {
   2052   size_t len = strlen (filename) + 1;
   2053   char *n = bfd_alloc (abfd, len);
   2054 
   2055   if (n == NULL)
   2056     return NULL;
   2057 
   2058   if (abfd->filename != NULL)
   2059     {
   2060       /* PR 29389.  If we attempt to rename a file that has been closed due
   2061 	 to caching, then we will not be able to reopen it later on.  */
   2062       if (abfd->iostream == NULL && (abfd->flags & BFD_CLOSED_BY_CACHE))
   2063 	{
   2064 	  bfd_set_error (bfd_error_invalid_operation);
   2065 	  return NULL;
   2066 	}
   2067 
   2068       /* Similarly if we attempt to close a renamed file because the
   2069 	 cache is now full, we will not be able to reopen it later on.  */
   2070       if (abfd->iostream != NULL)
   2071 	abfd->cacheable = 0;
   2072     }
   2073 
   2074   memcpy (n, filename, len);
   2075   abfd->filename = n;
   2076 
   2077   return n;
   2078 }
   2079