(!) See also debugging.

Here are some hints about how to approach testing after nontrivial changes to glibc have been done.

First step is having the build of glibc succeed. This is actually more difficult than one might expect as it involves (towards the end of the build process -- unless you are cross-compiling, of course -- that the newly created libraries and loader actually work: they'll be used to run the rpcgen program. If that step doesn't succeed, it'll look similar to this:

CPP='gcc -E -x c-header' [...]/build/elf/ld.so.1 --library-path [...] [...]/build/sunrpc/rpcgen [...]
Segmentation fault

Unless cross-compiling, the next thing you'll probably want to do is running the test suite, or parts of it.

There is a list of known failures.

If you've been doing simple changes to glibc functions that end up in libc.so, you may test them like this (like for a strerror_l implementation in this case):

$ LD_PRELOAD=./libc.so ./ld.so ./a.out 10 1073741928 de_DE.utf8
1073741928 (0x40000068): Computer bought the farm
1073741928 (0x40000068): Der Computer hat den Bauernhof erworben

You usually will only have luck using the new libc.so (from [glibc-build]/libc.so) in combination together with the new ld.so (from [glibc-build]/elf/ld.so):

$ LD_PRELOAD=./libc.so ./a.out 10 1073741928 de_DE.utf8
$ LD_PRELOAD=./libc.so /lib/ld.so ./a.out 10 1073741928 de_DE.utf8

Make sure static linking is working OK at all. Running the [glibc-build]/elf/sln program (a stripped-down ln that is statically linked) ought to test that. Also, static linking under various conditions will already have been tested when running the test suite, especially in elf/ and dlfcn/.

Make sure static linking with cthreads is working. If you can get an ext2fs.static compiled and linked against the new glibc, that is good.


Then debug its startup as a normal program on your working hurd.

$ [...]/ext2fs.static --help

Then try its full server startup.

$ settrans -ca node [...]/ext2fs.static BACKING_STORE
$ ls -l node/

Make sure dynamic linking for servers is working. If you haven't broken the ABI, you can just use an existing /hurd/foobar binary, started the way glibc's testrun.sh does it.

[TODO]: Is this the correct way to do that?

$ settrans -ca node [glibc]/build/testrun.sh /hurd/ext2fs BACKING_STORE
$ cd node/

Test it in a subhurd.

Test it on a real system.