diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2021-12-02 15:00:56 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2021-12-02 15:00:56 +0000 |
commit | a346bb24cf3b9c71f6a66f022bf4ac80dbf0d8f8 (patch) | |
tree | badc91a02271ef2680d74404109c3418480114a9 /gas | |
parent | b3e59f8873b9f07e84b19a19d40810f9a61b6d62 (diff) | |
download | gdb-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')
-rw-r--r-- | gas/config/tc-aarch64.c | 24 | ||||
-rw-r--r-- | gas/config/tc-aarch64.h | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/aarch64/sve-movprfx_4.l | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/aarch64/sve-movprfx_7.l | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/aarch64/sve-movprfx_8.l | 2 |
5 files changed, 17 insertions, 15 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; diff --git a/gas/config/tc-aarch64.h b/gas/config/tc-aarch64.h index 658b693..78bff0a 100644 --- a/gas/config/tc-aarch64.h +++ b/gas/config/tc-aarch64.h @@ -225,6 +225,8 @@ void mapping_state (enum mstate); struct aarch64_segment_info_type { + const char *last_file; + unsigned last_line; enum mstate mapstate; unsigned int marked_pr_dependency; aarch64_instr_sequence insn_sequence; diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_4.l b/gas/testsuite/gas/aarch64/sve-movprfx_4.l index 277a6d9..6ea4551 100644 --- a/gas/testsuite/gas/aarch64/sve-movprfx_4.l +++ b/gas/testsuite/gas/aarch64/sve-movprfx_4.l @@ -1,2 +1,2 @@ [^:]*: Assembler messages: -.*: Warning: previous `movprfx' sequence has not been closed +.*:8: Warning: previous `movprfx' sequence has not been closed diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_7.l b/gas/testsuite/gas/aarch64/sve-movprfx_7.l index 277a6d9..e5776c7 100644 --- a/gas/testsuite/gas/aarch64/sve-movprfx_7.l +++ b/gas/testsuite/gas/aarch64/sve-movprfx_7.l @@ -1,2 +1,2 @@ [^:]*: Assembler messages: -.*: Warning: previous `movprfx' sequence has not been closed +.*:7: Warning: previous `movprfx' sequence has not been closed diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_8.l b/gas/testsuite/gas/aarch64/sve-movprfx_8.l index 277a6d9..e5776c7 100644 --- a/gas/testsuite/gas/aarch64/sve-movprfx_8.l +++ b/gas/testsuite/gas/aarch64/sve-movprfx_8.l @@ -1,2 +1,2 @@ [^:]*: Assembler messages: -.*: Warning: previous `movprfx' sequence has not been closed +.*:7: Warning: previous `movprfx' sequence has not been closed |