Hi Serhei, On Mon, Nov 24, 2025 at 4:38 PM Serhei Makarov <[email protected]> wrote: > > Not all Linux arches include <asm/perf_regs.h>. Checking for just > architecture (__x86__/__i386__) has turned out to be brittle, so > now we add configury. > > * configure.ac: Introduce HAVE_PERF_REGS_H. > * backends/i386_initreg_sample.c: Guard asm/perf_regs.h include. > * backends/x86_64_initreg_sample.c: Ditto. > * backends/libebl_PERF_FLAGS.h: Ditto. > * src/stacktrace.c: Clarify that eu-stacktrace configury currently > conditions the asm/perf_regs.h include on _ASM_X86_PERF_REGS_H. > --- > backends/i386_initreg_sample.c | 4 +++- > backends/libebl_PERF_FLAGS.h | 3 +-- > backends/x86_64_initreg_sample.c | 4 +++- > configure.ac | 5 +++++ > src/stacktrace.c | 4 +++- > 5 files changed, 15 insertions(+), 5 deletions(-) > > diff --git a/backends/i386_initreg_sample.c b/backends/i386_initreg_sample.c > index d7d312b0..52c81088 100644 > --- a/backends/i386_initreg_sample.c > +++ b/backends/i386_initreg_sample.c > @@ -34,7 +34,9 @@ > #include <assert.h> > #if (defined __i386__ || defined __x86_64__) && defined(__linux__) > # include <linux/perf_event.h> > -# include <asm/perf_regs.h> > +# ifdef HAVE_PERF_REGS_H > +# include <asm/perf_regs.h> > +# endif > #endif > > #define BACKEND i386_ > diff --git a/backends/libebl_PERF_FLAGS.h b/backends/libebl_PERF_FLAGS.h > index 51c20ea6..5b5a8d78 100644 > --- a/backends/libebl_PERF_FLAGS.h > +++ b/backends/libebl_PERF_FLAGS.h > @@ -33,8 +33,7 @@ > > #if defined(__linux__) > /* XXX Need to exclude __linux__ arches without perf_regs.h. */ > -#if defined(__x86_64__) || defined(__i386__) > -/* || defined(other_architecture)... */ > +#if defined HAVE_PERF_REGS_H > # include <asm/perf_regs.h> > #endif > #endif > diff --git a/backends/x86_64_initreg_sample.c > b/backends/x86_64_initreg_sample.c > index 200a94a1..c115fedf 100644 > --- a/backends/x86_64_initreg_sample.c > +++ b/backends/x86_64_initreg_sample.c > @@ -34,7 +34,9 @@ > #include <assert.h> > #if defined(__x86_64__) && defined(__linux__) > # include <linux/perf_event.h> > -# include <asm/perf_regs.h> > +# ifdef HAVE_PERF_REGS_H > +# include <asm/perf_regs.h> > +# endif > #endif > > #define BACKEND x86_64_ > diff --git a/configure.ac b/configure.ac > index 58e58af2..ec40c7a3 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -971,6 +971,11 @@ AC_ARG_ENABLE(debuginfod-ima-cert-path, > AC_SUBST(DEBUGINFOD_IMA_CERT_PATH, $default_debuginfod_ima_cert_path) > AC_CONFIG_FILES([config/profile.sh config/profile.csh config/profile.fish]) > > +# check for asm/perf_regs.h, as it's completely absent on some architectures > +AH_TEMPLATE([HAVE_PERF_REGS_H], [Define to 1 if `asm/perf-regs.h` is > provided by the system, 0 otherwise.])
"perf-regs.h" should be "perf_regs.h". Also "...0 otherwise" isn't technically correct since if asm/perf_regs.h isn't provided, then HAVE_PERF_REGS_H isn't defined. Otherwise this patch LGTM. IIRC this patch was motivated by a build error on Debian. Were you able to verify that this patch fixes the error in that build environment? Aaron > +AC_CHECK_HEADER(asm/perf_regs.h, > + [AC_DEFINE(HAVE_PERF_REGS_H)],[]) > + > # XXX Currently, eu-stacktrace can only work with sysprof/x86, hence: > AC_ARG_ENABLE([stacktrace],AS_HELP_STRING([--enable-stacktrace], [Enable > eu-stacktrace])) > # check for x86, or more precisely _ASM_X86_PERF_REGS_H > diff --git a/src/stacktrace.c b/src/stacktrace.c > index c330e646..8f7325c5 100644 > --- a/src/stacktrace.c > +++ b/src/stacktrace.c > @@ -83,7 +83,9 @@ > > #include <linux/perf_event.h> > > -/* TODO: Need to generalize the code beyond x86 architectures. */ > +/* TODO: Need to generalize the code beyond x86 architectures. > + eu-stacktrace currently disabled by configury > + unless _ASM_X86_PERF_REGS_H is detected. */ > #include <asm/perf_regs.h> > #ifndef _ASM_X86_PERF_REGS_H > #error "eu-stacktrace is currently limited to x86 architectures" > -- > 2.51.1 >
