Messages in this thread | | | From | Florian Weimer <> | Subject | Re: [RFC PATCH glibc 4/8] glibc: Perform rseq(2) registration at C startup and thread creation (v15) | Date | Thu, 19 Mar 2020 17:03:39 +0100 |
| |
* Mathieu Desnoyers:
>> Can you use __has_include in <sys/rseq.h>, with a copy of the kernel >> definitions if the kernel header is not available? > > Sure. Should I pull a verbatim copy of uapi linux/rseq.h into glibc ? > If so, where should I put it ?
Probably into <sys/rseq.h>, perhaps with a construct like this (untested):
#ifdef __has_include # if __has_include ("linux/rseq.h") # define __GLIBC_HAVE_KERNEL_RSEQ # endif #else # include <linux/version.h> # if LINUX_VERSION_CODE >= KERNEL_VERSION (4, 18, 0) # define __GLIBC_HAVE_KERNEL_RSEQ # endif #endif
#ifdef __GLIBC_HAVE_KERNEL_RSEQ # include <linux/rseq.h> #else
… (fallback goes here) #endif
We have an ongoing debate whether the fallback definition should use __u64 or uint64_t.
You also need to add an assert that the compiler supports __attribute__ ((aligned)) because ignoring it produces an ABI-incompatible header. The struct rseq/struct rseq_cs definitions are broken, they should not try to change the alignment.
PS: I have Internet connection trouble. Nobody should be worried if I drop off the net for a while. I understand this is quite a bad time for that. 8-(
| |