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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.