@@ -138,6 +138,9 @@ SWIFT_RUNTIME_STDLIB_INTERNAL BacktraceSettings _swift_backtraceSettings = {
138138 // format
139139 OutputFormat::Text,
140140
141+ // suppressWarnings
142+ false ,
143+
141144 // swiftBacktracePath
142145 NULL ,
143146
@@ -336,9 +339,11 @@ BacktraceInitializer::BacktraceInitializer() {
336339
337340 if (!_swift_backtraceSettings.swiftBacktracePath ) {
338341 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+ }
342347 }
343348 _swift_backtraceSettings.enabled = OnOffTty::Off;
344349 }
@@ -357,9 +362,11 @@ BacktraceInitializer::BacktraceInitializer() {
357362
358363#if !SWIFT_BACKTRACE_ON_CRASH_SUPPORTED
359364 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+ }
363370 _swift_backtraceSettings.enabled = OnOffTty::Off;
364371 }
365372#else
@@ -374,9 +381,11 @@ BacktraceInitializer::BacktraceInitializer() {
374381 // /path/to/some/setuid/binary
375382 //
376383 // 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+ }
380389 _swift_backtraceSettings.enabled = OnOffTty::Off;
381390 }
382391
@@ -460,10 +469,12 @@ BacktraceInitializer::BacktraceInitializer() {
460469 swiftBacktracePath,
461470 SWIFT_BACKTRACE_BUFFER_SIZE);
462471 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+ }
467478 _swift_backtraceSettings.enabled = OnOffTty::Off;
468479 }
469480#endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
@@ -473,9 +484,11 @@ BacktraceInitializer::BacktraceInitializer() {
473484#if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
474485 size_t len = strlen (_swift_backtraceSettings.swiftBacktracePath );
475486 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+ }
479492 _swift_backtraceSettings.enabled = OnOffTty::Off;
480493 } else {
481494 memcpy (swiftBacktracePath,
@@ -492,19 +505,23 @@ BacktraceInitializer::BacktraceInitializer() {
492505#if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
493506 if (!writeProtectMemory (swiftBacktracePath,
494507 sizeof (swiftBacktracePath))) {
508+ if (!_swift_backtraceSettings.suppressWarnings ) {
495509 swift::warning (0 ,
496510 " swift runtime: unable to protect path to "
497511 " swift-backtrace at %p; disabling backtracing.\n " ,
498512 swiftBacktracePath);
499- _swift_backtraceSettings.enabled = OnOffTty::Off;
513+ }
514+ _swift_backtraceSettings.enabled = OnOffTty::Off;
500515 }
501516#endif
502517 if (!writeProtectMemory (swiftBacktraceEnv,
503518 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+ }
508525 _swift_backtraceSettings.enabled = OnOffTty::Off;
509526 }
510527#endif
@@ -515,9 +532,11 @@ BacktraceInitializer::BacktraceInitializer() {
515532 if (_swift_backtraceSettings.enabled == OnOffTty::On) {
516533 ErrorCode err = _swift_installCrashHandler ();
517534 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+ }
521540 }
522541 }
523542#endif
@@ -634,12 +653,14 @@ _swift_processBacktracingSetting(llvm::StringRef key,
634653 _swift_backtraceSettings.timeout = count * 3600 ;
635654
636655 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+ }
640661 _swift_backtraceSettings.timeout = 0 ;
641662 }
642- } else {
663+ } else if (!_swift_backtraceSettings. suppressWarnings ) {
643664 swift::warning (0 ,
644665 " swift runtime: bad backtracing timeout '%.*s'\n " ,
645666 static_cast <int >(value.size ()), value.data ());
@@ -651,7 +672,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
651672 _swift_backtraceSettings.algorithm = UnwindAlgorithm::Fast;
652673 else if (value.equals_insensitive (" precise" ))
653674 _swift_backtraceSettings.algorithm = UnwindAlgorithm::Precise;
654- else {
675+ else if (!_swift_backtraceSettings. suppressWarnings ) {
655676 swift::warning (0 ,
656677 " swift runtime: unknown unwind algorithm '%.*s'\n " ,
657678 static_cast <int >(value.size ()), value.data ());
@@ -668,7 +689,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
668689 _swift_backtraceSettings.preset = Preset::Medium;
669690 else if (value.equals_insensitive (" full" ))
670691 _swift_backtraceSettings.preset = Preset::Full;
671- else {
692+ else if (!_swift_backtraceSettings. suppressWarnings ) {
672693 swift::warning (0 ,
673694 " swift runtime: unknown backtracing preset '%.*s'\n " ,
674695 static_cast <int >(value.size ()), value.data ());
@@ -678,7 +699,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
678699 _swift_backtraceSettings.threads = ThreadsToShow::All;
679700 else if (value.equals_insensitive (" crashed" ))
680701 _swift_backtraceSettings.threads = ThreadsToShow::Crashed;
681- else {
702+ else if (!_swift_backtraceSettings. suppressWarnings ) {
682703 swift::warning (0 ,
683704 " swift runtime: unknown threads setting '%.*s'\n " ,
684705 static_cast <int >(value.size ()), value.data ());
@@ -690,7 +711,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
690711 _swift_backtraceSettings.registers = RegistersToShow::All;
691712 else if (value.equals_insensitive (" crashed" ))
692713 _swift_backtraceSettings.registers = RegistersToShow::Crashed;
693- else {
714+ else if (!_swift_backtraceSettings. suppressWarnings ) {
694715 swift::warning (0 ,
695716 " swift runtime: unknown registers setting '%.*s'\n " ,
696717 static_cast <int >(value.size ()), value.data ());
@@ -702,7 +723,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
702723 _swift_backtraceSettings.images = ImagesToShow::All;
703724 else if (value.equals_insensitive (" mentioned" ))
704725 _swift_backtraceSettings.images = ImagesToShow::Mentioned;
705- else {
726+ else if (!_swift_backtraceSettings. suppressWarnings ) {
706727 swift::warning (0 ,
707728 " swift runtime: unknown registers setting '%.*s'\n " ,
708729 static_cast <int >(value.size ()), value.data ());
@@ -714,7 +735,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
714735 _swift_backtraceSettings.limit = -1 ;
715736 else if (!value.getAsInteger (0 , limit) && limit > 0 )
716737 _swift_backtraceSettings.limit = limit;
717- else {
738+ else if (!_swift_backtraceSettings. suppressWarnings ) {
718739 swift::warning (0 ,
719740 " swift runtime: bad backtrace limit '%.*s'\n " ,
720741 static_cast <int >(value.size ()), value.data ());
@@ -724,7 +745,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
724745 // (If you think the next line is wrong, see above.)
725746 if (!value.getAsInteger (0 , top) && top >= 0 )
726747 _swift_backtraceSettings.top = top;
727- else {
748+ else if (!_swift_backtraceSettings. suppressWarnings ) {
728749 swift::warning (0 ,
729750 " swift runtime: bad backtrace top count '%.*s'\n " ,
730751 static_cast <int >(value.size ()), value.data ());
@@ -771,7 +792,20 @@ _swift_processBacktracingSetting(llvm::StringRef key,
771792 std::free (const_cast <char *>(_swift_backtraceSettings.swiftBacktracePath ));
772793 _swift_backtraceSettings.swiftBacktracePath = path;
773794#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 ) {
775809 swift::warning (0 ,
776810 " swift runtime: unknown backtracing setting '%.*s'\n " ,
777811 static_cast <int >(key.size ()), key.data ());
0 commit comments