Thread (14 messages) 14 messages, 3 authors, 2018-09-21

Re: [RFC PATCH] glibc: Perform rseq(2) registration at nptl init and thread creation

flat view

From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Date: 2018-09-20 20:14:22
Also in: lkml

----- On Sep 19, 2018, at 1:10 PM, Joseph Myers joseph@codesourcery.com wrote:
On Wed, 19 Sep 2018, Mathieu Desnoyers wrote:
quoted
quoted
This looks like it's coming from the Linux kernel.  Can't the relevant
uapi header just be used directly without copying into glibc (with due
care to ensure that glibc still builds if the kernel headers used for the
build are too old - you need such conditionals anyway if they don't define
the relevant syscall number)?
This is indeed in the list of "things to consider" I've put in the patch
commit message. If the usual practice is to build against uapi kernel headers
outside of the glibc tree, I'm fine with that.
We build with, currently, 3.2 or later headers (since 3.2 is EOL there's a
case for updating the minimum in glibc for both compile time and runtime,
but I haven't proposed that since there isn't much cleanup that would
enable and there's the open question of Carlos's proposal to eliminate the
runtime check on the kernel version and just let things try to run anyway
even if it's older than the configured minimum).
Are you saying glibc has an explicit check for the kernel version visible
from /proc before using specific features ? If so, how can this work with
the variety of feature backports we find in the distribution kernels out
there ?

Checking whether specific system calls return ENOSYS errors seems more
flexible.
Functions depending on
new syscalls may return ENOSYS errors if the headers used to build glibc
were too old.  Since this patch is providing a data interface rather than
functions that can set errno to ENOSYS, presumably you have some other way
of signalling unavailability which would apply both with a too-old kernel
at runtime and too-old headers at compile time.
For too-old kernel at runtime, having rseq registration return ENOSYS
leaves the the content of __rseq_abi->cpu_id at its initial value
(RSEQ_CPU_ID_UNINITIALIZED = -1).

For too-old headers at compile time, one possibility is that we don't event
expose the __rseq_abi TLS symbol. OTOH, if we need to keep exposing it anyway
for ABI consistency purposes, then we'd leave its cpu_id field at the initial
value (-1). But that would require that we copy linux/rseq.h into the glibc
source tree.

Thoughts ?

Thanks,

Mathieu
--
Joseph S. Myers
joseph@codesourcery.com
-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help