Disable saving the linker options in the binary on Solaris (#5382).
authorSimon Marlow <marlowsd@gmail.com>
Wed, 10 Aug 2011 09:01:44 +0000 (10:01 +0100)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 10 Aug 2011 09:01:44 +0000 (10:01 +0100)
Also refactor the check into one place.

compiler/main/DriverPipeline.hs

index fdb5ce3..ee002b2 100644 (file)
@@ -389,7 +389,7 @@ linkingNeeded dflags linkables pkg_deps = do
 -- previous binary was linked with "the same options".
 checkLinkInfo :: DynFlags -> [PackageId] -> FilePath -> IO Bool
 checkLinkInfo dflags pkg_deps exe_file
- | isWindowsTarget || isDarwinTarget
+ | not (platformSupportsSavingLinkOpts (platformOS (targetPlatform dflags)))
  -- ToDo: Windows and OS X do not use the ELF binary format, so
  -- readelf does not work there.  We need to find another way to do
  -- this.
@@ -404,6 +404,11 @@ checkLinkInfo dflags pkg_deps exe_file
    debugTraceMsg dflags 3 $ text ("Exe link info: " ++ show m_exe_link_info)
    return (Just link_info /= m_exe_link_info)
 
+platformSupportsSavingLinkOpts :: OS -> Bool
+platformSupportsSavingLinkOpts os
+  | os == OSSolaris2 = False -- see #5382
+  | otherwise        = osElfTarget os
+
 ghcLinkInfoSectionName :: String
 ghcLinkInfoSectionName = ".debug-ghc-link-info"
    -- if we use the ".debug" prefix, then strip will strip it by default
@@ -1441,9 +1446,9 @@ mkExtraObjToLinkIntoBinary dflags dep_packages = do
           Just opts -> text "char *ghc_rts_opts = " <> text (show opts) <> semi
 
     link_opts info
-      | isDarwinTarget  = empty
-      | isWindowsTarget = empty
-      | otherwise = hcat [
+     | not (platformSupportsSavingLinkOpts (platformOS (targetPlatform dflags)))
+     = empty
+     | otherwise = hcat [
           text "__asm__(\"\\t.section ", text ghcLinkInfoSectionName,
                                     text ",\\\"\\\",",
                                     text elfSectionNote,