@@ -371,7 +371,8 @@ mod desc {
371
371
pub const parse_list: & str = "a space-separated list of strings" ;
372
372
pub const parse_list_with_polarity: & str =
373
373
"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;
375
376
pub const parse_number: & str = "a number" ;
376
377
pub const parse_opt_number: & str = parse_number;
377
378
pub const parse_threads: & str = parse_number;
@@ -381,7 +382,7 @@ mod desc {
381
382
pub const parse_opt_panic_strategy: & str = parse_panic_strategy;
382
383
pub const parse_oom_strategy: & str = "either `panic` or `abort`" ;
383
384
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`" ;
385
386
pub const parse_sanitizer_memory_track_origins: & str = "0, 1, or 2" ;
386
387
pub const parse_cfguard: & str =
387
388
"either a boolean (`yes`, `no`, `on`, `off`, etc), `checks`, or `nochecks`" ;
@@ -602,6 +603,18 @@ mod parse {
602
603
}
603
604
}
604
605
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
+
605
618
pub ( crate ) fn parse_opt_comma_list ( slot : & mut Option < Vec < String > > , v : Option < & str > ) -> bool {
606
619
match v {
607
620
Some ( s) => {
@@ -718,6 +731,7 @@ mod parse {
718
731
* slot |= match s {
719
732
"address" => SanitizerSet :: ADDRESS ,
720
733
"cfi" => SanitizerSet :: CFI ,
734
+ "dataflow" => SanitizerSet :: DATAFLOW ,
721
735
"kcfi" => SanitizerSet :: KCFI ,
722
736
"kernel-address" => SanitizerSet :: KERNELADDRESS ,
723
737
"leak" => SanitizerSet :: LEAK ,
@@ -1846,6 +1860,8 @@ written to standard error output)"),
1846
1860
"enable generalizing pointer types (default: no)" ) ,
1847
1861
sanitizer_cfi_normalize_integers: Option <bool > = ( None , parse_opt_bool, [ TRACKED ] ,
1848
1862
"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)" ) ,
1849
1865
sanitizer_memory_track_origins: usize = ( 0 , parse_sanitizer_memory_track_origins, [ TRACKED ] ,
1850
1866
"enable origins tracking in MemorySanitizer" ) ,
1851
1867
sanitizer_recover: SanitizerSet = ( SanitizerSet :: empty( ) , parse_sanitizers, [ TRACKED ] ,
0 commit comments