diff --git a/repos/dde_rump/include/rump/env.h b/repos/dde_rump/include/rump/env.h index 1b94bd5ff..76cdf2159 100644 --- a/repos/dde_rump/include/rump/env.h +++ b/repos/dde_rump/include/rump/env.h @@ -39,7 +39,7 @@ class Rump::Env public: - Env(Genode::Env &env) : _env(env) { } + Env(Genode::Env &env); Genode::Env &env() { return _env; } Timeout_entrypoint &timeout_ep() { return _timeout_ep; } diff --git a/repos/dde_rump/lib/mk/rump_prefix.inc b/repos/dde_rump/lib/mk/rump_prefix.inc index 1c727094a..9a72af49a 100644 --- a/repos/dde_rump/lib/mk/rump_prefix.inc +++ b/repos/dde_rump/lib/mk/rump_prefix.inc @@ -17,4 +17,6 @@ $(OBJ_PREFIX): $(SRC_NOLINK_OBJ) $(SRC_NOLINK) $(RUMP_LIB_BASE)/$(subst rmpns_,,$@) $(RUMP_LIB_BASE)/$@ $(VERBOSE_MK)rm $(RUMP_LIB_BASE)/_$@ +-include $(SRC_NOLINK_OBJ:.o=.d) + # vi:set ft=make : diff --git a/repos/dde_rump/patches/vm_vfs.patch b/repos/dde_rump/patches/rump.patch similarity index 56% rename from repos/dde_rump/patches/vm_vfs.patch rename to repos/dde_rump/patches/rump.patch index 8a01c8955..fe19a25b9 100644 --- a/repos/dde_rump/patches/vm_vfs.patch +++ b/repos/dde_rump/patches/rump.patch @@ -1,3 +1,36 @@ +--- src/lib/dde_rump/src/sys/rump/librump/rumpkern/rump_private.h ++++ src/lib/dde_rump/src/sys/rump/librump/rumpkern/rump_private.h +@@ -70,6 +70,9 @@ + RUMP__FACTION_NET, + + RUMP_COMPONENT_MAX, ++ ++ /* alias for syscall type used to create ctor symbol */ ++ RUMP_COMPONENT_KERN_SYSCALL = RUMP_COMPONENT_SYSCALL, + }; + struct rump_component { + enum rump_component_type rc_type; +@@ -86,8 +89,7 @@ + + #ifdef RUMP_USE_CTOR + #define _RUMP_COMPONENT_REGISTER(type) \ +-static void rumpcomp_ctor##type(void) __attribute__((constructor)); \ +-static void rumpcomp_ctor##type(void) \ ++void rumpcompctor_##type(void) \ + { \ + rump_component_load(&rumpcomp##type); \ + } +--- src/lib/dde_rump/src/sys/rump/librump/rumpkern/rumpkern_syscalls.c ++++ src/lib/dde_rump/src/sys/rump/librump/rumpkern/rumpkern_syscalls.c +@@ -147,7 +147,7 @@ + { 477, sys_clock_nanosleep }, + }; + +-RUMP_COMPONENT(RUMP_COMPONENT_SYSCALL) ++RUMP_COMPONENT(RUMP_COMPONENT_KERN_SYSCALL) + { + + rump_syscall_boot_establish(mysys, __arraycount(mysys)); --- src/lib/dde_rump/src/sys/rump/librump/rumpvfs/vm_vfs.c +++ src/lib/dde_rump/src/sys/rump/librump/rumpvfs/vm_vfs.c @@ -49,6 +49,7 @@ @@ -66,3 +99,15 @@ mutex_enter(bp->b_objlock); vwakeup(bp); mutex_exit(bp->b_objlock); +--- src/lib/dde_rump/src/sys/sys/module.h ++++ src/lib/dde_rump/src/sys/sys/module.h +@@ -114,8 +114,7 @@ + }; + LIST_HEAD(modinfo_boot_chain, modinfo_chain); + #define _MODULE_REGISTER(name) \ +-static void modctor_##name(void) __attribute__((constructor)); \ +-static void modctor_##name(void) \ ++void modctor_##name(void) \ + { \ + static struct modinfo_chain mc = { \ + .mc_info = &name##_modinfo, \ diff --git a/repos/dde_rump/ports/dde_rump.hash b/repos/dde_rump/ports/dde_rump.hash index ab3038b1c..b0473edb8 100644 --- a/repos/dde_rump/ports/dde_rump.hash +++ b/repos/dde_rump/ports/dde_rump.hash @@ -1 +1 @@ -e82aa761750a0a1e76e886fa7ad37da043afe931 +b81e1b234bf98a6b0a35dec429e8a826b735bc08 diff --git a/repos/dde_rump/ports/dde_rump.port b/repos/dde_rump/ports/dde_rump.port index 61936a6f6..2ba10f713 100644 --- a/repos/dde_rump/ports/dde_rump.port +++ b/repos/dde_rump/ports/dde_rump.port @@ -5,4 +5,4 @@ URL(rump) := https://github.com/ssumpf/rump.git DIR(rump) := src/lib/dde_rump REV(rump) := 206ffa06cedd0779af0043997fd182b00ff4688c -PATCHES := patches/vm_vfs.patch +PATCHES := patches/rump.patch diff --git a/repos/dde_rump/src/lib/rump/env.cc b/repos/dde_rump/src/lib/rump/env.cc index 0b322eae9..e82a914ad 100644 --- a/repos/dde_rump/src/lib/rump/env.cc +++ b/repos/dde_rump/src/lib/rump/env.cc @@ -13,19 +13,29 @@ #include -/* - * Genode enviroment instance - */ -static Genode::Constructible _env; +static Rump::Env *_env_ptr; Rump::Env &Rump::env() { - return *_env; + return *_env_ptr; } void Rump::construct_env(Genode::Env &env) { - _env.construct(env); + static Rump::Env _env(env); + _env_ptr = &_env; +} + + +/* constructors in rump.lib.so */ +extern "C" void rumpns_modctor_ksem(void); +extern "C" void rumpns_modctor_suser(void); + +Rump::Env::Env(Genode::Env &env) : _env(env) +{ + /* call init/constructor functions of rump.lib.so */ + rumpns_modctor_ksem(); + rumpns_modctor_suser(); } diff --git a/repos/dde_rump/src/lib/rump/io.cc b/repos/dde_rump/src/lib/rump/io.cc index f63afea9b..975646a5f 100644 --- a/repos/dde_rump/src/lib/rump/io.cc +++ b/repos/dde_rump/src/lib/rump/io.cc @@ -166,8 +166,33 @@ void rump_io_backend_sync() } +/* constructors in rump_fs.lib.so */ +extern "C" void rumpcompctor_RUMP_COMPONENT_KERN_SYSCALL(void); +extern "C" void rumpcompctor_RUMP_COMPONENT_SYSCALL(void); +extern "C" void rumpcompctor_RUMP__FACTION_VFS(void); +extern "C" void rumpcompctor_RUMP__FACTION_DEV(void); +extern "C" void rumpns_modctor_cd9660(void); +extern "C" void rumpns_modctor_dk_subr(void); +extern "C" void rumpns_modctor_ext2fs(void); +extern "C" void rumpns_modctor_ffs(void); +extern "C" void rumpns_modctor_msdos(void); +extern "C" void rumpns_modctor_wapbl(void); + + void rump_io_backend_init() { + /* call init/constructor functions of rump_fs.lib.so (order is important!) */ + rumpcompctor_RUMP_COMPONENT_KERN_SYSCALL(); + rumpns_modctor_wapbl(); + rumpcompctor_RUMP_COMPONENT_SYSCALL(); + rumpcompctor_RUMP__FACTION_VFS(); + rumpcompctor_RUMP__FACTION_DEV(); + rumpns_modctor_msdos(); + rumpns_modctor_ffs(); + rumpns_modctor_ext2fs(); + rumpns_modctor_dk_subr(); + rumpns_modctor_cd9660(); + /* create back end */ backend(); } diff --git a/repos/libports/run/libc_vfs_filesystem_test.inc b/repos/libports/run/libc_vfs_filesystem_test.inc index a96c485da..30cd4c832 100644 --- a/repos/libports/run/libc_vfs_filesystem_test.inc +++ b/repos/libports/run/libc_vfs_filesystem_test.inc @@ -137,14 +137,14 @@ append_if $use_ram_block config { append_if $use_vfs_server config " - + } $test_vfs_config - + " diff --git a/tool/autopilot.list b/tool/autopilot.list index 905b81fa5..7d7aca62b 100644 --- a/tool/autopilot.list +++ b/tool/autopilot.list @@ -8,19 +8,21 @@ depot_download depot_query extract fb_bench -fetchurl_lxip fetchurl_lwip +fetchurl_lxip fs_query gdb_monitor ieee754 init_smp input_filter libc_fatfs +libc_vfs_fs_ext2 log_core lwip lx_hybrid_ctors lx_hybrid_exception lx_hybrid_pthread_ipc +microcode moon netperf_lwip netperf_lwip_bridge @@ -69,9 +71,9 @@ vbox5_ubuntu_16_04_32 vbox5_ubuntu_16_04_64 vbox5_vm_ubuntu_16_04_32 vbox5_vm_ubuntu_16_04_64 +vbox5_vm_win10_64 vbox5_vm_win7_32 vbox5_vm_win7_64 -vbox5_vm_win10_64 vbox5_win10_64 vbox5_win7_32 vbox5_win7_64 @@ -82,4 +84,3 @@ verify vfs_import vmm_arm vmm_x86 -microcode