]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: support --gsframe=no
authorSam James <sam@gentoo.org>
Thu, 3 Jul 2025 11:53:22 +0000 (12:53 +0100)
committerSam James <sam@gentoo.org>
Tue, 15 Jul 2025 00:30:01 +0000 (01:30 +0100)
Being able to explicitly disable SFrames on the command line is useful,
especially when looking at a gas that enables SFrames by default. The
binutils testsuite will benefit from this as there's testcases that don't
expect their presence.

In summary:
* Nothing is passed       => no SFrames (no change from before)
* --gsframe is passed     => SFrames    (no change from before)
* --gsframe=yes is passed => SFrames    (previously rejected)
* --gsframe-no  is passed => no SFrames (previously rejected)

PR gas/33125
* gas/as.c (parse_args): Accept --gsframe=no, --gsframe=yes.

gas/as.c

index 78970ff2714fb2e85750361109eaa5b7285564a8..ce89d6f5aa7d5742564bf41eeff1728dc7f83c64 100644 (file)
--- a/gas/as.c
+++ b/gas/as.c
@@ -311,7 +311,8 @@ Options:\n\
   fprintf (stream, _("\
                           generate GNU Build notes if none are present in the input\n"));
   fprintf (stream, _("\
-  --gsframe               generate SFrame stack trace information\n"));
+  --gsframe=[no|yes]      whether to generate SFrame stack trace information\n\
+                          (default: no)\n"));
 # if defined (TARGET_USE_SCFI) && defined (TARGET_USE_GINSN)
   fprintf (stream, _("\
   --scfi=experimental     Synthesize DWARF CFI for hand-written asm\n\
@@ -539,7 +540,7 @@ parse_args (int * pargc, char *** pargv)
     ,{"elf-stt-common", required_argument, NULL, OPTION_ELF_STT_COMMON}
     ,{"sectname-subst", no_argument, NULL, OPTION_SECTNAME_SUBST}
     ,{"generate-missing-build-notes", required_argument, NULL, OPTION_ELF_BUILD_NOTES}
-    ,{"gsframe", no_argument, NULL, OPTION_SFRAME}
+    ,{"gsframe", optional_argument, NULL, OPTION_SFRAME}
 # if defined (TARGET_USE_SCFI) && defined (TARGET_USE_GINSN)
     ,{"scfi", required_argument, NULL, OPTION_SCFI}
 # endif
@@ -1038,7 +1039,17 @@ This program has absolutely no warranty.\n"));
          break;
 
        case OPTION_SFRAME:
-         flag_gen_sframe = 1;
+         if (optarg)
+           {
+           if (strcasecmp (optarg, "no") == 0)
+             flag_gen_sframe = 0;
+           else if (strcasecmp (optarg, "yes") == 0)
+             flag_gen_sframe = 1;
+           else
+             as_fatal (_("Invalid --gsframe option: `%s'"), optarg);
+           }
+         else
+           flag_gen_sframe = 1;
          break;
 
 #endif /* OBJ_ELF */