-
- Downloads
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 <jakub@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.
Showing
- gcc/ChangeLog 8 additions, 0 deletionsgcc/ChangeLog
- gcc/config/i386/i386.h 25 additions, 0 deletionsgcc/config/i386/i386.h
- gcc/output.h 6 additions, 0 deletionsgcc/output.h
- gcc/testsuite/ChangeLog 4 additions, 0 deletionsgcc/testsuite/ChangeLog
- gcc/testsuite/gcc.target/i386/pr91298-1.c 14 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr91298-1.c
- gcc/testsuite/gcc.target/i386/pr91298-2.c 5 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr91298-2.c
- gcc/varasm.c 20 additions, 13 deletionsgcc/varasm.c
Loading
Please register or sign in to comment