From 30d8d38329e64d61a62aa9a7fd7878a123204a0e Mon Sep 17 00:00:00 2001 From: simonmar Date: Mon, 7 Mar 2005 15:59:27 +0000 Subject: [PATCH] [project @ 2005-03-07 15:59:27 by simonmar] Include WORD_SIZE_IN_BITS in the interface header, and test it when reading. Fixes a problem whereby GHC on a 64-bit platform will crash if it tries to read an interface file generated by the same version of GHC on a 32-bit platform. --- ghc/compiler/iface/BinIface.hs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ghc/compiler/iface/BinIface.hs b/ghc/compiler/iface/BinIface.hs index b809e3a..402ba1f 100644 --- a/ghc/compiler/iface/BinIface.hs +++ b/ghc/compiler/iface/BinIface.hs @@ -8,6 +8,7 @@ module BinIface ( writeBinIface, readBinIface, v_IgnoreHiWay ) where #include "HsVersions.h" +#include "MachDeps.h" import HscTypes import BasicTypes @@ -25,12 +26,11 @@ import Binary import Util import DATA_IOREF +import DATA_WORD ( Word8 ) import EXCEPTION ( throwDyn ) import Monad ( when ) import Outputable -#include "HsVersions.h" - -- --------------------------------------------------------------------------- writeBinIface :: FilePath -> ModIface -> IO () writeBinIface hi_path mod_iface @@ -111,6 +111,7 @@ instance Binary ModIface where put_ bh (show opt_HiVersion) build_tag <- readIORef v_Build_tag put bh build_tag + put_ bh (WORD_SIZE_IN_BITS :: Word8) put_ bh mod put_ bh is_boot put_ bh mod_vers @@ -146,6 +147,15 @@ instance Binary ModIface where "mismatched interface file ways: expected " ++ build_tag ++ ", found " ++ check_way)) + check_ws <- get bh + let our_ws = WORD_SIZE_IN_BITS :: Word8 + when (check_ws /= our_ws) $ + -- use userError because this will be caught by readIface + -- which will emit an error msg containing the iface module name. + throwDyn (ProgramError ( + "mismatched word size: expected " + ++ show our_ws ++ ", found " ++ show check_ws)) + mod_name <- get bh is_boot <- get bh mod_vers <- get bh -- 1.7.10.4