]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - binutils/binemul.c
Update year range in copyright notice of binutils files
[thirdparty/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
b34976b6 41bfd_boolean
492d5973
L
42ar_emul_append (bfd **after_bfd, char *file_name, const char *target,
43 bfd_boolean verbose, bfd_boolean 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
53 return FALSE;
54}
55
56bfd_boolean
57ar_emul_append_bfd (bfd **after_bfd, bfd *new_bfd,
58 bfd_boolean verbose, bfd_boolean 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
b34976b6 64 return FALSE;
eb1e0e80
NC
65}
66
a8da6403 67static bfd_boolean
13485ea2
AM
68any_ok (bfd *new_bfd ATTRIBUTE_UNUSED)
69{
70 return TRUE;
71}
72
73bfd_boolean
74do_ar_emul_append (bfd **after_bfd, bfd *new_bfd,
75 bfd_boolean verbose, bfd_boolean flatten,
76 bfd_boolean (*check) (bfd *))
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;
83 bfd_boolean added = FALSE;
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 {
13485ea2 89 if (do_ar_emul_append (after_bfd, elt, verbose, TRUE, check))
a8da6403
NC
90 {
91 added = TRUE;
92 after_bfd = &((*after_bfd)->archive_next);
93 }
94 }
95
96 return added;
97 }
98
13485ea2
AM
99 if (!check (new_bfd))
100 return FALSE;
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
107 return TRUE;
108}
109
b34976b6 110bfd_boolean
f3016d6c
HC
111ar_emul_default_append (bfd **after_bfd, bfd *new_bfd,
112 bfd_boolean verbose, bfd_boolean flatten)
eb1e0e80 113{
13485ea2 114 return do_ar_emul_append (after_bfd, new_bfd, verbose, flatten, any_ok);
eb1e0e80
NC
115}
116
b34976b6 117bfd_boolean
492d5973
L
118ar_emul_replace (bfd **after_bfd, char *file_name, const char *target,
119 bfd_boolean 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
b34976b6 130 return FALSE;
eb1e0e80
NC
131}
132
b34976b6 133bfd_boolean
f3016d6c
HC
134ar_emul_replace_bfd (bfd **after_bfd, bfd *new_bfd,
135 bfd_boolean 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
f3016d6c
HC
141 return FALSE;
142}
eb1e0e80 143
f3016d6c
HC
144bfd_boolean
145ar_emul_default_replace (bfd **after_bfd, bfd *new_bfd,
146 bfd_boolean verbose)
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
b34976b6 153 return TRUE;
eb1e0e80
NC
154}
155
b34976b6 156bfd_boolean
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
b34976b6 162 return FALSE;
eb1e0e80
NC
163}
164
b34976b6 165bfd_boolean
2da42df6 166ar_emul_default_parse_arg (char *arg ATTRIBUTE_UNUSED)
eb1e0e80 167{
b34976b6 168 return FALSE;
eb1e0e80 169}