Можно ли отключить vdso на стороне glibc?
Я знаю, что передача vdso=0 в ядро может отключить эту функцию, и что динамический компоновщик в glibc может автоматически обнаруживать и использовать функцию vdso из ядра.
Здесь я встретился с этой проблемой. В моем учреждении есть окно RHEL 5.6 (ядро 2.6.18-238.el5), где у меня есть только обычный пользовательский доступ, вероятно, с ошибкой RHEL 673616.
Когда я скомпилировал набор инструментов из linux-headers-3.9/gcc-4.7.2/glibc-2.17/binutils-2.23 поверх него, gcc bootstrap завершился ошибкой в cc1 на этапе 2, и не может быть запущен
Program received signal SIGSEGV, Segmentation fault.
0x00002aaaaaaca6eb in ?? ()
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0x00002aaaaaaabba0 0x00002aaaaaac3249 Yes (*) /home/benda/gnto/lib64/ld-linux-x86-64.so.2
0x00002aaaaacd29b0 0x00002aaaaace2480 Yes (*) /home/benda/gnto/usr/lib/libmpc.so.3
0x00002aaaaaef2cd0 0x00002aaaaaf36c08 Yes (*) /home/benda/gnto/usr/lib/libmpfr.so.4
0x00002aaaab14f280 0x00002aaaab19b658 Yes (*) /home/benda/gnto/usr/lib/libgmp.so.10
0x00002aaaab3b3060 0x00002aaaab3b3b50 Yes (*) /home/benda/gnto/lib/libdl.so.2
0x00002aaaab5b87b0 0x00002aaaab5c4bb0 Yes (*) /home/benda/gnto/usr/lib/libz.so.1
0x00002aaaab7d0e70 0x00002aaaab80f62c Yes (*) /home/benda/gnto/lib/libm.so.6
0x00002aaaaba70d40 0x00002aaaabb81aec Yes (*) /home/benda/gnto/lib/libc.so.6
(*): Shared library is missing debugging information.
и простая программа
#include <sys/time.h>
#include <stdio.h>
int main () {
struct timeval tim;
gettimeofday(&tim, NULL);
return 0;
}
получить ошибку сегмента таким же образом, если она скомпилирована для glibc-2.17 и xgcc из stage1.
Как cc1, так и тестовая программа могут быть запущены на другом компьютере под управлением RHEL 5.5 (ядро 2.6.18-194.26.1.el5) с gcc-4.7.2 / glibc-2.17 / binutils-2.23 от имени обычного пользователя.
Я не могу просто обновить коробку до более новой версии RHEL, и при этом я не могу выключить VDSO через sysctl или proc. Вопрос в том, есть ли способ скомпилировать glibc, чтобы он безоговорочно отключал VDSO?