gas: add new command line option --gsframe
authorIndu Bhagat <indu.bhagat@oracle.com>
Tue, 15 Nov 2022 23:06:39 +0000 (15:06 -0800)
committerIndu Bhagat <indu.bhagat@oracle.com>
Tue, 15 Nov 2022 23:23:57 +0000 (15:23 -0800)
When --gsframe is specified, the assembler will generate a .sframe
section from the CFI directives in the assembly.

ChangeLog:

* gas/as.c (parse_args): Parse args and set flag_gen_sframe.
* gas/as.h: Introduce skeleton for --gsframe.
* gas/doc/as.texi: document --gsframe.

gas/as.c
gas/as.h
gas/doc/as.texi

index d42dd5394b597eef0eae5bf50675774fe77df22b..80a2cb9a418bc639a2fdb1f8bcca17f5c038704c 100644 (file)
--- a/gas/as.c
+++ b/gas/as.c
@@ -315,6 +315,8 @@ Options:\n\
 #endif
   fprintf (stream, _("\
                           generate GNU Build notes if none are present in the input\n"));
+  fprintf (stream, _("\
+  --gsframe               generate SFrame unwind info\n"));
 #endif /* OBJ_ELF */
 
   fprintf (stream, _("\
@@ -499,7 +501,8 @@ parse_args (int * pargc, char *** pargv)
       OPTION_COMPRESS_DEBUG,
       OPTION_NOCOMPRESS_DEBUG,
       OPTION_NO_PAD_SECTIONS,
-      OPTION_MULTIBYTE_HANDLING  /* = STD_BASE + 40 */
+      OPTION_MULTIBYTE_HANDLING,  /* = STD_BASE + 40 */
+      OPTION_SFRAME
     /* When you add options here, check that they do
        not collide with OPTION_MD_BASE.  See as.h.  */
     };
@@ -530,6 +533,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}
 #endif
     ,{"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL}
     ,{"gdwarf-2", no_argument, NULL, OPTION_GDWARF_2}
@@ -993,6 +997,10 @@ This program has absolutely no warranty.\n"));
                      optarg);
          break;
 
+       case OPTION_SFRAME:
+         flag_gen_sframe = 1;
+         break;
+
 #endif /* OBJ_ELF */
 
        case 'Z':
index 730e134dce67d7f9a711d63e6258e4eb5d15a5a1..1b924071938859db4ac18e299997853ca8651cd2 100644 (file)
--- a/gas/as.h
+++ b/gas/as.h
@@ -337,6 +337,9 @@ COMMON int flag_execstack;
 /* TRUE if .note.GNU-stack section with SEC_CODE should be created */
 COMMON int flag_noexecstack;
 
+/* TRUE if .sframe section should be created.  */
+COMMON int flag_gen_sframe;
+
 /* name of emitted object file */
 COMMON const char *out_file_name;
 
index a0384cf1f7771dfefe7fdf927a8d58baf92301c8..83f49c518d7c50c2a488c4d27ef96673a41ac249 100644 (file)
@@ -240,6 +240,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
  [@b{--gdwarf-<N>}] [@b{--gdwarf-sections}]
  [@b{--gdwarf-cie-version}=@var{VERSION}]
  [@b{--generate-missing-build-notes=[no|yes]}]
+ [@b{--gsframe}]
  [@b{--hash-size}=@var{N}]
  [@b{--help}] [@b{--target-help}]
  [@b{-I} @var{dir}]
@@ -847,6 +848,11 @@ These options control whether the ELF assembler should generate GNU Build
 attribute notes if none are present in the input sources.
 The default can be controlled by the @option{--enable-generate-build-notes}
 configure option.
+
+@item --gsframe
+@itemx --gsframe
+Create @var{.sframe} section from CFI directives.
+
 @end ifset
 
 @item --hash-size @var{N}