From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22353 invoked by alias); 22 May 2009 00:08:51 -0000 Received: (qmail 22344 invoked by uid 22791); 22 May 2009 00:08:50 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from rv-out-0708.google.com (HELO rv-out-0708.google.com) (209.85.198.240) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 22 May 2009 00:08:42 +0000 Received: by rv-out-0708.google.com with SMTP id k29so474428rvb.48 for ; Thu, 21 May 2009 17:08:40 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.237.20 with SMTP id k20mr1108396wfh.8.1242950920630; Thu, 21 May 2009 17:08:40 -0700 (PDT) In-Reply-To: <54b165660806171627i489ec78at85e8576762fe97af@mail.gmail.com> References: <54b165660806171627i489ec78at85e8576762fe97af@mail.gmail.com> Date: Fri, 22 May 2009 00:08:00 -0000 Message-ID: Subject: Re: Static Library Initialization (again?) From: Ramiro Polla To: pthreads-win32@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd32e0a18f35b046a7510c4 Mailing-List: contact pthreads-win32-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: pthreads-win32-owner@sourceware.org X-SW-Source: 2009/txt/msg00024.txt.bz2 --000e0cd32e0a18f35b046a7510c4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2116 Hi, On Tue, Jun 17, 2008 at 8:27 PM, Brian Cole wrote: > It looks like I'm running into the same problem as others. I need to > distribute a static library with pthreads-win32 included without > requiring end-users of our library to call any pthreads-win32 specific > attach or detach code. Based on previous posts to the mailing list it > looks like the boost library has dealt with this before: > http://sourceware.org/ml/pthreads-win32/2008/msg00022.html > > I also found this bit of code inside the Google performance tools: > #ifdef _MSC_VER > > // This tells the linker to run these functions. > #pragma data_seg(push, old_seg) > #pragma data_seg(".CRT$XLB") > static void (NTAPI *p_thread_callback)(HINSTANCE h, DWORD dwReason, PVOID= pv) > =A0 =A0=3D on_tls_callback; > #pragma data_seg(".CRT$XTU") > static int (*p_process_term)(void) =3D on_process_term; > #pragma data_seg(pop, old_seg) > > #else =A0// #ifdef _MSC_VER =A0[probably msys/mingw] > > // We have to try the DllMain solution here, because we can't use the > // msvc-specific pragmas. > > > #endif =A0// #ifdef _MSC_VER > > Any reason pthreads-win32 can't use these same mechanisms to initialize i= tself? > > Why can't DllMain be used for this? MSDN seems to imply that DllMain > is called for static libraries > (http://msdn.microsoft.com/en-us/library/ms682583.aspx): > "The lpReserved parameter indicates whether the DLL is being loaded > statically or dynamically." > > I just looked through boost and found their implementation > (boost-trunk/libs/thread/src/win32/tss_pe.cpp). Any objection to me > creating a patch based on this code for pthreads-win32? I attached an ugly but working patch for this. I haven't tested building pthreads with MSVC but the initialization code worked on a standalone test app. I added a new make clean GC-autostatic to build the library. make clean GC-static tests pass. I also tested a bit with FFmpeg (but not extensively). I'm sure it can be dramatically improved (comments, documentation, stress test, etc), but as a start it's good enough. Ramiro Polla --000e0cd32e0a18f35b046a7510c4 Content-Type: application/octet-stream; name="static_library_initialization.diff" Content-Disposition: attachment; filename="static_library_initialization.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fv04u8rh0 Content-length: 7438 ZGlmZiAtdXIgcHRocmVhZHMub3JpZy9HTlVtYWtlZmlsZSBwdGhyZWFkcy9H TlVtYWtlZmlsZQotLS0gcHRocmVhZHMub3JpZy9HTlVtYWtlZmlsZQlUaHUg TWF5IDIxIDIwOjEzOjE2IDIwMDkKKysrIHB0aHJlYWRzL0dOVW1ha2VmaWxl CVRodSBNYXkgMjEgMjA6MzE6MDkgMjAwOQpAQCAtNDU1LDYgKzQ1NSw3IEBA CiAJQCBlY2hvICJtYWtlIGNsZWFuIEdDLWlubGluZWQgICAgKHRvIGJ1aWxk IHRoZSBHTlUgQyBpbmxpbmVkIGRsbCB3aXRoIEMgY2xlYW51cCBjb2RlKSIK IAlAIGVjaG8gIm1ha2UgY2xlYW4gR0NFLWlubGluZWQgICAodG8gYnVpbGQg dGhlIEdOVSBDIGlubGluZWQgZGxsIHdpdGggQysrIGV4Y2VwdGlvbiBoYW5k bGluZykiCiAJQCBlY2hvICJtYWtlIGNsZWFuIEdDLXN0YXRpYyAgICAgKHRv IGJ1aWxkIHRoZSBHTlUgQyBpbmxpbmVkIHN0YXRpYyBsaWIgd2l0aCBDIGNs ZWFudXAgY29kZSkiCisJQCBlY2hvICJtYWtlIGNsZWFuIEdDLWF1dG9zdGF0 aWMgKHRvIGJ1aWxkIHRoZSBHTlUgQyBpbmxpbmVkIHN0YXRpYyBsaWIgd2l0 aCBDIGNsZWFudXAgY29kZSBhbmQgYXV0b21hdGljIGxpYnJhcnkgaW5pdGlh bGl6YXRpb24pIgogCUAgZWNobyAibWFrZSBjbGVhbiBHQy1kZWJ1ZyAgICAg ICh0byBidWlsZCB0aGUgR05VIEMgZGVidWcgZGxsIHdpdGggQyBjbGVhbnVw IGNvZGUpIgogCUAgZWNobyAibWFrZSBjbGVhbiBHQ0UtZGVidWcgICAgICh0 byBidWlsZCB0aGUgR05VIEMgZGVidWcgZGxsIHdpdGggQysrIGV4Y2VwdGlv biBoYW5kbGluZykiCiAJQCBlY2hvICJtYWtlIGNsZWFuIEdDLWlubGluZWQt ZGVidWcgICAgKHRvIGJ1aWxkIHRoZSBHTlUgQyBpbmxpbmVkIGRlYnVnIGRs bCB3aXRoIEMgY2xlYW51cCBjb2RlKSIKQEAgLTQ5MSw2ICs0OTIsOSBAQAog CiBHQy1zdGF0aWM6CiAJCSQoTUFLRSkgWE9QVD0iLURQVFczMl9CVUlMRF9J TkxJTkVEIC1EUFRXMzJfU1RBVElDX0xJQiIgQ0xFQU5VUD0tRF9fQ0xFQU5V UF9DIFhDX0ZMQUdTPSIkKEdDX0NGTEFHUykiIE9CSj0iJChETExfSU5MSU5F RF9PQkpTKSIgJChHQ19TVEFUSUNfU1RBTVApCisKK0dDLWF1dG9zdGF0aWM6 CisJCSQoTUFLRSkgWE9QVD0iLURQVFczMl9CVUlMRF9JTkxJTkVEIC1EUFRX MzJfQVVUT1NUQVRJQyAtRFBUVzMyX1NUQVRJQ19MSUIiIENMRUFOVVA9LURf X0NMRUFOVVBfQyBYQ19GTEFHUz0iJChHQ19DRkxBR1MpIiBPQko9IiQoRExM X0lOTElORURfT0JKUykiICQoR0NfU1RBVElDX1NUQU1QKQogCiBHQy1zdGF0 aWMtZGVidWc6CiAJCSQoTUFLRSkgWE9QVD0iLURQVFczMl9CVUlMRF9JTkxJ TkVEIC1EUFRXMzJfU1RBVElDX0xJQiIgQ0xFQU5VUD0tRF9fQ0xFQU5VUF9D IFhDX0ZMQUdTPSIkKEdDX0NGTEFHUykiIE9CSj0iJChETExfSU5MSU5FRF9P QkpTKSIgRExMX1ZFUj0kKERMTF9WRVJEKSBPUFQ9IiQoRE9QVCkiICQoR0NE X1NUQVRJQ19TVEFNUCkKZGlmZiAtdXIgcHRocmVhZHMub3JpZy9hdXRvc3Rh dGljLmMgcHRocmVhZHMvYXV0b3N0YXRpYy5jCi0tLSBwdGhyZWFkcy5vcmln L2F1dG9zdGF0aWMuYwlUaHUgTWF5IDIxIDIwOjU1OjIyIDIwMDkKKysrIHB0 aHJlYWRzL2F1dG9zdGF0aWMuYwlUaHUgTWF5IDIxIDIwOjI3OjI2IDIwMDkK QEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBhdXRvc3RhdGljLmMKKyAqCisg KiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgdHJhbnNsYXRpb24gdW5pdCBpbXBs ZW1lbnRzIHN0YXRpYyBsaWJyYXJ5IGluaXRpYWxpc2F0aW9uLgorICoKKyAq IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogICAgICBQ dGhyZWFkcy13aW4zMiAtIFBPU0lYIFRocmVhZHMgTGlicmFyeSBmb3IgV2lu MzIKKyAqICAgICAgQ29weXJpZ2h0KEMpIDE5OTggSm9obiBFLiBCb3Nzb20K KyAqICAgICAgQ29weXJpZ2h0KEMpIDE5OTksMjAwNSBQdGhyZWFkcy13aW4z MiBjb250cmlidXRvcnMKKyAqIAorICogICAgICBDb250YWN0IEVtYWlsOiBy cGpAY2FsbGlzdG8uY2FuYmVycmEuZWR1LmF1CisgKiAKKyAqICAgICAgVGhl IGN1cnJlbnQgbGlzdCBvZiBjb250cmlidXRvcnMgaXMgY29udGFpbmVkCisg KiAgICAgIGluIHRoZSBmaWxlIENPTlRSSUJVVE9SUyBpbmNsdWRlZCB3aXRo IHRoZSBzb3VyY2UKKyAqICAgICAgY29kZSBkaXN0cmlidXRpb24uIFRoZSBs aXN0IGNhbiBhbHNvIGJlIHNlZW4gYXQgdGhlCisgKiAgICAgIGZvbGxvd2lu ZyBXb3JsZCBXaWRlIFdlYiBsb2NhdGlvbjoKKyAqICAgICAgaHR0cDovL3Nv dXJjZXMucmVkaGF0LmNvbS9wdGhyZWFkcy13aW4zMi9jb250cmlidXRvcnMu aHRtbAorICogCisgKiAgICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAg bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworICogICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICAg ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgIFRoaXMgbGli cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogICAgICBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAg ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICAgICAgTGljZW5zZSBhbG9u ZyB3aXRoIHRoaXMgbGlicmFyeSBpbiB0aGUgZmlsZSBDT1BZSU5HLkxJQjsK KyAqICAgICAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuLAorICogICAgICA1OSBUZW1wbGUgUGxhY2UgLSBT dWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKwor I2lmZGVmIFBUVzMyX0FVVE9TVEFUSUMKKworI2luY2x1ZGUgInB0aHJlYWQu aCIKKyNpbmNsdWRlICJpbXBsZW1lbnQuaCIKKworc3RhdGljIHZvaWQgb25f cHJvY2Vzc19pbml0KHZvaWQpCit7CisgICAgcHRocmVhZF93aW4zMl9wcm9j ZXNzX2F0dGFjaF9ucCAoKTsKK30KKworc3RhdGljIHZvaWQgb25fcHJvY2Vz c19leGl0KHZvaWQpCit7CisgICAgcHRocmVhZF93aW4zMl90aHJlYWRfZGV0 YWNoX25wICAoKTsKKyAgICBwdGhyZWFkX3dpbjMyX3Byb2Nlc3NfZGV0YWNo X25wICgpOworfQorCitzdGF0aWMgdm9pZCBOVEFQSSBvbl90bHNfY2FsbGJh Y2soSElOU1RBTkNFIGgsIERXT1JEIGR3UmVhc29uLCBQVk9JRCBwdikKK3sK KyAgICBzd2l0Y2ggKGR3UmVhc29uKSB7CisgICAgY2FzZSBETExfVEhSRUFE X0FUVEFDSDoKKyAgICAgICAgcHRocmVhZF93aW4zMl90aHJlYWRfYXR0YWNo X25wKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRExMX1RIUkVBRF9E RVRBQ0g6CisgICAgICAgIHB0aHJlYWRfd2luMzJfdGhyZWFkX2RldGFjaF9u cCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVk KF9fTUlOR1czMl9fKQorVUxPTkcgX190bHNfaW5kZXhfXyA9IDA7CitjaGFy IF9fdGxzX2VuZF9fICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnRscyR6 enoiKSkpID0gMDsKK2NoYXIgX190bHNfc3RhcnRfXyBfX2F0dHJpYnV0ZV9f KChzZWN0aW9uKCIudGxzIikpKSAgICAgPSAwOworCit2b2lkICpfX2NydF94 bGEgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5DUlQkWExBIikpKSA9IDA7 Cit2b2lkICpfX2NydF94bGIgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5D UlQkWExCIikpKSA9IG9uX3Rsc19jYWxsYmFjazsKK3ZvaWQgKl9fY3J0X3hs eiBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLkNSVCRYTFoiKSkpID0gMDsK KworY29uc3QgSU1BR0VfVExTX0RJUkVDVE9SWTMyIF90bHNfdXNlZCBfX2F0 dHJpYnV0ZV9fICgoc2VjdGlvbigiLnJkYXRhJFQiKSkpID0KK3sKKyAgICAg ICAgKERXT1JEKSAmX190bHNfc3RhcnRfXywKKyAgICAgICAgKERXT1JEKSAm X190bHNfZW5kX18sCisgICAgICAgIChEV09SRCkgJl9fdGxzX2luZGV4X18s CisgICAgICAgIChEV09SRCkgKCZfX2NydF94bGErMSksCisgICAgICAgIChE V09SRCkgMCwKKyAgICAgICAgKERXT1JEKSAwCit9OworCit2b2lkICpfX2N0 b3JzIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5jdG9ycyIpKSkgICAgID0g b25fcHJvY2Vzc19pbml0Owordm9pZCAqX19kdG9ycyBfX2F0dHJpYnV0ZV9f KChzZWN0aW9uKCIuZHRvcnMuenp6IikpKSA9IG9uX3Byb2Nlc3NfZXhpdDsK KworI2VsaWYgIGRlZmluZWQoX01TQ19WRVIpCisKK2V4dGVybiBEV09SRCBf dGxzX3VzZWQ7CisKK3N0YXRpYyBpbnQgb25fdGxzX3ByZXBhcmUodm9pZCkK K3sKKyAgICBEV09SRCB2b2xhdGlsZSBkdyA9IF90bHNfdXNlZDsKKworICAg IHJldHVybiAwOworfQorCisjcHJhZ21hIHNlY3Rpb24oIi5DUlQkWExDIixs b25nLHJlYWQpCitfX2RlY2xzcGVjKGFsbG9jYXRlKCIuQ1JUJFhMQyIpKSB2 b2lkICpfX2NydF94bGMgPSBvbl90bHNfY2FsbGJhY2s7CisjcHJhZ21hIHNl Y3Rpb24oIi5DUlQkWElVIixsb25nLHJlYWQpCitfX2RlY2xzcGVjKGFsbG9j YXRlKCIuQ1JUJFhJVSIpKSB2b2lkICpfX2NydF94aXUgPSBvbl90bHNfcHJl cGFyZTsKKworI3ByYWdtYSBzZWN0aW9uKCIuQ1JUJFhDVSIsbG9uZyxyZWFk KQorX19kZWNsc3BlYyhhbGxvY2F0ZSgiLkNSVCRYQ1UiKSkgdm9pZCAqX19j cnRfeGN1ID0gb25fcHJvY2Vzc19pbml0OworI3ByYWdtYSBzZWN0aW9uKCIu Q1JUJFhQVSIsbG9uZyxyZWFkKQorX19kZWNsc3BlYyhhbGxvY2F0ZSgiLkNS VCRYUFUiKSkgdm9pZCAqX19jcnRfeHR1ID0gb25fcHJvY2Vzc19leGl0Owor I2VuZGlmCisKKyNlbmRpZiAvKiBQVFczMl9TVEFUSUNfTElCICovCmRpZmYg LXVyIHB0aHJlYWRzLm9yaWcvcHRocmVhZC5jIHB0aHJlYWRzL3B0aHJlYWQu YwotLS0gcHRocmVhZHMub3JpZy9wdGhyZWFkLmMJVGh1IE1heSAyMSAyMDox MzoxNiAyMDA5CisrKyBwdGhyZWFkcy9wdGhyZWFkLmMJVGh1IE1heSAyMSAy MDoxNjo1NSAyMDA5CkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiY29u ZHZhci5jIgogI2luY2x1ZGUgImNyZWF0ZS5jIgogI2luY2x1ZGUgImRsbC5j IgorI2luY2x1ZGUgImF1dG9zdGF0aWMuYyIKICNpbmNsdWRlICJlcnJuby5j IgogI2luY2x1ZGUgImV4aXQuYyIKICNpbmNsdWRlICJmb3JrLmMiCg== --000e0cd32e0a18f35b046a7510c4--