https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91298

--- Comment #14 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-8 branch has been updated by Jakub Jelinek
<ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:93266871ac794243e9785d92a0cec09b2fa5648b

commit r8-10010-g93266871ac794243e9785d92a0cec09b2fa5648b
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Fri Feb 14 15:43:47 2020 +0100

    i386: Fix up -fdollars-in-identifiers with identifiers starting with $ in
-masm=att [PR91298]

    In AT&T syntax leading $ is special, so if we have identifiers that start
    with dollar, we usually fail to assemble it (or assemble incorrectly).
    As mentioned in the PR, what works is wrapping the identifiers inside of
    parens, like:
        movl    $($a), %eax
        leaq    ($a)(,%rdi,4), %rax
        movl    ($a)(%rip), %eax
        movl    ($a)+16(%rip), %eax
        .globl  $a
        .type   $a, @object
        .size   $a, 72
    $a:
        .string "$a"
        .quad   ($a)
    (this is x86_64 -fno-pic -O2).  In some places ($a) is not accepted,
    like as .globl operand, in .type, .size, so the patch overrides
    ASM_OUTPUT_SYMBOL_REF rather than e.g. ASM_OUTPUT_LABELREF.
    I didn't want to duplicate what assemble_name is doing (following
    transparent aliases), so split assemble_name into two parts; just
    mere looking at the first character of a name before calling assemble_name
    wouldn't be good enough, a transparent alias could lead from a name
    not starting with $ to one starting with it and vice versa.

    2020-01-22  Jakub Jelinek  <ja...@redhat.com>

        PR target/91298
        * output.h (assemble_name_resolve): Declare.
        * varasm.c (assemble_name_resolve): New function.
        (assemble_name): Use it.
        * config/i386/i386.h (ASM_OUTPUT_SYMBOL_REF): Define.

        * gcc.target/i386/pr91298-1.c: New test.
        * gcc.target/i386/pr91298-2.c: New test.

Reply via email to