On Saturday 15. July 2017 00.11.58 Paul Boddie wrote:
However, I'm not managing to actually see the example start. I get the following output:
MOE: Hello world MOE: found 245048 KByte free memory MOE: found RAM from 1000 to 10000000 MOE: allocated 255 KByte for the page array @0x104d000 MOE: virtual user address space [0-7fffffff] MOE: rom name space cap -> [C:103000] BOOTFS: [1100000-1131e5c] [C:105000] l4re BOOTFS: [1132000-1164b08] [C:107000] hello MOE: cmdline: moe --init=rom/hello MOE: Starting: rom/hello MOE: loading 'rom/hello'
Despite inserting a trace statement into the Moe main program after the elf_loader.start invocations, I don't see anything else appear. So I guess something else manages to go wrong at this point. I suppose I'll have to try and track this down.
So, some more slow but steady progress here.
I decided to see where the code was failing by inserting trace statements and looking at the output. The failure path involved the elf_loader.start invocation, through the loader machinery...
Loader::start Loader::exec Elf_loader::launch Loader<App_model_, Dbg_>::launch Elf_loader::load
...invoking the Moe_app_model (init_prog and copy_ds), ultimately calling Dataspace_util::copy and l4_cache_coherent.
Naturally, l4_cache_coherent on MIPS employs the rdhwr (read hardware register) instruction that Sarah mentioned, and although there is code to handle this instruction when accessing the ULR (User Local Register), there isn't code to handle access to the SYNCI_Step register which describes the instruction cache line size. As noted previously, the code for "reserved" instruction handling is here:
kernel/fiasco/src/kern/mips/exception.S
So, I've made an attempt to implement this support in the reserved_insn handler, accessing the appropriate Config register and reading the value, setting it in the target register. The existing code wasn't too difficult to follow, and I hope I haven't broken anything by changing it.
Now, it appears that Moe does complete the loading of "hello", but I still don't see any output from the example. Switching on all debugging gives the following output from Moe:
MOE: loading 'rom/hello' MOE[ldr]: done... MOE: dump of root name space: icu -> [C:6000] f=2309 jdb -> [C:a000] f=2317 log -> [C:5000] f=2309 mem -> [C:10d000] o=108edc0 f=2829 rom -> [C:103000] o=108dfe0 f=2816 .dirinfo -> [C:109000] o=108ee80 f=2816 hello -> [C:107000] o=108ef00 f=2816 l4re -> [C:105000] o=108ef80 f=2816 sigma0 -> [C:4000] f=2317
But with the --l4re-dbg option set to "all", after this output...
L4Re: load binary 'rom/hello' L4Re: Start server loop
...I notice this continuously recurring message:
L4Re[svr]: request: tag=0xfffb1026 proto=-5 obj=0x0
So I imagine now that I will need to investigate what this is all about.
Paul