Browse Source
ecrislinux.o. (ecrisaout.c, ecriself.c, ecrislinux.c): New rules. Regenerate dependencies. * Makefile.in: Rebuild. * configure.tgt (cris-*-*): New target. * emulparams/crisaout.sh, emulparams/criself.sh, emulparams/crislinux.sh, scripttempl/crisaout.sc: New files. * po/POTFILES.in, po/ld.pot: Regenerate.binutils-2_11-branch
10 changed files with 592 additions and 281 deletions
@ -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 |
|||
@ -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); |
|||
' |
|||
@ -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); |
|||
' |
|||
File diff suppressed because it is too large
@ -0,0 +1,122 @@ |
|||
cat <<EOF |
|||
OUTPUT_FORMAT("a.out-cris") |
|||
OUTPUT_ARCH(cris) |
|||
ENTRY(_start) |
|||
SECTIONS |
|||
{ |
|||
.text ${RELOCATING+ ${TEXT_START_ADDR}}: |
|||
{ |
|||
CREATE_OBJECT_SYMBOLS; |
|||
${RELOCATING+ __Stext = .;} |
|||
${RELOCATING+*(.startup)} |
|||
*(.text) |
|||
${RELOCATING+*(.text.*)} |
|||
${RELOCATING+*(.gnu.linkonce.t*)} |
|||
${RELOCATING+*(.rodata)} |
|||
${RELOCATING+*(.rodata.*)} |
|||
${RELOCATING+*(.gnu.linkonce.r*)} |
|||
|
|||
/* Do not "provide" init-start and fini-start symbols; they might be |
|||
referred to weakly, so the linker would not override the zero |
|||
default. |
|||
FIXME: It's somewhat unexpected to have code emitted by the linker |
|||
script. Some other mechanism could probably do better. */ |
|||
${RELOCATING+. = ALIGN (2);} |
|||
${RELOCATING+ ___init__start = .;} |
|||
${RELOCATING+PROVIDE (___do_global_ctors = .);} |
|||
${RELOCATING+SHORT (0xe1fc); /* push srp */} |
|||
${RELOCATING+SHORT (0xbe7e);} |
|||
${RELOCATING+*(.init)} |
|||
${RELOCATING+SHORT (0x0d3e); /* jump [sp+] */} |
|||
${RELOCATING+PROVIDE (__init__end = .);} |
|||
${RELOCATING+PROVIDE (___init__end = .);} |
|||
|
|||
${RELOCATING+. = ALIGN (2);} |
|||
${RELOCATING+ ___fini__start = .;} |
|||
${RELOCATING+PROVIDE (___do_global_dtors = .);} |
|||
${RELOCATING+SHORT (0xe1fc); /* push srp */} |
|||
${RELOCATING+SHORT (0xbe7e);} |
|||
${RELOCATING+*(.fini)} |
|||
${RELOCATING+SHORT (0x0d3e); /* jump [sp+] */} |
|||
${RELOCATING+PROVIDE (__fini__end = .);} |
|||
${RELOCATING+ ___fini__end = .;} |
|||
|
|||
/* Putting constructors in constant store is sane as long as |
|||
there's no need for dynamic fixups. */ |
|||
/* The constructors and destructors set symbols are unused now that |
|||
collect2 has its wicked way. */ |
|||
${CONSTRUCTING+ ___aout_ctors_dtors_begin = .;} |
|||
${CONSTRUCTING+ SORT(CONSTRUCTORS);} |
|||
${CONSTRUCTING+ ___aout_ctors_dtors_end = .;} |
|||
|
|||
/* Cater to linking from ELF. */ |
|||
${CONSTRUCTING+ PROVIDE(___ctors = .);} |
|||
${CONSTRUCTING+ ___elf_ctors_dtors_begin = .;} |
|||
${CONSTRUCTING+ KEEP (*crtbegin.o(.ctors))} |
|||
${CONSTRUCTING+ KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))} |
|||
${CONSTRUCTING+ KEEP (*(SORT(.ctors.*)))} |
|||
${CONSTRUCTING+ KEEP (*(.ctors))} |
|||
${CONSTRUCTING+ PROVIDE(___ctors_end = .);} |
|||
|
|||
${CONSTRUCTING+ PROVIDE(___dtors = .);} |
|||
${CONSTRUCTING+ KEEP (*crtbegin.o(.dtors))} |
|||
${CONSTRUCTING+ KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))} |
|||
${CONSTRUCTING+ KEEP (*(SORT(.dtors.*)))} |
|||
${CONSTRUCTING+ KEEP (*(.dtors))} |
|||
${CONSTRUCTING+ PROVIDE(___dtors_end = .);} |
|||
${CONSTRUCTING+ ___elf_ctors_dtors_end = .;} |
|||
|
|||
${RELOCATING+ __Etext = .;} |
|||
|
|||
/* Deprecated, use __Etext. */ |
|||
${RELOCATING+ PROVIDE(_etext = .);} |
|||
} |
|||
|
|||
/* Any dot-relative start-expression (such as "ALIGN(2)", also including |
|||
the "default" .data alignment expression) will use the initial, raw |
|||
size of .text and will be incorrect if the alignment used is less |
|||
than the alignment for .text (which might depend on input and obj |
|||
format). FIXME: Seems like a bug in ld. Seems hard to fix. Seems |
|||
unimportant. */ |
|||
.data : |
|||
{ |
|||
${RELOCATING+ __Sdata = .;} |
|||
*(.data); |
|||
${RELOCATING+*(.data.*)} |
|||
${RELOCATING+*(.gnu.linkonce.d*)} |
|||
${RELOCATING+*(.eh_frame) /* FIXME: Make .text */} |
|||
${RELOCATING+*(.gcc_except_table)} |
|||
${RELOCATING+ __Edata = .;} |
|||
|
|||
/* Deprecated, use __Edata. */ |
|||
${RELOCATING+ PROVIDE(_edata = .);} |
|||
} |
|||
|
|||
.bss : |
|||
{ |
|||
/* Deprecated, use __Sbss. */ |
|||
${RELOCATING+ PROVIDE(_bss_start = .);} |
|||
|
|||
${RELOCATING+ __Sbss = .;} |
|||
*(.bss) |
|||
${RELOCATING+*(.bss.*)} |
|||
*(COMMON) |
|||
${RELOCATING+ __Ebss = .;} |
|||
|
|||
/* Deprecated, use __Ebss or __Eall as appropriate. */ |
|||
${RELOCATING+ PROVIDE(_end = .);} |
|||
${RELOCATING+ PROVIDE(__end = .);} |
|||
} |
|||
${RELOCATING+ __Eall = .;} |
|||
|
|||
/* Unfortunately, stabs are not mappable from ELF to a.out. |
|||
It can probably be fixed with some amount of work. */ |
|||
/DISCARD/ : { *(.stab) *(.stab*) *(.debug) *(.debug*) *(.comment) } |
|||
|
|||
/* For the rsim and xsim simulators. */ |
|||
${RELOCATING+ PROVIDE(__Endmem = 0x10000000);} |
|||
|
|||
/* For elinux. */ |
|||
${RELOCATING+ PROVIDE(__Stacksize = 0);} |
|||
} |
|||
EOF |
|||
Loading…
Reference in new issue