Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: gdb@sourceware.org
Subject: Re: Stepping off breakpoints in non-stop debugging mode
Date: Sat, 08 Dec 2007 17:04:00 -0000	[thread overview]
Message-ID: <20071208170359.GA8777@caradoc.them.org> (raw)
In-Reply-To: <m33audczfp.fsf@codesourcery.com>

On Sat, Dec 08, 2007 at 01:23:38AM -0800, Jim Blandy wrote:
> - The current implementation of gdbarch_displaced_step_location is
>   pretty questionable, but I'm not sure where else would be better.

Ditto.  This may do.

> - It seems that it is never necessary to have more than one thread
>   doing displaced stepping at a time --- or else the assert in
>   displaced_step_prepare would trigger --- but I don't see why this
>   should be so.

Isn't this because you haven't been testing combined with Vladimir's
leave-breakpoints-inserted code?  resume is still going to force only
the current thread to resume and wait, so the single step will finish
before anything else gets a chance to hit a new breakpoint.  Combine
those two patches, this will start happening.  Add non-stop debugging
and it will happen even more.

> +static int
> +i386_syscall_p (gdb_byte *insn, ULONGEST *lengthp)
> +{
> +  if (insn[0] == 0xcd)
> +    {
> +      *lengthp = 2;
> +      return 1;
> +    }
> +
> +  return 0;
> +}

That's int, I assume.  May need sysenter / syscall, depending on the
platform.

> +  /* The list of issues to contend with here is taken from
> +     resume_execution in arch/i386/kernel/kprobes.c, Linux 2.6.20.
> +     Yay for Free Software!  */
> +
> +  /* Clear the TF flag in EFLAGS, which will always be set.  */
> +  {
> +    ULONGEST eflags;
> +    regcache_cooked_read_unsigned (regs, I386_EFLAGS_REGNUM, &eflags);
> +    eflags &= ~I386_TF_MASK;
> +    regcache_cooked_write_unsigned (regs, I386_EFLAGS_REGNUM, eflags);
> +  }

Does this manual adjustment of TF apply to GDB?  The kernel is
supposed to handle TF entirely inside ptrace, and expose the original
%eflags to GDB (though various kernel versions have gotten this wrong,
I believe it is right at last).  So if TF is set here, that means the
program being debugged had TF set already.

> +  /* Relocate the %eip, if necessary.  */
> +
> +  /* In the case of absolute or indirect jump or call instructions, or
> +     a return instruction, the new %eip needs no relocation.  */
> +  if (i386_absolute_jmp_p (insn)
> +      || i386_absolute_call_p (insn)
> +      || i386_ret_p (insn))
> +    ;
> +
> +  /* Except in the case of absolute or indirect jump or call
> +     instructions, or a return instruction, the new eip is relative to
> +     the displaced instruction; make it relative.  Well, signal
> +     handler returns don't need relocation either, but we use the
> +     value of %eip to recognize those; see below.  */
> +  if (! i386_absolute_jmp_p (insn)
> +      && ! i386_absolute_call_p (insn)
> +      && ! i386_ret_p (insn))

These two if statements look quite strange together.

-- 
Daniel Jacobowitz
CodeSourcery


  reply	other threads:[~2007-12-08 17:04 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-08  9:23 Jim Blandy
2007-12-08 17:04 ` Daniel Jacobowitz [this message]
2007-12-10 23:05   ` Jim Blandy
2007-12-10 23:17     ` Daniel Jacobowitz
2007-12-11 18:24       ` Jim Blandy
2007-12-11 18:44         ` Daniel Jacobowitz
2007-12-17  3:31 ` Thiago Jung Bauermann
2007-12-17 19:41   ` Jim Blandy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071208170359.GA8777@caradoc.them.org \
    --to=drow@false.org \
    --cc=gdb@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox