Re: [PATCH 3/4] gdb: distinguish GNU and MSVC flavors of the Windows OS ABI
Simon Marchi <[email protected]>
| Newsgroups | gmane.comp.gdb.patches |
|---|---|
| Message-ID | <[email protected]> |
On 7/15/26 10:10 AM, Pedro Alves wrote:
> On 2026-07-15 14:13, Simon Marchi wrote:
>> On 7/15/26 7:18 AM, Pedro Alves wrote:
>>> On 2026-07-15 02:21, Simon Marchi wrote:
>>>> What happens if you build a GDB with --enable-targets=all and load a
>>>> .exe? Is either ABI preferred over the other?
>>>
>>> The preferred one is taken out of --target, defaults to GNU.
>>> --enable-targets=foo,bar,all does not affect it.
>>
>> I was thinking when building GDB on Linux (with --target that defaults
>> to something Linux) with --enable-targets=all, i.e. a typical
>> development build. In that case, the --target does not help to choose
>> an ABI, so the fallback must come from somewhere else.
>>
>
> Hmm, I _think_ I see what the confusion is. The logic is:
>
> "let GDB pick the flavor": GDB uses the configured default OS ABI (from --target) when that is a Windows flavor, and otherwise assumes the GNU flavor."
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
>
> The code that does this is here:
>
> + /* A generic "Windows" OS ABI means a PE binary whose flavor --
> + GNU (MinGW) or MSVC -- could not be determined. The osabi
> + sniffers and gdbserver's target description both report the
> + generic "Windows" OS ABI, because neither can tell the two
> + flavors apart from the binary alone. Resolve it here to a
> + concrete flavor: use the configured default if that is itself a
> + Windows flavor, otherwise assume GNU. */
> + if (info->osabi == GDB_OSABI_WINDOWS)
> + {
> + info->osabi = GDB_OSABI_WINDOWS_GNU; <<< "somewhere else"
> +#ifdef GDB_OSABI_DEFAULT
> + if (GDB_OSABI_DEFAULT == GDB_OSABI_WINDOWS_GNU
> + || GDB_OSABI_DEFAULT == GDB_OSABI_WINDOWS_MSVC)
> + info->osabi = GDB_OSABI_DEFAULT;
> +#endif
> + }
>
> So with --target=Linux, if the sniffer, or the target.xml, or the user picks/returns
> GDB_OSABI_WINDOWS, we resolve to GDB_OSABI_WINDOWS_GNU, as GDB_OSABI_DEFAULT itself is not
> a Windows flavor (it's GDB_OSABI_LINUX).
>
> Does this clarify it? The "somewhere else" is basically indicated above in the <<< line.
Ah yes thanks, I had missed the "and otherwise assumes the GNU flavor".
Simon