From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8738 invoked by alias); 31 Jan 2012 11:26:22 -0000 Received: (qmail 8728 invoked by uid 22791); 31 Jan 2012 11:26:21 -0000 X-SWARE-Spam-Status: No, hits=-0.6 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 31 Jan 2012 11:26:08 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1RsBqh-0003b7-5t from Hui_Zhu@mentor.com for gdb-patches@sourceware.org; Tue, 31 Jan 2012 03:26:07 -0800 Received: from SVR-ORW-FEM-03.mgc.mentorg.com ([147.34.97.39]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 31 Jan 2012 03:25:45 -0800 Received: from [127.0.0.1] (147.34.91.1) by svr-orw-fem-03.mgc.mentorg.com (147.34.97.39) with Microsoft SMTP Server id 14.1.289.1; Tue, 31 Jan 2012 03:26:05 -0800 Message-ID: <4F27CFCA.9050203@mentor.com> Date: Tue, 31 Jan 2012 13:06:00 -0000 From: Hui Zhu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:9.0) Gecko/20111220 Thunderbird/9.0 MIME-Version: 1.0 To: Yao Qi CC: Subject: Re: [PATCH] Fix error when gdb connect to a stub that tracepoint is running[1/2] reset current_trace_status in the begin of remote_start_remote References: <4F274C42.7010008@mentor.com> <4F27A4AD.9020608@codesourcery.com> In-Reply-To: <4F27A4AD.9020608@codesourcery.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit 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: 2012-01/txt/msg01012.txt.bz2 Hi Yao, Thanks for you review. I have 2 ideas with your mail: 1. If we want move merge_uploaded_tracepoints (&uploaded_tps); to the begin, I think all the code about tracepoint should move to the begin of this function. /* Possibly the target has been engaged in a trace run started previously; find out where things are at. */ if (remote_get_trace_status (current_trace_status ()) != -1) { struct uploaded_tp *uploaded_tps = NULL; struct uploaded_tsv *uploaded_tsvs = NULL; if (current_trace_status ()->running) printf_filtered (_("Trace is already running on the target.\n")); /* Get trace state variables first, they may be checked when parsing uploaded commands. */ remote_upload_trace_state_variables (&uploaded_tsvs); merge_uploaded_trace_state_variables (&uploaded_tsvs); remote_upload_tracepoints (&uploaded_tps); merge_uploaded_tracepoints (&uploaded_tps); } 2. But I think move the code before start_remote is not very well. Because the code before tracepoint code do a lot of init work, maybe move it will bring more issues to current code. Best, Hui On 01/31/12 16:22, Yao Qi wrote: > On 01/31/2012 10:04 AM, Hui Zhu wrote: >> #9 0x00000000006cc8e5 in post_create_inferior (target=0x1d1e860, >> from_tty=1) at ../../src/gdb/infcmd.c:431 >> #10 0x00000000006d479d in start_remote (from_tty=1) at >> ../../src/gdb/infrun.c:2309 >> #11 0x00000000005d80c9 in remote_start_remote (from_tty=1, >> target=0x1cefce0, extended_p=0) >> at ../../src/gdb/remote.c:3367 >> >> About this patch, what I do is: >> 1. If we try to connect an new stub, reset current_trace_status to unknown. >> 2. Change remote_can_download_tracepoint to if the current_trace_status >> is unknown, return false. >> After this patch, the tracepoint insered after: >> /* Possibly the target has been engaged in a trace run started >> previously; find out where things are at. */ >> if (remote_get_trace_status (current_trace_status ()) != -1) >> { >> I think that will make us handle tracepoint issue more easy. > > It is caused by setting `inserted' flag improperly, but I have some > different understanding on the cause of improper-set-of-inserted-flag. > > As you posted, the call stack is, > > remote_start_remote > | > +--> start_remote > | | > | `--> .... [1] > `--> merge_uploaded_tracepoints > > Error occurs in the callees of [1]. In fact, the `inserted' flag will > be set in merge_uploaded_tracepoints, if it has been in remote target > (See merge_uploaded_tracepoints). The intention of these bits is to > mark tracepoint bp_locations as `inserted' to avoid inserting them > again. The root cause is that we use the `inserted' flag (in calleees > of [1]) prior to setting it properly (in merge_uploaded_tracepoints), so > the fix to this problem is moving merge_uploaded_tracepoints prior to > start_remote. I drafted a patch in this way, and fixed the problem you > posted. > > Patch attached is used to illustrate my thought to fix this problem. I > am not confident on it because I don't know it is correct to change the > order of function calls in remote_start_remote. The "non stop" path in > remote_start_remote is not affected by this patch. In the "stop" path, > the order of some functions call is changed, but don't know they are > equivalent. > > Original Patched > > start_remote merge_uploaded_tracepoints > remote_check_symbols start_remote > merge_uploaded_tracepoints remote_check_symbols >