Question about executable startup failure

Lavrentiev, Anton (NIH/NLM/NCBI) [C] via cygwin cygwin@cygwin.com
Thu Nov 14 08:55:00 GMT 2019


Hi all,

Here's a situation: I have a binary that was built (from a C source code) with Cygwin 3.0.7 but "accidentally" used with much older Cygwin 2.11.2.

The binary won't actually launch.  Instead, it most uneventfully (silently, no crash - no drama) exits with an exit code of 127, meaning "command not found".  The same exit code would have resulted from any mistyped command, which shell couldn't recognize / locate a matching file for (yet it won't be shy of saying so).

When I start the binary under debugger, I see the following:

[New Thread 12576.0x4d70]
[New Thread 12576.0x4860]
[New Thread 12576.0x44b8]
[New Thread 12576.0x4528]
[Thread 12576.0x44b8 exited with code 3221225785]
[Thread 12576.0x4860 exited with code 3221225785]
During startup program exited with code 0xc0000139.

So there's actually an explanation:  0xc0000139(=3221225785) is defined to be

ntstatus.h:#define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000139)

Now, the question is:  is it by design that the exit code is posted so timidly?  Shouldn't there be a message that some dynamic linkage wasn't satisfied?
Wouldn't 126 (which is "command cannot execute") be a better choice for the exit code in this case?  Especially if the message cannot be produced at all?

I mean, it is actually a good thing that the executable won't start if it happens to be incompatible with some random Cygwin version;  it just needs to be more vocal about the problem and post a more appropriate exit code, too.

Thanks,
Anton

P.S. I didn't get to know what exactly the entry point was missing that the binary required (obviously from the newer Cygwin ABI).

Reference:
https://pubs.opengroup.org/onlinepubs/9699919799//utilities/V3_chap02.html#tag_18_08_02
If a command is not found, the exit status shall be 127. If the command name is found, but it is not an executable utility, the exit status shall be 126. Applications that invoke utilities without using the shell should use these exit status values to report similar errors.

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list