在 2024-01-22 16:39, Jan Beulich 写道:
Right, I did some work in that direction a while ago. But iirc there are still cases left to be addressed.
Attached is a draft patch for GCC, bootstrapped on {i686,x86_64}-w64-mingw32 with GCC 13.2 and binutils 2.41.0.
This addresses the issue when a bad name exists in the same translation unit. In the case of an external symbol there's still an error:
``` extern int bx; int get(const char* p) { return p[bx]; } ``` ``` lh_mouse@lhmouse-pc ~/Desktop $ x86_64-w64-mingw32-gcc -S -o - -masm=intel test.c | fgrep bx mov rax, QWORD PTR .refptr.bx[rip] .section .rdata$.refptr.bx, "dr" .globl .refptr.bx .refptr.bx: .quad bx lh_mouse@lhmouse-pc ~/Desktop $ x86_64-w64-mingw32-gcc -masm=intel test.c | fgrep bx C:\Users\lh_mouse\AppData\Local\Temp\ccuyuu6c.s: Assembler messages: C:\Users\lh_mouse\AppData\Local\Temp\ccuyuu6c.s:29: Error: invalid use of register C:\Users\lh_mouse\AppData\Local\Temp\ccuyuu6c.s:29: Warning: register value used as expression lh_mouse@lhmouse-pc ~/Desktop $ ``` -- Best regards, LIU Hao
From 2579afab42b90dceac860114acbad1ab79bca979 Mon Sep 17 00:00:00 2001 From: LIU Hao <lh_mo...@126.com> Date: Tue, 23 Jan 2024 02:20:29 +0800 Subject: [PATCH] Always quote symbols in Intel syntax --- gcc/config/i386/i386.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 539083f2fbf8..785c6eda8d55 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2175,7 +2175,7 @@ extern int const svr4_debugger_register_map[FIRST_PSEUDO_REGISTER]; #define ASM_OUTPUT_SYMBOL_REF(FILE, SYM) \ do { \ const char *name \ - = assemble_name_resolve (XSTR (x, 0)); \ + = assemble_name_resolve (XSTR (SYM, 0)); \ /* In -masm=att wrap identifiers that start with $ \ into parens. */ \ if (ASSEMBLER_DIALECT == ASM_ATT \ @@ -2186,6 +2186,13 @@ extern int const svr4_debugger_register_map[FIRST_PSEUDO_REGISTER]; assemble_name_raw ((FILE), name); \ fputc (')', (FILE)); \ } \ + else if (ASSEMBLER_DIALECT == ASM_INTEL \ + && name[0] != '*') \ + { \ + fputc ('\"', (FILE)); \ + assemble_name_raw ((FILE), name); \ + fputc ('\"', (FILE)); \ + } \ else \ assemble_name_raw ((FILE), name); \ } while (0) -- 2.43.0
OpenPGP_signature.asc
Description: OpenPGP digital signature