Le sam. 12 août 2023, 00:22, Glenn Washburn <developm...@efficientek.com> a
écrit :

> The backtrace module is written assuming that the frame pointer is in %ebp.
> By default, -Os optimization level is used, which enables the gcc option
> -fomit-frame-pointer. This break the backtrace functionality. Enabling
> this may cause an unnoticeable performance cost and virtually no size
> increase.
>
Do you have numbers on core.img size on i386-pc?

>
> Signed-off-by: Glenn Washburn <developm...@efficientek.com>
> ---
> The backtrace command on x86_64 and probably i386 is broken due to the
> above rationale. I've not verified, but presumably the backtrace that used
> to be printed for an unhandled CPU exception is also broken. Do any distros
> handle this?
>
> Considering that (to my knowledge) no one has complained about this in the
> over 13 years that -Os has been used, has this code actually been useful?
> Is it worth disabling -fomit-frame-pointer? Though, I don't see much
> downside
> right now in disabling it. Alternatively, we could disable/remove the
> backtrace code. I think it would be nice to keep it and have it working.
>
> Nowadays, presumably QEMU makes the GDB stub rarely used as I imagine most
> are developing in a virual machine. Also, the GDB stub does not work in
> UEFI
> so if anyone is using it on real hardware, they are doing so on pretty old
> machines. The lack of a GDB stub does not seem to be a pain point because
> no one has got it working on UEFI.
>
> This patch gets the backtrace command working on x86_64-efi in QEMU for me.
> However, it hangs when run on my laptop. Not sure what's going on there.
>
> Also, I've noticed that recents builds have caused a big slow down in the
> already slow LUKS unlock code on real hardware, but not noticeable in QEMU.
> It seems to occur with and without this patch. I mention this if others
> would be interested in testing this.
>
> Glenn
> ---
>  configure.ac | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/configure.ac b/configure.ac
> index 278e5a81f805..545cf69c272a 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1020,6 +1020,19 @@ if test x"$target_cpu" = xsparc64 ; then
>    TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax"
>  fi
>
> +# The backtrace module relies on frame pointers and the default
> optimization
> +# level, -Os, omits them. Make sure they are enabled.
> +AC_CACHE_CHECK([whether -fno-omit-frame-pointer works],
> [grub_cv_cc_fno_omit_frame_pointer], [
> +  CFLAGS="$TARGET_CFLAGS -fno-omit-frame-pointer"
> +  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
> +      [grub_cv_cc_fno_omit_frame_pointer=yes],
> +      [grub_cv_cc_fno_omit_frame_pointer=no])
> +])
> +
> +if test "x$grub_cv_cc_fno_omit_frame_pointer" = xyes; then
> +  TARGET_CFLAGS="$TARGET_CFLAGS -fno-omit-frame-pointer"
> +fi
> +
>  # By default, GCC 4.4 generates .eh_frame sections containing unwind
>  # information in some cases where it previously did not. GRUB doesn't need
>  # these and they just use up vital space. Restore the old compiler
> --
> 2.34.1
>
>
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to