Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Cagney <ac131313@cygnus.com>
To: Michael Snyder <msnyder@cygnus.com>, Jim Blandy <jimb@cygnus.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [RFC/RFA] gdb extension for Harvard architectures
Date: Tue, 02 Oct 2001 16:58:00 -0000	[thread overview]
Message-ID: <3BBA54AE.3080104@cygnus.com> (raw)
In-Reply-To: <3BBA3B03.B864ABE0@cygnus.com>

>> (gdb) print/x *(int*)foo
>> 0xdeadbeef
> 
> 
> An (int *) is by default a data pointer.
> A function pointer is by default a code pointer.

As far as I know, the C language says nothing about the above (assuming 
foo is a function).  It is an implementation defined pointer cast open 
to any interpretation.  All it defines are ``pointer from data to data 
space'' and ``pointer from data to code space''.  It doesn't even define 
foo+4, where foo is a function.

Any way, lets break down the proposal.

--

Firstly it is adding a mechanism that will allow GDB to represent 
pointers to / from / within any address space.

We absolutly need this.  And such a change can probably be dropped right 
in. However check note below.

--

Next we've got the syntax change - an attribute extension.  While querky 
  it doesn't worry me - if I'm understanding it correctly, it is 
possible to add syntatic sugar for common operations (such as references 
to code space) [see other e-mail]. (However do check note below :-)

--

Finally, there are the semantics of the operations.  Here I think we're 
clearly disagreeing.  I'm arguing that an address is an address is an 
address - it always designates the one location - unless explicitly 
converted.  In the proposal it silently moves depending on what was 
done.  The  pointer cast operator is being given certain semantics - I 
think those semantics are not what the user expects.

Per my previous comment, given a function foo.  I'd contend that the 
user is going to expect the expression:

	*(int*)foo

to print an integer at address foo and not at some other data address.

BTW, regarding ``(int *)'' is always ``(@data int *@data)'' that is 
true.  Rember though that the above is really:

	cast ((int*), (@code *@data))

and as far as I know, this operation isn't defined by C?  It is free to 
apply arbitrary transformations that might include:

	(@data int *@data)
or 
(@code int *@data)

Any way, if GDB is going to have an address changes model (I consider 
this user broken) then, at a minimum, it should warn the user that an 
address space change has been applied to their apparently simple address 
expression.

--

``Note below'':


The basic framework attached the segment information to the pointee 
rather than pointer.  Was this an arbitrary decision or based on some 
theoretical framework.

Since the pointee gets the attribute it is possible to construct things 
like:

	(@code struct { @data int i; @io unsigned char *@data c; } *)

was this the intent?  (I suspect it was: having a @data -> @io space 
pointer sitting in code memory, while sick, is still plausable).

Andrew





  reply	other threads:[~2001-10-02 16:58 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-09-28 13:07 Michael Snyder
2001-09-28 13:50 ` Andrew Cagney
2001-10-03 10:41   ` Michael Snyder
2001-10-03 11:06     ` Daniel Jacobowitz
2001-10-03 11:12       ` Michael Snyder
2001-10-03 11:19         ` Andrew Cagney
2001-10-03 11:49           ` Michael Snyder
2001-10-03 14:38             ` Andrew Cagney
2001-10-03 14:14     ` Jim Blandy
2001-10-03 14:31       ` Andrew Cagney
2001-10-03 16:14         ` Jim Blandy
2001-10-04 11:44       ` Michael Snyder
2001-10-04 16:28         ` Jim Blandy
2001-09-28 17:15 ` Andrew Cagney
2001-09-28 17:44   ` Andrew Cagney
2001-10-02 12:59     ` Jim Blandy
2001-10-02 14:13       ` Andrew Cagney
2001-10-02 15:09         ` Michael Snyder
2001-10-02 16:58           ` Andrew Cagney [this message]
2001-10-03 10:10             ` Jim Blandy
2001-10-03 12:22               ` Andrew Cagney
2001-10-03 15:08                 ` Jim Blandy
2001-10-10  0:56                   ` Andrew Cagney
2001-10-09 23:34               ` Andrew Cagney
2001-10-10 10:53                 ` Jim Blandy
2001-10-10 11:17                   ` Andrew Cagney
2001-10-10 12:15                     ` Jim Blandy
2001-10-10 12:31                       ` Andrew Cagney
2001-10-10  0:16               ` Andrew Cagney
2001-10-03 11:11             ` Michael Snyder
2001-10-04 12:08             ` Michael Snyder
2001-10-04 13:13               ` Andrew Cagney
2001-10-08 10:36                 ` Michael Snyder
2001-10-10  1:25                   ` Andrew Cagney
2001-11-05 11:34                     ` Michael Snyder
2001-10-02 16:14         ` Jim Blandy
2001-10-02 17:16           ` Andrew Cagney
2001-10-02 17:31             ` Michael Snyder
2001-10-02 19:09               ` Andrew Cagney
2001-10-03 12:41         ` Jim Blandy
2001-10-03 12:52           ` Andrew Cagney
2001-10-03 16:13             ` Jim Blandy
2001-10-03 16:51             ` Frank Ch. Eigler
2001-10-03 10:55     ` Michael Snyder
2001-10-03 11:06       ` Andrew Cagney
2001-10-03 11:51         ` Michael Snyder
2001-10-03 12:17           ` Andrew Cagney
2001-10-03 16:54             ` Michael Snyder
2001-10-03 14:33         ` Jim Blandy
2001-10-03 14:44           ` Andrew Cagney
2001-10-03 16:17             ` Jim Blandy
2001-10-04 13:16               ` Andrew Cagney
2001-10-10  0:45               ` Andrew Cagney
2001-10-10 10:56                 ` Jim Blandy
2001-10-03 14:48           ` Andrew Cagney
2001-10-04 11:49             ` Michael Snyder
2001-10-03 10:49   ` Michael Snyder
2001-09-29  2:29 ` Eli Zaretskii
2001-10-02 19:27 ` Andrew Cagney
2001-10-03 14:04   ` 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=3BBA54AE.3080104@cygnus.com \
    --to=ac131313@cygnus.com \
    --cc=gdb-patches@sources.redhat.com \
    --cc=jimb@cygnus.com \
    --cc=msnyder@cygnus.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