From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cagney To: Andrew Cagney Cc: Mark Kettenis , drow@false.org, gdb-patches@sources.redhat.com, roland@redhat.com Subject: Re: Revamp sniffer; Was: [obish?sym;rfa:doc] Wire up vsyscall Date: Tue, 25 May 2004 22:55:00 -0000 Message-id: <40B3CEC0.2070405@gnu.org> References: <409A8C2A.2010605@gnu.org> <409AA61F.8050807@gnu.org> <20040507012549.GA30182@nevyn.them.org> <409FF3D7.5000106@gnu.org> <200405102140.i4ALe13A001092@elgar.kettenis.dyndns.org> <20040511145344.GA15501@nevyn.them.org> <40A0FFB1.8030407@gnu.org> <20040511172619.GA19487@nevyn.them.org> <40A16FA1.9060506@gnu.org> <200405152057.i4FKvdt2000817@elgar.kettenis.dyndns.org> <40A8F308.9040900@gnu.org> X-SW-Source: 2004-05/msg00725.html Mark, Want do you want to do here? Commit daniel's patch for the short term while I clean this up proper over the medium term (appending it to the vsyscall list)? Andrew ---  Begin Message  --- >From : Andrew Cagney To : Mark Kettenis Cc : drow at false dot org, gdb-patches at sources dot redhat dot com, roland at redhat dot com Date : Mon, 17 May 2004 13:14:48 -0400 Subject : Revamp sniffer; Was: [obish?sym;rfa:doc] Wire up vsyscall Delivery-date : Mon, 17 May 2004 14:17:10 -0400 Envelope-to : cagney@gnu.org References : < 409A8C2A.2010605@gnu.org > < 409AA61F.8050807@gnu.org > < 20040507012549.GA30182@nevyn.them.org > < 409FF3D7.5000106@gnu.org > < 200405102140.i4ALe13A001092@elgar.kettenis.dyndns.org > < 20040511145344.GA15501@nevyn.them.org > < 40A0FFB1.8030407@gnu.org > < 20040511172619.GA19487@nevyn.them.org > < 40A16FA1.9060506@gnu.org > < 200405152057.i4FKvdt2000817@elgar.kettenis.dyndns.org > 2004-01-25 Daniel Jacobowitz * i386-tdep.c (i386_gdbarch_init): Check for signal frame first. * i386-linux-tdep.c (i386_linux_pc_in_sigtramp): Handle __kernel_sigreturn. [...] I'm somewhat reluctant to throw the CFI completely overboard. Yes. How about extending the DWARF2 unwinder such that we can set the [SIGTRAMP_FRAME] attribute based on the function's name? The frame attributes (tramp et.al.) in many cases are orthogonal to the unwind mechanism, but sometimes they are not). At present the frame sniffer is focused solely on identifying and returning an unwinder. The frame's type being identified as an unexpected sid effect. I think this should be inverted vis: frame_sniffer () -> - attributes - unwinder (or NULL, indicating sniff for unwinder) - base (or NULL, indicating sniff for base) - ... so while the type is determined up front, other things are optional. That way here the tramp code would look like: if (name == _kernel_sigreturn) if (cfi at address) return { attribute=TRAMP; unwinder=cfi_unwinder; base=NULL }; else return { attribute=TRAMP; unwinder=alt_unwinder; base=NULL }; this also opens the way for us doing: if (name == solib-trampoline) return { attribute=TRAMP|CALLEE; unwinder=NULL; base=NULL } i.e., it's a trampoline (need to skip it) but let something more generic identify the unwinder. Andrew ---  End Message  ---