@@ -135,6 +135,9 @@ SWIFT_RUNTIME_STDLIB_INTERNAL BacktraceSettings _swift_backtraceSettings = {
135
135
// symbolicate
136
136
Symbolication::Full,
137
137
138
+ // suppressWarnings
139
+ false ,
140
+
138
141
// swiftBacktracePath
139
142
NULL ,
140
143
@@ -333,9 +336,11 @@ BacktraceInitializer::BacktraceInitializer() {
333
336
334
337
if (!_swift_backtraceSettings.swiftBacktracePath ) {
335
338
if (_swift_backtraceSettings.enabled == OnOffTty::On) {
336
- swift::warning (0 ,
337
- " swift runtime: unable to locate swift-backtrace; "
338
- " disabling backtracing.\n " );
339
+ if (!_swift_backtraceSettings.suppressWarnings ) {
340
+ swift::warning (0 ,
341
+ " swift runtime: unable to locate swift-backtrace; "
342
+ " disabling backtracing.\n " );
343
+ }
339
344
}
340
345
_swift_backtraceSettings.enabled = OnOffTty::Off;
341
346
}
@@ -354,9 +359,11 @@ BacktraceInitializer::BacktraceInitializer() {
354
359
355
360
#if !SWIFT_BACKTRACE_ON_CRASH_SUPPORTED
356
361
if (_swift_backtraceSettings.enabled != OnOffTty::Off) {
357
- swift::warning (0 ,
358
- " swift runtime: backtrace-on-crash is not supported on "
359
- " this platform.\n " );
362
+ if (!_swift_backtraceSettings.suppressWarnings ) {
363
+ swift::warning (0 ,
364
+ " swift runtime: backtrace-on-crash is not supported on "
365
+ " this platform.\n " );
366
+ }
360
367
_swift_backtraceSettings.enabled = OnOffTty::Off;
361
368
}
362
369
#else
@@ -371,9 +378,11 @@ BacktraceInitializer::BacktraceInitializer() {
371
378
// /path/to/some/setuid/binary
372
379
//
373
380
// i.e. when you're trying to force matters.
374
- swift::warning (0 ,
375
- " swift runtime: backtrace-on-crash is not supported for "
376
- " privileged executables.\n " );
381
+ if (!_swift_backtraceSettings.suppressWarnings ) {
382
+ swift::warning (0 ,
383
+ " swift runtime: backtrace-on-crash is not supported for "
384
+ " privileged executables.\n " );
385
+ }
377
386
_swift_backtraceSettings.enabled = OnOffTty::Off;
378
387
}
379
388
@@ -457,10 +466,12 @@ BacktraceInitializer::BacktraceInitializer() {
457
466
swiftBacktracePath,
458
467
SWIFT_BACKTRACE_BUFFER_SIZE);
459
468
if (!len) {
460
- swift::warning (0 ,
461
- " swift runtime: unable to convert path to "
462
- " swift-backtrace: %08lx; disabling backtracing.\n " ,
463
- ::GetLastError ());
469
+ if (!_swift_backtraceSettings.suppressWarnings ) {
470
+ swift::warning (0 ,
471
+ " swift runtime: unable to convert path to "
472
+ " swift-backtrace: %08lx; disabling backtracing.\n " ,
473
+ ::GetLastError ());
474
+ }
464
475
_swift_backtraceSettings.enabled = OnOffTty::Off;
465
476
}
466
477
#endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
@@ -470,9 +481,11 @@ BacktraceInitializer::BacktraceInitializer() {
470
481
#if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
471
482
size_t len = strlen (_swift_backtraceSettings.swiftBacktracePath );
472
483
if (len > SWIFT_BACKTRACE_BUFFER_SIZE - 1 ) {
473
- swift::warning (0 ,
474
- " swift runtime: path to swift-backtrace is too long; "
475
- " disabling backtracing.\n " );
484
+ if (!_swift_backtraceSettings.suppressWarnings ) {
485
+ swift::warning (0 ,
486
+ " swift runtime: path to swift-backtrace is too long; "
487
+ " disabling backtracing.\n " );
488
+ }
476
489
_swift_backtraceSettings.enabled = OnOffTty::Off;
477
490
} else {
478
491
memcpy (swiftBacktracePath,
@@ -489,19 +502,23 @@ BacktraceInitializer::BacktraceInitializer() {
489
502
#if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
490
503
if (!writeProtectMemory (swiftBacktracePath,
491
504
sizeof (swiftBacktracePath))) {
505
+ if (!_swift_backtraceSettings.suppressWarnings ) {
492
506
swift::warning (0 ,
493
507
" swift runtime: unable to protect path to "
494
508
" swift-backtrace at %p; disabling backtracing.\n " ,
495
509
swiftBacktracePath);
496
- _swift_backtraceSettings.enabled = OnOffTty::Off;
510
+ }
511
+ _swift_backtraceSettings.enabled = OnOffTty::Off;
497
512
}
498
513
#endif
499
514
if (!writeProtectMemory (swiftBacktraceEnv,
500
515
sizeof (swiftBacktraceEnv))) {
501
- swift::warning (0 ,
502
- " swift runtime: unable to protect environment "
503
- " for swift-backtrace at %p; disabling backtracing.\n " ,
504
- swiftBacktraceEnv);
516
+ if (!_swift_backtraceSettings.suppressWarnings ) {
517
+ swift::warning (0 ,
518
+ " swift runtime: unable to protect environment "
519
+ " for swift-backtrace at %p; disabling backtracing.\n " ,
520
+ swiftBacktraceEnv);
521
+ }
505
522
_swift_backtraceSettings.enabled = OnOffTty::Off;
506
523
}
507
524
#endif
@@ -512,9 +529,11 @@ BacktraceInitializer::BacktraceInitializer() {
512
529
if (_swift_backtraceSettings.enabled == OnOffTty::On) {
513
530
ErrorCode err = _swift_installCrashHandler ();
514
531
if (err != 0 ) {
515
- swift::warning (0 ,
516
- " swift runtime: crash handler installation failed; "
517
- " disabling backtracing.\n " );
532
+ if (!_swift_backtraceSettings.suppressWarnings ) {
533
+ swift::warning (0 ,
534
+ " swift runtime: crash handler installation failed; "
535
+ " disabling backtracing.\n " );
536
+ }
518
537
}
519
538
}
520
539
#endif
@@ -631,12 +650,14 @@ _swift_processBacktracingSetting(llvm::StringRef key,
631
650
_swift_backtraceSettings.timeout = count * 3600 ;
632
651
633
652
if (_swift_backtraceSettings.timeout < 0 ) {
634
- swift::warning (0 ,
635
- " swift runtime: bad backtracing timeout %ds\n " ,
636
- _swift_backtraceSettings.timeout );
653
+ if (!_swift_backtraceSettings.suppressWarnings ) {
654
+ swift::warning (0 ,
655
+ " swift runtime: bad backtracing timeout %ds\n " ,
656
+ _swift_backtraceSettings.timeout );
657
+ }
637
658
_swift_backtraceSettings.timeout = 0 ;
638
659
}
639
- } else {
660
+ } else if (!_swift_backtraceSettings. suppressWarnings ) {
640
661
swift::warning (0 ,
641
662
" swift runtime: bad backtracing timeout '%.*s'\n " ,
642
663
static_cast <int >(value.size ()), value.data ());
@@ -648,7 +669,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
648
669
_swift_backtraceSettings.algorithm = UnwindAlgorithm::Fast;
649
670
else if (value.equals_insensitive (" precise" ))
650
671
_swift_backtraceSettings.algorithm = UnwindAlgorithm::Precise;
651
- else {
672
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
652
673
swift::warning (0 ,
653
674
" swift runtime: unknown unwind algorithm '%.*s'\n " ,
654
675
static_cast <int >(value.size ()), value.data ());
@@ -665,7 +686,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
665
686
_swift_backtraceSettings.preset = Preset::Medium;
666
687
else if (value.equals_insensitive (" full" ))
667
688
_swift_backtraceSettings.preset = Preset::Full;
668
- else {
689
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
669
690
swift::warning (0 ,
670
691
" swift runtime: unknown backtracing preset '%.*s'\n " ,
671
692
static_cast <int >(value.size ()), value.data ());
@@ -675,7 +696,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
675
696
_swift_backtraceSettings.threads = ThreadsToShow::All;
676
697
else if (value.equals_insensitive (" crashed" ))
677
698
_swift_backtraceSettings.threads = ThreadsToShow::Crashed;
678
- else {
699
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
679
700
swift::warning (0 ,
680
701
" swift runtime: unknown threads setting '%.*s'\n " ,
681
702
static_cast <int >(value.size ()), value.data ());
@@ -687,7 +708,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
687
708
_swift_backtraceSettings.registers = RegistersToShow::All;
688
709
else if (value.equals_insensitive (" crashed" ))
689
710
_swift_backtraceSettings.registers = RegistersToShow::Crashed;
690
- else {
711
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
691
712
swift::warning (0 ,
692
713
" swift runtime: unknown registers setting '%.*s'\n " ,
693
714
static_cast <int >(value.size ()), value.data ());
@@ -699,7 +720,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
699
720
_swift_backtraceSettings.images = ImagesToShow::All;
700
721
else if (value.equals_insensitive (" mentioned" ))
701
722
_swift_backtraceSettings.images = ImagesToShow::Mentioned;
702
- else {
723
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
703
724
swift::warning (0 ,
704
725
" swift runtime: unknown registers setting '%.*s'\n " ,
705
726
static_cast <int >(value.size ()), value.data ());
@@ -711,7 +732,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
711
732
_swift_backtraceSettings.limit = -1 ;
712
733
else if (!value.getAsInteger (0 , limit) && limit > 0 )
713
734
_swift_backtraceSettings.limit = limit;
714
- else {
735
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
715
736
swift::warning (0 ,
716
737
" swift runtime: bad backtrace limit '%.*s'\n " ,
717
738
static_cast <int >(value.size ()), value.data ());
@@ -721,7 +742,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
721
742
// (If you think the next line is wrong, see above.)
722
743
if (!value.getAsInteger (0 , top) && top >= 0 )
723
744
_swift_backtraceSettings.top = top;
724
- else {
745
+ else if (!_swift_backtraceSettings. suppressWarnings ) {
725
746
swift::warning (0 ,
726
747
" swift runtime: bad backtrace top count '%.*s'\n " ,
727
748
static_cast <int >(value.size ()), value.data ());
@@ -758,7 +779,20 @@ _swift_processBacktracingSetting(llvm::StringRef key,
758
779
std::free (const_cast <char *>(_swift_backtraceSettings.swiftBacktracePath ));
759
780
_swift_backtraceSettings.swiftBacktracePath = path;
760
781
#endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
761
- } else {
782
+ } else if (key.equals_insensitive (" warnings" )) {
783
+ if (value.equals_insensitive (" suppressed" )
784
+ || value.equals_insensitive (" disabled" )
785
+ || value.equals_insensitive (" off" ))
786
+ _swift_backtraceSettings.suppressWarnings = true ;
787
+ else if (value.equals_insensitive (" enabled" )
788
+ || value.equals_insensitive (" on" ))
789
+ _swift_backtraceSettings.suppressWarnings = false ;
790
+ else if (!_swift_backtraceSettings.suppressWarnings ) {
791
+ swift::warning (0 ,
792
+ " swift runtime: unknown warnings setting '%.*s'\n " ,
793
+ static_cast <int >(value.size ()), value.data ());
794
+ }
795
+ } else if (!_swift_backtraceSettings.suppressWarnings ) {
762
796
swift::warning (0 ,
763
797
" swift runtime: unknown backtracing setting '%.*s'\n " ,
764
798
static_cast <int >(key.size ()), key.data ());
0 commit comments