From patchwork Thu Apr 6 16:20:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Preud'homme X-Patchwork-Id: 19883 Received: (qmail 8485 invoked by alias); 6 Apr 2017 16:20:32 -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 4568 invoked by uid 89); 6 Apr 2017 16:20:29 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy= X-HELO: foss.arm.com Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 06 Apr 2017 16:20:28 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7913828; Thu, 6 Apr 2017 09:20:28 -0700 (PDT) Received: from [10.2.206.52] (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 06C943F3E1; Thu, 6 Apr 2017 09:20:27 -0700 (PDT) Subject: Re: [PATCH, GDB] Fix Windows gdb build failure with python support To: Pedro Alves , gdb-patches@sourceware.org References: From: Thomas Preudhomme Message-ID: Date: Thu, 6 Apr 2017 17:20:26 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: X-IsSubscribed: yes Thanks Pedro. Committed the attached patch. Best regards, Thomas On 06/04/17 16:05, Pedro Alves wrote: > On 04/06/2017 03:28 PM, Thomas Preudhomme wrote: >> >> >> GDB fails to build for Windows host with python support enabled due to > > Uppercase "Python", and would be a good idea to mention that this is > Python 2. > >> python_file's second argument > > It's actually PyFile_FromString's second parameter, not python_file's. > "python_file" is a reference that is being initialized from the result > of PyFile_FromString. > >> being of type char * and being passed a >> string litteral. > > Typo "literal". > >> This patch takes the conservative assumptions that the >> function might indeed modify the character string and use a local char >> array to pass the mode instead. > > The Python API is notoriously buggy wrt to const-correctness when > it comes to string parameters. > > Note that in gdb/python/python-internal.h, we have fixups for all of: > > PyObject_GetAttrString > PyObject_HasAttrString > PyObject_CallMethod > PyErr_NewException > PySys_GetObject > PySys_SetPath > PyGetSetDef > PyArg_ParseTupleAndKeywords > > Over the years it's been getting better. > > A few of those were added just yesterday, but I didn't build Windows > with Python so I missed this one. > > Now, this API in particular seems to have been removed completely > in Python 3, so there's no "it was fixed in 3.x" that we could put > in a comment. Anyway, since this is just one single place, let's just > not bother with anything fancy. > > Please just add a cast instead (and update the commit log accordingly): > > PyFile_FromString (full_path.get (), (char *) "r") > > OK with that change. > > Thanks, > Pedro Alves > From 0dedf3777db42712f460123ac0c63c49de5456f5 Mon Sep 17 00:00:00 2001 From: Thomas Preud'homme Date: Thu, 6 Apr 2017 17:17:23 +0100 Subject: [PATCH] Fix Windows gdb build failure with Python 2 support GDB fails to build for Windows host with Python 2 support enabled due to PyFile_FromString's second argument being of type char * and being passed a (const) string literal. This parameter is input only so this commit fixes the issue by casting to char *. 2017-04-06 Thomas Preud'homme gdb/ * python/python.c (python_run_simple_file): Cast mode literal to non-const char pointer as expected by PyFile_FromString. --- gdb/ChangeLog | 5 +++++ gdb/python/python.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 880af5b..e906b87 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2017-04-06 Thomas Preud'homme + + * python/python.c (python_run_simple_file): Cast mode literal to + non-const char pointer as expected by PyFile_FromString. + 2017-04-05 Simon Marchi * common/ptid.c (ptid_lwp_p, ptid_tid_p): Remove comparison with diff --git a/gdb/python/python.c b/gdb/python/python.c index cc58267..e0e24ac 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -352,7 +352,7 @@ python_run_simple_file (FILE *file, const char *filename) /* Because we have a string for a filename, and are using Python to open the file, we need to expand any tilde in the path first. */ gdb::unique_xmalloc_ptr full_path (tilde_expand (filename)); - gdbpy_ref<> python_file (PyFile_FromString (full_path.get (), "r")); + gdbpy_ref<> python_file (PyFile_FromString (full_path.get (), (char *) "r")); if (python_file == NULL) { gdbpy_print_stack (); -- 1.9.1