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