在 2024-01-19 17:13, Jan Beulich 写道:
But I see a severe issue with your aim at confining strict mode to
compiler generated code only: In inline assembly (see your mentioning of
APP / NO_APP above) you still potentially reference C symbols. So the
ambiguities don't disappear in APP / NO_APP regions.

My suggestion is that people who write inline assembly should have been aware of the existence of bad names, and should have been careful to avoid them.


And an array happening to be indexed by rcx would then result in

     mov eax, DWORD PTR rcx[rcx]    # `movl rcx(%rcx), %eax`

? That's going to be confusing at best.

This is always confusing, no matter how it is written.

I think this whole issue needs
taking care of differently, and iirc I did already suggest an alternative
in one of the bugzilla entries involved: Potentially ambiguous names
(which to a compiler may mean: all symbol names) ought to simply be
quoted, and it ought to be specified that quoted symbols are never
registers. Iirc this will require gas changes, yes, but it'll address all
ambiguities afaict.

The OP of GCC PR53929 said that 'the problem does _not_ go away even if I quote the symbol name by hand in the assembly output' which was 12 years ago. I tried my local installation and quoting the symbol turned out to avoid the issue:

   > as --version
   GNU assembler (GNU Binutils) 2.41.0.20240108

   > cat test.s
   .intel_syntax noprefix
   lea     rax, "bx"[rip]

   > as test.s -o test.o

   > objdump -d test.o
   test.o:     file format pe-x86-64
   (...)
      0:   48 8d 05 00 00 00 00    lea    rax,[rip+0x0]        # 7 <.text+0x7>
      7:   90                      nop


 So I think I had better try my patch in the next few days.


--
Best regards,
LIU Hao

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to