@@ -166,12 +166,25 @@ static_assert((SWIFT_BACKTRACE_ENVIRONMENT_SIZE % SWIFT_PAGE_SIZE) == 0,
166166
167167#if _WIN32
168168#pragma section(SWIFT_BACKTRACE_SECTION, read, write)
169+
170+ #if defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
171+ const WCHAR swiftBacktracePath[] = L" " SWIFT_RUNTIME_FIXED_BACKTRACER_PATH;
172+ #else
169173__declspec (allocate(SWIFT_BACKTRACE_SECTION)) WCHAR swiftBacktracePath[SWIFT_BACKTRACE_BUFFER_SIZE];
174+ #endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
175+
170176__declspec (allocate(SWIFT_BACKTRACE_SECTION)) CHAR swiftBacktraceEnv[SWIFT_BACKTRACE_ENVIRONMENT_SIZE];
177+
171178#elif defined(__linux__) || TARGET_OS_OSX
179+
180+ #if defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
181+ const char swiftBacktracePath[] = SWIFT_RUNTIME_FIXED_BACKTRACER_PATH;
182+ #else
172183char swiftBacktracePath[SWIFT_BACKTRACE_BUFFER_SIZE] __attribute__((section(SWIFT_BACKTRACE_SECTION), aligned(SWIFT_PAGE_SIZE)));
184+ #endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH
185+
173186char swiftBacktraceEnv[SWIFT_BACKTRACE_ENVIRONMENT_SIZE] __attribute__((section(SWIFT_BACKTRACE_SECTION), aligned(SWIFT_PAGE_SIZE)));
174- #endif
187+ #endif // defined(__linux__) || TARGET_OS_OSX
175188
176189void _swift_backtraceSetupEnvironment ();
177190
@@ -314,6 +327,7 @@ BacktraceInitializer::BacktraceInitializer() {
314327 _swift_backtraceSettings.preset = Preset::Full;
315328 }
316329
330+ #if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
317331 if (_swift_backtraceSettings.enabled == OnOffTty::On
318332 && !_swift_backtraceSettings.swiftBacktracePath ) {
319333 _swift_backtraceSettings.swiftBacktracePath
@@ -327,6 +341,7 @@ BacktraceInitializer::BacktraceInitializer() {
327341 _swift_backtraceSettings.enabled = OnOffTty::Off;
328342 }
329343 }
344+ #endif
330345
331346 if (_swift_backtraceSettings.enabled == OnOffTty::On) {
332347 // Copy the path to swift-backtrace into swiftBacktracePath, then write
@@ -339,6 +354,7 @@ BacktraceInitializer::BacktraceInitializer() {
339354 if (_swift_backtraceSettings.algorithm == UnwindAlgorithm::Auto)
340355 _swift_backtraceSettings.algorithm = UnwindAlgorithm::Precise;
341356
357+ #if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
342358 int len = ::MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS,
343359 _swift_backtraceSettings.swiftBacktracePath , -1 ,
344360 swiftBacktracePath,
@@ -359,6 +375,7 @@ BacktraceInitializer::BacktraceInitializer() {
359375 ::GetLastError ());
360376 _swift_backtraceSettings.enabled = OnOffTty::Off;
361377 }
378+ #endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
362379
363380 _swift_backtraceSetupEnvironment ();
364381
@@ -376,6 +393,7 @@ BacktraceInitializer::BacktraceInitializer() {
376393 if (_swift_backtraceSettings.algorithm == UnwindAlgorithm::Auto)
377394 _swift_backtraceSettings.algorithm = UnwindAlgorithm::Precise;
378395
396+ #if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
379397 size_t len = strlen (_swift_backtraceSettings.swiftBacktracePath );
380398 if (len > SWIFT_BACKTRACE_BUFFER_SIZE - 1 ) {
381399 swift::warning (0 ,
@@ -400,6 +418,7 @@ BacktraceInitializer::BacktraceInitializer() {
400418 }
401419#endif // PROTECT_BACKTRACE_SETTINGS
402420 }
421+ #endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
403422
404423 _swift_backtraceSetupEnvironment ();
405424
@@ -632,6 +651,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
632651 " swift runtime: unknown output-to setting '%.*s'\n " ,
633652 static_cast <int >(value.size ()), value.data ());
634653 }
654+ #if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
635655 } else if (key.equals_insensitive (" swift-backtrace" )) {
636656 size_t len = value.size ();
637657 char *path = (char *)std::malloc (len + 1 );
@@ -640,6 +660,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
640660
641661 std::free (const_cast <char *>(_swift_backtraceSettings.swiftBacktracePath ));
642662 _swift_backtraceSettings.swiftBacktracePath = path;
663+ #endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
643664 } else {
644665 swift::warning (0 ,
645666 " swift runtime: unknown backtracing setting '%.*s'\n " ,
0 commit comments