From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 98796 invoked by alias); 29 Mar 2017 12:41:26 -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 95756 invoked by uid 89); 29 Mar 2017 12:41:24 -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 autolearn=ham version=3.3.2 spammy=Hx-languages-length:2864, HX-AuditID:sk:c1b4fb3, HX-Exchange-Antispam-Report-CFA-Test:6040450, HX-Exchange-Antispam-Report-CFA-Test:201702281528075 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 12:41:22 +0000 Received: from ESESSHC021.ericsson.se (Unknown_Domain [153.88.183.81]) by (Symantec Mail Security) with SMTP id BA.9D.14680.07BABD85; Wed, 29 Mar 2017 14:41:20 +0200 (CEST) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.81) with Microsoft SMTP Server (TLS) id 14.3.339.0; Wed, 29 Mar 2017 14:40:43 +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 HE1PR0701MB1881.eurprd07.prod.outlook.com (10.167.247.21) 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 12:40:40 +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 12:41:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit X-ClientProxiedBy: MWHPR10CA0005.namprd10.prod.outlook.com (10.172.48.15) To HE1PR0701MB1881.eurprd07.prod.outlook.com (10.167.247.21) X-MS-Office365-Filtering-Correlation-Id: 7018ec0c-96d9-40a3-0b82-08d476a0cf9f X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:HE1PR0701MB1881; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB1881;3:jbZD9n8jP5DZRAUuCyIIPZ1Irk1iL9wwVHJZU5nsFrXZ1mQAg4DisnH1LQKDhLQtj0QcXkzJW63HSnC5Q6i5BKCwrmkuAkF4ckO/J6rnDEitkE7+cv/CU9Ogf8diLea6Eixp+5z+aGs89jrRPgqK1MxossmfRUdd0Z+Qd3KMUrt5+Miflv9XhPCP5aMHCSUkf8tkaqdF8EF+LEWXHXrwsj9w+YDjNM+Thg9rEWUcWo1BKOgNQfkta9PDjJssq+m4OzvARYE+VSjSPtrQXRITUu/PJO1QgbHp0dJYKcHwoyRYFXSRhS2z8vTfCSQFAK8IFbOeK2oFJbjXJLNAa27BBQ==;25:/rxn6CAXeb15BMcPobQpdZNQMLpcNEk4HXOUEtA1f3CmO3VFb3aadddNSlTNUE/sTcRd5Q0tRxyeZZ923ybICKmo29URlMhraViNMcoAccB2RMP6AT3r0RGnv1G8IGbcHfEE3nUjNE8KixkFRrscnhmIozAB8iqvRym1Esvk7zzo0WnZArL/ZvvL2gXklQAqm45bi2c5sszPP00vnBIyl0TaWGVjORgpDPLWY7QxUwHh4GWycBNaWeAgXQSHnNtYlmAz2jiyEFejoS986N+i4EhAOlzirt1V0vOl09Nmp3jpS9SZE+YAu/REisLXi8Cp4g3X1b6KPZwsqhZ1rHccLAOZdzCbiZwWoAD834PnswHvOpihOyDntyQJH/8iZSTFvcIO/KUhHMi527/q47yvZjueZoYDCtpo74MFcEtqsCn94HusjWggM8Dy1E3O9UO0BUf0YceLKD6GXyzc8FT6UQ== X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB1881;31:tEMUGuz0qCx77Mi+J2X2rhW1gkjN1XeFu++Tvq1XrugxiIMOnWIEVpBElb2Qg5uZlpY4wZ3cseyDCuFK+S8P1zvtXQPZW4lEgoLPz72OW4zdB5NLUttvoOJP5F1OaF9LnCSNnkU+i/iv1CT+X7u8iwLpvVXyr/f6x8kiMuzDcKBMYDo2TRfp9IgW8MANxSJpGCoEp2+ZDTYc4jUM5MKxdYnfck1QbfaWPJLJm2He84uEQip6lGvNRmAvopZCVqpj;20:MuQyxKilmmoCZKN8Of2bhAQ6B3qwbid1h8REAcBvUZOpXaZgpxZ5wsvysgjwBQe7ShwVxwL06z/YxfK7Y3F31MYfKMvac7yjDFqHKcRHnw8RknYNYis68w5IebRjhAfCkA47uKt3hAr62veJYJ5nOZBxumLd72HLpzq16mRwyOxvPgs1HDOEHp4Y7q+jCPX/fbaQDNMvVc5CC1PBCe6VsoR7cSvBhwAlX7Dh4qzqBDloMwVD7F/ZWm8euW+1r1CqOCHRsFj+3yuODPKtQ058vDJnD/GyyzBWDJc3IhksXCOQylyM/xOuhyGafsnJNon3MJ+fh25TB3T/62YXdzmsMmIvQ0XNjt0P09rSPkf87CteyGK5vxc8UYIXzzdiKnc7phoCdG+iOTkriQgBal7lg0KIHoIxl+9MAnwTIPtK58PXcnjOZax7FtKfKO91nZBtQynFbQAnAJhNAjMoPCU7RmaXDd7Duf51EQmhok3O4qcVymcg4Gqn+QJxspfjNR6F 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)(5005006)(8121501046)(3002001)(10201501046)(93006041)(93001041)(6041248)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406075)(20161123562025)(20161123564025)(20161123555025)(20161123558025)(6072148);SRVR:HE1PR0701MB1881;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0701MB1881; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB1881;4:ShJSyAEkni3Lk2+dTdkk3N6kIaMQk+EMuS8Kpl552LOkrOf6g1n1Teas5ybsYaNAHRsFDcHpiqY8sGq+VXCY3QoaUU7BhJ61ATJ5wOpMcTMHzZFYiZFzCB8pCC/AhJfthhrIWdFB4OK87lFIl+1oM86A3dAp2+63/qSrDJ6XOE/ZoCydQNo26ZvVRRnGCPU1KWkKdk/rP6lTKmKgg6c6560Fa76OeVTKX1NLNDwx4tRN44te2NNktrJGo+DVDRT4vSIeT8dJSMtB9YwA5pY/ahuX+9ZaFyDhggDF9vA3rxCALcQDkITJrf88g0UMdveWgmwkC41zDNn/Y8IenkOVPBIDrOiTDeYfCTXKe+JEVmTYKBwmogIMn7vSIk25GHBUT8jRDBGfd2VUupHd0WsjNcVPvGhQgh4belwOXnlSOIc9VaxJfLyXdxSUtMI2n7T/gmGvyCujX7tZU7ZglTXfzw0eee7ZPJ6SgrWoOz34/DIBfFYyybgG3Yey0qewn5s339LfwHV3DjYCgSl8ecrG4DZhcW1qBS6NCo5v2qZDBCz489HXH2qA+6Svgvic1yBU2+ZSd/JNNc3luHg9qyIO9S5FFqWRHSSx2Rlzesp2Dstftw7XDPbFfFswKb9u8+29O204WKJv5p6Tx5ioGna8f+3/46HgOEjRNqpXVXGIDFuCVgRHHMEyUGkiLeDQZ2rvT8dDzzV01HpFL5AXoyPgteGfhbHZ9c0ZhYBM+9Fk7tMTtP4Ua1wLHC4wN5/0OwXUvgVZeZJNryaJgYpm7xN5XCsZOESS/m+D+8d8B8p5CWmZBnGdMYWmWf9DingNSRisGTTCa47IHP1oPIXXhe7kqw== X-Forefront-PRVS: 0261CCEEDF X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39850400002)(39410400002)(39400400002)(39840400002)(39450400003)(39860400002)(377424004)(24454002)(76176999)(81166006)(86362001)(8676002)(50986999)(33646002)(2870700001)(5660300001)(229853002)(50466002)(4326008)(7736002)(54356999)(305945005)(36756003)(53546009)(3846002)(4001350100001)(189998001)(38730400002)(66066001)(25786009)(6246003)(1411001)(47776003)(6496005)(110136004)(53936002)(42186005)(6116002)(6916009)(2950100002)(83506001)(23676002)(6666003)(2906002)(6486002)(54906002)(93886004);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR0701MB1881;H:elxa4wqvvz1;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA3MDFNQjE4ODE7MjM6N09wSG9EZHV3WjF3RVEyYnJUWDBwVWg0?= =?utf-8?B?SEV1MkdnRmJ6dXZQbENxamdyZGNmbVUzeXp3Q25qT1BFSUhRNzdPUzlTd0dX?= =?utf-8?B?WkhrcjFxZDRzVmZ5dEVwdHNmcllieGtRWTVQdURya04zRUNyNVNVUGF3cUY1?= =?utf-8?B?Nkd5K2R5SWdBTVJBZURlSHVhTkhVVUR6MVExSW9sZXdwT3BDZ0ZLS1hjK0Vy?= =?utf-8?B?dFBVSUNJN2h2cENpRWxqN1ZTbTRONUtYMTJZMTJ1ZTZZRUdySGZEVW9Ea1Ey?= =?utf-8?B?cFJwZFJjOTZacUtRWDhYbkVpRkp5cFZHZW82VXZhYVZadmFiTExmcDZQRzJx?= =?utf-8?B?Q1pocVpGd1R3NnRDL0FjbjhsN0ZTQ0VKRUI0VlppR3gvWGNpNThMOWJSMFht?= =?utf-8?B?ekZuR0srYzFRMHBnT3Z4WTFWNFJ0Z1RMVW9EbVZzYTdSaHVjUE9UTXVsVDg3?= =?utf-8?B?TjZ0OE9rVVJJOFpLMDdVaGJNWkJCdzF1VE1UL252Zk92RlRPbDVabXRFWkIz?= =?utf-8?B?SUpXL0w2T3N1emU5WHUzTEcvODArK3FPZzVjTHMvUUgwWksyUWVWSW5sODVl?= =?utf-8?B?Q0JkNkN0NENveHM3ZythVXVCMHFMcHI4ZGl2ZEwwWElDRzJmSFExczhvV3hX?= =?utf-8?B?M1JlSDR6b21CK1Z2ZWo2bFhOanA4NFVoL3lQdFNSc2NIbnVEWEl3ZjBPVnNZ?= =?utf-8?B?YlJJdHJHT2tyRFBOMVFNZVJZaHFNZnVXNG9naFpDNzducCt5RUJlWFI5cUQy?= =?utf-8?B?bUtaOTIrM0NpMFRCb3o3ckZHdEQwdVE3b0JpdmZWa3lSUXhTczlPQmtWSjdB?= =?utf-8?B?Slp2eEFHY0lLejlOQlVYRzJndCs4WmpFSVRMS0x4YVhZc2xkdE5DVmpxL3dT?= =?utf-8?B?NGRJbXZNR2N5ZFpzbUpvVVlBZ0JYYzBheWQ2RHo5UmZ0QkplVFhxVmMyQjRt?= =?utf-8?B?amQ5ekd5eTJBelRPNGx0MXJmOXV2R2xGVkhNT3pNL0gzeFB2UFRrdHFOWVVu?= =?utf-8?B?M0VOWDVSNUE2VlRQQ2NyMU01VTJiQkxEN0xWazFyWndhaU9SY28vdTNYc2tE?= =?utf-8?B?S0FjS3R6Ukc5cWU0OURyMGhLTm9PTDU1NmZUeGZ2WVpGV0kwVWxVSFBZNlRS?= =?utf-8?B?NWZTdkl4RWxISG5SWHBsWVFCaWJwUkRLUHF2eDFQVjdYRm16UHVMTUVhVkVJ?= =?utf-8?B?cS8va01WZ2VBdm05b0FwcTlzbDRac2lJTnFGeWlEbDNQS0VUM3F2UDZPR1p0?= =?utf-8?B?bU53YVZZTTJWSE5acE1jWGt2R25ocG5EcHN6WGYvYTBmRUFVbWpMU0M0WUZK?= =?utf-8?B?L2hISDJMTHRJTHFRaWRCYzhUbnJ6dnZ3TTFzUGptOFdyaHZmZ2UyT0lrOC9r?= =?utf-8?B?UTlIb1lucHp4R1JFQmM0aG00a0ZtUC96YjhjUnFCSDlJa3NMS0hqM21VQmdG?= =?utf-8?B?QWxTTG01aGNUZjh3S2pPZllxSVh2S1BiYnQ4SzBqRnplbXU2YW92eUQ5ak1P?= =?utf-8?B?Q3E1VW1VWlRyL2h3OEpKNTBVaVdueUdXLzM4RjAwaDJBVWI0VnVPa25GZTZx?= =?utf-8?B?UGFlZ1NiWG9QdFFYVnV4blZCOXNOeHFQQ3UrMmFxc3grb29pV0sxelJJR2dY?= =?utf-8?B?aXNkNTdocitIazh5RDZPdm5rRDJTSkF0MHJxdWkrcm43d0x6Tk1Ock5wanc9?= =?utf-8?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB1881;6:B0H+tAuGIgch+PhGsVtZnSa/JSmSu4LLtrNlSyenlNuP9HMJKtqEUwlnBtJtauxfme3OSkJ9fp2rYyq8Ul3NCfR2kUjE1z1YLqKlLW3J9JLXAj0Ql0bPfdT0IETzEMvEyANd7UcfZ9TgJRzVFSxbQG/+W48pbZB8qhmFCoPVON9tn4REyCUIKbbCglTK/uMkxZ7Rgw/jN5Bphjuzq7z52nC2NDGdl1xfeKOCV0Z1MAuG+y41pRXnWxMRN618M+EmwtSz6Xy8KCtFDCxUmTPBOd8OnTmRsJlcp0qfYL6a8cSq3WTdZ5lx195uOYjfn4FfmX6Lm4B96kPPNmfimC6awYcEwXAFa/CS9f4DeQtTpX0mCneOh5yjyHGbKsbV1oKJnWoS7So3qUfoeL111sxzMw==;5:SVJeNzHLbhGYavEZn3rNZ3idOtPpzzMhyUw5wKW5ABbnKumP4c6xsgykYqYA+7r/fqvmm7Pmzxb4VVFMH+i9SpzFYHetu+UEMDjpck3xPM/C0zlFYziyI6iSiH4ymaBsh1taXaDeiVpILzX7CSqR0w==;24:SksK/FCM1E1JJTt3GZjeyhRkg5XIunHQUPSXBVJGmaNVs0B3DWCmDUXcbd2o28wixdG2zHH8vMSQvMNY+wsqbMTOoksGIjSXcYtqIfYduKc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB1881;7:KWvZku183pnnKcyIsTfF8qHaSbRejkdeHuuvM/Ened69veK2i9V7en9yRwzxlwZIllk6hlVs6J9R9fmxSEN4nOcKcS6TLnZLkRuJHNFUHsF1TYQGqKqSrvirqNjJhed6DUBA7wyd5GibKlSlqqxnLu69vX2jQA5/ia9gihcmBQMTNDwxbx1yCgEErT3tL0JKyA2JICx72L56XPkx2/nMqwksGQfaeb0Q3uRcMv+5rGTgg8SiAus1RjWOlk6U2w9yHfident72m18KXKm59kFedcL4g/pJTIIXIogYiwEDKB/zcKWWabuFKe36NGw//+zTSfiIkZVDgc34r27DiLeHg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2017 12:40:40.0539 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0701MB1881 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes X-SW-Source: 2017-03/txt/msg00501.txt.bz2 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