There are a bunch of problems with the JIT, oddly enough. I think it has to do with the kernel more than the actual code, but the JIT is messy itself as it modifies and runs its own executable code memory (very bad in linux!).
Anyway other things factor in like grsecurity and pax, which disallow running code in the data section of ELF... although even chpax/paxctl don't always work.
The solution is simply to not use the JIT for everything, but if we could find exactly what was causing the segfaults, it would be possible to detect it ahead of time.
It's best to always link same code builds, mixing glibc2-2 and glibc2-3 shared modules is a very bad idea. Maybe that could be part of it.
Anyway HL2 will only work on gcc3 (because certain things changed, like vtable formats) so when HL2 comes out, we're done with 2.2 and gcc 2.95