Loading shared objects in an l4env_freebsd application

Derick Swanepoel dswanepoel at gmail.com
Fri Jun 10 10:43:19 CEST 2005


On 6/9/05, Frank Mehnert <fm3 at os.inf.tu-dresden.de> wrote:
> On Thursday 09 June 2005 14:45, Derick Swanepoel wrote:
> > On 6/9/05, Frank Mehnert <fm3 at os.inf.tu-dresden.de> wrote:
> > > On Thursday 09 June 2005 14:06, Derick Swanepoel wrote:
> > > > I need to load shared objects in my application. I've got .so loading
> > > > working in a loader-mode app, but my app uses the l4env_freebsd mode
> > > > so I cannot link against libloader.s.so. I've tried to link against
> > > > libloaderif.a, but the l4loader_attach_relocateable() function is only
> > > > available in libloader.s.so.
> > >
> > > I do not fully understand your problem. Why do you cannot link against
> > > the libloaders.s.so when you are using l4env_freebsd_mode?
> >
> > The example loader applications use the loader mode, which links the
> > application dynamically, and it links against libloader.s.so (it uses
> > -lloader.s as a linker argument). When using the l4env_freebsd mode
> > the application is linked statically so it wants to link against
> > libloader.s.a (which doesn't exist) when using -lloader.s. I see that
> > there is a static loader library (libloaderif.a), but it doesn't
> > contain the l4loader_attach_relocateable() function which I need.
> 
> If you need the libraries of the l4env_freebsd_mode, it should be
> possible to add these libraries using the LIBS= parameter. If you
> look at the appropriate Makefile you will see, that libloaderif.a
> contains only the client stub of the loader IDL and therefore has
> nothing to do with the shared library stuff.
> 
> The point is that you should start from the loader mode and enhance
> this mode for your needs since the loader mode uses a different
> startup strategy than the sigma0 mode.

Thanks for the advice. I have created a new mode to combine the loader
mode with what I need from l4env_freebsd, and I can successfully
compile and link my application. Unfortunately it causes a double
pagefault when loaded...:

loader  | "(nd)/fiasco/ds/test" is a valid binary image
loader  | Setting libpath to (nd)/fiasco/ds/
exec    | test: Loading
exec    | test: Saved 457726 bytes of symbols
exec    | libloader.s.so: Relocating to 0000e000
exec    | libloader.s.so: Linking
exec    | libloader.s.so: Relocating entry 000058d0 => 000138d0
exec    | libloader.s.so: Setting section flag 0800
exec    | test: Setting section flag 0800
loader  | test: Starting l4env-style application
loader  | test,#11: Starting at l4loader_init (00014080)
loader  | test,#11: Double PF (r) at 00000000 eip 00000000 (11.00)

A backtrace of the thread shows the following:

backtrace (thread 11.00, fp=00009af4, pc=00000000):
  #2  016f4c37
  #3  016f4c85
  #4  016f4cd3
  #5  016f426c
  #6  016ea0b3
  #7  016edf23
  #8  016ea3be
  #9  016ea1e9
 #10  00014057

My application is compiled with debug info so I assume this happened
in some other library. Sorry, I don't know enough about debugging to
provide more detailed information.

Thanks again,

Derick




More information about the l4-hackers mailing list