disable .type directives on Windows; they confuse mingw's assembler
[ghc-hetmet.git] / compiler / nativeGen / PprMach.hs
index 446495a..ba8a5d9 100644 (file)
@@ -646,9 +646,9 @@ pprSectionHeader RelocatableReadOnlyData
         IF_ARCH_alpha(SLIT("\t.data\n\t.align 3")
        ,IF_ARCH_sparc(SLIT(".data\n\t.align 8") {-<8 will break double constants -}
        ,IF_ARCH_i386(IF_OS_darwin(SLIT(".const_data\n.align 2"),
-                                   SLIT(".section .rodata\n\t.align 4"))
+                                   SLIT(".section .data\n\t.align 4"))
        ,IF_ARCH_x86_64(IF_OS_darwin(SLIT(".const_data\n.align 3"),
-                                     SLIT(".section .rodata\n\t.align 8"))
+                                     SLIT(".section .data\n\t.align 8"))
         ,IF_ARCH_powerpc(IF_OS_darwin(SLIT(".const_data\n.align 2"),
                                       SLIT(".data\n\t.align 2"))
        ,)))))
@@ -692,8 +692,18 @@ pprGloblDecl lbl
                                    SLIT(".globl ")) <>
                pprCLabel_asm lbl
 
+pprTypeAndSizeDecl :: CLabel -> Doc
+pprTypeAndSizeDecl lbl
+#if mingw32_TARGET_OS
+  = empty
+#else
+  | not (externallyVisibleCLabel lbl) = empty
+  | otherwise = ptext SLIT(".type ") <>
+               pprCLabel_asm lbl <> ptext SLIT(", @object")
+#endif
+
 pprLabel :: CLabel -> Doc
-pprLabel lbl = pprGloblDecl lbl $$ (pprCLabel_asm lbl <> char ':')
+pprLabel lbl = pprGloblDecl lbl $$ pprTypeAndSizeDecl lbl $$ (pprCLabel_asm lbl <> char ':')
 
 
 pprASCII str
@@ -770,7 +780,6 @@ pprDataItem lit
           | otherwise =
                [ptext SLIT("\t.quad\t") <> pprImm imm]
           where
-               isRelativeReloc (CmmLabelOff _ _)       = True
                isRelativeReloc (CmmLabelDiffOff _ _ _) = True
                isRelativeReloc _ = False
 #endif