Subject: Re: bug#28710: 27.0.50; eassert failure in maybe_produce_line_number

From: Eli Zaretskii <[email-masked]>
Date: Mon, 09 Oct 2017 21:51:09 +0300

> From: Alex <[email-masked]>
> Cc: [email-masked]
> Date: Mon, 09 Oct 2017 11:56:20 -0600
> 
> > Thanks.  I installed a change that should fix the problem, please try
> > the latest emacs-26 branch.
> 
> Looks like it's fixed, thanks.

Great, thanks for testing.

> >   Thread 1 hit Breakpoint 3, Fredraw_display () at dispnew.c:3032
> >   3032      FOR_EACH_FRAME (tail, frame)
> >   (gdb) n
> >   3033        if (FRAME_VISIBLE_P (XFRAME (frame)))
> >   (gdb) p XFRAME(frame)
> >   $1 = (struct frame *) 0x1b5e380 <dumped_data+4020672>
> >   (gdb) p $1->redisplay
> >   $2 = true
> >   (gdb) watch -l $1->redisplay
> >   Hardware watchpoint 4: -location $1->redisplay
> >   (gdb) commands
> >      > bt
> >      > continue
> >      > end
> >   (gdb) continue
> >
> > and then continue with the recipe, and show all the backtraces you get.
> 
> Unfortunately, when I try to use XFRAME, I get:
>   No symbol "__builtin_assume_aligned" in current context.

OK, then you could use a slightly different way:

  Thread 1 hit Breakpoint 3, Fredraw_display () at dispnew.c:3032
  3032      FOR_EACH_FRAME (tail, frame)
  (gdb) n
  3033        if (FRAME_VISIBLE_P (XFRAME (frame)))
  (gdb) p frame
  $1 = XIL(0xa000000001b5e380)
  (gdb) xframe
  $2 = (struct frame *) 0x1b5e380 <dumped_data+4020672>
  "emacs@HOME-C4E4A596F7"
  (gdb) p $2->redisplay
  $3 = true
  (gdb) watch -l $2->redisplay
  Hardware watchpoint 4: -location $2->redisplay
  (gdb) commands
  Type commands for breakpoint(s) 4, one per line.
  End with a line saying just "end".
    >bt
    >continue
    >end
  (gdb) continue

(The "xframe" command is defined in src/.gdbinit, so if you are not
running GDB from the src directory, you will need to tell it to read
that file:

  (gdb) source /path/to/emacs/src/.gdbinit

> I tried the following workaround, but no backtraces showed up:
> 
> Thread 1 "emacs-26.0.60.4" hit Breakpoint 1, Fredraw_display ()
>     at dispnew.c:3032
> 3032	  FOR_EACH_FRAME (tail, frame)
> (gdb) n
> 3033	    if (FRAME_VISIBLE_P (XFRAME (frame)))
> (gdb) p (struct frame *) XLI(frame) - Lisp_Vectorlike
> $3 = (struct frame *) 0x15c9285 <bss_sbrk_buffer+8055909>

When I try this, I get a different frame pointer and a warning message
from GDB.  So let's hope this workaround is incorrect ;-)

Thanks.