
Jost, this is not good indeed, could you be so kind and let us know your nm --version? I guess mingw is using GNU binutils so I'm curious what old nm it is when it fails to implement POSIX output... Thanks! Karel On 03/23/14 05:51 PM, Jost Berthold wrote:
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, ghc-commits-request@haskell.org wrote:
Message: 6 Date: Sun, 23 Mar 2014 02:01:50 +0000 (UTC) From: git@git.haskell.org To: ghc-commits@haskell.org Subject: [commit: ghc] ghc-7.8: change deriveConstants to use nm in a POSIX way (fixes #8781) (e7563ec) Message-ID: <20140323020150.1DCE82406B@ghc.haskell.org> Content-Type: text/plain; charset=utf-8
Repository : ssh://git@git.haskell.org/ghc
On branch : ghc-7.8 Link : http://ghc.haskell.org/trac/ghc/changeset/e7563ec2e03740074903036bf129fc972b...
---------------------------------------------------------------
commit e7563ec2e03740074903036bf129fc972b623c23 Author: Karel Gardas
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
Signed-off-by: Karel Gardas
Signed-off-by: Austin Seipp (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 ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs