public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/106338] New: RISC-V static-chain register may be clobbered by PLT stubs
@ 2022-07-18  8:00 funanzeng at gmail dot com
  2022-07-18  8:12 ` [Bug target/106338] " pinskia at gcc dot gnu.org
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: funanzeng at gmail dot com @ 2022-07-18  8:00 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106338

            Bug ID: 106338
           Summary: RISC-V static-chain register may be clobbered by PLT
                    stubs
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: funanzeng at gmail dot com
  Target Milestone: ---

In commit 09cae7507d9e88f2b05cf3a9404bf181e65ccbac, Palmer ported GCC to RISC-V
and t2 were chosen as the static chain register. However, when I supporting
this feature in LLVM(https://reviews.llvm.org/D129106), jrtc27 pointed out that
this issue.

In practice, static chain parameters are only used in Go and is always used
with closures, where the function pointer is already resolved. As a result,
this issue may not be triggered unless a user directly calls a foreign function
with a static chain parameter, and thus has not caused any problem.

FYI, in a recent change to the RISC-V ABI, STO_RISCV_VARIANT_CC was added to
support unknown ABI.

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

* [Bug target/106338] RISC-V static-chain register may be clobbered by PLT stubs
  2022-07-18  8:00 [Bug target/106338] New: RISC-V static-chain register may be clobbered by PLT stubs funanzeng at gmail dot com
@ 2022-07-18  8:12 ` pinskia at gcc dot gnu.org
  2022-07-18  8:13 ` pinskia at gcc dot gnu.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-07-18  8:12 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106338

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I don't see how this is an issue static chain is only used for nested functions
in gcc and always local functions (except maybe with LTO).

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

* [Bug target/106338] RISC-V static-chain register may be clobbered by PLT stubs
  2022-07-18  8:00 [Bug target/106338] New: RISC-V static-chain register may be clobbered by PLT stubs funanzeng at gmail dot com
  2022-07-18  8:12 ` [Bug target/106338] " pinskia at gcc dot gnu.org
@ 2022-07-18  8:13 ` pinskia at gcc dot gnu.org
  2022-07-18  8:17 ` schwab@linux-m68k.org
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-07-18  8:13 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106338

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
> static chain parameters are only used in Go

This is a lie. They are used with both Ada and fortan a lot. Both heavily use
nested functions.

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

* [Bug target/106338] RISC-V static-chain register may be clobbered by PLT stubs
  2022-07-18  8:00 [Bug target/106338] New: RISC-V static-chain register may be clobbered by PLT stubs funanzeng at gmail dot com
  2022-07-18  8:12 ` [Bug target/106338] " pinskia at gcc dot gnu.org
  2022-07-18  8:13 ` pinskia at gcc dot gnu.org
@ 2022-07-18  8:17 ` schwab@linux-m68k.org
  2022-08-09 19:47 ` pinskia at gcc dot gnu.org
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: schwab@linux-m68k.org @ 2022-07-18  8:17 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106338

--- Comment #3 from Andreas Schwab <schwab@linux-m68k.org> ---
I think every port is using a call-clobbered register for the static chain, and
it is not part of the ABI.

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

* [Bug target/106338] RISC-V static-chain register may be clobbered by PLT stubs
  2022-07-18  8:00 [Bug target/106338] New: RISC-V static-chain register may be clobbered by PLT stubs funanzeng at gmail dot com
                   ` (2 preceding siblings ...)
  2022-07-18  8:17 ` schwab@linux-m68k.org
@ 2022-08-09 19:47 ` pinskia at gcc dot gnu.org
  2022-08-09 21:11 ` andrew at sifive dot com
  2022-08-10  2:58 ` kito at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-08-09 19:47 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106338

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |WONTFIX

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The only reason why aarch64 changed their static chain register was because it
was used for TLS on darwin (and IIRC on VXWorks). 

static chain is not part of the ABI (unless RISCV folks want to do that). And
there are no PLTs between the function calls.

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

* [Bug target/106338] RISC-V static-chain register may be clobbered by PLT stubs
  2022-07-18  8:00 [Bug target/106338] New: RISC-V static-chain register may be clobbered by PLT stubs funanzeng at gmail dot com
                   ` (3 preceding siblings ...)
  2022-08-09 19:47 ` pinskia at gcc dot gnu.org
@ 2022-08-09 21:11 ` andrew at sifive dot com
  2022-08-10  2:58 ` kito at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: andrew at sifive dot com @ 2022-08-09 21:11 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106338

Andrew Waterman <andrew at sifive dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |andrew at sifive dot com

--- Comment #5 from Andrew Waterman <andrew at sifive dot com> ---
(I don't want to make the static chain register part of the RISC-V ABI; the
status quo seems fine.)

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

* [Bug target/106338] RISC-V static-chain register may be clobbered by PLT stubs
  2022-07-18  8:00 [Bug target/106338] New: RISC-V static-chain register may be clobbered by PLT stubs funanzeng at gmail dot com
                   ` (4 preceding siblings ...)
  2022-08-09 21:11 ` andrew at sifive dot com
@ 2022-08-10  2:58 ` kito at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: kito at gcc dot gnu.org @ 2022-08-10  2:58 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106338

--- Comment #6 from Kito Cheng <kito at gcc dot gnu.org> ---
My understanding is static chain is sort of compiler internal implementation,
any register could be picked if that is not used for passing argument, so I
would also prefer keep that out psABI spec for now.


And just record info for myself:

x86-64 ABI has document function's static chain pointer in their ABI

https://gitlab.com/x86-psABIs/x86-64-ABI/-/blob/master/x86-64-ABI/low-level-sys-info.tex#L701

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

end of thread, other threads:[~2022-08-10  2:58 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-18  8:00 [Bug target/106338] New: RISC-V static-chain register may be clobbered by PLT stubs funanzeng at gmail dot com
2022-07-18  8:12 ` [Bug target/106338] " pinskia at gcc dot gnu.org
2022-07-18  8:13 ` pinskia at gcc dot gnu.org
2022-07-18  8:17 ` schwab@linux-m68k.org
2022-08-09 19:47 ` pinskia at gcc dot gnu.org
2022-08-09 21:11 ` andrew at sifive dot com
2022-08-10  2:58 ` kito at gcc dot gnu.org

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).