diff --git a/src/eval.c b/src/eval.c index 3c4999d818c..d0a2abf0089 100644 --- a/src/eval.c +++ b/src/eval.c @@ -50,7 +50,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; union specbinding *backtrace_next (union specbinding *) EXTERNALLY_VISIBLE; union specbinding *backtrace_top (void) EXTERNALLY_VISIBLE; @@ -107,20 +106,21 @@ specpdl_arg (union specbinding *pdl) return pdl->unwind.arg; } +/* To work around GDB bug 32313 + make + backtrace_* functions visible-to-GDB pointers instead of merely + being an externally visible functions themselves. 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 + static Lisp_Object backtrace_function_body (union specbinding *pdl) { eassert (pdl->kind == SPECPDL_BACKTRACE); return pdl->bt.function; } -/* To work around GDB bug 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 @@ -130,12 +130,13 @@ backtrace_nargs (union specbinding *pdl) return pdl->bt.nargs; } -Lisp_Object * -backtrace_args (union specbinding *pdl) +static Lisp_Object * +backtrace_args_body (union specbinding *pdl) { eassert (pdl->kind == SPECPDL_BACKTRACE); return pdl->bt.args; } +GDB_FUNCPTR (backtrace_args, Lisp_Object *, (union specbinding *)); /* Functions to modify slots of backtrace records. */