From d1df1dbd87cb4cfe6e66b9ddf4263dd148db869d Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 31 Jan 2017 16:01:07 +0100 Subject: [PATCH] libc: API transition (fix deprecated warnings) Issue #1987 --- repos/libports/src/lib/libc/dynamic_linker.cc | 17 ++++++---- repos/libports/src/lib/libc/libc_init.h | 5 +++ repos/libports/src/lib/libc/libc_mem_alloc.cc | 31 ++++++++++++++----- repos/libports/src/lib/libc/libc_mem_alloc.h | 5 ++- repos/libports/src/lib/libc/task.cc | 1 + repos/ports/src/virtualbox/mm.cc | 3 +- repos/ports/src/virtualbox/spec/nova/sup.cc | 2 +- repos/ports/src/virtualbox5/mm.cc | 3 +- repos/ports/src/virtualbox5/spec/nova/sup.cc | 2 +- 9 files changed, 49 insertions(+), 20 deletions(-) diff --git a/repos/libports/src/lib/libc/dynamic_linker.cc b/repos/libports/src/lib/libc/dynamic_linker.cc index 4f97bbbcb1..91f1cb1ddd 100644 --- a/repos/libports/src/lib/libc/dynamic_linker.cc +++ b/repos/libports/src/lib/libc/dynamic_linker.cc @@ -1,19 +1,23 @@ -/** - * \brief DL interface bindings +/* + * \brief Dynamic linker interface bindings * \author Sebastian Sumpf * \date 2014-10-24 * * Wrap Genode's shared library interface onto libc semantics. */ -#include +/* Genode includes */ #include #include #include +/* Genode-specific libc includes */ +#include + /* libc-internal includes */ #include +/* libc includes */ extern "C" { #include } @@ -71,8 +75,9 @@ void *dlopen(const char *name, int mode) } try { - return new (env()->heap()) - Shared_object(*genode_env, *env()->heap(), name, bind, keep); + static Libc::Allocator global_alloc; + return new (global_alloc) + Shared_object(*genode_env, global_alloc, name, bind, keep); } catch (...) { snprintf(err_str, MAX_ERR, "Unable to open file %s\n", name); } @@ -117,7 +122,7 @@ int dladdr(const void *addr, Dl_info *dlip) int dlclose(void *handle) { - destroy(env()->heap(), to_object(handle)); + destroy(Libc::Allocator(), to_object(handle)); return 0; } diff --git a/repos/libports/src/lib/libc/libc_init.h b/repos/libports/src/lib/libc/libc_init.h index 7fe5d0c2b4..df2a2f5d6a 100644 --- a/repos/libports/src/lib/libc/libc_init.h +++ b/repos/libports/src/lib/libc/libc_init.h @@ -23,6 +23,11 @@ namespace Libc { * Support for shared libraries */ void init_dl(Genode::Env &env); + + /** + * Global memory allocator + */ + void init_mem_alloc(Genode::Env &env); } #endif /* _LIBC_INIT_H_ */ diff --git a/repos/libports/src/lib/libc/libc_mem_alloc.cc b/repos/libports/src/lib/libc/libc_mem_alloc.cc index f4900af84b..58a05c2b8d 100644 --- a/repos/libports/src/lib/libc/libc_mem_alloc.cc +++ b/repos/libports/src/lib/libc/libc_mem_alloc.cc @@ -16,10 +16,11 @@ /* Genode includes */ #include #include -#include +#include /* local includes */ #include "libc_mem_alloc.h" +#include "libc_init.h" using namespace Genode; @@ -66,7 +67,7 @@ int Libc::Mem_alloc_impl::Dataspace_pool::expand(size_t size, Range_allocator *a /* now that we have new backing store, allocate Dataspace structure */ if (alloc->alloc_aligned(sizeof(Dataspace), &ds_addr, 2).error()) { - PWRN("could not allocate meta data - this should never happen"); + Genode::warning("libc: could not allocate meta data - this should never happen"); return -1; } @@ -107,7 +108,7 @@ void *Libc::Mem_alloc_impl::alloc(size_t size, size_t align_log2) } if (_ds_pool.expand(align_addr(request_size, 12), &_alloc) < 0) { - PWRN("could not expand dataspace pool"); + Genode::warning("libc: could not expand dataspace pool"); return 0; } @@ -136,10 +137,26 @@ Genode::size_t Libc::Mem_alloc_impl::size_at(void const *addr) const } -Libc::Mem_alloc *Libc::mem_alloc() -{ - static Libc::Mem_alloc_impl inst; - return &inst; +static Libc::Mem_alloc *_libc_mem_alloc; + + +namespace Libc { + + void init_mem_alloc(Genode::Env &env) + { + static Libc::Mem_alloc_impl inst(env.rm(), env.ram()); + _libc_mem_alloc = &inst; + } +} + + +Libc::Mem_alloc *Libc::mem_alloc() +{ + if (!_libc_mem_alloc) { + error("attempt to use 'Libc::mem_alloc' before call of 'init_mem_alloc'"); + Genode::sleep_forever(); + } + return _libc_mem_alloc; } diff --git a/repos/libports/src/lib/libc/libc_mem_alloc.h b/repos/libports/src/lib/libc/libc_mem_alloc.h index 27d55af40c..ebd138bafa 100644 --- a/repos/libports/src/lib/libc/libc_mem_alloc.h +++ b/repos/libports/src/lib/libc/libc_mem_alloc.h @@ -108,10 +108,9 @@ namespace Libc { public: - Mem_alloc_impl(Genode::Region_map * rm = Genode::env()->rm_session(), - Genode::Ram_session * ram = Genode::env()->ram_session()) + Mem_alloc_impl(Genode::Region_map &rm, Genode::Ram_session &ram) : - _ds_pool(ram, rm), + _ds_pool(&ram, &rm), _alloc(0), _chunk_size(MIN_CHUNK_SIZE) { } diff --git a/repos/libports/src/lib/libc/task.cc b/repos/libports/src/lib/libc/task.cc index 870ac6b7c8..315d063828 100644 --- a/repos/libports/src/lib/libc/task.cc +++ b/repos/libports/src/lib/libc/task.cc @@ -641,6 +641,7 @@ Genode::size_t Component::stack_size() { return Libc::Component::stack_size(); } void Component::construct(Genode::Env &env) { /* pass Genode::Env to libc subsystems that depend on it */ + Libc::init_mem_alloc(env); Libc::init_dl(env); kernel = unmanaged_singleton(env); diff --git a/repos/ports/src/virtualbox/mm.cc b/repos/ports/src/virtualbox/mm.cc index aa8725f909..ddaec4424f 100644 --- a/repos/ports/src/virtualbox/mm.cc +++ b/repos/ports/src/virtualbox/mm.cc @@ -57,7 +57,8 @@ static Libc::Mem_alloc * heap_by_mmtag(MMTAG enmTag) return memory_regions[enmTag].heap; memory_regions[enmTag].conn = new Sub_rm_connection(genode_env(), REGION_SIZE); - memory_regions[enmTag].heap = new Libc::Mem_alloc_impl(memory_regions[enmTag].conn); + memory_regions[enmTag].heap = new Libc::Mem_alloc_impl(*memory_regions[enmTag].conn, + genode_env().ram()); return memory_regions[enmTag].heap; } diff --git a/repos/ports/src/virtualbox/spec/nova/sup.cc b/repos/ports/src/virtualbox/spec/nova/sup.cc index feb68392e8..d5045d564b 100644 --- a/repos/ports/src/virtualbox/spec/nova/sup.cc +++ b/repos/ports/src/virtualbox/spec/nova/sup.cc @@ -278,7 +278,7 @@ extern "C" void pthread_yield(void) void *operator new (__SIZE_TYPE__ size, int log2_align) { - static Libc::Mem_alloc_impl heap(&genode_env().rm()); + static Libc::Mem_alloc_impl heap(genode_env().rm(), genode_env().ram()); return heap.alloc(size, log2_align); } diff --git a/repos/ports/src/virtualbox5/mm.cc b/repos/ports/src/virtualbox5/mm.cc index 847bfb9a65..da5447fed2 100644 --- a/repos/ports/src/virtualbox5/mm.cc +++ b/repos/ports/src/virtualbox5/mm.cc @@ -61,7 +61,8 @@ static Libc::Mem_alloc * heap_by_mmtag(MMTAG enmTag) return memory_regions[enmTag].heap; memory_regions[enmTag].conn = new Sub_rm_connection(genode_env(), REGION_SIZE); - memory_regions[enmTag].heap = new Libc::Mem_alloc_impl(memory_regions[enmTag].conn); + memory_regions[enmTag].heap = new Libc::Mem_alloc_impl(*memory_regions[enmTag].conn, + genode_env().ram()); return memory_regions[enmTag].heap; } diff --git a/repos/ports/src/virtualbox5/spec/nova/sup.cc b/repos/ports/src/virtualbox5/spec/nova/sup.cc index 0981b3ec0f..a7d081e863 100644 --- a/repos/ports/src/virtualbox5/spec/nova/sup.cc +++ b/repos/ports/src/virtualbox5/spec/nova/sup.cc @@ -544,7 +544,7 @@ extern "C" void pthread_yield(void) void *operator new (__SIZE_TYPE__ size, int log2_align) { - static Libc::Mem_alloc_impl heap(&genode_env().rm()); + static Libc::Mem_alloc_impl heap(genode_env().rm(), genode_env().ram()); return heap.alloc(size, log2_align); }