Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <pedro@codesourcery.com>
To: Doug Evans <dje@google.com>
Cc: gdb@sourceware.org
Subject: Re: program spaces vs exec
Date: Thu, 06 Oct 2011 19:35:00 -0000	[thread overview]
Message-ID: <201110062034.54262.pedro@codesourcery.com> (raw)
In-Reply-To: <CADPb22RCDS-a2FBm=Bf-W8j1X8CXatEFdZOpk1MAJyUHTvJvWA@mail.gmail.com>

On Thursday 06 October 2011 19:59:30, Doug Evans wrote:
> On Thu, Oct 6, 2011 at 4:51 AM, Pedro Alves <pedro@codesourcery.com> wrote:
> 
> > On Wednesday 05 October 2011 19:15:26, Doug Evans wrote:
> > > Hi.
> > >
> > > Question: Why does the program space remain unchanged across an exec?
> > > [for reference sake, target = amd64-linux]
> > >
> > > Is it just expediency?  Or is there a functional reason?
> >
> > That preserved better how gdb behaved before there were
> > multiple program spaces.  E.g., breakpoints are supposed to reset/resolve
> > after the exec, and since the breakpoint symbol search scope is
> > currently tied to a program space, keeping the same program space
> > keeps that working the same.  For exec, I don't have a strong
> > feeling either way, we could say that there's a new address/program
> > space attached to the inferior, or we could say that the inferior's
> > address/program spaces have been refreshed with a new set of
> > pages.  I chose the latter approach originally.
> >
> 
> So it seems like it was more just an implementation decision than something
> part of a design spec.
> [just want to confirm I understood what you wrote correctly]

What's a design spec? :-D  The design was chosen for mirroring what
gdb already did before.  Before there was a `struct program_space'
structure, you could say that all the symbol stuff was attached to
a global and implicit program/symbol space.  It just happened that
the fields of the structure were scattered around the sources.

> 
> [...]
> 
> 
> >
> > > This concerns more than just exec of course.
> > > E.g., Any time the "main" objfile is changed (e.g., "file foo") I'd
> > intuitively
> > > expect a new program space.
> >
> > Changing the main file does not necessarily invalidate or get rid of the
> > loaded shared library list, so I think we should not create a new program
> > space for this.
> >
> 
> Huh.  Does that have a use?
> What if the new program uses a different ld.so?

You could be doing "file my_executable_but_now_with_symbols", or
even, you could have attached to an inferior without specifying the
main executable, debugged the shared libraries (e.g., on Windows, it's
perfectly fine to get the dll list without an executable --- the dll list
is managed by the kernel, not userspace) -- set breakpoints, etc., and
then load the main executable.  It's all the same program/symbol space,
you're just adding or taking describing pieces to or out of it.

The contents of the program space change, but the program space entity/shell
is the same.  It's the same address space, but viewed with different symbols.

> btw, I'm still not sure our definitions of program spaces match, and I think
> we need to fix that first.
> According to previous emails from you, e.g. the one I mentioned, "program
> space" == "symbol space".
> Intuitively, if the symbol space is changed, than the program space is
> changed as well by definition.
> I gather this intuitive notion is incorrect.

Yes, it seems like your definitions don't match.

From the comment at the top of progspace.h:

> /* A program space represents a symbolic view of an address space.
>    Roughly speaking, it holds all the data associated with a
>    non-running-yet program (main executable, main symbols), and when
>    an inferior is running and is bound to it, includes the list of its
>    mapped in shared libraries.

The shared libraries are part of the program/symbol space.  For unix,
you can think of the program space as the address space.  "program"
does not mean the main executable here, it means the "whole program's
executable and shared libraries, basically everything that's mapped
in the address space, an that we have info for".  I had renamed
"symbol space" to "program space" during submission as it was
supposedly easier to understand that way.  But it was just a rename.

-- 
Pedro Alves


      parent reply	other threads:[~2011-10-06 19:35 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-05 18:15 Doug Evans
2011-10-06 11:51 ` Pedro Alves
2011-10-06 18:23   ` Tom Tromey
2011-10-06 18:43     ` Pedro Alves
2011-10-06 19:32       ` Tom Tromey
2011-10-06 19:35       ` Tom Tromey
2011-10-06 19:41         ` Pedro Alves
2011-10-07 15:43           ` Tom Tromey
2011-10-09 20:42           ` Doug Evans
2011-10-06 19:05   ` Doug Evans
     [not found]   ` <CADPb22RCDS-a2FBm=Bf-W8j1X8CXatEFdZOpk1MAJyUHTvJvWA@mail.gmail.com>
2011-10-06 19:35     ` Pedro Alves [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=201110062034.54262.pedro@codesourcery.com \
    --to=pedro@codesourcery.com \
    --cc=dje@google.com \
    --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