Retro68/binutils/ld/emulparams/cskyelf.sh

54 lines
1.6 KiB
Bash
Raw Normal View History

2022-10-27 18:45:45 +00:00
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-csky-little"
BIG_OUTPUT_FORMAT="elf32-csky-big"
LITTLE_OUTPUT_FORMAT="elf32-csky-little"
NO_REL_RELOCS=yes
TARGET_PAGE_SIZE=0x400
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
TEXT_START_ADDR=0x60000000
DATA_ADDR=0x20000000
# The default address spaces
# RAM: 0x0 - 0x1FFFFFFF
# RAM: 0x20000000 - 0x3FFFFFFF
# RAM: 0x60000000 - 0x7FFFFFFF
#
# There are some symbols used in the crt.S
# __stack: The stack top
# __heap_start: The heap start
# __heap_end: The heap end
# __csky_exit: Be used by qemu to check exit
OTHER_SYMBOLS='
PROVIDE (__stack = 0x01000000 - 0x8);
PROVIDE (__heap_start = 0x00000100);
PROVIDE (__heap_end = 0x00900000);
PROVIDE (__csky_exit = 0x10002000);
'
CHECK_RELOCS_AFTER_OPEN_INPUT=yes
NONPAGED_TEXT_START_ADDR=0
ATTRS_SECTIONS='.csky.attributes 0 : { KEEP (*(.csky.attributes)) KEEP (*(.csky.attributes)) }'
ARCH=csky
EMBEDDED=yes
EXTRA_EM_FILE=cskyelf
# There is a problem with the NOP value - it must work for both
# big endian and little endian systems. Unfortunately there is
# no symmetrical mcore opcode that functions as a noop. The
# chosen solution is to use "tst r0, r14". This is a symmetrical
# value, and apart from the corruption of the C bit, it has no other
# side effects. Since the carry bit is never tested without being
# explicitly set first, and since the NOP code is only used as a
# fill value between independently viable pieces of code, it should
# not matter.
NOP=0
ENTRY=__start
OTHER_BSS_SYMBOLS="__sbss__ = . ;"
OTHER_BSS_END_SYMBOLS="__ebss__ = . ;"
# This sets the stack to the top of the simulator memory (2^19 bytes).
# STACK_ADDR=0x80000
TEMPLATE_NAME=elf