From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26040 invoked by alias); 6 May 2006 06:30:19 -0000 Received: (qmail 26031 invoked by uid 22791); 6 May 2006 06:30:18 -0000 X-Spam-Check-By: sourceware.org Received: from dsl027-180-168.sfo1.dsl.speakeasy.net (HELO sunset.davemloft.net) (216.27.180.168) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sat, 06 May 2006 06:30:16 +0000 Received: from localhost ([127.0.0.1] ident=davem) by sunset.davemloft.net with esmtp (Exim 4.60) (envelope-from ) id 1FcGIl-0001xq-Ob; Fri, 05 May 2006 23:30:03 -0700 Date: Sat, 06 May 2006 06:30:00 -0000 Message-Id: <20060505.233000.75792293.davem@davemloft.net> To: drow@false.org Cc: uweigand@de.ibm.com, gdb-patches@sourceware.org Subject: Re: [committed] Fix gcore crashes on s390 From: "David S. Miller" In-Reply-To: <20060506015642.GB12668@nevyn.them.org> References: <200605060118.k461IpKO009920@d12av02.megacenter.de.ibm.com> <20060505.183205.74231759.davem@davemloft.net> <20060506015642.GB12668@nevyn.them.org> X-Mailer: Mew version 4.2.53 on Emacs 21.4 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2006-05/txt/msg00141.txt.bz2 From: Daniel Jacobowitz Date: Fri, 5 May 2006 21:56:42 -0400 > I guess we're going to have to check the collect_regset function > pointer for NULL then. David, would you mind making that change? I'll note in passing that we're back to the original patch I wrote :-) Ok to commit? 2006-05-05 David S. Miller * linux-nat.c (linux_nad_do_thread_registers): Check for NULL collect_regset method. Index: linux-nat.c =================================================================== RCS file: /cvs/src/src/gdb/linux-nat.c,v retrieving revision 1.46 diff -u -p -r1.46 linux-nat.c --- linux-nat.c 5 May 2006 23:48:28 -0000 1.46 +++ linux-nat.c 6 May 2006 06:27:37 -0000 @@ -2549,70 +2549,52 @@ linux_nat_do_thread_registers (bfd *obfd unsigned long lwp = ptid_get_lwp (ptid); struct gdbarch *gdbarch = current_gdbarch; const struct regset *regset; - int core_regset_p, record_reg_p; + int core_regset_p; core_regset_p = gdbarch_regset_from_core_section_p (gdbarch); - record_reg_p = 1; - if (core_regset_p) - { - regset = gdbarch_regset_from_core_section (gdbarch, ".reg", - sizeof (gregs)); - if (regset) - regset->collect_regset (regset, current_regcache, -1, - &gregs, sizeof (gregs)); - else - record_reg_p = 0; - } + if (core_regset_p + && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg", + sizeof (gregs))) != NULL + && regset->collect_regset != NULL) + regset->collect_regset (regset, current_regcache, -1, + &gregs, sizeof (gregs)); else fill_gregset (&gregs, -1); - if (record_reg_p) - note_data = (char *) elfcore_write_prstatus (obfd, - note_data, - note_size, - lwp, - stop_signal, &gregs); - - record_reg_p = 1; - if (core_regset_p) - { - regset = gdbarch_regset_from_core_section (gdbarch, ".reg2", - sizeof (fpregs)); - if (regset) - regset->collect_regset (regset, current_regcache, -1, - &fpregs, sizeof (fpregs)); - else - record_reg_p = 0; - } + note_data = (char *) elfcore_write_prstatus (obfd, + note_data, + note_size, + lwp, + stop_signal, &gregs); + + if (core_regset_p + && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2", + sizeof (fpregs))) != NULL + && regset->collect_regset != NULL) + regset->collect_regset (regset, current_regcache, -1, + &fpregs, sizeof (fpregs)); else fill_fpregset (&fpregs, -1); - if (record_reg_p) - note_data = (char *) elfcore_write_prfpreg (obfd, - note_data, - note_size, - &fpregs, sizeof (fpregs)); + note_data = (char *) elfcore_write_prfpreg (obfd, + note_data, + note_size, + &fpregs, sizeof (fpregs)); #ifdef FILL_FPXREGSET - record_reg_p = 1; - if (core_regset_p) - { - regset = gdbarch_regset_from_core_section (gdbarch, ".reg-xfp", - sizeof (fpxregs)); - if (regset) - regset->collect_regset (regset, current_regcache, -1, - &fpxregs, sizeof (fpxregs)); - else - record_reg_p = 0; - } + if (core_regset_p + && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg-xfp", + sizeof (fpxregs))) != NULL + && regset->collect_regset != NULL) + regset->collect_regset (regset, current_regcache, -1, + &fpxregs, sizeof (fpxregs)); else fill_fpxregset (&fpxregs, -1); - if (record_reg_p) - note_data = (char *) elfcore_write_prxfpreg (obfd, - note_data, - note_size, - &fpxregs, sizeof (fpxregs)); + note_data = (char *) elfcore_write_prxfpreg (obfd, + note_data, + note_size, + &fpxregs, sizeof (fpxregs)); #endif return note_data; }