FFI questions

Gary Morris trevion at gmail.com
Mon Jun 6 04:03:36 EDT 2005


Hello everyone,

Apologies in advance if I'm asking an incredibly simple question, but

I'm using GHC 6.4 on Windows XP SP2.  I was recently playing with
implementing the Kocher attack on RSA in Haskell, and along the way I
needed a reasonable way to time operations -- the built-in Windows
functions don't do such a good job.  I wrote a very simple function
that uses the rdtsc instruction:

--- begin: AccuTime.c

#include <windows.h>

__declspec(dllexport) ULONGLONG accuticks() {
	LARGE_INTEGER i;
	ULONG lo, hi;
	__asm {
		rdtsc
		mov hi, edx
		mov lo, eax
	}
	i.HighPart = hi;
	i.LowPart = lo;
	return i.QuadPart;
}

--- end

--- begin: AccuTime.h

#ifndef __accutime_h
#define __acutime_h

#include <windows.h>

ULONGLONG accuticks();

#endif /* __accutime_h */

--- end

and compiled it to AccuTime.dll.  I then attempted to piece together
the file I'd need to import this function into Haskell:

--- begin: AccuTime.hs

module AccuTime where

import Foreign.C.Types

foreign import stdcall unsafe "accutime.h accuticks" c_accuticks :: IO CULLong

accuticks :: IO Integer
accuticks = do ull <- c_accuticks
               return (fromIntegral ull)

--- end

And then, after passing the correct -L and -l flags to ghci, attempted
to load that module.  Unfortunately, I got:

   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 6.4, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base-1.0 ... linking ... done.
Loading object (dynamic) AccuTime ... done
final link ... done
Prelude> :l AccuTime.hs
Compiling AccuTime         ( AccuTime.hs, interpreted )
ghc.exe: panic! (the `impossible' happened, GHC version 6.4):
        ByteCodeFFI.mkMarshalCode_wrk(x86) L_

Please report it as a compiler bug to glasgow-haskell-bugs at haskell.org,
or http://sourceforge.net/projects/ghc/.


>

At this point, I'm quite confused.  Does anyone else know what I'm
doing to cause this panic?

Thanks,

 /g


More information about the Glasgow-haskell-users mailing list