Fix two regressions caused by CU / TU merging
[deliverable/binutils-gdb.git] / binutils / binemul.c
CommitLineData
eb1e0e80 1/* Binutils emulation layer.
250d07de 2 Copyright (C) 2002-2021 Free Software Foundation, Inc.
ad94be02 3 Written by Tom Rix, Red Hat Inc.
eb1e0e80
NC
4
5 This file is part of GNU Binutils.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
32866df7 9 the Free Software Foundation; either version 3 of the License, or
eb1e0e80
NC
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
32866df7
NC
19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 MA 02110-1301, USA. */
eb1e0e80
NC
21
22#include "binemul.h"
23
24extern bin_emulation_xfer_type bin_dummy_emulation;
25
26void
2da42df6 27ar_emul_usage (FILE *fp)
eb1e0e80
NC
28{
29 if (bin_dummy_emulation.ar_usage)
30 bin_dummy_emulation.ar_usage (fp);
31}
32
33void
2da42df6 34ar_emul_default_usage (FILE *fp)
eb1e0e80
NC
35{
36 AR_EMUL_USAGE_PRINT_OPTION_HEADER (fp);
37 /* xgettext:c-format */
38 fprintf (fp, _(" No emulation specific options\n"));
39}
40
015dc7e1 41bool
492d5973 42ar_emul_append (bfd **after_bfd, char *file_name, const char *target,
015dc7e1 43 bool verbose, bool flatten)
f3016d6c
HC
44{
45 bfd *new_bfd;
46
47 new_bfd = bfd_openr (file_name, target);
48 AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
49 if (bin_dummy_emulation.ar_append)
50 return bin_dummy_emulation.ar_append (after_bfd, new_bfd,
51 verbose, flatten);
52
015dc7e1 53 return false;
f3016d6c
HC
54}
55
015dc7e1 56bool
f3016d6c 57ar_emul_append_bfd (bfd **after_bfd, bfd *new_bfd,
015dc7e1 58 bool verbose, bool flatten)
eb1e0e80
NC
59{
60 if (bin_dummy_emulation.ar_append)
f3016d6c 61 return bin_dummy_emulation.ar_append (after_bfd, new_bfd,
492d5973 62 verbose, flatten);
eb1e0e80 63
015dc7e1 64 return false;
eb1e0e80
NC
65}
66
015dc7e1 67static bool
13485ea2
AM
68any_ok (bfd *new_bfd ATTRIBUTE_UNUSED)
69{
015dc7e1 70 return true;
13485ea2
AM
71}
72
015dc7e1 73bool
13485ea2 74do_ar_emul_append (bfd **after_bfd, bfd *new_bfd,
015dc7e1
AM
75 bool verbose, bool flatten,
76 bool (*check) (bfd *))
13485ea2 77{
a8da6403
NC
78 /* When flattening, add the members of an archive instead of the
79 archive itself. */
80 if (flatten && bfd_check_format (new_bfd, bfd_archive))
81 {
82 bfd *elt;
015dc7e1 83 bool added = false;
a8da6403
NC
84
85 for (elt = bfd_openr_next_archived_file (new_bfd, NULL);
86 elt;
87 elt = bfd_openr_next_archived_file (new_bfd, elt))
88 {
015dc7e1 89 if (do_ar_emul_append (after_bfd, elt, verbose, true, check))
a8da6403 90 {
015dc7e1 91 added = true;
a8da6403
NC
92 after_bfd = &((*after_bfd)->archive_next);
93 }
94 }
95
96 return added;
97 }
98
13485ea2 99 if (!check (new_bfd))
015dc7e1 100 return false;
13485ea2 101
c177f377 102 AR_EMUL_APPEND_PRINT_VERBOSE (verbose, bfd_get_filename (new_bfd));
a8da6403
NC
103
104 new_bfd->archive_next = *after_bfd;
105 *after_bfd = new_bfd;
106
015dc7e1 107 return true;
a8da6403
NC
108}
109
015dc7e1 110bool
f3016d6c 111ar_emul_default_append (bfd **after_bfd, bfd *new_bfd,
015dc7e1 112 bool verbose, bool flatten)
eb1e0e80 113{
13485ea2 114 return do_ar_emul_append (after_bfd, new_bfd, verbose, flatten, any_ok);
eb1e0e80
NC
115}
116
015dc7e1 117bool
492d5973 118ar_emul_replace (bfd **after_bfd, char *file_name, const char *target,
015dc7e1 119 bool verbose)
eb1e0e80 120{
f3016d6c
HC
121 bfd *new_bfd;
122
123 new_bfd = bfd_openr (file_name, target);
124 AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
125
eb1e0e80 126 if (bin_dummy_emulation.ar_replace)
f3016d6c
HC
127 return bin_dummy_emulation.ar_replace (after_bfd, new_bfd,
128 verbose);
eb1e0e80 129
015dc7e1 130 return false;
eb1e0e80
NC
131}
132
015dc7e1 133bool
f3016d6c 134ar_emul_replace_bfd (bfd **after_bfd, bfd *new_bfd,
015dc7e1 135 bool verbose)
eb1e0e80 136{
f3016d6c
HC
137 if (bin_dummy_emulation.ar_replace)
138 return bin_dummy_emulation.ar_replace (after_bfd, new_bfd,
139 verbose);
eb1e0e80 140
015dc7e1 141 return false;
f3016d6c 142}
eb1e0e80 143
015dc7e1 144bool
f3016d6c 145ar_emul_default_replace (bfd **after_bfd, bfd *new_bfd,
015dc7e1 146 bool verbose)
f3016d6c
HC
147{
148 AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, bfd_get_filename (new_bfd));
eb1e0e80 149
13485ea2
AM
150 new_bfd->archive_next = *after_bfd;
151 *after_bfd = new_bfd;
eb1e0e80 152
015dc7e1 153 return true;
eb1e0e80
NC
154}
155
015dc7e1 156bool
2da42df6 157ar_emul_parse_arg (char *arg)
eb1e0e80
NC
158{
159 if (bin_dummy_emulation.ar_parse_arg)
160 return bin_dummy_emulation.ar_parse_arg (arg);
161
015dc7e1 162 return false;
eb1e0e80
NC
163}
164
015dc7e1 165bool
2da42df6 166ar_emul_default_parse_arg (char *arg ATTRIBUTE_UNUSED)
eb1e0e80 167{
015dc7e1 168 return false;
eb1e0e80 169}
This page took 0.7905 seconds and 4 git commands to generate.