Hi,

such failures a commonly caused by inline-assembler not treating
memory-ref proper.  I assume that inline assembler doesn't specify
explicit memory-clobber/modify.  Newer gcc versions are here more
strict then older versions.

Kai

2012/2/20 David Cleaver <[email protected]>:
> Hello everyone,
>
> I have run into a very strange problem and I am not sure what might be causing
> it.  I am compiling the latest svn of gmp-ecm (right now it is 1746) and
> depending on whether I insert a few extra print statements or not, one certain
> test in gmp-ecm will either run to completion or will seg_fault.  Can someone
> here help me test whether this might be a problem with MingW64, Win XP x64, 
> MPIR
> 2.5.0, or maybe something else?  I have run into the problem with two 
> different
> sezero builds (20101003 and 20111101) as my MingW64 compiler.  I am compiling
> inside an MSYS shell (1.0.16).  I am on a Windows XP x64 computer.
>
> Steps to reproduce the problem I am seeing:
> 0) Use MPIR as your GMP library and MingW64 as your compiler
> 1) Download latest gmp-ecm svn (currently 1746)
> 2) run 'autoreconf -i'
> 3) I configure with the following options:
> ./configure CC=gcc CFLAGS="-O2 -pedantic -m64 -std=gnu99 -mtune=core2
> -march=core2" --enable-asm-redc --build=x86_64-w64-mingw32 --disable-assert
> 4) run 'make'
>
> At this point we can just run the test that fails for me, it is (sorry for any
> wrap around):
> echo
> 449590253344339769860648131841615148645295989319968106906219761704350259884936939123964073775456979170209297434164627098624602597663490109944575251386017
> | ecm -sigma 63844855 -go 172969 61843 20658299
>
> The test should produce a 27 digit factor of the 153 digit input.  However, in
> my setup it seg_faults, actually just a silent crash with no screen output.
>
> Now, I have been using some printf's (actually outputf in gmp-ecm code) to try
> to track down where the crash was happening.  I have found that if I put three
> outputf statements in one part of the code, the program runs successfully and
> produces the factorization.  Can anyone else here reproduce this problem?  I'm
> curious to see if this problem happens for anyone else on WinXP x64, or maybe 
> on
> Win7 x64.
>
> If anyone can reproduce the crash, can you see if the following change fixes 
> the
> problem in your environment?  The diff just applies to one file, mpmod.c.
> $ diff -u ../svn/mpmod.c mpmod.c
> --- ../svn/mpmod.c      2012-02-12 19:59:32 -0600
> +++ mpmod.c     2012-02-19 14:48:36 -0600
> @@ -719,8 +719,11 @@
>  #endif /* otherwise go through to the next available mode */
>          case MPMOD_MUL_REDC3: /* mpn_mul_n + ecm_redc3 */
>  #if defined(HAVE_ASM_REDC3)
> +outputf(OUTPUT_VERBOSE, "tmp0=0x%I64x tmp1=0x%I64x tmp2=0x%I64x\n", tmp[0],
> tmp[1], tmp[2]);
>            mpn_sqr (tmp, s1p, nn);
> +outputf(OUTPUT_VERBOSE, "tmp0=0x%I64x tmp1=0x%I64x tmp2=0x%I64x\n", tmp[0],
> tmp[1], tmp[2]);
>            ecm_redc3 (tmp, np, nn, invm[0]);
> +outputf(OUTPUT_VERBOSE, "tmp0=0x%I64x tmp1=0x%I64x tmp2=0x%I64x\n", tmp[0],
> tmp[1], tmp[2]);
>            cy = mpn_add_n (rp, tmp + nn, tmp, nn);
>            if (cy != 0)
>              mpn_sub_n (rp, rp, np, nn); /* a borrow should always occur here 
> */
>
> At this point, if you run 'make clean' and 'make' again, then run the test 
> case
> from up above, it should produce a factor very quickly.
>
> For some strange reason, all three of the 'outputf' statements above are
> necessary to make gmp-ecm run to completion.  If any of those 'outputf'
> statements are left out, then the program will silently crash.
>
> My guess is that there is some assembly code in gmp-ecm (the ecm_redc3 
> function,
> found in ecm_svn_1746/x86_64/redc.asm) that MingW64 might not be processing
> correctly.  This is just a guess based on the fact that the crash happens with
> both MPIR and GMP (it only happens to GMP if it goes through the same code 
> path
> as MPIR, ask me for the change if you would like to see it with GMP).
>
> Is anyone willing to help me track this problem down?  Is there any more
> information that anyone needs to look into this problem?  Thanks for your time
> and I'll talk with you later.
>
> -David C.
>
> ------------------------------------------------------------------------------
> Try before you buy = See our experts in action!
> The most comprehensive online learning library for Microsoft developers
> is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
> Metro Style Apps, more. Free future releases when you subscribe now!
> http://p.sf.net/sfu/learndevnow-dev2
> _______________________________________________
> Mingw-w64-public mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public



-- 
|  (\_/) This is Bunny. Copy and paste
| (='.'=) Bunny into your signature to help
| (")_(") him gain world domination

------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to