aboutsummaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c
index bf16a709b15..e162725f03d 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -179,7 +179,7 @@ set_backtrace_debug_on_exit (union specbinding *pdl, bool doe)
179 179
180bool 180bool
181backtrace_p (union specbinding *pdl) 181backtrace_p (union specbinding *pdl)
182{ return pdl >= specpdl; } 182{ return specpdl ? pdl >= specpdl : false; }
183 183
184static bool 184static bool
185backtrace_thread_p (struct thread_state *tstate, union specbinding *pdl) 185backtrace_thread_p (struct thread_state *tstate, union specbinding *pdl)
@@ -188,6 +188,12 @@ backtrace_thread_p (struct thread_state *tstate, union specbinding *pdl)
188union specbinding * 188union specbinding *
189backtrace_top (void) 189backtrace_top (void)
190{ 190{
191 /* This is so "xbacktrace" doesn't crash in pdumped Emacs if they
192 invoke the command before init_eval_once_for_pdumper initializes
193 specpdl machinery. See also backtrace_p above. */
194 if (!specpdl)
195 return NULL;
196
191 union specbinding *pdl = specpdl_ptr - 1; 197 union specbinding *pdl = specpdl_ptr - 1;
192 while (backtrace_p (pdl) && pdl->kind != SPECPDL_BACKTRACE) 198 while (backtrace_p (pdl) && pdl->kind != SPECPDL_BACKTRACE)
193 pdl--; 199 pdl--;