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