aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2024-09-27 11:41:00 +0200
committerJan Beulich <jbeulich@suse.com>2024-09-27 11:41:00 +0200
commit9a788db16aef1d87f61138b65a0763818a234a6c (patch)
treeb0ef9c8bb209c7c1e0b93a35030a6ec8e3b777cf /gas
parent784e2ef54b443a4d0b95e97122934ca8eaa4155b (diff)
downloadbinutils-9a788db16aef1d87f61138b65a0763818a234a6c.zip
binutils-9a788db16aef1d87f61138b65a0763818a234a6c.tar.gz
binutils-9a788db16aef1d87f61138b65a0763818a234a6c.tar.bz2
RISC-V: odd data padding vs mapping symbols
Odd data padding has a $d label inserted at its beginning. When a $x... label is removed instead, a replacement is inserted after the padding. The same, however, needs to also happen when there's no $x to replace.
Diffstat (limited to 'gas')
-rw-r--r--gas/config/tc-riscv.c10
-rw-r--r--gas/testsuite/gas/riscv/odd-padding.d17
-rw-r--r--gas/testsuite/gas/riscv/odd-padding.s8
3 files changed, 30 insertions, 5 deletions
diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
index 4a57683..ef455e4 100644
--- a/gas/config/tc-riscv.c
+++ b/gas/config/tc-riscv.c
@@ -579,19 +579,19 @@ make_mapping_symbol (enum riscv_seg_mstate state,
}
frag->tc_frag_data.last_map_symbol = symbol;
- if (removed == NULL)
- return;
-
if (odd_data_padding)
{
/* If the removed mapping symbol is $x+arch, then add it back to
the next $x. */
- const char *str = strncmp (S_GET_NAME (removed), "$xrv", 4) == 0
+ const char *str = removed != NULL
+ && strncmp (S_GET_NAME (removed), "$xrv", 4) == 0
? S_GET_NAME (removed) + 2 : NULL;
make_mapping_symbol (MAP_INSN, frag->fr_fix + 1, frag, str,
false/* odd_data_padding */);
}
- symbol_remove (removed, &symbol_rootP, &symbol_lastP);
+
+ if (removed != NULL)
+ symbol_remove (removed, &symbol_rootP, &symbol_lastP);
}
/* Set the mapping state for frag_now. */
diff --git a/gas/testsuite/gas/riscv/odd-padding.d b/gas/testsuite/gas/riscv/odd-padding.d
new file mode 100644
index 0000000..b445a74
--- /dev/null
+++ b/gas/testsuite/gas/riscv/odd-padding.d
@@ -0,0 +1,17 @@
+#as: -mrelax
+#as: -mno-relax
+#objdump: -d
+
+.*:[ ]+file format .*
+
+
+Disassembly of section \.text:
+
+0+000 <byte>:
+[ ]+0:[ ]+00000013[ ]+nop
+[ ]+4:[ ]+00[ ]+\.byte[ ]+0x00
+#...
+[ ]+9:[ ]+00[ ]+\.byte[ ]+0x00
+[ ]+a:[ ]+0001[ ]+\.insn[ ]+2, 0x0*1
+[ ]+c:[ ]+00000013[ ]+nop
+[ ]+10:[ ]+00008067[ ]+ret
diff --git a/gas/testsuite/gas/riscv/odd-padding.s b/gas/testsuite/gas/riscv/odd-padding.s
new file mode 100644
index 0000000..9e434ea
--- /dev/null
+++ b/gas/testsuite/gas/riscv/odd-padding.s
@@ -0,0 +1,8 @@
+ .text
+byte:
+ nop
+ .byte 0
+ nop
+ .p2align 2
+ nop
+ ret