是否有可能在glibc方面关闭vdso?

时间:2013-07-01 14:03:47

标签: gcc linux-kernel glibc vdso

我知道将vdso = 0传递给内核可以关闭此功能,并且glibc中的动态链接器可以自动检测并使用内核中的vdso功能。

我在这里遇到了这个问题。在我的机构中有一个RHEL 5.6框(内核2.6.18-238.el5),我只有正常的用户访问权限,可能患有RHEL bug 673616

当我在其上编译linux-headers-3.9 / gcc-4.7.2 / glibc-2.17 / binutils-2.23的工具链时,gcc bootstrap在stage2中的cc1失败无法运行

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;
}

如果从stage1编译glibc-2.17和xgcc,则以相同的方式获取段错误。

cc1和测试程序都可以在另一个运行RHEL 5.5(内核2.6.18-194.26.1.el5)上运行,gcc-4.7.2 / glibc-2.17 / binutils-2.23作为普通用户。

我不能简单地将盒子升级到较新的RHEL版本,也不能通过sysctl或proc关闭VDSO。问题是,有没有办法编译glibc,以便无条件关闭VDSO?

1 个答案:

答案 0 :(得分:3)

问题通过simple patch解决。