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