So if I upgrade glibc, the kernel won't work?
OK, I'm not really that much of an expert and I've learnt many things the hard way. So let me tell you some things from experience!
Anybody who know better please do correct me.
I started out with a Redhat 7 system, so it has a 2.2 kernel and glibc 2.1. Since then I've been doing most of my upgrades by compiling sources (its a lot more work and lot messier, but you get to learn a lot more then by just installing RPMs!)
Once I got the drivers and other kernel configuration paramaters right, I had no trouble at all. glibc worked just fine with the new kernel. My guess is that glibc talks to the kernel through traps/interrupts so unless there's a drastic change in the interface glibc wouldn't mind... and the kernel developers won't break binary compatibility unless there's an overwhelmingly strong reason to do so.
My conclusion, kernels can be upgraded pretty painlessly.
Glibc was another matter. I installed glibc 2.2.3 with the prefix /usr/local (the default) and everything seemed fine. But when I later upgraded to 2.2.5 things went nuts. I don't know what I did, but somehow the linker (ld-linux) couldn't find glibc 2.2.3 so everything I'd compiled on my system failed. When I copied ld-2.2.3.so to /lib hoping it would be found there, all of redhat's stuff (cp, ls etc!!!) stopped working. I had to boot from the rescue CD to fix that. Ultimately I ended up compiling both the glibc 2.2.3 and 2.2.5 and installing them both with /usr prefix, and everything's been working fine ever since.
My conclusion, upgrading glibc can break your system totally if you don't know that you're doing!
However there's one thing you should know... the kernel doesn't need to find glibc while its being compiled... its the other way around. Glibc is a C-callable interface to ther kernel services.
If you also want to upgrade GCC you might want to do it before glibc... the quality of code produced by the compiler won't depend much on the version of libc used by the compiler, but compiling glibc with the latest gcc might help take advantages of the latest features and optimizations.
However, use kgcc rather than gcc 3.x to compile the kernel. I remember getting a horribly broken kernel when I compiled it with 3.0.1 (iirc)