Commit | Line | Data |
---|---|---|
09a3f5d4 | 1 | SCRIPT_NAME=elf |
829ce307 | 2 | OUTPUT_FORMAT="elf32-mcore-little" |
09a3f5d4 NC |
3 | BIG_OUTPUT_FORMAT="elf32-mcore-big" |
4 | LITTLE_OUTPUT_FORMAT="elf32-mcore-little" | |
5 | PAGE_SIZE=0x1000 | |
6 | TARGET_PAGE_SIZE=0x400 | |
7 | MAXPAGESIZE=0x1000 | |
8 | TEXT_START_ADDR=0 | |
9 | NONPAGED_TEXT_START_ADDR=0 | |
10 | ARCH=mcore | |
11 | EMBEDDED=yes | |
12 | ||
13 | # There is a problem with the NOP value - it must work for both | |
14 | # big endian and little endian systems. Unfortunately there is | |
15 | # no symmetrical mcore opcode that functions as a noop. The | |
16 | # chosen solution is to use "tst r0, r14". This is a symetrical | |
17 | # value, and apart from the corruption of the C bit, it has no other | |
18 | # side effects. Since the carry bit is never tested without being | |
19 | # explicitly set first, and since the NOP code is only used as a | |
20 | # fill value between independantly viable peices of code, it should | |
21 | # not matter. | |
22 | NOP=0x0e0e | |
23 | ||
24 | OTHER_BSS_SYMBOLS="__bss_start__ = . ;" | |
25 | OTHER_BSS_END_SYMBOLS="__bss_end__ = . ;" | |
26 | ||
27 | # Hmmm, there's got to be a better way. This sets the stack to the | |
28 | # top of the simulator memory (2^19 bytes). | |
29 | OTHER_RELOCATING_SECTIONS='.stack 0x80000 : { _stack = .; *(.stack) }' | |
06f2f02a NC |
30 | |
31 | TEMPLATE_NAME=elf32 | |
32 | GENERATE_SHLIB_SCRIPT=yes | |
093505ad NC |
33 | |
34 | # This code gets inserted into the generic elf32.sc linker script | |
35 | # and allows us to define our own command line switches. | |
36 | PARSE_AND_LIST_ARGS=' | |
37 | ||
38 | #define OPTION_BASE_FILE 300 | |
39 | ||
40 | static struct option longopts[] = | |
41 | { | |
42 | {"base-file", required_argument, NULL, OPTION_BASE_FILE}, | |
43 | {NULL, no_argument, NULL, 0} | |
44 | }; | |
45 | ||
46 | static void | |
47 | gld_elf32mcore_list_options (file) | |
48 | FILE * file; | |
49 | { | |
50 | fprintf (file, _(" --base_file <basefile> Generate a base file for relocatable DLLs\n")); | |
51 | } | |
52 | ||
53 | static int | |
54 | gld_elf32mcore_parse_args (argc, argv) | |
55 | int argc; | |
56 | char ** argv; | |
57 | { | |
58 | int longind; | |
59 | int optc; | |
60 | int prevoptind = optind; | |
61 | int prevopterr = opterr; | |
62 | int wanterror; | |
63 | static int lastoptind = -1; | |
64 | ||
65 | if (lastoptind != optind) | |
66 | opterr = 0; | |
67 | ||
68 | wanterror = opterr; | |
69 | lastoptind = optind; | |
70 | ||
71 | optc = getopt_long_only (argc, argv, "-", longopts, & longind); | |
72 | opterr = prevopterr; | |
73 | ||
74 | switch (optc) | |
75 | { | |
76 | default: | |
77 | if (wanterror) | |
78 | xexit (1); | |
79 | optind = prevoptind; | |
80 | return 0; | |
81 | ||
82 | case OPTION_BASE_FILE: | |
83 | link_info.base_file = (PTR) fopen (optarg, FOPEN_WB); | |
84 | if (link_info.base_file == NULL) | |
85 | { | |
86 | /* xgettext:c-format */ | |
87 | fprintf (stderr, _("%s: Cannot open base file %s\n"), | |
88 | program_name, optarg); | |
89 | xexit (1); | |
90 | } | |
91 | break; | |
92 | } | |
93 | ||
94 | return 1; | |
95 | } | |
96 | ||
97 | ' |