Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Andrew Cagney <cagney@gnu.org>
To: Stan Shebs <stanshebs@earthlink.net>
Cc: gdb@sourceware.org
Subject: Re: Address spaces
Date: Thu, 31 Jul 2008 18:43:00 -0000	[thread overview]
Message-ID: <4891DC0C.8060503@gnu.org> (raw)
In-Reply-To: <4887C7BD.80601@earthlink.net>

Stan Shebs wrote:
> One of the recurring themes I'm noticing in my little bit of 
> prototyping for multiprogram GDB is the need for a general concept of 
> "address space". It's not quite the same as program/exec, because 
> several programs could be in one address space in a non-virtual-memory 
> system. It's not quite the same as process, because it applies to 
> address lookup in execs prior to running any of them. It seems most 
> like a tag glued on the front of a CORE_ADDR in fact (change CORE_ADDR 
> to a struct? urgh).
>
> Anyway, I'm just throwing this out to get people's thoughts, and see 
> if I'm missing an existing basic type or bit of infrastructure that 
> could serve the purpose. I don't think address space objects would be 
> user-visible, nor have very many properties; I think their main 
> purpose in practice will be to keep target addresses in different 
> execs and processes from getting mixed up with each other.
>

[I point this out as it might provide you with a tangable example of a 
change that may, or may not, benefit from an implementation in C++]

I suspect that what we're describing here is something like:

frame
  has-a thread

thread
  has-a address_space

address_space
   -> what a processor / task sees (I & D?)
  has-a-multiple segment/section
      -> for instance a shared object (or program mapped into memory); 
and by implication methods for doing address <-> symbol lookups
  has-a-multiple low-level-breakpoint
      -> more on this below

address
  has-a address_space
  has-a offset -- the current CORE_ADDR

but if we examine the code, some of this is less clear.  As you 
noticed,, for a large part, the address-space is implied by the 
context.  For instance, given a specified frame, do an address/name lookup.

It might also be useful to examine a specific case which gdb, without 
something like the above, can't a program correctly; credit to pmuldoon 
for some of the ideas here.

Let's consider a vfork.  If GDB is tracing both the parent and child of 
a vfork then it will likely end up with an object relationship as follows:

         v-parent    v-child
             |         |
             `----+----'
                  |
             address_space

that is, both the vfork parent and child, after the vfork, but before 
the exec/exit, share a common address_space.  Why?  Because, this 
correctly reflects how the parent and child share memory, code, and even 
breakpoints.  For instance, since the v-child shares the v-parent's 
address space, the v-child can hit the v-parent's breakpoints, and this 
model lets us represent this.


      parent reply	other threads:[~2008-07-31 15:37 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-24  0:14 Stan Shebs
2008-07-24  0:30 ` Doug Evans
2008-07-24  6:15   ` Stan Shebs
2008-07-24 15:56     ` Ulrich Weigand
2008-07-24 18:17       ` Stan Shebs
2008-07-24 18:28         ` Doug Evans
2008-07-25  5:52           ` Michael Snyder
2008-07-25  8:50           ` Jeremy Bennett
2008-07-24 20:31         ` Ulrich Weigand
2008-07-25 18:50           ` Stan Shebs
2008-07-25  3:31       ` Michael Snyder
2008-07-24 21:49     ` Paul Pluzhnikov
2008-07-25  3:29     ` Michael Snyder
2008-07-25 18:32       ` Stan Shebs
2008-07-25 19:13         ` Mark Kettenis
2008-07-25 19:24           ` Stan Shebs
2008-07-31 18:43 ` Andrew Cagney [this message]

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=4891DC0C.8060503@gnu.org \
    --to=cagney@gnu.org \
    --cc=gdb@sourceware.org \
    --cc=stanshebs@earthlink.net \
    /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