]> git.eshelyaron.com Git - emacs.git/commitdiff
Work around GDB bug 32313 when debugging Emacs internals
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 28 Oct 2024 00:21:23 +0000 (17:21 -0700)
committerEshel Yaron <me@eshelyaron.com>
Tue, 29 Oct 2024 09:55:39 +0000 (10:55 +0100)
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.

(cherry picked from commit ebf3fb9a2295520ef8ce1756086fd9bbd3d04e9e)

src/eval.c

index 874cf6d868cdcf2474bd0e8509346f713682d6b2..3c4999d818c6b3f387da65b6df62f0fb914ab3f1 100644 (file)
@@ -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)