diff options
author | Sam James <sam@gentoo.org> | 2025-07-03 12:53:22 +0100 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2025-07-15 01:30:01 +0100 |
commit | 8aad677a12832885acd5be1de8f41e740b8e713d (patch) | |
tree | c282f332925fd5c3edb9cfd380f21525335c6a5d | |
parent | 62bc378b0bdbe36e6f2a947c3c3e4dabdf348f0f (diff) | |
download | gdb-master.zip gdb-master.tar.gz gdb-master.tar.bz2 |
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.
-rw-r--r-- | gas/as.c | 17 |
1 files changed, 14 insertions, 3 deletions
@@ -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 */ |