Hi! I have a problem in the following code (64 bit NOVA 20.08, 3GB RAM, with gdb):
void Component::construct(Env &env) { Rm_connection rm(env);
Region_map_client my_rm(rm.create(0x1400000)); char *_base = env.rm().attach(my_rm.dataspace());
Region_map_client my1_rm(rm.create(0x1000)); env.rm().attach_at(my1_rm.dataspace(), 0x102e000);
log("my create managed dataspace", Hex((addr_t)_base)); }
it return _base [11000000,12400000) and it give error during attach_at() call (which is far from requested address 0x102e000) Error: Uncaught exception of type 'Genode::Region_map::Region_conflict’
Why it is happens? Where this error generated in the NOVA code (or genode NOVA wrapper)?
I assume that I can create 2 RM clients to be able to fill it (attach_to) ds later?
Thanks! Sincerely, Alexander
run file #debug go application via gdb #
set build_components { core init timer lib/ld drivers/uart app/gdb_monitor lib/vfs/pipe noux-pkg/mmaptest }
lappend build_components "lib/gdbserver_platform-$::env(KERNEL)"
build $build_components
create_boot_directory
proc local_heap_default_size {} { return "0x1400000" }
install_config { <config verbose="yes" ld_verbose="yes"> <parent-provides> <service name="ROM" /> <service name="LOG" /> <service name="RM" /> <service name="CPU" /> <service name="PD" /> <service name="IRQ" /> <service name="IO_MEM" /> <service name="IO_PORT" /> </parent-provides> <default-route> <any-service> <parent/> <any-child/> </any-service> </default-route> <default caps="200" /> <start name="timer"> <resource name="RAM" quantum="2M»/> <provides> <service name="Timer"/> </provides> </start> <start name="pc_uart_drv"> <resource name="RAM" quantum="2M" /> <provides> <service name="Uart"/> <service name="Terminal"/> </provides> <config> <policy label_prefix="gdb_monitor" uart="1" /> </config> </start> <start name="gdb_monitor" caps="4800"> <resource name="RAM" quantum="80M" /> <provides> <service name="mmaptest" /> </provides> <config verbose="yes" ld_verbose="yes"> <target name="mmaptest" caps="2800"> <config verbose="yes" ld_verbose="yes" local_heap_default_size="} [local_heap_default_size] {"> <vfs> <dir name="dev"> <log /> </dir> </vfs> <libc stdout="/dev/log" stderr="/dev/log" /> </config> </target> <preserve name="RAM" quantum="50M" /> <vfs> <dir name="dev"> <log/> <terminal/> </dir> <dir name="pipe"> <pipe/> </dir> </vfs> <libc stdout="/dev/log" stderr="/dev/log" pipe="/pipe"/> </config> </start> </config> }
# evaluated by the run tool proc binary_name_gdbserver_platform_lib_so { } { return "gdbserver_platform-$::env(KERNEL).lib.so" }
build_boot_image { core init timer ld.lib.so libc.lib.so vfs.lib.so libm.lib.so pc_uart_drv posix.lib.so stdcxx.lib.so vfs_pipe.lib.so posix.lib.so stdcxx.lib.so vfs_pipe.lib.so gdb_monitor gdbserver_platform.lib.so vfs.lib.so mmaptest }