@@ -166,12 +166,25 @@ static_assert((SWIFT_BACKTRACE_ENVIRONMENT_SIZE % SWIFT_PAGE_SIZE) == 0,
166
166
167
167
#if _WIN32
168
168
#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
169
173
__declspec (allocate(SWIFT_BACKTRACE_SECTION)) WCHAR swiftBacktracePath[SWIFT_BACKTRACE_BUFFER_SIZE];
174
+ #endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
175
+
170
176
__declspec (allocate(SWIFT_BACKTRACE_SECTION)) CHAR swiftBacktraceEnv[SWIFT_BACKTRACE_ENVIRONMENT_SIZE];
177
+
171
178
#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
172
183
char swiftBacktracePath[SWIFT_BACKTRACE_BUFFER_SIZE] __attribute__((section(SWIFT_BACKTRACE_SECTION), aligned(SWIFT_PAGE_SIZE)));
184
+ #endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH
185
+
173
186
char swiftBacktraceEnv[SWIFT_BACKTRACE_ENVIRONMENT_SIZE] __attribute__((section(SWIFT_BACKTRACE_SECTION), aligned(SWIFT_PAGE_SIZE)));
174
- #endif
187
+ #endif // defined(__linux__) || TARGET_OS_OSX
175
188
176
189
void _swift_backtraceSetupEnvironment ();
177
190
@@ -314,6 +327,7 @@ BacktraceInitializer::BacktraceInitializer() {
314
327
_swift_backtraceSettings.preset = Preset::Full;
315
328
}
316
329
330
+ #if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
317
331
if (_swift_backtraceSettings.enabled == OnOffTty::On
318
332
&& !_swift_backtraceSettings.swiftBacktracePath ) {
319
333
_swift_backtraceSettings.swiftBacktracePath
@@ -327,6 +341,7 @@ BacktraceInitializer::BacktraceInitializer() {
327
341
_swift_backtraceSettings.enabled = OnOffTty::Off;
328
342
}
329
343
}
344
+ #endif
330
345
331
346
if (_swift_backtraceSettings.enabled == OnOffTty::On) {
332
347
// Copy the path to swift-backtrace into swiftBacktracePath, then write
@@ -339,6 +354,7 @@ BacktraceInitializer::BacktraceInitializer() {
339
354
if (_swift_backtraceSettings.algorithm == UnwindAlgorithm::Auto)
340
355
_swift_backtraceSettings.algorithm = UnwindAlgorithm::Precise;
341
356
357
+ #if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
342
358
int len = ::MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS,
343
359
_swift_backtraceSettings.swiftBacktracePath , -1 ,
344
360
swiftBacktracePath,
@@ -359,6 +375,7 @@ BacktraceInitializer::BacktraceInitializer() {
359
375
::GetLastError ());
360
376
_swift_backtraceSettings.enabled = OnOffTty::Off;
361
377
}
378
+ #endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
362
379
363
380
_swift_backtraceSetupEnvironment ();
364
381
@@ -376,6 +393,7 @@ BacktraceInitializer::BacktraceInitializer() {
376
393
if (_swift_backtraceSettings.algorithm == UnwindAlgorithm::Auto)
377
394
_swift_backtraceSettings.algorithm = UnwindAlgorithm::Precise;
378
395
396
+ #if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
379
397
size_t len = strlen (_swift_backtraceSettings.swiftBacktracePath );
380
398
if (len > SWIFT_BACKTRACE_BUFFER_SIZE - 1 ) {
381
399
swift::warning (0 ,
@@ -400,6 +418,7 @@ BacktraceInitializer::BacktraceInitializer() {
400
418
}
401
419
#endif // PROTECT_BACKTRACE_SETTINGS
402
420
}
421
+ #endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
403
422
404
423
_swift_backtraceSetupEnvironment ();
405
424
@@ -632,6 +651,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
632
651
" swift runtime: unknown output-to setting '%.*s'\n " ,
633
652
static_cast <int >(value.size ()), value.data ());
634
653
}
654
+ #if !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
635
655
} else if (key.equals_insensitive (" swift-backtrace" )) {
636
656
size_t len = value.size ();
637
657
char *path = (char *)std::malloc (len + 1 );
@@ -640,6 +660,7 @@ _swift_processBacktracingSetting(llvm::StringRef key,
640
660
641
661
std::free (const_cast <char *>(_swift_backtraceSettings.swiftBacktracePath ));
642
662
_swift_backtraceSettings.swiftBacktracePath = path;
663
+ #endif // !defined(SWIFT_RUNTIME_FIXED_BACKTRACER_PATH)
643
664
} else {
644
665
swift::warning (0 ,
645
666
" swift runtime: unknown backtracing setting '%.*s'\n " ,
0 commit comments