Use objdump instead of nm to derive constants on OpenBSD
authorAustin Seipp <austin@well-typed.com>
Tue, 21 Oct 2014 19:58:21 +0000 (14:58 -0500)
committerAustin Seipp <austin@well-typed.com>
Tue, 21 Oct 2014 19:58:21 +0000 (14:58 -0500)
Summary: OpenBSD's nm doesn't support the -P option and there appears to be no other way to get the desired information from it.

Reviewers: kgardas, #ghc, austin

Reviewed By: kgardas, #ghc, austin

Subscribers: austin, ggreif

Projects: #ghc

Differential Revision: https://phabricator.haskell.org/D332

GHC Trac Issues: #9549

utils/deriveConstants/DeriveConstants.hs

index 9bf2160..72605d7 100644 (file)
@@ -643,7 +643,10 @@ getWanted verbose tmpdir gccProgram gccFlags nmProgram
              oFile = tmpdir </> "tmp.o"
          writeFile cFile cStuff
          execute verbose gccProgram (gccFlags ++ ["-c", cFile, "-o", oFile])
-         xs <- readProcess nmProgram ["-P", oFile] ""
+         xs <- case os of
+                 "openbsd" -> readProcess "/usr/bin/objdump" ["--syms", oFile] ""
+                 _         -> readProcess nmProgram ["-P", oFile] ""
+
          let ls = lines xs
              ms = map parseNmLine ls
              m = Map.fromList $ catMaybes ms
@@ -723,6 +726,7 @@ getWanted verbose tmpdir gccProgram gccFlags nmProgram
                 ('_' : n) : "C" : s : _ -> mkP n s
                 n : "C" : s : _ -> mkP n s
                 [n, "D", _, s] -> mkP n s
+                [s, "O", "*COM*", _, n] -> mkP n s
                 _ -> Nothing
               where mkP r s = case (stripPrefix prefix r, readHex s) of
                         (Just name, [(size, "")]) -> Just (name, size)