[commit: ghc] master: deriveConstants: Verify sanity of nm (bf17fd0)
git at git.haskell.org
git at git.haskell.org
Sat Apr 16 16:20:36 UTC 2016
Repository : ssh://git@git.haskell.org/ghc
On branch : master
Link : http://ghc.haskell.org/trac/ghc/changeset/bf17fd0e5b5442a87f507b26e64a30c79732838a/ghc
>---------------------------------------------------------------
commit bf17fd0e5b5442a87f507b26e64a30c79732838a
Author: Herbert Valerio Riedel <hvr at gnu.org>
Date: Sat Apr 16 15:25:07 2016 +0200
deriveConstants: Verify sanity of nm
Add a sanity check ensuring that nm emits valid hexadecimal output, as
required by POSIX. See #11744 for motivation.
Reviewers: austin, bgamari
Subscribers: thomie
Differential Revision: https://phabricator.haskell.org/D2113
GHC Trac Issues: #11744
>---------------------------------------------------------------
bf17fd0e5b5442a87f507b26e64a30c79732838a
utils/deriveConstants/Main.hs | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/utils/deriveConstants/Main.hs b/utils/deriveConstants/Main.hs
index 6a88ac2..96da166 100644
--- a/utils/deriveConstants/Main.hs
+++ b/utils/deriveConstants/Main.hs
@@ -296,8 +296,12 @@ haskellise "" = ""
wanteds :: String -> Wanteds
wanteds os = concat
- [-- Closure header sizes.
- constantWord Both "STD_HDR_SIZE"
+ [-- Control group constant for integrity check; this
+ -- round-tripped constant is used for testing that
+ -- derivedConstant works as expected
+ constantWord Both "CONTROL_GROUP_CONST_291" "0x123"
+ -- Closure header sizes.
+ ,constantWord Both "STD_HDR_SIZE"
-- grrr.. PROFILING is on so we need to
-- subtract sizeofW(StgProfHeader)
"sizeofW(StgHeader) - sizeofW(StgProfHeader)"
@@ -682,6 +686,14 @@ getWanted verbose os tmpdir gccProgram gccFlags nmProgram mobjdumpProgram
m = Map.fromList $ case os of
"aix" -> parseAixObjdump ls
_ -> catMaybes $ map parseNmLine ls
+
+ case Map.lookup "CONTROL_GROUP_CONST_291" m of
+ Just 292 -> return () -- OK
+ Nothing -> die "CONTROL_GROUP_CONST_291 missing!"
+ Just 0x292 -> die $ "broken 'nm' detected, see https://ghc.haskell.org/ticket/11744.\n"
+ ++ "Workaround: You may want to pass '--with-nm=nm-classic' to 'configure'."
+ Just x -> die ("unexpected value round-tripped for CONTROL_GROUP_CONST_291: " ++ show x)
+
rs <- mapM (lookupResult m) (wanteds os)
return rs
where headers = ["#define IN_STG_CODE 0",
More information about the ghc-commits
mailing list