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.