RE: [6.2] PROBLEMS file

Dave Korn
2004-07-23T12:13:23Z

> -----Original Message-----
> From: gdb-owner On Behalf Of Eli Zaretskii
> Sent: 23 July 2004 13:17
> To: Mark Kettenis

> > Date: Fri, 23 Jul 2004 11:23:32 +0200 (CEST)
> > From: Mark Kettenis
> >
> > GDB loses track after frame #21, but I doubt whether
> > recursive_edit_1 is a frameless function. Can you post a
> > dissassembly of that function?
>
> Here it is:
>
> (gdb) disassemble recursive_edit_1
> Dump of assembler code for function recursive_edit_1:
> 0x0005f7b0 <recursive_edit_1+0>: push %ebp
> 0x0005f7b1 <recursive_edit_1+1>: mov 0x375aa0,%eax
> 0x0005f7b6 <recursive_edit_1+6>: mov %esp,%ebp

<SPECULATIVE strength=plausible>

Somebody's implemented schedulable rtl prolog insn patterns in i386 gcc
and now the gdb prolog analysis gives up when it finds an instruction it
doesn't recognise has been moved backward by the scheduler from the function
body to in amongst the prolog instructions.

I believe this may also explain the thread "GDB seems to set breakpoints
on functions at the wrong place" at
http://sources.redhat.com/ml/gdb/2004-07/msg00107.html, so I've Cc'd the OP
of that message back in here.

Hmm. I found this interesting comment in i386.md:

;; Prologue and epilogue instructions

;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
;; all of memory. This blocks insns from being moved across this point.

Perhaps someone has removed one that previously used to be emitted to keep
body insns out of the prolog.

</SPECULATIVE>

cheers,
DaveK
--
Can't think of a witty .sigline today....