question about Region_map::Region_conflict in attach_at()

Alexander Tormasov a.tormasov at innopolis.ru
Sun Nov 15 01:11:00 CET 2020


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
}



More information about the users mailing list