summaryrefslogtreecommitdiff
path: root/compiler/nativeGen/PprBase.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/nativeGen/PprBase.hs')
-rw-r--r--compiler/nativeGen/PprBase.hs51
1 files changed, 50 insertions, 1 deletions
diff --git a/compiler/nativeGen/PprBase.hs b/compiler/nativeGen/PprBase.hs
index 90a3b303f4..44877d6372 100644
--- a/compiler/nativeGen/PprBase.hs
+++ b/compiler/nativeGen/PprBase.hs
@@ -10,11 +10,18 @@ module PprBase (
castFloatToWord8Array,
castDoubleToWord8Array,
floatToBytes,
- doubleToBytes
+ doubleToBytes,
+ pprSectionHeader
)
where
+import CLabel
+import Cmm
+import DynFlags
+import Outputable
+import Platform
+
import qualified Data.Array.Unsafe as U ( castSTUArray )
import Data.Array.ST
@@ -70,3 +77,45 @@ doubleToBytes d
i7 <- readArray arr 7
return (map fromIntegral [i0,i1,i2,i3,i4,i5,i6,i7])
)
+
+-- ----------------------------------------------------------------------------
+-- Printing section headers.
+--
+-- If -split-section was specified, include the suffix label, otherwise just
+-- print the section type. For Darwin, where subsections-for-symbols are
+-- used instead, only print section type.
+
+pprSectionHeader :: Platform -> Section -> SDoc
+pprSectionHeader platform (Section t suffix) =
+ case platformOS platform of
+ OSDarwin -> pprDarwinSectionHeader t
+ _ -> pprGNUSectionHeader t suffix
+
+pprGNUSectionHeader :: SectionType -> CLabel -> SDoc
+pprGNUSectionHeader t suffix = sdocWithDynFlags $ \dflags ->
+ let splitSections = gopt Opt_SplitSections dflags
+ subsection | splitSections = text "." <> ppr suffix
+ | otherwise = text "" -- empty doc?
+ in text ".section " <> text header <> subsection
+ where
+ header = case t of
+ Text -> ".text"
+ Data -> ".data"
+ ReadOnlyData -> ".rodata"
+ RelocatableReadOnlyData -> ".data.rel.ro"
+ UninitialisedData -> ".bss"
+ ReadOnlyData16 -> ".rodata.cst16"
+ OtherSection _ ->
+ panic "PprBase.pprGNUSectionHeader: unknown section type"
+
+pprDarwinSectionHeader :: SectionType -> SDoc
+pprDarwinSectionHeader t =
+ text $ case t of
+ Text -> ".text"
+ Data -> ".data"
+ ReadOnlyData -> ".const"
+ RelocatableReadOnlyData -> ".const_data"
+ UninitialisedData -> ".data"
+ ReadOnlyData16 -> ".const"
+ OtherSection _ ->
+ panic "PprBase.pprDarwinSectionHeader: unknown section type"