class RubyMemcheck::Frame

def binary_init_func?

def binary_init_func?
  return false unless in_binary?
  binary_name = File.basename(obj, ".*")
  fn == "Init_#{binary_name}"
end

def in_binary?

def in_binary?
  return false unless obj
  loaded_binaries.include?(obj)
end

def in_ruby?

def in_ruby?
  return false unless obj
  obj == configuration.ruby ||
    # Hack to fix Ruby built with --enabled-shared
    File.basename(obj) == "libruby.so.#{RUBY_VERSION}"
end

def initialize(configuration, loaded_binaries, frame_xml)

def initialize(configuration, loaded_binaries, frame_xml)
  @configuration = configuration
  @loaded_binaries = loaded_binaries
  @fn = frame_xml.at_xpath("fn")&.content
  @obj = frame_xml.at_xpath("obj")&.content
  # file and line may not be available
  @file = frame_xml.at_xpath("file")&.content
  @line = frame_xml.at_xpath("line")&.content
end

def to_s

def to_s
  if file
    "#{fn} (#{file}:#{line})"
  elsif fn
    "#{fn} (at #{obj})"
  else
    "<unknown stack frame>"
  end
end