This is the mail archive of the
mailing list for the Cygwin project.
Question about executable startup failure
- From: "Lavrentiev, Anton (NIH/NLM/NCBI) [C] via cygwin" <cygwin at cygwin dot com>
- To: "'cygwin at cygwin dot com'" <cygwin at cygwin dot com>
- Date: Thu, 14 Nov 2019 06:48:20 +0000
- Subject: Question about executable startup failure
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ncbi.nlm.nih.gov; dmarc=pass action=none header.from=ncbi.nlm.nih.gov; dkim=pass header.d=ncbi.nlm.nih.gov; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8jPjYu5Z4AzNozxs4SnBuTKhta4DH7twt7OzD9mahqY=; b=Y4U/YvmE2Lynl3JmB4gZ5yfuhkxqvvv/19rH/af2yQn2Ti8BnbJfbOHp596z5mWlB/OlBG8xFQDMWwegTf4gxvhS+RXAKFBQbT+PmDeb6JssJNfvRLR7JC8HC/1SkO2Py/Yk3Ei+ggiC4PDYqLHXKqdjDbbbHkbmIfYpXhsuyhWehfi5S4VaSiKORsYv1jNcl9G1P2ISzdFZFq/WT3PAM5m3Oowc9BtE2/7/B/O/dMGZKfTklTtZzv/c0qpYLiS9a+7/3gXW5V72735tpzfddxEG7QXOj1AI9cOcSQW7zAhYzU1gu5JSMdRfv9vhS+qONyPtKLZkTd1M0msSXdvmLw==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hW/JR3iVfbG1aw2Mud3kQ3FGOVgakSLaYz25c6a6u+tr7rc3SGVRj0krDGQzI2s2p1dQaOnGcr7hySKyCAVhYegOnGrAaOc1EvySc7Ubi+ZVChKEUS19LsdiDw3qdxeM9T41gUSI8c/75RLIolfNWy6MvFyFSek5DAxTjUqJDJ8HCF0Pk7VU+wqamH0EQyaBoyPw1Q7i7SOD5Z1lSrbaikMO/FfJ3/Ih1AB+kI9NZp9tQ6Dx3uXL/CANteLHyzztL+vv0KHqODTEav5HtD3xXZNtzkEFlXpi8t8FSzqVPGcpViBUbFxRfmE5j7R00wGPYOZsg8rAvjDsICTuCWJLGg==
- Ironport-sdr: BXuoNe53nbIs0sHzhtsRCQBqRCvw4Yk/SjcpFencLusbNrjg77XK9Gi9XnYwd0X0aXB/McDt9Y AfFQ/naoZHYA==
- Reply-to: "Lavrentiev, Anton (NIH/NLM/NCBI) [C]" <lavr at ncbi dot nlm dot nih dot gov>
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.
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).
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
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple