[Bug target/96061] New: Please support 'no_caller_saved_registers' attribute on aarch64 (or maybe on all targets)
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)
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)
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)
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.