diff options
author | dchagin <dchagin@FreeBSD.org> | 2009-05-10 18:43:43 +0000 |
---|---|---|
committer | dchagin <dchagin@FreeBSD.org> | 2009-05-10 18:43:43 +0000 |
commit | 51f122997d95d99a2b0e68444995323789c9da37 (patch) | |
tree | 80f75650b634fefa8d61d026ce4eb87879a7bdf8 /sys/i386/linux | |
parent | e4e6bf246f894df69a22849f9d779e13672a6d83 (diff) | |
download | FreeBSD-src-51f122997d95d99a2b0e68444995323789c9da37.zip FreeBSD-src-51f122997d95d99a2b0e68444995323789c9da37.tar.gz |
Do not export AT_CLKTCK when emulating Linux kernel prior
to 2.4.0, as it has appeared in the 2.4.0-rc7 first time.
Being exported, AT_CLKTCK is returned by sysconf(_SC_CLK_TCK),
glibc falls back to the hard-coded CLK_TCK value when aux entry
is not present.
Glibc versions prior to 2.2.1 always use hard-coded CLK_TCK value.
For older applications/libc's which depends on hard-coded CLK_TCK
value user should set compat.linux.osrelease less than 2.4.0.
Approved by: kib (mentor)
Diffstat (limited to 'sys/i386/linux')
-rw-r--r-- | sys/i386/linux/linux_sysvec.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/i386/linux/linux_sysvec.c b/sys/i386/linux/linux_sysvec.c index 0a3d297..186e14c 100644 --- a/sys/i386/linux/linux_sysvec.c +++ b/sys/i386/linux/linux_sysvec.c @@ -255,7 +255,17 @@ elf_linux_fixup(register_t **stack_base, struct image_params *imgp) pos = *stack_base + (imgp->args->argc + imgp->args->envc + 2); AUXARGS_ENTRY(pos, LINUX_AT_HWCAP, cpu_feature); - AUXARGS_ENTRY(pos, LINUX_AT_CLKTCK, stclohz); + + /* + * Do not export AT_CLKTCK when emulating Linux kernel prior to 2.4.0, + * as it has appeared in the 2.4.0-rc7 first time. + * Being exported, AT_CLKTCK is returned by sysconf(_SC_CLK_TCK), + * glibc falls back to the hard-coded CLK_TCK value when aux entry + * is not present. + * Also see linux_times() implementation. + */ + if (linux_kernver(curthread) >= LINUX_KERNVER_2004000) + AUXARGS_ENTRY(pos, LINUX_AT_CLKTCK, stclohz); AUXARGS_ENTRY(pos, AT_PHDR, args->phdr); AUXARGS_ENTRY(pos, AT_PHENT, args->phent); AUXARGS_ENTRY(pos, AT_PHNUM, args->phnum); |