aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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