fix for gcc 4.1.x
authorSimon Marlow <simonmar@microsoft.com>
Wed, 22 Mar 2006 10:17:46 +0000 (10:17 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Wed, 22 Mar 2006 10:17:46 +0000 (10:17 +0000)
We need to use GNUC3_ATTRIBUTE(used) to force gcc to keep the
definition of StgRunIsImplementedInAssembler() around.  In some cases
we had already made this function external rather than static to get
around the problem, but GNUC3_ATTRIBUTE(used) is a better fix.

ghc/rts/StgCRun.c

index b1e2724..29d4efe 100644 (file)
@@ -203,8 +203,8 @@ StgRun(StgFunPtr f, StgRegTable *basereg) {
 
 extern StgRegTable * StgRun(StgFunPtr f, StgRegTable *basereg);
 
 
 extern StgRegTable * StgRun(StgFunPtr f, StgRegTable *basereg);
 
-void StgRunIsImplementedInAssembler(void);
-void StgRunIsImplementedInAssembler(void)
+static void GNUC3_ATTRIBUTE(used)
+StgRunIsImplementedInAssembler(void)
 {
     __asm__ volatile (
        /*
 {
     __asm__ volatile (
        /*
@@ -591,7 +591,8 @@ StgRun(StgFunPtr f, StgRegTable *basereg)
 extern StgRegTable * StgRun(StgFunPtr f, StgRegTable *basereg);
 
 #ifdef darwin_HOST_OS
 extern StgRegTable * StgRun(StgFunPtr f, StgRegTable *basereg);
 
 #ifdef darwin_HOST_OS
-void StgRunIsImplementedInAssembler(void)
+static void GNUC3_ATTRIBUTE(used)
+StgRunIsImplementedInAssembler(void)
 {
 #if HAVE_SUBSECTIONS_VIA_SYMBOLS
             // if the toolchain supports deadstripping, we have to
 {
 #if HAVE_SUBSECTIONS_VIA_SYMBOLS
             // if the toolchain supports deadstripping, we have to
@@ -629,7 +630,8 @@ void StgRunIsImplementedInAssembler(void)
 // *) The Link Register is saved to a different offset in the caller's stack frame
 //    (Linux: 4(r1), Darwin 8(r1))
 
 // *) The Link Register is saved to a different offset in the caller's stack frame
 //    (Linux: 4(r1), Darwin 8(r1))
 
-static void StgRunIsImplementedInAssembler(void)
+static void GNUC3_ATTRIBUTE(used)
+StgRunIsImplementedInAssembler(void)
 {
        __asm__ volatile (
                "\t.globl StgRun\n"
 {
        __asm__ volatile (
                "\t.globl StgRun\n"
@@ -708,7 +710,8 @@ static void StgRunIsImplementedInAssembler(void)
 #ifdef linux_HOST_OS
 extern StgRegTable * StgRun(StgFunPtr f, StgRegTable *basereg);
 
 #ifdef linux_HOST_OS
 extern StgRegTable * StgRun(StgFunPtr f, StgRegTable *basereg);
 
-static void StgRunIsImplementedInAssembler(void)
+static void GNUC3_ATTRIBUTE(used)
+StgRunIsImplementedInAssembler(void)
 {
         // r0 volatile
        // r1 stack pointer
 {
         // r0 volatile
        // r1 stack pointer
@@ -858,7 +861,8 @@ static void StgRunIsImplementedInAssembler(void)
 #define LOCALS 31
 #endif
 
 #define LOCALS 31
 #endif
 
-static void StgRunIsImplementedInAssembler(void)
+static void GNUC3_ATTRIBUTE(used)
+StgRunIsImplementedInAssembler(void)
 {
     __asm__ volatile(
                ".global StgRun\n"
 {
     __asm__ volatile(
                ".global StgRun\n"