Можно ли отключить 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?

1 ответ

Решение

Проблема решается с помощью простого патча.

Другие вопросы по тегам