delorie.com/archives/browse.cgi | search |
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:message-id:date:from:mime-version:to:subject | |
:references:in-reply-to:content-type; q=dns; s=default; b=Bmbi+L | |
ot5r0DJkI4O4EF9tG5IWDyfQoWrhdgNOCMUwpUNidBD+LiwJIBienoEvoVROF681 | |
KBCGg5aRLPnbOlMh6rxm5GkHs9rIyRRxNJEL5/EOUKKeMsbLoWNGIFPYkXBIWbpx | |
BNB9CLizmM0u4BmIaN+Pen2XA4xpakCs0fsMc= | |
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:message-id:date:from:mime-version:to:subject | |
:references:in-reply-to:content-type; s=default; bh=oMumiGO4ytlR | |
OYHCPyRcmAWgMsU=; b=xqildLlMGo4vbXuMb/ewX/eKmRxtWFR1mMddblM+5f6t | |
VTzbTFafZrJDZGJ9Bl1sySpMgIo8vTHQBKkN4ojnPmeExr+34E+c+yR8LIM8jihH | |
5s9nupZZXToXEdHkWUiwyRUHVo98tCEArKbolnz7zWlwF2xzWxlsaJnyUvzH9Os= | |
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
List-Id: | <cygwin.cygwin.com> |
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
List-Archive: | <http://sourceware.org/ml/cygwin/> |
List-Post: | <mailto:cygwin AT cygwin DOT com> |
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> |
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-Virus-Found: | No |
X-Spam-SWARE-Status: | No, score=-0.7 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 |
X-HELO: | rgout02.bt.lon5.cpcloud.co.uk |
X-CTCH-RefID: | str=0001.0A090206.53BAA774.00BA,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0 |
X-Junkmail-Premium-Raw: | score=28/50,refid=2.7.2:2014.7.7.105419:17:28.394,ip=86.177.101.223,rules=__MOZILLA_MSGID, __HAS_MSGID, __SANE_MSGID, __HAS_FROM, __USER_AGENT, __MOZILLA_USER_AGENT, __MIME_VERSION, __TO_MALFORMED_2, __TO_NO_NAME, __BOUNCE_CHALLENGE_SUBJ, __BOUNCE_NDR_SUBJ_EXEMPT, __SUBJ_ALPHA_END, __IN_REP_TO, __CT, __CTYPE_HAS_BOUNDARY, __CTYPE_MULTIPART, __CTYPE_MULTIPART_MIXED, __BAT_BOUNDARY, __ANY_URI, URI_ENDS_IN_HTML, __CP_URI_IN_BODY, __SUBJ_ALPHA_NEGATE, __FORWARDED_MSG, BODYTEXTP_SIZE_3000_LESS, BODY_SIZE_3000_3999, __MIME_TEXT_ONLY, RDNS_GENERIC_POOLED, __URI_NS, SXL_IP_DYNAMIC[223.101.177.86.fur], HTML_00_01, HTML_00_10, BODY_SIZE_5000_LESS, RDNS_SUSP_GENERIC, RDNS_SUSP, BODY_SIZE_7000_LESS, MIME_TEXT_ONLY_MP_MIXED |
X-CTCH-Spam: | Unknown |
Message-ID: | <53BAA770.7070005@dronecode.org.uk> |
Date: | Mon, 07 Jul 2014 14:58:08 +0100 |
From: | Jon TURNEY <jon DOT turney AT dronecode DOT org DOT uk> |
User-Agent: | Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 |
MIME-Version: | 1.0 |
To: | cygwin AT cygwin DOT com |
Subject: | Re: abort during exit() with a dynamically loaded C++ library |
References: | <53A084E7 DOT 9010807 AT dronecode DOT org DOT uk> |
In-Reply-To: | <53A084E7.9010807@dronecode.org.uk> |
--------------070102050805060806020100 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 17/06/2014 19:11, Jon TURNEY wrote: > I think I have found a problem when building programs using the latest > mesa library, where abort is being called during exit() > > This seems to be x86 specific, and looks like it is somehow related to > having a C++ library dynamically loaded by a C program. > > I think I have reduced it to the following test case: So, this seems to be related to this patch [1], to fix a different abort during __gcc_deregister_frame() [1] https://sourceware.org/ml/cygwin/2013-07/msg00528.html Since this code is baked into libgcc itself, that patch has the side-effect of making libgcc pin itself in memory. I can't really tell from what's written there if that was deliberate or not, but it seems that it introduces a different problem when the executable doesn't have a dependency on libgcc. > test.c: > > #include <assert.h> > #include <dlfcn.h> > > int main() > { > void *h = dlopen("dllib.dll", 0); > assert(h); > dlclose(h); The problem can be worked around by adding code to force libgcc to get unloaded here, which seems to support this theory, e.g. +#define LIBGCC_SONAME "cyggcc_s-1.dll" + HANDLE hmod_libgcc = GetModuleHandle(LIBGCC_SONAME); + FreeLibrary(hmod_libgcc); > } Attached is a patch which modifies __gcc_register_frame() to avoid it pinning itself in memory. Alternatively, as one of the emails in the linked thread says [2], the assert in __deregister_frame_info_bases() itself could be removed. [2] http://www.mail-archive.com/gcc AT gcc DOT gnu DOT org/msg68286.html --------------070102050805060806020100 Content-Type: text/plain; charset=windows-1252; name="cygming-crtbegin.c.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="cygming-crtbegin.c.patch" LS0tIGN5Z21pbmctY3J0YmVnaW4uYy5iYWsJMjAxNC0wNy0wMyAxNjo0MTo0 My4xMTY2MDAwMDAgKzAxMDAKKysrIGN5Z21pbmctY3J0YmVnaW4uYwkyMDE0 LTA3LTAzIDE4OjM5OjA3LjQzNjgwMDAwMCArMDEwMApAQCAtOTksOCArOTks MjEgQEAKIAogICBpZiAoaCkKICAgICB7Ci0gICAgICAvKiBJbmNyZWFzaW5n IHRoZSBsb2FkLWNvdW50IG9mIExJQkdDQ19TT05BTUUgRExMLiAgKi8KLSAg ICAgIGhtb2RfbGliZ2NjID0gTG9hZExpYnJhcnkgKExJQkdDQ19TT05BTUUp OworICAgICAgLyoKKyAgICAgICAgIEluY3JlYXNlIHRoZSBsb2FkLWNvdW50 IG9mIHRoZSBMSUJHQ0NfU09OQU1FIERMTCBieSBvbmUsIHNvIHRoYXQgaXQg cmVtYWlucworICAgICAgICAgbG9hZGVkIGFzIGxvbmcgYXMgdGhpcyBtb2R1 bGUgaXMsIHNvIHRoYXQgX19nY2NfZGVyZWdpc3Rlcl9mcmFtZSgpIHdpbGwg Y2FsbAorICAgICAgICAgX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm8oKSBpbiB0 aGF0IERMTCwgdG8gbWF0Y2ggdGhlIHJlZ2lzdGVyX2ZyYW1lX2luZm8oKQor ICAgICAgICAgd2UgZG8gbm93LgorCisgICAgICAgICBVbmxlc3MgdGhpcyAq aXMqIExJQkdDQ19TT05BTUUgRExMLCB3aGVyZSBpbmNyZWFzaW5nIG91ciBv d24gbG9hZC1jb3VudCB3b3VsZAorICAgICAgICAgbWFrZSB1cyBzZWxmLXBp bm5pbmcuCisgICAgICAqLworICAgICAgSE1PRFVMRSBobW9kX3RoaXMgPSAw OworICAgICAgR2V0TW9kdWxlSGFuZGxlRXggKEdFVF9NT0RVTEVfSEFORExF X0VYX0ZMQUdfRlJPTV9BRERSRVNTIHwgR0VUX01PRFVMRV9IQU5ETEVfRVhf RkxBR19VTkNIQU5HRURfUkVGQ09VTlQsCisJIChMUENUU1RSKV9fZ2NjX3Jl Z2lzdGVyX2ZyYW1lLCAmaG1vZF90aGlzKTsKKyAgICAgIGlmIChobW9kX3Ro aXMgIT0gaCkKKyAgICAgICAgICBobW9kX2xpYmdjYyA9IExvYWRMaWJyYXJ5 IChMSUJHQ0NfU09OQU1FKTsKKwogICAgICAgcmVnaXN0ZXJfZnJhbWVfZm4g PSAodm9pZCAoKikgKGNvbnN0IHZvaWQgKiwgc3RydWN0IG9iamVjdCAqKSkK IAkJCSAgR2V0UHJvY0FkZHJlc3MgKGgsICJfX3JlZ2lzdGVyX2ZyYW1lX2lu Zm8iKTsKICAgICB9Cg== --------------070102050805060806020100 Content-Type: text/plain; charset=us-ascii -- 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 --------------070102050805060806020100--
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |