Skip to content

Commit

Permalink
Merge pull request #66422 from al45tair/eng/PR-110371557-5.9
Browse files Browse the repository at this point in the history
[Backtracing] Use stderr by default unless interactive.
  • Loading branch information
al45tair committed Jun 8, 2023
2 parents 2509833 + a90b05c commit a99868f
Show file tree
Hide file tree
Showing 10 changed files with 40 additions and 17 deletions.
1 change: 1 addition & 0 deletions include/swift/Runtime/Backtrace.h
Expand Up @@ -109,6 +109,7 @@ enum class SanitizePaths {
};

enum class OutputTo {
Auto = -1,
Stdout = 0,
Stderr = 2,
};
Expand Down
13 changes: 11 additions & 2 deletions stdlib/public/runtime/Backtrace.cpp
Expand Up @@ -123,7 +123,7 @@ SWIFT_RUNTIME_STDLIB_INTERNAL BacktraceSettings _swift_backtraceSettings = {
true,

// outputTo,
OutputTo::Stdout,
OutputTo::Auto,

// swiftBacktracePath
NULL,
Expand Down Expand Up @@ -322,6 +322,13 @@ BacktraceInitializer::BacktraceInitializer() {
_swift_backtraceSettings.preset = Preset::Full;
}

if (_swift_backtraceSettings.outputTo == OutputTo::Auto) {
if (_swift_backtraceSettings.interactive == OnOffTty::On)
_swift_backtraceSettings.outputTo = OutputTo::Stdout;
else
_swift_backtraceSettings.outputTo = OutputTo::Stderr;
}

#if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
if (_swift_backtraceSettings.enabled == OnOffTty::On
&& !_swift_backtraceSettings.swiftBacktracePath) {
Expand Down Expand Up @@ -648,7 +655,9 @@ _swift_processBacktracingSetting(llvm::StringRef key,
} else if (key.equals_insensitive("cache")) {
_swift_backtraceSettings.cache = parseBoolean(value);
} else if (key.equals_insensitive("output-to")) {
if (value.equals_insensitive("stdout"))
if (value.equals_insensitive("auto"))
_swift_backtraceSettings.outputTo = OutputTo::Auto;
else if (value.equals_insensitive("stdout"))
_swift_backtraceSettings.outputTo = OutputTo::Stdout;
else if (value.equals_insensitive("stderr"))
_swift_backtraceSettings.outputTo = OutputTo::Stderr;
Expand Down
12 changes: 12 additions & 0 deletions stdlib/public/runtime/CrashHandlerLinux.cpp
Expand Up @@ -617,6 +617,8 @@ const char *backtracer_argv[] = {
"preset", // 26
"--cache", // 27
"true", // 28
"--output-to", // 29
"stdout", // 30
NULL
};

Expand Down Expand Up @@ -769,6 +771,16 @@ run_backtracer(int memserver_fd)
break;
}

switch (_swift_backtraceSettings.outputTo) {
case OutputTo::Stdout:
backtracer_argv[30] = "stdout";
break;
case OutputTo::Auto: // Shouldn't happen, but if it does pick stderr
case OutputTo::Stderr:
backtracer_argv[30] = "stderr";
break;
}

backtracer_argv[28] = trueOrFalse(_swift_backtraceSettings.cache);

format_unsigned(_swift_backtraceSettings.timeout, timeout_buf);
Expand Down
1 change: 1 addition & 0 deletions stdlib/public/runtime/CrashHandlerMacOS.cpp
Expand Up @@ -428,6 +428,7 @@ run_backtracer()
case OutputTo::Stdout:
backtracer_argv[30] = "stdout";
break;
case OutputTo::Auto: // Shouldn't happen, but if it does pick stderr
case OutputTo::Stderr:
backtracer_argv[30] = "stderr";
break;
Expand Down
10 changes: 5 additions & 5 deletions test/Backtracing/Crash.swift
Expand Up @@ -7,11 +7,11 @@
// RUN: %target-codesign %t/CrashNoDebug
// RUN: %target-codesign %t/CrashOpt
// RUN: %target-codesign %t/CrashOptNoDebug
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/Crash || true) | %FileCheck %s
// RUN: (env SWIFT_BACKTRACE=preset=friendly,enable=yes,cache=no %target-run %t/Crash || true) | %FileCheck %s --check-prefix FRIENDLY
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/CrashNoDebug || true) | %FileCheck %s --check-prefix NODEBUG
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/CrashOpt || true) | %FileCheck %s --check-prefix OPTIMIZED
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/CrashOptNoDebug || true) | %FileCheck %s --check-prefix OPTNODEBUG
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/Crash 2>&1 || true) | %FileCheck %s
// RUN: (env SWIFT_BACKTRACE=preset=friendly,enable=yes,cache=no %target-run %t/Crash 2>&1 || true) | %FileCheck %s --check-prefix FRIENDLY
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/CrashNoDebug 2>&1 || true) | %FileCheck %s --check-prefix NODEBUG
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/CrashOpt 2>&1 || true) | %FileCheck %s --check-prefix OPTIMIZED
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/CrashOptNoDebug 2>&1 || true) | %FileCheck %s --check-prefix OPTNODEBUG

// UNSUPPORTED: use_os_stdlib
// UNSUPPORTED: back_deployment_runtime
Expand Down
4 changes: 2 additions & 2 deletions test/Backtracing/CrashAsync.swift
Expand Up @@ -5,8 +5,8 @@
// Demangling is disabled for now because older macOS can't demangle async
// function names. We test demangling elsewhere, so this is no big deal.

// RUN: (env SWIFT_BACKTRACE=enable=yes,demangle=no,cache=no %target-run %t/CrashAsync || true) | %FileCheck %s
// RUN: (env SWIFT_BACKTRACE=preset=friendly,enable=yes,demangle=no,cache=no %target-run %t/CrashAsync || true) | %FileCheck %s --check-prefix FRIENDLY
// RUN: (env SWIFT_BACKTRACE=enable=yes,demangle=no,cache=no %target-run %t/CrashAsync 2>&1 || true) | %FileCheck %s
// RUN: (env SWIFT_BACKTRACE=preset=friendly,enable=yes,demangle=no,cache=no %target-run %t/CrashAsync 2>&1 || true) | %FileCheck %s --check-prefix FRIENDLY

// UNSUPPORTED: use_os_stdlib
// UNSUPPORTED: back_deployment_runtime
Expand Down
4 changes: 2 additions & 2 deletions test/Backtracing/CrashWithThunk.swift
@@ -1,8 +1,8 @@
// RUN: %empty-directory(%t)
// RUN: %target-build-swift %s -parse-as-library -Onone -g -o %t/CrashWithThunk
// RUN: %target-codesign %t/CrashWithThunk
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/CrashWithThunk || true) | %FileCheck %s
// RUN: (env SWIFT_BACKTRACE=preset=friendly,enable=yes,cache=no %target-run %t/CrashWithThunk || true) | %FileCheck %s --check-prefix FRIENDLY
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/CrashWithThunk 2>&1 || true) | %FileCheck %s
// RUN: (env SWIFT_BACKTRACE=preset=friendly,enable=yes,cache=no %target-run %t/CrashWithThunk 2>&1 || true) | %FileCheck %s --check-prefix FRIENDLY

// UNSUPPORTED: use_os_stdlib
// UNSUPPORTED: back_deployment_runtime
Expand Down
4 changes: 2 additions & 2 deletions test/Backtracing/Overflow.swift
@@ -1,8 +1,8 @@
// RUN: %empty-directory(%t)
// RUN: %target-build-swift %s -parse-as-library -Onone -g -o %t/Overflow
// RUN: %target-codesign %t/Overflow
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/Overflow || true) | %FileCheck %s
// RUN: (env SWIFT_BACKTRACE=preset=friendly,enable=yes,cache=no %target-run %t/Overflow || true) | %FileCheck %s --check-prefix FRIENDLY
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/Overflow 2>&1 || true) | %FileCheck %s
// RUN: (env SWIFT_BACKTRACE=preset=friendly,enable=yes,cache=no %target-run %t/Overflow 2>&1 || true) | %FileCheck %s --check-prefix FRIENDLY

// UNSUPPORTED: use_os_stdlib
// UNSUPPORTED: back_deployment_runtime
Expand Down
6 changes: 3 additions & 3 deletions test/Backtracing/StackOverflow.swift
@@ -1,9 +1,9 @@
// RUN: %empty-directory(%t)
// RUN: %target-build-swift %s -parse-as-library -Onone -g -o %t/StackOverflow
// RUN: %target-codesign %t/StackOverflow
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/StackOverflow || true) | %FileCheck %s
// RUN: (env SWIFT_BACKTRACE=limit=17,top=5,enable=yes,cache=no %target-run %t/StackOverflow || true) | %FileCheck %s --check-prefix LIMITED
// RUN: (env SWIFT_BACKTRACE=preset=friendly,enable=yes,cache=no %target-run %t/StackOverflow || true) | %FileCheck %s --check-prefix FRIENDLY
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/StackOverflow 2>&1|| true) | %FileCheck %s
// RUN: (env SWIFT_BACKTRACE=limit=17,top=5,enable=yes,cache=no %target-run %t/StackOverflow 2>&1 || true) | %FileCheck %s --check-prefix LIMITED
// RUN: (env SWIFT_BACKTRACE=preset=friendly,enable=yes,cache=no %target-run %t/StackOverflow 2>&1 || true) | %FileCheck %s --check-prefix FRIENDLY

// UNSUPPORTED: use_os_stdlib
// UNSUPPORTED: back_deployment_runtime
Expand Down
2 changes: 1 addition & 1 deletion test/lit.cfg
Expand Up @@ -491,7 +491,7 @@ if backtracing is not None:

backtrace_on_crash = lit_config.params.get('backtrace_on_crash', None)
if backtrace_on_crash is not None:
config.environment['SWIFT_BACKTRACE'] = 'enable=on,output-to=stderr'
config.environment['SWIFT_BACKTRACE'] = 'enable=on'

config.available_features.add('lld_lto')

Expand Down

0 comments on commit a99868f

Please sign in to comment.