From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Andy Moreton Newsgroups: gmane.emacs.devel Subject: Re: bignum branch Date: Fri, 10 Aug 2018 15:05:19 +0100 Message-ID: References: <87o9fbbw1t.fsf@tromey.com> <86sh4b1833.fsf@gmail.com> <861sbgz3dm.fsf@gmail.com> <83a7q4ufxp.fsf@gnu.org> <87wot71hpb.fsf@tromey.com> <86in4rgt1m.fsf@gmail.com> <83pnyyu0k1.fsf@gnu.org> <86k1p59haq.fsf@gmail.com> <83va8osuz2.fsf@gnu.org> <87ftzrknyg.fsf@tromey.com> <87zhxwig5k.fsf@tromey.com> <86lg9gl7vy.fsf@gmail.com> <87tvo4i9em.fsf@tromey.com> <86k1ozl0yd.fsf@gmail.com> <83in4iojva.fsf@gnu.org> <86bmaasm39.fsf@gmail.com> <83a7puo8oq.fsf@gnu.org> <83zhxummef.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1533909841 32733 195.159.176.226 (10 Aug 2018 14:04:01 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 10 Aug 2018 14:04:01 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (windows-nt) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Aug 10 16:03:57 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fo81E-0008QK-VI for ged-emacs-devel@m.gmane.org; Fri, 10 Aug 2018 16:03:57 +0200 Original-Received: from localhost ([::1]:56435 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fo83L-0002UW-ED for ged-emacs-devel@m.gmane.org; Fri, 10 Aug 2018 10:06:07 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:38817) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fo82l-0002UO-Tf for emacs-devel@gnu.org; Fri, 10 Aug 2018 10:05:32 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fo82i-0001He-PY for emacs-devel@gnu.org; Fri, 10 Aug 2018 10:05:31 -0400 Original-Received: from [195.159.176.226] (port=52585 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fo82i-0001GI-C5 for emacs-devel@gnu.org; Fri, 10 Aug 2018 10:05:28 -0400 Original-Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1fo80Z-0007hA-0C for emacs-devel@gnu.org; Fri, 10 Aug 2018 16:03:15 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 62 Original-X-Complaints-To: usenet@blaine.gmane.org Cancel-Lock: sha1:ne90yNY4S9ClbCpz3OffsWbtubg= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 195.159.176.226 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:228378 Archived-At: On Fri 10 Aug 2018, Eli Zaretskii wrote: >> From: Andy Moreton >> Date: Fri, 10 Aug 2018 12:39:33 +0100 >> >> >> Emacs currently links against the shared library on MSYS2 64bit, and has >> >> a dependency on "c:/msys64/mingw64/bin/libgmp-10.dll". >> > >> I used the MSYS2 version of cygcheck to report the dependencies, and >> also the Dependency Walker tool. Both show libgmp-10.dll as a direct >> dependency of emacs.exe. > > And that happens no matter what version of the gmp.h header, the > original one or the one you modified. you use during compilation? Yes, which is expected. The API decoration with dllimport only ensures that the symbols are linked correctly - the choice of libary is set by the linker options. >> The only thing I changed was the dllimport decorations, and that changed >> the behaviour from a crash to working properly. > > What happens if you restore the original gmp.h, rename libgmp.dll.a to > something the linker won't recognize, and rebuild Emacs? (This should > cause Emacs to be linked statically against libgmp.a.) Does the > problem with the test suite happen then? Good idea. I reinstalledthe GMP package, and checked that gmp.h is unmodified, and then tested each time as follows: - touch globals.h - rebuild emacs - "ldd emacs.exe | grep -i gmp" to check dependencies - "make -C test data-tests" to run logcount test | | __GMP_LIBGMP_DLL | libgmp.dll.a | dependencies | data-tests | |---+------------------+--------------+---------------+------------| | 1 | 0 | libgmp.dll.a | libgmp-10.dll | crash | |---+------------------+--------------+---------------+------------| | 2 | 0 | (removed) | (none) | pass | |---+------------------+--------------+---------------+------------| | 3 | 1 | libgmp.dll.a | libgmp-10.dll | pass | |---+------------------+--------------+---------------+------------| | 4 | 1 | (removed) | (link fails) | n/a | |---+------------------+--------------+---------------+------------| Row (1) is the original bignum build with the problem. Row (2) results in using the static lib correctly. Row (3) with modified gmp.h shows the shared lib working correctly. Row (4) shows that asking for dllimport APIs without the import library fails to link: CCLD temacs.exe C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: frame.o: in function `XFLOATINT': C:/emacs/git/emacs/bignum/src/lisp.h:2923: undefined reference to `__imp___gmpz_get_d' [many similar lines omitted] I think this clearly shows that the problem is nmismatched calling convention and library usage. AndyM