diff --git a/users/myuser/dev/0001-gdb-show-libraries-in-coredump-backtrace.patch b/users/myuser/dev/0001-gdb-show-libraries-in-coredump-backtrace.patch new file mode 100644 index 0000000..88f46f8 --- /dev/null +++ b/users/myuser/dev/0001-gdb-show-libraries-in-coredump-backtrace.patch @@ -0,0 +1,33 @@ +diff --git a/gdb/stack.c b/gdb/stack.c +index 7e45d59..cf38ff8 100644 +--- a/gdb/stack.c ++++ b/gdb/stack.c +@@ -1376,7 +1376,27 @@ print_frame (const frame_print_options &fp_opts, + annotate_frame_function_name (); + + string_file stb; +- gdb_puts (funname ? funname.get () : "??", &stb); ++ ++ const char* from_where = "??"; ++ if (funname) { ++ from_where = funname.get(); ++ } else { ++ if (core_bfd) { ++ gdbarch_read_core_file_mappings(gdbarch, core_bfd, ++ [=] (ULONGEST count) { }, ++ [&] (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, ++ const char *filename, const bfd_build_id *build_id) ++ { ++ if (start <= pc && pc < end) { ++ from_where = filename; ++ } ++ }); ++ } else { ++ // too much work for this small patch. Would need to inspect /proc//maps ++ } ++ } ++ ++ gdb_puts (from_where, &stb); + uiout->field_stream ("func", stb, function_name_style.style ()); + uiout->wrap_hint (3); + annotate_frame_args (); diff --git a/users/myuser/dev/gdb.nix b/users/myuser/dev/gdb.nix index beb1faf..28071ab 100644 --- a/users/myuser/dev/gdb.nix +++ b/users/myuser/dev/gdb.nix @@ -3,9 +3,17 @@ # Also make it the default gdb. pwndbgWithDebuginfod = (pkgs.pwndbg.override { - gdb = pkgs.gdb.override { - enableDebuginfod = true; - }; + gdb = + (pkgs.gdb.override { + enableDebuginfod = true; + }) + .overrideAttrs (_finalAttrs: previousAttrs: { + patches = + previousAttrs.patches + ++ [ + ./0001-gdb-show-libraries-in-coredump-backtrace.patch + ]; + }); }) .overrideAttrs (_finalAttrs: previousAttrs: { installPhase =