summaryrefslogtreecommitdiff
path: root/rts/Adjustor.c
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2011-06-30 15:50:19 +0100
committerSimon Marlow <marlowsd@gmail.com>2011-07-01 09:01:48 +0100
commit2450eca2c0596eade8dce7d85c7e87bcc848d135 (patch)
tree328a15627690c04ab3aaee9e470bc4166892b9af /rts/Adjustor.c
parent566d1300059476334cf1f4a699dc14f3b98bac99 (diff)
downloadhaskell-2450eca2c0596eade8dce7d85c7e87bcc848d135.tar.gz
update freeHaskellFuncationPtr following changes to x86 adjustors
(fixes various ffi test failures on x86. This change was supposed to be part of 9f61598ce7b0cb3448e8f0c3d627c0ca47b7f55f, but somehow it got lost).
Diffstat (limited to 'rts/Adjustor.c')
-rw-r--r--rts/Adjustor.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/rts/Adjustor.c b/rts/Adjustor.c
index 0d5829368f..038c649578 100644
--- a/rts/Adjustor.c
+++ b/rts/Adjustor.c
@@ -1067,25 +1067,17 @@ TODO: Depending on how much allocation overhead stgMallocBytes uses for
void
freeHaskellFunctionPtr(void* ptr)
{
-#if defined(i386_HOST_ARCH) && !defined(darwin_HOST_OS)
- if ( *(unsigned char*)ptr != 0x68 &&
+#if defined(i386_HOST_ARCH)
+ if ( *(unsigned char*)ptr != 0xe8 &&
*(unsigned char*)ptr != 0x58 ) {
errorBelch("freeHaskellFunctionPtr: not for me, guv! %p\n", ptr);
return;
}
-
- /* Free the stable pointer first..*/
- if (*(unsigned char*)ptr == 0x68) { /* Aha, a ccall adjustor! */
- freeStablePtr(*((StgStablePtr*)((unsigned char*)ptr + 0x01)));
+ if (*(unsigned char*)ptr == 0xe8) { /* Aha, a ccall adjustor! */
+ freeStablePtr(((AdjustorStub*)ptr)->hptr);
} else {
freeStablePtr(*((StgStablePtr*)((unsigned char*)ptr + 0x02)));
}
-#elif defined(i386_HOST_ARCH) && defined(darwin_HOST_OS)
-if ( *(unsigned char*)ptr != 0xe8 ) {
- errorBelch("freeHaskellFunctionPtr: not for me, guv! %p\n", ptr);
- return;
- }
- freeStablePtr(((AdjustorStub*)ptr)->hptr);
#elif defined(x86_64_HOST_ARCH)
if ( *(StgWord16 *)ptr == 0x894d ) {
freeStablePtr(*(StgStablePtr*)((StgWord8*)ptr+0x20));