1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/ 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- The core dispatch loop, for jumping to a code address. ---*/ 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- dispatch-x86-linux.S ---*/ 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/ 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown This file is part of Valgrind, a dynamic binary instrumentation 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown framework. 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 11663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Copyright (C) 2000-2012 Julian Seward 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jseward@acm.org 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown This program is free software; you can redistribute it and/or 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown modify it under the terms of the GNU General Public License as 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown published by the Free Software Foundation; either version 2 of the 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown License, or (at your option) any later version. 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown This program is distributed in the hope that it will be useful, but 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown WITHOUT ANY WARRANTY; without even the implied warranty of 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown General Public License for more details. 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown You should have received a copy of the GNU General Public License 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown along with this program; if not, write to the Free Software 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 02111-1307, USA. 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown The GNU General Public License is contained in the file COPYING. 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/ 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined(VGP_x86_linux) 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "pub_core_basics_asm.h" 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "pub_core_dispatch_asm.h" 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "pub_core_transtab_asm.h" 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "libvex_guest_offsets.h" /* for OFFSET_x86_EIP */ 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*------------------------------------------------------------*/ 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- ---*/ 42663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- The dispatch loop. VG_(disp_run_translations) is ---*/ 43663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- used to run all translations, ---*/ 44663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- including no-redir ones. ---*/ 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- ---*/ 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*------------------------------------------------------------*/ 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*----------------------------------------------------*/ 49663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- Entry and preamble (set everything up) ---*/ 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*----------------------------------------------------*/ 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* signature: 53663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid VG_(disp_run_translations)( UWord* two_words, 54663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng void* guest_state, 55663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Addr host_addr ); 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/ 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown.text 58663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.globl VG_(disp_run_translations) 59663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.type VG_(disp_run_translations), @function 60663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_run_translations): 61663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 0(%esp) holds our return address. */ 62663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 4(%esp) holds two_words */ 63663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 8(%esp) holds guest_state */ 64663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 12(%esp) holds host_addr */ 65663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 66663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* The preamble */ 67663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 68663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Save integer registers, since this is a pseudo-function. */ 69663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng pushl %eax 70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %ebx 71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %ecx 72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %edx 73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %esi 74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %edi 75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %ebp 76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 77663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 28+4(%esp) holds two_words */ 78663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 28+8(%esp) holds guest_state */ 79663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 28+12(%esp) holds host_addr */ 80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 81663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Get the host CPU in the state expected by generated code. */ 82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* set host FPU control word to the default mode expected 84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown by VEX-generated code. See comments in libvex.h for 85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown more info. */ 86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown finit 87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $0x027F 88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fldcw (%esp) 89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown addl $4, %esp 90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* set host SSE control word to the default mode expected 92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown by VEX-generated code. */ 93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cmpl $0, VG_(machine_x86_have_mxcsr) 94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jz L1 95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $0x1F80 96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ldmxcsr (%esp) 97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown addl $4, %esp 98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownL1: 99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* set dir flag to known value */ 100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cld 101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 102663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Set up the guest state pointer */ 103663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl 28+8(%esp), %ebp 104663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 105663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* and jump into the code cache. Chained translations in 106663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng the code cache run, until for whatever reason, they can't 107663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng continue. When that happens, the translation in question 108663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng will jump (or call) to one of the continuation points 109663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng VG_(cp_...) below. */ 110663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmpl *28+12(%esp) 111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /*NOTREACHED*/ 112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*----------------------------------------------------*/ 114663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- Postamble and exit. ---*/ 115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*----------------------------------------------------*/ 116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 117663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengpostamble: 118663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* At this point, %eax and %edx contain two 119663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng words to be returned to the caller. %eax 120663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng holds a TRC value, and %edx optionally may 121663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng hold another word (for CHAIN_ME exits, the 122663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng address of the place to patch.) */ 123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 124663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* We're leaving. Check that nobody messed with %mxcsr 125663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng or %fpucw. We can't mess with %eax or %edx here as they 126663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng holds the tentative return value, but any others are OK. */ 127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined(ENABLE_INNER) 128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* This check fails for self-hosting, so skip in that case */ 129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $0 130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fstcw (%esp) 131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cmpl $0x027F, (%esp) 132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %esi /* get rid of the word without trashing %eflags */ 133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jnz invariant_violation 134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 135663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng# cmpl $0, VG_(machine_x86_have_mxcsr) 136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jz L2 137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $0 138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown stmxcsr (%esp) 139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown andl $0xFFFFFFC0, (%esp) /* mask out status flags */ 140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cmpl $0x1F80, (%esp) 141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %esi 142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jnz invariant_violation 143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownL2: /* otherwise we're OK */ 144663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp remove_frame 145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browninvariant_violation: 146663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $VG_TRC_INVARIANT_FAILED, %eax 147663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $0, %edx 148663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 149663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengremove_frame: 150663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Stash return values */ 151663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl 28+4(%esp), %edi /* two_words */ 152663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl %eax, 0(%edi) 153663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl %edx, 4(%edi) 154663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Restore int regs and return. */ 155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %ebp 156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %edi 157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %esi 158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %edx 159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %ecx 160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %ebx 161663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng popl %eax 162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ret 163663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 164663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*----------------------------------------------------*/ 165663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- Continuation points ---*/ 166663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*----------------------------------------------------*/ 167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 168663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ------ Chain me to slow entry point ------ */ 169663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.global VG_(disp_cp_chain_me_to_slowEP) 170663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_cp_chain_me_to_slowEP): 171663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* We got called. The return address indicates 172663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng where the patching needs to happen. Collect 173663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng the return address and, exit back to C land, 174663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng handing the caller the pair (Chain_me_S, RA) */ 175663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $VG_TRC_CHAIN_ME_TO_SLOW_EP, %eax 176663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng popl %edx 177663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 5 = movl $VG_(disp_chain_me_to_slowEP), %edx; 178663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 2 = call *%edx */ 179663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng subl $5+2, %edx 180663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp postamble 181663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 182663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ------ Chain me to fast entry point ------ */ 183663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.global VG_(disp_cp_chain_me_to_fastEP) 184663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_cp_chain_me_to_fastEP): 185663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* We got called. The return address indicates 186663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng where the patching needs to happen. Collect 187663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng the return address and, exit back to C land, 188663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng handing the caller the pair (Chain_me_F, RA) */ 189663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $VG_TRC_CHAIN_ME_TO_FAST_EP, %eax 190663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng popl %edx 191663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 5 = movl $VG_(disp_chain_me_to_fastEP), %edx; 192663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 2 = call *%edx */ 193663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng subl $5+2, %edx 194663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp postamble 195663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 196663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ------ Indirect but boring jump ------ */ 197663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.global VG_(disp_cp_xindir) 198663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_cp_xindir): 199663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Where are we going? */ 200663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl OFFSET_x86_EIP(%ebp), %eax 201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 202663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* stats only */ 203663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng addl $1, VG_(stats__n_xindirs_32) 204663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 205663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* try a fast lookup in the translation cache */ 206663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl %eax, %ebx /* next guest addr */ 207663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng andl $VG_TT_FAST_MASK, %ebx /* entry# */ 208663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl 0+VG_(tt_fast)(,%ebx,8), %esi /* .guest */ 209663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl 4+VG_(tt_fast)(,%ebx,8), %edi /* .host */ 210663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng cmpl %eax, %esi 211663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jnz fast_lookup_failed 212663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 213663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Found a match. Jump to .host. */ 214663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp *%edi 215663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng ud2 /* persuade insn decoders not to speculate past here */ 216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 217663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengfast_lookup_failed: 218663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* stats only */ 219663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng addl $1, VG_(stats__n_xindir_misses_32) 220663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 221663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $VG_TRC_INNER_FASTMISS, %eax 222663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $0, %edx 223663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp postamble 224663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 225663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ------ Assisted jump ------ */ 226663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.global VG_(disp_cp_xassisted) 227663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_cp_xassisted): 228663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* %ebp contains the TRC */ 229663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl %ebp, %eax 230663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $0, %edx 231663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp postamble 232663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 233663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ------ Event check failed ------ */ 234663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.global VG_(disp_cp_evcheck_fail) 235663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_cp_evcheck_fail): 236663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $VG_TRC_INNER_COUNTERZERO, %eax 237663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $0, %edx 238663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp postamble 239663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 240663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 241663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.size VG_(disp_run_translations), .-VG_(disp_run_translations) 242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Let the linker know we don't need an executable stack */ 244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown.section .note.GNU-stack,"",@progbits 245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // defined(VGP_x86_linux) 247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/ 249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- end ---*/ 250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/ 251