From b515d109750e00630dfaf6055a1ded8dfd61b415 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Wed, 14 May 2008 09:27:42 +0000 Subject: [PATCH] FIX #1288: GHCi wasn't adding the @n suffix to stdcalls on Windows --- compiler/ghci/ByteCodeGen.lhs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/compiler/ghci/ByteCodeGen.lhs b/compiler/ghci/ByteCodeGen.lhs index d395aa0..bd29281 100644 --- a/compiler/ghci/ByteCodeGen.lhs +++ b/compiler/ghci/ByteCodeGen.lhs @@ -950,9 +950,10 @@ generateCCall d0 s p (CCallSpec target cconv _) fn args_r_to_l code_n_reps <- pargs d0 args_r_to_l let (pushs_arg, a_reps_pushed_r_to_l) = unzip code_n_reps + a_reps_sizeW = sum (map primRepSizeW a_reps_pushed_r_to_l) push_args = concatOL pushs_arg - d_after_args = d0 + sum (map primRepSizeW a_reps_pushed_r_to_l) + d_after_args = d0 + a_reps_sizeW a_reps_pushed_RAW | null a_reps_pushed_r_to_l || head a_reps_pushed_r_to_l /= VoidRep = panic "ByteCodeGen.generateCCall: missing or invalid World token?" @@ -1009,8 +1010,18 @@ generateCCall d0 s p (CCallSpec target cconv _) fn args_r_to_l DynamicTarget -> return (False, panic "ByteCodeGen.generateCCall(dyn)") StaticTarget target - -> do res <- ioToBc (lookupStaticPtr target) + -> do res <- ioToBc (lookupStaticPtr stdcall_adj_target) return (True, res) + where + stdcall_adj_target +#ifdef mingw32_TARGET_OS + | StdCallConv <- cconv + = mkFastString (unpackFS target ++ '@':show size) +#endif + | otherwise + = target + size = a_reps_sizeW * wORD_SIZE + -- in (is_static, static_target_addr) <- get_target_info let -- 1.7.10.4