在 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

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to