Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Cagney <cagney@gnu.org>
To: Ian Lance Taylor <ian@wasabisystems.com>, Jim Blandy <jimb@redhat.com>
Cc: "Nathan J. Williams" <nathanw@wasabisystems.com>,
	gdb-patches@sources.redhat.com
Subject: Re: RFA: assert that target_fetch_registers did its job
Date: Sat, 07 Aug 2004 16:13:00 -0000	[thread overview]
Message-ID: <4114FF92.7000300@gnu.org> (raw)
In-Reply-To: <m3y8kroh27.fsf@gossamer.airs.com>

> Jim Blandy <jimb@redhat.com> writes:
> 
> 
>>> Perhaps another option would be something like the below: it informs
>>> users that things are not as they seem, and encourages developers to
>>> fix up their targets.  Comments?

I'll disable this while we sort things out.  I've just hit another 
system (PPC/NetBSD) that panics.

While requiring that the inferior always `supply' a register appears 
reasonable (and I agree with the theory) it turns out we don't have the 
mechanisms for indicating all the possible supplied register states (see 
below) and the implementors of the supply code didn't realise that was 
part of the contract :-(

I think we can also just as effectively (and not as fatally :-) use the 
testsuite and something based on ``maint print cooked-registers'' (it 
will need to print state info) to detect mis-behaving inferior code.

> Aren't users going to wind up getting this error message approximately
> one gazillion times when doing debugging on a target which doesn't
> provide all the registers?
> 
> I don't know if this is the right approach in general, but if it is I
> think it at least needs a static flag or something to only issue the
> error once per execution.

Here's a brain dump of the current situtation:

A register, be it in the regcache or a frame, can have 4 states (I've 
listed the regcache states where applicable, the frame uses a flag 
`optimised out'):

- invalid (0)
Initial state, yet to probe for the register.

- valid (1)
The inferior was able to supply a full register value.

- unsupported
The register is not available on this system (due to limitations of the 
ptrace interface say).  Yes, there currently isn't a state for this :-(

- unknown (-1)
For what ever reason, the the register isn't known at this point in 
time.  (For CFI because it wasn't saved).

When it comes to using these values, GDB ducks the issue.  If an attempt 
to fetch a frame's register results in a memory problem, an error is 
thrown, if it results in an unknown/unsupported register, zero is 
silently returned.

I think:

- the register cache should just mark up the status of its registers and 
trust that the client will notice the problems

- the frame code should detect unknown / unsupported register accesses 
and throw an error

- the code displaying variables, using register values, should catch / 
incorporate such exceptions in their output vis:

(gdb) print foo
$1 = struct { string = <Memory error at 0x12345>, integer = <Register r3 
unknown>, ...}

however we've a ways to go before this happens.  We've not even killed 
of deprecated_registers[].

Andrew



  reply	other threads:[~2004-08-07 16:13 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-23 23:00 Jim Blandy
2004-07-24  0:45 ` Daniel Jacobowitz
2004-08-03 14:23   ` Andrew Cagney
2004-08-07 18:42     ` Daniel Jacobowitz
2004-08-07 18:54       ` Andrew Cagney
2004-08-04 17:51   ` Jim Blandy
2004-08-06 20:50 ` Nathan J. Williams
2004-08-06 23:43   ` Jim Blandy
2004-08-07  1:47     ` Ian Lance Taylor
2004-08-07 16:13       ` Andrew Cagney [this message]
2004-08-07 18:31         ` 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=4114FF92.7000300@gnu.org \
    --to=cagney@gnu.org \
    --cc=gdb-patches@sources.redhat.com \
    --cc=ian@wasabisystems.com \
    --cc=jimb@redhat.com \
    --cc=nathanw@wasabisystems.com \
    /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