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