diff options
Diffstat (limited to 'ld/emulparams')
-rw-r--r-- | ld/emulparams/crisaout.sh | 7 | ||||
-rw-r--r-- | ld/emulparams/criself.sh | 92 | ||||
-rw-r--r-- | ld/emulparams/crislinux.sh | 35 |
3 files changed, 134 insertions, 0 deletions
diff --git a/ld/emulparams/crisaout.sh b/ld/emulparams/crisaout.sh new file mode 100644 index 0000000..bb9135a --- /dev/null +++ b/ld/emulparams/crisaout.sh @@ -0,0 +1,7 @@ +# This is for embedded products and elinux (no MMU) with a.out. +SCRIPT_NAME=crisaout +OUTPUT_FORMAT="a.out-cris" +TARGET_PAGE_SIZE=2 +TEXT_START_ADDR=0 +NONPAGED_TEXT_START_ADDR=0 +ARCH=cris diff --git a/ld/emulparams/criself.sh b/ld/emulparams/criself.sh new file mode 100644 index 0000000..44d0a11 --- /dev/null +++ b/ld/emulparams/criself.sh @@ -0,0 +1,92 @@ +# This is for embedded products (no MMU) with ELF. +MACHINE= +SCRIPT_NAME=elf +TEMPLATE_NAME=elf32 +OUTPUT_FORMAT="elf32-cris" +ARCH=cris +MAXPAGESIZE=32 +ENTRY=_start +EMBEDDED=yes +ALIGNMENT=32 +TEXT_START_ADDR=0 + +# Put crt0 for flash/eprom etc. in this section. +INITIAL_READONLY_SECTIONS='.startup : { *(.startup) }' + +# TEXT_START_SYMBOLS doesn't get what we want which is the start of +# all read-only sections; there's at least .init and .fini before it. +# We have to resort to trickery. +EXECUTABLE_SYMBOLS='PROVIDE (__Stext = .);' + +# Smuggle an "OTHER_TEXT_END_SYMBOLS" here. +OTHER_READONLY_SECTIONS='PROVIDE (__Etext = .);' +DATA_START_SYMBOLS='PROVIDE (__Sdata = .);' + +# Smuggle an "OTHER_DATA_END_SYMBOLS" here. +OTHER_GOT_SECTIONS='PROVIDE (__Edata = .);' + +# If .bss does not immediately follow .data but has its own start +# address, we can't get to it with OTHER_BSS_SYMBOLS, neither can we +# use ADDR(.bss) there. Instead, we use the symbol support for the +# end symbol. +OTHER_BSS_END_SYMBOLS=' + PROVIDE (__Ebss = .); + PROVIDE (__end = .); + __Sbss = SIZEOF (.sbss) != 0 ? ADDR (.sbss) : ADDR (.bss); + PROVIDE (_bss_start = __Sbss); +' + +INIT_START=' + . = ALIGN(2); + ___init__start = .; + PROVIDE (___do_global_ctors = .); + SHORT (0xe1fc); /* push srp */ + SHORT (0xbe7e); +' + +INIT_END=' + SHORT (0x0d3e); /* jump [sp+] */ + PROVIDE (__init__end = .); + PROVIDE (___init__end = .); +' + +FINI_START=' + . = ALIGN (2); + ___fini__start = .; + PROVIDE (___do_global_dtors = .); + SHORT (0xe1fc); /* push srp */ + SHORT (0xbe7e); +' + +FINI_END=' + SHORT (0x0d3e); /* jump [sp+] */ + PROVIDE (__fini__end = .); + ___fini__end = .; +' + +CTOR_START=' + PROVIDE (___ctors = .); + ___elf_ctors_dtors_begin = .; +' + +CTOR_END=' + PROVIDE (___ctors_end = .); +' + +DTOR_START=' + PROVIDE (___dtors = .); +' + +CTOR_END=' + PROVIDE (___dtors_end = .); + ___elf_ctors_dtors_end = .; +' + + +# Smuggle an "OTHER_ALL_END_SYMBOLS" here. +# Also add the other symbols provided for rsim/xsim and elinux. +OTHER_RELOCATING_SECTIONS=' +PROVIDE (__Eall = .); +PROVIDE (__Endmem = 0x10000000); +PROVIDE (__Stacksize = 0); +' diff --git a/ld/emulparams/crislinux.sh b/ld/emulparams/crislinux.sh new file mode 100644 index 0000000..15af6cf --- /dev/null +++ b/ld/emulparams/crislinux.sh @@ -0,0 +1,35 @@ +# This is an approximation of what we want for a real linux system (with MMU and ELF). +MACHINE= +SCRIPT_NAME=elf +OUTPUT_FORMAT="elf32-cris" +ARCH=cris +TEMPLATE_NAME=elf32 +ENTRY=_start +# Needed? Perhaps should be page-size alignment. +ALIGNMENT=32 +GENERATE_SHLIB_SCRIPT=yes + +# Is this high enough and low enough? +TEXT_START_ADDR=0x80000 + +# Do we need to set this higher? +MAXPAGESIZE=8192 + +# FIXME: GOT, PLT... + +# Smuggle an "OTHER_TEXT_END_SYMBOLS" here. +OTHER_READONLY_SECTIONS='PROVIDE (__Etext = .);' +DATA_START_SYMBOLS='PROVIDE (__Sdata = .);' + +# Smuggle an "OTHER_DATA_END_SYMBOLS" here. +OTHER_GOT_SECTIONS='PROVIDE (__Edata = .);' +OTHER_BSS_SYMBOLS='PROVIDE (__Sbss = .);' +OTHER_BSS_END_SYMBOLS='PROVIDE (__Ebss = .);' + +# Smuggle an "OTHER_ALL_END_SYMBOLS" here. +# Also add the other symbols provided for rsim/xsim and elinux. +OTHER_RELOCATING_SECTIONS=' +PROVIDE (__Eall = .); +PROVIDE(__Endmem = 0x10000000); +PROVIDE(__Stacksize = 0); +' |