From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17679 invoked by alias); 8 Mar 2004 18:06:41 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 17625 invoked from network); 8 Mar 2004 18:06:39 -0000 Received: from unknown (HELO rwcrmhc12.comcast.net) (216.148.227.85) by sources.redhat.com with SMTP; 8 Mar 2004 18:06:39 -0000 Received: from new.localdomain (h00e098094f32.ne.client2.attbi.com[24.60.234.83]) by comcast.net (rwcrmhc12) with ESMTP id <20040308180637014008d6gpe> (Authid: houston.jim); Mon, 8 Mar 2004 18:06:38 +0000 Date: Mon, 08 Mar 2004 18:06:00 -0000 Message-Id: From: Jim Houston To: gdb-patches@sources.redhat.com Subject: [patch] allow switching stacks Reply-to: jim.houston@comcast.net X-SW-Source: 2004-03.o/txt/msg00166.txt Hi Everyone, This patch against gdb-6.0 adds an option to disable an error check which reports a non-contiguous stack as corrupted. I need this option to get a reliable stack trace using kgdb on the x86-64 Linux kernel because it uses a separate per-processor interrupt stack. This option is enabled with: set backtrace switch-stacks on Jim Houston - Concurrent Computer Corp. - diff -urN old/gdb-6.0/gdb/frame.c new/gdb-6.0/gdb/frame.c --- old/gdb-6.0/gdb/frame.c 2003-12-31 15:27:45.866840920 -0500 +++ new/gdb-6.0/gdb/frame.c 2003-12-31 15:27:58.310949128 -0500 @@ -138,6 +138,7 @@ /* Flag to indicate whether backtraces should stop at main et.al. */ static int backtrace_past_main; +static int backtrace_switch_stacks; static unsigned int backtrace_limit = UINT_MAX; @@ -1971,7 +1972,7 @@ the next frame. This happens when a frame unwind goes backwards. Since the sentinel frame doesn't really exist, don't compare the inner-most against that sentinel. */ - if (this_frame->level > 0 + if (!backtrace_switch_stacks && this_frame->level > 0 && frame_id_inner (get_frame_id (this_frame), get_frame_id (this_frame->next))) error ("Previous frame inner to this frame (corrupt stack?)"); @@ -2461,6 +2462,19 @@ NULL, NULL, &set_backtrace_cmdlist, &show_backtrace_cmdlist); + add_setshow_boolean_cmd ("switch-stacks", class_obscure, + &backtrace_switch_stacks, "\ +Set if thread may use multiple stacks. This flag disables checks in\n\ +the stack trace which expect that the stack grew in a consistent direction.\n\ +This option is needed for kernel debug when the kernel has separate\n\ +process and interrupt stacks.", "\ +Show if thread may use multiple stacks. This flag disables checks in\n\ +the stack trace which expect that the stack grew in a consistent direction.\n\ +This option is needed for kernel debug when the kernel has separate\n\ +process and interrupt stacks.", + NULL, NULL, &set_backtrace_cmdlist, + &show_backtrace_cmdlist); + add_setshow_uinteger_cmd ("limit", class_obscure, &backtrace_limit, "\ Set an upper bound on the number of backtrace levels.\n\ From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17679 invoked by alias); 8 Mar 2004 18:06:41 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 17625 invoked from network); 8 Mar 2004 18:06:39 -0000 Received: from unknown (HELO rwcrmhc12.comcast.net) (216.148.227.85) by sources.redhat.com with SMTP; 8 Mar 2004 18:06:39 -0000 Received: from new.localdomain (h00e098094f32.ne.client2.attbi.com[24.60.234.83]) by comcast.net (rwcrmhc12) with ESMTP id <20040308180637014008d6gpe> (Authid: houston.jim); Mon, 8 Mar 2004 18:06:38 +0000 Date: Fri, 19 Mar 2004 00:09:00 -0000 Message-ID: From: Jim Houston To: gdb-patches@sources.redhat.com Subject: [patch] allow switching stacks Reply-to: jim.houston@comcast.net X-SW-Source: 2004-03/txt/msg00166.txt.bz2 Message-ID: <20040319000900.zlKyXXDMiw4_DScYZ95U52VxsSmC_jrloKAUE0cF8kM@z> Hi Everyone, This patch against gdb-6.0 adds an option to disable an error check which reports a non-contiguous stack as corrupted. I need this option to get a reliable stack trace using kgdb on the x86-64 Linux kernel because it uses a separate per-processor interrupt stack. This option is enabled with: set backtrace switch-stacks on Jim Houston - Concurrent Computer Corp. - diff -urN old/gdb-6.0/gdb/frame.c new/gdb-6.0/gdb/frame.c --- old/gdb-6.0/gdb/frame.c 2003-12-31 15:27:45.866840920 -0500 +++ new/gdb-6.0/gdb/frame.c 2003-12-31 15:27:58.310949128 -0500 @@ -138,6 +138,7 @@ /* Flag to indicate whether backtraces should stop at main et.al. */ static int backtrace_past_main; +static int backtrace_switch_stacks; static unsigned int backtrace_limit = UINT_MAX; @@ -1971,7 +1972,7 @@ the next frame. This happens when a frame unwind goes backwards. Since the sentinel frame doesn't really exist, don't compare the inner-most against that sentinel. */ - if (this_frame->level > 0 + if (!backtrace_switch_stacks && this_frame->level > 0 && frame_id_inner (get_frame_id (this_frame), get_frame_id (this_frame->next))) error ("Previous frame inner to this frame (corrupt stack?)"); @@ -2461,6 +2462,19 @@ NULL, NULL, &set_backtrace_cmdlist, &show_backtrace_cmdlist); + add_setshow_boolean_cmd ("switch-stacks", class_obscure, + &backtrace_switch_stacks, "\ +Set if thread may use multiple stacks. This flag disables checks in\n\ +the stack trace which expect that the stack grew in a consistent direction.\n\ +This option is needed for kernel debug when the kernel has separate\n\ +process and interrupt stacks.", "\ +Show if thread may use multiple stacks. This flag disables checks in\n\ +the stack trace which expect that the stack grew in a consistent direction.\n\ +This option is needed for kernel debug when the kernel has separate\n\ +process and interrupt stacks.", + NULL, NULL, &set_backtrace_cmdlist, + &show_backtrace_cmdlist); + add_setshow_uinteger_cmd ("limit", class_obscure, &backtrace_limit, "\ Set an upper bound on the number of backtrace levels.\n\