From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 70535 invoked by alias); 20 Jan 2017 15:19:35 -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 69579 invoked by uid 89); 20 Jan 2017 15:19:21 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-HELO: sesbmg23.ericsson.net Received: from sesbmg23.ericsson.net (HELO sesbmg23.ericsson.net) (193.180.251.37) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 20 Jan 2017 15:19:21 +0000 Received: from ESESSHC021.ericsson.se (Unknown_Domain [153.88.183.81]) by (Symantec Mail Security) with SMTP id 6B.ED.26363.67A22885; Fri, 20 Jan 2017 16:19:18 +0100 (CET) Received: from EUR01-VE1-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.319.2; Fri, 20 Jan 2017 16:16:10 +0100 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; Received: from elxcz23q12-y4.ca.am.ericsson.se (192.75.88.130) by AMSPR07MB390.eurprd07.prod.outlook.com (10.242.22.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.6; Fri, 20 Jan 2017 15:16:08 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH] Fix python-interactive with Python 3.6 Date: Fri, 20 Jan 2017 15:19:00 -0000 Message-ID: <20170120151550.24928-1-simon.marchi@ericsson.com> MIME-Version: 1.0 Content-Type: text/plain X-ClientProxiedBy: BN6PR03CA0052.namprd03.prod.outlook.com (10.173.137.14) To AMSPR07MB390.eurprd07.prod.outlook.com (10.242.22.13) X-MS-Office365-Filtering-Correlation-Id: 33ed1208-b1a4-4331-70dc-08d441474339 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:AMSPR07MB390; X-Microsoft-Exchange-Diagnostics: 1;AMSPR07MB390;3:M+RCnw9YiX//akA9Z1NIdbpxvj9VYU3rRTzuhpuxkwLEoiTFP9pgRQBPWgDhEtANyKx/40eTmMDDKUaUoZ3dHWFeDBEW0fiF3Ityh+SxmsGP7kwWa93YJZ6GmiNfvC0LIkLM1VaEOYlGN2zU1dk3WRZqE+m4podOABvYylc3DlwCWOxbRswLu8Rp2pkg3BQwAvY2xiFw5zBXjGP2eYBhu1+tBg+K/mAUMi1mLa6+LqPsV7eyC7xtCAh5aPgImWGRhdQEN4LpucHiCGfKJGhdMQ==;25:x9o6bVLujAzsMpqiRSs+wnalu3EBZp0stg9LkFFm+FMWrCcKx/fMkGgSAMPkrofU+bhkxg9F9VTjh3LJyFlaNsNg+rxvbJz+AWA0La7W4/FLiW/2UUpRhpAHkVNLQz4O1FT+1G002SpVQYn5xgnuobvj3tn9H0szB2vmAueuV9HZlIqedDV2b9n77FQbcjerDhOReYJ0llbLy5qU8khvX34XKFvqK423ogA1qPq0njYyQTGgNJtV4EjPDnLRAwdpC7uc9jUKoSSZH/1fFAIUz02lTYdaoZl15T7YBPe64NZzB2AkZ2V9I7QLDhG4CypmtjLybFzIbZWKZs+gpEzYkQPkW6/mW9sAoeO7BHI+RkKViHZSoX4j7PA7HEbDLfb/COhL33cCtqi4XfNPYP+z0hknRSRbZEttG9K8Nr/XGxVUtscM/snenv4qLA+E4il0gQJk7aqNspms+wtFaNos9Q== X-Microsoft-Exchange-Diagnostics: 1;AMSPR07MB390;31:foE+qeSTj0erl8YrX5cAAsvpiLO2dbotRlEQuKZ5ucDz1k+wL+QD+z1hBAH1M2t7CYUsfT6BYIQXMLYofi1ijjPMyZ2c6ADZ/WwamSfscVqCTwB2WllnLMnMmJicH/QNAqencZb7XQKAvYn+ZP5wflXgcbdxsUJUMOmYYPbD6quUG2kCPCL517DYuvLMijTkmKhUt6QEVAz6G8/tv3N9EGRYKDiebXVs5Bco+878XjuGYitUJCUm9uPmLvZ65Hud/VdHNCbb+Lp+Fn+fOINcxOT61JTkvaz9Pj5xjl5QlVk=;20:2FBvSYs5fnldVEScimqFJgjyI0+f38Xbc7Bgd5Hvwr/Timd8oDMcSxRrK8hbSu9InbMqHClmTpkW92W2TtaQ8GK2CNmJH15qgeayoNiKz6Pdj6d2yFXlCUDrMHPBJAc5ZcQlH5QpewLX9/rKxcxzbRJAHgfpROq0GIzlutlEt6DsagnwHp4XrBhXlSfQETgbN+SMhEL5tZieljCQEeRTR7rdJlYRZArSohfeKGFAagIZN+ftvPCzT6OyugFnq2LJviYQB3pXJqL5dy9JdhttzfRZXI6JJPIg6/BOm9+hf45klBYXGjgdGruHiDpkyv4JewWU/9Nh8me7q0JMtbTeKkVybGyICFPhamlwdwUE7CXniplUcgDjPTQyzch3ZelcOiaIkB5HnZMeXqSul43+e9apWSkDw/Y5G6fHOdAVAdOzjtqA0byED5cCJ7gUX8pd4mXRNPDUZelRWEMEXRkoi2bY3fLwNILNy98UrwTLp2DvRbC8ROcse+/IdK1rU1Sy X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041248)(20161123564025)(20161123562025)(20161123555025)(20161123558021)(20161123560025)(6072148);SRVR:AMSPR07MB390;BCL:0;PCL:0;RULEID:;SRVR:AMSPR07MB390; X-Microsoft-Exchange-Diagnostics: 1;AMSPR07MB390;4:qii4tF6mgyTq0lf6I2Ovu9lrBNicYkqZrkaswjTYlbml3mPb/1gLCU4WODj53LwgkLPxc+OaeYZDbsP0VHigFNn5X2BqWkzTOBcaFJYMlsg0MYQVZao7Xyo04Cb3WVj9hI1l7UpyIFLvWexu5v2fZ/ArudDkia+mq1LTmUrLf7QuNHs8H/ZWLzN5YP8fyHc3LRB1vjQP56oK1x7fgrll2IZiqm2Z0bTaYNaBi5eeb36HvJ/OSJPtcglfhgqR5VVivzl4QBhmqFZf7hwvjt4Y6wcpjaiYtM2p/GO4QfUlap2QiySJto4Jccc2VeCCdmvqoxV4RH5zz+16WEikZHFvEZ6hh/xwg5/h1qWXjmbeLzTqdTAkyUkRYV3YybdLj8DAWcUBrJM3pS1iO0D9sd9SD7eJWK5t6awebEIQA3Hrwisw8RaCO3yTja8V2NOAiHyt4Bu5uvpGBa18FPwsDWt9PdwOe+wpVGQ1gx1O+wmK4hODg14NsMn0/YAy4jGOE2Y2TpXhlygb9e4Y+GJtmOpUGfqVg2zR+hzaRykUSg54AlN35hDMBSRU6NnpX5xW5sF34W/UTS+0i640xgRjN1f6eKzeXiQloeO5I1xAfduTIaE= X-Forefront-PRVS: 01930B2BA8 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(39450400003)(54534003)(189002)(199003)(4001430100002)(8676002)(81166006)(81156014)(53936002)(66066001)(4326007)(450100001)(5660300001)(47776003)(110136003)(3846002)(6116002)(48376002)(6506006)(92566002)(6916009)(25786008)(2906002)(6666003)(86362001)(7736002)(305945005)(189998001)(97736004)(5003940100001)(68736007)(42186005)(50466002)(106356001)(6512007)(33646002)(105586002)(1076002)(101416001)(107886002)(38730400001)(50226002)(6306002)(36756003)(50986999)(2351001)(6486002);DIR:OUT;SFP:1101;SCL:1;SRVR:AMSPR07MB390;H:elxcz23q12-y4.ca.am.ericsson.se;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AMSPR07MB390;23:ytytdL8AkpJsi1nr81gOI3+y0bfE9opcFTleHaXBWA?= =?us-ascii?Q?cmHPJHGuYmYSnQymsxvrQTuxj8ie+AeBABP6Do7eChDobTU4CRaYCNgpGqGA?= =?us-ascii?Q?JBEkx/zydUxMZ9UchvEkXrwZVru0OC2rv4Lu1c+kr80cv+BliXVJNQ+TrFcv?= =?us-ascii?Q?B6JoVu2bIsbtixjCh+QQkdUSb2NHvZhd45ncs0oTQ8QJc5JFYfkdQHbDvbLT?= =?us-ascii?Q?8yqyWPjqLotkdSRgT1r5BjiVamBrRPJqWQVQF4GJ1zxBhieB6cUdCZ7IY7K3?= =?us-ascii?Q?w87x3rUQEk/eqDQwZcu9XrOvdYEtL9EaoqoyQeXUNw4TxVTUi5k6Oge3xzJZ?= =?us-ascii?Q?fjkh8Xv3zuJHQiJUZz2a8Y4Wb/vNowKkjRM0qy9NKWX4/gkU9iMAcyshK9lP?= =?us-ascii?Q?jqVB5Wk3lD80YAXUKxOThnLahsZ+b3UsxLIjtPRWqu7lOMxIc5Ab9w+FS48X?= =?us-ascii?Q?dk23/KhccvEZ6/VzOAyx3NejuR/1A0xuh7nFppIKSooso5OHCKtRU8nbVvmR?= =?us-ascii?Q?O7C2svtFts4RcwuO24p1jopLSVUiI8nAj8PXhI3fe3IS8el81Ucl8HbgakD8?= =?us-ascii?Q?nEqm0Dwa8HAlAhAaDSAXzEeQhh7pbcTvOMJjRCeyQ/p4XSTotPQo22rjVycw?= =?us-ascii?Q?dEBYs6Z11ED6fQNxhBd9SzuFNLHI9PSyQgAPPcov4VM7bz7Tv+s+T/UEHCx7?= =?us-ascii?Q?0b4g7AB+v/Xe+9040VCIkGHi4pwMTxoix8Y5Yv8TSSYDTzka/qDQUzSMj1NA?= =?us-ascii?Q?aJvaGkjNbgWJIX3OlCjnqvNgIcUfIX5O0BbiDACg9/NSAiCHFRe97AMa4X8J?= =?us-ascii?Q?02lpwYN88S84Wo1CCyNLnJ4gS1u2M/vATi6b/+Nd4a2pDenTs5n1qsgX1GjU?= =?us-ascii?Q?l7trmrFAhC9il9gTJl7CVeCzqZrF0z94ukxEqCLsGpr8mRxKu1tr1DC+67RK?= =?us-ascii?Q?Xds/dJfwXRrUQ7uivqeD125aloxP7rkzcgRDbfrCbAi5oLsMXNIwZBahtBGo?= =?us-ascii?Q?zTHEktZXc4VC3VT5aW5DgFwc4k/1jNGrbSkCUNVHRvCUerKnARFj90LbCp2g?= =?us-ascii?Q?/FhvN89+Hm22RSnP5eat77/5p8kEmNa4E92zLbnwDW9eG/EjIWMHfynOT7Eh?= =?us-ascii?Q?lDgcoCokmpWdlebTSwjVDNDEG7c3pJbsKXgveHntt4l/4CNcDKdsAubZatcw?= =?us-ascii?Q?mHkkAHG7tsdOgQkBGEMoi9EAnCLxN8SZFG?= X-Microsoft-Exchange-Diagnostics: 1;AMSPR07MB390;6:qMi+W25SRo3DKBoGi58SdOR6TvbxOUPwm9ReGPrsbB8A2M1YoGeE+v9e7/ORNO/DbEYLVpL3lN8Yv8mkkn0eR9a0BCKGWOU5e8HnLQjbymOYYTnoZ1l/jeDgf5QWqi6N6ozcapSlfcMDvEzRJcDrk9L7cCwC16HkQVkPntjrQbLefa8u4e32se4iWVzqBzKra+wzsLPn44Zo2sbzjOjhwpl2BKitYq4ONHnOXmdhM5TDkRvC0ZeQcXOfcl6jCNp8hLy5LpYxAAqPdr2FTRBfr+5mubW2Stnl8L2O+yUh55ud8MuDEniSro35qcd42XgtNN9l7apd806+tS6XRW3KDoBz/xrjZYAjDU4FYyN99omcbxjKRYOICrPOomfG5BuH5CKtz3vHD2PB03uRgKjg6hlGaAMF650sT/dYu8F/Voc=;5:jgudHio/v/SkePvD9LN9T0mh1F18Me3LplB0XjCuaiKdYTPVxU2YVHqHEQd95oOMCczbXAEPa9O859XWTp4Ku2AYC85ADLHfw778OtQsDqetJbxn0DkuFvjAIgmTGu0y9XnbcOJNMbRdlHjV5EVu7g==;24:e2gXbI7vIU80Yt6cpTijfAsvVd3CYF7Z7fssVDuVLbFJ44oYWqGVHaS3etcoZtrqc8ljj076u0Ktd1qQtozNSmJGYe2LMztXaTYoYDPMfSY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AMSPR07MB390;7:6yKmoWezjjkvDsw78sJbSuW6yGEnDSWlZQnZRuDfnxYHiZgf9M6i8DZAEChyxADi3VT5lTtUdBVCy0Cm0LkvwrVPMsWJHgUgbnA8kgG/rHOj1ec2u2+84b24BzoX1ukoHWT0zFc28NFrV2nlx8h6sjKirICp3LQYqUZpdTzCRfN7jHAiPMuHuPs4fa4+gwMD10bMtttXGhdy9phzsV/JQxWuSKeQudE1nHQCTUC9m/aGhyabYte4AT5qKvOZ6lJbv5MKc9jQGPcR94yLqs3w4B51MZN7kM90N8lNwEEENT9itxlS84WpltoXVy90xDsrwKJyzpvjKXAfOeRox8wY5bUpUarlRBkMz5GFulXfbkUkm3kWacoxjcIQ6Bm1veZI0+wTpSulB/S8zpgS2fC2TjYRO3isgFOUWxBEzG759CY77jbxrWJ7NYF8jXEEiZAtXvPxQRqToYxk4jm+aVMqEQ== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2017 15:16:08.7940 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMSPR07MB390 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes X-SW-Source: 2017-01/txt/msg00415.txt.bz2 Since Python 3.4, the callback installed in PyOS_ReadlineFunctionPointer should return a value allocated with PyMem_RawMalloc instead of PyMem_Malloc. The reason is that PyMem_Malloc must be called with the Python Global Interpreter Lock (GIL) held, which is not the case in the context where this function is called. PyMem_RawMalloc was introduced for cases like this. In Python 3.6, it looks like they added an assert to verify that PyMem_Malloc was not called without the GIL. The consequence is that typing anything in the python-interactive mode of gdb crashes the process. The same behavior was observed with the official package on Arch Linux as well as with a manual Python build on Ubuntu 14.04. This is what is shown with a debug build of Python 3.6 (the error with a non-debug build is far less clear): (gdb) pi >>> print(1) Fatal Python error: Python memory allocator called without holding the GIL Current thread 0x00007f1459af8780 (most recent call first): [1] 21326 abort ./gdb and the backtrace: #0 0x00007ffff618bc37 in raise () from /lib/x86_64-linux-gnu/libc.so.6 #1 0x00007ffff618f028 in abort () from /lib/x86_64-linux-gnu/libc.so.6 #2 0x00007ffff6b104d6 in Py_FatalError (msg=msg@entry=0x7ffff6ba15b8 "Python memory allocator called without holding the GIL") at Python/pylifecycle.c:1457 #3 0x00007ffff6a37a68 in _PyMem_DebugCheckGIL () at Objects/obmalloc.c:1972 #4 0x00007ffff6a3804e in _PyMem_DebugFree (ctx=0x7ffff6e65290 <_PyMem_Debug+48>, ptr=0x24f8830) at Objects/obmalloc.c:1994 #5 0x00007ffff6a38e1d in PyMem_Free (ptr=) at Objects/obmalloc.c:442 #6 0x00007ffff6b866c6 in _PyFaulthandler_Fini () at ./Modules/faulthandler.c:1369 #7 0x00007ffff6b104bd in Py_FatalError (msg=msg@entry=0x7ffff6ba15b8 "Python memory allocator called without holding the GIL") at Python/pylifecycle.c:1431 #8 0x00007ffff6a37a68 in _PyMem_DebugCheckGIL () at Objects/obmalloc.c:1972 #9 0x00007ffff6a37aa3 in _PyMem_DebugMalloc (ctx=0x7ffff6e65290 <_PyMem_Debug+48>, nbytes=5) at Objects/obmalloc.c:1980 #10 0x00007ffff6a38d91 in PyMem_Malloc (size=) at Objects/obmalloc.c:418 #11 0x000000000064dbe2 in gdbpy_readline_wrapper (sys_stdin=0x7ffff6514640 <_IO_2_1_stdin_>, sys_stdout=0x7ffff6514400 <_IO_2_1_stdout_>, prompt=0x7ffff4d4f7d0 ">>> ") at /home/emaisin/src/binutils-gdb/gdb/python/py-gdb-readline.c:75 The documentation is very clear about it [1] and it was also mentioned in the "What's New In Python 3.4" page [2]. [1] https://docs.python.org/3/c-api/veryhigh.html#c.PyOS_ReadlineFunctionPointer [2] https://docs.python.org/3/whatsnew/3.4.html#changes-in-the-c-api gdb/ChangeLog: * python/py-gdb-readline.c (PyOS_ReadlineFunctionPointer_Malloc): Define. (gdbpy_readline_wrapper): Use it. --- gdb/python/py-gdb-readline.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/gdb/python/py-gdb-readline.c b/gdb/python/py-gdb-readline.c index 8b396db443..1d02b03f50 100644 --- a/gdb/python/py-gdb-readline.c +++ b/gdb/python/py-gdb-readline.c @@ -21,6 +21,16 @@ #include "python-internal.h" #include "top.h" #include "cli/cli-utils.h" + +/* Starting from Python 3.4, the result of the PyOS_ReadlineFunctionPointer + callback must be allocated with PyMem_RawMalloc rather than PyMem_Malloc. */ + +#if PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 4 +#define PyOS_ReadlineFunctionPointer_Malloc PyMem_RawMalloc +#else +#define PyOS_ReadlineFunctionPointer_Malloc PyMem_Malloc +#endif + /* Readline function suitable for PyOS_ReadlineFunctionPointer, which is used for Python's interactive parser and raw_input. In both cases, sys_stdin and sys_stdout are always stdin and stdout @@ -63,7 +73,7 @@ gdbpy_readline_wrapper (FILE *sys_stdin, FILE *sys_stdout, /* Detect EOF (Ctrl-D). */ if (p == NULL) { - q = (char *) PyMem_Malloc (1); + q = (char *) PyOS_ReadlineFunctionPointer_Malloc (1); if (q != NULL) q[0] = '\0'; return q; @@ -72,7 +82,7 @@ gdbpy_readline_wrapper (FILE *sys_stdin, FILE *sys_stdout, n = strlen (p); /* Copy the line to Python and return. */ - q = (char *) PyMem_Malloc (n + 2); + q = (char *) PyOS_ReadlineFunctionPointer_Malloc (n + 2); if (q != NULL) { strncpy (q, p, n); -- 2.11.0