diff options
author | Sverker Eriksson <[email protected]> | 2011-12-06 11:33:49 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2011-12-06 11:33:49 +0100 |
commit | 823a2eda6a6f3d5b8250a448a180317b7d5ab329 (patch) | |
tree | 1478e0d11f0cee9a1caad2895ca9bcf8447520bb /erts/emulator/hipe | |
parent | 026a7c04fdf7add071ee61b1ac24a5ebbcbb73db (diff) | |
parent | f04edcbd8bd692a953164f143fa7c2b496525394 (diff) | |
download | otp-823a2eda6a6f3d5b8250a448a180317b7d5ab329.tar.gz otp-823a2eda6a6f3d5b8250a448a180317b7d5ab329.tar.bz2 otp-823a2eda6a6f3d5b8250a448a180317b7d5ab329.zip |
Merge branch 'sverk/ppc-hibernate-fix'
* sverk/ppc-hibernate-fix:
erts: Fix hipe bug in hibernate on PowerPC
Diffstat (limited to 'erts/emulator/hipe')
-rw-r--r-- | erts/emulator/hipe/hipe_mode_switch.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/erts/emulator/hipe/hipe_mode_switch.c b/erts/emulator/hipe/hipe_mode_switch.c index 4d75883fc5..6a3ce5608f 100644 --- a/erts/emulator/hipe/hipe_mode_switch.c +++ b/erts/emulator/hipe/hipe_mode_switch.c @@ -337,14 +337,22 @@ Process *hipe_mode_switch(Process *p, unsigned cmd, Eterm reg[]) * stack: to this end hipe_${ARCH}_glue.S stores the BIF's * arity in p->hipe.narity. * - * If the BIF emptied the stack (typically hibernate), p->hipe.nsp is - * NULL and there is no need to get rid of stacked parameters. + * If the BIF emptied the stack (typically hibernate), p->hipe.nstack + * is NULL and there is no need to get rid of stacked parameters. */ unsigned int i, is_recursive = 0; - if (p->hipe.nsp != NULL) { + if (p->hipe.nstack != NULL) { + ASSERT(p->hipe.nsp != NULL); is_recursive = hipe_trap_from_native_is_recursive(p); } + else { + /* Some architectures (risc) need this re-reset of nsp as the + * BIF wrapper do not detect stack change and causes an obsolete + * stack pointer to be saved in p->hipe.nsp before return to us. + */ + p->hipe.nsp = NULL; + } /* Schedule next process if current process was hibernated or is waiting for messages */ |