[MSP430,LD,COMMITTED] Add input section rules for .upper sections to default linker script

Message ID 20200116134205.43ab8b3b@jozef-kubuntu
State New
Headers show
Series
  • [MSP430,LD,COMMITTED] Add input section rules for .upper sections to default linker script
Related show

Commit Message

Jozef Lawrynowicz Jan. 16, 2020, 1:42 p.m.
When compiling using GCC for msp430-elf, the -mdata-region=upper and
-mcode-region=upper target flags will generate sections prefixed with ".upper"
i.e. .upper.{text,data,rodata,bss}*.

The default linker script does not know how to place these sections, and the
following error message is emitted:
./ld-new: warning: no input section rule matches .upper.text in linker script
./ld-new: warning: no input section rule matches .upper.bss in linker script
./ld-new: warning: no input section rule matches .upper.data in linker script
./ld-new: warning: no input section rule matches .upper.rodata in linker script

This patch fixes this by adding input section rules for .upper.* sections.

Regtested the binutils testsuite for msp430-elf.

Committed as obvious.

Patch

From 0c3d9485091753e6d9c4d317a9219cf4b6dce116 Mon Sep 17 00:00:00 2001
From: Jozef Lawrynowicz <jozef.l@mittosystems.com>
Date: Thu, 16 Jan 2020 11:32:23 +0000
Subject: [PATCH] MSP430: Add input section rules for .upper sections to
 default linker script

ld/ChangeLog:

2020-01-16  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* scripttempl/elf32msp430.sc: Add input section rules for
	.upper.{text,data,rodata,bss}.
	* testsuite/ld-msp430-elf/msp430-elf.exp: Run new test.
	* testsuite/ld-msp430-elf/upper-input-sections.s: New test.
---
 ld/ChangeLog                                  |  7 ++++
 ld/scripttempl/elf32msp430.sc                 |  8 +++++
 ld/testsuite/ld-msp430-elf/msp430-elf.exp     |  2 ++
 .../ld-msp430-elf/upper-input-sections.s      | 33 +++++++++++++++++++
 4 files changed, 50 insertions(+)
 create mode 100644 ld/testsuite/ld-msp430-elf/upper-input-sections.s

diff --git a/ld/ChangeLog b/ld/ChangeLog
index 5208f62cfe..7799d7d9fe 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,10 @@ 
+2020-01-16  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
+
+	* scripttempl/elf32msp430.sc: Add input section rules for
+	.upper.{text,data,rodata,bss}.
+	* testsuite/ld-msp430-elf/msp430-elf.exp: Run new test.
+	* testsuite/ld-msp430-elf/upper-input-sections.s: New test.
+
 2020-01-15  Lars Brinkhoff  <lars@nocrew.org>
 
 	PR 20694
diff --git a/ld/scripttempl/elf32msp430.sc b/ld/scripttempl/elf32msp430.sc
index 6f716c75e6..f9ee9ff65b 100644
--- a/ld/scripttempl/elf32msp430.sc
+++ b/ld/scripttempl/elf32msp430.sc
@@ -171,6 +171,8 @@  SECTIONS
 
     *(.either.text.* .either.text)
 
+    *(.upper.text.* .upper.text)
+
     . = ALIGN(2);
     *(SORT_NONE(.fini9))
     *(SORT_NONE(.fini8))
@@ -198,6 +200,9 @@  SECTIONS
     ${RELOCATING+*(.rodata1)
 
     *(.either.rodata.*) *(.either.rodata)
+
+    *(.upper.rodata.* .upper.rodata)
+
     *(.eh_frame_hdr)
     KEEP (*(.eh_frame))
 
@@ -267,6 +272,8 @@  SECTIONS
 
     *(.either.data.* .either.data)
 
+    *(.upper.data.* .upper.data)
+
     *(.got.plt) *(.got)
     . = ALIGN(2);
     *(.sdata .sdata.* .gnu.linkonce.s.*)
@@ -286,6 +293,7 @@  SECTIONS
     . = ALIGN(2);}
     *(.bss)
     ${RELOCATING+*(.either.bss.* .either.bss)
+    *(.upper.bss.* .upper.bss)
     *(COMMON)
     PROVIDE (__bss_end = .);}
   } ${RELOCATING+ > data}
diff --git a/ld/testsuite/ld-msp430-elf/msp430-elf.exp b/ld/testsuite/ld-msp430-elf/msp430-elf.exp
index 777b358a74..e9a0fdc629 100644
--- a/ld/testsuite/ld-msp430-elf/msp430-elf.exp
+++ b/ld/testsuite/ld-msp430-elf/msp430-elf.exp
@@ -176,6 +176,8 @@  run_ld_link_tests $msp430warntests
 run_dump_test valid-map
 run_ld_link_tests {{ "Check no reloc overflow with #lo and data in the upper region"
         "-m msp430X" "" "" {reloc-lo-430x.s} {} "reloc-lo-430x"}}
+run_ld_link_tests {{ "Check .upper prefixed input sections can be placed"
+        "-m msp430X" "" "" {upper-input-sections.s} {} "upper-input-sections"}}
 
 # Don't run data region tests if a data region is specified
 if {[string match "*-mdata-region*" [board_info [target_info name] multilib_flags]]} {
diff --git a/ld/testsuite/ld-msp430-elf/upper-input-sections.s b/ld/testsuite/ld-msp430-elf/upper-input-sections.s
new file mode 100644
index 0000000000..c816f30248
--- /dev/null
+++ b/ld/testsuite/ld-msp430-elf/upper-input-sections.s
@@ -0,0 +1,33 @@ 
+.text
+	.balign 2
+  .section .upper.text,"ax",@progbits
+	.global	foo
+	.type	foo, @function
+foo:
+  MOV.W	#42, R8
+	RETA
+	.size	foo, .-foo
+
+	.balign 2
+	.global	main
+	.type	main, @function
+main:
+	CALLA	#foo
+.L4:
+	BRA	#.L4
+	.size	main, .-main
+	.section	.upper.bss,"aw",@nobits
+	.balign 2
+	.global	P
+P:
+	.zero 4
+	.section	.upper.data,"aw",@progbits
+	.balign 2
+	.global	Q
+Q:
+	.long 4
+	.section	.upper.rodata,"aw",@progbits
+	.balign 2
+	.global	R
+R:
+	.word 8
-- 
2.17.1