aarch64: Add +fcma alias for +compnum
[binutils-gdb.git] / bfd / opncls.c
bloba0a5c40fba89bdd6f25f092e04871bb384e6a2f2
1 /* opncls.c -- open and close a BFD.
2 Copyright (C) 1990-2024 Free Software Foundation, Inc.
4 Written by Cygnus Support.
6 This file is part of BFD, the Binary File Descriptor library.
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.
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.
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. */
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"
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
41 SECTION
42 Opening and closing BFDs
44 SUBSECTION
45 Functions for opening and closing
48 /* Counters used to initialize the bfd identifier. */
50 static unsigned int bfd_id_counter = 0;
51 static unsigned int bfd_reserved_id_counter = 0;
54 EXTERNAL
55 .{* Set to N to open the next N BFDs using an alternate id space. *}
56 .extern unsigned int bfd_use_reserved_id;
59 unsigned int bfd_use_reserved_id = 0;
61 /* fdopen is a loser -- we should use stdio exclusively. Unfortunately
62 if we do that we can't use fcntl. */
65 INTERNAL_FUNCTION
66 _bfd_new_bfd
68 SYNOPSIS
69 bfd *_bfd_new_bfd (void);
71 DESCRIPTION
72 Return a new BFD. All BFD's are allocated through this routine.
75 bfd *
76 _bfd_new_bfd (void)
78 bfd *nbfd;
80 nbfd = (bfd *) bfd_zmalloc (sizeof (bfd));
81 if (nbfd == NULL)
82 return NULL;
84 if (!bfd_lock ())
85 return NULL;
86 if (bfd_use_reserved_id)
88 nbfd->id = --bfd_reserved_id_counter;
89 --bfd_use_reserved_id;
91 else
92 nbfd->id = bfd_id_counter++;
93 if (!bfd_unlock ())
95 free (nbfd);
96 return NULL;
99 nbfd->memory = objalloc_create ();
100 if (nbfd->memory == NULL)
102 bfd_set_error (bfd_error_no_memory);
103 free (nbfd);
104 return NULL;
107 nbfd->arch_info = &bfd_default_arch_struct;
109 if (!bfd_hash_table_init_n (& nbfd->section_htab, bfd_section_hash_newfunc,
110 sizeof (struct section_hash_entry), 13))
112 objalloc_free ((struct objalloc *) nbfd->memory);
113 free (nbfd);
114 return NULL;
117 nbfd->archive_plugin_fd = -1;
119 return nbfd;
122 static const struct bfd_iovec opncls_iovec;
125 INTERNAL_FUNCTION
126 _bfd_new_bfd_contained_in
128 SYNOPSIS
129 bfd *_bfd_new_bfd_contained_in (bfd *);
131 DESCRIPTION
132 Allocate a new BFD as a member of archive OBFD.
135 bfd *
136 _bfd_new_bfd_contained_in (bfd *obfd)
138 bfd *nbfd;
140 /* Nested archives in bims are unsupported. */
141 if ((obfd->flags & BFD_IN_MEMORY) != 0)
143 bfd_set_error (bfd_error_malformed_archive);
144 return NULL;
146 nbfd = _bfd_new_bfd ();
147 if (nbfd == NULL)
148 return NULL;
149 nbfd->xvec = obfd->xvec;
150 nbfd->iovec = obfd->iovec;
151 if (obfd->iovec == &opncls_iovec)
152 nbfd->iostream = obfd->iostream;
153 nbfd->my_archive = obfd;
154 nbfd->direction = read_direction;
155 nbfd->target_defaulted = obfd->target_defaulted;
156 nbfd->lto_output = obfd->lto_output;
157 nbfd->no_export = obfd->no_export;
158 return nbfd;
161 /* Delete a BFD. */
163 static void
164 _bfd_delete_bfd (bfd *abfd)
166 /* Give the target _bfd_free_cached_info a chance to free memory. */
167 if (abfd->memory && abfd->xvec)
168 bfd_free_cached_info (abfd);
170 /* The target _bfd_free_cached_info may not have done anything.. */
171 if (abfd->memory)
173 bfd_hash_table_free (&abfd->section_htab);
174 objalloc_free ((struct objalloc *) abfd->memory);
176 else
177 free ((char *) bfd_get_filename (abfd));
179 free (abfd->arelt_data);
180 free (abfd);
184 INTERNAL_FUNCTION
185 _bfd_free_cached_info
187 SYNOPSIS
188 bool _bfd_free_cached_info (bfd *);
190 DESCRIPTION
191 Free objalloc memory.
194 bool
195 _bfd_free_cached_info (bfd *abfd)
197 if (abfd->memory)
199 const char *filename = bfd_get_filename (abfd);
200 if (filename)
202 /* We can't afford to lose the bfd filename when freeing
203 abfd->memory, because that would kill the cache.c scheme
204 of closing and reopening files in order to limit the
205 number of open files. To reopen, you need the filename.
206 And indeed _bfd_compute_and_write_armap calls
207 _bfd_free_cached_info to free up space used by symbols
208 and by check_format_matches. Which we want to continue
209 doing to handle very large archives. Later the archive
210 elements are copied, which might require reopening files.
211 We also want to keep using objalloc memory for the
212 filename since that allows the name to be updated
213 without either leaking memory or implementing some sort
214 of reference counted string for copies of the filename. */
215 size_t len = strlen (filename) + 1;
216 char *copy = bfd_malloc (len);
217 if (copy == NULL)
218 return false;
219 memcpy (copy, filename, len);
220 abfd->filename = copy;
222 bfd_hash_table_free (&abfd->section_htab);
223 objalloc_free ((struct objalloc *) abfd->memory);
225 abfd->sections = NULL;
226 abfd->section_last = NULL;
227 abfd->outsymbols = NULL;
228 abfd->tdata.any = NULL;
229 abfd->usrdata = NULL;
230 abfd->memory = NULL;
233 return true;
237 FUNCTION
238 bfd_fopen
240 SYNOPSIS
241 bfd *bfd_fopen (const char *filename, const char *target,
242 const char *mode, int fd);
244 DESCRIPTION
245 Open the file @var{filename} with the target @var{target}.
246 Return a pointer to the created BFD. If @var{fd} is not -1,
247 then <<fdopen>> is used to open the file; otherwise, <<fopen>>
248 is used. @var{mode} is passed directly to <<fopen>> or
249 <<fdopen>>.
251 Calls <<bfd_find_target>>, so @var{target} is interpreted as by
252 that function.
254 The new BFD is marked as cacheable iff @var{fd} is -1.
256 If <<NULL>> is returned then an error has occured. Possible errors
257 are <<bfd_error_no_memory>>, <<bfd_error_invalid_target>> or
258 <<system_call>> error.
260 On error, @var{fd} is always closed.
262 A copy of the @var{filename} argument is stored in the newly created
263 BFD. It can be accessed via the bfd_get_filename() macro.
266 bfd *
267 bfd_fopen (const char *filename, const char *target, const char *mode, int fd)
269 bfd *nbfd;
270 const bfd_target *target_vec;
272 nbfd = _bfd_new_bfd ();
273 if (nbfd == NULL)
275 if (fd != -1)
276 close (fd);
277 return NULL;
280 target_vec = bfd_find_target (target, nbfd);
281 if (target_vec == NULL)
283 if (fd != -1)
284 close (fd);
285 _bfd_delete_bfd (nbfd);
286 return NULL;
289 #ifdef HAVE_FDOPEN
290 if (fd != -1)
291 nbfd->iostream = fdopen (fd, mode);
292 else
293 #endif
294 nbfd->iostream = _bfd_real_fopen (filename, mode);
295 if (nbfd->iostream == NULL)
297 bfd_set_error (bfd_error_system_call);
298 if (fd != -1)
299 close (fd);
300 _bfd_delete_bfd (nbfd);
301 return NULL;
304 /* OK, put everything where it belongs. */
306 /* PR 11983: Do not cache the original filename, but
307 rather make a copy - the original might go away. */
308 if (!bfd_set_filename (nbfd, filename))
310 fclose (nbfd->iostream);
311 _bfd_delete_bfd (nbfd);
312 return NULL;
315 /* Figure out whether the user is opening the file for reading,
316 writing, or both, by looking at the MODE argument. */
317 if ((mode[0] == 'r' || mode[0] == 'w' || mode[0] == 'a')
318 && mode[1] == '+')
319 nbfd->direction = both_direction;
320 else if (mode[0] == 'r')
321 nbfd->direction = read_direction;
322 else
323 nbfd->direction = write_direction;
325 if (!bfd_cache_init (nbfd))
327 fclose (nbfd->iostream);
328 _bfd_delete_bfd (nbfd);
329 return NULL;
331 nbfd->opened_once = true;
333 /* If we opened the file by name, mark it cacheable; we can close it
334 and reopen it later. However, if a file descriptor was provided,
335 then it may have been opened with special flags that make it
336 unsafe to close and reopen the file. */
337 if (fd == -1)
338 (void) bfd_set_cacheable (nbfd, true);
340 return nbfd;
344 FUNCTION
345 bfd_openr
347 SYNOPSIS
348 bfd *bfd_openr (const char *filename, const char *target);
350 DESCRIPTION
351 Open the file @var{filename} (using <<fopen>>) with the target
352 @var{target}. Return a pointer to the created BFD.
354 Calls <<bfd_find_target>>, so @var{target} is interpreted as by
355 that function.
357 If <<NULL>> is returned then an error has occured. Possible errors
358 are <<bfd_error_no_memory>>, <<bfd_error_invalid_target>> or
359 <<system_call>> error.
361 A copy of the @var{filename} argument is stored in the newly created
362 BFD. It can be accessed via the bfd_get_filename() macro.
365 bfd *
366 bfd_openr (const char *filename, const char *target)
368 return bfd_fopen (filename, target, FOPEN_RB, -1);
371 /* Don't try to `optimize' this function:
373 o - We lock using stack space so that interrupting the locking
374 won't cause a storage leak.
375 o - We open the file stream last, since we don't want to have to
376 close it if anything goes wrong. Closing the stream means closing
377 the file descriptor too, even though we didn't open it. */
379 FUNCTION
380 bfd_fdopenr
382 SYNOPSIS
383 bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
385 DESCRIPTION
386 <<bfd_fdopenr>> is to <<bfd_fopenr>> much like <<fdopen>> is to
387 <<fopen>>. It opens a BFD on a file already described by the
388 @var{fd} supplied.
390 When the file is later <<bfd_close>>d, the file descriptor will
391 be closed. If the caller desires that this file descriptor be
392 cached by BFD (opened as needed, closed as needed to free
393 descriptors for other opens), with the supplied @var{fd} used as
394 an initial file descriptor (but subject to closure at any time),
395 call bfd_set_cacheable(bfd, 1) on the returned BFD. The default
396 is to assume no caching; the file descriptor will remain open
397 until <<bfd_close>>, and will not be affected by BFD operations
398 on other files.
400 Possible errors are <<bfd_error_no_memory>>,
401 <<bfd_error_invalid_target>> and <<bfd_error_system_call>>.
403 On error, @var{fd} is closed.
405 A copy of the @var{filename} argument is stored in the newly created
406 BFD. It can be accessed via the bfd_get_filename() macro.
409 bfd *
410 bfd_fdopenr (const char *filename, const char *target, int fd)
412 const char *mode;
413 #if defined(HAVE_FCNTL) && defined(F_GETFL)
414 int fdflags;
415 #endif
417 #if ! defined(HAVE_FCNTL) || ! defined(F_GETFL)
418 mode = FOPEN_RUB; /* Assume full access. */
419 #else
420 fdflags = fcntl (fd, F_GETFL, NULL);
421 if (fdflags == -1)
423 int save = errno;
425 close (fd);
426 errno = save;
427 bfd_set_error (bfd_error_system_call);
428 return NULL;
431 /* (O_ACCMODE) parens are to avoid Ultrix header file bug. */
432 switch (fdflags & (O_ACCMODE))
434 case O_RDONLY: mode = FOPEN_RB; break;
435 case O_WRONLY: mode = FOPEN_RUB; break;
436 case O_RDWR: mode = FOPEN_RUB; break;
437 default: abort ();
439 #endif
441 return bfd_fopen (filename, target, mode, fd);
445 FUNCTION
446 bfd_fdopenw
448 SYNOPSIS
449 bfd *bfd_fdopenw (const char *filename, const char *target, int fd);
451 DESCRIPTION
452 <<bfd_fdopenw>> is exactly like <<bfd_fdopenr>> with the exception that
453 the resulting BFD is suitable for output.
456 bfd *
457 bfd_fdopenw (const char *filename, const char *target, int fd)
459 bfd *out = bfd_fdopenr (filename, target, fd);
461 if (out != NULL)
463 if (!bfd_write_p (out))
465 close (fd);
466 _bfd_delete_bfd (out);
467 out = NULL;
468 bfd_set_error (bfd_error_invalid_operation);
470 else
471 out->direction = write_direction;
474 return out;
478 FUNCTION
479 bfd_openstreamr
481 SYNOPSIS
482 bfd *bfd_openstreamr (const char * filename, const char * target,
483 void * stream);
485 DESCRIPTION
486 Open a BFD for read access on an existing stdio stream. When
487 the BFD is passed to <<bfd_close>>, the stream will be closed.
489 A copy of the @var{filename} argument is stored in the newly created
490 BFD. It can be accessed via the bfd_get_filename() macro.
493 bfd *
494 bfd_openstreamr (const char *filename, const char *target, void *streamarg)
496 FILE *stream = (FILE *) streamarg;
497 bfd *nbfd;
498 const bfd_target *target_vec;
500 nbfd = _bfd_new_bfd ();
501 if (nbfd == NULL)
502 return NULL;
504 target_vec = bfd_find_target (target, nbfd);
505 if (target_vec == NULL)
507 _bfd_delete_bfd (nbfd);
508 return NULL;
511 nbfd->iostream = stream;
512 /* PR 11983: Do not cache the original filename, but
513 rather make a copy - the original might go away. */
514 if (!bfd_set_filename (nbfd, filename))
516 _bfd_delete_bfd (nbfd);
517 return NULL;
519 nbfd->direction = read_direction;
521 if (! bfd_cache_init (nbfd))
523 _bfd_delete_bfd (nbfd);
524 return NULL;
527 return nbfd;
531 FUNCTION
532 bfd_openr_iovec
534 SYNOPSIS
535 bfd *bfd_openr_iovec (const char *filename, const char *target,
536 void *(*open_func) (struct bfd *nbfd,
537 void *open_closure),
538 void *open_closure,
539 file_ptr (*pread_func) (struct bfd *nbfd,
540 void *stream,
541 void *buf,
542 file_ptr nbytes,
543 file_ptr offset),
544 int (*close_func) (struct bfd *nbfd,
545 void *stream),
546 int (*stat_func) (struct bfd *abfd,
547 void *stream,
548 struct stat *sb));
550 DESCRIPTION
551 Create and return a BFD backed by a read-only @var{stream}.
552 The @var{stream} is created using @var{open_func}, accessed using
553 @var{pread_func} and destroyed using @var{close_func}.
555 Calls <<bfd_find_target>>, so @var{target} is interpreted as by
556 that function.
558 Calls @var{open_func} (which can call <<bfd_zalloc>> and
559 <<bfd_get_filename>>) to obtain the read-only stream backing
560 the BFD. @var{open_func} either succeeds returning the
561 non-<<NULL>> @var{stream}, or fails returning <<NULL>>
562 (setting <<bfd_error>>).
564 Calls @var{pread_func} to request @var{nbytes} of data from
565 @var{stream} starting at @var{offset} (e.g., via a call to
566 <<bfd_read>>). @var{pread_func} either succeeds returning the
567 number of bytes read (which can be less than @var{nbytes} when
568 end-of-file), or fails returning -1 (setting <<bfd_error>>).
570 Calls @var{close_func} when the BFD is later closed using
571 <<bfd_close>>. @var{close_func} either succeeds returning 0, or
572 fails returning -1 (setting <<bfd_error>>).
574 Calls @var{stat_func} to fill in a stat structure for bfd_stat,
575 bfd_get_size, and bfd_get_mtime calls. @var{stat_func} returns 0
576 on success, or returns -1 on failure (setting <<bfd_error>>).
578 If <<bfd_openr_iovec>> returns <<NULL>> then an error has
579 occurred. Possible errors are <<bfd_error_no_memory>>,
580 <<bfd_error_invalid_target>> and <<bfd_error_system_call>>.
582 A copy of the @var{filename} argument is stored in the newly created
583 BFD. It can be accessed via the bfd_get_filename() macro.
586 struct opncls
588 void *stream;
589 file_ptr (*pread) (struct bfd *abfd, void *stream, void *buf,
590 file_ptr nbytes, file_ptr offset);
591 int (*close) (struct bfd *abfd, void *stream);
592 int (*stat) (struct bfd *abfd, void *stream, struct stat *sb);
593 file_ptr where;
596 static file_ptr
597 opncls_btell (struct bfd *abfd)
599 struct opncls *vec = (struct opncls *) abfd->iostream;
600 return vec->where;
603 static int
604 opncls_bseek (struct bfd *abfd, file_ptr offset, int whence)
606 struct opncls *vec = (struct opncls *) abfd->iostream;
607 switch (whence)
609 case SEEK_SET: vec->where = offset; break;
610 case SEEK_CUR: vec->where += offset; break;
611 case SEEK_END: return -1;
613 return 0;
616 static file_ptr
617 opncls_bread (struct bfd *abfd, void *buf, file_ptr nbytes)
619 struct opncls *vec = (struct opncls *) abfd->iostream;
620 file_ptr nread = (vec->pread) (abfd, vec->stream, buf, nbytes, vec->where);
622 if (nread < 0)
623 return nread;
624 vec->where += nread;
625 return nread;
628 static file_ptr
629 opncls_bwrite (struct bfd *abfd ATTRIBUTE_UNUSED,
630 const void *where ATTRIBUTE_UNUSED,
631 file_ptr nbytes ATTRIBUTE_UNUSED)
633 return -1;
636 static int
637 opncls_bclose (struct bfd *abfd)
639 struct opncls *vec = (struct opncls *) abfd->iostream;
640 /* Since the VEC's memory is bound to the bfd deleting the bfd will
641 free it. */
642 int status = 0;
644 if (vec->close != NULL)
645 status = (vec->close) (abfd, vec->stream);
646 abfd->iostream = NULL;
647 return status;
650 static int
651 opncls_bflush (struct bfd *abfd ATTRIBUTE_UNUSED)
653 return 0;
656 static int
657 opncls_bstat (struct bfd *abfd, struct stat *sb)
659 struct opncls *vec = (struct opncls *) abfd->iostream;
661 memset (sb, 0, sizeof (*sb));
662 if (vec->stat == NULL)
663 return 0;
665 return (vec->stat) (abfd, vec->stream, sb);
668 static void *
669 opncls_bmmap (struct bfd *abfd ATTRIBUTE_UNUSED,
670 void *addr ATTRIBUTE_UNUSED,
671 bfd_size_type len ATTRIBUTE_UNUSED,
672 int prot ATTRIBUTE_UNUSED,
673 int flags ATTRIBUTE_UNUSED,
674 file_ptr offset ATTRIBUTE_UNUSED,
675 void **map_addr ATTRIBUTE_UNUSED,
676 bfd_size_type *map_len ATTRIBUTE_UNUSED)
678 return (void *) -1;
681 static const struct bfd_iovec opncls_iovec =
683 &opncls_bread, &opncls_bwrite, &opncls_btell, &opncls_bseek,
684 &opncls_bclose, &opncls_bflush, &opncls_bstat, &opncls_bmmap
687 bfd *
688 bfd_openr_iovec (const char *filename, const char *target,
689 void *(*open_p) (struct bfd *, void *),
690 void *open_closure,
691 file_ptr (*pread_p) (struct bfd *, void *, void *,
692 file_ptr, file_ptr),
693 int (*close_p) (struct bfd *, void *),
694 int (*stat_p) (struct bfd *, void *, struct stat *))
696 bfd *nbfd;
697 const bfd_target *target_vec;
698 struct opncls *vec;
699 void *stream;
701 nbfd = _bfd_new_bfd ();
702 if (nbfd == NULL)
703 return NULL;
705 target_vec = bfd_find_target (target, nbfd);
706 if (target_vec == NULL)
708 _bfd_delete_bfd (nbfd);
709 return NULL;
712 /* PR 11983: Do not cache the original filename, but
713 rather make a copy - the original might go away. */
714 if (!bfd_set_filename (nbfd, filename))
716 _bfd_delete_bfd (nbfd);
717 return NULL;
719 nbfd->direction = read_direction;
721 /* `open_p (...)' would get expanded by an the open(2) syscall macro. */
722 stream = (*open_p) (nbfd, open_closure);
723 if (stream == NULL)
725 _bfd_delete_bfd (nbfd);
726 return NULL;
729 vec = (struct opncls *) bfd_zalloc (nbfd, sizeof (struct opncls));
730 vec->stream = stream;
731 vec->pread = pread_p;
732 vec->close = close_p;
733 vec->stat = stat_p;
735 nbfd->iovec = &opncls_iovec;
736 nbfd->iostream = vec;
738 return nbfd;
741 /* bfd_openw -- open for writing.
742 Returns a pointer to a freshly-allocated BFD on success, or NULL.
744 See comment by bfd_fdopenr before you try to modify this function. */
747 FUNCTION
748 bfd_openw
750 SYNOPSIS
751 bfd *bfd_openw (const char *filename, const char *target);
753 DESCRIPTION
754 Create a BFD, associated with file @var{filename}, using the
755 file format @var{target}, and return a pointer to it.
757 Possible errors are <<bfd_error_system_call>>, <<bfd_error_no_memory>>,
758 <<bfd_error_invalid_target>>.
760 A copy of the @var{filename} argument is stored in the newly created
761 BFD. It can be accessed via the bfd_get_filename() macro.
764 bfd *
765 bfd_openw (const char *filename, const char *target)
767 bfd *nbfd;
768 const bfd_target *target_vec;
770 /* nbfd has to point to head of malloc'ed block so that bfd_close may
771 reclaim it correctly. */
772 nbfd = _bfd_new_bfd ();
773 if (nbfd == NULL)
774 return NULL;
776 target_vec = bfd_find_target (target, nbfd);
777 if (target_vec == NULL)
779 _bfd_delete_bfd (nbfd);
780 return NULL;
783 /* PR 11983: Do not cache the original filename, but
784 rather make a copy - the original might go away. */
785 if (!bfd_set_filename (nbfd, filename))
787 _bfd_delete_bfd (nbfd);
788 return NULL;
790 nbfd->direction = write_direction;
792 if (bfd_open_file (nbfd) == NULL)
794 /* File not writeable, etc. */
795 bfd_set_error (bfd_error_system_call);
796 _bfd_delete_bfd (nbfd);
797 return NULL;
800 return nbfd;
804 FUNCTION
805 bfd_elf_bfd_from_remote_memory
807 SYNOPSIS
808 bfd *bfd_elf_bfd_from_remote_memory
809 (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
810 int (*target_read_memory)
811 (bfd_vma vma, bfd_byte *myaddr, bfd_size_type len));
813 DESCRIPTION
814 Create a new BFD as if by bfd_openr. Rather than opening a
815 file, reconstruct an ELF file by reading the segments out of
816 remote memory based on the ELF file header at EHDR_VMA and the
817 ELF program headers it points to. If non-zero, SIZE is the
818 known extent of the object. If not null, *LOADBASEP is filled
819 in with the difference between the VMAs from which the
820 segments were read, and the VMAs the file headers (and hence
821 BFD's idea of each section's VMA) put them at.
823 The function TARGET_READ_MEMORY is called to copy LEN bytes
824 from the remote memory at target address VMA into the local
825 buffer at MYADDR; it should return zero on success or an
826 errno code on failure. TEMPL must be a BFD for an ELF
827 target with the word size and byte order found in the remote
828 memory.
831 bfd *
832 bfd_elf_bfd_from_remote_memory
833 (bfd *templ,
834 bfd_vma ehdr_vma,
835 bfd_size_type size,
836 bfd_vma *loadbasep,
837 int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
839 if (bfd_get_flavour (templ) != bfd_target_elf_flavour)
841 bfd_set_error (bfd_error_invalid_operation);
842 return NULL;
844 return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
845 (templ, ehdr_vma, size, loadbasep, target_read_memory);
848 static inline void
849 _maybe_make_executable (bfd * abfd)
851 /* If the file was open for writing and is now executable,
852 make it so. */
853 if (abfd->direction == write_direction
854 && (abfd->flags & (EXEC_P | DYNAMIC)) != 0)
856 struct stat buf;
858 if (stat (bfd_get_filename (abfd), &buf) == 0
859 /* Do not attempt to change non-regular files. This is
860 here especially for configure scripts and kernel builds
861 which run tests with "ld [...] -o /dev/null". */
862 && S_ISREG(buf.st_mode))
864 unsigned int mask = umask (0);
866 umask (mask);
867 chmod (bfd_get_filename (abfd),
868 (0777
869 & (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask))));
875 FUNCTION
876 bfd_close
878 SYNOPSIS
879 bool bfd_close (bfd *abfd);
881 DESCRIPTION
882 Close a BFD. If the BFD was open for writing, then pending
883 operations are completed and the file written out and closed.
884 If the created file is executable, then <<chmod>> is called
885 to mark it as such.
887 All memory attached to the BFD is released.
889 The file descriptor associated with the BFD is closed (even
890 if it was passed in to BFD by <<bfd_fdopenr>>).
892 <<TRUE>> is returned if all is ok, otherwise <<FALSE>>.
895 bool
896 bfd_close (bfd *abfd)
898 bool ret = (!bfd_write_p (abfd)
899 || BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd)));
901 return bfd_close_all_done (abfd) && ret;
905 FUNCTION
906 bfd_close_all_done
908 SYNOPSIS
909 bool bfd_close_all_done (bfd *);
911 DESCRIPTION
912 Close a BFD. Differs from <<bfd_close>> since it does not
913 complete any pending operations. This routine would be used
914 if the application had just used BFD for swapping and didn't
915 want to use any of the writing code.
917 If the created file is executable, then <<chmod>> is called
918 to mark it as such.
920 All memory attached to the BFD is released.
922 <<TRUE>> is returned if all is ok, otherwise <<FALSE>>.
925 bool
926 bfd_close_all_done (bfd *abfd)
928 bool ret = BFD_SEND (abfd, _close_and_cleanup, (abfd));
930 if (abfd->iovec != NULL)
931 ret &= abfd->iovec->bclose (abfd) == 0;
933 if (ret)
934 _maybe_make_executable (abfd);
936 _bfd_delete_bfd (abfd);
937 _bfd_clear_error_data ();
939 return ret;
943 FUNCTION
944 bfd_create
946 SYNOPSIS
947 bfd *bfd_create (const char *filename, bfd *templ);
949 DESCRIPTION
950 Create a new BFD in the manner of <<bfd_openw>>, but without
951 opening a file. The new BFD takes the target from the target
952 used by @var{templ}. The format is always set to <<bfd_object>>.
954 A copy of the @var{filename} argument is stored in the newly created
955 BFD. It can be accessed via the bfd_get_filename() macro.
958 bfd *
959 bfd_create (const char *filename, bfd *templ)
961 bfd *nbfd;
963 nbfd = _bfd_new_bfd ();
964 if (nbfd == NULL)
965 return NULL;
966 /* PR 11983: Do not cache the original filename, but
967 rather make a copy - the original might go away. */
968 if (!bfd_set_filename (nbfd, filename))
970 _bfd_delete_bfd (nbfd);
971 return NULL;
973 if (templ)
974 nbfd->xvec = templ->xvec;
975 nbfd->direction = no_direction;
976 bfd_set_format (nbfd, bfd_object);
978 return nbfd;
982 FUNCTION
983 bfd_make_writable
985 SYNOPSIS
986 bool bfd_make_writable (bfd *abfd);
988 DESCRIPTION
989 Takes a BFD as created by <<bfd_create>> and converts it
990 into one like as returned by <<bfd_openw>>. It does this
991 by converting the BFD to BFD_IN_MEMORY. It's assumed that
992 you will call <<bfd_make_readable>> on this bfd later.
994 <<TRUE>> is returned if all is ok, otherwise <<FALSE>>.
997 bool
998 bfd_make_writable (bfd *abfd)
1000 struct bfd_in_memory *bim;
1002 if (abfd->direction != no_direction)
1004 bfd_set_error (bfd_error_invalid_operation);
1005 return false;
1008 bim = (struct bfd_in_memory *) bfd_malloc (sizeof (struct bfd_in_memory));
1009 if (bim == NULL)
1010 return false; /* bfd_error already set. */
1011 abfd->iostream = bim;
1012 /* bfd_write will grow these as needed. */
1013 bim->size = 0;
1014 bim->buffer = 0;
1016 abfd->flags |= BFD_IN_MEMORY;
1017 abfd->iovec = &_bfd_memory_iovec;
1018 abfd->origin = 0;
1019 abfd->direction = write_direction;
1020 abfd->where = 0;
1022 return true;
1026 FUNCTION
1027 bfd_make_readable
1029 SYNOPSIS
1030 bool bfd_make_readable (bfd *abfd);
1032 DESCRIPTION
1033 Takes a BFD as created by <<bfd_create>> and
1034 <<bfd_make_writable>> and converts it into one like as
1035 returned by <<bfd_openr>>. It does this by writing the
1036 contents out to the memory buffer, then reversing the
1037 direction.
1039 <<TRUE>> is returned if all is ok, otherwise <<FALSE>>. */
1041 bool
1042 bfd_make_readable (bfd *abfd)
1044 if (abfd->direction != write_direction || !(abfd->flags & BFD_IN_MEMORY))
1046 bfd_set_error (bfd_error_invalid_operation);
1047 return false;
1050 if (! BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd)))
1051 return false;
1053 if (! BFD_SEND (abfd, _close_and_cleanup, (abfd)))
1054 return false;
1056 abfd->arch_info = &bfd_default_arch_struct;
1058 abfd->where = 0;
1059 abfd->format = bfd_unknown;
1060 abfd->my_archive = NULL;
1061 abfd->origin = 0;
1062 abfd->opened_once = false;
1063 abfd->output_has_begun = false;
1064 abfd->section_count = 0;
1065 abfd->usrdata = NULL;
1066 abfd->cacheable = false;
1067 abfd->mtime_set = false;
1069 abfd->target_defaulted = true;
1070 abfd->direction = read_direction;
1071 abfd->sections = 0;
1072 abfd->symcount = 0;
1073 abfd->outsymbols = 0;
1074 abfd->tdata.any = 0;
1075 abfd->size = 0;
1077 bfd_section_list_clear (abfd);
1078 bfd_check_format (abfd, bfd_object);
1080 return true;
1084 GNU Extension: separate debug-info files
1086 The idea here is that a special section called .gnu_debuglink might be
1087 embedded in a binary file, which indicates that some *other* file
1088 contains the real debugging information. This special section contains a
1089 filename and CRC32 checksum, which we read and resolve to another file,
1090 if it exists.
1092 This facilitates "optional" provision of debugging information, without
1093 having to provide two complete copies of every binary object (with and
1094 without debug symbols). */
1096 #define GNU_DEBUGLINK ".gnu_debuglink"
1097 #define GNU_DEBUGALTLINK ".gnu_debugaltlink"
1100 FUNCTION
1101 bfd_calc_gnu_debuglink_crc32
1103 SYNOPSIS
1104 uint32_t bfd_calc_gnu_debuglink_crc32
1105 (uint32_t crc, const bfd_byte *buf, bfd_size_type len);
1107 DESCRIPTION
1108 Computes a CRC value as used in the .gnu_debuglink section.
1109 Advances the previously computed @var{crc} value by computing
1110 and adding in the crc32 for @var{len} bytes of @var{buf}.
1112 Return the updated CRC32 value.
1115 uint32_t
1116 bfd_calc_gnu_debuglink_crc32 (uint32_t crc,
1117 const bfd_byte *buf,
1118 bfd_size_type len)
1120 static const uint32_t crc32_table[256] =
1122 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
1123 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
1124 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
1125 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
1126 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
1127 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
1128 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
1129 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
1130 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
1131 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
1132 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
1133 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
1134 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
1135 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
1136 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
1137 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
1138 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
1139 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
1140 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
1141 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
1142 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
1143 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
1144 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
1145 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
1146 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
1147 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
1148 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
1149 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
1150 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
1151 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
1152 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
1153 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
1154 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
1155 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
1156 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
1157 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
1158 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
1159 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
1160 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
1161 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
1162 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
1163 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
1164 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
1165 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
1166 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
1167 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
1168 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
1169 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
1170 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
1171 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
1172 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
1173 0x2d02ef8d
1175 const bfd_byte *end;
1177 crc = ~crc & 0xffffffff;
1178 for (end = buf + len; buf < end; ++ buf)
1179 crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
1180 return ~crc & 0xffffffff;
1184 /* Extracts the filename and CRC32 value for any separate debug
1185 information file associated with @var{abfd}.
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 a uint32_t pointer.
1191 Returns the filename of the associated debug information file,
1192 or NULL if there is no such file. If the filename was found
1193 then the contents of @var{crc32_out} are updated to hold the
1194 corresponding CRC32 value for the file.
1196 The returned filename is allocated with @code{malloc}; freeing
1197 it is the responsibility of the caller. */
1199 static char *
1200 bfd_get_debug_link_info_1 (bfd *abfd, void *crc32_out)
1202 asection *sect;
1203 uint32_t *crc32 = crc32_out;
1204 bfd_byte *contents;
1205 unsigned int crc_offset;
1206 char *name;
1207 bfd_size_type size;
1209 BFD_ASSERT (abfd);
1210 BFD_ASSERT (crc32_out);
1212 sect = bfd_get_section_by_name (abfd, GNU_DEBUGLINK);
1214 if (sect == NULL || (sect->flags & SEC_HAS_CONTENTS) == 0)
1215 return NULL;
1217 size = bfd_section_size (sect);
1219 /* PR 22794: Make sure that the section has a reasonable size. */
1220 if (size < 8)
1221 return NULL;
1223 if (!bfd_malloc_and_get_section (abfd, sect, &contents))
1224 return NULL;
1226 /* CRC value is stored after the filename, aligned up to 4 bytes. */
1227 name = (char *) contents;
1228 /* PR 17597: Avoid reading off the end of the buffer. */
1229 crc_offset = strnlen (name, size) + 1;
1230 crc_offset = (crc_offset + 3) & ~3;
1231 if (crc_offset + 4 > size)
1233 free (name);
1234 return NULL;
1237 *crc32 = bfd_get_32 (abfd, contents + crc_offset);
1238 return name;
1243 FUNCTION
1244 bfd_get_debug_link_info
1246 SYNOPSIS
1247 char *bfd_get_debug_link_info (bfd *abfd, uint32_t *crc32_out);
1249 DESCRIPTION
1250 Extracts the filename and CRC32 value for any separate debug
1251 information file associated with @var{abfd}.
1253 Returns the filename of the associated debug information file,
1254 or NULL if there is no such file. If the filename was found
1255 then the contents of @var{crc32_out} are updated to hold the
1256 corresponding CRC32 value for the file.
1258 The returned filename is allocated with @code{malloc}; freeing
1259 it is the responsibility of the caller.
1262 char *
1263 bfd_get_debug_link_info (bfd *abfd, uint32_t *crc32_out)
1265 return bfd_get_debug_link_info_1 (abfd, crc32_out);
1269 FUNCTION
1270 bfd_get_alt_debug_link_info
1272 SYNOPSIS
1273 char *bfd_get_alt_debug_link_info (bfd * abfd,
1274 bfd_size_type *buildid_len,
1275 bfd_byte **buildid_out);
1277 DESCRIPTION
1278 Fetch the filename and BuildID value for any alternate debuginfo
1279 associated with @var{abfd}. Return NULL if no such info found,
1280 otherwise return filename and update @var{buildid_len} and
1281 @var{buildid_out}. The returned filename and build_id are
1282 allocated with @code{malloc}; freeing them is the responsibility
1283 of the caller.
1286 char *
1287 bfd_get_alt_debug_link_info (bfd * abfd, bfd_size_type *buildid_len,
1288 bfd_byte **buildid_out)
1290 asection *sect;
1291 bfd_byte *contents;
1292 unsigned int buildid_offset;
1293 char *name;
1294 bfd_size_type size;
1296 BFD_ASSERT (abfd);
1297 BFD_ASSERT (buildid_len);
1298 BFD_ASSERT (buildid_out);
1300 sect = bfd_get_section_by_name (abfd, GNU_DEBUGALTLINK);
1302 if (sect == NULL || (sect->flags & SEC_HAS_CONTENTS) == 0)
1303 return NULL;
1305 size = bfd_section_size (sect);
1306 if (size < 8)
1307 return NULL;
1309 if (!bfd_malloc_and_get_section (abfd, sect, & contents))
1310 return NULL;
1312 /* BuildID value is stored after the filename. */
1313 name = (char *) contents;
1314 buildid_offset = strnlen (name, size) + 1;
1315 if (buildid_offset >= bfd_section_size (sect))
1316 return NULL;
1318 *buildid_len = size - buildid_offset;
1319 *buildid_out = bfd_malloc (*buildid_len);
1320 memcpy (*buildid_out, contents + buildid_offset, *buildid_len);
1322 return name;
1325 /* Checks to see if @var{name} is a file and if its contents match
1326 @var{crc32}, which is a pointer to a @code{uint32_t}
1327 containing a CRC32.
1329 The @var{crc32_p} parameter is an untyped pointer because this
1330 routine is used as a @code{check_func_type} function. */
1332 static bool
1333 separate_debug_file_exists (const char *name, void *crc32_p)
1335 unsigned char buffer[8 * 1024];
1336 uint32_t file_crc = 0;
1337 FILE *f;
1338 bfd_size_type count;
1339 uint32_t crc;
1341 BFD_ASSERT (name);
1342 BFD_ASSERT (crc32_p);
1344 crc = *(uint32_t *) crc32_p;
1346 f = _bfd_real_fopen (name, FOPEN_RB);
1347 if (f == NULL)
1348 return false;
1350 while ((count = fread (buffer, 1, sizeof (buffer), f)) > 0)
1351 file_crc = bfd_calc_gnu_debuglink_crc32 (file_crc, buffer, count);
1353 fclose (f);
1355 return crc == file_crc;
1358 /* Checks to see if @var{name} is a file. */
1360 static bool
1361 separate_alt_debug_file_exists (const char *name, void *unused ATTRIBUTE_UNUSED)
1363 FILE *f;
1365 BFD_ASSERT (name);
1367 f = _bfd_real_fopen (name, FOPEN_RB);
1368 if (f == NULL)
1369 return false;
1371 fclose (f);
1373 return true;
1376 /* Searches for a debug information file corresponding to @var{abfd}.
1378 The name of the separate debug info file is returned by the
1379 @var{get} function. This function scans various fixed locations
1380 in the filesystem, including the file tree rooted at @var{dir}.
1381 If the @var{include_dirs} parameter is true then the directory
1382 components of @var{abfd}'s filename will be included in the
1383 searched locations.
1385 @var{data} is passed unmodified to the @var{get} and @var{check}
1386 functions. It is generally used to implement build-id-like
1387 matching in the callback functions.
1389 Returns the filename of the first file to be found which
1390 receives a TRUE result from the @var{check} function.
1391 Returns NULL if no valid file could be found. */
1393 typedef char * (*get_func_type) (bfd *, void *);
1394 typedef bool (*check_func_type) (const char *, void *);
1396 static char *
1397 find_separate_debug_file (bfd *abfd,
1398 const char *debug_file_directory,
1399 bool include_dirs,
1400 get_func_type get_func,
1401 check_func_type check_func,
1402 void *func_data)
1404 char *base;
1405 char *dir;
1406 char *debugfile;
1407 char *canon_dir;
1408 size_t dirlen;
1409 size_t canon_dirlen;
1411 BFD_ASSERT (abfd);
1412 if (debug_file_directory == NULL)
1413 debug_file_directory = ".";
1415 /* BFD may have been opened from a stream. */
1416 if (bfd_get_filename (abfd) == NULL)
1418 bfd_set_error (bfd_error_invalid_operation);
1419 return NULL;
1422 base = get_func (abfd, func_data);
1424 if (base == NULL)
1425 return NULL;
1427 if (base[0] == '\0')
1429 free (base);
1430 bfd_set_error (bfd_error_no_debug_section);
1431 return NULL;
1434 if (include_dirs)
1436 const char *fname = bfd_get_filename (abfd);
1437 for (dirlen = strlen (fname); dirlen > 0; dirlen--)
1438 if (IS_DIR_SEPARATOR (fname[dirlen - 1]))
1439 break;
1441 dir = (char *) bfd_malloc (dirlen + 1);
1442 if (dir == NULL)
1444 free (base);
1445 return NULL;
1447 memcpy (dir, fname, dirlen);
1448 dir[dirlen] = '\0';
1450 else
1452 dir = (char *) bfd_malloc (1);
1453 * dir = 0;
1454 dirlen = 0;
1457 /* Compute the canonical name of the bfd object with all symbolic links
1458 resolved, for use in the global debugfile directory. */
1459 canon_dir = lrealpath (bfd_get_filename (abfd));
1460 for (canon_dirlen = strlen (canon_dir); canon_dirlen > 0; canon_dirlen--)
1461 if (IS_DIR_SEPARATOR (canon_dir[canon_dirlen - 1]))
1462 break;
1463 canon_dir[canon_dirlen] = '\0';
1465 #ifndef EXTRA_DEBUG_ROOT1
1466 #define EXTRA_DEBUG_ROOT1 "/usr/lib/debug"
1467 #endif
1468 #ifndef EXTRA_DEBUG_ROOT2
1469 #define EXTRA_DEBUG_ROOT2 "/usr/lib/debug/usr"
1470 #endif
1472 debugfile = (char *)
1473 bfd_malloc (strlen (debug_file_directory) + 1
1474 + (canon_dirlen > dirlen ? canon_dirlen : dirlen)
1475 + strlen (".debug/")
1476 #ifdef EXTRA_DEBUG_ROOT1
1477 + strlen (EXTRA_DEBUG_ROOT1)
1478 #endif
1479 #ifdef EXTRA_DEBUG_ROOT2
1480 + strlen (EXTRA_DEBUG_ROOT2)
1481 #endif
1482 + strlen (base)
1483 + 1);
1484 if (debugfile == NULL)
1485 goto found; /* Actually this returns NULL. */
1487 /* First try in the same directory as the original file.
1489 FIXME: Strictly speaking if we are using the build-id method,
1490 (ie include_dirs == FALSE) then we should only check absolute
1491 paths, not relative ones like this one (and the next one).
1492 The check is left in however as this allows the binutils
1493 testsuite to exercise this feature without having to install
1494 a file into the root filesystem. (See binutils/testsuite/
1495 binutils-all/objdump.exp for the test). */
1496 sprintf (debugfile, "%s%s", dir, base);
1497 if (check_func (debugfile, func_data))
1498 goto found;
1500 /* Then try in a subdirectory called .debug. */
1501 sprintf (debugfile, "%s.debug/%s", dir, base);
1502 if (check_func (debugfile, func_data))
1503 goto found;
1505 #ifdef EXTRA_DEBUG_ROOT1
1506 /* Try the first extra debug file root. */
1507 sprintf (debugfile, "%s%s%s", EXTRA_DEBUG_ROOT1,
1508 include_dirs ? canon_dir : "/", base);
1509 if (check_func (debugfile, func_data))
1510 goto found;
1511 #endif
1513 #ifdef EXTRA_DEBUG_ROOT2
1514 /* Try the second extra debug file root. */
1515 sprintf (debugfile, "%s%s%s", EXTRA_DEBUG_ROOT2,
1516 include_dirs ? canon_dir : "/", base);
1517 if (check_func (debugfile, func_data))
1518 goto found;
1519 #endif
1521 /* Then try in the global debugfile directory. */
1522 strcpy (debugfile, debug_file_directory);
1523 dirlen = strlen (debug_file_directory) - 1;
1524 if (include_dirs)
1526 if (dirlen > 0
1527 && debug_file_directory[dirlen] != '/'
1528 && canon_dir[0] != '/')
1529 strcat (debugfile, "/");
1530 strcat (debugfile, canon_dir);
1532 else
1534 if (dirlen > 0 && debug_file_directory[dirlen] != '/')
1535 strcat (debugfile, "/");
1537 strcat (debugfile, base);
1539 if (check_func (debugfile, func_data))
1540 goto found;
1542 /* Failed to find the file. */
1543 free (debugfile);
1544 debugfile = NULL;
1546 found:
1547 free (base);
1548 free (dir);
1549 free (canon_dir);
1550 return debugfile;
1554 FUNCTION
1555 bfd_follow_gnu_debuglink
1557 SYNOPSIS
1558 char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
1560 DESCRIPTION
1561 Takes a BFD and searches it for a .gnu_debuglink section. If this
1562 section is found, it examines the section for the name and checksum
1563 of a '.debug' file containing auxiliary debugging information. It
1564 then searches the filesystem for this .debug file in some standard
1565 locations, including the directory tree rooted at @var{dir}, and if
1566 found returns the full filename.
1568 If @var{dir} is NULL, the search will take place starting at
1569 the current directory.
1571 Returns <<NULL>> on any errors or failure to locate the .debug
1572 file, otherwise a pointer to a heap-allocated string
1573 containing the filename. The caller is responsible for
1574 freeing this string.
1577 char *
1578 bfd_follow_gnu_debuglink (bfd *abfd, const char *dir)
1580 uint32_t crc32;
1582 return find_separate_debug_file (abfd, dir, true,
1583 bfd_get_debug_link_info_1,
1584 separate_debug_file_exists, &crc32);
1587 /* Helper for bfd_follow_gnu_debugaltlink. It just returns the name
1588 of the separate debug file. */
1590 static char *
1591 get_alt_debug_link_info_shim (bfd * abfd, void *unused ATTRIBUTE_UNUSED)
1593 bfd_size_type len;
1594 bfd_byte *buildid = NULL;
1595 char *result = bfd_get_alt_debug_link_info (abfd, &len, &buildid);
1597 free (buildid);
1599 return result;
1603 FUNCTION
1604 bfd_follow_gnu_debugaltlink
1606 SYNOPSIS
1607 char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir);
1609 DESCRIPTION
1610 Takes a BFD and searches it for a .gnu_debugaltlink section. If this
1611 section is found, it examines the section for the name of a file
1612 containing auxiliary debugging information. It then searches the
1613 filesystem for this file in a set of standard locations, including
1614 the directory tree rooted at @var{dir}, and if found returns the
1615 full filename.
1617 If @var{dir} is NULL, the search will take place starting at
1618 the current directory.
1620 Returns <<NULL>> on any errors or failure to locate the debug
1621 file, otherwise a pointer to a heap-allocated string
1622 containing the filename. The caller is responsible for
1623 freeing this string.
1626 char *
1627 bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir)
1629 return find_separate_debug_file (abfd, dir, true,
1630 get_alt_debug_link_info_shim,
1631 separate_alt_debug_file_exists,
1632 NULL);
1636 FUNCTION
1637 bfd_create_gnu_debuglink_section
1639 SYNOPSIS
1640 struct bfd_section *bfd_create_gnu_debuglink_section
1641 (bfd *abfd, const char *filename);
1643 DESCRIPTION
1644 Takes a @var{BFD} and adds a .gnu_debuglink section to it. The
1645 section is sized to be big enough to contain a link to the specified
1646 @var{filename}.
1648 A pointer to the new section is returned if all is ok. Otherwise
1649 <<NULL>> is returned and bfd_error is set.
1652 asection *
1653 bfd_create_gnu_debuglink_section (bfd *abfd, const char *filename)
1655 asection *sect;
1656 bfd_size_type debuglink_size;
1657 flagword flags;
1659 if (abfd == NULL || filename == NULL)
1661 bfd_set_error (bfd_error_invalid_operation);
1662 return NULL;
1665 /* Strip off any path components in filename. */
1666 filename = lbasename (filename);
1668 sect = bfd_get_section_by_name (abfd, GNU_DEBUGLINK);
1669 if (sect)
1671 /* Section already exists. */
1672 bfd_set_error (bfd_error_invalid_operation);
1673 return NULL;
1676 flags = SEC_HAS_CONTENTS | SEC_READONLY | SEC_DEBUGGING;
1677 sect = bfd_make_section_with_flags (abfd, GNU_DEBUGLINK, flags);
1678 if (sect == NULL)
1679 return NULL;
1681 /* Compute the size of the section. Allow for the CRC after the filename,
1682 and padding so that it will start on a 4-byte boundary. */
1683 debuglink_size = strlen (filename) + 1;
1684 debuglink_size += 3;
1685 debuglink_size &= ~3;
1686 debuglink_size += 4;
1688 if (!bfd_set_section_size (sect, debuglink_size))
1689 /* XXX Should we delete the section from the bfd ? */
1690 return NULL;
1692 /* PR 21193: Ensure that the section has 4-byte alignment for the CRC.
1693 Note - despite the name of the function being called, we are
1694 setting an alignment power, not a byte alignment value. */
1695 bfd_set_section_alignment (sect, 2);
1697 return sect;
1702 FUNCTION
1703 bfd_fill_in_gnu_debuglink_section
1705 SYNOPSIS
1706 bool bfd_fill_in_gnu_debuglink_section
1707 (bfd *abfd, struct bfd_section *sect, const char *filename);
1709 DESCRIPTION
1710 Takes a @var{BFD} and containing a .gnu_debuglink section @var{SECT}
1711 and fills in the contents of the section to contain a link to the
1712 specified @var{filename}. The filename should be absolute or
1713 relative to the current directory.
1715 <<TRUE>> is returned if all is ok. Otherwise <<FALSE>> is returned
1716 and bfd_error is set.
1719 bool
1720 bfd_fill_in_gnu_debuglink_section (bfd *abfd,
1721 struct bfd_section *sect,
1722 const char *filename)
1724 bfd_size_type debuglink_size;
1725 uint32_t crc32;
1726 char * contents;
1727 bfd_size_type crc_offset;
1728 FILE * handle;
1729 unsigned char buffer[8 * 1024];
1730 size_t count;
1731 size_t filelen;
1733 if (abfd == NULL || sect == NULL || filename == NULL)
1735 bfd_set_error (bfd_error_invalid_operation);
1736 return false;
1739 /* Open the linked file so that we can compute a CRC. */
1740 handle = _bfd_real_fopen (filename, FOPEN_RB);
1741 if (handle == NULL)
1743 bfd_set_error (bfd_error_system_call);
1744 return false;
1747 crc32 = 0;
1748 while ((count = fread (buffer, 1, sizeof buffer, handle)) > 0)
1749 crc32 = bfd_calc_gnu_debuglink_crc32 (crc32, buffer, count);
1750 fclose (handle);
1752 /* Strip off any path components in filename,
1753 now that we no longer need them. */
1754 filename = lbasename (filename);
1756 filelen = strlen (filename);
1757 debuglink_size = filelen + 1;
1758 debuglink_size += 3;
1759 debuglink_size &= ~3;
1760 debuglink_size += 4;
1762 contents = (char *) bfd_malloc (debuglink_size);
1763 if (contents == NULL)
1765 /* XXX Should we delete the section from the bfd ? */
1766 return false;
1769 crc_offset = debuglink_size - 4;
1770 memcpy (contents, filename, filelen);
1771 memset (contents + filelen, 0, crc_offset - filelen);
1773 bfd_put_32 (abfd, crc32, contents + crc_offset);
1775 if (! bfd_set_section_contents (abfd, sect, contents, 0, debuglink_size))
1777 /* XXX Should we delete the section from the bfd ? */
1778 free (contents);
1779 return false;
1782 return true;
1785 /* Finds the build-id associated with @var{abfd}. If the build-id is
1786 extracted from the note section then a build-id structure is built
1787 for it, using memory allocated to @var{abfd}, and this is then
1788 attached to the @var{abfd}.
1790 Returns a pointer to the build-id structure if a build-id could be
1791 found. If no build-id is found NULL is returned and error code is
1792 set. */
1794 static struct bfd_build_id *
1795 get_build_id (bfd *abfd)
1797 struct bfd_build_id *build_id;
1798 Elf_Internal_Note inote;
1799 Elf_External_Note *enote;
1800 bfd_byte *contents;
1801 asection *sect;
1802 bfd_size_type size;
1804 BFD_ASSERT (abfd);
1806 if (abfd->build_id && abfd->build_id->size > 0)
1807 /* Save some time by using the already computed build-id. */
1808 return (struct bfd_build_id *) abfd->build_id;
1810 sect = bfd_get_section_by_name (abfd, ".note.gnu.build-id");
1811 if (sect == NULL
1812 || (sect->flags & SEC_HAS_CONTENTS) == 0)
1814 bfd_set_error (bfd_error_no_debug_section);
1815 return NULL;
1818 size = bfd_section_size (sect);
1819 /* FIXME: Should we support smaller build-id notes ? */
1820 if (size < 0x24)
1822 bfd_set_error (bfd_error_invalid_operation);
1823 return NULL;
1826 if (!bfd_malloc_and_get_section (abfd, sect, & contents))
1827 return NULL;
1829 /* FIXME: Paranoia - allow for compressed build-id sections.
1830 Maybe we should complain if this size is different from
1831 the one obtained above... */
1832 size = bfd_section_size (sect);
1833 if (size < sizeof (Elf_External_Note))
1835 bfd_set_error (bfd_error_invalid_operation);
1836 free (contents);
1837 return NULL;
1840 enote = (Elf_External_Note *) contents;
1841 inote.type = H_GET_32 (abfd, enote->type);
1842 inote.namesz = H_GET_32 (abfd, enote->namesz);
1843 inote.namedata = enote->name;
1844 inote.descsz = H_GET_32 (abfd, enote->descsz);
1845 inote.descdata = inote.namedata + BFD_ALIGN (inote.namesz, 4);
1846 /* FIXME: Should we check for extra notes in this section ? */
1848 if (inote.descsz <= 0
1849 || inote.type != NT_GNU_BUILD_ID
1850 || inote.namesz != 4 /* sizeof "GNU" */
1851 || !startswith (inote.namedata, "GNU")
1852 || inote.descsz > 0x7ffffffe
1853 || size < (12 + BFD_ALIGN (inote.namesz, 4) + inote.descsz))
1855 free (contents);
1856 bfd_set_error (bfd_error_invalid_operation);
1857 return NULL;
1860 build_id = bfd_alloc (abfd, sizeof (struct bfd_build_id) + inote.descsz);
1861 if (build_id == NULL)
1863 free (contents);
1864 return NULL;
1867 build_id->size = inote.descsz;
1868 memcpy (build_id->data, inote.descdata, inote.descsz);
1869 abfd->build_id = build_id;
1870 free (contents);
1872 return build_id;
1875 /* Searches @var{abfd} for a build-id, and then constructs a pathname
1876 from it. The path is computed as .build-id/NN/NN+NN.debug where
1877 NNNN+NN is the build-id value as a hexadecimal string.
1879 Returns the constructed filename or NULL upon error. It is the
1880 caller's responsibility to free the memory used to hold the
1881 filename. If a filename is returned then the @var{build_id_out_p}
1882 parameter (which points to a @code{struct bfd_build_id} pointer) is
1883 set to a pointer to the build_id structure. */
1885 static char *
1886 get_build_id_name (bfd *abfd, void *build_id_out_p)
1888 struct bfd_build_id **build_id_out = build_id_out_p;
1889 struct bfd_build_id *build_id;
1890 char *name;
1891 char *n;
1892 bfd_size_type s;
1893 bfd_byte *d;
1895 if (abfd == NULL || bfd_get_filename (abfd) == NULL || build_id_out == NULL)
1897 bfd_set_error (bfd_error_invalid_operation);
1898 return NULL;
1901 build_id = get_build_id (abfd);
1902 if (build_id == NULL)
1903 return NULL;
1905 /* Compute the debug pathname corresponding to the build-id. */
1906 name = bfd_malloc (strlen (".build-id/") + build_id->size * 2 + 2 + strlen (".debug"));
1907 if (name == NULL)
1909 bfd_set_error (bfd_error_no_memory);
1910 return NULL;
1912 n = name;
1913 d = build_id->data;
1914 s = build_id->size;
1916 n += sprintf (n, ".build-id/");
1917 n += sprintf (n, "%02x", (unsigned) *d++); s--;
1918 n += sprintf (n, "/");
1919 while (s--)
1920 n += sprintf (n, "%02x", (unsigned) *d++);
1921 n += sprintf (n, ".debug");
1923 *build_id_out = build_id;
1924 return name;
1927 /* Checks to see if @var{name} is a readable file and if its build-id
1928 matches @var{buildid}.
1930 Returns TRUE if the file exists, is readable, and contains a
1931 build-id which matches the build-id pointed at by @var{build_id_p}
1932 (which is really a @code{struct bfd_build_id **}). */
1934 static bool
1935 check_build_id_file (const char *name, void *buildid_p)
1937 struct bfd_build_id *orig_build_id;
1938 struct bfd_build_id *build_id;
1939 bfd * file;
1940 bool result;
1942 BFD_ASSERT (name);
1943 BFD_ASSERT (buildid_p);
1945 file = bfd_openr (name, NULL);
1946 if (file == NULL)
1947 return false;
1949 /* If the file is an archive, process all of its elements. */
1950 if (! bfd_check_format (file, bfd_object))
1952 bfd_close (file);
1953 return false;
1956 build_id = get_build_id (file);
1957 if (build_id == NULL)
1959 bfd_close (file);
1960 return false;
1963 orig_build_id = *(struct bfd_build_id **) buildid_p;
1965 result = build_id->size == orig_build_id->size
1966 && memcmp (build_id->data, orig_build_id->data, build_id->size) == 0;
1968 (void) bfd_close (file);
1970 return result;
1974 FUNCTION
1975 bfd_follow_build_id_debuglink
1977 SYNOPSIS
1978 char *bfd_follow_build_id_debuglink (bfd *abfd, const char *dir);
1980 DESCRIPTION
1981 Takes @var{abfd} and searches it for a .note.gnu.build-id section.
1982 If this section is found, it extracts the value of the NT_GNU_BUILD_ID
1983 note, which should be a hexadecimal value @var{NNNN+NN} (for
1984 32+ hex digits). It then searches the filesystem for a file named
1985 @var{.build-id/NN/NN+NN.debug} in a set of standard locations,
1986 including the directory tree rooted at @var{dir}. The filename
1987 of the first matching file to be found is returned. A matching
1988 file should contain a .note.gnu.build-id section with the same
1989 @var{NNNN+NN} note as @var{abfd}, although this check is currently
1990 not implemented.
1992 If @var{dir} is NULL, the search will take place starting at
1993 the current directory.
1995 Returns <<NULL>> on any errors or failure to locate the debug
1996 file, otherwise a pointer to a heap-allocated string
1997 containing the filename. The caller is responsible for
1998 freeing this string.
2001 char *
2002 bfd_follow_build_id_debuglink (bfd *abfd, const char *dir)
2004 struct bfd_build_id *build_id;
2006 return find_separate_debug_file (abfd, dir, false,
2007 get_build_id_name,
2008 check_build_id_file, &build_id);
2012 FUNCTION
2013 bfd_set_filename
2015 SYNOPSIS
2016 const char *bfd_set_filename (bfd *abfd, const char *filename);
2018 DESCRIPTION
2019 Set the filename of @var{abfd}, copying the FILENAME parameter to
2020 bfd_alloc'd memory owned by @var{abfd}. Returns a pointer the
2021 newly allocated name, or NULL if the allocation failed.
2024 const char *
2025 bfd_set_filename (bfd *abfd, const char *filename)
2027 size_t len = strlen (filename) + 1;
2028 char *n = bfd_alloc (abfd, len);
2030 if (n == NULL)
2031 return NULL;
2033 if (abfd->filename != NULL)
2035 /* PR 29389. If we attempt to rename a file that has been closed due
2036 to caching, then we will not be able to reopen it later on. */
2037 if (abfd->iostream == NULL && (abfd->flags & BFD_CLOSED_BY_CACHE))
2039 bfd_set_error (bfd_error_invalid_operation);
2040 return NULL;
2043 /* Similarly if we attempt to close a renamed file because the
2044 cache is now full, we will not be able to reopen it later on. */
2045 if (abfd->iostream != NULL)
2046 abfd->cacheable = 0;
2049 memcpy (n, filename, len);
2050 abfd->filename = n;
2052 return n;