18eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 28eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--------------------------------------------------------------------*/ 38eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--- The core dispatch loop, for jumping to a code address. ---*/ 48eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--- dispatch-amd64-solaris.S ---*/ 58eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--------------------------------------------------------------------*/ 68eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 78eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/* 88eb8bab992e3998c33770b0cdb16059a8b918a06sewardj This file is part of Valgrind, a dynamic binary instrumentation 98eb8bab992e3998c33770b0cdb16059a8b918a06sewardj framework. 108eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 11b3a1e4bffbdbbf38304f216af405009868f43628sewardj Copyright (C) 2000-2015 Julian Seward 128eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jseward@acm.org 138eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 148eb8bab992e3998c33770b0cdb16059a8b918a06sewardj This program is free software; you can redistribute it and/or 158eb8bab992e3998c33770b0cdb16059a8b918a06sewardj modify it under the terms of the GNU General Public License as 168eb8bab992e3998c33770b0cdb16059a8b918a06sewardj published by the Free Software Foundation; either version 2 of the 178eb8bab992e3998c33770b0cdb16059a8b918a06sewardj License, or (at your option) any later version. 188eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 198eb8bab992e3998c33770b0cdb16059a8b918a06sewardj This program is distributed in the hope that it will be useful, but 208eb8bab992e3998c33770b0cdb16059a8b918a06sewardj WITHOUT ANY WARRANTY; without even the implied warranty of 218eb8bab992e3998c33770b0cdb16059a8b918a06sewardj MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 228eb8bab992e3998c33770b0cdb16059a8b918a06sewardj General Public License for more details. 238eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 248eb8bab992e3998c33770b0cdb16059a8b918a06sewardj You should have received a copy of the GNU General Public License 258eb8bab992e3998c33770b0cdb16059a8b918a06sewardj along with this program; if not, write to the Free Software 268eb8bab992e3998c33770b0cdb16059a8b918a06sewardj Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 278eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 02111-1307, USA. 288eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 298eb8bab992e3998c33770b0cdb16059a8b918a06sewardj The GNU General Public License is contained in the file COPYING. 308eb8bab992e3998c33770b0cdb16059a8b918a06sewardj*/ 318eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 323f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian#include "pub_core_basics_asm.h" 333f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian 348eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#if defined(VGP_amd64_solaris) 358eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 368eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#include "pub_core_dispatch_asm.h" 378eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#include "pub_core_transtab_asm.h" 388eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#include "libvex_guest_offsets.h" /* for OFFSET_amd64_RIP */ 398eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 408eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 418eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*------------------------------------------------------------*/ 428eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--- ---*/ 438eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--- The dispatch loop. VG_(disp_run_translations) is ---*/ 448eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--- used to run all translations, ---*/ 458eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--- including no-redir ones. ---*/ 468eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--- ---*/ 478eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*------------------------------------------------------------*/ 488eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 498eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*----------------------------------------------------*/ 508eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--- Entry and preamble (set everything up) ---*/ 518eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*----------------------------------------------------*/ 528eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 538eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/* signature: 548eb8bab992e3998c33770b0cdb16059a8b918a06sewardjvoid VG_(disp_run_translations)( UWord* two_words, 558eb8bab992e3998c33770b0cdb16059a8b918a06sewardj void* guest_state, 568eb8bab992e3998c33770b0cdb16059a8b918a06sewardj Addr host_addr ); 578eb8bab992e3998c33770b0cdb16059a8b918a06sewardj*/ 588eb8bab992e3998c33770b0cdb16059a8b918a06sewardj.text 598eb8bab992e3998c33770b0cdb16059a8b918a06sewardj.globl VG_(disp_run_translations) 608eb8bab992e3998c33770b0cdb16059a8b918a06sewardj.type VG_(disp_run_translations), @function 618eb8bab992e3998c33770b0cdb16059a8b918a06sewardjVG_(disp_run_translations): 628eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* %rdi holds two_words */ 638eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* %rsi holds guest_state */ 648eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* %rdx holds host_addr */ 658eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 668eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* The preamble */ 678eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 688eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* Save integer registers, since this is a pseudo-function. */ 698eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %rax 708eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %rbx 718eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %rcx 728eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %rdx 738eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %rsi 748eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %rbp 758eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %r8 768eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %r9 778eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %r10 788eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %r11 798eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %r12 808eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %r13 818eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %r14 828eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %r15 838eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* %rdi must be saved last */ 848eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq %rdi 858eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 868eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* Get the host CPU in the state expected by generated code. */ 878eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 888eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* set host FPU control word to the default mode expected 898eb8bab992e3998c33770b0cdb16059a8b918a06sewardj by VEX-generated code. See comments in libvex.h for 908eb8bab992e3998c33770b0cdb16059a8b918a06sewardj more info. */ 918eb8bab992e3998c33770b0cdb16059a8b918a06sewardj finit 928eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq $0x027F 938eb8bab992e3998c33770b0cdb16059a8b918a06sewardj fldcw (%rsp) 948eb8bab992e3998c33770b0cdb16059a8b918a06sewardj addq $8, %rsp 958eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 968eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* set host SSE control word to the default mode expected 978eb8bab992e3998c33770b0cdb16059a8b918a06sewardj by VEX-generated code. */ 988eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq $0x1F80 998eb8bab992e3998c33770b0cdb16059a8b918a06sewardj ldmxcsr (%rsp) 1008eb8bab992e3998c33770b0cdb16059a8b918a06sewardj addq $8, %rsp 1018eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1028eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* set dir flag to known value */ 1038eb8bab992e3998c33770b0cdb16059a8b918a06sewardj cld 1048eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1058eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* Set up the guest state pointer */ 1068eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq %rsi, %rbp 1078eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1088eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* and jump into the code cache. Chained translations in 1098eb8bab992e3998c33770b0cdb16059a8b918a06sewardj the code cache run, until for whatever reason, they can't 1108eb8bab992e3998c33770b0cdb16059a8b918a06sewardj continue. When that happens, the translation in question 1118eb8bab992e3998c33770b0cdb16059a8b918a06sewardj will jump (or call) to one of the continuation points 1128eb8bab992e3998c33770b0cdb16059a8b918a06sewardj VG_(cp_...) below. */ 1138eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jmpq *%rdx 1148eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /*NOTREACHED*/ 1158eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1168eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*----------------------------------------------------*/ 1178eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--- Postamble and exit. ---*/ 1188eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*----------------------------------------------------*/ 1198eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1208eb8bab992e3998c33770b0cdb16059a8b918a06sewardjpostamble: 1218eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* At this point, %rax and %rdx contain two 1228eb8bab992e3998c33770b0cdb16059a8b918a06sewardj words to be returned to the caller. %rax 1238eb8bab992e3998c33770b0cdb16059a8b918a06sewardj holds a TRC value, and %rdx optionally may 1248eb8bab992e3998c33770b0cdb16059a8b918a06sewardj hold another word (for CHAIN_ME exits, the 1258eb8bab992e3998c33770b0cdb16059a8b918a06sewardj address of the place to patch.) */ 1268eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1278eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* We're leaving. Check that nobody messed with %mxcsr 1288eb8bab992e3998c33770b0cdb16059a8b918a06sewardj or %fpucw. We can't mess with %rax or %rdx here as they 1298eb8bab992e3998c33770b0cdb16059a8b918a06sewardj hold the tentative return values, but any others are OK. */ 1308eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#if !defined(ENABLE_INNER) 1318eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* This check fails for self-hosting, so skip in that case */ 1328eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq $0 1338eb8bab992e3998c33770b0cdb16059a8b918a06sewardj fstcw (%rsp) 1348eb8bab992e3998c33770b0cdb16059a8b918a06sewardj cmpl $0x027F, (%rsp) 1358eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %r15 /* get rid of the word without trashing %rflags */ 1368eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jnz invariant_violation 1378eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#endif 1388eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pushq $0 1398eb8bab992e3998c33770b0cdb16059a8b918a06sewardj stmxcsr (%rsp) 1408eb8bab992e3998c33770b0cdb16059a8b918a06sewardj andl $0xFFFFFFC0, (%rsp) /* mask out status flags */ 1418eb8bab992e3998c33770b0cdb16059a8b918a06sewardj cmpl $0x1F80, (%rsp) 1428eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %r15 1438eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jnz invariant_violation 1448eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* otherwise we're OK */ 1458eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jmp remove_frame 1468eb8bab992e3998c33770b0cdb16059a8b918a06sewardjinvariant_violation: 1478eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq $VG_TRC_INVARIANT_FAILED, %rax 1488eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq $0, %rdx 1498eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1508eb8bab992e3998c33770b0cdb16059a8b918a06sewardjremove_frame: 1518eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* Pop %rdi, stash return values */ 1528eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %rdi 1538eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq %rax, 0(%rdi) 1548eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq %rdx, 8(%rdi) 1558eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* Now pop everything else */ 1568eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %r15 1578eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %r14 1588eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %r13 1598eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %r12 1608eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %r11 1618eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %r10 1628eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %r9 1638eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %r8 1648eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %rbp 1658eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %rsi 1668eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %rdx 1678eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %rcx 1688eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %rbx 1698eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %rax 1708eb8bab992e3998c33770b0cdb16059a8b918a06sewardj ret 1718eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1728eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*----------------------------------------------------*/ 1738eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--- Continuation points ---*/ 1748eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*----------------------------------------------------*/ 1758eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1768eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/* ------ Chain me to slow entry point ------ */ 1778eb8bab992e3998c33770b0cdb16059a8b918a06sewardj.global VG_(disp_cp_chain_me_to_slowEP) 1788eb8bab992e3998c33770b0cdb16059a8b918a06sewardjVG_(disp_cp_chain_me_to_slowEP): 1798eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* We got called. The return address indicates 1808eb8bab992e3998c33770b0cdb16059a8b918a06sewardj where the patching needs to happen. Collect 1818eb8bab992e3998c33770b0cdb16059a8b918a06sewardj the return address and, exit back to C land, 1828eb8bab992e3998c33770b0cdb16059a8b918a06sewardj handing the caller the pair (Chain_me_S, RA) */ 1838eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq $VG_TRC_CHAIN_ME_TO_SLOW_EP, %rax 1848eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %rdx 1858eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* 10 = movabsq $VG_(disp_chain_me_to_slowEP), %r11; 1868eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 3 = call *%r11 */ 1878eb8bab992e3998c33770b0cdb16059a8b918a06sewardj subq $10+3, %rdx 1888eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jmp postamble 1898eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1908eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/* ------ Chain me to fast entry point ------ */ 1918eb8bab992e3998c33770b0cdb16059a8b918a06sewardj.global VG_(disp_cp_chain_me_to_fastEP) 1928eb8bab992e3998c33770b0cdb16059a8b918a06sewardjVG_(disp_cp_chain_me_to_fastEP): 1938eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* We got called. The return address indicates 1948eb8bab992e3998c33770b0cdb16059a8b918a06sewardj where the patching needs to happen. Collect 1958eb8bab992e3998c33770b0cdb16059a8b918a06sewardj the return address and, exit back to C land, 1968eb8bab992e3998c33770b0cdb16059a8b918a06sewardj handing the caller the pair (Chain_me_F, RA) */ 1978eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq $VG_TRC_CHAIN_ME_TO_FAST_EP, %rax 1988eb8bab992e3998c33770b0cdb16059a8b918a06sewardj popq %rdx 1998eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* 10 = movabsq $VG_(disp_chain_me_to_fastEP), %r11; 2008eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 3 = call *%r11 */ 2018eb8bab992e3998c33770b0cdb16059a8b918a06sewardj subq $10+3, %rdx 2028eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jmp postamble 2038eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2048eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/* ------ Indirect but boring jump ------ */ 2058eb8bab992e3998c33770b0cdb16059a8b918a06sewardj.global VG_(disp_cp_xindir) 2068eb8bab992e3998c33770b0cdb16059a8b918a06sewardjVG_(disp_cp_xindir): 2078eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* Where are we going? */ 2088eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq OFFSET_amd64_RIP(%rbp), %rax 2098eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2108eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* stats only */ 2118eb8bab992e3998c33770b0cdb16059a8b918a06sewardj addl $1, VG_(stats__n_xindirs_32) 2128eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2138eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* try a fast lookup in the translation cache */ 2148eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movabsq $VG_(tt_fast), %rcx 2158eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq %rax, %rbx /* next guest addr */ 2168eb8bab992e3998c33770b0cdb16059a8b918a06sewardj andq $VG_TT_FAST_MASK, %rbx /* entry# */ 2178eb8bab992e3998c33770b0cdb16059a8b918a06sewardj shlq $4, %rbx /* entry# * sizeof(FastCacheEntry) */ 2188eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq 0(%rcx,%rbx,1), %r10 /* .guest */ 2198eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq 8(%rcx,%rbx,1), %r11 /* .host */ 2208eb8bab992e3998c33770b0cdb16059a8b918a06sewardj cmpq %rax, %r10 2218eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jnz fast_lookup_failed 2228eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2238eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* Found a match. Jump to .host. */ 2248eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jmp *%r11 2258eb8bab992e3998c33770b0cdb16059a8b918a06sewardj ud2 /* persuade insn decoders not to speculate past here */ 2268eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2278eb8bab992e3998c33770b0cdb16059a8b918a06sewardjfast_lookup_failed: 2288eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* stats only */ 2298eb8bab992e3998c33770b0cdb16059a8b918a06sewardj addl $1, VG_(stats__n_xindir_misses_32) 2308eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2318eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq $VG_TRC_INNER_FASTMISS, %rax 2328eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq $0, %rdx 2338eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jmp postamble 2348eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2358eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/* ------ Assisted jump ------ */ 2368eb8bab992e3998c33770b0cdb16059a8b918a06sewardj.global VG_(disp_cp_xassisted) 2378eb8bab992e3998c33770b0cdb16059a8b918a06sewardjVG_(disp_cp_xassisted): 2388eb8bab992e3998c33770b0cdb16059a8b918a06sewardj /* %rbp contains the TRC */ 2398eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq %rbp, %rax 2408eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq $0, %rdx 2418eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jmp postamble 2428eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2438eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/* ------ Event check failed ------ */ 2448eb8bab992e3998c33770b0cdb16059a8b918a06sewardj.global VG_(disp_cp_evcheck_fail) 2458eb8bab992e3998c33770b0cdb16059a8b918a06sewardjVG_(disp_cp_evcheck_fail): 2468eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq $VG_TRC_INNER_COUNTERZERO, %rax 2478eb8bab992e3998c33770b0cdb16059a8b918a06sewardj movq $0, %rdx 2488eb8bab992e3998c33770b0cdb16059a8b918a06sewardj jmp postamble 2498eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2508eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2518eb8bab992e3998c33770b0cdb16059a8b918a06sewardj.size VG_(disp_run_translations), .-VG_(disp_run_translations) 2528eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2538eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#endif // defined(VGP_amd64_solaris) 2548eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2553f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian/* Let the linker know we don't need an executable stack */ 2563f1d6138db68f2aa74c5d005c3333cbe94788c7bflorianMARK_STACK_NO_EXEC 2573f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian 2588eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--------------------------------------------------------------------*/ 2598eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--- end ---*/ 2608eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/*--------------------------------------------------------------------*/ 261