[PATCH] gas: support --gsframe=no

Sam James sam@gentoo.org
Fri Jul 4 01:40:35 GMT 2025


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.

	PR gas/33125
	* gas/as.c (parse_args): Accept --gsframe=no, --gsframe=yes.
---
If needed, I can change this to --no-gsframe, but this seems to be
the more common form (and I prefer this one, mildly).

OK?

 gas/as.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/gas/as.c b/gas/as.c
index a37d59d4649..72224a2adec 100644
--- a/gas/as.c
+++ b/gas/as.c
@@ -311,7 +311,9 @@ 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] "));
+  fprintf (stream, _("\
+                          generate SFrame stack trace information\n"));
 # if defined (TARGET_USE_SCFI) && defined (TARGET_USE_GINSN)
   fprintf (stream, _("\
   --scfi=experimental     Synthesize DWARF CFI for hand-written asm\n\
@@ -538,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
@@ -1032,7 +1034,15 @@ 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 */

base-commit: dfce0d9e38a8b4f9bfc12bf457d3181625581f86
-- 
2.50.0



More information about the Binutils mailing list