[project @ 2005-03-02 11:06:58 by simonmar]
[ghc-hetmet.git] / ghc / rts / StgCRun.c
index 8bb6f08..cf210d2 100644 (file)
@@ -50,7 +50,7 @@
  * in libc.a clobbers $s6.
  */
 #include "ghcconfig.h"
-#ifdef alpha_TARGET_ARCH
+#ifdef alpha_HOST_ARCH
 #define alpha_EXTRA_CAREFUL
 register long   fake_ra __asm__("$26");
 register long   fake_gp __asm__("$29");
@@ -112,7 +112,7 @@ StgFunPtr StgReturn(void)
    x86 architecture
    -------------------------------------------------------------------------- */
 
-#ifdef i386_TARGET_ARCH
+#ifdef i386_HOST_ARCH
 
 StgThreadReturnCode
 StgRun(StgFunPtr f, StgRegTable *basereg) {
@@ -175,7 +175,7 @@ StgRun(StgFunPtr f, StgRegTable *basereg) {
 
    ------------------------------------------------------------------------- */
 
-#ifdef x86_64_TARGET_ARCH
+#ifdef x86_64_HOST_ARCH
 
 extern StgThreadReturnCode StgRun(StgFunPtr f, StgRegTable *basereg);
 
@@ -261,7 +261,7 @@ static void StgRunIsImplementedInAssembler(void)
    Updated info (GHC 4.08.2): not saving %i7 any more (see below).
    -------------------------------------------------------------------------- */
 
-#ifdef sparc_TARGET_ARCH
+#ifdef sparc_HOST_ARCH
 
 StgThreadReturnCode
 StgRun(StgFunPtr f, StgRegTable *basereg) {
@@ -329,7 +329,7 @@ StgRun(StgFunPtr f, StgRegTable *basereg) {
       tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/V51_PDF/ARH9MBTE.PDF
    -------------------------------------------------------------------------- */
 
-#ifdef alpha_TARGET_ARCH
+#ifdef alpha_HOST_ARCH
 
 StgThreadReturnCode
 StgRun(StgFunPtr f, StgRegTable *basereg)
@@ -425,13 +425,13 @@ StgRun(StgFunPtr f, StgRegTable *basereg)
     return ret;
 }
 
-#endif /* alpha_TARGET_ARCH */
+#endif /* alpha_HOST_ARCH */
 
 /* -----------------------------------------------------------------------------
    HP-PA architecture
    -------------------------------------------------------------------------- */
 
-#ifdef hppa1_1_TARGET_ARCH
+#ifdef hppa1_1_HOST_ARCH
 
 StgThreadReturnCode
 StgRun(StgFunPtr f, StgRegTable *basereg)
@@ -518,7 +518,7 @@ StgRun(StgFunPtr f, StgRegTable *basereg)
     return ret;
 }
 
-#endif /* hppa1_1_TARGET_ARCH */
+#endif /* hppa1_1_HOST_ARCH */
 
 /* -----------------------------------------------------------------------------
    PowerPC architecture
@@ -527,13 +527,18 @@ StgRun(StgFunPtr f, StgRegTable *basereg)
    
    -------------------------------------------------------------------------- */
 
-#ifdef powerpc_TARGET_ARCH
+#ifdef powerpc_HOST_ARCH
 
 extern StgThreadReturnCode StgRun(StgFunPtr f, StgRegTable *basereg);
 
-#ifdef darwin_TARGET_OS
+#ifdef darwin_HOST_OS
 static void StgRunIsImplementedInAssembler(void)
 {
+#if HAVE_SUBSECTIONS_VIA_SYMBOLS
+            // if the toolchain supports deadstripping, we have to
+            // prevent it here (it tends to get confused here).
+        __asm__ volatile (".no_dead_strip _StgRunIsImplementedInAssembler");
+#endif
        __asm__ volatile (
                "\n.globl _StgRun\n"
                "_StgRun:\n"
@@ -639,9 +644,9 @@ static void StgRunIsImplementedInAssembler(void)
    
    -------------------------------------------------------------------------- */
 
-#ifdef powerpc64_TARGET_ARCH
+#ifdef powerpc64_HOST_ARCH
 
-#ifdef linux_TARGET_OS
+#ifdef linux_HOST_OS
 extern StgThreadReturnCode StgRun(StgFunPtr f, StgRegTable *basereg);
 
 static void StgRunIsImplementedInAssembler(void)
@@ -654,9 +659,20 @@ static void StgRunIsImplementedInAssembler(void)
        // r13 thread local state (never modified, don't need to save)
        // r14-r31 callee-save
        __asm__ volatile (
-               "\t.globl StgRun\n"
-               "\t.type StgRun,@function\n"
+               ".section \".opd\",\"aw\"\n"
+               ".align 3\n"
+               ".globl StgRun\n"
                "StgRun:\n"
+                       "\t.quad\t.StgRun,.TOC.@tocbase,0\n"
+                       "\t.size StgRun,24\n"
+               ".globl StgReturn\n"
+               "StgReturn:\n"
+                       "\t.quad\t.StgReturn,.TOC.@tocbase,0\n"
+                       "\t.size StgReturn,24\n"
+               ".previous\n"
+               ".globl .StgRun\n"
+               ".type .StgRun,@function\n"
+               ".StgRun:\n"
                        "\tmflr 0\n"
                        "\tmr 5, 1\n"
                        "\tstd 0, 16(1)\n"
@@ -703,9 +719,9 @@ static void StgRunIsImplementedInAssembler(void)
                        "\tld 3, 0(3)\n"
                        "\tmtctr 3\n"
                        "\tbctr\n"
-               ".globl StgReturn\n"
-               "\t.type StgReturn,@function\n"
-               "StgReturn:\n"
+               ".globl .StgReturn\n"
+               ".type .StgReturn,@function\n"
+               ".StgReturn:\n"
                        "\tmr 3,14\n"
                        "\tla 5, %0(1)\n" // load address == addi r5, r1, %0
                        "\tld 2, -296(5)\n"
@@ -751,7 +767,7 @@ static void StgRunIsImplementedInAssembler(void)
                        "\tblr\n"
        : : "i"(RESERVED_C_STACK_BYTES+304 /*stack frame size*/));
 }
-#else // linux_TARGET_OS
+#else // linux_HOST_OS
 #error Only linux support for power64 right now.
 #endif
 
@@ -770,7 +786,7 @@ static void StgRunIsImplementedInAssembler(void)
            loc31: saved gp (gcc 3.3 uses this slot)
    -------------------------------------------------------------------------- */
 
-#ifdef ia64_TARGET_ARCH
+#ifdef ia64_HOST_ARCH
 
 /* the memory stack is rarely used, so 16K is excessive */
 #undef RESERVED_C_STACK_BYTES