OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-binutils/] [binutils-2.19.1/] [ld/] [ldemul.c] - Blame information for rev 12

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 jlechner
/* ldemul.c -- clearing house for ld emulation states
2
   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3
   2001, 2002, 2003, 2005, 2007, 2008
4
   Free Software Foundation, Inc.
5
 
6
   This file is part of the GNU Binutils.
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 "getopt.h"
26
#include "bfdlink.h"
27
 
28
#include "ld.h"
29
#include "ldmisc.h"
30
#include "ldexp.h"
31
#include "ldlang.h"
32
#include "ldfile.h"
33
#include "ldemul.h"
34
#include "ldmain.h"
35
#include "ldemul-list.h"
36
 
37
static ld_emulation_xfer_type *ld_emulation;
38
 
39
void
40
ldemul_hll (char *name)
41
{
42
  ld_emulation->hll (name);
43
}
44
 
45
void
46
ldemul_syslib (char *name)
47
{
48
  ld_emulation->syslib (name);
49
}
50
 
51
void
52
ldemul_after_parse (void)
53
{
54
  ld_emulation->after_parse ();
55
}
56
 
57
void
58
ldemul_before_parse (void)
59
{
60
  ld_emulation->before_parse ();
61
}
62
 
63
void
64
ldemul_after_open (void)
65
{
66
  ld_emulation->after_open ();
67
}
68
 
69
void
70
ldemul_after_allocation (void)
71
{
72
  ld_emulation->after_allocation ();
73
}
74
 
75
void
76
ldemul_before_allocation (void)
77
{
78
  ld_emulation->before_allocation ();
79
}
80
 
81
void
82
ldemul_set_output_arch (void)
83
{
84
  ld_emulation->set_output_arch ();
85
}
86
 
87
void
88
ldemul_finish (void)
89
{
90
  ld_emulation->finish ();
91
}
92
 
93
void
94
ldemul_set_symbols (void)
95
{
96
  if (ld_emulation->set_symbols)
97
    ld_emulation->set_symbols ();
98
}
99
 
100
void
101
ldemul_create_output_section_statements (void)
102
{
103
  if (ld_emulation->create_output_section_statements)
104
    ld_emulation->create_output_section_statements ();
105
}
106
 
107
char *
108
ldemul_get_script (int *isfile)
109
{
110
  return ld_emulation->get_script (isfile);
111
}
112
 
113
bfd_boolean
114
ldemul_open_dynamic_archive (const char *arch, search_dirs_type *search,
115
                             lang_input_statement_type *entry)
116
{
117
  if (ld_emulation->open_dynamic_archive)
118
    return (*ld_emulation->open_dynamic_archive) (arch, search, entry);
119
  return FALSE;
120
}
121
 
122
bfd_boolean
123
ldemul_place_orphan (asection *s)
124
{
125
  if (ld_emulation->place_orphan)
126
    return (*ld_emulation->place_orphan) (s);
127
  return FALSE;
128
}
129
 
130
void
131
ldemul_add_options (int ns, char **shortopts, int nl,
132
                    struct option **longopts, int nrl,
133
                    struct option **really_longopts)
134
{
135
  if (ld_emulation->add_options)
136
    (*ld_emulation->add_options) (ns, shortopts, nl, longopts,
137
                                  nrl, really_longopts);
138
}
139
 
140
bfd_boolean
141
ldemul_handle_option (int optc)
142
{
143
  if (ld_emulation->handle_option)
144
    return (*ld_emulation->handle_option) (optc);
145
  return FALSE;
146
}
147
 
148
bfd_boolean
149
ldemul_parse_args (int argc, char **argv)
150
{
151
  /* Try and use the emulation parser if there is one.  */
152
  if (ld_emulation->parse_args)
153
    return (*ld_emulation->parse_args) (argc, argv);
154
  return FALSE;
155
}
156
 
157
/* Let the emulation code handle an unrecognized file.  */
158
 
159
bfd_boolean
160
ldemul_unrecognized_file (lang_input_statement_type *entry)
161
{
162
  if (ld_emulation->unrecognized_file)
163
    return (*ld_emulation->unrecognized_file) (entry);
164
  return FALSE;
165
}
166
 
167
/* Let the emulation code handle a recognized file.  */
168
 
169
bfd_boolean
170
ldemul_recognized_file (lang_input_statement_type *entry)
171
{
172
  if (ld_emulation->recognized_file)
173
    return (*ld_emulation->recognized_file) (entry);
174
  return FALSE;
175
}
176
 
177
char *
178
ldemul_choose_target (int argc, char **argv)
179
{
180
  return ld_emulation->choose_target (argc, argv);
181
}
182
 
183
 
184
/* The default choose_target function.  */
185
 
186
char *
187
ldemul_default_target (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
188
{
189
  char *from_outside = getenv (TARGET_ENVIRON);
190
  if (from_outside != (char *) NULL)
191
    return from_outside;
192
  return ld_emulation->target_name;
193
}
194
 
195
void
196
after_parse_default (void)
197
{
198
}
199
 
200
void
201
after_open_default (void)
202
{
203
}
204
 
205
void
206
after_allocation_default (void)
207
{
208
}
209
 
210
void
211
before_allocation_default (void)
212
{
213
  if (!link_info.relocatable)
214
    strip_excluded_output_sections ();
215
}
216
 
217
void
218
finish_default (void)
219
{
220
  if (!link_info.relocatable)
221
    _bfd_fix_excluded_sec_syms (link_info.output_bfd, &link_info);
222
}
223
 
224
void
225
set_output_arch_default (void)
226
{
227
  /* Set the output architecture and machine if possible.  */
228
  bfd_set_arch_mach (link_info.output_bfd,
229
                     ldfile_output_architecture, ldfile_output_machine);
230
}
231
 
232
void
233
syslib_default (char *ignore ATTRIBUTE_UNUSED)
234
{
235
  info_msg (_("%S SYSLIB ignored\n"));
236
}
237
 
238
void
239
hll_default (char *ignore ATTRIBUTE_UNUSED)
240
{
241
  info_msg (_("%S HLL ignored\n"));
242
}
243
 
244
ld_emulation_xfer_type *ld_emulations[] = { EMULATION_LIST };
245
 
246
void
247
ldemul_choose_mode (char *target)
248
{
249
  ld_emulation_xfer_type **eptr = ld_emulations;
250
  /* Ignore "gld" prefix.  */
251
  if (target[0] == 'g' && target[1] == 'l' && target[2] == 'd')
252
    target += 3;
253
  for (; *eptr; eptr++)
254
    {
255
      if (strcmp (target, (*eptr)->emulation_name) == 0)
256
        {
257
          ld_emulation = *eptr;
258
          return;
259
        }
260
    }
261
  einfo (_("%P: unrecognised emulation mode: %s\n"), target);
262
  einfo (_("Supported emulations: "));
263
  ldemul_list_emulations (stderr);
264
  einfo ("%F\n");
265
}
266
 
267
void
268
ldemul_list_emulations (FILE *f)
269
{
270
  ld_emulation_xfer_type **eptr = ld_emulations;
271
  bfd_boolean first = TRUE;
272
 
273
  for (; *eptr; eptr++)
274
    {
275
      if (first)
276
        first = FALSE;
277
      else
278
        fprintf (f, " ");
279
      fprintf (f, "%s", (*eptr)->emulation_name);
280
    }
281
}
282
 
283
void
284
ldemul_list_emulation_options (FILE *f)
285
{
286
  ld_emulation_xfer_type **eptr;
287
  int options_found = 0;
288
 
289
  for (eptr = ld_emulations; *eptr; eptr++)
290
    {
291
      ld_emulation_xfer_type *emul = *eptr;
292
 
293
      if (emul->list_options)
294
        {
295
          fprintf (f, "%s: \n", emul->emulation_name);
296
 
297
          emul->list_options (f);
298
 
299
          options_found = 1;
300
        }
301
    }
302
 
303
  if (! options_found)
304
    fprintf (f, _("  no emulation specific options.\n"));
305
}
306
 
307
int
308
ldemul_find_potential_libraries (char *name, lang_input_statement_type *entry)
309
{
310
  if (ld_emulation->find_potential_libraries)
311
    return ld_emulation->find_potential_libraries (name, entry);
312
 
313
  return 0;
314
}
315
 
316
struct bfd_elf_version_expr *
317
ldemul_new_vers_pattern (struct bfd_elf_version_expr *entry)
318
{
319
  if (ld_emulation->new_vers_pattern)
320
    entry = (*ld_emulation->new_vers_pattern) (entry);
321
  return entry;
322
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.