https://sourceware.org/bugzilla/show_bug.cgi?id=32721

--- Comment #3 from Sourceware Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jan Beulich <jbeul...@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9479e1deba8c30f7756f1d1d8a219d6ee0e570d9

commit 9479e1deba8c30f7756f1d1d8a219d6ee0e570d9
Author: Jan Beulich <jbeul...@suse.com>
Date:   Fri Mar 7 08:30:36 2025 +0100

    gas: leave expression symbols alone when processing equates

    PR gas/32721
    In this bogus piece of code distilled from fuzzing and slightly edited:

            A=%eax|%!
            Y=A
            Z=A
            or $6,Z

    the first of the equates with A on the rhs changes A's section (due to
    the use of S_GET_VALUE()), from expression to register, thus yielding Y
    in the expression section (and X_op being O_symbol), but Z in the
    register section (and X_op being O_register with X_add_value being -1).
    There shouldn't be random O_register expressions, though, for targets
    setting md_register_arithmetic to false. Plus both Y and Z would better
    be exchangeable.

    In pseudo_set() wire handling of O_symbol expressions referencing a
    symbol in the expression section to that of other stuff ending up in
    this section.

    Also avoid bogus O_register expressions to be created, for targets
    setting md_register_arithmetic to false: S_GET_VALUE() would resolve
    any arithmetic, which must not happen for such targets. To be on the
    safe side for such targets, also amend resolve_register(). Correct
    another earlier oversight there too (affecting at least Z80), by using
    the new expr_copy() helper there as well.

    Undo 46b9f07dfe79 ("PR 32721, internal error in
    tc-i386.c:parse_register"), albeit without losing the simplification it
    did.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to