aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-aarch64.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2021-12-02 15:00:56 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2021-12-02 15:00:56 +0000
commita346bb24cf3b9c71f6a66f022bf4ac80dbf0d8f8 (patch)
treebadc91a02271ef2680d74404109c3418480114a9 /gas/config/tc-aarch64.c
parentb3e59f8873b9f07e84b19a19d40810f9a61b6d62 (diff)
downloadgdb-a346bb24cf3b9c71f6a66f022bf4ac80dbf0d8f8.zip
gdb-a346bb24cf3b9c71f6a66f022bf4ac80dbf0d8f8.tar.gz
gdb-a346bb24cf3b9c71f6a66f022bf4ac80dbf0d8f8.tar.bz2
aarch64: Provide line info for unclosed sequences
We warn about MOVPRFX instructions that have no following instruction. This patch adds a line number to the message, which is useful if the assembly code has multiple text sections. The new code is unconditional since OBJ_ELF is always defined for aarch64. gas/ * config/tc-aarch64.h (aarch64_segment_info_type): Add last_file and last_line. * config/tc-aarch64.c (now_instr_sequence): Delete. (force_automatic_sequence_close): Provide a line number when reporting unclosed sequences. (md_assemble): Record the location of the instruction in tc_segment_info. * testsuite/gas/aarch64/sve-movprfx_4.l: Add line number to error message. * testsuite/gas/aarch64/sve-movprfx_7.l: Likewise. * testsuite/gas/aarch64/sve-movprfx_8.l: Likewise.
Diffstat (limited to 'gas/config/tc-aarch64.c')
-rw-r--r--gas/config/tc-aarch64.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index b6ed80e..497c126 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -160,13 +160,6 @@ static aarch64_instruction inst;
static bool parse_operands (char *, const aarch64_opcode *);
static bool programmer_friendly_fixup (aarch64_instruction *);
-#ifdef OBJ_ELF
-# define now_instr_sequence seg_info \
- (now_seg)->tc_segment_info_data.insn_sequence
-#else
-static struct aarch64_instr_sequence now_instr_sequence;
-#endif
-
/* Diagnostics inline function utilities.
These are lightweight utilities which should only be called by parse_operands
@@ -7801,11 +7794,15 @@ warn_unpredictable_ldst (aarch64_instruction *instr, char *str)
static void
force_automatic_sequence_close (void)
{
- if (now_instr_sequence.instr)
+ struct aarch64_segment_info_type *tc_seg_info;
+
+ tc_seg_info = &seg_info (now_seg)->tc_segment_info_data;
+ if (tc_seg_info->insn_sequence.instr)
{
- as_warn (_("previous `%s' sequence has not been closed"),
- now_instr_sequence.instr->opcode->name);
- init_insn_sequence (NULL, &now_instr_sequence);
+ as_warn_where (tc_seg_info->last_file, tc_seg_info->last_line,
+ _("previous `%s' sequence has not been closed"),
+ tc_seg_info->insn_sequence.instr->opcode->name);
+ init_insn_sequence (NULL, &tc_seg_info->insn_sequence);
}
}
@@ -7855,6 +7852,7 @@ md_assemble (char *str)
{
templates *template;
const aarch64_opcode *opcode;
+ struct aarch64_segment_info_type *tc_seg_info;
aarch64_inst *inst_base;
unsigned saved_cond;
@@ -7867,7 +7865,9 @@ md_assemble (char *str)
}
/* Update the current insn_sequence from the segment. */
- insn_sequence = &seg_info (now_seg)->tc_segment_info_data.insn_sequence;
+ tc_seg_info = &seg_info (now_seg)->tc_segment_info_data;
+ insn_sequence = &tc_seg_info->insn_sequence;
+ tc_seg_info->last_file = as_where (&tc_seg_info->last_line);
inst.reloc.type = BFD_RELOC_UNUSED;