mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
add new instruction attribute called leaf
An instruction is leaf if it has no rb_funcall inside. In order to check this property, we introduce stack canary which is a random number collected at runtime. Stack top is always filled with this number and checked for stack smashing operations, when VM_CHECK_MODE. [GH-1947] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64677 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ecda2d23d5
commit
c2bfb4e93c
10 changed files with 279 additions and 1 deletions
|
@ -1901,6 +1901,9 @@ VALUE rb_ivar_lookup(VALUE obj, ID id, VALUE undef);
|
|||
void rb_autoload_str(VALUE mod, ID id, VALUE file);
|
||||
void rb_deprecate_constant(VALUE mod, const char *name);
|
||||
NORETURN(VALUE rb_mod_const_missing(VALUE,VALUE));
|
||||
rb_gvar_getter_t *rb_gvar_getter_function_of(const struct rb_global_entry *);
|
||||
rb_gvar_setter_t *rb_gvar_setter_function_of(const struct rb_global_entry *);
|
||||
bool rb_gvar_is_traced(const struct rb_global_entry *);
|
||||
|
||||
/* vm_insnhelper.h */
|
||||
rb_serial_t rb_next_class_serial(void);
|
||||
|
@ -1946,6 +1949,7 @@ VALUE rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
|
|||
/* vm_insnhelper.c */
|
||||
VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
|
||||
VALUE rb_eql_opt(VALUE obj1, VALUE obj2);
|
||||
void Init_vm_stack_canary(void);
|
||||
|
||||
/* vm_method.c */
|
||||
void Init_eval_method(void);
|
||||
|
@ -2099,6 +2103,9 @@ VALUE rb_imemo_new_debug(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VAL
|
|||
VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0);
|
||||
#endif
|
||||
|
||||
/* random.c */
|
||||
int fill_random_bytes(void *, size_t, int);
|
||||
|
||||
RUBY_SYMBOL_EXPORT_END
|
||||
|
||||
#define RUBY_DTRACE_CREATE_HOOK(name, arg) \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue