From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id gFqQAxue+GUUrgwAWB0awg (envelope-from ) for ; Mon, 18 Mar 2024 16:03:39 -0400 Received: by simark.ca (Postfix, from userid 112) id 075351E0BB; Mon, 18 Mar 2024 16:03:39 -0400 (EDT) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id DBBAB1E0AC for ; Mon, 18 Mar 2024 16:03:36 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 71FAC3858430 for ; Mon, 18 Mar 2024 20:03:36 +0000 (GMT) Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id 2F73B3858C78 for ; Mon, 18 Mar 2024 20:03:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2F73B3858C78 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=efficios.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=efficios.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2F73B3858C78 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=158.69.221.121 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710792190; cv=none; b=gblNPRpC27vZxlMat3D57wS9K3GC/z/L/u1ha3c9qvCNDrL/HrhWisuoSC6zZND890SZpwxUgwAPMzETO7FH88kWQQ7J1m9j382MlXFnTKJUz4xHb2lcB4B7TS8RaL2Jv7KhvaCPLXIsYsVTKZnsOisdPdaihH8PhMCe77t9ybc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710792190; c=relaxed/simple; bh=wQwoo3louirv62dO39qykiixF9rrcvu4uoC+SFtmXMs=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=l1xMhhpN14Ix7g/RwYIFu8Ku8IcUhC+Jc5U/xrAygxWKqcNTlmYCVBKtZvawRIAOkvpJExs4g/gom0qfHUI8dIcpHv6D+sjH6Lu1HK1S1o73Quoc+mxRtJzyX5hrvnWxmRqqOaQNooCGXbMwONZY3VUkzsrc4b0e99Ngwyo1go8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from localhost.localdomain (modemcable238.237-201-24.mc.videotron.ca [24.201.237.238]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id D9F161E0AC; Mon, 18 Mar 2024 16:02:59 -0400 (EDT) From: Simon Marchi To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH 2/3] gdb, gdbserver, gdbsupport: include config.h files with -include Date: Mon, 18 Mar 2024 16:01:39 -0400 Message-ID: <20240318200257.131199-2-simon.marchi@efficios.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240318200257.131199-1-simon.marchi@efficios.com> References: <20240318200257.131199-1-simon.marchi@efficios.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1173.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_SHORT, SPF_HELO_PASS, SPF_SOFTFAIL, 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 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org The motivation for this change is for analysis tools and IDEs to be better at analyzing header files on their own. There are some definitions and includes we want to occur at the very beginning of all translation units. The way we currently do that is by requiring all source files (.c and .cc files) to include one of defs.h (for gdb), server.h (for gdbserver) of common-defs.h (for gdbsupport and shared source files). These special header files define and include everything that needs to be included at the very beginning. Other header files are written in a way that assume that these special "prologue" header files have already been included. My problem with that is that my editor (clangd-based) provides a very bad experience when editing source files. Since clangd doesn't know that one of defs.h/server.h/common-defs.h was included already, a lot of things are flagged as errors. For instance, CORE_ADDR is not known. It's possible to edit the files in this state, but a lot of the power of the editor is unavailable. My proposal to help with this is to include those things we always want to be there using the compilers' `-include` option. Tom Tromey said that the current approach might exist because not all compilers used to have an option like this. But I believe that it's safe to assume they do today. With this change, clangd picks up the -include option from the compile command, and is able to analyze the header file correctly, as it sees all that stuff included or defined but that -include option. That works because when editing a header file, clangd tries to get the compilation flags from a source file that includes said header file. This change is a bit, because it addresses one of my frustrations when editing header files, but it might help others too. I'd be curious to know if others encounter the same kinds of problems when editing header files. Also, even if the change is not necessary by any means, I think the solution of using -include for stuff we always want to be there is more elegant than the current solution. Even with this -include flag, many header files currently don't include what they use, but rather depend on files included before them. This will still cause errors when editing them, but it should be easily fixable by adding the appropriate include. There's no rush to do so, as long as the code still copiles, it's just a convenience thing. This patch does the small step of moving the inclusion of the various config.h files to that new method. The changes are: - Add three files meant to be included with -include: gdb/gdb.inc.h, gdbserver/gdbserver.inc.h and gdbsupport/gdbsupport.inc.h. - Move the inclusion of the various config.h files there - Modify the compilation flags of all three subdirectories to add the appropriate -include option. Change-Id: If3e345d00a9fc42336322f1d8286687d22134340 --- gdb/Makefile.in | 1 + gdb/defs.h | 7 ------- gdb/gdb.inc.h | 22 ++++++++++++++++++++++ gdbserver/Makefile.in | 3 ++- gdbserver/gdbserver.inc.h | 22 ++++++++++++++++++++++ gdbserver/server.h | 8 -------- gdbsupport/Makefile.am | 1 + gdbsupport/Makefile.in | 16 ++++++++++++---- gdbsupport/common-defs.h | 10 ---------- gdbsupport/gdbsupport.inc.h | 35 +++++++++++++++++++++++++++++++++++ 10 files changed, 95 insertions(+), 30 deletions(-) create mode 100644 gdb/gdb.inc.h create mode 100644 gdbserver/gdbserver.inc.h create mode 100644 gdbsupport/gdbsupport.inc.h diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 95709ae395a2..3b144fa3034c 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -605,6 +605,7 @@ GDB_CFLAGS = \ -I. \ -I$(srcdir) \ -I$(srcdir)/config \ + -include $(srcdir)/gdb.inc.h \ -DLOCALEDIR="\"$(localedir)\"" \ $(DEFS) diff --git a/gdb/defs.h b/gdb/defs.h index cf471bf5d662..8a9ff3aba0f7 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -25,13 +25,6 @@ #include "gdbsupport/common-defs.h" -#undef PACKAGE -#undef PACKAGE_NAME -#undef PACKAGE_VERSION -#undef PACKAGE_STRING -#undef PACKAGE_TARNAME - -#include #include "bfd.h" #include diff --git a/gdb/gdb.inc.h b/gdb/gdb.inc.h new file mode 100644 index 000000000000..7be4c8eea939 --- /dev/null +++ b/gdb/gdb.inc.h @@ -0,0 +1,22 @@ +/* Copyright (C) 2024 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* This file in included automatically via `-include` at the beginning of each + source file compiled in gdb/. */ + +#include "gdbsupport/gdbsupport.inc.h" +#include "config.h" diff --git a/gdbserver/Makefile.in b/gdbserver/Makefile.in index c17a0a522df2..c92b881650a4 100644 --- a/gdbserver/Makefile.in +++ b/gdbserver/Makefile.in @@ -134,7 +134,8 @@ INCLUDE_CFLAGS = \ -I$(srcdir)/../gdb \ $(INCGNU) \ $(INCSUPPORT) \ - $(INTL_CFLAGS) + $(INTL_CFLAGS) \ + -include $(srcdir)/gdbserver.inc.h # M{H,T}_CFLAGS, if defined, has host- and target-dependent CFLAGS # from the config/ directory. diff --git a/gdbserver/gdbserver.inc.h b/gdbserver/gdbserver.inc.h new file mode 100644 index 000000000000..22ec0dd94318 --- /dev/null +++ b/gdbserver/gdbserver.inc.h @@ -0,0 +1,22 @@ +/* Copyright (C) 2024 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* This file in included automatically via `-include` at the beginning of each + source file compiled in gdbserver/. */ + +#include "gdbsupport/gdbsupport.inc.h" +#include "config.h" diff --git a/gdbserver/server.h b/gdbserver/server.h index 0074818c6df0..ee27d2b3f5c2 100644 --- a/gdbserver/server.h +++ b/gdbserver/server.h @@ -21,14 +21,6 @@ #include "gdbsupport/common-defs.h" -#undef PACKAGE -#undef PACKAGE_NAME -#undef PACKAGE_VERSION -#undef PACKAGE_STRING -#undef PACKAGE_TARNAME - -#include - static_assert (sizeof (CORE_ADDR) >= sizeof (void *)); #include "gdbsupport/version.h" diff --git a/gdbsupport/Makefile.am b/gdbsupport/Makefile.am index 7c360aa413ef..db1eee88059a 100644 --- a/gdbsupport/Makefile.am +++ b/gdbsupport/Makefile.am @@ -35,6 +35,7 @@ AM_CPPFLAGS = \ $(INCINTL) \ -I../bfd \ -I$(srcdir)/../bfd \ + -include $(srcdir)/gdbsupport.inc.h \ @LARGEFILE_CPPFLAGS@ override CXX += $(CXX_DIALECT) diff --git a/gdbsupport/Makefile.in b/gdbsupport/Makefile.in index 6f8dacc157f9..9b1063f31ab3 100644 --- a/gdbsupport/Makefile.in +++ b/gdbsupport/Makefile.in @@ -393,10 +393,18 @@ ACLOCAL_AMFLAGS = -I . -I ../config # from Automake, as gdbsupport uses AM_GNU_GETTEXT through # ZW_GNU_GETTEXT_SISTER_DIR, but doesn't have any translations (currently). SUBDIRS = -AM_CPPFLAGS = -I$(srcdir)/../include -I$(srcdir)/../gdb \ - -I../gnulib/import -I$(srcdir)/../gnulib/import \ - -I.. -I$(srcdir)/.. $(INCINTL) -I../bfd -I$(srcdir)/../bfd \ - @LARGEFILE_CPPFLAGS@ +AM_CPPFLAGS = \ + -I$(srcdir)/../include \ + -I$(srcdir)/../gdb \ + -I../gnulib/import \ + -I$(srcdir)/../gnulib/import \ + -I.. \ + -I$(srcdir)/.. \ + $(INCINTL) \ + -I../bfd \ + -I$(srcdir)/../bfd \ + -include $(srcdir)/gdbsupport.inc.h \ + @LARGEFILE_CPPFLAGS@ AM_CXXFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) noinst_LIBRARIES = libgdbsupport.a diff --git a/gdbsupport/common-defs.h b/gdbsupport/common-defs.h index 6120719480b8..e7eb814f3251 100644 --- a/gdbsupport/common-defs.h +++ b/gdbsupport/common-defs.h @@ -20,16 +20,6 @@ #ifndef COMMON_COMMON_DEFS_H #define COMMON_COMMON_DEFS_H -#include - -#undef PACKAGE_NAME -#undef PACKAGE -#undef PACKAGE_VERSION -#undef PACKAGE_STRING -#undef PACKAGE_TARNAME - -#include "gnulib/config.h" - /* From: https://www.gnu.org/software/gnulib/manual/html_node/stdint_002eh.html diff --git a/gdbsupport/gdbsupport.inc.h b/gdbsupport/gdbsupport.inc.h new file mode 100644 index 000000000000..ab0999579528 --- /dev/null +++ b/gdbsupport/gdbsupport.inc.h @@ -0,0 +1,35 @@ +/* Copyright (C) 2024 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* This file in included automatically via `-include` at the beginning of each + source file compiled in gdbsupport/. */ + +#include "gdbsupport/config.h" + +#undef PACKAGE +#undef PACKAGE_NAME +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME +#undef PACKAGE_VERSION + +#include "gnulib/config.h" + +#undef PACKAGE +#undef PACKAGE_NAME +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME +#undef PACKAGE_VERSION -- 2.44.0