@@ -371,7 +371,8 @@ mod desc {
371371 pub const parse_list: & str = "a space-separated list of strings" ;
372372 pub const parse_list_with_polarity: & str =
373373 "a comma-separated list of strings, with elements beginning with + or -" ;
374- pub const parse_opt_comma_list: & str = "a comma-separated list of strings" ;
374+ pub const parse_comma_list: & str = "a comma-separated list of strings" ;
375+ pub const parse_opt_comma_list: & str = parse_comma_list;
375376 pub const parse_number: & str = "a number" ;
376377 pub const parse_opt_number: & str = parse_number;
377378 pub const parse_threads: & str = parse_number;
@@ -381,7 +382,7 @@ mod desc {
381382 pub const parse_opt_panic_strategy: & str = parse_panic_strategy;
382383 pub const parse_oom_strategy: & str = "either `panic` or `abort`" ;
383384 pub const parse_relro_level: & str = "one of: `full`, `partial`, or `off`" ;
384- pub const parse_sanitizers: & str = "comma separated list of sanitizers: `address`, `cfi`, `hwaddress`, `kcfi`, `kernel-address`, `leak`, `memory`, `memtag`, `safestack`, `shadow-call-stack`, or `thread`" ;
385+ pub const parse_sanitizers: & str = "comma separated list of sanitizers: `address`, `cfi`, `dataflow`, ` hwaddress`, `kcfi`, `kernel-address`, `leak`, `memory`, `memtag`, `safestack`, `shadow-call-stack`, or `thread`" ;
385386 pub const parse_sanitizer_memory_track_origins: & str = "0, 1, or 2" ;
386387 pub const parse_cfguard: & str =
387388 "either a boolean (`yes`, `no`, `on`, `off`, etc), `checks`, or `nochecks`" ;
@@ -602,6 +603,18 @@ mod parse {
602603 }
603604 }
604605
606+ pub ( crate ) fn parse_comma_list ( slot : & mut Vec < String > , v : Option < & str > ) -> bool {
607+ match v {
608+ Some ( s) => {
609+ let mut v: Vec < _ > = s. split ( ',' ) . map ( |s| s. to_string ( ) ) . collect ( ) ;
610+ v. sort_unstable ( ) ;
611+ * slot = v;
612+ true
613+ }
614+ None => false ,
615+ }
616+ }
617+
605618 pub ( crate ) fn parse_opt_comma_list ( slot : & mut Option < Vec < String > > , v : Option < & str > ) -> bool {
606619 match v {
607620 Some ( s) => {
@@ -718,6 +731,7 @@ mod parse {
718731 * slot |= match s {
719732 "address" => SanitizerSet :: ADDRESS ,
720733 "cfi" => SanitizerSet :: CFI ,
734+ "dataflow" => SanitizerSet :: DATAFLOW ,
721735 "kcfi" => SanitizerSet :: KCFI ,
722736 "kernel-address" => SanitizerSet :: KERNELADDRESS ,
723737 "leak" => SanitizerSet :: LEAK ,
@@ -1846,6 +1860,8 @@ written to standard error output)"),
18461860 "enable generalizing pointer types (default: no)" ) ,
18471861 sanitizer_cfi_normalize_integers: Option <bool > = ( None , parse_opt_bool, [ TRACKED ] ,
18481862 "enable normalizing integer types (default: no)" ) ,
1863+ sanitizer_dataflow_abilist: Vec <String > = ( Vec :: new( ) , parse_comma_list, [ TRACKED ] ,
1864+ "additional ABI list files that control how shadow parameters are passed (comma separated)" ) ,
18491865 sanitizer_memory_track_origins: usize = ( 0 , parse_sanitizer_memory_track_origins, [ TRACKED ] ,
18501866 "enable origins tracking in MemorySanitizer" ) ,
18511867 sanitizer_recover: SanitizerSet = ( SanitizerSet :: empty( ) , parse_sanitizers, [ TRACKED ] ,
0 commit comments