Module: JITBuffer::MMAP

Includes:
Fiddle
Defined in:
lib/jit_buffer.rb

Constant Summary collapse

PROT_READ =
0x01
PROT_WRITE =
0x02
PROT_EXEC =
0x04
MAP_SHARED =
0x01
MAP_PRIVATE =
0x02
MAP_ANON =
0x20
MAP_JIT =
0x0

Class Method Summary collapse

Class Method Details

.make_function(name, args, ret) ⇒ Object



40
41
42
43
44
# File 'lib/jit_buffer.rb', line 40

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



65
66
67
68
69
# File 'lib/jit_buffer.rb', line 65

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

.set_executable(ptr, size) ⇒ Object



77
78
79
80
# File 'lib/jit_buffer.rb', line 77

def self.set_executable ptr, size
  MMAP.pthread_jit_write_protect_np 1
  MMAP.sys_icache_invalidate ptr, size
end

.set_writeable(ptr, size) ⇒ Object

Linux



73
74
75
# File 'lib/jit_buffer.rb', line 73

def self.set_writeable ptr, _
  MMAP.pthread_jit_write_protect_np 0
end