gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / binutils / binemul.c
CommitLineData
eb1e0e80 1/* Binutils emulation layer.
b3adc24a 2 Copyright (C) 2002-2020 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)
eb1e0e80
NC
44{
45 if (bin_dummy_emulation.ar_append)
492d5973
L
46 return bin_dummy_emulation.ar_append (after_bfd, file_name, target,
47 verbose, flatten);
eb1e0e80 48
b34976b6 49 return FALSE;
eb1e0e80
NC
50}
51
a8da6403 52static bfd_boolean
13485ea2
AM
53any_ok (bfd *new_bfd ATTRIBUTE_UNUSED)
54{
55 return TRUE;
56}
57
58bfd_boolean
59do_ar_emul_append (bfd **after_bfd, bfd *new_bfd,
60 bfd_boolean verbose, bfd_boolean flatten,
61 bfd_boolean (*check) (bfd *))
62{
a8da6403
NC
63 /* When flattening, add the members of an archive instead of the
64 archive itself. */
65 if (flatten && bfd_check_format (new_bfd, bfd_archive))
66 {
67 bfd *elt;
68 bfd_boolean added = FALSE;
69
70 for (elt = bfd_openr_next_archived_file (new_bfd, NULL);
71 elt;
72 elt = bfd_openr_next_archived_file (new_bfd, elt))
73 {
13485ea2 74 if (do_ar_emul_append (after_bfd, elt, verbose, TRUE, check))
a8da6403
NC
75 {
76 added = TRUE;
77 after_bfd = &((*after_bfd)->archive_next);
78 }
79 }
80
81 return added;
82 }
83
13485ea2
AM
84 if (!check (new_bfd))
85 return FALSE;
86
c177f377 87 AR_EMUL_APPEND_PRINT_VERBOSE (verbose, bfd_get_filename (new_bfd));
a8da6403
NC
88
89 new_bfd->archive_next = *after_bfd;
90 *after_bfd = new_bfd;
91
92 return TRUE;
93}
94
b34976b6 95bfd_boolean
2da42df6 96ar_emul_default_append (bfd **after_bfd, char *file_name,
492d5973
L
97 const char *target, bfd_boolean verbose,
98 bfd_boolean flatten)
eb1e0e80 99{
a8da6403 100 bfd *new_bfd;
eb1e0e80 101
492d5973 102 new_bfd = bfd_openr (file_name, target);
a8da6403 103 AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
13485ea2 104 return do_ar_emul_append (after_bfd, new_bfd, verbose, flatten, any_ok);
eb1e0e80
NC
105}
106
b34976b6 107bfd_boolean
492d5973
L
108ar_emul_replace (bfd **after_bfd, char *file_name, const char *target,
109 bfd_boolean verbose)
eb1e0e80
NC
110{
111 if (bin_dummy_emulation.ar_replace)
492d5973
L
112 return bin_dummy_emulation.ar_replace (after_bfd, file_name,
113 target, verbose);
eb1e0e80 114
b34976b6 115 return FALSE;
eb1e0e80
NC
116}
117
b34976b6 118bfd_boolean
2da42df6 119ar_emul_default_replace (bfd **after_bfd, char *file_name,
492d5973 120 const char *target, bfd_boolean verbose)
eb1e0e80 121{
13485ea2 122 bfd *new_bfd;
eb1e0e80 123
13485ea2
AM
124 new_bfd = bfd_openr (file_name, target);
125 AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
eb1e0e80 126
eb1e0e80
NC
127 AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
128
13485ea2
AM
129 new_bfd->archive_next = *after_bfd;
130 *after_bfd = new_bfd;
eb1e0e80 131
b34976b6 132 return TRUE;
eb1e0e80
NC
133}
134
b34976b6 135bfd_boolean
2da42df6 136ar_emul_parse_arg (char *arg)
eb1e0e80
NC
137{
138 if (bin_dummy_emulation.ar_parse_arg)
139 return bin_dummy_emulation.ar_parse_arg (arg);
140
b34976b6 141 return FALSE;
eb1e0e80
NC
142}
143
b34976b6 144bfd_boolean
2da42df6 145ar_emul_default_parse_arg (char *arg ATTRIBUTE_UNUSED)
eb1e0e80 146{
b34976b6 147 return FALSE;
eb1e0e80 148}
This page took 0.733345 seconds and 4 git commands to generate.