* Re: [PATCH] rust: enable fentry support
[not found] ` <CANiq72nJ=7TAjtArF2VzDZqwKDcuMFjeisD25R2GuA0NiJwk-Q@mail.gmail.com>
@ 2026-07-28 22:57 ` Vasily Gorbik
2026-07-29 14:50 ` Paul Murphy
2026-07-29 15:51 ` Vasily Gorbik
0 siblings, 2 replies; 3+ messages in thread
From: Vasily Gorbik @ 2026-07-28 22:57 UTC (permalink / raw)
To: Miguel Ojeda
Cc: Paul Murphy, Heiko Carstens, Alexander Gordeev,
Christian Borntraeger, Sven Schnelle, sashiko-reviews,
Paul Murphy, ojeda, Steven Rostedt, Masami Hiramatsu,
Mark Rutland, linux-trace-kernel, Jan Polensky, Eddy Stefes
On Mon, Jul 27, 2026 at 08:33:35PM +0200, Miguel Ojeda wrote:
> On Mon, Jul 27, 2026 at 7:18 PM Paul Murphy <paumurph@redhat.com> wrote:
> >
> > Hrm, s390x has more nuanced usage. It still uses -mrecord-mcount and
> > -mnop-mcount. The x86 configurations I've looked at use the kernel's
> > tooling to nop and record as needed. Is there any reason s390x cannot
> > use those, or should rustc support those (for s390x only)?
>
> Cc'ing the s390x maintainers -- they probably know why they use them.
Cc'ing the ftrace maintainers.
I do not think this is true for x86 in general. Generating the
__fentry__ call and recording its location are two separate operations.
-Zinstrument-mcount=fentry only generates the call. Dynamic ftrace also
needs the call site recorded in __mcount_loc section.
The recording mechanism is selected in kernel/trace/Kconfig:
config FTRACE_MCOUNT_USE_CC
def_bool y
depends on $(cc-option,-mrecord-mcount)
depends on !FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY
depends on DYNAMIC_FTRACE
config FTRACE_MCOUNT_USE_OBJTOOL
def_bool y
depends on HAVE_OBJTOOL_MCOUNT
depends on !FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY
depends on !FTRACE_MCOUNT_USE_CC <--- NOTICE THAT --
depends on DYNAMIC_FTRACE
select OBJTOOL
config FTRACE_MCOUNT_USE_RECORDMCOUNT
def_bool y
depends on !FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY
depends on !FTRACE_MCOUNT_USE_CC
depends on !FTRACE_MCOUNT_USE_OBJTOOL
depends on DYNAMIC_FTRACE
There are currently three ways to generate __mcount_loc section:
1. The compiler does it with -mrecord-mcount.
2. Objtool does it with --mcount.
3. scripts/recordmcount does it as a post-processing step.
These are selected in that order.
Looking on my system:
For x86 GCC builds - current GCC supports -mrecord-mcount,
so FTRACE_MCOUNT_USE_CC is selected and the compiler gets
-pg -mfentry -mrecord-mcount
For x86 Clang builds - current x86 Clang does not support -mrecord-mcount,
so FTRACE_MCOUNT_USE_OBJTOOL is selected. Clang gets
-pg -mfentry
and objtool gets
--mcount --mnop
s390 uses the compiler path with both current GCC and Clang:
-pg -mfentry -mrecord-mcount -mnop-mcount
Here -mrecord-mcount creates __mcount_loc and -mnop-mcount emits the
six-byte nop expected by the s390 ftrace code.
So -Zinstrument-mcount=fentry alone is sufficient only when some
later build step records the generated call, as objtool does for
x86 Clang FTRACE_MCOUNT_USE_OBJTOOL builds. It is not sufficient for
FTRACE_MCOUNT_USE_CC. For FTRACE_MCOUNT_USE_RECORDMCOUNT - the
scripts/recordmcount post-processing step is also currently wired to
the C build rule rather than the Rust build rule.
Objtool mcount recording is currently supported only by x86 and powerpc.
Those are the only architectures which select HAVE_OBJTOOL_MCOUNT. And
s390 currently has no objtool support.
So I do not think -mrecord-mcount Rust support is only needed for
s390. The Rust build path needs an equivalent of -mrecord-mcount when
FTRACE_MCOUNT_USE_CC is selected. And additionally an equivalent of
-mnop-mcount for s390 (this is debatable, we could check if this brings
us much or we could drop it).
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] rust: enable fentry support
2026-07-28 22:57 ` [PATCH] rust: enable fentry support Vasily Gorbik
@ 2026-07-29 14:50 ` Paul Murphy
2026-07-29 15:51 ` Vasily Gorbik
1 sibling, 0 replies; 3+ messages in thread
From: Paul Murphy @ 2026-07-29 14:50 UTC (permalink / raw)
To: Vasily Gorbik
Cc: Miguel Ojeda, Heiko Carstens, Alexander Gordeev,
Christian Borntraeger, Sven Schnelle, sashiko-reviews,
Paul Murphy, ojeda, Steven Rostedt, Masami Hiramatsu,
Mark Rutland, linux-trace-kernel, Jan Polensky, Eddy Stefes
On Tue, Jul 28, 2026 at 5:58 PM Vasily Gorbik <gor@linux.ibm.com> wrote:
> So I do not think -mrecord-mcount Rust support is only needed for
> s390. The Rust build path needs an equivalent of -mrecord-mcount when
> FTRACE_MCOUNT_USE_CC is selected. And additionally an equivalent of
> -mnop-mcount for s390 (this is debatable, we could check if this brings
> us much or we could drop it).
Right, as background, the llvm x86 maintainer were uninterested in
supporting these options [1] when I created the PR. I think the
argument is roughly that these options are bespoke features for
building this project. mrecordmcount already does that, independent of
the compiler. I think some llvm maintainers hold the opinion that
patchable-function-entries is already a sufficient replacement for
fentry.
Digging through commit history, the answer is unsurprisingly that
using recordmcount is slower. It's certainly more convenient to have
the compiler record them.
[1] https://github.com/llvm/llvm-project/pull/184641
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] rust: enable fentry support
2026-07-28 22:57 ` [PATCH] rust: enable fentry support Vasily Gorbik
2026-07-29 14:50 ` Paul Murphy
@ 2026-07-29 15:51 ` Vasily Gorbik
1 sibling, 0 replies; 3+ messages in thread
From: Vasily Gorbik @ 2026-07-29 15:51 UTC (permalink / raw)
To: Miguel Ojeda
Cc: Paul Murphy, Heiko Carstens, Alexander Gordeev,
Christian Borntraeger, Sven Schnelle, sashiko-reviews,
Paul Murphy, ojeda, Steven Rostedt, Masami Hiramatsu,
Mark Rutland, linux-trace-kernel, Jan Polensky, Eddy Stefes,
Ilya Leoshkevich
On Wed, Jul 29, 2026 at 12:57:48AM +0200, Vasily Gorbik wrote:
> On Mon, Jul 27, 2026 at 08:33:35PM +0200, Miguel Ojeda wrote:
> > On Mon, Jul 27, 2026 at 7:18 PM Paul Murphy <paumurph@redhat.com> wrote:
> > >
> > > Hrm, s390x has more nuanced usage. It still uses -mrecord-mcount and
> > > -mnop-mcount. The x86 configurations I've looked at use the kernel's
> > > tooling to nop and record as needed. Is there any reason s390x cannot
> > > use those, or should rustc support those (for s390x only)?
> So I do not think -mrecord-mcount Rust support is only needed for
> s390. The Rust build path needs an equivalent of -mrecord-mcount when
> FTRACE_MCOUNT_USE_CC is selected. And additionally an equivalent of
> -mnop-mcount for s390 (this is debatable, we could check if this brings
> us much or we could drop it).
Ok, I refreshed my memory on why exactly we stick to using -mnop-mcount:
it is not just an optimization that saves us a few milliseconds on the
initial NOP conversion.
s390 deliberately uses the same six-byte disabled function prologue for
both supported compiler paths:
older compilers using -mhotpatch=0,3:
brcl 0,0
newer compilers using -mfentry -mnop-mcount:
brcl 0,0
Without -mnop-mcount, the newer path would instead emit:
brasl %r0,__fentry__
s390 would then need to support multiple initial prologue formats,
provide and export a no-op __fentry__ implementation, handle its module
relocations and PLTs, and distinguish fentry calls from hotpatch-generated
NOPs during initialization. -mnop-mcount avoids this and keeps the old
hotpatch path and the newer fentry path binary-compatible.
Since LLVM's SystemZ backend already implements the "mrecord-mcount" and
"mnop-mcount", teaching rustc to request those existing backend operations
appears considerably cleaner than reintroducing multiple s390 prologue
formats and startup conversion.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-29 15:51 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260724170132.3783816-1-murp@redhat.com>
[not found] ` <20260724172024.0648C1F000E9@smtp.kernel.org>
[not found] ` <CALYDSrQhUbKDHsPnQqp0K4WMe2iZC-G1nGrLT6eQ9doCqdVXKQ@mail.gmail.com>
[not found] ` <CANiq72nJ=7TAjtArF2VzDZqwKDcuMFjeisD25R2GuA0NiJwk-Q@mail.gmail.com>
2026-07-28 22:57 ` [PATCH] rust: enable fentry support Vasily Gorbik
2026-07-29 14:50 ` Paul Murphy
2026-07-29 15:51 ` Vasily Gorbik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox