From: Simon Marlow Date: Mon, 3 Aug 2009 11:59:55 +0000 (+0000) Subject: x86_64 warning fixes X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=c97259cd34b45eb5c06e93e82042dcca784609a6;hp=c94dfcb8c149f7bc5e7b9313f63f762e91c94a1d;p=ghc-hetmet.git x86_64 warning fixes --- diff --git a/rts/Adjustor.c b/rts/Adjustor.c index 0f09743..aa7a809 100644 --- a/rts/Adjustor.c +++ b/rts/Adjustor.c @@ -509,6 +509,7 @@ createAdjustor(int cconv, StgStablePtr hptr, { int i = 0; char *c; + StgWord8 *adj_code; // determine whether we have 6 or more integer arguments, // and therefore need to flush one to the stack. @@ -519,34 +520,36 @@ createAdjustor(int cconv, StgStablePtr hptr, if (i < 6) { adjustor = allocateExec(0x30,&code); - - *(StgInt32 *)adjustor = 0x49c1894d; - *(StgInt32 *)(adjustor+0x4) = 0x8948c889; - *(StgInt32 *)(adjustor+0x8) = 0xf28948d1; - *(StgInt32 *)(adjustor+0xc) = 0x48fe8948; - *(StgInt32 *)(adjustor+0x10) = 0x000a3d8b; - *(StgInt32 *)(adjustor+0x14) = 0x25ff0000; - *(StgInt32 *)(adjustor+0x18) = 0x0000000c; - *(StgInt64 *)(adjustor+0x20) = (StgInt64)hptr; - *(StgInt64 *)(adjustor+0x28) = (StgInt64)wptr; + adj_code = (StgWord8*)adjustor; + + *(StgInt32 *)adj_code = 0x49c1894d; + *(StgInt32 *)(adj_code+0x4) = 0x8948c889; + *(StgInt32 *)(adj_code+0x8) = 0xf28948d1; + *(StgInt32 *)(adj_code+0xc) = 0x48fe8948; + *(StgInt32 *)(adj_code+0x10) = 0x000a3d8b; + *(StgInt32 *)(adj_code+0x14) = 0x25ff0000; + *(StgInt32 *)(adj_code+0x18) = 0x0000000c; + *(StgInt64 *)(adj_code+0x20) = (StgInt64)hptr; + *(StgInt64 *)(adj_code+0x28) = (StgInt64)wptr; } else { adjustor = allocateExec(0x40,&code); - - *(StgInt32 *)adjustor = 0x35ff5141; - *(StgInt32 *)(adjustor+0x4) = 0x00000020; - *(StgInt32 *)(adjustor+0x8) = 0x49c1894d; - *(StgInt32 *)(adjustor+0xc) = 0x8948c889; - *(StgInt32 *)(adjustor+0x10) = 0xf28948d1; - *(StgInt32 *)(adjustor+0x14) = 0x48fe8948; - *(StgInt32 *)(adjustor+0x18) = 0x00123d8b; - *(StgInt32 *)(adjustor+0x1c) = 0x25ff0000; - *(StgInt32 *)(adjustor+0x20) = 0x00000014; + adj_code = (StgWord8*)adjustor; + + *(StgInt32 *)adj_code = 0x35ff5141; + *(StgInt32 *)(adj_code+0x4) = 0x00000020; + *(StgInt32 *)(adj_code+0x8) = 0x49c1894d; + *(StgInt32 *)(adj_code+0xc) = 0x8948c889; + *(StgInt32 *)(adj_code+0x10) = 0xf28948d1; + *(StgInt32 *)(adj_code+0x14) = 0x48fe8948; + *(StgInt32 *)(adj_code+0x18) = 0x00123d8b; + *(StgInt32 *)(adj_code+0x1c) = 0x25ff0000; + *(StgInt32 *)(adj_code+0x20) = 0x00000014; - *(StgInt64 *)(adjustor+0x28) = (StgInt64)obscure_ccall_ret_code; - *(StgInt64 *)(adjustor+0x30) = (StgInt64)hptr; - *(StgInt64 *)(adjustor+0x38) = (StgInt64)wptr; + *(StgInt64 *)(adj_code+0x28) = (StgInt64)obscure_ccall_ret_code; + *(StgInt64 *)(adj_code+0x30) = (StgInt64)hptr; + *(StgInt64 *)(adj_code+0x38) = (StgInt64)wptr; } } #elif defined(sparc_HOST_ARCH) @@ -1121,9 +1124,9 @@ if ( *(unsigned char*)ptr != 0xe8 ) { freeStablePtr(((AdjustorStub*)ptr)->hptr); #elif defined(x86_64_HOST_ARCH) if ( *(StgWord16 *)ptr == 0x894d ) { - freeStablePtr(*(StgStablePtr*)(ptr+0x20)); + freeStablePtr(*(StgStablePtr*)((StgWord8*)ptr+0x20)); } else if ( *(StgWord16 *)ptr == 0x5141 ) { - freeStablePtr(*(StgStablePtr*)(ptr+0x30)); + freeStablePtr(*(StgStablePtr*)((StgWord8*)ptr+0x30)); } else { errorBelch("freeHaskellFunctionPtr: not for me, guv! %p\n", ptr); return; diff --git a/rts/Linker.c b/rts/Linker.c index 7db88cb..c3944fe 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -1292,7 +1292,7 @@ mmap_again: #if defined(x86_64_HOST_ARCH) if (mmap_32bit_base != 0) { if (result == map_addr) { - mmap_32bit_base = map_addr + size; + mmap_32bit_base = (StgWord8*)map_addr + size; } else { if ((W_)result > 0x80000000) { // oops, we were given memory over 2Gb @@ -1310,7 +1310,7 @@ mmap_again: // hmm, we were given memory somewhere else, but it's // still under 2Gb so we can use it. Next time, ask // for memory right after the place we just got some - mmap_32bit_base = (void*)result + size; + mmap_32bit_base = (StgWord8*)result + size; } } } else { diff --git a/rts/ghc.mk b/rts/ghc.mk index 4bb4118..e0ff690 100644 --- a/rts/ghc.mk +++ b/rts/ghc.mk @@ -251,6 +251,9 @@ sm/Storage_CC_OPTS += -Wno-strict-prototypes # inlining warnings happen in Compact sm/Compact_CC_OPTS += -Wno-inline +# emits warnings about call-clobbered registers on x86_64 +StgCRun_CC_OPTS += -w + RetainerProfile_CC_OPTS += -w RetainerSet_CC_OPTS += -Wno-format # On Windows: