vxworks.em revision 1.3 1 1.1 christos # This shell script emits a C file. -*- C -*-
2 1.3 christos # Copyright (C) 2006-2015 Free Software Foundation, Inc.
3 1.1 christos #
4 1.1 christos # This file is part of the GNU Binutils.
5 1.1 christos #
6 1.1 christos # This program is free software; you can redistribute it and/or modify
7 1.1 christos # it under the terms of the GNU General Public License as published by
8 1.1 christos # the Free Software Foundation; either version 3 of the License, or
9 1.1 christos # (at your option) any later version.
10 1.1 christos #
11 1.1 christos # This program is distributed in the hope that it will be useful,
12 1.1 christos # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 1.1 christos # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 1.1 christos # GNU General Public License for more details.
15 1.1 christos #
16 1.1 christos # You should have received a copy of the GNU General Public License
17 1.1 christos # along with this program; if not, write to the Free Software
18 1.1 christos # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 1.1 christos # MA 02110-1301, USA.
20 1.1 christos #
21 1.1 christos
22 1.1 christos if test -n "$VXWORKS_BASE_EM_FILE" ; then
23 1.1 christos source_em "${srcdir}/emultempl/${VXWORKS_BASE_EM_FILE}.em"
24 1.1 christos fi
25 1.1 christos
26 1.1 christos fragment <<EOF
27 1.1 christos
28 1.1 christos static int force_dynamic;
29 1.1 christos
30 1.1 christos static void
31 1.1 christos vxworks_before_parse (void)
32 1.1 christos {
33 1.1 christos ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse} ();
34 1.1 christos config.rpath_separator = ';';
35 1.1 christos }
36 1.1 christos
37 1.1 christos static void
38 1.1 christos vxworks_after_open (void)
39 1.1 christos {
40 1.1 christos ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open} ();
41 1.1 christos
42 1.1 christos if (force_dynamic
43 1.1 christos && link_info.input_bfds
44 1.1 christos && bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
45 1.1 christos && !_bfd_elf_link_create_dynamic_sections (link_info.input_bfds,
46 1.1 christos &link_info))
47 1.1 christos einfo ("%X%P: Cannot create dynamic sections %E\n");
48 1.1 christos
49 1.1 christos if (!force_dynamic
50 1.3 christos && !bfd_link_pic (&link_info)
51 1.1 christos && bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
52 1.1 christos && elf_hash_table (&link_info)->dynamic_sections_created)
53 1.1 christos einfo ("%X%P: Dynamic sections created in non-dynamic link\n");
54 1.1 christos }
55 1.1 christos
56 1.1 christos EOF
57 1.1 christos
58 1.1 christos PARSE_AND_LIST_PROLOGUE=$PARSE_AND_LIST_PROLOGUE'
59 1.1 christos enum {
60 1.1 christos OPTION_FORCE_DYNAMIC = 501
61 1.1 christos };
62 1.1 christos '
63 1.1 christos
64 1.1 christos PARSE_AND_LIST_LONGOPTS=$PARSE_AND_LIST_LONGOPTS'
65 1.1 christos {"force-dynamic", no_argument, NULL, OPTION_FORCE_DYNAMIC},
66 1.1 christos '
67 1.1 christos
68 1.1 christos PARSE_AND_LIST_OPTIONS=$PARSE_AND_LIST_OPTIONS'
69 1.1 christos fprintf (file, _("\
70 1.1 christos --force-dynamic Always create dynamic sections\n"));
71 1.1 christos '
72 1.1 christos
73 1.1 christos PARSE_AND_LIST_ARGS_CASES=$PARSE_AND_LIST_ARGS_CASES'
74 1.1 christos case OPTION_FORCE_DYNAMIC:
75 1.1 christos force_dynamic = 1;
76 1.1 christos break;
77 1.1 christos '
78 1.1 christos
79 1.1 christos # Hook in our routines above. There are three possibilities:
80 1.1 christos #
81 1.1 christos # (1) VXWORKS_BASE_EM_FILE did not set the hook's LDEMUL_FOO variable.
82 1.1 christos # We want to define LDEMUL_FOO to vxworks_foo in that case,
83 1.1 christos #
84 1.1 christos # (2) VXWORKS_BASE_EM_FILE set the hook's LDEMUL_FOO variable to
85 1.1 christos # gld${EMULATION_NAME}_foo. This means that the file has
86 1.1 christos # replaced elf32.em's default definition, so we simply #define
87 1.1 christos # the current value of LDEMUL_FOO to vxworks_foo.
88 1.1 christos #
89 1.1 christos # (3) VXWORKS_BASE_EM_FILE set the hook's LDEMUL_FOO variable to
90 1.1 christos # something other than gld${EMULATION_NAME}_foo. We handle
91 1.1 christos # this case in the same way as (1).
92 1.1 christos for override in before_parse after_open; do
93 1.1 christos var="LDEMUL_`echo ${override} | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
94 1.1 christos eval value=\$${var}
95 1.1 christos if test "${value}" = "gld${EMULATION_NAME}_${override}"; then
96 1.1 christos fragment <<EOF
97 1.1 christos #define ${value} vxworks_${override}
98 1.1 christos EOF
99 1.1 christos else
100 1.1 christos eval $var=vxworks_${override}
101 1.1 christos fi
102 1.1 christos done
103