fprintf(stderr, ...) fails

Martin Pohlack mp26 at os.inf.tu-dresden.de
Tue Nov 29 15:44:10 CET 2005


Hi Arthur,

[...]

> Maybe, it's because I am using a older drops version (I'll update it 
> right now),

Always a good idea ...

> but when I'm compiling it in l4env - mode, I get following error messages:
>     ../../../lib/libxvidcore.a(xvid.o): In function `sigill_check':
>     xvid.c:(.text+0x30): undefined reference to `signal'
>     xvid.c:(.text+0x68): undefined reference to `signal'
>     collect2: ld returned 1 exit status
>     make[1]: *** [Program] Fehler 1
> (I use the xvid-library, which is using the signal - function).
> If I use the l4env_base - mode, another additional error occurs:
>     xvid.c:(.text+0x4e): undefined reference to `_setjmp'
> Seems, that these system functions are not implemented yet.
> 
> Is there any problem using the l4env_freebsd - mode?

Someone else jump in here ...

> I also can turn the signal-function of.
> 
> 
>>You might want to look into l4/pkg/l4vfs/examples/l4vfs_test which uses
>>the l4env_base MODE.  Note that you must switch to dietlibc or uclibc in
>>l4 type 'make config'.
>>
>> 
>>
> 
> But still I can't use the fprintf-function. If I compile a simple 
> test-program like
>     #include <stdio.h>
>     int main (int argc, char **argv) { fprintf(stderr, "Error\n"); 
> return 0; }
> 
> in l4env-mode, I get the error message
>     testprg | L4RM: [PF] read at 0x00000000, eip 0180e0ae, src 9.02
>     testprg | [9.0] l4rm/lib/src/pagefault.c:78:__unknown_pf():
>     testprg |  unhandled page fault
> 
> in l4env-mode, I get the error message
>     simplets| Configured for 64 tasks.
>     testprg | l4vfs_get_name_server_threadid(): 'name_server' not known 
> at RMGR!
>     simplets| l4_ts_exit_component(): Exit 9.02
> 
> starting with -l name_server:
>     simplets| Configured for 64 tasks.
>     simplets| l4_ts_exit_component(): Cannot exit A.02 (reserved or 
> terminating)
> 
> 
> Is there any library, that I can include or any program I have to start, 
> to get
> this simple program started?

For such a simple program I'd advise you to use the 'sigma0' mode which
directly puts out writes to stdout and stderr to (text-)screen and
serial, if configured.  The 'l4env' mode works similarly but uses
logserver functions for output.

More complex programms should use the l4env_base mode which uses more
sophisticated output backends.  But here you need someone implementing
the output channels, for example l4vfs_log.

Using fiasco-ux I start this up as follows:

--------------------------->8---------------------------

#! /bin/bash

. ${0%/*}/generic.inc

fiasco \
        -G $UXRES                                                      \
        -l names                                                       \
        -l log                                                         \
        -l dm_phys                                                     \
        -l simple_ts                                                   \
        -l name_server                                                 \
        -l l4vfs_log                                                   \
        -l "fstab -c /server -c /server/log -v10 -b/ -m/server/log"    \
        -l "l4vfstest --stdout /server/log/l4vfstest                   \
                      --stderr /server/log/l4vfstest"                  \
        -n9 "$@"

--------------------------->8---------------------------

Explanation:
 - name_server is the l4vfs name server to resolve names like
   "/server/log/l4vfstest"
 - l4vfs_log wrappes write calls to logserver functions, while keeping a
   clientspecific log prefix
 - fstab initially populates the name space and mounts l4vfs_log to
   "/server/log/"
 - l4vfstest is your example program compiled with MODE = l4env_base,
   the client lib catches the special parameters --stdout and --stderr
   and connects them the file "/server/log/l4vfstest", which works as
   your "output terminal".  This is a "poor man's" inheritance of open
   filedescriptors ;-)

We also have terminal servers for l4con and DOpE, these could even
provide input using "--stdin".  Have a look into l4vfs/term_server for this.

Note: The MODE variables in Makefiles define a set of libs etc. to use,
if you want to know what is going on, call make with "make VERBOSE=" or
have a look into l4/mk/modes.inc.

Regards,
Martin




More information about the l4-hackers mailing list