[Barrelfish-users] netd and howto get files into BF/Qemu
Kornilios Kourtis
kkourt at inf.ethz.ch
Thu Dec 15 11:56:20 CET 2011
Hi,
On Wed, Dec 14, 2011 at 04:21:21PM +0000, Peter Simon wrote:
> I think Ihor ran into this problem before (with the same unclean fix).
> vfs_init() sets up the linkage between libc and libvfs, but the linker
> decides not to call it, as there's nothing explicitly calling libvfs
> from libc.
>
> Does anyone know how to force the linker to call a constructor? That
> would solve this problem.
The problem probably is that libc does not reference any of the libvfs symbols,
so the module is not linked at all. A trick to force ld to link libvfs is to
explicitly set a vfs symbol as undefined when linking. This can be done by
passing --undefined=vfs_dummy (maybe this is why vfs_dummy was there?) to ld,
or -Xlinker --undefined=vfs_dummy to gcc.
I've tested a simple example:
$ cat ../usr/tests/filetests/fopen_test.c
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fh = fopen("PIZZA", "w");
fclose(fh);
return 0;
}
$ tail -5 ../usr/tests/filetests/Hakefile
build application { target = "fopen_test",
cFiles = [ "fopen_test.c" ],
addLibraries = ["vfs", "nfs", "lwip", "contmng", "timer" ]
}
]
$ make ./x86_64/sbin/fopen_test
gcc [lots of options]
$ nm ./x86_64/sbin/fopen_test | grep vfs | wc -l
0
$ gcc -Xlinker --undefined=vfs_dummy [lots of options]
$ nm ./x86_64/sbin/fopen_test | grep vfs | wc -l
234
cheers,
Kornilios.
--
Kornilios Kourtis
More information about the Barrelfish-users
mailing list