[PATCH 4/4] CSKY: Change default linker script for elf toolchain.
Lifang Xia
lifang_xia@c-sky.com
Mon Oct 26 09:16:19 GMT 2020
Hi Cooper,
All of the 4 patches are commited.
The 4/4 patch which modifies the default address spaces in the linker, I
add some comment in the source files which are descripted the default
adress spaces.
Best Regards,
Lifang Xia
On 2020/10/12 22:31, Cooper Qu wrote:
> ld/
> * emulparams/cskyelf.sh (TEXT_START_ADDR): Change to 0x60000000.
> (DATA_ADDR) : Define.
> (OTHER_SYMBOLS) : Define.
> (OTHER_BSS_SYMBOLS) : Set symbol __sbss__.
> (OTHER_BSS_END_SYMBOLS) : Set symbol __ebss__.
> * ld/emulparams/cskyelf_linux.sh : Don't include cskyelf.sh.
> * testsuite/ld-csky/data.d : Fix '/s*' to match spaces.
> * testsuite/ld-csky/hilo16.d : Likewise.
>
> Change-Id: Ia29b32eab4157ae5be0fc0b6125fb5b7d9dac939
> ---
> ld/emulparams/cskyelf.sh | 15 +++++++++-----
> ld/emulparams/cskyelf_linux.sh | 36 +++++++++++++++++++++++++++++++++-
> ld/testsuite/ld-csky/data.d | 12 ++++++------
> ld/testsuite/ld-csky/hilo16.d | 4 ++--
> 4 files changed, 53 insertions(+), 14 deletions(-)
>
> diff --git a/ld/emulparams/cskyelf.sh b/ld/emulparams/cskyelf.sh
> index b940c6c2978..58cab16844a 100644
> --- a/ld/emulparams/cskyelf.sh
> +++ b/ld/emulparams/cskyelf.sh
> @@ -1,5 +1,3 @@
> -# If you change this file, please also look at files which source this one:
> -# cskyelf_linux.sh
> SCRIPT_NAME=elf
> OUTPUT_FORMAT="elf32-csky-little"
> BIG_OUTPUT_FORMAT="elf32-csky-big"
> @@ -7,7 +5,14 @@ LITTLE_OUTPUT_FORMAT="elf32-csky-little"
> NO_REL_RELOCS=yes
> TARGET_PAGE_SIZE=0x400
> MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
> -TEXT_START_ADDR=0x8000
> +TEXT_START_ADDR=0x60000000
> +DATA_ADDR=0x20000000
> +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)) }'
> @@ -27,8 +32,8 @@ EXTRA_EM_FILE=cskyelf
> NOP=0
>
> ENTRY=__start
> -OTHER_BSS_SYMBOLS="__bss_start__ = . ;"
> -OTHER_BSS_END_SYMBOLS="__bss_end__ = . ;"
> +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
> diff --git a/ld/emulparams/cskyelf_linux.sh b/ld/emulparams/cskyelf_linux.sh
> index 84fbbf8ef5c..d29233f9301 100644
> --- a/ld/emulparams/cskyelf_linux.sh
> +++ b/ld/emulparams/cskyelf_linux.sh
> @@ -1,4 +1,38 @@
> -source_sh ${srcdir}/emulparams/cskyelf.sh
> +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=0x8000
> +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="__bss_start__ = . ;"
> +OTHER_BSS_END_SYMBOLS="__bss_end__ = . ;"
> +
> +# This sets the stack to the top of the simulator memory (2^19 bytes).
> +# STACK_ADDR=0x80000
> +
> +TEMPLATE_NAME=elf
> +
>
> unset EMBEDDED
> unset ENTRY
> diff --git a/ld/testsuite/ld-csky/data.d b/ld/testsuite/ld-csky/data.d
> index 21b2f27f45b..f1dd470094e 100644
> --- a/ld/testsuite/ld-csky/data.d
> +++ b/ld/testsuite/ld-csky/data.d
> @@ -10,9 +10,9 @@
> Disassembly of section .text:
>
> [0-9a-f]+ <__start>:
> - [0-9a-f]+: cd400004 lrs.b r10, \[0x4\] // the offset is based on .data
> - [0-9a-f]+: cd440002 lrs.h r10, \[0x2\] // the offset is based on .data
> - [0-9a-f]+: cd480001 lrs.w r10, \[0x1\] // the offset is based on .data
> - [0-9a-f]+: cd700004 srs.b r11, \[0x4\] // the offset is based on .data
> - [0-9a-f]+: cd740002 srs.h r11, \[0x2\] // the offset is based on .data
> - [0-9a-f]+: cd780001 srs.w r11, \[0x1\] // the offset is based on .data
> +\s*[0-9a-f]+: cd400004 lrs.b r10, \[0x4\] // the offset is based on .data
> +\s*[0-9a-f]+: cd440002 lrs.h r10, \[0x2\] // the offset is based on .data
> +\s*[0-9a-f]+: cd480001 lrs.w r10, \[0x1\] // the offset is based on .data
> +\s*[0-9a-f]+: cd700004 srs.b r11, \[0x4\] // the offset is based on .data
> +\s*[0-9a-f]+: cd740002 srs.h r11, \[0x2\] // the offset is based on .data
> +\s*[0-9a-f]+: cd780001 srs.w r11, \[0x1\] // the offset is based on .data
> diff --git a/ld/testsuite/ld-csky/hilo16.d b/ld/testsuite/ld-csky/hilo16.d
> index f2435c0ad08..d038a06cf70 100644
> --- a/ld/testsuite/ld-csky/hilo16.d
> +++ b/ld/testsuite/ld-csky/hilo16.d
> @@ -10,5 +10,5 @@
> Disassembly of section .text:
>
> [0-9a-f]+ <__start>:
> - [0-9a-f]+: ea21dead movih r1, 57005
> - [0-9a-f]+: ec21beef ori r1, r1, 48879
> +\s*[0-9a-f]+: ea21dead movih r1, 57005
> +\s*[0-9a-f]+: ec21beef ori r1, r1, 48879
More information about the Binutils
mailing list