Module: JITBuffer::MMAP

Includes:
Fiddle
Defined in:
ext/jit_buffer/jit_buffer.c,
lib/jit_buffer.rb

Constant Summary collapse

PROT_READ =
INT2NUM(PROT_READ)
PROT_WRITE =
INT2NUM(PROT_WRITE)
PROT_EXEC =
INT2NUM(PROT_EXEC)
VM_PROT_COPY =
INT2NUM(VM_PROT_COPY)
VM_PROT_READ =
INT2NUM(VM_PROT_READ)
VM_PROT_EXECUTE =
INT2NUM(VM_PROT_EXECUTE)
MAP_PRIVATE =
INT2NUM(MAP_PRIVATE)
MAP_ANON =
INT2NUM(MAP_ANON)
MAP_JIT =
INT2NUM(MAP_JIT)

Class Method Summary collapse

Class Method Details

.make_function(name, args, ret) ⇒ Object



26
27
28
29
30
# File 'lib/jit_buffer.rb', line 26

def self.make_function name, args, ret
  ptr = Handle::DEFAULT[name]
  func = Function.new ptr, args, ret, name: name
  define_singleton_method name, &func.to_proc
end

.mmap_buffer(size) ⇒ Object



45
46
47
48
49
# File 'lib/jit_buffer.rb', line 45

def self.mmap_buffer size
  ptr = mmap 0, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON | MAP_JIT, -1, 0
  ptr.size = size
  ptr
end

.pthread_jit_write_protect_np(v) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
# File 'ext/jit_buffer/jit_buffer.c', line 12

static VALUE
rb_pthread_jit_write_protect_np(VALUE mod, VALUE v)
{
    if (RTEST(v)) {
        pthread_jit_write_protect_np(1);
    }
    else {
        pthread_jit_write_protect_np(0);
    }

    return Qnil;
}

.sys_icache_invalidate(addr, len) ⇒ Object



27
28
29
30
31
32
33
# File 'ext/jit_buffer/jit_buffer.c', line 27

static VALUE
rb_sys_icache_invalidate(VALUE mod, VALUE addr, VALUE len)
{
    sys_icache_invalidate((void *)(NUM2ULONG(addr)), NUM2INT(len));

    return Qnil;
}