@@ -12,10 +12,9 @@ use rustc_span::edition::Edition;
1212use rustc_span:: RealFileName ;
1313use rustc_span:: SourceFileHashAlgorithm ;
1414use rustc_target:: spec:: {
15- CodeModel , LinkerFlavorCli , MergeFunctions , OnBrokenPipe , PanicStrategy , SanitizerSet , WasmCAbi ,
16- } ;
17- use rustc_target:: spec:: {
18- RelocModel , RelroLevel , SplitDebuginfo , StackProtector , TargetTriple , TlsModel ,
15+ CodeModel , FramePointer , LinkerFlavorCli , MergeFunctions , OnBrokenPipe , PanicStrategy ,
16+ RelocModel , RelroLevel , SanitizerSet , SplitDebuginfo , StackProtector , TargetTriple , TlsModel ,
17+ WasmCAbi ,
1918} ;
2019use std:: collections:: BTreeMap ;
2120use std:: hash:: { DefaultHasher , Hasher } ;
@@ -374,6 +373,7 @@ mod desc {
374373 pub const parse_opt_comma_list: & str = parse_comma_list;
375374 pub const parse_number: & str = "a number" ;
376375 pub const parse_opt_number: & str = parse_number;
376+ pub const parse_frame_pointer: & str = "one of `true`/`yes`/`on`, `false`/`no`/`off`, or (with -Zunstable-options) `non-leaf` or `always`" ;
377377 pub const parse_threads: & str = parse_number;
378378 pub const parse_time_passes_format: & str = "`text` (default) or `json`" ;
379379 pub const parse_passes: & str = "a space-separated list of passes, or `all`" ;
@@ -672,6 +672,18 @@ mod parse {
672672 }
673673 }
674674
675+ pub ( crate ) fn parse_frame_pointer ( slot : & mut FramePointer , v : Option < & str > ) -> bool {
676+ let mut yes = false ;
677+ match v {
678+ _ if parse_bool ( & mut yes, v) && yes => slot. ratchet ( FramePointer :: Always ) ,
679+ _ if parse_bool ( & mut yes, v) => slot. ratchet ( FramePointer :: MayOmit ) ,
680+ Some ( "always" ) => slot. ratchet ( FramePointer :: Always ) ,
681+ Some ( "non-leaf" ) => slot. ratchet ( FramePointer :: NonLeaf ) ,
682+ _ => return false ,
683+ } ;
684+ true
685+ }
686+
675687 pub ( crate ) fn parse_passes ( slot : & mut Passes , v : Option < & str > ) -> bool {
676688 match v {
677689 Some ( "all" ) => {
@@ -1479,7 +1491,7 @@ options! {
14791491 "emit bitcode in rlibs (default: yes)" ) ,
14801492 extra_filename: String = ( String :: new( ) , parse_string, [ UNTRACKED ] ,
14811493 "extra data to put in each output filename" ) ,
1482- force_frame_pointers: Option < bool > = ( None , parse_opt_bool , [ TRACKED ] ,
1494+ force_frame_pointers: FramePointer = ( FramePointer :: MayOmit , parse_frame_pointer , [ TRACKED ] ,
14831495 "force use of the frame pointers" ) ,
14841496 #[ rustc_lint_opt_deny_field_access( "use `Session::must_emit_unwind_tables` instead of this field" ) ]
14851497 force_unwind_tables: Option <bool > = ( None , parse_opt_bool, [ TRACKED ] ,
0 commit comments