2013-07-01 3 views
3

커널에 vdso = 0을 전달하면이 기능이 꺼지고 glibc의 동적 링커가 커널에서 vdso 기능을 자동으로 감지하여 사용할 수 있다는 것을 알고 있습니다.glibc에서 vdso를 해제 할 수 있습니까?

여기에서 나는이 문제를 만났다. RHEL 5.6 상자 (커널 2.6.18-238.el5)는 필자의 기관에서 보통 사용자 만 액세스 할 수 있으며 아마도 RHEL bug 673616을 앓고있을 것입니다. 내가 리눅스 헤더 - 3.9 툴체인을 컴파일으로

는/GCC-4.7.2/glibc에-2.17 /의 binutils-2.23 그 위에는 GCC 부트 스트랩은

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. 

를 실행할 수 cannnot 스테이지 2에서 CC1 실패

및 간단한 프로그램 같은 방법으로

#include <sys/time.h> 
#include <stdio.h> 

int main() { 
    struct timeval tim; 
    gettimeofday(&tim, NULL); 
    return 0; 
} 

GET 세그먼트 결함 스테이지 1에서의 glibc-2.17와 xgcc에 대해 컴파일합니다.

일반 사용자로 gcc-4.7.2/glibc-2.17/binutils-2.23을 사용하여 다른 실행중인 RHEL 5.5 (커널 2.6.18-194.26.1.el5)에서 cc1과 테스트 프로그램을 실행할 수 있습니다.

단순히 상자를 최신 RHEL 버전으로 업그레이드 할 수 없으며 sysctl 또는 proc를 통해 VDSO를 해제 할 수도 없습니다. 질문은 glibc를 컴파일하여 무조건 VDSO를 끌 수있는 방법이 있습니까?

답변

3

simple patch으로 문제가 해결되었습니다.

+0

패치 파일을 사용하는 방법을 묻습니다. – ProWi

+0

물론, glibc를 컴파일하기 전에 "patch"로 패치를 적용하십시오. http://jungels.net/articles/diff-patch-ten-minutes.html – heroxbd

관련 문제