Comment Re:Thanks to the Humble Bundle (Score 1) 192
ELF binaries in linux have what is called an interpreter in the header. It's a binary that the kernel actually loads to setup the ELF in memory before execution. That binary is responsible for the start-time aspect of run-time linking (setup the delayed-load tables, GOT, PLT, etc.)
For 32-bit binaries, the 32-bit loader is specified as the interpreter (at compile time), for 64-bit binaries, the 64-bit loader is.
The loaders maintain caches of what libraries of what architecture are where, this cache is loaded every time the loader is fired off by the kernel to setup an ELF program for execution. There is no trying to load different loaders or libraries from different architectures. It just doesn't work that way.
Context switches between long-mode and protected-mode code are not any more expensive (practically speaking) than homogenous context switches. This has all been profiled. If SGI offered the ability to not support 32-bit userspace code at the kernel level (certainly doesn't matter at the kernel level- it's not like people are allowed to jump into the kernel.) it was likely because of an architectural nightmare like their 64-bit kernel running on the Itanic.