From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23082 invoked by alias); 4 Aug 2009 18:19:31 -0000 Received: (qmail 23072 invoked by uid 22791); 4 Aug 2009 18:19:30 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from smtp-outbound-2.vmware.com (HELO smtp-outbound-2.vmware.com) (65.115.85.73) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 04 Aug 2009 18:19:24 +0000 Received: from jupiter.vmware.com (mailhost5.vmware.com [10.16.68.131]) by smtp-outbound-2.vmware.com (Postfix) with ESMTP id 9250A56002; Tue, 4 Aug 2009 11:19:22 -0700 (PDT) Received: from [10.20.94.141] (msnyder-server.eng.vmware.com [10.20.94.141]) by jupiter.vmware.com (Postfix) with ESMTP id 89607DC054; Tue, 4 Aug 2009 11:19:22 -0700 (PDT) Message-ID: <4A787B79.40901@vmware.com> Date: Tue, 04 Aug 2009 18:19:00 -0000 From: Michael Snyder User-Agent: Thunderbird 1.5.0.12 (X11/20080411) MIME-Version: 1.0 To: Hui Zhu CC: gdb-patches ml Subject: Re: [PREC/RFA] Add not_replay to make precord support release memory better References: <4A6B6E02.5080702@vmware.com> <4A74C90D.4040004@vmware.com> <4A766F30.2030000@vmware.com> <4A771EA8.80002@vmware.com> In-Reply-To: Content-Type: multipart/mixed; boundary="------------080608090001020907050703" X-IsSubscribed: yes 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: 2009-08/txt/msg00058.txt.bz2 This is a multi-part message in MIME format. --------------080608090001020907050703 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 829 Hui Zhu wrote: > On Tue, Aug 4, 2009 at 01:30, Michael Snyder wrote: >> Hui Zhu wrote: >>> The record_exec_entry don't have big contact with core dump patch. >>> >>> I think the new version is more clear. >> But we had this patch all worked out, and now you've added >> a bunch of new stuff to it. It's not a "new version" of the >> "add not_replay" patch, it's a whole new change. >> >> That's not the way we do it. If you want to add new stuff, >> you start a new thread, you don't add it into a thread that's >> already in review. >> >> > > OK. I got it. > > So the patch http://sourceware.org/ml/gdb-patches/2009-08/msg00006.html > looks OK. > Could you check it in? > > I will update dump patch after this patch in. > > Thanks, > Hui Thanks. Added some comments, and it's in as attached here. --------------080608090001020907050703 Content-Type: text/plain; name="accessible.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="accessible.txt" Content-length: 4036 2009-08-04 Hui Zhu Michael Snyder * record.c (record_mem_entry): New field 'mem_entry_not_accessible'. (record_arch_list_add_mem): Initialize 'mem_entry_not_accessible'. (record_wait): Set 'mem_entry_not_accessible' flag if target memory not readable. Don't try to change target memory if 'mem_entry_not_accessible' is set. Index: record.c =================================================================== RCS file: /cvs/src/src/gdb/record.c,v retrieving revision 1.9 diff -u -p -r1.9 record.c --- record.c 22 Jul 2009 05:31:26 -0000 1.9 +++ record.c 4 Aug 2009 18:17:15 -0000 @@ -51,6 +51,9 @@ struct record_mem_entry { CORE_ADDR addr; int len; + /* Set this flag if target memory for this entry + can no longer be accessed. */ + int mem_entry_not_accessible; gdb_byte *val; }; @@ -275,6 +278,7 @@ record_arch_list_add_mem (CORE_ADDR addr rec->type = record_mem; rec->u.mem.addr = addr; rec->u.mem.len = len; + rec->u.mem.mem_entry_not_accessible = 0; if (target_read_memory (addr, rec->u.mem.val, len)) { @@ -727,32 +731,55 @@ record_wait (struct target_ops *ops, else if (record_list->type == record_mem) { /* mem */ - gdb_byte *mem = alloca (record_list->u.mem.len); - if (record_debug > 1) - fprintf_unfiltered (gdb_stdlog, - "Process record: record_mem %s to " - "inferior addr = %s len = %d.\n", - host_address_to_string (record_list), - paddress (gdbarch, record_list->u.mem.addr), - record_list->u.mem.len); - - if (target_read_memory - (record_list->u.mem.addr, mem, record_list->u.mem.len)) - error (_("Process record: error reading memory at " - "addr = %s len = %d."), - paddress (gdbarch, record_list->u.mem.addr), - record_list->u.mem.len); - - if (target_write_memory - (record_list->u.mem.addr, record_list->u.mem.val, - record_list->u.mem.len)) - error (_ - ("Process record: error writing memory at " - "addr = %s len = %d."), - paddress (gdbarch, record_list->u.mem.addr), - record_list->u.mem.len); - - memcpy (record_list->u.mem.val, mem, record_list->u.mem.len); + /* Nothing to do if the entry is flagged not_accessible. */ + if (!record_list->u.mem.mem_entry_not_accessible) + { + gdb_byte *mem = alloca (record_list->u.mem.len); + if (record_debug > 1) + fprintf_unfiltered (gdb_stdlog, + "Process record: record_mem %s to " + "inferior addr = %s len = %d.\n", + host_address_to_string (record_list), + paddress (gdbarch, + record_list->u.mem.addr), + record_list->u.mem.len); + + if (target_read_memory (record_list->u.mem.addr, mem, + record_list->u.mem.len)) + { + if (execution_direction != EXEC_REVERSE) + error (_("Process record: error reading memory at " + "addr = %s len = %d."), + paddress (gdbarch, record_list->u.mem.addr), + record_list->u.mem.len); + else + /* Read failed -- + flag entry as not_accessible. */ + record_list->u.mem.mem_entry_not_accessible = 1; + } + else + { + if (target_write_memory (record_list->u.mem.addr, + record_list->u.mem.val, + record_list->u.mem.len)) + { + if (execution_direction != EXEC_REVERSE) + error (_("Process record: error writing memory at " + "addr = %s len = %d."), + paddress (gdbarch, record_list->u.mem.addr), + record_list->u.mem.len); + else + /* Write failed -- + flag entry as not_accessible. */ + record_list->u.mem.mem_entry_not_accessible = 1; + } + else + { + memcpy (record_list->u.mem.val, mem, + record_list->u.mem.len); + } + } + } } else { --------------080608090001020907050703--