From patchwork Thu Mar 1 17:03:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Hayward X-Patchwork-Id: 26140 Received: (qmail 14230 invoked by alias); 1 Mar 2018 17:03:52 -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 14191 invoked by uid 89); 1 Mar 2018 17:03:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.0 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: EUR03-VE1-obe.outbound.protection.outlook.com Received: from mail-eopbgr50069.outbound.protection.outlook.com (HELO EUR03-VE1-obe.outbound.protection.outlook.com) (40.107.5.69) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 01 Mar 2018 17:03:48 +0000 Received: from AM3PR08MB0101.eurprd08.prod.outlook.com (10.160.211.19) by AM3PR08MB0610.eurprd08.prod.outlook.com (10.163.188.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.548.13; Thu, 1 Mar 2018 17:03:44 +0000 Received: from AM3PR08MB0101.eurprd08.prod.outlook.com ([fe80::fc60:4b4d:7de8:f8b7]) by AM3PR08MB0101.eurprd08.prod.outlook.com ([fe80::fc60:4b4d:7de8:f8b7%16]) with mapi id 15.20.0527.022; Thu, 1 Mar 2018 17:03:44 +0000 From: Alan Hayward To: "gdb-patches@sourceware.org" CC: nd Subject: [PATCH PR gdb/22736] [aarch64] gdb crashes on a conditional breakpoint with cast return type Date: Thu, 1 Mar 2018 17:03:44 +0000 Message-ID: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alan.Hayward@arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM3PR08MB0610; 7:Q9vTUjfyetPCRup6YQyoNZk4GVNn6a4d+/vrb3jrex0Ovt2Mz4IlkMWIWgdzK/iWcjVRpqrdS1KOkgTOh4VYgq3AnY6js3FF213YSKUjhIaFX/h4BRK3QSDDkevGo1GkNnzvHX9JlqZbDKn2cwP7nxrzB3PPmVSing7opQhm1sLAShpPzdwXuLDtE9uX/7TuqPpp/8z36qF/jU/nYVLVL3AQdjTjQVrIEYVwQaU7yHLnTIzbnqns3p8zKbV1VkYL x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: e1689b41-8447-46c0-ddda-08d57f966454 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(3008032)(2017052603307)(7153060)(7193020); SRVR:AM3PR08MB0610; x-ms-traffictypediagnostic: AM3PR08MB0610: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040501)(2401047)(5005006)(8121501046)(10201501046)(3231220)(944501161)(52105095)(93006095)(93001095)(3002001)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(6072148)(201708071742011); SRVR:AM3PR08MB0610; BCL:0; PCL:0; RULEID:; SRVR:AM3PR08MB0610; x-forefront-prvs: 05986C03E0 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(39380400002)(396003)(366004)(376002)(346002)(199004)(189003)(377424004)(3846002)(68736007)(82746002)(25786009)(6512007)(316002)(6916009)(97736004)(2900100001)(8936002)(5660300001)(83716003)(99286004)(6116002)(66066001)(5640700003)(2501003)(36756003)(2906002)(81156014)(6506007)(106356001)(81166006)(2351001)(26005)(3660700001)(8676002)(186003)(33656002)(5250100002)(4326008)(6436002)(14454004)(72206003)(3280700002)(305945005)(478600001)(102836004)(7736002)(86362001)(6486002)(105586002)(53936002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR08MB0610; H:AM3PR08MB0101.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: EzIBJkCam32vMQ6IFAJEFSrDjpiQJ7zM2vOYCvaiKwDBAdt7lS65nX0YbtDZvKVB0jUGStJYvbVQJHLTrpGrM57+8ypT/ktj2IpdiyzVuSlLjxzwqqllJWbIRF7JO//QxwBnI30/DDBB5JU8lGwqzXPyK3JFAe7tDgwLGua0wfk= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: e1689b41-8447-46c0-ddda-08d57f966454 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Mar 2018 17:03:44.5711 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR08MB0610 X-IsSubscribed: yes On aarch64, the (int) casting in the following causes a gdb segfault: $ ./gdb ./gdb (gdb) b dwarf2_physname if (int)strcmp (name, "another_thread_local") == 0 (gdb) run a.out // use any a.out This is due to getting a null pointer from TYPE_TARGET_TYPE, and then using it for language_pass_by_reference(). Fixed by adding a null check, similar to other occurrences in gdb. Tested on aarch64 with make check using unix, native_gdbserver. Alan. 2018-03-01 Alan Hayward * aarch64-tdep.c (aarch64_push_dummy_call): Check for null return_type. diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index f08945ea07101e1cd7906ca640c023ac7d189dd9..ef982c78fe64ceef3c7c378fd22d76604bf81c31 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -1382,7 +1382,7 @@ aarch64_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct aarch64_call_info info; struct type *func_type; struct type *return_type; - int lang_struct_return; + int lang_struct_return = 0; memset (&info, 0, sizeof (info)); @@ -1424,7 +1424,8 @@ aarch64_push_dummy_call (struct gdbarch *gdbarch, struct value *function, given an additional initial argument, a hidden pointer to the return slot in memory. */ return_type = TYPE_TARGET_TYPE (func_type); - lang_struct_return = language_pass_by_reference (return_type); + if (return_type != nullptr) + lang_struct_return = language_pass_by_reference (return_type); /* Set the return address. For the AArch64, the return breakpoint is always at BP_ADDR. */