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