Hello,

With the patch to deriveConstants, a build on an older Windows (32bit Vista, MinGW32 installation, which used to work) now fails with error

        Can't find "STD_HDR_SIZE"

I ran the nm command manually on the generated o file (includes/dist-derivedconstants/header/tmp.o) and saw that the output follows pattern

_derivedConstantBlaBlah_Blah C 000001b

so it does not match the four-word pattern in the patch.

Is this a problem with my setup, or does it fail for other people on Windows as well?

Thanks,
Jost

On 03/23/2014 08:46 AM, [email protected] wrote:
Message: 6
Date: Sun, 23 Mar 2014 02:01:50 +0000 (UTC)
From: [email protected]
To: [email protected]
Subject: [commit: ghc] ghc-7.8: change deriveConstants to use nm in a
        POSIX way (fixes #8781) (e7563ec)
Message-ID: <[email protected]>
Content-Type: text/plain; charset=utf-8

Repository : ssh://[email protected]/ghc

On branch  : ghc-7.8
Link       : 
http://ghc.haskell.org/trac/ghc/changeset/e7563ec2e03740074903036bf129fc972b623c23/ghc

---------------------------------------------------------------

commit e7563ec2e03740074903036bf129fc972b623c23
Author: Karel Gardas <[email protected]>
Date:   Sat Mar 22 22:33:05 2014 +0100

     change deriveConstants to use nm in a POSIX way (fixes #8781)

     The patch provided by Christian Maeder <[email protected]>

     Signed-off-by: Karel Gardas <[email protected]>
     Signed-off-by: Austin Seipp <[email protected]>
     (cherry picked from commit 045b28033a33a48d31951240a8cb35f2b78345dc)


---------------------------------------------------------------

e7563ec2e03740074903036bf129fc972b623c23
  utils/deriveConstants/DeriveConstants.hs |   30 ++++++++++--------------------
  1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/utils/deriveConstants/DeriveConstants.hs 
b/utils/deriveConstants/DeriveConstants.hs
index 10df61c..54ee6a1 100644
--- a/utils/deriveConstants/DeriveConstants.hs
+++ b/utils/deriveConstants/DeriveConstants.hs
@@ -638,7 +638,7 @@ getWanted verbose tmpdir gccProgram gccFlags nmProgram
               oFile = tmpdir </> "tmp.o"
           writeFile cFile cStuff
           execute verbose gccProgram (gccFlags ++ ["-c", cFile, "-o", oFile])
-         xs <- readProcess nmProgram [oFile] ""
+         xs <- readProcess nmProgram ["-P", oFile] ""
           let ls = lines xs
               ms = map parseNmLine ls
               m = Map.fromList $ catMaybes ms
@@ -707,27 +707,17 @@ getWanted verbose tmpdir gccProgram gccFlags nmProgram
            doWanted (ClosurePayloadMacro {}) = []
            doWanted (FieldTypeGcptrMacro {}) = []

-          -- parseNmLine parses nm output that looks like
-          -- "0000000b C derivedConstantMAX_Vanilla_REG"
+          -- parseNmLine parses "nm -P" output that looks like
+          -- "_derivedConstantMAX_Vanilla_REG C b 0" Mac OS X
+          -- "derivedConstantMAX_Vanilla_REG C 0000000b 0000000b" GNU
+          -- "derivedConstantMAX_Vanilla_REG D        1        b" Solaris
            -- and returns ("MAX_Vanilla_REG", 11)
-          parseNmLine xs0 = case break (' ' ==) xs0 of
-                            (x1, ' ' : xs1) ->
-                                case break (' ' ==) xs1 of
-                                (x2, ' ' : x3) ->
-                                    case readHex x1 of
-                                    [(size, "")] ->
-                                        case x2 of
-                                        "C" ->
-                                            let x3' = case x3 of
-                                                      '_' : rest -> rest
-                                                      _          -> x3
-                                            in case stripPrefix prefix x3' of
-                                               Just name ->
-                                                   Just (name, size)
-                                               _ -> Nothing
-                                        _ -> Nothing
-                                    _ -> Nothing
+          parseNmLine xs0 = case words xs0 of
+                            [x0, x1, x2, x3] -> case stripPrefix prefix $ 
dropWhile (== '_') x0 of
+                              Just name -> case readHex $ if x1 == "C" then x2 
else x3 of
+                                [(size, "")] -> Just (name, size)
                                  _ -> Nothing
+                              _ -> Nothing
                              _ -> Nothing

            -- If an Int value is larger than 2^28 or smaller


_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to