Marcin,
Could you please briefly explain how this procedure would look like? From my understanding, while calling seL4_CNode_Delete on i.e. seL4_CapInitThreadTCB would remove this capability, the memory which was used for it wouldn't be freed as it wasn't derived from Untyped capability, but the cap was created directly using cap_cnode_cap_new, and thus there is no untyped capability I could call seL4_Untyped_Retype on to reuse this memory in another thread. Or maybe I got this completely wrong?
You are right, you don't have the original untyped for the root server, and this does not exists due to the way the kernel boot allocation works. So some memory lost anyway even if you reuse the rootserver objects. The boot could be modified to create only such object directly that are not meant to be deleted (e.g. interrupt control). All other objects (e.g. TCB, pages tables, pages) are created via an untyped, where the root server gets the untyped capability also. That should allow to recover all of them via the existing cap APIs and no special syscall is needed. Axel