From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19255 invoked by alias); 24 Sep 2003 18:10:12 -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 11528 invoked from network); 24 Sep 2003 16:42:41 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 24 Sep 2003 16:42:41 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h8OGge100491 for ; Wed, 24 Sep 2003 12:42:40 -0400 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h8OGgdc01612 for ; Wed, 24 Sep 2003 12:42:39 -0400 Received: from localhost.redhat.com (devserv.devel.redhat.com [172.16.58.1]) by pobox.corp.redhat.com (8.12.8/8.12.8) with ESMTP id h8OGgceX011107 for ; Wed, 24 Sep 2003 12:42:39 -0400 Received: by localhost.redhat.com (Postfix, from userid 469) id 87CB22CC8B; Wed, 24 Sep 2003 12:52:20 -0400 (EDT) From: Elena Zannoni MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16241.52164.339042.549189@localhost.redhat.com> Date: Wed, 24 Sep 2003 18:10:00 -0000 To: gdb-patches@sources.redhat.com Subject: [RFA] gcore/linux-proc fix X-SW-Source: 2003-09/txt/msg00528.txt.bz2 This patch fixes some problems with the gcore command on single threaded programs. Before the patch, the core file did not report anywhere the PID of the process: CORE 144 PRSTATUS SIGINFO: signo: 0, code = 0, errno = 0 signal: 0, pending: 00000000, holding: 00000000 pid: 0, ppid = 0, pgrp = 0, sid = 0 ^^^^^^^^^ utime: 0.000000s, stime: 0.000000s cutime: 0.000000s, cstime: 0.000000s eax: fffffffc ebx: bfffc4a4 ecx: bfffc4a4 edx: b75d79f8 esi: bfffc5bc edi: bfffc53c ebp: bfffc648 esp: bfffc484 eip: b75ebc02 eflags: 00000246, original eax: 000000a2 cs: 0023 ds: 002b es: 002b fs: 0000 gs: 0033 ss: 002b after the patch: CORE 144 PRSTATUS SIGINFO: signo: 0, code = 0, errno = 0 signal: 0, pending: 00000000, holding: 00000000 pid: 5846, ppid = 0, pgrp = 0, sid = 0 ^^^^^^^^^^^^ utime: 0.000000s, stime: 0.000000s cutime: 0.000000s, cstime: 0.000000s eax: fffffffc ebx: bffff674 ecx: bffff674 edx: b75d79f8 esi: bffff78c edi: bffff70c ebp: bffff818 esp: bffff654 eip: b75ebc02 eflags: 00000246, original eax: 000000a2 cs: 0023 ds: 002b es: 002b fs: 0000 gs: 0033 ss: 002b CORE 108 FPREGSET LINUX 512 : 1189489535 Note also that if the function to write the note section is called via the iterator for multi-threaded programs (i.e. linux_corefile_thread_callback), registers_changed()/target_fetch_registers() are called, but if invoked directly for the single-threaded case, registers_changed()/target_fetch_registers() are not called. So I added a wrapper to do that. It all works fine with multi-threaded apps. elena 2003-09-24 Elena Zannoni * linux-proc.c (linux_do_registers): New function. (linux_make_note_section): Use linux_do_registers in case of single threaded inferior programs. Index: linux-proc.c =================================================================== RCS file: /cvs/src/src/gdb/linux-proc.c,v retrieving revision 1.15 diff -u -p -r1.15 linux-proc.c --- linux-proc.c 19 Jun 2003 22:52:03 -0000 1.15 +++ linux-proc.c 24 Sep 2003 16:33:07 -0000 @@ -233,6 +234,26 @@ linux_corefile_thread_callback (struct l return 0; } +/* Function: linux_do_registers + * + * Records the register state for the corefile note section. + */ + +static char * +linux_do_registers (bfd *obfd, ptid_t ptid, + char *note_data, int *note_size) +{ + registers_changed (); + target_fetch_registers (-1); /* FIXME should not be necessary; + fill_gregset should do it automatically. */ + return linux_do_thread_registers (obfd, + ptid_build (ptid_get_pid (inferior_ptid), + ptid_get_pid (inferior_ptid), + 0), + note_data, note_size); + return note_data; +} + /* Function: linux_make_note_section * * Fills the "to_make_corefile_note" target vector. @@ -275,8 +296,8 @@ linux_make_note_section (bfd *obfd, int { /* iterate_over_threads didn't come up with any threads; just use inferior_ptid. */ - note_data = linux_do_thread_registers (obfd, inferior_ptid, - note_data, note_size); + note_data = linux_do_registers (obfd, inferior_ptid, + note_data, note_size); } else {