From: "tenderlovemaking (Aaron Patterson) via ruby-core" Date: 2025-02-15T18:27:52+00:00 Subject: [ruby-core:121069] [Ruby master Feature#21140] Add a method to get the address of certain JIT related functions Issue #21140 has been updated by tenderlovemaking (Aaron Patterson). nobu (Nobuyoshi Nakada) wrote in #note-2: > I think the functions belong to built-in classes can be exported simply, i.e., other than related to VM. > I want to manage that list least as possible. I understand. I think though, if YJIT uses some function, then I think we should make that function available for 3rd party JITs. Can we use YJIT's bindgen code to generate the list? Then we don't have to specifically maintain a separate list. I made a list of symbols that RJIT uses but are not available: ``` "rb_ary_entry_internal" "rb_ary_tmp_new_from_values" "rb_ary_unshift_m" "rb_ec_ary_new_from_values" "rb_ec_str_resurrect" "rb_ensure_iv_list_size" "rb_fix_aref" "rb_fix_div_fix" "rb_fix_mod_fix" "rb_fix_mul_fix" "rb_get_symbol_id" "rb_gvar_get" "rb_hash_new_with_size" "rb_hash_resurrect" "rb_obj_as_string_result" "rb_reg_new_ary" "rb_str_bytesize" "rb_str_concat_literals" "rb_str_eql_internal" "rb_str_getbyte" "rb_sym_to_proc" "rb_vm_bh_to_procval" "rb_vm_concat_array" "rb_vm_defined" "rb_vm_get_ev_const" "rb_vm_getclassvariable" "rb_vm_ic_hit_p" "rb_vm_opt_newarray_hash" "rb_vm_opt_newarray_max" "rb_vm_opt_newarray_min" "rb_vm_opt_newarray_pack" "rb_vm_set_ivar_id" "rb_vm_setclassvariable" "rb_vm_setinstancevariable" "rb_vm_splat_array" "rb_vm_throw" "rb_vm_yield_with_cfunc" ``` We could probably export many of these functions, but I guess there are a significant number of `rb_vm_*` functions. If we could reuse YJIT's bindgen code, that might make maintenance easier. ---------------------------------------- Feature #21140: Add a method to get the address of certain JIT related functions https://bugs.ruby-lang.org/issues/21140#change-111987 * Author: tenderlovemaking (Aaron Patterson) * Status: Open ---------------------------------------- Feature #21116 extracted RJIT as a gem. But RJIT accesses certain internal functions which it cannot access as a gem. For example it used the `rb_str_bytesize` function, but this symbol is not exported, so we cannot access it (even from a C extension). Instead of exporting these symbols, I would like to propose an API for getting access to their addresses in Ruby. For example ```ruby RubyVM::RJIT.address_of(:rb_str_bytesize) # => 123456 ``` I would like to limit the addresses to [this list](https://github.com/ruby/ruby/blob/f32d5071b7b01f258eb45cf533496d82d5c0f6a1/tool/rjit/bindgen.rb#L510-L578) which are the ones required by RJIT. -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/