@@ -135,6 +135,9 @@ SWIFT_RUNTIME_STDLIB_INTERNAL BacktraceSettings _swift_backtraceSettings = {
135135 // symbolicate
136136 Symbolication::Full,
137137
138+ // suppressWarnings
139+ false ,
140+
138141 // swiftBacktracePath
139142 NULL ,
140143
@@ -333,9 +336,11 @@ BacktraceInitializer::BacktraceInitializer() {
333336
334337 if (!_swift_backtraceSettings.swiftBacktracePath ) {
335338 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+ }
339344 }
340345 _swift_backtraceSettings.enabled = OnOffTty::Off;
341346 }
@@ -354,9 +359,11 @@ BacktraceInitializer::BacktraceInitializer() {
354359
355360#if !SWIFT_BACKTRACE_ON_CRASH_SUPPORTED
356361 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+ }
360367 _swift_backtraceSettings.enabled = OnOffTty::Off;
361368 }
362369#else
@@ -371,9 +378,11 @@ BacktraceInitializer::BacktraceInitializer() {
371378 // /path/to/some/setuid/binary
372379 //
373380 // 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+ }
377386 _swift_backtraceSettings.enabled = OnOffTty::Off;
378387 }
379388
@@ -457,10 +466,12 @@ BacktraceInitializer::BacktraceInitializer() {
457466 swiftBacktracePath,
458467 SWIFT_BACKTRACE_BUFFER_SIZE);
459468 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+ }
464475 _swift_backtraceSettings.enabled = OnOffTty::Off;
465476 }
466477#endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
@@ -470,9 +481,11 @@ BacktraceInitializer::BacktraceInitializer() {
470481#if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
471482 size_t len = strlen (_swift_backtraceSettings.swiftBacktracePath );
472483 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+ }
476489 _swift_backtraceSettings.enabled = OnOffTty::Off;
477490 } else {
478491 memcpy (swiftBacktracePath,
@@ -489,19 +502,23 @@ BacktraceInitializer::BacktraceInitializer() {
489502#if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
490503 if (!writeProtectMemory (swiftBacktracePath,
491504 sizeof (swiftBacktracePath))) {
505+ if (!_swift_backtraceSettings.suppressWarnings ) {
492506 swift::warning (0 ,
493507 " swift runtime: unable to protect path to "
494508 " swift-backtrace at %p; disabling backtracing.\n " ,
495509 swiftBacktracePath);
496- _swift_backtraceSettings.enabled = OnOffTty::Off;
510+ }
511+ _swift_backtraceSettings.enabled = OnOffTty::Off;
497512 }
498513#endif
499514 if (!writeProtectMemory (swiftBacktraceEnv,
500515 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+ }
505522 _swift_backtraceSettings.enabled = OnOffTty::Off;
506523 }
507524#endif
@@ -512,9 +529,11 @@ BacktraceInitializer::BacktraceInitializer() {
512529 if (_swift_backtraceSettings.enabled == OnOffTty::On) {
513530 ErrorCode err = _swift_installCrashHandler ();
514531 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+ }
518537 }
519538 }
520539#endif
@@ -631,12 +650,14 @@ _swift_processBacktracingSetting(llvm::StringRef key,
631650 _swift_backtraceSettings.timeout = count * 3600 ;
632651
633652 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+ }
637658 _swift_backtraceSettings.timeout = 0 ;
638659 }
639- } else {
660+ } else if (!_swift_backtraceSettings. suppressWarnings ) {
640661 swift::warning (0 ,
641662 " swift runtime: bad backtracing timeout '%.*s'\n " ,
642663 static_cast <int >(value.size ()), value.data ());
@@ -648,7 +669,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
648669 _swift_backtraceSettings.algorithm = UnwindAlgorithm::Fast;
649670 else if (value.equals_insensitive (" precise" ))
650671 _swift_backtraceSettings.algorithm = UnwindAlgorithm::Precise;
651- else {
672+ else if (!_swift_backtraceSettings. suppressWarnings ) {
652673 swift::warning (0 ,
653674 " swift runtime: unknown unwind algorithm '%.*s'\n " ,
654675 static_cast <int >(value.size ()), value.data ());
@@ -665,7 +686,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
665686 _swift_backtraceSettings.preset = Preset::Medium;
666687 else if (value.equals_insensitive (" full" ))
667688 _swift_backtraceSettings.preset = Preset::Full;
668- else {
689+ else if (!_swift_backtraceSettings. suppressWarnings ) {
669690 swift::warning (0 ,
670691 " swift runtime: unknown backtracing preset '%.*s'\n " ,
671692 static_cast <int >(value.size ()), value.data ());
@@ -675,7 +696,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
675696 _swift_backtraceSettings.threads = ThreadsToShow::All;
676697 else if (value.equals_insensitive (" crashed" ))
677698 _swift_backtraceSettings.threads = ThreadsToShow::Crashed;
678- else {
699+ else if (!_swift_backtraceSettings. suppressWarnings ) {
679700 swift::warning (0 ,
680701 " swift runtime: unknown threads setting '%.*s'\n " ,
681702 static_cast <int >(value.size ()), value.data ());
@@ -687,7 +708,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
687708 _swift_backtraceSettings.registers = RegistersToShow::All;
688709 else if (value.equals_insensitive (" crashed" ))
689710 _swift_backtraceSettings.registers = RegistersToShow::Crashed;
690- else {
711+ else if (!_swift_backtraceSettings. suppressWarnings ) {
691712 swift::warning (0 ,
692713 " swift runtime: unknown registers setting '%.*s'\n " ,
693714 static_cast <int >(value.size ()), value.data ());
@@ -699,7 +720,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
699720 _swift_backtraceSettings.images = ImagesToShow::All;
700721 else if (value.equals_insensitive (" mentioned" ))
701722 _swift_backtraceSettings.images = ImagesToShow::Mentioned;
702- else {
723+ else if (!_swift_backtraceSettings. suppressWarnings ) {
703724 swift::warning (0 ,
704725 " swift runtime: unknown registers setting '%.*s'\n " ,
705726 static_cast <int >(value.size ()), value.data ());
@@ -711,7 +732,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
711732 _swift_backtraceSettings.limit = -1 ;
712733 else if (!value.getAsInteger (0 , limit) && limit > 0 )
713734 _swift_backtraceSettings.limit = limit;
714- else {
735+ else if (!_swift_backtraceSettings. suppressWarnings ) {
715736 swift::warning (0 ,
716737 " swift runtime: bad backtrace limit '%.*s'\n " ,
717738 static_cast <int >(value.size ()), value.data ());
@@ -721,7 +742,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
721742 // (If you think the next line is wrong, see above.)
722743 if (!value.getAsInteger (0 , top) && top >= 0 )
723744 _swift_backtraceSettings.top = top;
724- else {
745+ else if (!_swift_backtraceSettings. suppressWarnings ) {
725746 swift::warning (0 ,
726747 " swift runtime: bad backtrace top count '%.*s'\n " ,
727748 static_cast <int >(value.size ()), value.data ());
@@ -758,7 +779,20 @@ _swift_processBacktracingSetting(llvm::StringRef key,
758779 std::free (const_cast <char *>(_swift_backtraceSettings.swiftBacktracePath ));
759780 _swift_backtraceSettings.swiftBacktracePath = path;
760781#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 ) {
762796 swift::warning (0 ,
763797 " swift runtime: unknown backtracing setting '%.*s'\n " ,
764798 static_cast <int >(key.size ()), key.data ());
0 commit comments