]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Moved the code trampoline stuff into a new module, m_trampoline. Not
authorNicholas Nethercote <njn@valgrind.org>
Sat, 18 Jun 2005 03:27:58 +0000 (03:27 +0000)
committerNicholas Nethercote <njn@valgrind.org>
Sat, 18 Jun 2005 03:27:58 +0000 (03:27 +0000)
certain this was the right thing to do, but that stuff sure as hell
didn't fit in any of the existing modules.

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

12 files changed:
coregrind/Makefile.am
coregrind/amd64/Makefile.am
coregrind/amd64/helpers.S [deleted file]
coregrind/core.h
coregrind/m_main.c
coregrind/m_redir.c
coregrind/m_sigframe/sigframe-amd64-linux.c
coregrind/m_sigframe/sigframe-x86-linux.c
coregrind/m_stacktrace.c
coregrind/m_trampoline.S [moved from coregrind/x86/helpers.S with 70% similarity]
coregrind/pub_core_trampoline.h [new file with mode: 0644]
coregrind/x86/Makefile.am

index 3ba22e22d3abb16d6f2c2ff297c7349d599986a0..2f951107d96915a48654146d4a9a5de8c29312ed 100644 (file)
@@ -70,6 +70,7 @@ noinst_HEADERS = \
        pub_core_syswrap.h      \
        pub_core_threadmodel.h  \
        pub_core_tooliface.h    \
+       pub_core_trampoline.h   \
        pub_core_translate.h    \
        pub_core_transtab.h     \
        pub_core_transtab_asm.h \
@@ -118,6 +119,7 @@ stage2_SOURCES = \
        m_syscall.c \
        m_threadmodel.c \
        m_tooliface.c \
+       m_trampoline.S \
        m_translate.c \
        m_transtab.c \
        \
index c547581f5c1df612b7894a4afa582ca4a3136deb..ccbe24491bb933c66fb82b562e17784eb8e539e6 100644 (file)
@@ -11,7 +11,6 @@ CLEANFILES = stage2.lds
 
 libarch_a_SOURCES = \
        cpuid.S \
-       helpers.S \
        jmp_with_stack.c \
        state.c
 
diff --git a/coregrind/amd64/helpers.S b/coregrind/amd64/helpers.S
deleted file mode 100644 (file)
index a7609b1..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-##--------------------------------------------------------------------##
-##--- Support routines for the JITter output.      amd64/helpers.S ---##
-##--------------------------------------------------------------------##
-
-/*
-  This file is part of Valgrind, a dynamic binary instrumentation
-  framework.
-
-  Copyright (C) 2000-2005 Julian Seward 
-     jseward@acm.org
-
-  This program is free software; you can redistribute it and/or
-  modify it under the terms of the GNU General Public License as
-  published by the Free Software Foundation; either version 2 of the
-  License, or (at your option) any later version.
-
-  This program is distributed in the hope that it will be useful, but
-  WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-  02111-1307, USA.
-
-  The GNU General Public License is contained in the file COPYING.
-*/
-
-#include "core_asm.h"
-#include "vki_unistd.h"
-
-/* ------------------ SIMULATED CPU HELPERS ------------------ */
-/* A stubs for a return which we want to catch: a signal return.
-   returns and pthread returns.  In the latter case, the thread's
-   return value is in %EAX, so we pass this as the first argument
-   to the request.  In both cases we use the user request mechanism.
-   You need to to read the definition of VALGRIND_MAGIC_SEQUENCE
-   in valgrind.h to make sense of this.
-
-   This isn't used in-place.  It is copied into the client address space
-   at an arbitary address.  Therefore, this code must be completely
-   position-independent.
-*/
-.global VG_(trampoline_code_start)
-.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:
-        /* Likewise for rt signal frames */
-        movq    $__NR_rt_sigreturn, %rax
-        syscall
-        ud2
-
-       # We can point our sysinfo stuff here
-       .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
-VG_(trampoline_code_length):
-       .long tramp_code_end - VG_(trampoline_code_start)
-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
-
-
-/* Let the linker know we don't need an executable stack */
-.section .note.GNU-stack,"",@progbits
-               
-##--------------------------------------------------------------------##
-##--- end                                                          ---##
-##--------------------------------------------------------------------##
index 93d96c51e4167420a3ac462dba1c043af33329b7..59f7c8c12ce2a4dd807958b195babf030b2c717b 100644 (file)
 
 #include "pub_core_scheduler.h"   // for types 'ThreadArchState'
 
-/* ---------------------------------------------------------------------
-   Exports of vg_helpers.S
-   ------------------------------------------------------------------ */
-
-/* Information about trampoline code (for signal return and syscalls) */
-extern const Char VG_(trampoline_code_start);
-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);
 // ---------------------------------------------------------------------
 // Architecture-specific things defined in eg. x86/*.c
 // ---------------------------------------------------------------------
index ddac412798eac5a8884917a73a8f2b7e5baa98ca..702df4732537e53a8af6a1563eb136c4645dc9c9 100644 (file)
@@ -52,6 +52,7 @@
 #include "pub_core_signals.h"
 #include "pub_core_syswrap.h"
 #include "pub_core_tooliface.h"
+#include "pub_core_trampoline.h"
 #include "pub_core_transtab.h"
 
 #include <dirent.h>
index 1d2f296099c33d39af299dd6781ac4d6d9b7b071..3d5988caa8379ce323cc506ed16f7a7fd4809c41 100644 (file)
@@ -40,6 +40,7 @@
 #include "pub_core_options.h"
 #include "pub_core_redir.h"
 #include "pub_core_skiplist.h"
+#include "pub_core_trampoline.h"
 #include "pub_core_transtab.h"
 #include "m_debuginfo/priv_symtab.h"  // XXX: bad!
 
index e5d12cd070c7236601508e8ea3ef9203a9160ac6..6d0780e2b4dab015ada492bbb5e9cf8edc1b8b02 100644 (file)
@@ -39,6 +39,7 @@
 #include "pub_core_sigframe.h"
 #include "pub_core_signals.h"
 #include "pub_core_tooliface.h"
+#include "pub_core_trampoline.h"
 
 #include "libvex_guest_amd64.h"
 
index cdd4364a9c44493fbf5d13317561cbb9f38a967a..60006575eb4e605d818e8194f9cd0da92147ee42 100644 (file)
@@ -39,6 +39,7 @@
 #include "pub_core_sigframe.h"
 #include "pub_core_signals.h"
 #include "pub_core_tooliface.h"
+#include "pub_core_trampoline.h"
 
 #include "libvex_guest_x86.h"
 
index 8847e0e5bb1ca9912dbe2b0500e5d6f85b8f3a1b..2f5fb83147253b15469a7c7cea2b22c5d213140d 100644 (file)
@@ -37,6 +37,7 @@
 #include "pub_core_options.h"
 #include "pub_core_profile.h"
 #include "pub_core_stacktrace.h"
+#include "pub_core_trampoline.h"
 
 /*------------------------------------------------------------*/
 /*--- Exported functions.                                  ---*/
similarity index 70%
rename from coregrind/x86/helpers.S
rename to coregrind/m_trampoline.S
index 354103087f6247689eef27b33705bcf42f814e60..7b07660f917146b8c18637be4e3d67ac85bddb7a 100644 (file)
@@ -1,5 +1,6 @@
+
 ##--------------------------------------------------------------------##
-##--- Support routines for the JITter output.        x86/helpers.S ---##
+##--- Trampoline code page stuff.                   m_trampoline.S ---##
 ##--------------------------------------------------------------------##
 
 /*
 #include "vki_unistd.h"
 
 /* ------------------ SIMULATED CPU HELPERS ------------------ */
-/* A stubs for a return which we want to catch: a signal return.
-   returns and pthread returns.  In the latter case, the thread's
-   return value is in %EAX, so we pass this as the first argument
-   to the request.  In both cases we use the user request mechanism.
-   You need to to read the definition of VALGRIND_MAGIC_SEQUENCE
-   in valgrind.h to make sense of this.
-
-   This isn't used in-place.  It is copied into the client address space
-   at an arbitary address.  Therefore, this code must be completely
+/* Stubs for returns which we want to catch.
+   This code isn't used in-place.  It is copied into the client address
+   space at an arbitary address.  Therefore, this code must be completely
    position-independent.
 */
 .global VG_(trampoline_code_start)
@@ -49,7 +44,8 @@
 .global VG_(tramp_syscall_offset)
        
 VG_(trampoline_code_start):
-sigreturn_start:
+#if defined(VGP_x86_linux)
+    sigreturn_start:
         /* This is a very specific sequence which GDB uses to
            recognize signal handler frames. */
         popl    %eax
@@ -57,7 +53,7 @@ sigreturn_start:
         int     $0x80
         ud2
 
-rt_sigreturn_start:
+    rt_sigreturn_start:
         /* Likewise for rt signal frames */
         movl    $__NR_rt_sigreturn, %eax
         int     $0x80
@@ -65,9 +61,41 @@ rt_sigreturn_start:
 
        # We can point our sysinfo stuff here
        .align 16
-syscall_start: 
+    syscall_start:     
        int     $0x80
        ret
+
+    gettimeofday_start:
+    time_start:
+       /* unused on x86 */
+
+#elif defined(VGP_amd64_linux)
+    rt_sigreturn_start:
+        /* Likewise for rt signal frames */
+        movq    $__NR_rt_sigreturn, %rax
+        syscall
+        ud2
+
+        .align 16
+    gettimeofday_start:
+        movq    $__NR_gettimeofday, %rax
+        syscall
+        ret
+
+        .align 16
+    time_start:
+        movq    $__NR_time, %rax
+        syscall
+        ret
+
+       .align 16
+    sigreturn_start:
+    syscall_start:
+       /* unused on amd64 */
+
+#else
+#      error Unknown platform
+#endif
 tramp_code_end:
                        
 .data
@@ -79,6 +107,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
 
 
diff --git a/coregrind/pub_core_trampoline.h b/coregrind/pub_core_trampoline.h
new file mode 100644 (file)
index 0000000..50c40f8
--- /dev/null
@@ -0,0 +1,56 @@
+
+/*--------------------------------------------------------------------*/
+/*--- The trampoline code page.              pub_core_trampoline.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2000-2005 Julian Seward
+      jseward@acm.org
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __PUB_CORE_TRAMPOLINE_H
+#define __PUB_CORE_TRAMPOLINE_H
+
+//--------------------------------------------------------------------
+// PURPOSE: This module defines our trampoline code page, which we copy
+// over the client's, for arcane signal return and syscall purposes...
+//--------------------------------------------------------------------
+
+// Platform-specifics aren't neatly factored out here, since some of the
+// constants are not used on all platforms.  But it's non-obvious how
+// to do it better.
+
+extern const Char VG_(trampoline_code_start);      // x86 + amd64
+extern const Int  VG_(trampoline_code_length);     // x86 + amd64
+
+extern const Int  VG_(tramp_sigreturn_offset);     // x86
+extern const Int  VG_(tramp_rt_sigreturn_offset);  // x86 + amd64
+extern const Int  VG_(tramp_syscall_offset);       // x86
+extern const Int  VG_(tramp_gettimeofday_offset);  // amd64
+extern const Int  VG_(tramp_time_offset);          // amd64
+#endif   // __PUB_CORE_TRAMPOLINE_H
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
index d4438ebc4a3f5d418d126df2f11021b954d81f31..6a698dfe2c5676f33bdc3d9f834306dd9d74c251 100644 (file)
@@ -11,7 +11,6 @@ CLEANFILES = stage2.lds
 
 libarch_a_SOURCES = \
        cpuid.S \
-       helpers.S \
        jmp_with_stack.c \
        state.c