public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* -fno-asynchronous-unwind-tables && .cfi_* in inline asm
       [not found]     ` <CAFyWVaZuB5RgT7nLB--qA8FeVjRGK-iJfB=-Obwj0HchCmpjaw@mail.gmail.com>
@ 2021-02-20  4:30       ` Fangrui Song
  2021-02-22 19:08         ` Jim Wilson
  0 siblings, 1 reply; 2+ messages in thread
From: Fangrui Song @ 2021-02-20  4:30 UTC (permalink / raw)
  To: Jim Wilson; +Cc: gcc-help, binutils

On 2021-02-19, Jim Wilson wrote:
>On Fri, Feb 19, 2021 at 4:36 PM Fangrui Song <i@maskray.me> wrote:
>
>> How should we make the following code work with both
>> -fno-asynchronous-unwind-tables and -fasynchronous-unwind-tables?
>>
>>    int main() {
>>      asm(".cfi_undefined %rip");
>>    }
>>
>> The example is minimalistic. The idea is that if inline asm does stack
>> push/pop and wants to manually add .cfi_* directives, the current
>> error behavior is undesired.
>>
>
>I don't think that there is a way currently to make this work.

>In general, I'd say that if you are doing something non-trivial you should
>not be using an extended asm.  You should either use a built-in function or
>just write it in assembly language directly.  Extended asms really only
>work well for simple stuff.  If you use a built-in function, then the
>compiler should emit any CFI directives for that built-in if necessary. If
>writing in assembly language then you can hand write CFI directives for the
>entire function, or rely on assembler support if the assembler can figure
>it out from the code.

>But if you really want to do this in an extended asm, then we would need to
>extend the asm syntax so that one can put CFI info in the middle of an
>asm.  One way to do that might be a special operator for formatting asm
>strings that only prints the string if we are emitting unwind info.  We
>would have to find a free punctuation character that isn't already used by
>any existing port, and then assuming backquote is free we could do
>int main() {
>     asm("`.cfi_undefined %rip`");
>   }
>and the backquotes then only print the string if we are emitting unwind
>info.  Or alternatively make this a % operator like %`.  Either way, I
>think this would look funny, so might not be the best approach.  It would
>likely be difficult for people to use.  I seriously doubt many users can
>write CFI code and get it right.

In GNU as, can we have a .cfi_sections value to ignore subsequent .cfi_* directives?
If such a directive exists, gcc -fno-asynchronous-unwind-tables can emit
that directive, and pass through all the .cfi_* directives, then let GNU as ignore them.

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: -fno-asynchronous-unwind-tables && .cfi_* in inline asm
  2021-02-20  4:30       ` -fno-asynchronous-unwind-tables && .cfi_* in inline asm Fangrui Song
@ 2021-02-22 19:08         ` Jim Wilson
  0 siblings, 0 replies; 2+ messages in thread
From: Jim Wilson @ 2021-02-22 19:08 UTC (permalink / raw)
  To: Fangrui Song; +Cc: gcc-help, Binutils

On Fri, Feb 19, 2021 at 8:30 PM Fangrui Song <i@maskray.me> wrote:

> In GNU as, can we have a .cfi_sections value to ignore subsequent .cfi_*
> directives?
> If such a directive exists, gcc -fno-asynchronous-unwind-tables can emit
> that directive, and pass through all the .cfi_* directives, then let GNU
> as ignore them.
>

I think that is a better suggestion than mine.

Jim

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-02-22 19:09 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <MWHPR1201MB011041646CF3FC6B1CA7E879CB859@MWHPR1201MB0110.namprd12.prod.outlook.com>
     [not found] ` <CAFyWVaYiRMYSEyZjeaCxStO5qR_isbSQHyDjv1EFpfUd778gmg@mail.gmail.com>
     [not found]   ` <20210220003611.kyctkqaz3m2weqva@gmail.com>
     [not found]     ` <CAFyWVaZuB5RgT7nLB--qA8FeVjRGK-iJfB=-Obwj0HchCmpjaw@mail.gmail.com>
2021-02-20  4:30       ` -fno-asynchronous-unwind-tables && .cfi_* in inline asm Fangrui Song
2021-02-22 19:08         ` Jim Wilson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).