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