| # This is for embedded products (no MMU) with ELF. |
| MACHINE= |
| SCRIPT_NAME=elf |
| TEMPLATE_NAME=elf |
| |
| # Symbols have underscore prepended. |
| OUTPUT_FORMAT="elf32-us-cris" |
| NO_REL_RELOCS=yes |
| ARCH=cris |
| MAXPAGESIZE=32 |
| USER_LABEL_PREFIX=_ |
| EMBEDDED=yes |
| ALIGNMENT=32 |
| TEXT_START_ADDR=0 |
| |
| # Put crt0 for flash/eprom etc. in this section. |
| INITIAL_READONLY_SECTIONS= |
| if test -z "${CREATE_SHLIB}"; then |
| INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }" |
| fi |
| INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS} |
| .startup : { KEEP(*(.startup)) }" |
| |
| # Setting __Stext to . in TEXT_START_SYMBOLS doesn't get what we want |
| # most of the time, which is the start of all read-only sections; |
| # there's at least .startup and .init before it. We have to resort to |
| # trickery. Note that __Stext is always defined, not PROVIDE:d, since |
| # external tools look for it. |
| TEXT_START_SYMBOLS='__Stext = ADDR (.startup);' |
| |
| # The __start dance is to get us through assumptions about entry |
| # symbols, and to clear _start for normal use with sane programs. |
| EXECUTABLE_SYMBOLS=' |
| __start = DEFINED(__start) ? __start : |
| DEFINED(_start) ? _start : |
| DEFINED(start) ? start : |
| DEFINED(.startup) ? .startup + 2 : 2; |
| ' |
| |
| # Smuggle an "OTHER_TEXT_END_SYMBOLS" here. |
| OTHER_READONLY_SECTIONS="${RELOCATING+PROVIDE (__Etext = .);}" |
| DATA_START_SYMBOLS='PROVIDE (__Sdata = .);' |
| |
| # Smuggle an "OTHER_DATA_END_SYMBOLS" here. |
| OTHER_SDATA_SECTIONS="${RELOCATING+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 = .); |
| __Sbss = ADDR (.bss); |
| PROVIDE (_bss_start = __Sbss); |
| ' |
| |
| INIT_ADDR='ALIGN (2)' |
| |
| INIT_START=' |
| ___init__start = .; |
| PROVIDE (___do_global_ctors = .); |
| ' |
| |
| INIT_END=' |
| PROVIDE (__init__end = .); |
| PROVIDE (___init__end = .); |
| ' |
| |
| FINI_ADDR='ALIGN (2)' |
| |
| FINI_START=' |
| ___fini__start = .; |
| PROVIDE (___do_global_dtors = .); |
| ' |
| |
| FINI_END=' |
| 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 = .; |
| ' |
| |
| # Also add the other symbols provided for rsim/xsim and elinux. |
| OTHER_SYMBOLS=' |
| PROVIDE (__Eall = .); |
| PROVIDE (__Endmem = 0x10000000); |
| PROVIDE (__Stacksize = 0); |
| ' |
| NO_SMALL_DATA=yes |