ia64-tdep.c:get_kernel_table() not working

David Mosberger davidm@napali.hpl.hp.com
Sun Dec 21 09:41:00 GMT 2003


 > 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



More information about the Gdb-patches mailing list