SUPLibTracerA.asm revision 4db428018b0a098eec7231fc88b688d70b814933
32ded45b3caba42c8a2315a20bbfabb513fa54c1vboxsync; $Id$
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync;; @file
32ded45b3caba42c8a2315a20bbfabb513fa54c1vboxsync; VirtualBox Support Library - Tracer Interface, Assembly bits.
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync;
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync;
c29fe1f686f1a78237986fbb030e3020cdbbfb77vboxsync; Copyright (C) 2012 Oracle Corporation
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync;
7f8c3a19fc6774798746c0782be09b88e54bf960vboxsync; This file is part of VirtualBox Open Source Edition (OSE), as
7f8c3a19fc6774798746c0782be09b88e54bf960vboxsync; available from http://www.virtualbox.org. This file is free software;
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; you can redistribute it and/or modify it under the terms of the GNU
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; General Public License (GPL) as published by the Free Software
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; Foundation, in version 2 as it comes in the "COPYING" file of the
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync;
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; The contents of this file may alternatively be used under the terms
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; of the Common Development and Distribution License Version 1.0
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
7d9e0d289e799c0ee5b9307fe7358ddc53bd34ddvboxsync; VirtualBox OSE distribution, in which case the provisions of the
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; CDDL are applicable instead of those of the GPL.
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync;
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; You may elect to license modified versions of this file under the
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; terms and conditions of either the GPL or the CDDL or both.
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync;
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync;*******************************************************************************
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync;* Header Files *
af1bd0025dd5d8be5f1468689d0d77d4839a3be5vboxsync;*******************************************************************************
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync%include "iprt/asmdefs.mac"
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync%include "VBox/sup.mac"
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync; This should go into asmdefs.mac
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync%ifdef PIC
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync %ifdef ASM_FORMAT_ELF
295a2ae5a4db2c930f7096c6cf55b5fa4ee5b018vboxsync %define RT_ASM_USE_GOT
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync %define RT_ASM_USE_PLT
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync %endif
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync%endif
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync;*******************************************************************************
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync;* Structures and Typedefs *
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync;*******************************************************************************
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsyncstruc SUPREQHDR
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync .u32Cookie resd 1
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync .u32SessionCookie resd 1
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync .cbIn resd 1
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync .cbOut resd 1
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync .fFlags resd 1
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync .rc resd 1
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsyncendstruc
295a2ae5a4db2c930f7096c6cf55b5fa4ee5b018vboxsync
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsyncstruc SUPTRACERUMODFIREPROBE
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync .Hdr resb SUPREQHDR_size
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync .In resb SUPDRVTRACERUSRCTX64_size
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsyncendstruc
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync
32ded45b3caba42c8a2315a20bbfabb513fa54c1vboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsyncextern NAME(suplibTracerFireProbe)
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsyncBEGINCODE
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync
295a2ae5a4db2c930f7096c6cf55b5fa4ee5b018vboxsync
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync;;
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync; Set up a SUPTRACERUMODFIREPROBE request package on the stack and a C helper
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync; function in SUPLib.cpp to do the rest.
be641d8f2dc377d6a4403f3822d8bed08f51e28avboxsync;
be641d8f2dc377d6a4403f3822d8bed08f51e28avboxsyncEXPORTEDNAME SUPTracerFireProbe
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync push xBP
295a2ae5a4db2c930f7096c6cf55b5fa4ee5b018vboxsync mov xBP, xSP
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync ;
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync ; Allocate package and set the sizes (the helper does the rest of
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync ; the header). Setting the sizes here allows the helper to verify our
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync ; idea of the request sizes.
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync ;
295a2ae5a4db2c930f7096c6cf55b5fa4ee5b018vboxsync lea xSP, [xBP - SUPTRACERUMODFIREPROBE_size - 8]
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov dword [xSP + SUPTRACERUMODFIREPROBE.Hdr + SUPREQHDR.cbIn], SUPTRACERUMODFIREPROBE_size
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov dword [xSP + SUPTRACERUMODFIREPROBE.Hdr + SUPREQHDR.cbOut], SUPREQHDR_size
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync%ifdef RT_ARCH_AMD64
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync ;
be641d8f2dc377d6a4403f3822d8bed08f51e28avboxsync ; Save the AMD64 context.
295a2ae5a4db2c930f7096c6cf55b5fa4ee5b018vboxsync ;
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.rax], rax
be641d8f2dc377d6a4403f3822d8bed08f51e28avboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.rcx], rcx
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.rdx], rdx
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.rbx], rbx
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.rsi], rsi
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.rdi], rdi
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.r8 ], r8
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.r9 ], r9
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.r10], r10
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.r11], r11
295a2ae5a4db2c930f7096c6cf55b5fa4ee5b018vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.r12], r12
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.r13], r13
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.r14], r14
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.r15], r15
32ded45b3caba42c8a2315a20bbfabb513fa54c1vboxsync pushf
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync pop xAX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.rflags], xAX
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov xAX, [xBP + xCB]
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.rip], xAX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov xAX, [xBP]
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.rbp], xAX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync lea xAX, [xBP + xCB*2]
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.rsp], xAX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync %ifdef ASM_CALL64_MSC
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.uVtgProbeLoc], rcx
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*0], rdx
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*1], r8
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*2], r9
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov xAX, [xBP + xCB*2 + 0x20 + xCB*0]
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*3], xAX
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov xAX, [xBP + xCB*2 + 0x20 + xCB*1]
32ded45b3caba42c8a2315a20bbfabb513fa54c1vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*4], xAX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov xAX, [xBP + xCB*2 + 0x20 + xCB*2]
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*5], xAX
e6317c5fa1f3ac24b7d86f42d2b11bcb0733609evboxsync mov xAX, [xBP + xCB*2 + 0x20 + xCB*3]
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*6], xAX
e6317c5fa1f3ac24b7d86f42d2b11bcb0733609evboxsync mov xAX, [xBP + xCB*2 + 0x20 + xCB*4]
e6317c5fa1f3ac24b7d86f42d2b11bcb0733609evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*7], xAX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov xAX, [xBP + xCB*2 + 0x20 + xCB*5]
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*8], xAX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov xAX, [xBP + xCB*2 + 0x20 + xCB*6]
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*9], xAX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov eax, [xCX + 4] ; VTGPROBELOC::idProbe.
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync %else
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.uVtgProbeLoc], rdi
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*0], rsi
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*1], rdx
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*2], rcx
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*3], r8
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*4], r9
295a2ae5a4db2c930f7096c6cf55b5fa4ee5b018vboxsync mov xAX, [xBP + xCB*2 + xCB*0]
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*5], xAX
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov xAX, [xBP + xCB*2 + xCB*1]
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*6], xAX
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov xAX, [xBP + xCB*2 + xCB*2]
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*7], xAX
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov xAX, [xBP + xCB*2 + xCB*3]
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*8], xAX
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync mov xAX, [xBP + xCB*2 + xCB*4]
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.u.Amd64.aArgs + xCB*9], xAX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov eax, [xDI + 4] ; VTGPROBELOC::idProbe.
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync %endif
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.idProbe], eax
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov dword [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX64.cBits], 64
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync ;
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync ; Call the helper.
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync ;
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync %ifdef ASM_CALL64_MSC
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov xDX, xSP
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync sub xSP, 0x20
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync call NAME(suplibTracerFireProbe)
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync %else
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov xSI, xSP
9148e7ca5f9ee1d467112d347bfb2de2b97254d2vboxsync %ifdef RT_ASM_USE_PLT
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync call NAME(suplibTracerFireProbe) wrt ..plt
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync %else
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync call NAME(suplibTracerFireProbe)
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync %endif
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync %endif
32ded45b3caba42c8a2315a20bbfabb513fa54c1vboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync%elifdef RT_ARCH_X86
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync ;
32ded45b3caba42c8a2315a20bbfabb513fa54c1vboxsync ; Save the X86 context.
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync ;
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.eax], eax
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.ecx], ecx
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.edx], edx
54ab180f75bcb8c750d0d7d59e39aca6eb59e848vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.ebx], ebx
04582cbe4711c5c860680c6cb8d8df1800de2019vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.esi], esi
04582cbe4711c5c860680c6cb8d8df1800de2019vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.edi], edi
04582cbe4711c5c860680c6cb8d8df1800de2019vboxsync pushf
54ab180f75bcb8c750d0d7d59e39aca6eb59e848vboxsync pop xAX
54ab180f75bcb8c750d0d7d59e39aca6eb59e848vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.eflags], xAX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov xAX, [xBP + xCB]
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.eip], xAX
32ded45b3caba42c8a2315a20bbfabb513fa54c1vboxsync mov xAX, [xBP]
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.ebp], xAX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync lea xAX, [xBP + xCB*2]
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.esp], xAX
04582cbe4711c5c860680c6cb8d8df1800de2019vboxsync
04582cbe4711c5c860680c6cb8d8df1800de2019vboxsync mov xCX, [xBP + xCB*2 + xCB*0]
04582cbe4711c5c860680c6cb8d8df1800de2019vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.uVtgProbeLoc], xCX ; keep, used below.
04582cbe4711c5c860680c6cb8d8df1800de2019vboxsync
04582cbe4711c5c860680c6cb8d8df1800de2019vboxsync mov edx, 20
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync.more:
32ded45b3caba42c8a2315a20bbfabb513fa54c1vboxsync dec edx
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov xAX, [xBP + xCB*2 + xCB*xDX]
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.u.X86.aArgs + xCB*xDX], xAX
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync jnz .more
32ded45b3caba42c8a2315a20bbfabb513fa54c1vboxsync
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov eax, [xCX + 4] ; VTGPROBELOC::idProbe.
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync mov [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.idProbe], eax
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov dword [xSP + SUPTRACERUMODFIREPROBE.In + SUPDRVTRACERUSRCTX32.cBits], 32
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync ;
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync ; Call the helper.
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync ;
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync mov xDX, xSP
32ded45b3caba42c8a2315a20bbfabb513fa54c1vboxsync push xDX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync push xCX
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync %ifdef RT_ASM_USE_PLT
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync call NAME(suplibTracerFireProbe) wrt ..plt
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync %else
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync call NAME(suplibTracerFireProbe)
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync %endif
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync%else
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync %error "Arch not supported (or correctly defined)."
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync%endif
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync leave
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync ret
1731b00e118d691438a0c8b1f1b4c6e29a0d5bb6vboxsyncENDPROC SUPTracerFireProbe
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync
dc23707aec4dc2ce2c6b6f51af21eef72bb8bf2evboxsync