Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@mvista.com>
To: Jim Blandy <jimb@redhat.com>
Cc: Roland McGrath <roland@redhat.com>, gdb-patches@sources.redhat.com
Subject: Re: [PATCH] add-symbol-file-from-memory command
Date: Mon, 06 Oct 2003 15:43:00 -0000	[thread overview]
Message-ID: <20031006154334.GA25069@nevyn.them.org> (raw)
In-Reply-To: <vt2he2mwfjy.fsf@zenia.home>

On Mon, Oct 06, 2003 at 10:29:05AM -0500, Jim Blandy wrote:
> 
> It seems I'm confused about where the vsyscall support is useful.  I
> thought it was Linux-specific, but folks disagreed.  I think it's
> important to get this right, because that determines where the code
> goes in GDB and what the interfaces are.

No, I agree with you that vsyscalls are Linux-specific - for now at
least.  But I think that the concept of add-symbol-file-from-memory is
well separated from the concept of vsyscalls.  It seems like a useful
thing to have for interacting with, say, a hypothetical minimalist ELF
shared loader.

> (This message rambles in a whiney sort of way, and then asks specific
> questions at bottom.)
> 
> One of the sources of my confusion is whether it's Linux-specific or
> ELF-specific.  The vsyscall DSO only appears on Linux --- at the
> moment.  But supporting it in GDB can be done without reference to
> anything Linux-specific: you need to check the auxilliary vector (an
> ELF thing) and read an ELF file out of memory.  It never makes
> Linux-specific system calls, or relies on Linux-specific filesystem
> layout stuff, for example.  So leaving linux-tdep.c and
> config/nm-linux.h out of the picture entirely, and doing everything as
> ELF-related code, will not introduce any interface violations.

Except that the AT_SYSINFO tag is really Linux-specific.  There's no
guarantee that nothing else would use the same auxv tag for something
else.  I don't believe they're centrally registered, since they're
ultimately system-specific by nature.

> But although I understand that the Linux system call interface is
> changing, and that the new interface requires the kernel to provide
> unwinding information, because the old way of unwinding from system
> calls no longer works, I've never understood why the system call
> interface had to change in the first place.
> 
> In a sense, it's irrelevant --- the interface *is* changing, and GDB
> must continue to work.  But not understanding why the system call
> interface must change makes it difficult for me to assess how likely
> other systems are to adopt vsyscall DSO's, and thus whether it's
> better to isolate the additional complexity to Linux-specific files,
> even though the work is portable to all ELF targets, or whether it's
> better to make it ELF-specific, to make it easy (or unnecessary) to
> adapt GDB when the feature appears elsewhere.
> 
> I think there's a good argument that one should simply always
> implement everything using the smallest interface you can stand, even
> if it's only used in a specific situation, because it makes the code
> easier to reuse.  Since the vsyscall DSO support only really depends
> on ELF stuff, and it automatically detects when it's needed (by the
> presence of a specific element in the auxilliary vector), maybe that's
> the best thing to do.
> 
> 
> So, why did the kernel system call interface need to change?  How
> likely are other Unices to begin using vsyscall DSO's?  I've seen
> x86-64 and IA-64 mentioned; would it be useful on PPC and the S/390,
> too?  (Just to pick random architectures out of the air.)

This is all "as I understand it".  Feel free to correct, anyone.

The original motivation for x86 was that we have three different
mechanisms for making a syscall:
  - int $80
  - sysenter
  - syscall

It turns out that int $80 isn't the best way any more, on some
processors.  sysenter (?) is much faster.  But changing the syscall
interface is something that has to be done very delicately.... so the
"new" way of doing syscalls isn't using sysenter, which wouldn't work
everywhere etc.  It's "jump to this address in a preloaded DSO, on a
kernel-mapped high memory page".  It's simple, powerful, extensible. 

The kernel can do other neat things with it too.  For ia64 there's been
discussion of lightweight syscalls which can be implemented entirely
within that page.  Gettimeofday is the best example.  I think there are
some synchronization etc. issues with this (plus you lose strace
ability if you're not careful!) so it hasn't been done yet.

And this page can also be used for signal trampolines, and is on some
architectures.  Which is a beauteous and wonderful thing, because it
can provide DWARF-2 CFI information for the signal trampoline.

I suspect at least the signal trampolines and lightweight syscalls
could be useful on other architectures also.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


  reply	other threads:[~2003-10-06 15:43 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-03  4:27 Roland McGrath
2003-10-03 21:41 ` Jim Blandy
2003-10-03 21:45   ` Daniel Jacobowitz
2003-10-03 22:08   ` Roland McGrath
2003-10-03 22:19   ` Elena Zannoni
2003-10-03 23:00     ` Roland McGrath
2003-10-04 12:57       ` Elena Zannoni
2003-10-04 20:14         ` Roland McGrath
2003-10-07  1:42           ` Andrew Cagney
2003-10-03 22:34   ` Andrew Cagney
2003-10-03 23:02     ` Roland McGrath
2003-10-04 14:39       ` Andrew Cagney
2003-10-06 15:30   ` Jim Blandy
2003-10-06 15:43     ` Daniel Jacobowitz [this message]
2003-10-06 19:57       ` Roland McGrath
2003-10-07 23:32       ` Michael Snyder
  -- strict thread matches above, loose matches on Subject: below --
2004-04-08 22:38 Roland McGrath
2004-04-15 18:11 ` Jim Blandy
2004-04-15 18:49   ` Andrew Cagney
2004-04-15 21:42   ` Roland McGrath
2004-04-08 20:47 Roland McGrath
2004-04-08 22:13 ` Jim Blandy
2004-04-08 22:28   ` Roland McGrath
2004-04-08 22:32     ` Daniel Jacobowitz
2004-04-08 22:35   ` Andrew Cagney
2004-04-08 22:42     ` Roland McGrath
2004-04-15 18:52       ` Andrew Cagney
2004-02-12  0:34 Roland McGrath
2004-02-13 15:54 ` Andrew Cagney
2004-02-13 19:13   ` Roland McGrath
2004-02-02  3:38 Roland McGrath
2004-02-02  4:06 ` Daniel Jacobowitz
2004-02-02  4:47   ` Roland McGrath
2004-02-02 15:02     ` Daniel Jacobowitz
2004-02-02 23:31       ` Roland McGrath
2004-02-02 23:34         ` Daniel Jacobowitz
2004-02-02  6:19 ` Eli Zaretskii
2004-02-02  7:35   ` Roland McGrath
2004-02-02 17:29     ` Eli Zaretskii
2003-05-20  7:01 Roland McGrath

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=20031006154334.GA25069@nevyn.them.org \
    --to=drow@mvista.com \
    --cc=gdb-patches@sources.redhat.com \
    --cc=jimb@redhat.com \
    --cc=roland@redhat.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