@@ -138,6 +138,9 @@ SWIFT_RUNTIME_STDLIB_INTERNAL BacktraceSettings _swift_backtraceSettings = {
138
138
// format
139
139
OutputFormat::Text,
140
140
141
+ // suppressWarnings
142
+ false ,
143
+
141
144
// swiftBacktracePath
142
145
NULL ,
143
146
@@ -336,9 +339,11 @@ BacktraceInitializer::BacktraceInitializer() {
336
339
337
340
if (!_swift_backtraceSettings.swiftBacktracePath ) {
338
341
if (_swift_backtraceSettings.enabled == OnOffTty::On) {
339
- swift::warning (0 ,
340
- " swift runtime: unable to locate swift-backtrace; "
341
- " disabling backtracing.\n " );
342
+ if (!_swift_backtraceSettings.suppressWarnings ) {
343
+ swift::warning (0 ,
344
+ " swift runtime: unable to locate swift-backtrace; "
345
+ " disabling backtracing.\n " );
346
+ }
342
347
}
343
348
_swift_backtraceSettings.enabled = OnOffTty::Off;
344
349
}
@@ -357,9 +362,11 @@ BacktraceInitializer::BacktraceInitializer() {
357
362
358
363
#if !SWIFT_BACKTRACE_ON_CRASH_SUPPORTED
359
364
if (_swift_backtraceSettings.enabled != OnOffTty::Off) {
360
- swift::warning (0 ,
361
- " swift runtime: backtrace-on-crash is not supported on "
362
- " this platform.\n " );
365
+ if (!_swift_backtraceSettings.suppressWarnings ) {
366
+ swift::warning (0 ,
367
+ " swift runtime: backtrace-on-crash is not supported on "
368
+ " this platform.\n " );
369
+ }
363
370
_swift_backtraceSettings.enabled = OnOffTty::Off;
364
371
}
365
372
#else
@@ -374,9 +381,11 @@ BacktraceInitializer::BacktraceInitializer() {
374
381
// /path/to/some/setuid/binary
375
382
//
376
383
// i.e. when you're trying to force matters.
377
- swift::warning (0 ,
378
- " swift runtime: backtrace-on-crash is not supported for "
379
- " privileged executables.\n " );
384
+ if (!_swift_backtraceSettings.suppressWarnings ) {
385
+ swift::warning (0 ,
386
+ " swift runtime: backtrace-on-crash is not supported for "
387
+ " privileged executables.\n " );
388
+ }
380
389
_swift_backtraceSettings.enabled = OnOffTty::Off;
381
390
}
382
391
@@ -460,10 +469,12 @@ BacktraceInitializer::BacktraceInitializer() {
460
469
swiftBacktracePath,
461
470
SWIFT_BACKTRACE_BUFFER_SIZE);
462
471
if (!len) {
463
- swift::warning (0 ,
464
- " swift runtime: unable to convert path to "
465
- " swift-backtrace: %08lx; disabling backtracing.\n " ,
466
- ::GetLastError ());
472
+ if (!_swift_backtraceSettings.suppressWarnings ) {
473
+ swift::warning (0 ,
474
+ " swift runtime: unable to convert path to "
475
+ " swift-backtrace: %08lx; disabling backtracing.\n " ,
476
+ ::GetLastError ());
477
+ }
467
478
_swift_backtraceSettings.enabled = OnOffTty::Off;
468
479
}
469
480
#endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
@@ -473,9 +484,11 @@ BacktraceInitializer::BacktraceInitializer() {
473
484
#if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
474
485
size_t len = strlen (_swift_backtraceSettings.swiftBacktracePath );
475
486
if (len > SWIFT_BACKTRACE_BUFFER_SIZE - 1 ) {
476
- swift::warning (0 ,
477
- " swift runtime: path to swift-backtrace is too long; "
478
- " disabling backtracing.\n " );
487
+ if (!_swift_backtraceSettings.suppressWarnings ) {
488
+ swift::warning (0 ,
489
+ " swift runtime: path to swift-backtrace is too long; "
490
+ " disabling backtracing.\n " );
491
+ }
479
492
_swift_backtraceSettings.enabled = OnOffTty::Off;
480
493
} else {
481
494
memcpy (swiftBacktracePath,
@@ -492,19 +505,23 @@ BacktraceInitializer::BacktraceInitializer() {
492
505
#if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
493
506
if (!writeProtectMemory (swiftBacktracePath,
494
507
sizeof (swiftBacktracePath))) {
508
+ if (!_swift_backtraceSettings.suppressWarnings ) {
495
509
swift::warning (0 ,
496
510
" swift runtime: unable to protect path to "
497
511
" swift-backtrace at %p; disabling backtracing.\n " ,
498
512
swiftBacktracePath);
499
- _swift_backtraceSettings.enabled = OnOffTty::Off;
513
+ }
514
+ _swift_backtraceSettings.enabled = OnOffTty::Off;
500
515
}
501
516
#endif
502
517
if (!writeProtectMemory (swiftBacktraceEnv,
503
518
sizeof (swiftBacktraceEnv))) {
504
- swift::warning (0 ,
505
- " swift runtime: unable to protect environment "
506
- " for swift-backtrace at %p; disabling backtracing.\n " ,
507
- swiftBacktraceEnv);
519
+ if (!_swift_backtraceSettings.suppressWarnings ) {
520
+ swift::warning (0 ,
521
+ " swift runtime: unable to protect environment "
522
+ " for swift-backtrace at %p; disabling backtracing.\n " ,
523
+ swiftBacktraceEnv);
524
+ }
508
525
_swift_backtraceSettings.enabled = OnOffTty::Off;
509
526
}
510
527
#endif
@@ -515,9 +532,11 @@ BacktraceInitializer::BacktraceInitializer() {
515
532
if (_swift_backtraceSettings.enabled == OnOffTty::On) {
516
533
ErrorCode err = _swift_installCrashHandler ();
517
534
if (err != 0 ) {
518
- swift::warning (0 ,
519
- " swift runtime: crash handler installation failed; "
520
- " disabling backtracing.\n " );
535
+ if (!_swift_backtraceSettings.suppressWarnings ) {
536
+ swift::warning (0 ,
537
+ " swift runtime: crash handler installation failed; "
538
+ " disabling backtracing.\n " );
539
+ }
521
540
}
522
541
}
523
542
#endif
@@ -634,12 +653,14 @@ _swift_processBacktracingSetting(llvm::StringRef key,
634
653
_swift_backtraceSettings.timeout = count * 3600 ;
635
654
636
655
if (_swift_backtraceSettings.timeout < 0 ) {
637
- swift::warning (0 ,
638
- " swift runtime: bad backtracing timeout %ds\n " ,
639
- _swift_backtraceSettings.timeout );
656
+ if (!_swift_backtraceSettings.suppressWarnings ) {
657
+ swift::warning (0 ,
658
+ " swift runtime: bad backtracing timeout %ds\n " ,
659
+ _swift_backtraceSettings.timeout );
660
+ }
640
661
_swift_backtraceSettings.timeout = 0 ;
641
662
}
642
- } else {
663
+ } else if (!_swift_backtraceSettings. suppressWarnings ) {
643
664
swift::warning (0 ,
644
665
" swift runtime: bad backtracing timeout '%.*s'\n " ,
645
666
static_cast <int >(value.size ()), value.data ());
@@ -651,7 +672,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
651
672
_swift_backtraceSettings.algorithm = UnwindAlgorithm::Fast;
652
673
else if (value.equals_insensitive (" precise" ))
653
674
_swift_backtraceSettings.algorithm = UnwindAlgorithm::Precise;
654
- else {
675
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
655
676
swift::warning (0 ,
656
677
" swift runtime: unknown unwind algorithm '%.*s'\n " ,
657
678
static_cast <int >(value.size ()), value.data ());
@@ -668,7 +689,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
668
689
_swift_backtraceSettings.preset = Preset::Medium;
669
690
else if (value.equals_insensitive (" full" ))
670
691
_swift_backtraceSettings.preset = Preset::Full;
671
- else {
692
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
672
693
swift::warning (0 ,
673
694
" swift runtime: unknown backtracing preset '%.*s'\n " ,
674
695
static_cast <int >(value.size ()), value.data ());
@@ -678,7 +699,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
678
699
_swift_backtraceSettings.threads = ThreadsToShow::All;
679
700
else if (value.equals_insensitive (" crashed" ))
680
701
_swift_backtraceSettings.threads = ThreadsToShow::Crashed;
681
- else {
702
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
682
703
swift::warning (0 ,
683
704
" swift runtime: unknown threads setting '%.*s'\n " ,
684
705
static_cast <int >(value.size ()), value.data ());
@@ -690,7 +711,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
690
711
_swift_backtraceSettings.registers = RegistersToShow::All;
691
712
else if (value.equals_insensitive (" crashed" ))
692
713
_swift_backtraceSettings.registers = RegistersToShow::Crashed;
693
- else {
714
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
694
715
swift::warning (0 ,
695
716
" swift runtime: unknown registers setting '%.*s'\n " ,
696
717
static_cast <int >(value.size ()), value.data ());
@@ -702,7 +723,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
702
723
_swift_backtraceSettings.images = ImagesToShow::All;
703
724
else if (value.equals_insensitive (" mentioned" ))
704
725
_swift_backtraceSettings.images = ImagesToShow::Mentioned;
705
- else {
726
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
706
727
swift::warning (0 ,
707
728
" swift runtime: unknown registers setting '%.*s'\n " ,
708
729
static_cast <int >(value.size ()), value.data ());
@@ -714,7 +735,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
714
735
_swift_backtraceSettings.limit = -1 ;
715
736
else if (!value.getAsInteger (0 , limit) && limit > 0 )
716
737
_swift_backtraceSettings.limit = limit;
717
- else {
738
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
718
739
swift::warning (0 ,
719
740
" swift runtime: bad backtrace limit '%.*s'\n " ,
720
741
static_cast <int >(value.size ()), value.data ());
@@ -724,7 +745,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
724
745
// (If you think the next line is wrong, see above.)
725
746
if (!value.getAsInteger (0 , top) && top >= 0 )
726
747
_swift_backtraceSettings.top = top;
727
- else {
748
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
728
749
swift::warning (0 ,
729
750
" swift runtime: bad backtrace top count '%.*s'\n " ,
730
751
static_cast <int >(value.size ()), value.data ());
@@ -771,7 +792,20 @@ _swift_processBacktracingSetting(llvm::StringRef key,
771
792
std::free (const_cast <char *>(_swift_backtraceSettings.swiftBacktracePath ));
772
793
_swift_backtraceSettings.swiftBacktracePath = path;
773
794
#endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
774
- } else {
795
+ } else if (key.equals_insensitive (" warnings" )) {
796
+ if (value.equals_insensitive (" suppressed" )
797
+ || value.equals_insensitive (" disabled" )
798
+ || value.equals_insensitive (" off" ))
799
+ _swift_backtraceSettings.suppressWarnings = true ;
800
+ else if (value.equals_insensitive (" enabled" )
801
+ || value.equals_insensitive (" on" ))
802
+ _swift_backtraceSettings.suppressWarnings = false ;
803
+ else if (!_swift_backtraceSettings.suppressWarnings ) {
804
+ swift::warning (0 ,
805
+ " swift runtime: unknown warnings setting '%.*s'\n " ,
806
+ static_cast <int >(value.size ()), value.data ());
807
+ }
808
+ } else if (!_swift_backtraceSettings.suppressWarnings ) {
775
809
swift::warning (0 ,
776
810
" swift runtime: unknown backtracing setting '%.*s'\n " ,
777
811
static_cast <int >(key.size ()), key.data ());
0 commit comments