From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from omta040.useast.a.cloudfilter.net (omta040.useast.a.cloudfilter.net [44.202.169.39]) by sourceware.org (Postfix) with ESMTPS id F2A0E3858C98 for ; Wed, 31 Jan 2024 00:40:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F2A0E3858C98 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F2A0E3858C98 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=44.202.169.39 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706661641; cv=none; b=SwYKFjcSjaazRP1BFmYlG24FHtPaEGMQd5/7pNsQbgpdXAzybXdTd5PBNhzRCQDsQpErhBaEbUbKTMMc9RMatBRF0++IInV8iKYg/uZvQla1Ee9IkuKke/ALFpeSEKxrQeHJ8MrCQcvNorDZlrsb9qV5oWWOo5MVA2fU96QeMHo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706661641; c=relaxed/simple; bh=mY4iYhrtd6kkh0Q3vC2tkcgo9T1usPb6/8lYL3dJT9U=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=qwAX8KzQ/P7aMFJBbgIjqETKFM6CJJ5oM0r4rCvdU1PD5tTLrnmgwnPmqrZZNcpzvdtubsTzUZRurJ5SvyvC36JPLK6kEn46sb+d8dR1wCEYlPUCmMPx2eCoysBXeyUn01oCaXGH23wqpgAfihjia7RabItI/oUsfVr32YEor18= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from eig-obgw-6004a.ext.cloudfilter.net ([10.0.30.197]) by cmsmtp with ESMTPS id UwcHrXAYSTHHuUyebrwmtx; Wed, 31 Jan 2024 00:40:37 +0000 Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTPS id Uyear1ses55BJUyearj4Xi; Wed, 31 Jan 2024 00:40:36 +0000 X-Authority-Analysis: v=2.4 cv=QcR1A+Xv c=1 sm=1 tr=0 ts=65b99704 a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=dEuoMetlWLkA:10 a=Qbun_eYptAEA:10 a=VnNF1IyMAAAA:8 a=Tmlj4QhAKxDtouTMiTkA:9 a=3ZKOabzyN94A:10 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date:References :Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=DR1GDxIxU5yul49xuq8VgUrydFmU2zdz2TpAjFmjohc=; b=LdRFoDLQx+T9bW4vDg0pzootTq qK11QefVvRJkCdretn3RBIBoXiio47qE4eISCHBA0JYs7mzVj2VkCAFKKhQ+OLpIzIAiTryyxnFWA jluqnFiQkvPzdWeZM+McU/qg3; Received: from 97-122-68-157.hlrn.qwest.net ([97.122.68.157]:35660 helo=prentzel) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96.2) (envelope-from ) id 1rUyeZ-001gza-2q; Tue, 30 Jan 2024 17:40:35 -0700 From: Tom Tromey To: Aditya Kamath1 Cc: Tom Tromey , Ulrich Weigand , Sangamesh Mallayya , Aditya Kamath1 via Gdb-patches Subject: Re: [PATCH] Fix AIX build break. References: <20240117182831.74066-1-Aditya.Kamath1@ibm.com> <87o7djn4nh.fsf@tromey.com> <875xzpmgtd.fsf@tromey.com> <87plxpqjeb.fsf@tromey.com> X-Attribution: Tom Date: Tue, 30 Jan 2024 17:40:34 -0700 In-Reply-To: (Aditya Kamath1's message of "Fri, 26 Jan 2024 08:37:27 +0000") Message-ID: <878r46pc71.fsf@tromey.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 97.122.68.157 X-Source-L: No X-Exim-ID: 1rUyeZ-001gza-2q X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 97-122-68-157.hlrn.qwest.net (prentzel) [97.122.68.157]:35660 X-Source-Auth: tom+tromey.com X-Email-Count: 4 X-Org: HG=bhshared;ORG=bluehost; X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-CMAE-Envelope: MS4xfO/tY5KunTo2ONSFIZl7Q1amSypXALqhFV0HkmD9q5oJ6lCVnXtf5SYeh4hlITK0Kut7kYzQxUsfrUHPGE3KcgrEKLYHbXtWHlGWwPi5ta5dxSbMEW1n vLKv6E/N4TO5mybKyLIlSUgt2JQzBlh7UIaVzhfm11QdoZn7mfx0X1jTYEx4hs5Mb5UTz13HfISgd3D9hmjDsyaTpfBYa6cAaIw= X-Spam-Status: No, score=-3022.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,JMQ_SPF_NEUTRAL,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: >>>>> "Aditya" == Aditya Kamath1 writes: Aditya> Please find attached a patch. (See: 0001-Fix-AIX-build-break.patch) Aditya> Thank you for your feedback. Thanks. This looks basically reasonable, but rather than subject you to another round of review, I just went ahead and made a few changes. Could you try this out? Basically there were some formatting issues and I thought the code ought to be in utils.c. You may wish to send an email to the Insight list, warning them that this is going to break their build. Tom >From c67ddecdef06043a916a07ad34b3f4db090d377f Mon Sep 17 00:00:00 2001 From: Aditya Vidyadhar Kamath Date: Fri, 26 Jan 2024 02:19:52 -0600 Subject: [PATCH] Fix AIX build break. A recent commit broke AIX build. The thread_local type defined functions were being considered a weak symbol and hence while creating the binary these symbols were not visible. This patch is a fix for the same. --- gdb/complaints.c | 16 +++++++++------- gdb/complaints.h | 8 +++----- gdb/defs.h | 2 -- gdb/interps.c | 1 - gdb/top.c | 4 ---- gdb/utils.c | 23 +++++++++++++++++++++-- gdb/utils.h | 17 +++++++++++++++++ 7 files changed, 50 insertions(+), 21 deletions(-) diff --git a/gdb/complaints.c b/gdb/complaints.c index 0c46cd7c84f..496736fe95f 100644 --- a/gdb/complaints.c +++ b/gdb/complaints.c @@ -57,8 +57,9 @@ complaint_internal (const char *fmt, ...) va_start (args, fmt); - if (deprecated_warning_hook) - (*deprecated_warning_hook) (fmt, args); + warning_hook_handler handler = get_warning_hook_handler (); + if (handler != nullptr) + handler (fmt, args); else { gdb_puts (_("During symbol reading: "), gdb_stderr); @@ -84,15 +85,15 @@ thread_local complaint_interceptor *complaint_interceptor::g_complaint_intercept /* See complaints.h. */ complaint_interceptor::complaint_interceptor () - : m_saved_warning_hook (&deprecated_warning_hook, issue_complaint), - m_saved_complaint_interceptor (&g_complaint_interceptor, this) + : m_saved_complaint_interceptor (&g_complaint_interceptor, this), + m_saved_warning_hook (issue_complaint) { } /* A helper that wraps a warning hook. */ static void -wrap_warning_hook (void (*hook) (const char *, va_list), ...) +wrap_warning_hook (warning_hook_handler hook, ...) { va_list args; va_start (args, hook); @@ -109,8 +110,9 @@ re_emit_complaints (const complaint_collection &complaints) for (const std::string &str : complaints) { - if (deprecated_warning_hook) - wrap_warning_hook (deprecated_warning_hook, str.c_str ()); + warning_hook_handler handler = get_warning_hook_handler (); + if (handler != nullptr) + wrap_warning_hook (handler, str.c_str ()); else gdb_printf (gdb_stderr, _("During symbol reading: %s\n"), str.c_str ()); diff --git a/gdb/complaints.h b/gdb/complaints.h index baf10fd7dd7..8ac4c5034ee 100644 --- a/gdb/complaints.h +++ b/gdb/complaints.h @@ -89,11 +89,6 @@ class complaint_interceptor /* The issued complaints. */ complaint_collection m_complaints; - typedef void (*saved_warning_hook_ftype) (const char *, va_list); - - /* The saved value of deprecated_warning_hook. */ - scoped_restore_tmpl m_saved_warning_hook; - /* The saved value of g_complaint_interceptor. */ scoped_restore_tmpl m_saved_complaint_interceptor; @@ -104,6 +99,9 @@ class complaint_interceptor /* This object. Used by the static callback function. */ static thread_local complaint_interceptor *g_complaint_interceptor; + + /* Object to initialise the warning hook. */ + scoped_restore_warning_hook m_saved_warning_hook; }; /* Re-emit complaints that were collected by complaint_interceptor. diff --git a/gdb/defs.h b/gdb/defs.h index f4664000641..cf471bf5d66 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -562,8 +562,6 @@ extern void (*deprecated_print_frame_info_listing_hook) (struct symtab * s, int noerror); extern int (*deprecated_query_hook) (const char *, va_list) ATTRIBUTE_FPTR_PRINTF(1,0); -extern thread_local void (*deprecated_warning_hook) (const char *, va_list) - ATTRIBUTE_FPTR_PRINTF(1,0); extern void (*deprecated_readline_begin_hook) (const char *, ...) ATTRIBUTE_FPTR_PRINTF_1; extern char *(*deprecated_readline_hook) (const char *); diff --git a/gdb/interps.c b/gdb/interps.c index eddc7f3c871..391fea1da03 100644 --- a/gdb/interps.c +++ b/gdb/interps.c @@ -273,7 +273,6 @@ clear_interpreter_hooks (void) deprecated_print_frame_info_listing_hook = 0; /*print_frame_more_info_hook = 0; */ deprecated_query_hook = 0; - deprecated_warning_hook = 0; deprecated_readline_begin_hook = 0; deprecated_readline_hook = 0; deprecated_readline_end_hook = 0; diff --git a/gdb/top.c b/gdb/top.c index fb15c719564..5114713baa4 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -219,10 +219,6 @@ void (*deprecated_print_frame_info_listing_hook) (struct symtab * s, int (*deprecated_query_hook) (const char *, va_list); -/* Replaces most of warning. */ - -thread_local void (*deprecated_warning_hook) (const char *, va_list); - /* These three functions support getting lines of text from the user. They are used in sequence. First deprecated_readline_begin_hook is called with a text string that might be (for example) a message for diff --git a/gdb/utils.c b/gdb/utils.c index b326033e9ff..702c3f15826 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -128,7 +128,26 @@ show_pagination_enabled (struct ui_file *file, int from_tty, } +/* Warning hook pointer. This has to be 'static' to avoid link + problems with thread-locals on AIX. */ +static thread_local void (*warning_hook) (const char *, va_list); + +/* See utils.h. */ + +warning_hook_handler +get_warning_hook_handler () +{ + return warning_hook; +} + +/* See utils.h. */ + +scoped_restore_warning_hook::scoped_restore_warning_hook + (warning_hook_handler new_handler) + : m_save (make_scoped_restore (&warning_hook, new_handler)) +{ +} /* Print a warning message. The first argument STRING is the warning message, used as an fprintf format string, the second is the @@ -139,8 +158,8 @@ show_pagination_enabled (struct ui_file *file, int from_tty, void vwarning (const char *string, va_list args) { - if (deprecated_warning_hook) - (*deprecated_warning_hook) (string, args); + if (warning_hook != nullptr) + warning_hook (string, args); else { std::optional term_state; diff --git a/gdb/utils.h b/gdb/utils.h index a9d04746b21..7487590902a 100644 --- a/gdb/utils.h +++ b/gdb/utils.h @@ -373,6 +373,23 @@ assign_return_if_changed (T &lval, const T &val) return true; } +/* A function that can be used to intercept warnings. */ +typedef void (*warning_hook_handler) (const char *, va_list); + +/* Set the thread-local warning hook, and restore the old value when + finished. */ +class scoped_restore_warning_hook +{ +public: + explicit scoped_restore_warning_hook (warning_hook_handler new_handler); + +private: + scoped_restore_tmpl m_save; +}; + +/* Return the current warning handler. */ +extern warning_hook_handler get_warning_hook_handler (); + /* In some cases GDB needs to try several different solutions to a problem, if any of the solutions work then as far as the user is concerned the problem is solved, and GDB should continue without warnings. However, -- 2.43.0