Re: [PATCH 3/4] gdb: distinguish GNU and MSVC flavors of the Windows OS ABI
Pedro Alves <[email protected]>
| Newsgroups | gmane.comp.gdb.patches |
|---|---|
| Message-ID | <[email protected]> |
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.
Pedro Alves