aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog9
-rw-r--r--gas/config/tc-riscv.c7
-rw-r--r--gas/testsuite/gas/riscv/absolute-sec.d3
-rw-r--r--gas/testsuite/gas/riscv/absolute-sec.l2
-rw-r--r--gas/testsuite/gas/riscv/absolute-sec.s2
5 files changed, 23 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 113a7cf..1c692dd 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,12 @@
+2020-09-24 Jim Wilson <jimw@sifive.com>
+
+ PR 26400
+ * config/tc-riscv.c (append_insn): If in absolute section, emit
+ error before add_relaxed_insn call.
+ * testsuite/gas/riscv/absolute-sec.d: New.
+ * testsuite/gas/riscv/absolute-sec.l: New.
+ * testsuite/gas/riscv/absolute-sec.s: New.
+
2020-09-23 Mark Wielaard <mark@klomp.org>
* testsuite/gas/elf/dwarf-5-cu.d: Adjust expected output.
diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
index eb31e42..7c22843 100644
--- a/gas/config/tc-riscv.c
+++ b/gas/config/tc-riscv.c
@@ -1106,6 +1106,13 @@ append_insn (struct riscv_cl_insn *ip, expressionS *address_expr,
int j = reloc_type == BFD_RELOC_RISCV_JMP;
int best_case = riscv_insn_length (ip->insn_opcode);
unsigned worst_case = relaxed_branch_length (NULL, NULL, 0);
+
+ if (now_seg == absolute_section)
+ {
+ as_bad (_("relaxable branches not supported in absolute section"));
+ return;
+ }
+
add_relaxed_insn (ip, worst_case, best_case,
RELAX_BRANCH_ENCODE (j, best_case == 2, worst_case),
address_expr->X_add_symbol,
diff --git a/gas/testsuite/gas/riscv/absolute-sec.d b/gas/testsuite/gas/riscv/absolute-sec.d
new file mode 100644
index 0000000..c32e94e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/absolute-sec.d
@@ -0,0 +1,3 @@
+#as:
+#source absolute-sec.s
+#error_output: absolute-sec.l
diff --git a/gas/testsuite/gas/riscv/absolute-sec.l b/gas/testsuite/gas/riscv/absolute-sec.l
new file mode 100644
index 0000000..f5d32c4
--- /dev/null
+++ b/gas/testsuite/gas/riscv/absolute-sec.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Error: relaxable branches not supported in absolute section
diff --git a/gas/testsuite/gas/riscv/absolute-sec.s b/gas/testsuite/gas/riscv/absolute-sec.s
new file mode 100644
index 0000000..d7d6799
--- /dev/null
+++ b/gas/testsuite/gas/riscv/absolute-sec.s
@@ -0,0 +1,2 @@
+ .offset 0
+ jal x0, 100