X-Recipient: archive-cygwin AT delorie DOT com DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:reply-to:subject:to:references:from:message-id :date:mime-version:in-reply-to:content-type :content-transfer-encoding; q=dns; s=default; b=cQiZiiX9lVt+7wmM ZH9aP2Z6c4A0HcdkHNubZV3Z22nsr+UzY7qBkqaQL4vyNGIvL8MpE7mor2RaNfY9 zEx657CC14tloydSM+ITAnLkZ3srCQrC/ctWAOZO+VnDBBZxL8vonFHiBsZleXfB 4ILiJPVPak94CwzFiIY1Actu6UA= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:reply-to:subject:to:references:from:message-id :date:mime-version:in-reply-to:content-type :content-transfer-encoding; s=default; bh=9cFB1u209CPlXTuwJWwnkF 9HduI=; b=EwWRw9L8c6ZjFGt0llHRM98O/utCq7s00U0vpgSpgKuM5GYC7ZSuRW 4GuZZ9aeXzE6wIADMRlhBLTec+MOivDsJZrkJaiSkmDPiddvlil7m13vfzKM5ycA qDzI2ij98IFt9PbGchYOIE0+woTPFA87TIqS8PDQavto5i782Dsfc= Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-3.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 spammy=shy, HX-Languages-Length:2848 X-HELO: smtp-out-no.shaw.ca Reply-To: Brian DOT Inglis AT SystematicSw DOT ab DOT ca Subject: Re: Question about executable startup failure To: cygwin AT cygwin DOT com References: From: Brian Inglis Openpgp: preference=signencrypt Message-ID: <2f141e31-fbfa-b228-38a7-58f0f909b25e@SystematicSw.ab.ca> Date: Thu, 14 Nov 2019 08:36:41 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes On 2019-11-13 23:48, Lavrentiev, Anton (NIH/NLM/NCBI) [C] via cygwin wrote: > 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. That assumes a POSIX layer is in control: with incompatible Cygwin ABI versions, calling a missing entrypoint, Cygwin did not get far enough through startup to detect and report the mismatch; gdb says so here: > During startup program exited with code 0xc0000139. so Windows handles termination. $ fgrep -R 'During startup program exited with code' src/cygwin/newlib-cygwin/ $ fgrep -R 'During startup program exited with code' /bin/ Binary file /bin/gdb.exe matches -- Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada This email may be disturbing to some readers as it contains too much technical detail. Reader discretion is advised. -- 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