From: Simon Marchi <simark@simark.ca>
To: Pedro Alves <pedro@palves.net>,
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 22:11:51 -0400 [thread overview]
Message-ID: <9a146cea-3adf-4365-8eb7-60c65d00dcf4@simark.ca> (raw)
In-Reply-To: <2da78531-8a3a-4ac9-a87c-f4962d573fce@palves.net>
On 3/20/24 16:32, Pedro Alves wrote:
> 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."
Oops, yes. Fixed.
>> 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).
Oops again. I meant "This change is a bit self-serving".
>> 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
Fixed.
> 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.)
Ah! I probably saw that in the past but forgot about it. It might need
to be changed too, depending on what follows.
>> 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.
I am not sure I understand what you mean. If a given header file uses
something defined in defs.h, then it should include defs.h. Otherwise
it doesn't need to. Maybe if you give a concrete example I will get
your point better.
Simon
next prev parent reply other threads:[~2024-03-21 2:12 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
2024-03-21 2:11 ` Simon Marchi [this message]
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=9a146cea-3adf-4365-8eb7-60c65d00dcf4@simark.ca \
--to=simark@simark.ca \
--cc=gdb-patches@sourceware.org \
--cc=pedro@palves.net \
--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