diff options
author | Maxime Dénès <mail@maximedenes.fr> | 2016-10-19 14:48:14 +0200 |
---|---|---|
committer | Maxime Dénès <mail@maximedenes.fr> | 2016-10-24 18:04:26 +0200 |
commit | 897ce077f11940adce406a20ad7d5c128e90cc28 (patch) | |
tree | db359323a84ed17d180e01ffb6af67885a3ecbfc /kernel/cbytecodes.mli | |
parent | 1d769e02b3baba54246c942fe116abaf850892db (diff) |
Fix #5127 Memory corruption with the VM
The bytecode interpreter ensures that the stack space available at some
points is above a static threshold. However, arbitrary large stack space
can be needed between two check points, leading to segmentation faults
in some cases.
We track the use of stack space at compilation time and add
an instruction to ensure greater stack capacity when required. This is
inspired from OCaml's PR#339 and PR#7168.
Patch written with Benjamin Grégoire.
Diffstat (limited to 'kernel/cbytecodes.mli')
-rw-r--r-- | kernel/cbytecodes.mli | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/cbytecodes.mli b/kernel/cbytecodes.mli index 6fa0841af..5a854e717 100644 --- a/kernel/cbytecodes.mli +++ b/kernel/cbytecodes.mli @@ -39,7 +39,7 @@ val pp_struct_const : structured_constant -> Pp.std_ppcmds type reloc_table = (tag * int) array type annot_switch = - {ci : case_info; rtbl : reloc_table; tailcall : bool} + {ci : case_info; rtbl : reloc_table; tailcall : bool; max_stack_size : int} module Label : sig @@ -84,6 +84,7 @@ type instruction = | Ksequence of bytecodes * bytecodes | Kproj of int * Constant.t (** index of the projected argument, name of projection *) + | Kensurestackcapacity of int (** spiwack: instructions concerning integers *) | Kbranch of Label.t (** jump to label, is it needed ? *) |