简体   繁体   English

具有64位内核的vdso gettimeofday和针对32位编译的应用程序

[英]vdso gettimeofday with 64 bit kernel & application compiled for 32 bit

is vdso supported for a 32 bit application which is running on a 64 bit kernel with glibc version 2.15.? 在glibc 2.15版的64位内核上运行的32位应用程序是否支持vdso? If yes, how do I make it work for 32 bit application running on 64 bit kernel.? 如果是,如何使它适用于在64位内核上运行的32位应用程序。 Cause even though dlopen on "linux-vdso.so.1" is success, dlsym on "__vdso_gettimeofday" fails. 原因即使“ linux-vdso.so.1”上的dlopen成功,“ __ vdso_gettimeofday”上的dlsym也失败。

On the same system I able to do a dlopen on "linux-vdso.so.1" & dlsym on "__vdso_gettimeofday" from a application compiled for 64 bit. 在同一系统上,我可以从为64位编译的应用程序在“ linux-vdso.so.1”上执行dlopen,在“ __vdso_gettimeofday”上执行dlsym。

On my 64-bit Linux 4.4.15, the 32-bit vdso has these symbols: 在我的64位Linux 4.4.15上,32位vdso具有以下符号:

readelf -Ws vdso32

Symbol table '.dynsym' contains 9 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000ce0     9 FUNC    GLOBAL DEFAULT   12 __kernel_sigreturn@@LINUX_2.5
     2: 00000d00    13 FUNC    GLOBAL DEFAULT   12 __kernel_vsyscall@@LINUX_2.5
     3: 00000ad0   438 FUNC    GLOBAL DEFAULT   12 __vdso_gettimeofday@@LINUX_2.6
     4: 00000c90    42 FUNC    GLOBAL DEFAULT   12 __vdso_time@@LINUX_2.6
     5: 00000770   853 FUNC    GLOBAL DEFAULT   12 __vdso_clock_gettime@@LINUX_2.6
     6: 00000cf0     8 FUNC    GLOBAL DEFAULT   12 __kernel_rt_sigreturn@@LINUX_2.5
     7: 00000000     0 OBJECT  GLOBAL DEFAULT  ABS LINUX_2.5
     8: 00000000     0 OBJECT  GLOBAL DEFAULT  ABS LINUX_2.6

This suggests that the __vdso_gettimeofday you are looking for has been added in kernel 2.6, and that your kernel version is older. 这表明您要查找的__vdso_gettimeofday已在内核2.6中添加,并且您的内核版本较旧。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM