Subject: Re: bug#49261: 28.0.50; File Locking Breaks Presumptuous Toolchains

From: Eli Zaretskii <[email-masked]>
Date: Thu, 08 Jul 2021 19:47:10 +0300

> From: Lars Ingebrigtsen <[email-masked]>
> Cc: [email-masked],  [email-masked],  [email-masked]
> Date: Thu, 08 Jul 2021 15:34:54 +0200
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> > Which means unfortunately that to see the form one needs to display
> > the form piecemeal, one member at a time, using the xtype and the
> > other x* commands...  Let me know if you need more detailed
> > instructions.
> 
> Yes, that'd be appreciated.

Well, you did it (almost) correctly:

> (gdb) xtype form
> Lisp_Cons
> (gdb) xcons form
> $2 = (struct Lisp_Cons *) 0x7ffff211c260
> {
>   u = {
>     s = {
>       car = XIL(0x2aaa9c41a9e0),
>       u = {
>         cdr = XIL(0),
>         chain = 0x0
>       }
>     },
>     gcaligned = 0xe0
>   }
> }
> (gdb) xcar form
> $3 = 0x0
> (gdb) xcdr form
> $4 = 0x0

What you need to do is this:

  (gdb) xtype
  Lisp_Cons
  (gdb) xcons
  $2 = (struct Lisp_Cons *) 0x7ffff211c260
  {
    u = {
      s = {
	car = XIL(0x2aaa9c41a9e0),
	u = {
	  cdr = XIL(0),
	  chain = 0x0
	}
      },
      gcaligned = 0xe0
    }
  }
  (gdb) p $2->u.s.car
  (gdb) xtype

And after the second "xtype" continue with the x* command according to
the type.

Your mistake was to use an argument after xcons, xcar, and xcdr: these
should be invoked without an argument, immediately after printing a
Lisp_Object variable.  Like this:

  (gdb) p form
  (gdb) xcar
  (gdb) p form
  (gdb) xcdr

etc.

> Which doesn't seem ... right?

No, but the real form has a non-nil 'car', see above.  So that does
look valid, at least at this level.  The invalid part probably comes
when you recurse deeper into 'form'.