* 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");
x86 architecture
-------------------------------------------------------------------------- */
-#ifdef i386_TARGET_ARCH
+#ifdef i386_HOST_ARCH
StgThreadReturnCode
StgRun(StgFunPtr f, StgRegTable *basereg) {
------------------------------------------------------------------------- */
-#ifdef x86_64_TARGET_ARCH
+#ifdef x86_64_HOST_ARCH
extern StgThreadReturnCode StgRun(StgFunPtr f, StgRegTable *basereg);
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) {
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)
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)
return ret;
}
-#endif /* hppa1_1_TARGET_ARCH */
+#endif /* hppa1_1_HOST_ARCH */
/* -----------------------------------------------------------------------------
PowerPC architecture
-------------------------------------------------------------------------- */
-#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"
-------------------------------------------------------------------------- */
-#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)
// 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"
"\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"
"\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
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