Subject: bug#47067: 28.0.50; [feature/native-comp] Crash while scrolling through dispnew.c

From: Eli Zaretskii <[email-masked]>
Date: Sat, 13 Mar 2021 17:27:27 +0200

> From: Pip Cet <[email-masked]>
> Date: Sat, 13 Mar 2021 11:24:28 +0000
> Cc: Andrea Corallo <[email-masked]>, [email-masked]
> 
> On Sat, Mar 13, 2021 at 11:10 AM Eli Zaretskii <[email-masked]> wrote:
> > > From: Pip Cet <[email-masked]>
> > > Date: Sat, 13 Mar 2021 08:53:04 +0000
> > > Cc: Andrea Corallo <[email-masked]>, [email-masked]
> > >
> > > It's c-beginning-of-statement-1 that I think is the immediate caller.
> >
> > It's nowhere in the C backtrace, only its caller
> 
> But it was in one of the previous backtraces?

Too many moons ago.  The ABI was bumped since then, and so did the
*.eln files.

> > > Can you disassemble the function around 0x09c32285 (or, in another
> > > dump, whatever calls Flss), particularly the 256 bytes or so before
> > > that EIP?
> >
> > Below.  The updated address for the caller of Flss is 0x09d82285,
> > which is not in any function whose name is known to GDB.
> 
> That's normal, assuming you didn't compile with comp-debug > 0.

If that's normal, why did Andrea say that he didn't see such "??" in
his backtraces?  And if that's because Andrea builds with comp-debug
above the default zero, then I think either the doc string or the set
of values (or both) need to be updated:

  (defcustom comp-debug 0
    "Debug level for native compilation, a number between 0 and 3.
  This is intended for debugging the compiler itself.
    0 no debugging output.
      This is the recommended value unless you are debugging the compiler itself.
    1 emit debug symbols and dump pseudo C code.
    2 dump gcc passes and libgccjit log file.
    3 dump libgccjit reproducers."

The first line is somewhat deceptive, as it doesn't say portions of
the backtrace will be anonymous; the backtrace is useful even if not
"debugging the compiler itself".  And the description of level 1 says
it will also "dump pseudo C code", which I don't think is needed for
most of the debugging.  Maybe we need an intermediate level that just
leaves the symbols without dumping the pseudo code?

> >    0x09d82268:  mov    %edi,0x4(%esp)
> >    0x09d8226c:  mov    %eax,-0xe8(%ebp)
> >    0x09d82272:  mov    %edx,-0xe4(%ebp)
> >    0x09d82278:  movl   $0x2,(%esp)
> >    0x09d8227f:  call   *0x1318(%ebx)
> >    0x09d82285:  mov    %edx,-0xec(%ebp)  <<<<<<<<<<<<<<<<<<<<
> 
> So EDI is bunk at this point. Can you go back a bit further to where
> it's initialized?

Sorry, I don't understand: I gave you the disassembly of 512 bytes
before, isn't that enough to see where EDI is assigned the value?  Or
what do you mean by "go back"?