Major rewrite of error handling to allow external/internal unwinding.

Make external unwinding the default on x64.
It's mandatory on WIN64 due to the abundance of callee-saved regs.
Allow piecewise internal frame unwinding and optional cleanup.
Store ERRMEM, ERRERR and ERRCPP early and copy down later.
Use FRAME_CP for lj_vm_resume.
Add lj_vm_unwind_*_eh variants as landing pads for external unwinder.
Use fastcall for lj_vm_unwind_*.
Can drop r12/r13 saves in POSIX/x64 interpreter now.
This commit is contained in:
Mike Pall
2010-01-02 17:42:11 +01:00
parent 8fc9430d06
commit 93ee10642e
6 changed files with 1149 additions and 1009 deletions

View File

@@ -81,7 +81,7 @@ enum {
#define CFRAME_OFS_ERRF (3*4)
#define CFRAME_OFS_NRES (2*4)
#define CFRAME_OFS_MULTRES (1*4)
#define CFRAME_SIZE (12*8)
#define CFRAME_SIZE (10*8)
#endif
#else
#error "Missing CFRAME_* definitions for this architecture"