[PATCH v3 1/2] configure: Disable SFrame backtracing
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Mon Jul 21 23:28:09 GMT 2025
On 17/07/25 10:43, claudiu.zissulescu-ianculescu@oracle.com wrote:
> From: Claudiu Zissulescu <claudiu.zissulescu-ianculescu@oracle.com>
>
> The SFrame backtracing is experimental, disable it by default. SFrame
> backtracing can be enabled using "--enable-sframe" while configuring
> glibc.
>
> Signed-off-by: Claudiu Zissulescu <claudiu.zissulescu-ianculescu@oracle.com>
We discussed this series on weekly call and I found out a lot of small issues
with this approach and with current SFrame, mostly on glibc build support and
internal details. I will send a newer version that replaces the patch to
disable SFrame by default and keep the second patch.
> ---
> INSTALL | 9 +++++----
> NEWS | 7 ++++---
> config.make.in | 1 -
> configure | 19 ++++++++++---------
> configure.ac | 16 ++++++++--------
> manual/install.texi | 9 +++++----
> 6 files changed, 32 insertions(+), 29 deletions(-)
>
> diff --git a/INSTALL b/INSTALL
> index cf60e1a380..7d55d87c6c 100644
> --- a/INSTALL
> +++ b/INSTALL
> @@ -291,10 +291,11 @@ passed to 'configure'. For example:
>
> Default is to disable fortification.
>
> -'--disable-sframe'
> - By default, the GNU C Library is built with '-Wa,--gsframe' if the
> - current GNU 'binutils' supports it. You may want to use this
> - option if you don't plan to use SFrame stack tracer.
> +'--enable-sframe'
> + Experimental option supported by selected architectures (e.g.
> + x86_64 and AArch64), the GNU C Library is built with
> + '-Wa,--gsframe' if the current GNU 'binutils' supports it. You may
> + want to use this option if you plan to use SFrame stack tracer.
>
> To build the library and related programs, type 'make'. This will
> produce a lot of output, some of which may look like errors from 'make'
> diff --git a/NEWS b/NEWS
> index 9a92dd098a..0ef13600d5 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -31,9 +31,10 @@ Major new features:
> glibc.malloc.tcache_max to a larger value (max 4194304).
> Tcache is also significantly faster for small sizes.
>
> -* New stack tracer using SFrame. Introducing --disable-sframe a new
> - configuration flag. Building glibc using sframe is automatically
> - enabled when the build system supports it.
> +* A new stack tracer based on SFrame format has been added for x86_64
> + and AArch64 architectures. It requires Binutils version >= 2.45. To
> + enable compilation with SFrame support in glibc, use "--enable-sframe"
> + configuration option.
>
> Deprecated and removed features, and other changes affecting compatibility:
>
> diff --git a/config.make.in b/config.make.in
> index 382e003d87..59897eaec2 100644
> --- a/config.make.in
> +++ b/config.make.in
> @@ -51,7 +51,6 @@ c++-cstdlib-header = @CXX_CSTDLIB_HEADER@
> c++-cmath-header = @CXX_CMATH_HEADER@
> c++-bits-std_abs-h = @CXX_BITS_STD_ABS_H@
> enable-werror = @enable_werror@
> -enable-gsframe = @enable_gsframe@
>
> have-z-execstack = @libc_cv_z_execstack@
> have-no-error-execstack = @libc_cv_no_error_execstack@
> diff --git a/configure b/configure
> index 6595d6be54..0afb8a19f2 100755
> --- a/configure
> +++ b/configure
> @@ -620,7 +620,6 @@ DEFINES
> static_nss
> profile
> libc_cv_multidir
> -enable_gsframe
> READELF_SFRAME
> libc_cv_test_x86_have_amx_tile
> test_enable_cet
> @@ -1510,8 +1509,8 @@ Optional Features:
> Use -D_FORTIFY_SOURCE=[1|2|3] to control code
> hardening, defaults to highest possible value
> supported by the build compiler.
> - --disable-sframe Disable building with SFrame stack trace information
> - [default=yes if GNU as is 2.41 or older]
> + --enable-sframe Enable building with SFrame stack trace information
> + [default=no]
>
> Optional Packages:
> --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
> @@ -4895,7 +4894,7 @@ if test ${enable_sframe+y}
> then :
> enableval=$enable_sframe; use_sframe=$enableval
> else case e in #(
> - e) use_sframe=notset ;;
> + e) use_sframe=no ;;
> esac
> fi
>
> @@ -9416,7 +9415,7 @@ printf %s "checking version of $READELF_SFRAME... " >&6; }
> ac_prog_version=`$READELF_SFRAME --version 2>&1 | sed -n 's/^.*GNU readelf.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
> case $ac_prog_version in
> '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
> - 2.4[1-9]*|2.[5-9][0-9]*|[3-9].*|[1-9][0-9][0-9]*)
> + 2.4[5-9]*|2.[5-9][0-9]*|[3-9].*|[1-9][0-9][0-9]*)
> ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
> *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
>
> @@ -9459,16 +9458,18 @@ fi
>
> # Prevent enabling sframe on non-supporting toolchains
> enable_gsframe=no
> -if test $use_sframe$libc_cv_default_sframe = yesyes || \
> - test $use_sframe$libc_cv_default_sframe = notsetyes; then
> - enable_gsframe=yes
> +if test $use_sframe$libc_cv_default_sframe = yesyes; then
> + enable_gsframe=yes
> + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ...and using SFrame for this build" >&5
> +printf "%s\n" "...and using SFrame for this build" >&6; }
> elif test $use_sframe = yes; then
> { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5
> printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;}
> as_fn_error $? "toolchain doesn't support SFrame v2 or higher
> See 'config.log' for more details" "$LINENO" 5; }
> fi
> -
> +config_vars="$config_vars
> +enable-gsframe = $enable_gsframe"
>
> # Set the `multidir' variable by grabbing the variable from the compiler.
> # We do it once and save the result in a generated makefile.
> diff --git a/configure.ac b/configure.ac
> index 25b80e34e4..97ec2ace93 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -441,10 +441,10 @@ case "$enable_fortify_source" in
> esac
>
> AC_ARG_ENABLE([sframe],
> - [AS_HELP_STRING([--disable-sframe],
> - [Disable building with SFrame stack trace information @<:@default=yes if GNU as is 2.41 or older@:>@])],
> + [AS_HELP_STRING([--enable-sframe],
> + [Enable building with SFrame stack trace information @<:@default=no@:>@])],
> [use_sframe=$enableval],
> - [use_sframe=notset])
> + [use_sframe=no])
>
> # We keep the original values in `$config_*' and never modify them, so we
> # can write them unchanged into config.make. Everything else uses
> @@ -2126,7 +2126,7 @@ libc_cv_readelf_version_ok=yes
> # SFrame is supported from 2.41 or higher
> AC_CHECK_PROG_VER(READELF_SFRAME, $READELF, --version,
> [GNU readelf.* \([0-9][0-9]*\.[0-9.]*\)],
> - [2.4[1-9]*|2.[5-9][0-9]*|[3-9].*|[1-9][0-9][0-9]*],
> + [2.4[5-9]*|2.[5-9][0-9]*|[3-9].*|[1-9][0-9][0-9]*],
> libc_cv_readelf_version_ok=no)
>
> # Check the current toolchain for SFrame support
> @@ -2151,13 +2151,13 @@ fi
>
> # Prevent enabling sframe on non-supporting toolchains
> enable_gsframe=no
> -if test $use_sframe$libc_cv_default_sframe = yesyes || \
> - test $use_sframe$libc_cv_default_sframe = notsetyes; then
> - enable_gsframe=yes
> +if test $use_sframe$libc_cv_default_sframe = yesyes; then
> + enable_gsframe=yes
> + AC_MSG_RESULT(...and using SFrame for this build)
> elif test $use_sframe = yes; then
> AC_MSG_FAILURE([toolchain doesn't support SFrame v2 or higher])
> fi
> -AC_SUBST(enable_gsframe)
> +LIBC_CONFIG_VAR([enable-gsframe], [$enable_gsframe])
>
> # Set the `multidir' variable by grabbing the variable from the compiler.
> # We do it once and save the result in a generated makefile.
> diff --git a/manual/install.texi b/manual/install.texi
> index 0c8d448362..187f4314cb 100644
> --- a/manual/install.texi
> +++ b/manual/install.texi
> @@ -321,10 +321,11 @@ the build compiler.
>
> Default is to disable fortification.
>
> -@item --disable-sframe
> -By default, the GNU C Library is built with @option{-Wa,--gsframe} if
> -the current GNU @code{binutils} supports it. You may want to use this
> -option if you don't plan to use SFrame stack tracer.
> +@item --enable-sframe
> +Experimental option supported by selected architectures (e.g. x86_64
> +and AArch64), @theglibc{} is built with @option{-Wa,--gsframe} if the
> +current GNU @code{binutils} supports it. You may want to use this
> +option if you plan to use SFrame stack tracer.
> @end table
>
> To build the library and related programs, type @code{make}. This will
More information about the Libc-alpha
mailing list