From: sof Date: Thu, 13 Mar 1997 08:19:53 +0000 (+0000) Subject: [project @ 1997-03-13 08:19:53 by sof] X-Git-Tag: Approximately_1000_patches_recorded~822 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=a2de124447e93f0acdc132d72813a2321ea114d1;p=ghc-hetmet.git [project @ 1997-03-13 08:19:53 by sof] AIX mods --- diff --git a/ghc/includes/COptWraps.lh b/ghc/includes/COptWraps.lh index baf217b..5b6d2d9 100644 --- a/ghc/includes/COptWraps.lh +++ b/ghc/includes/COptWraps.lh @@ -588,8 +588,17 @@ gets whatever it's after. #define WRAPPER_SETUP(f,ignore1,ignore2) SaveAllStgContext(); +/* we have to make sure the STG registers are restored. +GCC tries to restore the value the registers had in +the beginning of the current call, which we don't want. +We defeat it by saving the registers in the stack again. :-( */ + #define WRAPPER_RETURN(x) \ - do {RestoreAllStgRegs(); if(x) JMP_(EnterNodeCode);} while(0); + do {RestoreAllStgRegs(); if(x) JMP_(EnterNodeCode);} while(0); \ + __asm__ volatile ( \ + "cal 1,136(1)\n" \ + "\tstm 13,-76(1)\n" \ + "\tstu 1,-136(1)"); #define SEPARATE_WRAPPER_RESTORE /* none */