vdso gettimeofday с 64-битным ядром и приложением, скомпилированным для 32-битного
Поддерживается ли vdso для 32-битного приложения, работающего на 64-битном ядре с версией glibc 2.15? Если да, как я могу заставить его работать для 32-битного приложения, работающего на 64-битном ядре? Причина, даже если dlopen на "linux-vdso.so.1" является успешным, dlsym на "__vdso_gettimeofday" завершается ошибкой.
В той же системе я смог создать dlopen для "linux-vdso.so.1" и dlsym для "__vdso_gettimeofday" из приложения, скомпилированного для 64-битной системы.
1 ответ
На моем 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
Это говорит о том, что __vdso_gettimeofday
вы ищете, было добавлено в ядре 2.6, и что ваша версия ядра старше.