Linux time()不使用vdso?

Linux time()不使用vdso?,linux,libc,vdso,Linux,Libc,Vdso,我写一个程序,使用time()函数 当我对它进行gdb时: [VM_241_149_tlinux ~/test]$ gdb ./testsys_d -q Reading symbols from /data/home/youngxiao/test/testsys_d...(no debugging symbols found)...done. (gdb) b __GI_time Function "__GI_time" not defined. Make breakpoint

我写一个程序,使用time()函数

当我对它进行gdb时:

[VM_241_149_tlinux ~/test]$ gdb ./testsys_d -q
Reading symbols from /data/home/youngxiao/test/testsys_d...(no debugging symbols found)...done.
(gdb) b __GI_time
Function "__GI_time" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (__GI_time) pending.
(gdb) r
Starting program: /data/home/youngxiao/test/testsys_d 

Breakpoint 1, 0x00007ffff7345770 in time () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.149.tl1.6.x86_64 libgcc-4.4.6-4.tl1.x86_64 libstdc++-4.4.6-4.tl1.x86_64
(gdb) bt
#0  0x00007ffff7345770 in time () from /lib64/libc.so.6
#1  0x0000000000400671 in main ()
(gdb) disass
Dump of assembler code for function time:
=> 0x00007ffff7345770 <+0>:     sub    $0x8,%rsp
   0x00007ffff7345774 <+4>:     mov    $0xffffffffff600400,%rax
   0x00007ffff734577b <+11>:    callq  *%rax
   0x00007ffff734577d <+13>:    add    $0x8,%rsp
   0x00007ffff7345781 <+17>:    retq   
End of assembler dump.

ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
[VM_241_149_tlinux~/test]$gdb./testsys\u d-q
正在从/data/home/youngxiao/test/testsys\u d…读取符号(未找到调试符号)…已完成。
(gdb)b___GI_时间
未定义函数“\u GI\u time”。
是否在将来加载共享库时使断点挂起?(y或[n])y
断点1(GI时间)挂起。
(gdb)r
启动程序:/data/home/youngxiao/test/testsys\u d
/lib64/libc.so.6中的时间()断点1 0x00007ffff7345770
缺少单独的调试信息,请使用:debuginfo安装glibc-2.12-1.149.tl1.6.x86_64 libgcc-4.4.6-4.tl1.x86_64 libstdc++-4.4.6-4.tl1.x86_64
(gdb)英国电信
#/lib64/libc.so.6中的0 0x00007FF7345770
#1 0x0000000000400671位于主()
(gdb)disass
函数时间的汇编程序代码转储:
=>0x00007FF7345770:sub$0x8,%rsp
0x00007ffff7345774:mov$0xffffffffff600400,%rax
0x00007FF734577B:callq*%rax
0x00007FF734577D:添加$0x8,%rsp
0x00007ffff7345781:retq
汇编程序转储结束。
ffffffffff600000-ffffffffff601000 r-xp 00000000:00 0[vsyscall]
我们可以看到time()使用vsyscall,而不是使用vdso,为什么

我还测试了gettimeofday(),它使用vdso