[PATCH 4/4] CSKY: Change default linker script for elf toolchain.
Cooper Qu
cooper.qu@linux.alibaba.com
Mon Oct 12 14:31:29 GMT 2020
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
--
2.26.2
More information about the Binutils
mailing list