[PATCH v4 08/12] RISC-V/gas: .attribute vs .insn
Jan Beulich <[email protected]> Fri, 24 Jul 2026 12:05:04 +0200
| Newsgroups | gmane.comp.gnu.binutils |
|---|---|
| Message-ID | <[email protected]> |
"... before any instruction", as the diagnostic from s_riscv_attribute() says, presumably ought to include also insns resulting from .insn. Make a small helper function. Reviewed-by: Jiawei <[email protected]> --- RFC: I can't quite figure why this constraint exists, so there may also be the option of relaxing things (up to fully dropping start_assemble). --- v2: Style correction. --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -4650,6 +4650,18 @@ riscv_ip_hardcode (char *str, return NULL; } +/* The architecture and privileged elf attributes should be set before + assembling. */ +static bool +start_assembly (void) +{ + start_assemble = true; + + riscv_set_abi_by_arch (); + + return riscv_set_default_priv_spec (NULL); +} + void md_assemble (char *str) { @@ -4657,16 +4669,8 @@ md_assemble (char *str) expressionS imm_expr; bfd_reloc_code_real_type imm_reloc = BFD_RELOC_UNUSED; - /* The architecture and privileged elf attributes should be set - before assembling. */ - if (!start_assemble) - { - start_assemble = true; - - riscv_set_abi_by_arch (); - if (!riscv_set_default_priv_spec (NULL)) - return; - } + if (!start_assemble && !start_assembly()) + return; riscv_mapping_state (MAP_INSN, 0, false/* fr_align_code */); @@ -5875,6 +5879,9 @@ s_riscv_insn (int x ATTRIBUTE_UNUSED) bfd_reloc_code_real_type imm_reloc = BFD_RELOC_UNUSED; char save_c; + if (!start_assemble && !start_assembly()) + return; + while (!is_end_of_stmt (*input_line_pointer)) ++input_line_pointer;