Some confusing code of the kernel

Adam Lackorzynski adam at
Wed May 28 00:55:38 CEST 2014


On Tue May 27, 2014 at 13:51:31 -0800, Yuxin Ren wrote:
> Now I am learning the kernel code of Fiasco.
> But as I do not know much about C++, I feel confused about some code.

Some C++ knowledge is required I think...

> In the file obj_space-virt.cpp, we have such code
> EXTENSION class Generic_obj_space : Obj_space_virt<Generic_obj_space<SPACE>
> >
> And similarly, in the file obj_space-phys.cpp, we have
> EXTENSION class Generic_obj_space : Obj_space_phys<Generic_obj_space< SPACE
> > >
> 1. What's the meaning of these tow line code? Does it mean that the class
> Generic_obj_space
> inherit from both class Obj_space_virt and class Obj_space_phys?

It inherits from just Obj_space_phys which however takes another class
as a parameter to implement some specific functionality at compile time.

> 2. I note that class Obj_space_virt and Obj_space_phys have some methods
> with the same name,
> such as lookup_local method. When such a method is called, how can I know
> which class is invoked?

That depends on the type of the object the method is called on. In this
particular case with obj_space-*.cpp, only one file of the two files is
compiled, so only one version of Generic_obj_space can ever exist.

Adam                 adam at

More information about the l4-hackers mailing list