]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Move the replacement code for the amd64 vsyscalls into the trampoline page
authorTom Hughes <tom@compton.nu>
Mon, 2 May 2005 10:28:42 +0000 (10:28 +0000)
committerTom Hughes <tom@compton.nu>
Mon, 2 May 2005 10:28:42 +0000 (10:28 +0000)
so that it is copied into the client space. This avoid warnings from memcheck
because it doesn't think that code inside valgrind is valid.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3591

coregrind/amd64-linux/core_platform.c
coregrind/amd64/helpers.S
coregrind/core.h

index 1c93ec7d5da197a2f11bc2fe8b335e765837d491..d420b839fb536f0e732a6ef48d2f3eb51acb2763 100644 (file)
@@ -1,28 +1,10 @@
 #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));
 }
index fa1d63d7b79f6fbcc78e62a21c382605109c94e2..a7609b1b1d58bf0bfc16139d2b8f5a755b2cf892 100644 (file)
@@ -46,6 +46,8 @@
 .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:
@@ -58,6 +60,18 @@ 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
@@ -67,6 +81,10 @@ VG_(tramp_rt_sigreturn_offset):
        .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
 
 
index 55e0bf6176dbd082b2aa15e7a28fa06e6ae36669..fe8d36abe2ba7f5c37f364c165af678e69aa755a 100644 (file)
@@ -1509,6 +1509,8 @@ extern const Int  VG_(trampoline_code_length);
 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