public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* Re: [PATCH] gdb: recognize 64 bits Windows executables as Cygwin osabi
       [not found] ` <83zhcsa8my.fsf@gnu.org>
@ 2020-03-07 16:51   ` Simon Marchi
  2020-03-07 17:45     ` Eli Zaretskii
  0 siblings, 1 reply; 8+ messages in thread
From: Simon Marchi @ 2020-03-07 16:51 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gdb-patches

On 2020-03-07 3:09 a.m., Eli Zaretskii wrote:
>> From: Simon Marchi <simon.marchi@efficios.com>
>> Cc: Simon Marchi <simon.marchi@efficios.com>
>> Date: Fri,  6 Mar 2020 23:17:42 -0500
>>
>> When I load the 32 bits binary in my GNU/Linux-hosted GDB, the osabi is
>> correctly recognized as "Cygwin":
>>
>>     $ ./gdb --data-directory=data-directory -nx test_32
>>     (gdb) show osabi
>>     The current OS ABI is "auto" (currently "Cygwin").
> 
> Why is this correct?  Your debuggee is a MinGW program, not a Cygwin
> program.  The OS ABI should say "MinGW" or perhaps even "MS-Windows"
> (since MinGW programs are just native Windows executables).

As I said, I know that it's not absolutely correct.  But having the native
executable be detected as "Cygwin" seems relatively more correct compared
to the current situation.  The context is the following:

  https://sourceware.org/ml/gdb-patches/2020-03/msg00151.html

Currently, loading the 64-bits .exe in a GNU/Linux-hosted GDB ends up calling
the svr4 libraries code, which is plain wrong.  By using the Cygwin osabi,
at least the right shared libraries functions are used.

I agree with what you suggest below, but I think that the current patch is
still a step forward and improves things.

> I'm guessing that this is some historical left-over: only Cygwin took
> care of returning an OS ABI name at some point in the past, and we
> never bothered to augment that for MinGW programs.  I suggest that we
> do TRT now, as long as we are on this subject.

I think it makes sense and would avoid some confusion.  I was surprised
to see the Cygwin osabi used when debugging a native Windows program.

> The difference between a Cygwin program and a native Windows program
> is that the former has a dependency on the Cygwin DLL (or MSYS DLL, if
> we want to support MSYS/MSYS2 executables).  Is it possible to make
> this distinction where we decide on the OS ABI?

One question is, do we need this distinction at all?  Let's look at
where the Cygwin osabi comes into play.  When the GDB_OSABI_CYGWIN
osabi is detected, the "i386_cygwin_init_abi" function from
i386-cygwin-tdep.c is called.

In this function, I see nothing Cygwin-specific, all that is in there
seems to apply equally to native Windows executables and Cygwin
executables.  So it seems like we could just rename the "Cygwin" osabi
to "MS-Windows".  Except that would be a breaking change, as the
command "set osabi Cygwin" wouldn't work anymore.

So what we can do is add an "MS-Windows" osabi and make "Cygwin" and
"MS-Windows" functionally equivalent.  Any "pei-i386" or "pei-x86-64"
executable would be detected as "MS-Windows".

We could try to detect whether the binary is using the cygwin or msys
dll and if so apply the Cygwin osabi, but that would be just for
aesthetic purposes, as the two osabis would be functionally equivalent
(at least for now).  It can still be useful to avoid confusion: if we
have a Cygwin osabi, but Cygwin binaries are not recognized to use the
Cygwin osabi, it just looks like a bug even if it isn't.  I would need
to dig into BFD and the PE/coff format to see how we could find this
information.

If we do such a change, I would like it to be done on top of the current
patch, as to not mix concerns.

> In any case, I see no reason to say that "pei-i386" executables are
> necessarily Cygwin programs, the default should be "MS-Windows".

Agreed.

Simon

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gdb: recognize 64 bits Windows executables as Cygwin osabi
  2020-03-07 16:51   ` [PATCH] gdb: recognize 64 bits Windows executables as Cygwin osabi Simon Marchi
@ 2020-03-07 17:45     ` Eli Zaretskii
  2020-03-07 18:16       ` Simon Marchi
                         ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Eli Zaretskii @ 2020-03-07 17:45 UTC (permalink / raw)
  To: Simon Marchi; +Cc: gdb-patches

> Cc: gdb-patches@sourceware.org
> From: Simon Marchi <simon.marchi@efficios.com>
> Date: Sat, 7 Mar 2020 11:51:08 -0500
> 
>   https://sourceware.org/ml/gdb-patches/2020-03/msg00151.html
> 
> Currently, loading the 64-bits .exe in a GNU/Linux-hosted GDB ends up calling
> the svr4 libraries code, which is plain wrong.  By using the Cygwin osabi,
> at least the right shared libraries functions are used.
> 
> I agree with what you suggest below, but I think that the current patch is
> still a step forward and improves things.

I agree.  I just think we can do better.

> So what we can do is add an "MS-Windows" osabi and make "Cygwin" and
> "MS-Windows" functionally equivalent.  Any "pei-i386" or "pei-x86-64"
> executable would be detected as "MS-Windows".

That's fine with me, and IMO will be more accurate than calling them
all "Cygwin", since Cygwin programs are just a peculiar kind of
Windows executables.

> If we do such a change, I would like it to be done on top of the current
> patch, as to not mix concerns.

I'm okay with that, thanks.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gdb: recognize 64 bits Windows executables as Cygwin osabi
  2020-03-07 17:45     ` Eli Zaretskii
@ 2020-03-07 18:16       ` Simon Marchi
  2020-03-08 14:05       ` Jon Turney
  2020-03-09 15:39       ` Jon Turney
  2 siblings, 0 replies; 8+ messages in thread
From: Simon Marchi @ 2020-03-07 18:16 UTC (permalink / raw)
  To: Eli Zaretskii, Simon Marchi; +Cc: gdb-patches

On 2020-03-07 12:45 p.m., Eli Zaretskii wrote:
>> Cc: gdb-patches@sourceware.org
>> From: Simon Marchi <simon.marchi@efficios.com>
>> Date: Sat, 7 Mar 2020 11:51:08 -0500
>>
>>   https://sourceware.org/ml/gdb-patches/2020-03/msg00151.html
>>
>> Currently, loading the 64-bits .exe in a GNU/Linux-hosted GDB ends up calling
>> the svr4 libraries code, which is plain wrong.  By using the Cygwin osabi,
>> at least the right shared libraries functions are used.
>>
>> I agree with what you suggest below, but I think that the current patch is
>> still a step forward and improves things.
> 
> I agree.  I just think we can do better.
> 
>> So what we can do is add an "MS-Windows" osabi and make "Cygwin" and
>> "MS-Windows" functionally equivalent.  Any "pei-i386" or "pei-x86-64"
>> executable would be detected as "MS-Windows".
> 
> That's fine with me, and IMO will be more accurate than calling them
> all "Cygwin", since Cygwin programs are just a peculiar kind of
> Windows executables.

Ok, I can make a second patch that introduces this new "MS-Windows" osabi.

> 
>> If we do such a change, I would like it to be done on top of the current
>> patch, as to not mix concerns.
> 
> I'm okay with that, thanks.
> 

I looked up some information about how PE executables list their DLL dependencies,
apparently it's in the ".idata" section.  There is some doc here:

  https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-idata-section

and here:

  https://blog.kowalczyk.info/articles/pefileformat.html#9ccef823-67e7-4372-9172-045d7b1fb006

With that, I was able to parse enough of .idata in a very crude way (consider it just a prototype)
and get the DLL names.

I noticed that there is some BFD code that also parses it:

  https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=bfd/peXXigen.c;h=e42d646552a0ca1e856e082256cd3d943b54ddf0;hb=HEAD#l1261

however, it's coupled with the printing code, so not very easy to re-use.  Ideally, one would
refactor this code to provide a nice BFD interface to look up this information, but I don't
really have time for that.  I wrote to the binutils mailing list (sourceware is in maintenance
right now so I can't provide the archive link) to ask what we can do about that.

Simon

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gdb: recognize 64 bits Windows executables as Cygwin osabi
  2020-03-07 17:45     ` Eli Zaretskii
  2020-03-07 18:16       ` Simon Marchi
@ 2020-03-08 14:05       ` Jon Turney
  2020-03-10 15:16         ` Eli Zaretskii
  2020-03-09 15:39       ` Jon Turney
  2 siblings, 1 reply; 8+ messages in thread
From: Jon Turney @ 2020-03-08 14:05 UTC (permalink / raw)
  To: gdb-patches

On 07/03/2020 17:45, Eli Zaretskii wrote:
>> Cc: gdb-patches@sourceware.org
>> From: Simon Marchi <simon.marchi@efficios.com>
>> Date: Sat, 7 Mar 2020 11:51:08 -0500
>>
>>    https://sourceware.org/ml/gdb-patches/2020-03/msg00151.html
>>
>> Currently, loading the 64-bits .exe in a GNU/Linux-hosted GDB ends up calling
>> the svr4 libraries code, which is plain wrong.  By using the Cygwin osabi,
>> at least the right shared libraries functions are used.
>>
>> I agree with what you suggest below, but I think that the current patch is
>> still a step forward and improves things.
> 
> I agree.  I just think we can do better.
> 
>> So what we can do is add an "MS-Windows" osabi and make "Cygwin" and
>> "MS-Windows" functionally equivalent.  Any "pei-i386" or "pei-x86-64"
>> executable would be detected as "MS-Windows".

I believe this suggestion for x86_64 is wrong, in the other direction:
x86_64 Cygwin is LP64, but Windows is LLP64 (Se also table in [1])

(currently 'print sizeof(long)' incorrectly returns 4 on a gdb built for 
Cygwin)

There was some discussion that these need to be separate osabis 
previously, I think.

[1] https://cygwin.com/faq.html#faq.programming.64bitporting

> That's fine with me, and IMO will be more accurate than calling them
> all "Cygwin", since Cygwin programs are just a peculiar kind of
> Windows executables.
> 
>> If we do such a change, I would like it to be done on top of the current
>> patch, as to not mix concerns.
> 
> I'm okay with that, thanks.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gdb: recognize 64 bits Windows executables as Cygwin osabi
  2020-03-07 17:45     ` Eli Zaretskii
  2020-03-07 18:16       ` Simon Marchi
  2020-03-08 14:05       ` Jon Turney
@ 2020-03-09 15:39       ` Jon Turney
  2 siblings, 0 replies; 8+ messages in thread
From: Jon Turney @ 2020-03-09 15:39 UTC (permalink / raw)
  To: gdb-patches

On 07/03/2020 17:45, Eli Zaretskii wrote:
>> Cc: gdb-patches@sourceware.org
>> From: Simon Marchi <simon.marchi@efficios.com>
>> Date: Sat, 7 Mar 2020 11:51:08 -0500
>>
>>    https://sourceware.org/ml/gdb-patches/2020-03/msg00151.html
>>
>> Currently, loading the 64-bits .exe in a GNU/Linux-hosted GDB ends up calling
>> the svr4 libraries code, which is plain wrong.  By using the Cygwin osabi,
>> at least the right shared libraries functions are used.
>>
>> I agree with what you suggest below, but I think that the current patch is
>> still a step forward and improves things.
> 
> I agree.  I just think we can do better.
> 
>> So what we can do is add an "MS-Windows" osabi and make "Cygwin" and
>> "MS-Windows" functionally equivalent.  Any "pei-i386" or "pei-x86-64"
>> executable would be detected as "MS-Windows".

I believe this suggestion for x86_64 is wrong, in the other direction:
x86_64 Cygwin is LP64, but Windows is LLP64 (See also table in [1])

(This is handled incorrectly in Cygwin at the moment, e.g. in our build 
of gdb 'print sizeof(long)' returns 4)

There was some discussion that these need to be separate osabis 
previously, I think.

[1] https://cygwin.com/faq.html#faq.programming.64bitporting


> That's fine with me, and IMO will be more accurate than calling them
> all "Cygwin", since Cygwin programs are just a peculiar kind of
> Windows executables.
> 
>> If we do such a change, I would like it to be done on top of the current
>> patch, as to not mix concerns.
> 
> I'm okay with that, thanks.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gdb: recognize 64 bits Windows executables as Cygwin osabi
  2020-03-08 14:05       ` Jon Turney
@ 2020-03-10 15:16         ` Eli Zaretskii
  2020-03-10 15:45           ` Simon Marchi
  0 siblings, 1 reply; 8+ messages in thread
From: Eli Zaretskii @ 2020-03-10 15:16 UTC (permalink / raw)
  To: Jon Turney; +Cc: gdb-patches

> From: Jon Turney <jon.turney@dronecode.org.uk>
> Date: Sun, 8 Mar 2020 14:05:10 +0000
> 
> >> So what we can do is add an "MS-Windows" osabi and make "Cygwin" and
> >> "MS-Windows" functionally equivalent.  Any "pei-i386" or "pei-x86-64"
> >> executable would be detected as "MS-Windows".
> 
> I believe this suggestion for x86_64 is wrong, in the other direction:
> x86_64 Cygwin is LP64, but Windows is LLP64 (Se also table in [1])

If the LP64 thing is part of what defines the OS ABI, then yes, Cygwin
should have a separate value.

> (currently 'print sizeof(long)' incorrectly returns 4 on a gdb built for 
> Cygwin)

So I guess calling it "Cygwin" doesn't help? ;-)

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gdb: recognize 64 bits Windows executables as Cygwin osabi
  2020-03-10 15:16         ` Eli Zaretskii
@ 2020-03-10 15:45           ` Simon Marchi
  2020-03-14 15:35             ` Jon Turney
  0 siblings, 1 reply; 8+ messages in thread
From: Simon Marchi @ 2020-03-10 15:45 UTC (permalink / raw)
  To: Eli Zaretskii, Jon Turney; +Cc: gdb-patches

On 2020-03-10 11:16 a.m., Eli Zaretskii wrote:
>> From: Jon Turney <jon.turney@dronecode.org.uk>
>> Date: Sun, 8 Mar 2020 14:05:10 +0000
>>
>>>> So what we can do is add an "MS-Windows" osabi and make "Cygwin" and
>>>> "MS-Windows" functionally equivalent.  Any "pei-i386" or "pei-x86-64"
>>>> executable would be detected as "MS-Windows".
>>
>> I believe this suggestion for x86_64 is wrong, in the other direction:
>> x86_64 Cygwin is LP64, but Windows is LLP64 (Se also table in [1])
> 
> If the LP64 thing is part of what defines the OS ABI, then yes, Cygwin
> should have a separate value.

If I understand correctly, that's one practical reason for introducing the separate
"Windows" OS ABI?

Simon

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gdb: recognize 64 bits Windows executables as Cygwin osabi
  2020-03-10 15:45           ` Simon Marchi
@ 2020-03-14 15:35             ` Jon Turney
  0 siblings, 0 replies; 8+ messages in thread
From: Jon Turney @ 2020-03-14 15:35 UTC (permalink / raw)
  To: gdb-patches; +Cc: Simon Marchi

On 10/03/2020 15:45, Simon Marchi wrote:
> On 2020-03-10 11:16 a.m., Eli Zaretskii wrote:
>>> From: Jon Turney <jon.turney@dronecode.org.uk>
>>> Date: Sun, 8 Mar 2020 14:05:10 +0000
>>>
>>>>> So what we can do is add an "MS-Windows" osabi and make "Cygwin" and
>>>>> "MS-Windows" functionally equivalent.  Any "pei-i386" or "pei-x86-64"
>>>>> executable would be detected as "MS-Windows".
>>>
>>> I believe this suggestion for x86_64 is wrong, in the other direction:
>>> x86_64 Cygwin is LP64, but Windows is LLP64 (Se also table in [1])
>>
>> If the LP64 thing is part of what defines the OS ABI, then yes, Cygwin
>> should have a separate value.
> 
> If I understand correctly, that's one practical reason for introducing the separate
> "Windows" OS ABI?

That's the suggestion in:

https://sourceware.org/bugzilla/show_bug.cgi?id=21500

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-03-14 15:35 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20200307041742.31158-1-simon.marchi@efficios.com>
     [not found] ` <83zhcsa8my.fsf@gnu.org>
2020-03-07 16:51   ` [PATCH] gdb: recognize 64 bits Windows executables as Cygwin osabi Simon Marchi
2020-03-07 17:45     ` Eli Zaretskii
2020-03-07 18:16       ` Simon Marchi
2020-03-08 14:05       ` Jon Turney
2020-03-10 15:16         ` Eli Zaretskii
2020-03-10 15:45           ` Simon Marchi
2020-03-14 15:35             ` Jon Turney
2020-03-09 15:39       ` Jon Turney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).