This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: ia64-tdep.c:get_kernel_table() not working


Patch checked in. Thanks David for the heads-up for 2.6 as well.

-- Jeff J.

David Mosberger wrote:
 > There may be something else that's off: even if I use a workaround (by
 > calling getunwind() directly from get_kernel_table()), gdb is still
 > unable to unwind across a signal handler.

Actually, the attached patch fixes the problem.  The patch is definitely
needed (ever since we supported 64KB pages, which was a long time ago),
but it _shouldn't_ make a difference for when libunwind is in use
(as is the case for me).  With libunwind, it's better to use

unw_is_signal_frame()

to implement ia64_linux_in_sigtramp() (actually, apart from printing a
nicer name, no special handling should be needed by gdb to unwind
across a signal trampoline if libunwind is in use).

Anyhow, unw_is_signal_frame() is the only reliable way to determine
whether we're in a signal frame.  The same code range that is being
currently checked by ia64_linux_in_sigtramp() is also used for
light-weight system calls and hence it will start to return false
positives as light-weight system-call enabled glibc become more
widespread (which will happen soon, now that 2.6.0 is out and CVS
glibc has the necessary support).

Thanks,

--david

Index: ia64-linux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/ia64-linux-tdep.c,v
retrieving revision 1.4
diff -u -r1.4 ia64-linux-tdep.c
--- ia64-linux-tdep.c 15 Oct 2003 22:55:32 -0000 1.4
+++ ia64-linux-tdep.c 21 Dec 2003 09:34:16 -0000
@@ -29,7 +29,7 @@
overly generous to allow for different pages sizes. */
#define GATE_AREA_START 0xa000000000000100LL
-#define GATE_AREA_END 0xa000000000010000LL
+#define GATE_AREA_END 0xa000000000020000LL
/* Offset to sigcontext structure from frame of handler */
#define IA64_LINUX_SIGCONTEXT_OFFSET 192




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]