This flag is named after the environment variable LD_ASSUME_KERNEL used by ld-linix.
Here is an excellent article written by Ulrich Drepper on LD_ASSUME_KERNEL: Explaining LD_ASSUME_KERNEL
In short: if there are a number of kernel-dependent libraries installed (such as libc, libpthread, etc.), then LD_ASSUME_KERNEL (and --ld_assume_kernel) allows us to choose which one to use. For example, let's try to run ldd on Fedora Core 3 x86 system with different values for LD_ASSUME_KERNEL:
$ ldd /bin/dd linux-gate.so.1 => (0x00ba6000) libc.so.6 => /lib/tls/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x00b40000)
$ LD_ASSUME_KERNEL=2.4.19 ldd /bin/dd linux-gate.so.1 => (0x00980000) libc.so.6 => /lib/i686/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x00b40000)
$ LD_ASSUME_KERNEL=2.4.0 ldd /bin/dd linux-gate.so.1 => (0x009a6000) libc.so.6 => /lib/libc.so.6 (0x0081d000) /lib/ld-linux.so.2 (0x00b40000)
Different LD_ASSUME_KERNEL values will make the program use different libc:
- /lib/tls/libc.so.6
- /lib/i686/libc.so.6
- /lib/libc.so.6
And now run ldconfig:
$ /sbin/ldconfig -p | grep libc.so.6 libc.so.6 (libc6, hwcap: 0x8000000000000000, OS ABI: Linux 2.4.20) => /lib/tls/libc.so.6 libc.so.6 (libc6, hwcap: 0x8000000000000, OS ABI: Linux 2.4.1) => /lib/i686/libc.so.6 libc.so.6 (libc6, OS ABI: Linux 2.2.5) => /lib/libc.so.6
In the example above LD_ASSUME_KERNEL can change the minimal required kernel from 2.4.20 to 2.2.5
If there are a number of libc libraries installed, the --ld_assume_kernel flag can be used to allow running the Ermine-packed application with older kernels. There is no point using this flag if there is only one libc.
