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

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [ld/] [emultempl/] [linux.em] - Blame information for rev 145

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 145 khays
# This shell script emits a C file. -*- C -*-
2
# It does some substitutions.
3
if [ -z "$MACHINE" ]; then
4
  OUTPUT_ARCH=${ARCH}
5
else
6
  OUTPUT_ARCH=${ARCH}:${MACHINE}
7
fi
8
fragment <
9
/* This file is is generated by a shell script.  DO NOT EDIT! */
10
 
11
/* Linux a.out emulation code for ${EMULATION_NAME}
12
   Copyright 1991, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
13
   2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
14
   Written by Steve Chamberlain 
15
   Linux support by Eric Youngdale 
16
 
17
   This file is part of the GNU Binutils.
18
 
19
   This program is free software; you can redistribute it and/or modify
20
   it under the terms of the GNU General Public License as published by
21
   the Free Software Foundation; either version 3 of the License, or
22
   (at your option) any later version.
23
 
24
   This program is distributed in the hope that it will be useful,
25
   but WITHOUT ANY WARRANTY; without even the implied warranty of
26
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
   GNU General Public License for more details.
28
 
29
   You should have received a copy of the GNU General Public License
30
   along with this program; if not, write to the Free Software
31
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
32
   MA 02110-1301, USA.  */
33
 
34
#define TARGET_IS_${EMULATION_NAME}
35
 
36
#include "sysdep.h"
37
#include "bfd.h"
38
#include "bfdlink.h"
39
 
40
#include "ld.h"
41
#include "ldmain.h"
42
#include "ldmisc.h"
43
#include "ldexp.h"
44
#include "ldlang.h"
45
#include "ldfile.h"
46
#include "ldemul.h"
47
 
48
static void
49
gld${EMULATION_NAME}_before_parse (void)
50
{
51
  ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
52
  config.dynamic_link = TRUE;
53
  config.has_shared = TRUE;
54
}
55
 
56
/* Try to open a dynamic archive.  This is where we know that Linux
57
   dynamic libraries have an extension of .sa.  */
58
 
59
static bfd_boolean
60
gld${EMULATION_NAME}_open_dynamic_archive
61
  (const char *arch, search_dirs_type *search, lang_input_statement_type *entry)
62
{
63
  char *string;
64
 
65
  if (! entry->maybe_archive)
66
    return FALSE;
67
 
68
  string = (char *) xmalloc (strlen (search->name)
69
                             + strlen (entry->filename)
70
                             + strlen (arch)
71
                             + sizeof "/lib.sa");
72
 
73
  sprintf (string, "%s/lib%s%s.sa", search->name, entry->filename, arch);
74
 
75
  if (! ldfile_try_open_bfd (string, entry))
76
    {
77
      free (string);
78
      return FALSE;
79
    }
80
 
81
  entry->filename = string;
82
 
83
  return TRUE;
84
}
85
 
86
/* This is called by the create_output_section_statements routine via
87
   lang_for_each_statement.  It locates any address assignment to
88
   .text, and modifies it to include the size of the headers.  This
89
   causes -Ttext to mean the starting address of the header, rather
90
   than the starting address of .text, which is compatible with other
91
   Linux tools.  */
92
 
93
static void
94
gld${EMULATION_NAME}_find_address_statement (lang_statement_union_type *s)
95
{
96
  if (s->header.type == lang_address_statement_enum
97
      && strcmp (s->address_statement.section_name, ".text") == 0)
98
    {
99
      ASSERT (s->address_statement.address->type.node_class == etree_value);
100
      s->address_statement.address->value.value += 0x20;
101
    }
102
}
103
 
104
/* This is called before opening the input BFD's.  */
105
 
106
static void
107
gld${EMULATION_NAME}_create_output_section_statements (void)
108
{
109
  lang_for_each_statement (gld${EMULATION_NAME}_find_address_statement);
110
}
111
 
112
/* This is called after the sections have been attached to output
113
   sections, but before any sizes or addresses have been set.  */
114
 
115
static void
116
gld${EMULATION_NAME}_before_allocation (void)
117
{
118
  if (link_info.relocatable)
119
    return;
120
 
121
  /* Let the backend work out the sizes of any sections required by
122
     dynamic linking.  */
123
  if (! bfd_${EMULATION_NAME}_size_dynamic_sections (link_info.output_bfd,
124
                                                     &link_info))
125
    einfo ("%P%F: failed to set dynamic section sizes: %E\n");
126
 
127
  before_allocation_default ();
128
}
129
 
130
static char *
131
gld${EMULATION_NAME}_get_script (int *isfile)
132
EOF
133
 
134
if test -n "$COMPILE_IN"
135
then
136
# Scripts compiled in.
137
 
138
# sed commands to quote an ld script as a C string.
139
sc="-f stringify.sed"
140
 
141
fragment <
142
{
143
  *isfile = 0;
144
 
145
  if (link_info.relocatable && config.build_constructors)
146
    return
147
EOF
148
sed $sc ldscripts/${EMULATION_NAME}.xu                 >> e${EMULATION_NAME}.c
149
echo '  ; else if (link_info.relocatable) return'     >> e${EMULATION_NAME}.c
150
sed $sc ldscripts/${EMULATION_NAME}.xr                 >> e${EMULATION_NAME}.c
151
echo '  ; else if (!config.text_read_only) return'     >> e${EMULATION_NAME}.c
152
sed $sc ldscripts/${EMULATION_NAME}.xbn                >> e${EMULATION_NAME}.c
153
echo '  ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
154
sed $sc ldscripts/${EMULATION_NAME}.xn                 >> e${EMULATION_NAME}.c
155
echo '  ; else return'                                 >> e${EMULATION_NAME}.c
156
sed $sc ldscripts/${EMULATION_NAME}.x                  >> e${EMULATION_NAME}.c
157
echo '; }'                                             >> e${EMULATION_NAME}.c
158
 
159
else
160
# Scripts read from the filesystem.
161
 
162
fragment <
163
{
164
  *isfile = 1;
165
 
166
  if (link_info.relocatable && config.build_constructors)
167
    return "ldscripts/${EMULATION_NAME}.xu";
168
  else if (link_info.relocatable)
169
    return "ldscripts/${EMULATION_NAME}.xr";
170
  else if (!config.text_read_only)
171
    return "ldscripts/${EMULATION_NAME}.xbn";
172
  else if (!config.magic_demand_paged)
173
    return "ldscripts/${EMULATION_NAME}.xn";
174
  else
175
    return "ldscripts/${EMULATION_NAME}.x";
176
}
177
EOF
178
 
179
fi
180
 
181
fragment <
182
 
183
struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
184
{
185
  gld${EMULATION_NAME}_before_parse,
186
  syslib_default,
187
  hll_default,
188
  after_parse_default,
189
  after_open_default,
190
  after_allocation_default,
191
  set_output_arch_default,
192
  ldemul_default_target,
193
  gld${EMULATION_NAME}_before_allocation,
194
  gld${EMULATION_NAME}_get_script,
195
  "${EMULATION_NAME}",
196
  "${OUTPUT_FORMAT}",
197
  finish_default,
198
  gld${EMULATION_NAME}_create_output_section_statements,
199
  gld${EMULATION_NAME}_open_dynamic_archive,
200
  NULL, /* place orphan */
201
  NULL, /* set symbols */
202
  NULL, /* parse args */
203
  NULL, /* add_options */
204
  NULL, /* handle_option */
205
  NULL, /* unrecognized file */
206
  NULL, /* list options */
207
  NULL, /* recognized file */
208
  NULL, /* find_potential_libraries */
209
  NULL  /* new_vers_pattern */
210
};
211
EOF

powered by: WebSVN 2.1.0

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