Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Andi Kleen <ak@suse.de>
Cc: Andreas Jaeger <aj@suse.de>,
	Mark Kettenis <mark.kettenis@xs4all.nl>,
		gdb@sourceware.org, libc-alpha@sourceware.org
Subject: Re: Notes on a frame_unwind_address_in_block problem
Date: Thu, 03 Aug 2006 02:48:00 -0000	[thread overview]
Message-ID: <20060803024819.GA6543@nevyn.them.org> (raw)
In-Reply-To: <200608030438.18827.ak@suse.de>

On Thu, Aug 03, 2006 at 04:38:18AM +0200, Andi Kleen wrote:
> On Thursday 03 August 2006 04:04, Daniel Jacobowitz wrote:
> > On Tue, Jul 18, 2006 at 02:35:20PM -0400, Daniel Jacobowitz wrote:
> > > The only caveat is that it is in glibc, but knows about the kernel
> > > layout of struct rt_sigframe - specifically that a struct ucontext
> > > lives just above the SA_RESTORER return address.  Andi, what do you
> > > think of that?  If it's a bad idea, we may need a different approach
> > > (i.e. a vdso).
> 
> Missing context a bit. What exactly is the problem?

Here's some context:
  http://sourceware.org/ml/gdb/2006-07/msg00131.html

Basically, right now x86_64 signal delivery always uses SA_RESTORER.
Glibc provides the restorer.  It has some minimal, incorrect unwind
information.  If I remove the unwind information entirely from glibc,
GDB will know how to do the right thing through a signal handler - but
other unwinding scenarios like _Unwind_Backtrace won't.

I can add correct unwinding information but it would know about the
layout of rt_sigframe, and that's not always considered a public ABI.

Alternatively, I could do this the long way: add an ELF vDSO in
addition to the vsyscall pages, put syscall return trampolines there,
have glibc use those if available.

But I don't want to do either of those without checking with you;
one is an ABI issue, the other is a huge amount more work than I was
planning to do to fix the bug.

> We'll get a vDSO with kernel supplied unwind sectins sooner or later, but 
> you'll have to handle the old vsyscall without unwinding anyways because 
> it's not going to go away.
> 
> Also even the vDSO might end up without unwind information when compiled
> with old compilers because I don't plan to support it without .cfi_*
> support in binutils.

Fortunately I don't have to worry about this.  The vsyscall pages
aren't on the signal path and if you use an old compiler to build
your kernel, this will just break.  Considering how long it's already
been broken...

But, FYI, you can't actually write the unwind tables for these using
.cfi_* directives.  I tried.  I'd need at least three new directives
to do it sanely (for uleb128 escapes, sleb128 escapes, and adding the
"S" augmentation).  So I did it by hand, basically copied from the
i386 vDSO, but simpler since we don't need any pushes or pops.

-- 
Daniel Jacobowitz
CodeSourcery


  reply	other threads:[~2006-08-03  2:48 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-06 22:22 Daniel Jacobowitz
2006-07-13 20:20 ` Mark Kettenis
2006-07-17  7:30   ` Andreas Jaeger
2006-07-17 13:15     ` Mark Kettenis
2006-07-17 13:20       ` Daniel Jacobowitz
2006-07-18  9:48         ` Andreas Jaeger
2006-07-18 18:39           ` Daniel Jacobowitz
2006-08-03  2:04             ` Daniel Jacobowitz
2006-08-03  2:38               ` Andi Kleen
2006-08-03  2:48                 ` Daniel Jacobowitz [this message]
2006-08-03  3:12                   ` Andi Kleen
2006-08-03  3:21                     ` Daniel Jacobowitz
2006-08-03  3:29                       ` Andi Kleen
2006-08-03 13:27                         ` Daniel Jacobowitz
2006-08-18 15:08                       ` Andreas Jaeger
2006-08-18 15:15                         ` Daniel Jacobowitz
2006-08-21  8:50                           ` Andreas Jaeger
2006-08-21 14:19                             ` Ulrich Drepper
2006-08-21 14:52                               ` Daniel Jacobowitz
2006-07-18 18:50   ` Daniel Jacobowitz

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=20060803024819.GA6543@nevyn.them.org \
    --to=drow@false.org \
    --cc=aj@suse.de \
    --cc=ak@suse.de \
    --cc=gdb@sourceware.org \
    --cc=libc-alpha@sourceware.org \
    --cc=mark.kettenis@xs4all.nl \
    /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