[Bug target/96061] New: Please support 'no_caller_saved_registers' attribute on aarch64 (or maybe on all targets)

2020-07-04 Thread alex.popov at linux dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96061

Bug ID: 96061
   Summary: Please support 'no_caller_saved_registers' attribute
on aarch64 (or maybe on all targets)
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: target
  Assignee: unassigned at gcc dot gnu.org
  Reporter: alex.popov at linux dot com
  Target Milestone: ---

This is an enhancement request.

GCC currently supports 'no_caller_saved_registers' attribute only for x86.
Clang supports it for all target architectures.

It would be very useful for Linux kernel, if GCC supported
'no_caller_saved_registers' attribute for at least aarch64. In particular, that
would allow to avoid useless work with caller-saved registers caused by
STACKLEAK GCC plugin instrumentation for the Linux kernel on aarch64.

This kernel patch uses 'no_caller_saved_registers' to fix the described issue
on x86:
https://www.openwall.com/lists/kernel-hardening/2020/06/24/13
(the patch is accepted for the mainline kernel)

That GCC enhancement can be useful for _mcount (gprof) as well.

Thanks!

[Bug target/96061] Please support 'no_caller_saved_registers' attribute on aarch64 (or maybe on all targets)

2020-07-04 Thread alex.popov at linux dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96061

--- Comment #2 from Alexander Popov  ---
> We are working on -fzero-call-used-regs:

H.J. Lu, thanks for the information!

However, this flag can't be used per-function, like the attribute.
So supporting 'no_caller_saved_registers' attribute for aarch64 (and maybe
other architectures) is desired anyway.

Thanks!

[Bug target/96061] Please support 'no_caller_saved_registers' attribute on aarch64 (or maybe on all targets)

2020-07-04 Thread alex.popov at linux dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96061

--- Comment #4 from Alexander Popov  ---
> Incorrect.  There is also a zero_call_used_regs attribute.

Thanks, now I've found it in your tree:

```
You can control this behavior for a specific function by using the function
attribute @code{zero_call_used_regs}.
```

Could you explain the connection between your attribute for zeroing registers
and 'no_caller_saved_registers' attribute?

[Bug target/96061] Please support 'no_caller_saved_registers' attribute on aarch64 (or maybe on all targets)

2020-07-04 Thread alex.popov at linux dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96061

--- Comment #6 from Alexander Popov  ---
>> Could you explain the connection between your attribute for zeroing
>> registers and 'no_caller_saved_registers' attribute?
> 
> We are porting
> 
> https://gitlab.com/x86-gcc/gcc/-/tree/users/hjl/caller-saved/old
> 
> from x86 back-end to middle-end.  no_caller_saved_registers changes what
> registers zero_call_used_regs can do.  Move no_caller_saved_registers to
> middle-end has a direct impact on zero_call_used_regs implementation in
> middle-end.

Ok. So, as I can understand, your work will enable 'no_caller_saved_registers'
attribute for all architectures. Am I right?

If so, good luck to you! Looking forward to your results.