[PATCH] i386/virtualpok BSP, virtual BSP to be used with POK, build with enable-paravirt

Gedare Bloom gedare at rtems.org
Fri Mar 7 13:07:31 UTC 2014

On Fri, Mar 7, 2014 at 4:44 AM, Philipp Eppelt
<philipp.eppelt at mailbox.tu-dresden.de> wrote:
> On 03/06/2014 06:58 PM, Gedare Bloom wrote:
>> Hi Philipp,
>> On Wed, Mar 5, 2014 at 3:48 AM, Philipp Eppelt
>> <philipp.eppelt at mailbox.tu-dresden.de> wrote:
>>> Hi,
>>> as of now it looks like we have a student picking up my work from last
>>> year. While the patches for the --enable-paravirt configuration option
>>> went upstream, the virtualpok BSP for i386 still has open issues.
>>> I reviewed the discussion we had in December and January on the
>>> virtualpok BSP for i386. We ended with the following two issues:
>>> * Extension of --enable-paravirt to pass along /path/to/libpart.a (in POK)
>>> * How can we ensure that the POK and RTEMS virt.layer header files don't
>>> diverge.
>> Thanks for pulling these issues out.
>>> The first point is clear. The second is complicated. From the design
>>> point of view, the BSP should communicate transparently with the host.
>>> This transparency is provided via the two header files
>>> virtualizationlayer{cpu|bsp}.h . The missing implementation has to be
>>> provided by the host, otherwise the BSP can't be build. Which is quite
>>> okay, as this failure is exactly telling you what is missing.
>>> However, if our or the host side is changing and the changes aren't
>>> propagated to the other side, it is difficult to track and find the error.
>>> Can we build in some checks?
>>> I don't think one could force POK to check for updates at compile time.
>>> However, I can imagine a script being build after
>>> --enable-paravirt=/path/to/libpart.a is configured, which determines the
>>> correct location of virtualizationlayer{cpu|bsp}.h in POK and diff these
>>> files with the BSP local definition.
>>> e.g.:
>>> ret = diff virtualpok/include/virtualizationlayerbsp.h
>>> /path/to/libpart.a/../../../virtualizationlayerbsp.h
>>> if( ret != 0 ) print ERROR
>>> ***
>>> Can we integrate such a script into a generated makefile? Or is it
>>> sufficient to just provide this script and describe it in the BSP's readme?
>> I'm not satisfied with this solution. It assumes the pok sources are
>> the same as the ones used to build the libpart.a. Can the required
>> header files from pok be packaged with the libpart.a?
> The header files are part of RTEMS's virtualization layer, upon which
> the RTEMS BSP builds.
> With the --enable-paravirt option, RTEMS should grab libpart.a directly
> from the host's build tree. I don't understand, where and how you want
> to package the header files. Into the library file?
When you say host's build tree, are you referring to POK? This
dependency to the build tree of another project is suspicious to me.

>> Some other options would be nice to consider.
> How much information does libpart.a already contain? Isn't the linker
> objecting, if the function declaration differs from it's implementation
> provided via libpart.a?
> Let's say the declaration in virtualizationlayerbsp.h is:
> void sample(int parm);
> and the implementation in libpart.a is:
> void sample(unsigned long parm);
> Shouldn't the linker raise an error in this case?
I don't know, does it?

> Cheers,
> Philipp
>>> Another question is if the linker is checking the full header? The
>>> function name and all parameter types? Wouldn't this be sufficient to
>>> alert the user of inconsistencies?
>>> Automated testing is a third issue. But I'd like to postpone this, until
>>> we actually have something that can be tested.
>>> Cheers,
>>> Philipp

More information about the devel mailing list