Skip to content

Commit

Permalink
[Windows] Fix loading debug symbol files over 2GB.
Browse files Browse the repository at this point in the history
  • Loading branch information
bruvzg authored and WhalesState committed Dec 15, 2024
1 parent 368ff04 commit 940cf67
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 10 deletions.
5 changes: 4 additions & 1 deletion platform/windows/crash_handler_windows_signal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,10 @@ extern void CrashHandlerException(int signal) {
if (FileAccess::exists(_execpath + ".debugsymbols")) {
_execpath = _execpath + ".debugsymbols";
}
data.state = backtrace_create_state(_execpath.utf8().get_data(), 0, &error_callback, reinterpret_cast<void *>(&data));
_execpath = _execpath.replace("/", "\\");

CharString cs = _execpath.utf8(); // Note: should remain in scope during backtrace_simple call.
data.state = backtrace_create_state(cs.get_data(), 0, &error_callback, reinterpret_cast<void *>(&data));
if (data.state != nullptr) {
data.index = 1;
backtrace_simple(data.state, 1, &trace_callback, &error_callback, reinterpret_cast<void *>(&data));
Expand Down
4 changes: 4 additions & 0 deletions thirdparty/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,10 @@ Files extracted from upstream source:
- `*.{c,h}` files for Windows platform
- `LICENSE`

Important: Some files have Godot-made changes to load big debug symbol files.
They are marked with `/* GODOT start */` and `/* GODOT end */`
comments and a patch is provided in the `patches` folder.


## libktx

Expand Down
47 changes: 47 additions & 0 deletions thirdparty/libbacktrace/patches/patch_big_files.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
diff --git a/thirdparty/libbacktrace/read.c b/thirdparty/libbacktrace/read.c
index 1811c8d2e0..fda8e222d4 100644
--- a/thirdparty/libbacktrace/read.c
+++ b/thirdparty/libbacktrace/read.c
@@ -52,14 +52,9 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
{
uint64_t got;
ssize_t r;
-
- if ((uint64_t) (size_t) size != size)
- {
- error_callback (data, "file size too large", 0);
- return 0;
- }
-
- if (lseek (descriptor, offset, SEEK_SET) < 0)
+/* GODOT start */
+ if (_lseeki64 (descriptor, offset, SEEK_SET) < 0)
+/* GODOT end */
{
error_callback (data, "lseek", errno);
return 0;
@@ -74,7 +69,13 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
got = 0;
while (got < size)
{
- r = read (descriptor, view->base, size - got);
+/* GODOT start */
+ uint64_t sz = size - got;
+ if (sz > INT_MAX) {
+ sz = INT_MAX;
+ }
+ r = _read (descriptor, view->base, sz);
+/* GODOT end */
if (r < 0)
{
error_callback (data, "read", errno);
@@ -84,6 +85,9 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
if (r == 0)
break;
got += (uint64_t) r;
+/* GODOT start */
+ view->base += r;
+/* GODOT end */
}

if (got < size)
22 changes: 13 additions & 9 deletions thirdparty/libbacktrace/read.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,9 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
{
uint64_t got;
ssize_t r;

if ((uint64_t) (size_t) size != size)
{
error_callback (data, "file size too large", 0);
return 0;
}

if (lseek (descriptor, offset, SEEK_SET) < 0)
/* GODOT start */
if (_lseeki64 (descriptor, offset, SEEK_SET) < 0)
/* GODOT end */
{
error_callback (data, "lseek", errno);
return 0;
Expand All @@ -74,7 +69,13 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
got = 0;
while (got < size)
{
r = read (descriptor, view->base, size - got);
/* GODOT start */
uint64_t sz = size - got;
if (sz > INT_MAX) {
sz = INT_MAX;
}
r = _read (descriptor, view->base, sz);
/* GODOT end */
if (r < 0)
{
error_callback (data, "read", errno);
Expand All @@ -84,6 +85,9 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
if (r == 0)
break;
got += (uint64_t) r;
/* GODOT start */
view->base += r;
/* GODOT end */
}

if (got < size)
Expand Down

0 comments on commit 940cf67

Please sign in to comment.