Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <pedro@palves.net>
To: Simon Marchi <simon.marchi@efficios.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH 2/3] gdb, gdbserver, gdbsupport: include config.h files with -include
Date: Wed, 20 Mar 2024 20:32:29 +0000	[thread overview]
Message-ID: <2da78531-8a3a-4ac9-a87c-f4962d573fce@palves.net> (raw)
In-Reply-To: <20240318200257.131199-2-simon.marchi@efficios.com>

On 2024-03-18 20:01, Simon Marchi wrote:
> 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.  

I think you meant "when editing header 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

This change is a bit ______? (fill in missing word).


> 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.

copiles -> compiles


Note there is a make rule to check whether gdb headers are standalone.  "make check-headers".
Unfortunately, nobody ever runs that ( me included, after adding it a decade ago :-P ).
Ideally, we'd fix all it flags and run it (or something like it) once in a while in a CI.
(And same for gdbserver/gdbsupport, of course.)


> 
> 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.

I'm surprised by the actual patch.  Why isn't this including defs.h/common-defs.h?  There are
surely things defined in those files that need to be defined in headers too.  Why create
this divergence?  I'd think that we would include defs.h/common-defs.h in headers too, and
then work on moving things out of defs.h/common-defs.h over time.

Pedro Alves


  parent reply	other threads:[~2024-03-20 20:33 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-18 20:01 [PATCH 1/3] gdb, gdbserver, gdbsupport: reformat some Makefile variables, one entry per line Simon Marchi
2024-03-18 20:01 ` [PATCH 2/3] gdb, gdbserver, gdbsupport: include config.h files with -include Simon Marchi
2024-03-19 11:18   ` Hannes Domani
2024-03-19 12:22     ` Simon Marchi
2024-03-20 20:32   ` Pedro Alves [this message]
2024-03-21  2:11     ` Simon Marchi
2024-03-21 12:50       ` Pedro Alves
2024-03-21 13:02         ` Pedro Alves
2024-03-22 14:55         ` Simon Marchi
2024-03-22 15:08           ` Simon Marchi
2024-03-22 15:43             ` Pedro Alves
2024-03-18 20:01 ` [PATCH 3/3] gdbsupport: move more things to gdbsupport.inc.h Simon Marchi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2da78531-8a3a-4ac9-a87c-f4962d573fce@palves.net \
    --to=pedro@palves.net \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@efficios.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox