From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 91279 invoked by alias); 29 Mar 2017 14:11:45 -0000 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 Received: (qmail 91269 invoked by uid 89); 29 Mar 2017 14:11:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-spam-relays-external:sk:EUR03-A, H*RU:sk:EUR03-A, H*r:sk:EUR03-A X-HELO: sessmg22.ericsson.net Received: from sessmg22.ericsson.net (HELO sessmg22.ericsson.net) (193.180.251.58) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 29 Mar 2017 14:11:42 +0000 Received: from ESESSHC011.ericsson.se (Unknown_Domain [153.88.183.51]) by (Symantec Mail Security) with SMTP id 9E.12.14680.B90CBD85; Wed, 29 Mar 2017 16:11:41 +0200 (CEST) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.51) with Microsoft SMTP Server (TLS) id 14.3.339.0; Wed, 29 Mar 2017 16:11:38 +0200 Authentication-Results: sourceware.org; dkim=none (message not signed) header.d=none;sourceware.org; dmarc=none action=none header.from=ericsson.com; Received: from elxa4wqvvz1 (192.75.88.130) by HE1PR0701MB1882.eurprd07.prod.outlook.com (10.167.247.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1005.2; Wed, 29 Mar 2017 14:11:36 +0000 References: <20161129120702.9490-1-antoine.tremblay@ericsson.com> <20170127150139.GB24676@E107787-LIN> <2255ed6f-a146-026c-f871-00e9a33dfcf0@redhat.com> User-agent: mu4e 0.9.19; emacs 25.1.1 From: Antoine Tremblay To: Yao Qi CC: Antoine Tremblay , Pedro Alves , "gdb-patches@sourceware.org" Subject: Re: [PATCH 1/2] This patch fixes GDBServer's run control for single stepping In-Reply-To: Date: Wed, 29 Mar 2017 14:11:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit X-ClientProxiedBy: DM5PR09CA0037.namprd09.prod.outlook.com (10.172.184.151) To HE1PR0701MB1882.eurprd07.prod.outlook.com (10.167.247.22) X-MS-Office365-Filtering-Correlation-Id: 98455eed-0cb5-4cfe-c3e6-08d476ad837a X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:HE1PR0701MB1882; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB1882;3:WEqMSuDh6mNdXYWJNlkPfSboeOQmTmRUy/T3J3SonhcteYL5X/U3SkfEXhADCojOqbIynwBQC5jZVwHJmLT3Z6RAsc5810egJHHuUBsRaXKpDZhjy7dFfKxmoMwZRfNT59c+ZFqtxxJ1iJFySaG0FQFAoByN6Xt/YZ2UZXGCenXYmiTtdwZ11qoHCwvt1fvXnpkn7+F3xp5ha4VoYe+RXHtTwBIaeiWWyty2AsUlOErMwz0JU2vZY4TyP9X9YH6ch2JrTXRGGvlD6Qcxayh39fWvBCxzelXlDIRUZqEjeRZ6n6vw1MUHXnquT1VNymTBYJhUp4o9EISMkTWe6HNboA==;25:B5ZPhbisUgMFQjkHdQ309Xz41igxji8v4jk+S6wcRxi+8TOraK3M06KoJAXBgkGv7T3bjmsUCPPvNZsv9wwdMgL16jk25xR0QFd3pWUeOKVGBKt6k9So29fcx94IopncrGwDSlJtdKTGDAomxHeXuzo7DwqyW1+fdQl2Ym7LwwIyiZNFpTxY9dNDSDPB7hGgDiTT+a5z5aMcXjKGjOQcyBc6+YTfKCoLifz4duxFjdY6mkxDYMzFRB2UevpxrM0vp0tfGgLc/RIT0fz/ZuTSzz2bTWr5fBKSST3edcVG0Pg/cQKVakIf6VMLLefuG5n7PgNzCz8VNL3nAWV7++B+HNYNi9ux+AJY5GG6jMn/0cY3XgbdK3+DnEP4iVW1prgK+JnQPyZnbq9MDbnx+sfuuNfz+R6Onxzd4RBtlsYH7QF8nCmHv8jy3dSHcZby3oGQS2u3973W0Er8IJUAEt/aug== X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB1882;31:pUfiyfqvyoQymf6vCQsBtKk8fUrleEj9RQ06PtWpGI0kDjT1zjRKr0oAolMf8HiUNCtyXv1/KHAlGUEOx/A4NYv4t/FK8bfcFfeVJKauKd/9sALcE2QDXcvBIiO5KqAeZ4kHHLZrs73wPCUl6BKqiL2PjKRpSGP6FnQF0KEZloN3a5OLAjgFTg04ziW1qZSMrHluONG5FDoQO4bt50KDcIhQ7MDKNBSGgRxFcsSnu08=;20:4NXlenPBorO1aobMX9aXubGFN8XJfnvoizFnPfPwlTJqKiUEfAvq7ut/MmuHFdWebxC+X9zxeTRZhUGOX7Q7gyi/tntDPzC+CwZ6zLMY4kLvPSPkLsDpR1KN2kxk2mYHzjRdhQzzJQWWI18LU/4rHfRlRwgv2lunLnucYR/ZriM+xr0x4hwy9EL89L20N0Jg71xlpeBRrinXwJRSfe454IN3skn5Fkkb2aJwHEeNCe3ErJ3pXVtMY39vktfda4MMYFfWWhF518X6ALr9vuqjH7bivqayPIRcGiLgx9VXQABtkRkI1UMS5Ik7pyuSV54jcvg+JF1b58gjm089c1VNGCumTwb7INl4N4B0G1oMmZFjpsU+7UyttczEtCCNyDNPQYlYLBLiCvRf+hha4TdnQZg1AR+mEjfBtHjC0yTdpfps+XOe0YE1SHYNoGc53znvU8phGxyp8Su8mpx2E55F864xcn4p4lfl2E13lYtgqr2MbW1uZZb7xuZT/JoLBMPo X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041248)(20161123562025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406075)(20161123555025)(20161123558025)(20161123564025)(6072148);SRVR:HE1PR0701MB1882;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0701MB1882; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB1882;4:5WM6VrlqiiBJ8XID6QLbVslTIgB2N9rXM8X7tURZLRa5wCACuG4oZ3JAkjvflzPzaEdZP8PTjpz7iCDwBFDDGTZ7EPaP9qJo+0IAjm35BLLygHG5j8epox27NH3f73/jkBKoGtxYNcxB6O5oaPeVsHdcydILYjeDJGJHPWbejDQTRqmcI8k8YJT2iJssuaoZZ6f7gUbXws8wYghaPVrL1GOUZIHOcnsHg+weg3HnhIOLI8rCPeRXw/A/hQDLcSUYvKmWwgJJjigvaEQhHB0xbxpdYyoLUVKWh8INeHbryWJREMhOqUjH48Fl+seEhg3EXDDKdXJXAWfx+9aqMB+a4OJrAeX1e++Lh3/sxCykg/ePSqhNP7ljLYr0XdQ6F3f02ockArynRECTpINs/r8D1/yGlu/SbiWeb5veAlcW9Ksg/txN6Xn0hw9gBXsvlv7XUXDJHdRMsmNZnP4ygUHolhdY+nW4rqJXfn8ZFnlDn2zwWpmnlvL0BBkxcWKHcF/9S/2g5PEaLxcbxaNBJl0jrT8BEe0ckzO5JEBVkAXqkdFbTil8C4awLBQSAPt/m9zthVxcUcMOr0RPOo5esBvt4W54etYdgKQ3m5rC6PCOgbsLSnKYecDeWzH4F77WP/RIXaIqVc5Wu+d0Xro/N3vUVHLJIFypvnv+bOAlOKvRFIc0X1TfvYpkMZBuEqc9VVgAaMGRk6cgj9TcaE3mh7BEMpPqVr6Pi6X1aTap3ek85X6PHlP0n0MjFB82ZY0TfLhl4QXnJkjh8QNrGcCndkGVYNhUap3dse27/+iTAEr/ZvY= X-Forefront-PRVS: 0261CCEEDF X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39840400002)(39860400002)(39450400003)(39410400002)(39400400002)(39850400002)(24454002)(377424004)(305945005)(53546009)(50986999)(23676002)(5660300001)(54906002)(50466002)(110136004)(38730400002)(6486002)(36756003)(93886004)(6246003)(83506001)(1411001)(7736002)(86362001)(4001350100001)(33646002)(47776003)(6496005)(3846002)(6116002)(6666003)(2906002)(229853002)(4326008)(8676002)(66066001)(53936002)(189998001)(25786009)(54356999)(76176999)(81166006)(2950100002)(2870700001)(42186005)(6916009);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR0701MB1882;H:elxa4wqvvz1;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA3MDFNQjE4ODI7MjM6K2oydUx5RUs0UHZVaWUvSFBtbk82dGZN?= =?utf-8?B?RmluaDNlcUhScExGQ3ZTMUNLWDYwQ1d3WHhiM2ZoMUNtYVcxSGtnNE9yUVJ3?= =?utf-8?B?WUF5MTMydVVNOEt5VldOU3BQanRtMHU3b3c0V0hFUDVQa1pkMWdweG4xTnp6?= =?utf-8?B?N1dxNTM2VjFuTGVkd0dlbVhWM1FqN3dOSG16K0ZxOW9pdWdKKzI5TlhVaDh5?= =?utf-8?B?NEpYbW5kYWNScytOam9YQUNUMnJxK0gzNm96aFdEa2g2Y1hHR1FKOTI2eXB1?= =?utf-8?B?QUh5U2U3QUN2ZnRRYzlsRXZTRnVpWFdEQVJkWUE1cDAzcys3U1JMTGp0RU9L?= =?utf-8?B?aUlaYUR0VVRlcFo1TjNmUVdWdXh6SzVmQUVlcE9OQUZxb0FvY0Fmd2Q4VHVt?= =?utf-8?B?cVdPYWJBRWQ0d0FJUngxMlJ5U25Tams5QklnUjM5TFB4cHVndmhuVmVZcHV2?= =?utf-8?B?SVdTTGJZZ3E3dEsvRjUxcU03SWJkUXVmaFRrb3FyR2JwNTU0eERlVlN6bjlO?= =?utf-8?B?NDlsaksyWFJDNzVtOSt2YVpCeGdkOGIwNk1mR0Izbzh2Y2xORXhaVlVvTUFa?= =?utf-8?B?N0lSM3p0M2dyRmN3TUV6UFhjYXRjM040bkgvNlZEQml2Sm5YNzdqY3IrcExW?= =?utf-8?B?YTJQaCtsWVh4TmROdkNmelpTYzY4M0ZEdFNLZHcvdVlGTnpKT0x1UE9udW05?= =?utf-8?B?aHd2eHp4dEtTNDQrTkdOMHBDd0JPWEhiVHlWRmZKK2JUdjk2ejRNMG1Ya3Jt?= =?utf-8?B?dDhtcnpydnFiQ2ZocFlaeWlZdWVlOW5hTXdRL3greWV0WmprbytiSHo1WklR?= =?utf-8?B?K3ladmQ2R29pS0dGZzJVNnlhWGZNY0FHMGlnSTNDSDc2QVZRZ1NTdTJTZnFC?= =?utf-8?B?eWpCTDdObkErN2t6dmw3V2RET0FuNzJLZVZneWxtVjBiakszK3V5RVdxMHVn?= =?utf-8?B?MG80T3N4ekxBVG9aNDAzUjFWNG4rSTJKQnN0SUpJQXZmWTQrNkpvQVRZcU9t?= =?utf-8?B?U0dTVHl4S0k5emp3R2tvcmlOd1RMRStxb1Y0a081MUhPOFdPRUhFUUc2Qytx?= =?utf-8?B?NzJDYWVqN05ENVpKTFJybWNYdm5CWUdEY2w0VU9EVFFyQTRkaGlHVzNVRlV5?= =?utf-8?B?Z2diYnBhaXYvTGh5ZE55QWJ0MWZYdHkrb205TzRLa0hlU3RzQlpJWFAraFB3?= =?utf-8?B?RWdZWXJJblFaNkpHdDk1NjVNTkw5UENCQTJxSlFMRmkwTWhjaTMxT0hHbkI2?= =?utf-8?B?TGkyL0tjaDhiaU53WXFGaEFDVHdhQmlPdjlyblhzS0lMT3d4d3FCY3JnNGE2?= =?utf-8?B?dXVuOWgyUlhNYm5SWStCWHZ3NmtoMzdocE8rY0RCZ2x0aUdjSmxMeVUxK3Mz?= =?utf-8?B?bVRCTGlKaW9mV0V3MEtFSG9RREJRb0g3dmpTNHZsN3ZmU2RrOFFzdUFKR3lC?= =?utf-8?B?WnVjUndZbHc0eVowSjY0d081OThLWUlkYXRkRHFFODlHck9WdEhyMEEvK28z?= =?utf-8?B?TUJvcTYvMEVGY0x4K3JUWjVFaHQxakl5b3d2MUFXcFRWaUg4bmVldjNjMEhy?= =?utf-8?B?RmVIYzlxVklVZzFCalhtTXBaYUtJSTE3MHltNVBpeUh5aks3RlU5U0UxMXBB?= =?utf-8?B?TER6WVZhYysrUlBsbG5UajZVbXJmU00rSnNvZmJtYnBpbXh5NlhnRG11aXc9?= =?utf-8?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB1882;6:T4W6gOfUcWBtQH+hvZXu1EN/8JnBxNYfi2ogbIqFwtGNxC48o8RDNw8a4uRGANfmoalvmcE4jY6NI4B+wu1KtwE1H96vIgLYQGnQTYX+9Qo9Swl77SS/h5OG30bgwQ0Gm/yB1fgBD5FUdud7mscwgLr4UQXb00cakkaXVxII5l6qq6GBOvywmOk9OCRv86lwds9buJljBnEm50VSYTgZ/uRwdb4MrC3UA4Wb3OZcDDXnd812AQ0L3wzu8eXMH5qs2IPQJ1oiNxLKBtaZaQuoNWokqcUezGiiSNn/XbB5nwlsXBBEgMVpzF7B/ACM/X7ny9DX73qnrVf09ecXF01AN0HEmBOml1kA4WypDLqcmJRS68Kt2CtrUbduntMsgH7X9UOTVqMCzgbD2v4K4whoXg==;5:i+0EOUe+7SmtbeZrVQKIixqJjzSC9QMaOWpPA5HjOHPYC9VeUN8b0OppgbXW1e+FwrjwReuO9o05He5RNmwlEgJ6lznSfV0kG4vZsoQGw5ijAXcThI/wJGOnNThACurb9072f/lYrvsaRWn6GAaWpA==;24:uHOVS89X762zdmUoK2ZnccZOY53FSeMB3qfGld217qFPhlps849JPbrkdzo1cZu9/F/zVWP0U9sAeUHY0POOhJbuyC5gxJKNGpwdWjx5Phw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB1882;7:LPSzCiw6+viLOpP028dS05DXD5HGbJ1MNHD99Idc0LIUoQRWa0TPQwydmujJhGomW+FRs6DmAVmO6x7vcx6RFbY6kpj4+P2o20JHVlqC3/GR3R4dzqm5MOjne4v1esmWPd5U/6p6WGSsc27QyBNvyBt8rrI+docNBt5BNw6ly/4P8tK7l7UZ8+TaDyil0swV9/HqA6uceLPrTvldoajRmhkh2Ohmyzd6H6+zFpta1z9NBzNPpLPDbDYhfdrNtZxOXiY5y9ZlON1wQUtgXpzlUl8Udr4OBC/L90vuvgb6XvI6qjxCD+lrOxWctVsXdlsGZJErOzgE2GUQb6rIg2Dg2A== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2017 14:11:36.2513 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0701MB1882 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes X-SW-Source: 2017-03/txt/msg00502.txt.bz2 Antoine Tremblay writes: > Yao Qi writes: > >> On 17-02-17 19:17:56, Antoine Tremblay wrote: >>> > In ARM ARM, we have the pseudo code, >>> > >>> > boolean InITBlock() >>> > return (ITSTATE.IT<3:0> != ‘0000’); >>> > >>> > ITSTATE can be got from CPSR. >>> >>> Yes that's good if you're inserting a breakpoint at current PC but >>> otherwise you will need something else... >> >> In software single step, we calculate the next pcs, and select >> breakpoint kinds of them, according to current pc. If current >> pc is not within IT block (!InITBlock ()) or the last instruction >> in IT block (LastInITBlock ()), we can safely use 16-bit thumb >> breakpoint for any thumb instruction. That is, in >> gdbserver/linux-aarch32-low.c:arm_breakpoint_kind_from_current_state, >> we can return ARM_BP_KIND_THUMB if (!InITBlock () || LastInITBlock ()). > > This is not entirely true since we have to check if the next pcs are in > an IT block rather then only the current one, so there's multiple > scenarios. > > Consider if current PC is the IT instruction for example, then there's > at least 2 next pcs inside the IT block where we will need to install an THUMB2 > breakpoint and get_next_pcs will return that. > > Now I find myself trying to replicate the logic in thumb_get_next_pcs_raw > for IT blocks in arm_breakpoint_kind_from_current_state and it doesn't > feel right. > > It gives something like: > > void > set_single_step_breakpoint (CORE_ADDR stop_at, ptid_t ptid) > { > struct single_step_breakpoint *bp; > > gdb_assert (ptid_get_pid (current_ptid) == ptid_get_pid (ptid)); > > CORE_ADDR placed_address = stop_at; > int breakpoint_kind > = target_breakpoint_kind_from_current_state (&placed_address); > > bp = (struct single_step_breakpoint *) set_breakpoint_type_at_with_kind > (single_step_breakpoint, placed_address, NULL, breakpoint_kind); > bp->ptid = ptid; > } > > int > arm_breakpoint_kind_from_current_state (CORE_ADDR *pcptr) > { > if (arm_is_thumb_mode ()) > { > > if ( current_pcs_or_expected_next_pcs_are_in_it_block ??? /* That's > not right... */ > > { > *pcptr = UNMAKE_THUMB_ADDR (*pcptr); > return ARM_BP_KIND_THUMB; > } > else > { > *pcptr = MAKE_THUMB_ADDR (*pcptr); > return arm_breakpoint_kind_from_pc (pcptr); > } > } > else > { > return arm_breakpoint_kind_from_pc (pcptr); > } > } > > It would be much better if get_next_pcs could select the breakpoint kind > itself and hint that to set_single_step_breakpoint like : > > VEC (struct { next_pc, breakpoint_kind }) = (*the_low_target.get_next_pcs) (regcache); > > for (i = 0; VEC_iterate (struct { CORE_ADDR, kind }, next_pcs, i, pc); ++i) > set_single_step_breakpoint (pc, kind, current_ptid); > > But of course that means changing that virtual function for all archs > etc... :( > > I'm thinking of going with that approch but I would like to know if you > have any other solutions to propose or if that sounds OK before writing > all that code ? > > Thanks, > Antoine Just a small follow-up on this idea, I think it would simplify GDB's implementation too, it would have to change anyway since the interface is shared. See commit 833b7ab5008b769dca6db6d5ee1d21d33e730132 introduces a special case in arm_breakpoint_kind_from_current_state where it's checked if GDB is single stepping and if so redoes the arm_get_next_pc to get the execution mode of the next instruction. I could do the same kind of thing in GDBServer recall get_next_pcs and if I get > 1 PC in the vect it would mean I have an IT block, but it sounds like a hack. I also find that confusing given that the documentation for breakpoint_kind_from_current_state is: # Return the breakpoint kind for this target based on the current # processor state (e.g. the current instruction mode on ARM) and the # *PCPTR. In default, it is gdbarch->breakpoint_kind_from_pc. Finding the next PCs kind with this function seems like adding another meaning to it...