class RbBCC::SymbolCache

Public Class Methods

[](pid)
Alias for: cache
cache(pid) click to toggle source
# File lib/rbbcc/symbol_cache.rb, line 10
def cache(pid)
  pid = -1 if pid < 0 && pid != -1
  caches[pid] ||= SymbolCache.new(pid)
  caches[pid]
end
Also aliased as: []
caches() click to toggle source
# File lib/rbbcc/symbol_cache.rb, line 6
def caches
  @caches ||= {}
end
new(pid) click to toggle source
# File lib/rbbcc/symbol_cache.rb, line 22
def initialize(pid)
  @cache = Clib.bcc_symcache_new(pid, nil)
end
resolve_global(name) click to toggle source
# File lib/rbbcc/symbol_cache.rb, line 17
def resolve_global(name)
  self[-1].resolve_name(nil, name)
end

Public Instance Methods

resolve(addr, demangle) click to toggle source
# File lib/rbbcc/symbol_cache.rb, line 26
def resolve(addr, demangle)
  sym = Clib::BCCSymbol.malloc
  ret = if demangle
          Clib.bcc_symcache_resolve(@cache, addr, sym)
        else
          Clib.bcc_symcache_resolve_no_demangle(@cache, addr, sym)
        end
  if ret < 0
    return [nil, addr, nil]
  end

  if demangle
    name_res = Clib.__extract_char(sym.demangle_name)
    Clib.bcc_symbol_free_demangle_name(sym)
  else
    name_res = Clib.__extract_char(sym.name)
  end

  return [name_res, sym.offset, Clib.__extract_char(sym.module)]
end
resolve_name(_module, name) click to toggle source
# File lib/rbbcc/symbol_cache.rb, line 47
def resolve_name(_module, name)
  addr_p = Fiddle::Pointer.malloc(Fiddle::SIZEOF_UINTPTR_T)
  if Clib.bcc_symcache_resolve_name(@cache, _module, name, addr_p) < 0
    return false
  end
  return addr_p
end