2012-11-28 23:39:09 -05:00
|
|
|
# -*- coding: us-ascii -*-
|
2015-12-16 00:07:31 -05:00
|
|
|
# frozen_string_literal: false
|
2013-05-09 21:48:20 -04:00
|
|
|
require 'test/unit'
|
* probes.d: add DTrace probe declarations. [ruby-core:27448]
* array.c (empty_ary_alloc, ary_new): added array create DTrace probe.
* compile.c (rb_insns_name): allowing DTrace probes to access
instruction sequence name.
* Makefile.in: translate probes.d file to appropriate header file.
* common.mk: declare dependencies on the DTrace header.
* configure.in: add a test for existence of DTrace.
* eval.c (setup_exception): add a probe for when an exception is
raised.
* gc.c: Add DTrace probes for mark begin and end, and sweep begin and
end.
* hash.c (empty_hash_alloc): Add a probe for hash allocation.
* insns.def: Add probes for function entry and return.
* internal.h: function declaration for compile.c change.
* load.c (rb_f_load): add probes for `load` entry and exit, require
entry and exit, and wrapping search_required for load path search.
* object.c (rb_obj_alloc): added a probe for general object creation.
* parse.y (yycompile0): added a probe around parse and compile phase.
* string.c (empty_str_alloc, str_new): DTrace probes for string
allocation.
* test/dtrace/*: tests for DTrace probes.
* vm.c (vm_invoke_proc): add probes for function return on exception
raise, hash create, and instruction sequence execution.
* vm_core.h: add probe declarations for function entry and exit.
* vm_dump.c: add probes header file.
* vm_eval.c (vm_call0_cfunc, vm_call0_cfunc_with_frame): add probe on
function entry and return.
* vm_exec.c: expose instruction number to instruction name function.
* vm_insnshelper.c: add function entry and exit probes for cfunc
methods.
* vm_insnhelper.h: vm usage information is always collected, so
uncomment the functions.
12 19:14:50 2012 Akinori MUSHA <knu@iDaemons.org>
* configure.in (isinf, isnan): isinf() and isnan() are macros on
DragonFly which cannot be found by AC_REPLACE_FUNCS(). This
workaround enforces the fact that they exist on DragonFly.
12 15:59:38 2012 Shugo Maeda <shugo@ruby-lang.org>
* vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo),
vm_insnhelper.c (vm_search_method): revert r37616 because it's too
slow. [ruby-dev:46477]
* test/ruby/test_refinement.rb (test_inline_method_cache): skip
the test until the bug is fixed efficiently.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-12 16:52:12 -05:00
|
|
|
require 'tempfile'
|
|
|
|
|
2012-11-29 03:13:16 -05:00
|
|
|
if Process.euid == 0
|
|
|
|
ok = true
|
2013-05-09 21:48:20 -04:00
|
|
|
elsif (sudo = ENV["SUDO"]) and !sudo.empty? and (`#{sudo} echo ok` rescue false)
|
2012-11-29 03:13:16 -05:00
|
|
|
ok = true
|
|
|
|
else
|
|
|
|
ok = false
|
|
|
|
end
|
2018-06-05 17:19:50 -04:00
|
|
|
|
|
|
|
impl = :dtrace
|
|
|
|
|
|
|
|
# GNU/Linux distros with Systemtap support allows unprivileged users
|
|
|
|
# in the stapusr and statdev groups to work.
|
|
|
|
if RUBY_PLATFORM =~ /linux/
|
|
|
|
impl = :stap
|
|
|
|
begin
|
|
|
|
require 'etc'
|
2019-10-06 02:22:12 -04:00
|
|
|
ok = (%w[stapusr stapdev].map {|g|(Etc.getgrnam(g) || raise(ArgumentError)).gid} & Process.groups).size == 2
|
2018-06-05 17:19:50 -04:00
|
|
|
rescue LoadError, ArgumentError
|
|
|
|
end unless ok
|
|
|
|
end
|
|
|
|
|
2016-07-23 11:04:12 -04:00
|
|
|
if ok
|
|
|
|
case RUBY_PLATFORM
|
|
|
|
when /darwin/i
|
|
|
|
begin
|
|
|
|
require 'pty'
|
|
|
|
rescue LoadError
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2018-06-05 17:19:50 -04:00
|
|
|
|
|
|
|
# use miniruby to reduce the amount of trace data we don't care about
|
|
|
|
rubybin = "miniruby#{RbConfig::CONFIG["EXEEXT"]}"
|
|
|
|
rubybin = File.join(File.dirname(EnvUtil.rubybin), rubybin)
|
|
|
|
rubybin = EnvUtil.rubybin unless File.executable?(rubybin)
|
|
|
|
|
|
|
|
# make sure ruby was built with --enable-dtrace and we can run
|
|
|
|
# dtrace(1) or stap(1):
|
|
|
|
cmd = "#{rubybin} --disable=gems -eexit"
|
|
|
|
case impl
|
|
|
|
when :dtrace; cmd = %W(dtrace -l -n ruby$target:::gc-sweep-end -c #{cmd})
|
|
|
|
when :stap; cmd = %W(stap -l process.mark("gc__sweep__end") -c #{cmd})
|
|
|
|
else
|
|
|
|
warn "don't know how to check if built with #{impl} support"
|
|
|
|
cmd = false
|
|
|
|
end
|
2019-06-30 05:41:17 -04:00
|
|
|
|
|
|
|
NEEDED_ENVS = [RbConfig::CONFIG["LIBPATHENV"], "RUBY", "RUBYOPT"].compact
|
|
|
|
|
|
|
|
if cmd and ok
|
|
|
|
sudocmd = []
|
|
|
|
if sudo
|
|
|
|
sudocmd << sudo
|
|
|
|
NEEDED_ENVS.each {|name| val = ENV[name] and sudocmd << "#{name}=#{val}"}
|
|
|
|
end
|
|
|
|
ok = system(*sudocmd, *cmd, err: IO::NULL, out: IO::NULL)
|
|
|
|
end
|
2018-06-05 17:19:50 -04:00
|
|
|
|
* probes.d: add DTrace probe declarations. [ruby-core:27448]
* array.c (empty_ary_alloc, ary_new): added array create DTrace probe.
* compile.c (rb_insns_name): allowing DTrace probes to access
instruction sequence name.
* Makefile.in: translate probes.d file to appropriate header file.
* common.mk: declare dependencies on the DTrace header.
* configure.in: add a test for existence of DTrace.
* eval.c (setup_exception): add a probe for when an exception is
raised.
* gc.c: Add DTrace probes for mark begin and end, and sweep begin and
end.
* hash.c (empty_hash_alloc): Add a probe for hash allocation.
* insns.def: Add probes for function entry and return.
* internal.h: function declaration for compile.c change.
* load.c (rb_f_load): add probes for `load` entry and exit, require
entry and exit, and wrapping search_required for load path search.
* object.c (rb_obj_alloc): added a probe for general object creation.
* parse.y (yycompile0): added a probe around parse and compile phase.
* string.c (empty_str_alloc, str_new): DTrace probes for string
allocation.
* test/dtrace/*: tests for DTrace probes.
* vm.c (vm_invoke_proc): add probes for function return on exception
raise, hash create, and instruction sequence execution.
* vm_core.h: add probe declarations for function entry and exit.
* vm_dump.c: add probes header file.
* vm_eval.c (vm_call0_cfunc, vm_call0_cfunc_with_frame): add probe on
function entry and return.
* vm_exec.c: expose instruction number to instruction name function.
* vm_insnshelper.c: add function entry and exit probes for cfunc
methods.
* vm_insnhelper.h: vm usage information is always collected, so
uncomment the functions.
12 19:14:50 2012 Akinori MUSHA <knu@iDaemons.org>
* configure.in (isinf, isnan): isinf() and isnan() are macros on
DragonFly which cannot be found by AC_REPLACE_FUNCS(). This
workaround enforces the fact that they exist on DragonFly.
12 15:59:38 2012 Shugo Maeda <shugo@ruby-lang.org>
* vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo),
vm_insnhelper.c (vm_search_method): revert r37616 because it's too
slow. [ruby-dev:46477]
* test/ruby/test_refinement.rb (test_inline_method_cache): skip
the test until the bug is fixed efficiently.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-12 16:52:12 -05:00
|
|
|
module DTrace
|
2013-05-09 21:48:20 -04:00
|
|
|
class TestCase < Test::Unit::TestCase
|
2013-04-05 20:59:12 -04:00
|
|
|
INCLUDE = File.expand_path('..', File.dirname(__FILE__))
|
* probes.d: add DTrace probe declarations. [ruby-core:27448]
* array.c (empty_ary_alloc, ary_new): added array create DTrace probe.
* compile.c (rb_insns_name): allowing DTrace probes to access
instruction sequence name.
* Makefile.in: translate probes.d file to appropriate header file.
* common.mk: declare dependencies on the DTrace header.
* configure.in: add a test for existence of DTrace.
* eval.c (setup_exception): add a probe for when an exception is
raised.
* gc.c: Add DTrace probes for mark begin and end, and sweep begin and
end.
* hash.c (empty_hash_alloc): Add a probe for hash allocation.
* insns.def: Add probes for function entry and return.
* internal.h: function declaration for compile.c change.
* load.c (rb_f_load): add probes for `load` entry and exit, require
entry and exit, and wrapping search_required for load path search.
* object.c (rb_obj_alloc): added a probe for general object creation.
* parse.y (yycompile0): added a probe around parse and compile phase.
* string.c (empty_str_alloc, str_new): DTrace probes for string
allocation.
* test/dtrace/*: tests for DTrace probes.
* vm.c (vm_invoke_proc): add probes for function return on exception
raise, hash create, and instruction sequence execution.
* vm_core.h: add probe declarations for function entry and exit.
* vm_dump.c: add probes header file.
* vm_eval.c (vm_call0_cfunc, vm_call0_cfunc_with_frame): add probe on
function entry and return.
* vm_exec.c: expose instruction number to instruction name function.
* vm_insnshelper.c: add function entry and exit probes for cfunc
methods.
* vm_insnhelper.h: vm usage information is always collected, so
uncomment the functions.
12 19:14:50 2012 Akinori MUSHA <knu@iDaemons.org>
* configure.in (isinf, isnan): isinf() and isnan() are macros on
DragonFly which cannot be found by AC_REPLACE_FUNCS(). This
workaround enforces the fact that they exist on DragonFly.
12 15:59:38 2012 Shugo Maeda <shugo@ruby-lang.org>
* vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo),
vm_insnhelper.c (vm_search_method): revert r37616 because it's too
slow. [ruby-dev:46477]
* test/ruby/test_refinement.rb (test_inline_method_cache): skip
the test until the bug is fixed efficiently.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-12 16:52:12 -05:00
|
|
|
|
2016-07-23 10:59:25 -04:00
|
|
|
case RUBY_PLATFORM
|
|
|
|
when /solaris/i
|
|
|
|
# increase bufsize to 8m (default 4m on Solaris)
|
|
|
|
DTRACE_CMD = %w[dtrace -b 8m]
|
2016-07-23 11:04:12 -04:00
|
|
|
when /darwin/i
|
|
|
|
READ_PROBES = proc do |cmd|
|
2016-07-26 12:22:56 -04:00
|
|
|
lines = nil
|
|
|
|
PTY.spawn(*cmd) do |io, _, pid|
|
|
|
|
lines = io.readlines.each {|line| line.sub!(/\r$/, "")}
|
|
|
|
Process.wait(pid)
|
2016-07-23 11:04:12 -04:00
|
|
|
end
|
2016-07-26 12:22:56 -04:00
|
|
|
lines
|
2019-06-30 08:15:56 -04:00
|
|
|
end if defined?(PTY)
|
2016-07-23 10:59:25 -04:00
|
|
|
end
|
|
|
|
|
2018-06-05 17:19:50 -04:00
|
|
|
# only handles simple cases, use a Hash for d_program
|
|
|
|
# if there are more complex cases
|
|
|
|
def dtrace2systemtap(d_program)
|
|
|
|
translate = lambda do |str|
|
|
|
|
# dtrace starts args with '0', systemtap with '1' and prefixes '$'
|
|
|
|
str = str.gsub(/\barg(\d+)/) { "$arg#{$1.to_i + 1}" }
|
|
|
|
# simple function mappings:
|
|
|
|
str.gsub!(/\bcopyinstr\b/, 'user_string')
|
|
|
|
str.gsub!(/\bstrstr\b/, 'isinstr')
|
|
|
|
str
|
|
|
|
end
|
|
|
|
out = ''
|
|
|
|
cond = nil
|
|
|
|
d_program.split(/^/).each do |l|
|
|
|
|
case l
|
|
|
|
when /\bruby\$target:::([a-z-]+)/
|
|
|
|
name = $1.gsub(/-/, '__')
|
|
|
|
out << %Q{probe process.mark("#{name}")\n}
|
|
|
|
when %r{/(.+)/}
|
|
|
|
cond = translate.call($1)
|
|
|
|
when "{\n"
|
|
|
|
out << l
|
|
|
|
out << "if (#{cond}) {\n" if cond
|
|
|
|
when "}\n"
|
|
|
|
out << "}\n" if cond
|
|
|
|
out << l
|
|
|
|
else
|
|
|
|
out << translate.call(l)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
out
|
|
|
|
end
|
|
|
|
|
2016-07-23 10:59:25 -04:00
|
|
|
DTRACE_CMD ||= %w[dtrace]
|
|
|
|
|
2016-07-23 11:04:12 -04:00
|
|
|
READ_PROBES ||= proc do |cmd|
|
|
|
|
IO.popen(cmd, err: [:child, :out], &:readlines)
|
|
|
|
end
|
|
|
|
|
* probes.d: add DTrace probe declarations. [ruby-core:27448]
* array.c (empty_ary_alloc, ary_new): added array create DTrace probe.
* compile.c (rb_insns_name): allowing DTrace probes to access
instruction sequence name.
* Makefile.in: translate probes.d file to appropriate header file.
* common.mk: declare dependencies on the DTrace header.
* configure.in: add a test for existence of DTrace.
* eval.c (setup_exception): add a probe for when an exception is
raised.
* gc.c: Add DTrace probes for mark begin and end, and sweep begin and
end.
* hash.c (empty_hash_alloc): Add a probe for hash allocation.
* insns.def: Add probes for function entry and return.
* internal.h: function declaration for compile.c change.
* load.c (rb_f_load): add probes for `load` entry and exit, require
entry and exit, and wrapping search_required for load path search.
* object.c (rb_obj_alloc): added a probe for general object creation.
* parse.y (yycompile0): added a probe around parse and compile phase.
* string.c (empty_str_alloc, str_new): DTrace probes for string
allocation.
* test/dtrace/*: tests for DTrace probes.
* vm.c (vm_invoke_proc): add probes for function return on exception
raise, hash create, and instruction sequence execution.
* vm_core.h: add probe declarations for function entry and exit.
* vm_dump.c: add probes header file.
* vm_eval.c (vm_call0_cfunc, vm_call0_cfunc_with_frame): add probe on
function entry and return.
* vm_exec.c: expose instruction number to instruction name function.
* vm_insnshelper.c: add function entry and exit probes for cfunc
methods.
* vm_insnhelper.h: vm usage information is always collected, so
uncomment the functions.
12 19:14:50 2012 Akinori MUSHA <knu@iDaemons.org>
* configure.in (isinf, isnan): isinf() and isnan() are macros on
DragonFly which cannot be found by AC_REPLACE_FUNCS(). This
workaround enforces the fact that they exist on DragonFly.
12 15:59:38 2012 Shugo Maeda <shugo@ruby-lang.org>
* vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo),
vm_insnhelper.c (vm_search_method): revert r37616 because it's too
slow. [ruby-dev:46477]
* test/ruby/test_refinement.rb (test_inline_method_cache): skip
the test until the bug is fixed efficiently.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-12 16:52:12 -05:00
|
|
|
def trap_probe d_program, ruby_program
|
2018-06-05 17:19:50 -04:00
|
|
|
if Hash === d_program
|
|
|
|
d_program = d_program[IMPL] or
|
2022-01-11 07:17:53 -05:00
|
|
|
omit "#{d_program} not implemented for #{IMPL}"
|
2018-06-05 17:19:50 -04:00
|
|
|
elsif String === d_program && IMPL == :stap
|
|
|
|
d_program = dtrace2systemtap(d_program)
|
|
|
|
end
|
2013-05-09 21:48:20 -04:00
|
|
|
d = Tempfile.new(%w'probe .d')
|
* probes.d: add DTrace probe declarations. [ruby-core:27448]
* array.c (empty_ary_alloc, ary_new): added array create DTrace probe.
* compile.c (rb_insns_name): allowing DTrace probes to access
instruction sequence name.
* Makefile.in: translate probes.d file to appropriate header file.
* common.mk: declare dependencies on the DTrace header.
* configure.in: add a test for existence of DTrace.
* eval.c (setup_exception): add a probe for when an exception is
raised.
* gc.c: Add DTrace probes for mark begin and end, and sweep begin and
end.
* hash.c (empty_hash_alloc): Add a probe for hash allocation.
* insns.def: Add probes for function entry and return.
* internal.h: function declaration for compile.c change.
* load.c (rb_f_load): add probes for `load` entry and exit, require
entry and exit, and wrapping search_required for load path search.
* object.c (rb_obj_alloc): added a probe for general object creation.
* parse.y (yycompile0): added a probe around parse and compile phase.
* string.c (empty_str_alloc, str_new): DTrace probes for string
allocation.
* test/dtrace/*: tests for DTrace probes.
* vm.c (vm_invoke_proc): add probes for function return on exception
raise, hash create, and instruction sequence execution.
* vm_core.h: add probe declarations for function entry and exit.
* vm_dump.c: add probes header file.
* vm_eval.c (vm_call0_cfunc, vm_call0_cfunc_with_frame): add probe on
function entry and return.
* vm_exec.c: expose instruction number to instruction name function.
* vm_insnshelper.c: add function entry and exit probes for cfunc
methods.
* vm_insnhelper.h: vm usage information is always collected, so
uncomment the functions.
12 19:14:50 2012 Akinori MUSHA <knu@iDaemons.org>
* configure.in (isinf, isnan): isinf() and isnan() are macros on
DragonFly which cannot be found by AC_REPLACE_FUNCS(). This
workaround enforces the fact that they exist on DragonFly.
12 15:59:38 2012 Shugo Maeda <shugo@ruby-lang.org>
* vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo),
vm_insnhelper.c (vm_search_method): revert r37616 because it's too
slow. [ruby-dev:46477]
* test/ruby/test_refinement.rb (test_inline_method_cache): skip
the test until the bug is fixed efficiently.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-12 16:52:12 -05:00
|
|
|
d.write d_program
|
|
|
|
d.flush
|
|
|
|
|
2013-05-09 21:48:20 -04:00
|
|
|
rb = Tempfile.new(%w'probed .rb')
|
* probes.d: add DTrace probe declarations. [ruby-core:27448]
* array.c (empty_ary_alloc, ary_new): added array create DTrace probe.
* compile.c (rb_insns_name): allowing DTrace probes to access
instruction sequence name.
* Makefile.in: translate probes.d file to appropriate header file.
* common.mk: declare dependencies on the DTrace header.
* configure.in: add a test for existence of DTrace.
* eval.c (setup_exception): add a probe for when an exception is
raised.
* gc.c: Add DTrace probes for mark begin and end, and sweep begin and
end.
* hash.c (empty_hash_alloc): Add a probe for hash allocation.
* insns.def: Add probes for function entry and return.
* internal.h: function declaration for compile.c change.
* load.c (rb_f_load): add probes for `load` entry and exit, require
entry and exit, and wrapping search_required for load path search.
* object.c (rb_obj_alloc): added a probe for general object creation.
* parse.y (yycompile0): added a probe around parse and compile phase.
* string.c (empty_str_alloc, str_new): DTrace probes for string
allocation.
* test/dtrace/*: tests for DTrace probes.
* vm.c (vm_invoke_proc): add probes for function return on exception
raise, hash create, and instruction sequence execution.
* vm_core.h: add probe declarations for function entry and exit.
* vm_dump.c: add probes header file.
* vm_eval.c (vm_call0_cfunc, vm_call0_cfunc_with_frame): add probe on
function entry and return.
* vm_exec.c: expose instruction number to instruction name function.
* vm_insnshelper.c: add function entry and exit probes for cfunc
methods.
* vm_insnhelper.h: vm usage information is always collected, so
uncomment the functions.
12 19:14:50 2012 Akinori MUSHA <knu@iDaemons.org>
* configure.in (isinf, isnan): isinf() and isnan() are macros on
DragonFly which cannot be found by AC_REPLACE_FUNCS(). This
workaround enforces the fact that they exist on DragonFly.
12 15:59:38 2012 Shugo Maeda <shugo@ruby-lang.org>
* vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo),
vm_insnhelper.c (vm_search_method): revert r37616 because it's too
slow. [ruby-dev:46477]
* test/ruby/test_refinement.rb (test_inline_method_cache): skip
the test until the bug is fixed efficiently.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-12 16:52:12 -05:00
|
|
|
rb.write ruby_program
|
|
|
|
rb.flush
|
|
|
|
|
|
|
|
d_path = d.path
|
|
|
|
rb_path = rb.path
|
2018-06-05 17:19:31 -04:00
|
|
|
cmd = "#{RUBYBIN} --disable=gems -I#{INCLUDE} #{rb_path}"
|
2018-06-05 17:19:50 -04:00
|
|
|
if IMPL == :stap
|
|
|
|
cmd = %W(stap #{d_path} -c #{cmd})
|
|
|
|
else
|
|
|
|
cmd = [*DTRACE_CMD, "-q", "-s", d_path, "-c", cmd ]
|
|
|
|
end
|
2013-05-09 21:48:20 -04:00
|
|
|
if sudo = @@sudo
|
2019-06-30 05:41:17 -04:00
|
|
|
NEEDED_ENVS.each do |name|
|
|
|
|
if val = ENV[name]
|
2013-04-05 20:59:12 -04:00
|
|
|
cmd.unshift("#{name}=#{val}")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
cmd.unshift(sudo)
|
|
|
|
end
|
2016-07-23 11:04:12 -04:00
|
|
|
probes = READ_PROBES.(cmd)
|
* probes.d: add DTrace probe declarations. [ruby-core:27448]
* array.c (empty_ary_alloc, ary_new): added array create DTrace probe.
* compile.c (rb_insns_name): allowing DTrace probes to access
instruction sequence name.
* Makefile.in: translate probes.d file to appropriate header file.
* common.mk: declare dependencies on the DTrace header.
* configure.in: add a test for existence of DTrace.
* eval.c (setup_exception): add a probe for when an exception is
raised.
* gc.c: Add DTrace probes for mark begin and end, and sweep begin and
end.
* hash.c (empty_hash_alloc): Add a probe for hash allocation.
* insns.def: Add probes for function entry and return.
* internal.h: function declaration for compile.c change.
* load.c (rb_f_load): add probes for `load` entry and exit, require
entry and exit, and wrapping search_required for load path search.
* object.c (rb_obj_alloc): added a probe for general object creation.
* parse.y (yycompile0): added a probe around parse and compile phase.
* string.c (empty_str_alloc, str_new): DTrace probes for string
allocation.
* test/dtrace/*: tests for DTrace probes.
* vm.c (vm_invoke_proc): add probes for function return on exception
raise, hash create, and instruction sequence execution.
* vm_core.h: add probe declarations for function entry and exit.
* vm_dump.c: add probes header file.
* vm_eval.c (vm_call0_cfunc, vm_call0_cfunc_with_frame): add probe on
function entry and return.
* vm_exec.c: expose instruction number to instruction name function.
* vm_insnshelper.c: add function entry and exit probes for cfunc
methods.
* vm_insnhelper.h: vm usage information is always collected, so
uncomment the functions.
12 19:14:50 2012 Akinori MUSHA <knu@iDaemons.org>
* configure.in (isinf, isnan): isinf() and isnan() are macros on
DragonFly which cannot be found by AC_REPLACE_FUNCS(). This
workaround enforces the fact that they exist on DragonFly.
12 15:59:38 2012 Shugo Maeda <shugo@ruby-lang.org>
* vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo),
vm_insnhelper.c (vm_search_method): revert r37616 because it's too
slow. [ruby-dev:46477]
* test/ruby/test_refinement.rb (test_inline_method_cache): skip
the test until the bug is fixed efficiently.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-12 16:52:12 -05:00
|
|
|
d.close(true)
|
|
|
|
rb.close(true)
|
|
|
|
yield(d_path, rb_path, probes)
|
|
|
|
end
|
|
|
|
end
|
2012-11-29 03:13:16 -05:00
|
|
|
end if ok
|
2013-05-09 21:48:20 -04:00
|
|
|
|
|
|
|
if ok
|
|
|
|
DTrace::TestCase.class_variable_set(:@@sudo, sudo)
|
2018-06-05 17:19:50 -04:00
|
|
|
DTrace::TestCase.const_set(:IMPL, impl)
|
|
|
|
DTrace::TestCase.const_set(:RUBYBIN, rubybin)
|
2013-05-09 21:48:20 -04:00
|
|
|
end
|