From patchwork Wed May 3 10:42:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Alan Hayward X-Patchwork-Id: 20232 Received: (qmail 121721 invoked by alias); 3 May 2017 10:42:06 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 121696 invoked by uid 89); 3 May 2017 10:42:04 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.7 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, MIME_BASE64_BLANKS, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=Hauthentication-results:gmail.com X-HELO: EUR02-VE1-obe.outbound.protection.outlook.com Received: from mail-eopbgr20056.outbound.protection.outlook.com (HELO EUR02-VE1-obe.outbound.protection.outlook.com) (40.107.2.56) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 03 May 2017 10:42:02 +0000 Received: from AM3PR08MB0101.eurprd08.prod.outlook.com (10.160.211.19) by AM3PR08MB0103.eurprd08.prod.outlook.com (10.160.211.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1061.12; Wed, 3 May 2017 10:42:01 +0000 Received: from AM3PR08MB0101.eurprd08.prod.outlook.com ([fe80::b823:64c1:afc5:3a08]) by AM3PR08MB0101.eurprd08.prod.outlook.com ([fe80::b823:64c1:afc5:3a08%17]) with mapi id 15.01.1061.021; Wed, 3 May 2017 10:42:01 +0000 From: Alan Hayward To: Yao Qi CC: "gdb-patches@sourceware.org" , nd Subject: Re: [PATCH] Remove MAX_REGISTER_SIZE from regcache.c Date: Wed, 3 May 2017 10:42:01 +0000 Message-ID: <1467DD03-A335-4CA3-9541-0A6DDB2FE7EA@arm.com> References: <562B2F6F-F3C6-4A76-9489-57539F396C94@arm.com> <868tnvukjh.fsf@gmail.com> <7359B5C0-BF61-42E2-9886-B322C1825865@arm.com> <0DADF920-69B9-4F96-A153-6965E56B5DA8@arm.com> <868tneq1xj.fsf@gmail.com> <86efx0ljsv.fsf@gmail.com> <86r30ep4ml.fsf@gmail.com> <3418367D-9E13-49C7-9C9B-91B0DC1AB0A4@arm.com> <86h912bbac.fsf@gmail.com> In-Reply-To: <86h912bbac.fsf@gmail.com> authentication-results: gmail.com; dkim=none (message not signed) header.d=none; gmail.com; dmarc=none action=none header.from=arm.com; x-microsoft-exchange-diagnostics: 1; AM3PR08MB0103; 7:czMF1XsQFZQ3itKtZUQrBVSWvmu/qAEJazK/wcIMv5QSV3OXBscOi9Z88wlgX0LuTg6muFSejf1BUTak29nGZMOQA0gH1TMJCM1jBA1o1BYvqYPTVq3nSCdrkOOUTifmUqLKG7Y8IB1W9xDO6VEDhHPyumkLLjKXncnMbis7wJ7qN1YtegQmnkLpLM2JAGWmvZg4oIO8LeifcXLzPJoF+CfIPS73NSSzCkXa0O/mu0TFxV+9Id0KHdHwajHEpPC/G2M30CqV9qkucl4hlcyblFdBOEnztHWxcb9y9b/0nuT86GGFaJvj74+LWB9jFGSU9j5dFMhn01YraRvWdrBzMg== x-ms-office365-filtering-correlation-id: 0df1b745-6b20-4c76-2bad-08d49211084d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254075)(48565401081)(201703131423075)(201703031133081); SRVR:AM3PR08MB0103; nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(10201501046)(6055026)(6041248)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123564025)(20161123560025)(20161123555025)(6072148); SRVR:AM3PR08MB0103; BCL:0; PCL:0; RULEID:; SRVR:AM3PR08MB0103; x-forefront-prvs: 029651C7A1 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(979002)(6009001)(39850400002)(39410400002)(39400400002)(39860400002)(39450400003)(39840400002)(24454002)(377424004)(36756003)(53936002)(102836003)(305945005)(3846002)(6116002)(189998001)(6246003)(7736002)(53546009)(478600001)(25786009)(4326008)(2900100001)(82746002)(110136004)(6512007)(6916009)(83716003)(99286003)(2950100002)(54906002)(5660300001)(5250100002)(38730400002)(66066001)(50986999)(229853002)(6436002)(575784001)(86362001)(54356999)(33656002)(6486002)(76176999)(6506006)(1411001)(8676002)(81166006)(3280700002)(39060400002)(93886004)(8936002)(2906002)(3660700001)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR08MB0103; H:AM3PR08MB0101.eurprd08.prod.outlook.com; FPR:; SPF:None; MLV:ovrnspm; PTR:InfoNoRecords; LANG:en; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 03 May 2017 10:42:01.4332 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR08MB0103 > On 3 May 2017, at 09:21, Yao Qi wrote: > > Alan Hayward writes: > >> That’s fine. My rebase should be easy enough. >> If you remember, could you let me know when you have pushed your patch. > > Hi Alan, > My patch set is pushed in. You can rebase your patch. > > -- > Yao (齐尧) Patch updated to head. Tested on a --enable-targets=all using make check with board files unix and native-gdbserver. Ok to commit? Alan. 2017-05-03 Alan Hayward * regcache.c (regcache_save): Avoid buffer use. (regcache_dump): Likewise. diff --git a/gdb/regcache.c b/gdb/regcache.c index 255246b2606036f178c7db3125ecd465dbc1af05..5d319153ad1184b754dbb0bc740c3bbb59dfa2e8 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -327,7 +327,6 @@ regcache::save (regcache_cooked_read_ftype *cooked_read, void *src) { struct gdbarch *gdbarch = m_descr->gdbarch; - gdb_byte buf[MAX_REGISTER_SIZE]; int regnum; /* The DST should be `read-only', if it wasn't then the save would @@ -345,18 +344,14 @@ regcache::save (regcache_cooked_read_ftype *cooked_read, { if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup)) { - enum register_status status = cooked_read (src, regnum, buf); + gdb_byte *dst_buf = register_buffer (regnum); + enum register_status status = cooked_read (src, regnum, dst_buf); - if (status == REG_VALID) - memcpy (register_buffer (regnum), buf, - register_size (gdbarch, regnum)); - else - { - gdb_assert (status != REG_UNKNOWN); + gdb_assert (status != REG_UNKNOWN); + + if (status != REG_VALID) + memset (dst_buf, 0, register_size (gdbarch, regnum)); - memset (register_buffer (regnum), 0, - register_size (gdbarch, regnum)); - } m_register_status[regnum] = status; } } @@ -1439,7 +1434,6 @@ regcache::dump (ui_file *file, enum regcache_dump_what what_to_dump) int footnote_register_offset = 0; int footnote_register_type_name_null = 0; long register_offset = 0; - gdb_byte buf[MAX_REGISTER_SIZE]; #if 0 fprintf_unfiltered (file, "nr_raw_registers %d\n", @@ -1565,8 +1559,8 @@ regcache::dump (ui_file *file, enum regcache_dump_what what_to_dump) fprintf_unfiltered (file, ""); else { - raw_read (regnum, buf); - print_hex_chars (file, buf, + raw_update (regnum); + print_hex_chars (file, register_buffer (regnum), m_descr->sizeof_register[regnum], gdbarch_byte_order (gdbarch)); } @@ -1579,9 +1573,30 @@ regcache::dump (ui_file *file, enum regcache_dump_what what_to_dump) fprintf_unfiltered (file, "Cooked value"); else { + const gdb_byte *buf = NULL; enum register_status status; + struct value *value = NULL; + + if (regnum < m_descr->nr_raw_registers) + { + raw_update (regnum); + status = get_register_status (regnum); + buf = register_buffer (regnum); + } + else + { + value = cooked_read_value (regnum); + + if (!value_optimized_out (value) + && value_entirely_available (value)) + { + status = REG_VALID; + buf = value_contents_all (value); + } + else + status = REG_UNAVAILABLE; + } - status = cooked_read (regnum, buf); if (status == REG_UNKNOWN) fprintf_unfiltered (file, ""); else if (status == REG_UNAVAILABLE) @@ -1590,6 +1605,12 @@ regcache::dump (ui_file *file, enum regcache_dump_what what_to_dump) print_hex_chars (file, buf, m_descr->sizeof_register[regnum], gdbarch_byte_order (gdbarch)); + + if (value != NULL) + { + release_value (value); + value_free (value); + } } }