mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-21 02:01:38 +00:00
libc: support executable memory allocations
in internal memory allocator used by libc and vbox* Issue #1723
This commit is contained in:
parent
dfa8b787be
commit
e87b322616
@ -37,10 +37,12 @@ Libc::Mem_alloc_impl::Dataspace_pool::~Dataspace_pool()
|
||||
*/
|
||||
|
||||
Ram_dataspace_capability ds_cap = ds->cap;
|
||||
void const * const local_addr = ds->local_addr;
|
||||
|
||||
remove(ds);
|
||||
delete ds;
|
||||
_region_map->detach(ds->local_addr);
|
||||
|
||||
_region_map->detach(local_addr);
|
||||
_ram_session->free(ds_cap);
|
||||
}
|
||||
}
|
||||
@ -54,7 +56,10 @@ int Libc::Mem_alloc_impl::Dataspace_pool::expand(size_t size, Range_allocator *a
|
||||
/* make new ram dataspace available at our local address space */
|
||||
try {
|
||||
new_ds_cap = _ram_session->alloc(size);
|
||||
local_addr = _region_map->attach(new_ds_cap);
|
||||
|
||||
enum { MAX_SIZE = 0, NO_OFFSET = 0, ANY_LOCAL_ADDR = false };
|
||||
local_addr = _region_map->attach(new_ds_cap, MAX_SIZE, NO_OFFSET,
|
||||
ANY_LOCAL_ADDR, nullptr, _executable);
|
||||
}
|
||||
catch (Out_of_ram) { return -2; }
|
||||
catch (Out_of_caps) { return -4; }
|
||||
|
@ -60,14 +60,18 @@ namespace Libc {
|
||||
|
||||
Genode::Ram_session *_ram_session; /* ram session for backing store */
|
||||
Genode::Region_map *_region_map; /* region map of address space */
|
||||
bool const _executable; /* whether to allocate executable dataspaces */
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
Dataspace_pool(Genode::Ram_session *ram, Genode::Region_map *rm):
|
||||
_ram_session(ram), _region_map(rm) { }
|
||||
Dataspace_pool(Genode::Ram_session *ram,
|
||||
Genode::Region_map *rm, bool executable) :
|
||||
_ram_session(ram), _region_map(rm),
|
||||
_executable(executable)
|
||||
{ }
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
@ -108,9 +112,11 @@ namespace Libc {
|
||||
|
||||
public:
|
||||
|
||||
Mem_alloc_impl(Genode::Region_map &rm, Genode::Ram_session &ram)
|
||||
Mem_alloc_impl(Genode::Region_map &rm,
|
||||
Genode::Ram_session &ram,
|
||||
bool executable = false)
|
||||
:
|
||||
_ds_pool(&ram, &rm),
|
||||
_ds_pool(&ram, &rm, executable),
|
||||
_alloc(0),
|
||||
_chunk_size(MIN_CHUNK_SIZE)
|
||||
{ }
|
||||
|
Loading…
x
Reference in New Issue
Block a user