#include "core.h"
-/* Rerouted entry point for __NR_gettimeofday */
-static void amd64_linux_rerouted__vgettimeofday(void)
-{
-asm(
-" movq $96, %rax\n"
-" syscall\n"
-);
-}
-
-/* Rerouted entry point for __NR_time */
-static void amd64_linux_rerouted__vtime(void)
-{
-asm(
-" movq $201, %rax\n"
-" syscall\n"
-);
-}
-
void VGP_(setup_redirects)(void)
{
/* Redirect vsyscalls to local versions */
VG_(add_redirect_addr_to_addr)(0xFFFFFFFFFF600000ULL,
- (Addr)amd64_linux_rerouted__vgettimeofday);
+ VG_(client_trampoline_code)+VG_(tramp_gettimeofday_offset));
VG_(add_redirect_addr_to_addr)(0xFFFFFFFFFF600400ULL,
- (Addr)amd64_linux_rerouted__vtime);
+ VG_(client_trampoline_code)+VG_(tramp_time_offset));
}
.global VG_(trampoline_code_length)
.global VG_(tramp_rt_sigreturn_offset)
.global VG_(tramp_syscall_offset)
+.global VG_(tramp_gettimeofday_offset)
+.global VG_(tramp_time_offset)
VG_(trampoline_code_start):
rt_sigreturn_start:
.align 16
syscall_start:
/* unused on amd64 */
+
+ .align 16
+gettimeofday_start:
+ movq $__NR_gettimeofday, %rax
+ syscall
+ ret
+
+ .align 16
+time_start:
+ movq $__NR_time, %rax
+ syscall
+ ret
tramp_code_end:
.data
.long rt_sigreturn_start - VG_(trampoline_code_start)
VG_(tramp_syscall_offset):
.long syscall_start - VG_(trampoline_code_start)
+VG_(tramp_gettimeofday_offset):
+ .long gettimeofday_start - VG_(trampoline_code_start)
+VG_(tramp_time_offset):
+ .long time_start - VG_(trampoline_code_start)
.text
extern const Int VG_(tramp_sigreturn_offset);
extern const Int VG_(tramp_rt_sigreturn_offset);
extern const Int VG_(tramp_syscall_offset);
+extern const Int VG_(tramp_gettimeofday_offset);
+extern const Int VG_(tramp_time_offset);
/* ---------------------------------------------------------------------
Things relating to the used tool