I just tested w32 support,

  ./configure --host=i586-mingw32msvc

which produces shared libraries (and I'm not sure I've tested this
eariler, I may have used --disable-shared on earlier builds for w32).

When I run the testsuite with make check EMULATOR=wine, the arcfour
testcase fails. wine reports the error like

Unhandled exception: page fault on read access to 0x70dc344d in 32-bit code 
(0x70dc344d).
Register dump:
 CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b
 EIP:70dc344d ESP:0061fc5c EBP:0061fdc8 EFLAGS:00010202(  R- --  I   - - - )
 EAX:0061fcba EBX:00000001 ECX:00000001 EDX:00000001
 ESI:001139ef EDI:001139b0
Stack dump:
0x0061fc5c:  004014bd 0061fcba 00000001 001139f0
0x0061fc6c:  001139b0 0061fcd0 7bc4abf6 00000001
0x0061fc7c:  00113990 001139f8 001139b0 001139d0
0x0061fc8c:  00000000 00000000 00113988 001139a8
0x0061fc9c:  001139c8 00000008 00000009 001139f0
0x0061fcac:  7bc3812f 00000020 0061fcc8 df019956
Backtrace:
=>0 0x70dc344d (0x0061fdc8)
  1 0x00401767 test_main+0x36() 
[/home/nisse/hack/nettle/testsuite/arcfour-test.c:73] in arcfour-test 
(0x0061fde8)
  2 0x00401767 test_main+0x36() 
[/home/nisse/hack/nettle/testsuite/arcfour-test.c:73] in arcfour-test 
(0x0061fe08)

I'm not entirely sure how to interpret this, but it looks like the
instruction pointer gets a bogus value. It looks like there's a problem
with arcfoure-crypt.asm, because configuring with --disable-assembler
seems to work fine. Also compiling with --disable-shared works fine.

Questions:

1. Can the problem be reproduced on a M$ windows machine?

2. Are there any calling convention subtleties in dll calls? I just push
   and pop the callee-save registers %ebx, %ebp, %esi, %edi, and read
   the arguments from the stack.

I have no dllimport/dllexport stuff in the header files, instead relying
on mingw tools doing the right thing automatically. I get lots of
messages like

     Info: resolving _nettle_arcfour_crypt by linking to 
__imp__nettle_arcfour_crypt (auto-import)
     
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/bin/ld: 
warning: auto-importing has been activated without --enable-auto-import 
specified on the command line.
     This should work unless it involves constant data structures referencing 
symbols from auto-imported DLLs.

This probably needs fixing at some point, but as far as I see,
arcfour-test doesn't use any references from constant data, and it
should be independent of the choice between C or assembly for
arcfour-crypt.

Regards,
/Niels

-- 
Niels Möller. PGP-encrypted email is preferred. Keyid C0B98E26.
Internet email is subject to wholesale government surveillance.

_______________________________________________
nettle-bugs mailing list
nettle-bugs@lists.lysator.liu.se
http://lists.lysator.liu.se/mailman/listinfo/nettle-bugs

Reply via email to