From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21915 invoked by alias); 4 Sep 2008 01:44:51 -0000 Received: (qmail 21905 invoked by uid 22791); 4 Sep 2008 01:44:51 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate2.de.ibm.com (HELO mtagate2.de.ibm.com) (195.212.17.162) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 04 Sep 2008 01:44:07 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate2.de.ibm.com (8.13.1/8.13.1) with ESMTP id m841i4et025004 for ; Thu, 4 Sep 2008 01:44:04 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v9.0) with ESMTP id m841i3Qc3674168 for ; Thu, 4 Sep 2008 03:44:03 +0200 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m841i3qw013557 for ; Thu, 4 Sep 2008 03:44:03 +0200 Received: from tuxmaker.boeblingen.de.ibm.com (tuxmaker.boeblingen.de.ibm.com [9.152.85.9]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with SMTP id m841i3lp013554 for ; Thu, 4 Sep 2008 03:44:03 +0200 Message-Id: <200809040144.m841i3lp013554@d12av02.megacenter.de.ibm.com> Received: by tuxmaker.boeblingen.de.ibm.com (sSMTP sendmail emulation); Thu, 4 Sep 2008 03:44:03 +0200 Subject: [rfc] Do not inherit to_open and to_close To: gdb-patches@sourceware.org Date: Thu, 04 Sep 2008 01:44:00 -0000 From: "Ulrich Weigand" X-Mailer: ELM [version 2.5 PL2] MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-09/txt/msg00060.txt.bz2 Hello, I've run into a problem where the pop_all_targets_above (file_stratum, 0) call in target_preopen actually removed the exec target -- even though it is explicitly supposed to leave it present. This turned out to be the case because the exec_close routine had been inherited by one of the targets higher on the stack -- so the target_close routine called on that higher target would actually close the exec target! It seems to me that the to_close method simply must never be inherited (and likewise it does not make sense to inherit the to_open method). The following patch implements this change. Tested on powerpc-linux, powerpc64-linux and spu-elf with no regressions. Any comments? Am I overlooking something here? Bye, Ulrich ChangeLog: * target.c (update_current_target): Do not inherit t_open or to_close. (pop_target): Call target_close on target_stack instead of current_target. (pop_all_targets_above): Likewise. diff -urNp gdb-orig/gdb/target.c gdb-head/gdb/target.c --- gdb-orig/gdb/target.c 2008-09-02 23:19:50.000000000 +0200 +++ gdb-head/gdb/target.c 2008-09-04 03:13:11.973736135 +0200 @@ -385,8 +385,8 @@ update_current_target (void) INHERIT (to_shortname, t); INHERIT (to_longname, t); INHERIT (to_doc, t); - INHERIT (to_open, t); - INHERIT (to_close, t); + /* Do not inherit to_open. */ + /* Do not inherit to_close. */ INHERIT (to_attach, t); INHERIT (to_post_attach, t); INHERIT (to_attach_no_wait, t); @@ -784,7 +784,7 @@ unpush_target (struct target_ops *t) void pop_target (void) { - target_close (¤t_target, 0); /* Let it clean up */ + target_close (target_stack, 0); /* Let it clean up */ if (unpush_target (target_stack) == 1) return; @@ -799,12 +799,12 @@ pop_all_targets_above (enum strata above { while ((int) (current_target.to_stratum) > (int) above_stratum) { - target_close (¤t_target, quitting); + target_close (target_stack, quitting); if (!unpush_target (target_stack)) { fprintf_unfiltered (gdb_stderr, "pop_all_targets couldn't find target %s\n", - current_target.to_shortname); + target_stack->to_shortname); internal_error (__FILE__, __LINE__, _("failed internal consistency check")); break; -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE Ulrich.Weigand@de.ibm.com