[project @ 2005-06-13 00:15:58 by wolfgang]
[ghc-hetmet.git] / ghc / driver / mangler / ghc-asm.lprl
index ec12d79..b95cad8 100644 (file)
@@ -332,7 +332,7 @@ sub init_TARGET_STUFF {
     $T_DOT_WORD            = '\.(long|short|byte|fill|space)';
     $T_DOT_GLOBAL   = '\.globl';
     $T_HDR_toc      = "\.toc\n";
-    $T_HDR_literal  = "\t\.const\n\t\.align 2\n";
+    $T_HDR_literal  = "\t\.const\n\t\.align 4\n"; # align for SSE
     $T_HDR_misc            = "\t\.text\n\t\.align 2\n";
     $T_HDR_data            = "\t\.data\n\t\.align 2\n";
     $T_HDR_rodata   = "\t\.const\n\t\.align 2\n";
@@ -1532,6 +1532,16 @@ sub print_doctored {
 
     # fix _all_ non-local jumps:
 
+    if ( $TargetPlatform =~ /^.*-apple-darwin.*/ ) {
+        # On Darwin, we've got local-looking jumps that are
+        # actually global (i.e. jumps to Lfoo$stub or via
+        # Lfoo$non_lazy_ptr), so we fix those first.
+        # In fact, we just fix everything that contains a dollar
+        # because false positives don't hurt here.
+
+        s/^(\tjmp\s+\*?L.*\$.*\n)/$exit_patch$1/g;
+    }
+
     s/^\tjmp\s+\*${T_X86_PRE_LLBL_PAT}/\tJMP___SL/go;
     s/^\tjmp\s+${T_X86_PRE_LLBL_PAT}/\tJMP___L/go;