From patchwork Fri Feb 24 10:01:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Hayward X-Patchwork-Id: 19365 Received: (qmail 6770 invoked by alias); 24 Feb 2017 10:01:22 -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 6753 invoked by uid 89); 24 Feb 2017 10:01:21 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: EUR01-HE1-obe.outbound.protection.outlook.com Received: from mail-he1eur01on0059.outbound.protection.outlook.com (HELO EUR01-HE1-obe.outbound.protection.outlook.com) (104.47.0.59) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 24 Feb 2017 10:01:19 +0000 Received: from VI1PR0801MB1822.eurprd08.prod.outlook.com (10.168.68.7) by VI1PR0801MB1822.eurprd08.prod.outlook.com (10.168.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.919.13; Fri, 24 Feb 2017 10:01:15 +0000 Received: from VI1PR0801MB1822.eurprd08.prod.outlook.com ([10.168.68.7]) by VI1PR0801MB1822.eurprd08.prod.outlook.com ([10.168.68.7]) with mapi id 15.01.0919.018; Fri, 24 Feb 2017 10:01:15 +0000 From: Alan Hayward To: "gdb-patches@sourceware.org" CC: nd Subject: [PATCH] Remove MAX_REGISTER_SIZE from frame.c Date: Fri, 24 Feb 2017 10:01:15 +0000 Message-ID: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alan.Hayward@arm.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-office365-filtering-correlation-id: 49d04d18-9022-4e7a-1c7a-08d45c9c1204 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081); SRVR:VI1PR0801MB1822; x-microsoft-exchange-diagnostics: 1; VI1PR0801MB1822; 7:aKInkbS/pEcU0QXswtq2VofKzn3JshF+c1IQF/BQVzGY+uqptwP5tKwX+3+G62Paxbx0U6nHcrjmRTC+gLoYmk1qxzSAHQ/JC5AiHU9ua4chs0Mh98fpnp9CcYizYo9L6BDeqYBy5lj++2gXzUoFVgvzexTU2bDdmzoRfGV4lkyNKq4meS9R1ewFiTJvscBcifZTQmCUZWIL6+UWj++tILJfEh4O0wDHIY4LA7a8+4hk9muM1FJgTaT+8Wi2Jr82Qr6P4UMBPAZNjy4cYuNS5thzBJLc8ikoTYbnDCoXXJjwNT2RbOqBjqXBxLOcQVSVIqCXKCRseaxkZpVj8+j+oA== nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041248)(20161123560025)(20161123555025)(20161123558025)(20161123562025)(20161123564025)(6072148); SRVR:VI1PR0801MB1822; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0801MB1822; x-forefront-prvs: 0228DDDDD7 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(7916002)(39450400003)(39840400002)(39860400002)(39850400002)(39410400002)(377424004)(189002)(199003)(105586002)(2900100001)(68736007)(2351001)(8676002)(305945005)(106116001)(106356001)(4326007)(6116002)(102836003)(3280700002)(3660700001)(3846002)(92566002)(2906002)(6916009)(8936002)(81166006)(81156014)(36756003)(5660300001)(53936002)(450100001)(2501003)(122556002)(33656002)(189998001)(101416001)(7736002)(50986999)(54356999)(66066001)(110136004)(97736004)(6512007)(5640700003)(6506006)(6436002)(25786008)(82746002)(77096006)(86362001)(99286003)(6486002)(83716003)(38730400002)(104396002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0801MB1822; H:VI1PR0801MB1822.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Feb 2017 10:01:15.0973 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1822 In addition, remove as usage of deprecated_frame_register_read Tested using make check with board files unix and native-gdbserver. Ok to commit? Alan. 2017-02-21 Alan Hayward * gdb/frame.c (frame_unwind_register_signed): Use LONGEST for max size. (frame_unwind_register_unsigned): Use ULONGEST for max size. (get_frame_register_bytes): Unwind using value. (put_frame_register_bytes): Likewise. diff --git a/gdb/frame.c b/gdb/frame.c index d98003dee7c34a63bd25356e6674721664a4b2f3..22cfdea4bcb20582229ffc360ead060c43d7cd81 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -1252,7 +1252,11 @@ frame_unwind_register_signed (struct frame_info *frame, int regnum) struct gdbarch *gdbarch = frame_unwind_arch (frame); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); int size = register_size (gdbarch, regnum); - gdb_byte buf[MAX_REGISTER_SIZE]; + gdb_byte buf[sizeof (LONGEST)]; + + if (size > (int) sizeof (LONGEST)) + error (_("Cannot unwind integers more than %d bytes."), + (int) sizeof (LONGEST)); frame_unwind_register (frame, regnum, buf); return extract_signed_integer (buf, size, byte_order); @@ -1270,7 +1274,11 @@ frame_unwind_register_unsigned (struct frame_info *frame, int regnum) struct gdbarch *gdbarch = frame_unwind_arch (frame); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); int size = register_size (gdbarch, regnum); - gdb_byte buf[MAX_REGISTER_SIZE]; + gdb_byte buf[sizeof (ULONGEST)]; + + if (size > (int) sizeof (ULONGEST)) + error (_("Cannot unwind integers more than %d bytes."), + (int) sizeof (ULONGEST)); frame_unwind_register (frame, regnum, buf); return extract_unsigned_integer (buf, size, byte_order); @@ -1410,16 +1418,21 @@ get_frame_register_bytes (struct frame_info *frame, int regnum, } else { - gdb_byte buf[MAX_REGISTER_SIZE]; - enum lval_type lval; - CORE_ADDR addr; - int realnum; + struct value *value = frame_unwind_register_value (frame->next, + regnum); + gdb_assert (value != NULL); + *optimizedp = value_optimized_out (value); + *unavailablep = !value_entirely_available (value); - frame_register (frame, regnum, optimizedp, unavailablep, - &lval, &addr, &realnum, buf); if (*optimizedp || *unavailablep) - return 0; - memcpy (myaddr, buf + offset, curr_len); + { + release_value (value); + value_free (value); + return 0; + } + memcpy (myaddr, value_contents_all (value) + offset, curr_len); + release_value (value); + value_free (value); } myaddr += curr_len; @@ -1460,11 +1473,15 @@ put_frame_register_bytes (struct frame_info *frame, int regnum, } else { - gdb_byte buf[MAX_REGISTER_SIZE]; - - deprecated_frame_register_read (frame, regnum, buf); - memcpy (buf + offset, myaddr, curr_len); - put_frame_register (frame, regnum, buf); + struct value *value = frame_unwind_register_value (frame->next, + regnum); + gdb_assert (value != NULL); + + memcpy ((char *) value_contents_all (value) + offset, myaddr, + curr_len); + put_frame_register (frame, regnum, value_contents_all (value)); + release_value (value); + value_free (value); } myaddr += curr_len;