aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite
diff options
context:
space:
mode:
authorJim Wilson <jimw@sifive.com>2019-11-12 15:50:48 -0800
committerJim Wilson <jimw@sifive.com>2019-11-12 15:53:22 -0800
commitc6261a00c3e70dd8e508062ea43a1bcb6d547621 (patch)
treeb7267edb54f7535ff9913d2394ad867d14717b3b /ld/testsuite
parente06f3d6eba37df8451ecc2ce2ac76cba811e8b35 (diff)
downloadgdb-c6261a00c3e70dd8e508062ea43a1bcb6d547621.zip
gdb-c6261a00c3e70dd8e508062ea43a1bcb6d547621.tar.gz
gdb-c6261a00c3e70dd8e508062ea43a1bcb6d547621.tar.bz2
RISC-V: Fix ld relax failure with calls and align directives.
Make _bfd_riscv_relax_call handle section alignment padding same as the _bfd_riscv_relax_lui and _bfd_riscv_relax_pc functions already do. Use the max section alignment if section boundaries are crossed, otherwise the alignment of the containing section. bfd/ PR 25181 * elfnn-riscv.c (_bfd_riscv_relax_call): Always add max_alignment to foff. If sym_sec->output_section and sec->output_section are the same and not *ABS* then set max_alignment to that section's alignment. ld/ PR 25181 * testsuite/ld-riscv-elf/call-relax-0.s: New file. * testsuite/ld-riscv-elf/call-relax-1.s: New file. * testsuite/ld-riscv-elf/call-relax-2.s: New file. * testsuite/ld-riscv-elf/call-relax-3.s: New file. * testsuite/ld-riscv-elf/call-relax.d: New test. * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Run call-relax test. Change-Id: Iaf65cee52345abf1955f36e8e72c4f6cc0db8d9a
Diffstat (limited to 'ld/testsuite')
-rw-r--r--ld/testsuite/ld-riscv-elf/call-relax-0.s9
-rw-r--r--ld/testsuite/ld-riscv-elf/call-relax-1.s6
-rw-r--r--ld/testsuite/ld-riscv-elf/call-relax-2.s7
-rw-r--r--ld/testsuite/ld-riscv-elf/call-relax-3.s9
-rw-r--r--ld/testsuite/ld-riscv-elf/call-relax.d9
-rw-r--r--ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp1
6 files changed, 41 insertions, 0 deletions
diff --git a/ld/testsuite/ld-riscv-elf/call-relax-0.s b/ld/testsuite/ld-riscv-elf/call-relax-0.s
new file mode 100644
index 0000000..4b18bf3
--- /dev/null
+++ b/ld/testsuite/ld-riscv-elf/call-relax-0.s
@@ -0,0 +1,9 @@
+.globl _start
+
+.section .text.hot
+_start:
+ call cc
+
+.text
+ff:
+ call dd
diff --git a/ld/testsuite/ld-riscv-elf/call-relax-1.s b/ld/testsuite/ld-riscv-elf/call-relax-1.s
new file mode 100644
index 0000000..270aaad
--- /dev/null
+++ b/ld/testsuite/ld-riscv-elf/call-relax-1.s
@@ -0,0 +1,6 @@
+.globl align1
+
+.text
+.balign 32
+align1:
+ csrr a0, sie
diff --git a/ld/testsuite/ld-riscv-elf/call-relax-2.s b/ld/testsuite/ld-riscv-elf/call-relax-2.s
new file mode 100644
index 0000000..2521d1c
--- /dev/null
+++ b/ld/testsuite/ld-riscv-elf/call-relax-2.s
@@ -0,0 +1,7 @@
+.globl align2
+
+.text
+.balign 4
+align2:
+ csrr a0, sie
+.fill 0xfffb6
diff --git a/ld/testsuite/ld-riscv-elf/call-relax-3.s b/ld/testsuite/ld-riscv-elf/call-relax-3.s
new file mode 100644
index 0000000..3eb04d8
--- /dev/null
+++ b/ld/testsuite/ld-riscv-elf/call-relax-3.s
@@ -0,0 +1,9 @@
+.globl cc
+.globl dd
+
+.text
+cc:
+ csrr a0, sie
+ csrr a1, sie
+dd:
+ ret
diff --git a/ld/testsuite/ld-riscv-elf/call-relax.d b/ld/testsuite/ld-riscv-elf/call-relax.d
new file mode 100644
index 0000000..46d9c84
--- /dev/null
+++ b/ld/testsuite/ld-riscv-elf/call-relax.d
@@ -0,0 +1,9 @@
+#name: call relaxation with alignment
+#source: call-relax-0.s
+#source: call-relax-1.s
+#source: call-relax-2.s
+#source: call-relax-3.s
+#as: -march=rv32ic
+#ld: -melf32lriscv
+#objdump: -d
+#pass
diff --git a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp
index 0a7ac59..7aabbdd 100644
--- a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp
+++ b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp
@@ -20,6 +20,7 @@
#
if [istarget "riscv*-*-*"] {
+ run_dump_test "call-relax"
run_dump_test "c-lui"
run_dump_test "c-lui-2"
run_dump_test "disas-jalr"