[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master ebf3fb9a229: Work around GDB bug 32313 when debugging Emacs inter
From: |
Paul Eggert |
Subject: |
master ebf3fb9a229: Work around GDB bug 32313 when debugging Emacs internals |
Date: |
Sun, 27 Oct 2024 20:24:51 -0400 (EDT) |
branch: master
commit ebf3fb9a2295520ef8ce1756086fd9bbd3d04e9e
Author: Paul Eggert <eggert@cs.ucla.edu>
Commit: Paul Eggert <eggert@cs.ucla.edu>
Work around GDB bug 32313 when debugging Emacs internals
Problem reported by Eli Zaretskii in:
https://lists.gnu.org/r/emacs-devel/2024-10/msg00653.html
* src/eval.c (backtrace_function_body): Rename from
backtrace_function, and make it static.
(GDB_FUNCPTR): New macro.
(backtrace_function): New function pointer, for GDB only.
---
src/eval.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/eval.c b/src/eval.c
index 874cf6d868c..3c4999d818c 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -51,7 +51,6 @@ Lisp_Object Vsignaling_function;
/* These would ordinarily be static, but they need to be visible to GDB. */
bool backtrace_p (union specbinding *) EXTERNALLY_VISIBLE;
Lisp_Object *backtrace_args (union specbinding *) EXTERNALLY_VISIBLE;
-Lisp_Object backtrace_function (union specbinding *) EXTERNALLY_VISIBLE;
union specbinding *backtrace_next (union specbinding *) EXTERNALLY_VISIBLE;
union specbinding *backtrace_top (void) EXTERNALLY_VISIBLE;
@@ -108,12 +107,21 @@ specpdl_arg (union specbinding *pdl)
return pdl->unwind.arg;
}
-Lisp_Object
-backtrace_function (union specbinding *pdl)
+static Lisp_Object
+backtrace_function_body (union specbinding *pdl)
{
eassert (pdl->kind == SPECPDL_BACKTRACE);
return pdl->bt.function;
}
+/* To work around GDB bug 32313
+ <https://sourceware.org/bugzilla/show_bug.cgi?id=32313>
+ make backtrace_function a visible-to-GDB pointer instead of merely
+ being an externally visible function itself. Declare the pointer
+ first to pacify gcc -Wmissing-variable-declarations. */
+#define GDB_FUNCPTR(func, resulttype, params) \
+ extern resulttype (*const func) params EXTERNALLY_VISIBLE; \
+ resulttype (*const func) params = func##_body
+GDB_FUNCPTR (backtrace_function, Lisp_Object, (union specbinding *));
static ptrdiff_t
backtrace_nargs (union specbinding *pdl)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master ebf3fb9a229: Work around GDB bug 32313 when debugging Emacs internals,
Paul Eggert <=