From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04olkn0805.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe0c::805]) by sourceware.org (Postfix) with ESMTPS id 78CC538983A8 for ; Fri, 21 Jun 2024 10:51:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 78CC538983A8 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=hotmail.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=hotmail.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 78CC538983A8 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f400:fe0c::805 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1718967121; cv=pass; b=f3XkHg1k4NaAiA4XaLWA4iZPiP/FBWMT4uzvKZcy+DHC1HGLGwh8Xc5a4u4lwOAFdUb+oi8upz7+0KEqWU89xpUX2ktgvaRB5jZOt6GkTKD/s7ore0H65B0ksxH3JMsoGRiYo8Ptf3IM7sK4JDFnD0P/FSKkqfHdsANo9aLeLe4= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1718967121; c=relaxed/simple; bh=xwLOldZ+EBcpNLCqzb/SNhaugmGEBw97up1OqtmR1YA=; h=DKIM-Signature:Message-ID:Date:To:From:Subject:MIME-Version; b=GvqVLYGyffBrfdbaF6X/Mm1thqnrXL16c9tQHto0glxHrA/O4TLA5NR3mOXr86VCSigH4tRx/RmBra0R0qLV+IHO0QFORl88WNRDMHpMURxxM4anBD3g3nL2ROK7QwzWwHghvkx+Iy/TyeVj2coE8h0G8iBFQRg0/qYPJ2fYX0E= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YxAwb+HsbnAF9hsCJKxpC0KCxerebLemY0dHjXB/5304xDRnJbPHGsVsN+LCbDHlJFVR9j1hp/o5Nlb44+HTW1qB8EBAM4zlLY/oIyjib/feXtG+fL0MddvkOE2Nr7dAcyACs0GLDIhhCR/b1F9B1S4Wjyd/hFm9jMWqCFwwXRUoXGrezZ0H9rM0TYwyZJDA5zsT7QkJ4JJF0j68WacpgIyEI8Fk/kjPLRphPC53xpOCp+gbjAUE61bL5YLFA7l0Texo6VD2zbt2KA/DNClp4e2SmPKbnmuk8wcl6NCKtuwWNTq9DHVp/nagPVDDBPmW9JaL6tG4PqKY2Qu+bY57MA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0AiuclPrz+ogbTp/zL//lmE9nS+20X0H4YdaoLK55TM=; b=IVTCJeoSlSOBB8KKEHlsbN0iEjaBFY4Jo0tmIolo5nMuoe/Hp7YrcYC832dkGXEPMi/sYLy3zfLXDn/hJs+fVbEjowmtlVyimddKj8MPRbgZ67cBB/s6ArripEDme/C8qT262sOQMHadufyIuEFcbxcm9Jm6k75K1yDoi/KLTv0NA/o9x1klGEtToFnPzecfhrCPBQ2UEcOagxxQNccRe/UqLF82xoIOAAJk6c6IKiV3Vul+5V8TyUGJQTvPyVh5fDpys+gWncd99AiEkYP/DJBK0saWNt0q6dh+rENfOBCtOL1FIiK+sZQQr9wMtIEo/V7+A78DNrhxxFL8kEccjA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=HOTMAIL.DE; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0AiuclPrz+ogbTp/zL//lmE9nS+20X0H4YdaoLK55TM=; b=gVF66+WDTAahNw/SZo7YIWuJntL/iz+CWOi2blOeLPKjWly/p4dFOLm6ZbOiIILpZMhkx8rILIrOE8hIpt74vn+8a/4880JbMTyBDsY/CmKJlZph1wxobJvYPXEAl1cMCRVdyhjRwc1ICP0p4B4UixqbhAgPB7Zu/pJ+jEchXdACXvR5pXYv5/ZmB9FMFKhSWfAydxlBir3SBfhRwpsxwjxEXMTOo9mJ8gJYqPGbDBIG0QdnksgSqa/GHPodCMmHo4rYP+46ht5c/ohlroPX3RsJePLGgGDZUcUYcMV/3ET5I59i19+2gvAUmZl3m2wMpdyZlxZlzTRX/vrM/RCT/w== Received: from AS8P193MB1285.EURP193.PROD.OUTLOOK.COM (2603:10a6:20b:333::21) by PAXP193MB2426.EURP193.PROD.OUTLOOK.COM (2603:10a6:102:228::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7698.21; Fri, 21 Jun 2024 10:51:57 +0000 Received: from AS8P193MB1285.EURP193.PROD.OUTLOOK.COM ([fe80::e65d:5dd2:5662:c61f]) by AS8P193MB1285.EURP193.PROD.OUTLOOK.COM ([fe80::e65d:5dd2:5662:c61f%4]) with mapi id 15.20.7698.020; Fri, 21 Jun 2024 10:51:57 +0000 Message-ID: Date: Fri, 21 Jun 2024 12:54:31 +0200 User-Agent: Mozilla Thunderbird Content-Language: en-US To: "gdb-patches@sourceware.org" From: Bernd Edlinger Subject: [PATCH v2] Fix signal unsafe call inside a signal Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-TMN: [UEa8HhuxckVhbqO9KRV5wC68/FTvJEQyK9VFZqSlWwTPZSIH3o7UF2/wL+5TaIxG] X-ClientProxiedBy: BE1P281CA0270.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:86::17) To AS8P193MB1285.EURP193.PROD.OUTLOOK.COM (2603:10a6:20b:333::21) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P193MB1285:EE_|PAXP193MB2426:EE_ X-MS-Office365-Filtering-Correlation-Id: 4f463f88-008d-49ab-ca6d-08dc91e02bdc X-Microsoft-Antispam: BCL:0;ARA:14566002|461199025|3412199022|4302099010|440099025|1602099009; X-Microsoft-Antispam-Message-Info: 5+t9C5aTPXKrSPcSSoLtbcQIYkItVfg+Ocd1s3OeP4CRa1lnTnyKMQatEk17WUIacOP58O9ANmzad6Grx0HSisc4zaibVf/kpe+Wipgmf0dwtBHSexYn21Dojju705uvA42E7BKxak3c/G3Q+9vBQVzHxO9hj1vBeUMuWc/ErsUeFfiM+7BsMxuxSrIrn3RFDwhwHo0OzBKzBku2hsqBTj+ObyAY89xT1ZcCI2OhjQWeHnli+GL1wOqXPkCVIGMJ6voJF1MZlAa9rTfmbpGe9A9yf1vzCVvssk8JRDQgqgriStFtSg2y92ebWzvaH5os4BamOY8OZ+3ynVg8wNTSfyFq9ksXnBEUqjBfnwp4p7wwWqcfG0CNxbeHRNvwS2CBKN2ZsRed3QXh2/s4+8DO1QGMxXGic/invxhp8FAwp75vwY9e7XPQGsAGsCa9vwezHz2losKjq+zDwM4YCDA3xkdO8hzaNms98bnt3mOJ1b7Fk/9d3W5fEi1bskSHMnYjdC3vDOAPuNq+BtcQbhJcMn2w8jn8VK2S9I2IL5dxooDX3IwC8/tzW2IhSA79vAL1ANpJdwPEByjDOaYiAAmi63cz3eSGDI+mYF9abv2VZqGhoJ4lKHLFNqyWWFKBHGX4p8JQXxycYu/ZEEmu5yA4BG3o6HLz56+++Fk1iIqUc2+px6czvlPHBoLveMSp7+v7 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?U0tHUGtZZFMydWROUHJpZDlGR21LV2VuY0d6RUxqUmh1UFFLaE9lUE45Q0Rv?= =?utf-8?B?Q1VOYU5xQ0NxSUJHNk9acXpPdFV5SWVJZEFRV1FyQldIdmh2d3VQclZhTnl2?= =?utf-8?B?NVJWYnpjUXZ0UjBFVHBqbXBKR3NIUVgwU0lnbU9vVjlNeE9vTVlIYUMvODFh?= =?utf-8?B?cDl6bHYrVFQ2VXdzcDB6bzI5VllsYjAyRTJvbkc0ZWtTVTY0VUlzbjgxaCt1?= =?utf-8?B?NVBsTkQxc2p2Um5xQXNtOHdQZjliWG5kamI4R0ZHbGg5dmpTQmw5Y0hnQ2Fy?= =?utf-8?B?MW1oU2NxWEg3R0ZBRHlSTUlHM1NBNm9XUm4zMU9aWlVsY0hBelppeHRJTitH?= =?utf-8?B?SDJ5czl2UkxpOEdWcHpXN3YwTlBUNU13R2tFdmluRHh2QndwTEt6cGk5dVlM?= =?utf-8?B?dloweTdLcnVLVHZWQmZpTHM0ZHNKckcwTHpKaW5iYUdsNVNmNVRGclYrKzFM?= =?utf-8?B?Z2hCdFdiNGpzWktoSEVxcnR5cUxWZ0JLeStqZTVIRWVqaWV3dHdtdlA1WFVT?= =?utf-8?B?SC9wWHo4RXNjQUdXVUFlclRNU09mckRvZGQ5cXVkZlMzNmx5ck9xQXc3bDZW?= =?utf-8?B?cVBPdVNidHEyRVB1aFBBVnRaNS8xWmVyV0ZhRlp3WElYVGIwMld3YTJrVi9i?= =?utf-8?B?blBUeGxtYmhZYVYyazNiR2RlVFd0SFhPYVVJZ0ZRbUtZRnB2bE02YU8zQmFG?= =?utf-8?B?ODl4L3IvczFWcEYyUi9NSU5jWWRQTURxaklRd1pJYlpxVEtraVBVbGQrQ3R4?= =?utf-8?B?MHk0RVMydFV5RFE2VEJHUTBmd0lsbTNOOVJQVEJrYVN6U3Y5QXQzN0dzVkVx?= =?utf-8?B?WXRCbEt0S2JEMFZGUmpPaHlSQkFhY2Q0V3ZQVVFwWXZyV3JKSlo2Y0FHekZY?= =?utf-8?B?d3g0ZGtEQnh3dTdmdHNYMWNtNENwSVZxWXdZL3AraGpla2hKemJzeFNhS3dI?= =?utf-8?B?SXdyWVJOSXArRzNqM01xaXBxcE5qVVdsR1YyK1BheURtMmZWaGhXNXNJSWhi?= =?utf-8?B?b0U2MWlmSk5Jd29ranpUQXkwbUtmcFdCcXgrT253RkM1dTBpNDNyN01WMkNn?= =?utf-8?B?cTcwSStCenVKK2puV0w3eDM0U2hBb0xaS1F4alZKSmZzQ1o0UHZKaWx4S2Rv?= =?utf-8?B?SUxLcldLNkxMU0F4dkx3aEl4ellYUEs4R29yblZ4djZHUGg4ZVNBSkhsb2pm?= =?utf-8?B?S3orREFNVkE0WHJscUVyYU1wOHlDYU00RGpwckRmRE1aUVBoOGZ3Y0U2S3lO?= =?utf-8?B?R0NoVHpOVmRQOGZ5M0ZWaDRZeHpuVktXWE1WMDVXZW93VDhGRk4zQWlmT1JU?= =?utf-8?B?QmZQbUltR0NSajlvM1labWxGTkNUYldwcVpWaXJ5MmtSeVBBL3dZZ1F5OC9r?= =?utf-8?B?ckxXYWhWN2NNTEFBMWZsRS9aWjBJNk9Pby9ZWUF4dzE5Ynp1NEttOHdKNWVa?= =?utf-8?B?aXY0MWVKUHBZU05FQnBnTjVNMkY5aDVUc1oxbXo0UUJBMmtUM3cyTmlLb1Js?= =?utf-8?B?QWZ1bE1VaU4vMDl2bnE0OWpaeW5NUm5EWkdhNWhSK0Y3SzFjdE1adEttMWtv?= =?utf-8?B?Q0RiNmFzU0pFSWpCNU93bXVBS3FKcjJFMWJWQUI2UlpPUTB4dFplTnhCSmFz?= =?utf-8?B?S3lxS1BCSXBubFAvRUFFMSsyOEhRem51aEdUQzlQRGxBVGI0eUptM2cxeWhF?= =?utf-8?B?Qk5EM05LajA4ZkU1WStYNUQ0Q0llSnpnZzNqNnl0aEFQaVlEdHcxYjdIY2Fu?= =?utf-8?Q?L6noeCrPx8uSxxNrLCD2+r8S+I5Q774ZARLlU3J?= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-80ceb.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 4f463f88-008d-49ab-ca6d-08dc91e02bdc X-MS-Exchange-CrossTenant-AuthSource: AS8P193MB1285.EURP193.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jun 2024 10:51:57.6570 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXP193MB2426 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: As mentioned in https://sourceware.org/bugzilla/show_bug.cgi?id=31713#c9 it can easily happen that the signal handler function handle_fatal_signal() uses various signal unsafe functions. Fix that by pre-computing the necessary language specific strings. --- gdb/bt-utils.c | 22 +++++++++++-- gdb/bt-utils.h | 4 +++ gdb/event-top.c | 83 ++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 99 insertions(+), 10 deletions(-) v2: moved initalization of language specific string to an init function diff --git a/gdb/bt-utils.c b/gdb/bt-utils.c index f658ce0d4bc..5626662a9c1 100644 --- a/gdb/bt-utils.c +++ b/gdb/bt-utils.c @@ -125,6 +125,8 @@ gdb_internal_backtrace_1 () /* See the comment on previous version of this function. */ +static const char *str_backtrace_incomplete; + static void gdb_internal_backtrace_1 () { @@ -139,12 +141,26 @@ gdb_internal_backtrace_1 () backtrace_symbols_fd (buffer, frames, gdb_stderr->fd ()); if (frames == ARRAY_SIZE (buffer)) - sig_write (_("Backtrace might be incomplete.\n")); + sig_write (str_backtrace_incomplete); } #else #error "unexpected internal backtrace policy" #endif + +static const char *str_backtrace; +static const char *str_backtrace_unavailable; + +void +init_str_internal_backtrace () +{ + str_backtrace = _("----- Backtrace -----\n"); + str_backtrace_unavailable = _("Backtrace unavailable\n"); +#ifdef GDB_PRINT_INTERNAL_BACKTRACE_USING_EXECINFO + str_backtrace_incomplete = _("Backtrace might be incomplete.\n"); +#endif +} + #endif /* GDB_PRINT_INTERNAL_BACKTRACE */ /* See bt-utils.h. */ @@ -161,12 +177,12 @@ gdb_internal_backtrace () gdb_stderr->write_async_safe (msg, strlen (msg)); }; - sig_write (_("----- Backtrace -----\n")); + sig_write (str_backtrace); if (gdb_stderr->fd () > -1) gdb_internal_backtrace_1 (); else - sig_write (_("Backtrace unavailable\n")); + sig_write (str_backtrace_unavailable); sig_write ("---------------------\n"); #endif diff --git a/gdb/bt-utils.h b/gdb/bt-utils.h index ec2d14a5484..b6a7ef5464d 100644 --- a/gdb/bt-utils.h +++ b/gdb/bt-utils.h @@ -71,4 +71,8 @@ extern void gdb_internal_backtrace (); extern void gdb_internal_backtrace_set_cmd (const char *args, int from_tty, cmd_list_element *c); +#ifdef GDB_PRINT_INTERNAL_BACKTRACE +extern void init_str_internal_backtrace (); +#endif + #endif /* BT_UTILS_H */ diff --git a/gdb/event-top.c b/gdb/event-top.c index b81970d11bb..02e21634ce5 100644 --- a/gdb/event-top.c +++ b/gdb/event-top.c @@ -892,6 +892,50 @@ unblock_signal (int sig) return false; } +/* Signal safe language specific strings. */ + +#ifdef GDB_PRINT_INTERNAL_BACKTRACE +static const char *str_fatal_signal; +static const char *str_sigsegv; +#ifdef SIGFPE +static const char *str_sigfpe; +#endif +#ifdef SIGBUS +static const char *str_sigbus; +#endif +#ifdef SIGABRT +static const char *str_sigabrt; +#endif +static const char *str_unknown_signal; +static const char *str_fatal_error_detected_gdb_will_now_terminate; +static const char *str_this_is_a_bug; +static const char *str_for_instructions_see; + +static void +init_str_handle_fatal_signal () +{ + str_fatal_signal = _("Fatal signal: "); + str_sigsegv = strsignal(SIGSEGV); +#ifdef SIGFPE + str_sigfpe = strsignal(SIGFPE); +#endif +#ifdef SIGBUS + str_sigbus = strsignal(SIGBUS); +#endif +#ifdef SIGABRT + str_sigabrt = strsignal(SIGABRT); +#endif + str_unknown_signal = _("Unknown signal"); + str_fatal_error_detected_gdb_will_now_terminate = + _("A fatal error internal to GDB has been detected, " + "further\ndebugging is not possible. GDB will now " + "terminate.\n\n"); + str_this_is_a_bug = _("This is a bug, please report it."); + str_for_instructions_see = _(" For instructions, see:\n"); + init_str_internal_backtrace (); +} +#endif + /* Called to handle fatal signals. SIG is the signal number. */ static void ATTRIBUTE_NORETURN @@ -910,19 +954,40 @@ handle_fatal_signal (int sig) if (bt_on_fatal_signal) { sig_write ("\n\n"); - sig_write (_("Fatal signal: ")); - sig_write (strsignal (sig)); + sig_write (str_fatal_signal); + switch (sig) + { + case SIGSEGV: + sig_write (str_sigsegv); + break; +#ifdef SIGFPE + case SIGFPE: + sig_write (str_sigfpe); + break; +#endif +#ifdef SIGBUS + case SIGBUS: + sig_write (str_sigbus); + break; +#endif +#ifdef SIGABRT + case SIGABRT: + sig_write (str_sigabrt); + break; +#endif + default: + sig_write (str_unknown_signal); + break; + } sig_write ("\n"); gdb_internal_backtrace (); - sig_write (_("A fatal error internal to GDB has been detected, " - "further\ndebugging is not possible. GDB will now " - "terminate.\n\n")); - sig_write (_("This is a bug, please report it.")); + sig_write (str_fatal_error_detected_gdb_will_now_terminate); + sig_write (str_this_is_a_bug); if (REPORT_BUGS_TO[0] != '\0') { - sig_write (_(" For instructions, see:\n")); + sig_write (str_for_instructions_see); sig_write (REPORT_BUGS_TO); sig_write ("."); } @@ -1050,6 +1115,10 @@ gdb_init_signals (void) create_async_signal_handler (async_sigtstp_handler, NULL, "sigtstp"); #endif +#ifdef GDB_PRINT_INTERNAL_BACKTRACE + init_str_handle_fatal_signal (); +#endif + #ifdef SIGFPE signal (SIGFPE, handle_fatal_signal); #endif -- 2.39.2