[PATCH] xaudio2_7: Also preserve %ebx in call_on_voice_processing_pass_start().
Paul Gofman
gofmanp at gmail.com
Thu Apr 11 03:30:50 CDT 2019
It is tested that EBX register is not preserved by
IXAudio2VoiceCallback_OnVoiceProcessingPassStart callback
in League of Legends. It doesn't lead to crash in the
present xaudio, while it might still be a potential issue.
Details are in https://bugs.winehq.org/show_bug.cgi?id=46870, while
that bug is not dedicated to this specific issue.
Signed-off-by: Paul Gofman <gofmanp at gmail.com>
---
dlls/xaudio2_7/xaudio_dll.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
index 18306a1603..da34e480c1 100644
--- a/dlls/xaudio2_7/xaudio_dll.c
+++ b/dlls/xaudio2_7/xaudio_dll.c
@@ -41,7 +41,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(xaudio2);
#if XAUDIO2_VER != 0 && defined(__i386__)
-/* EVE Online uses an OnVoiceProcessingPassStart callback which corrupts %esi. */
+/* EVE Online uses an OnVoiceProcessingPassStart callback which corrupts %esi;
+ * League of Legends uses a callback which corrupts %ebx. */
#define IXAudio2VoiceCallback_OnVoiceProcessingPassStart(a, b) call_on_voice_processing_pass_start(a, b)
extern void call_on_voice_processing_pass_start(IXAudio2VoiceCallback *This, UINT32 BytesRequired);
__ASM_GLOBAL_FUNC( call_on_voice_processing_pass_start,
@@ -54,13 +55,17 @@ __ASM_GLOBAL_FUNC( call_on_voice_processing_pass_start,
__ASM_CFI(".cfi_rel_offset %esi,-4\n\t")
"pushl %edi\n\t"
__ASM_CFI(".cfi_rel_offset %edi,-8\n\t")
+ "pushl %ebx\n\t"
+ __ASM_CFI(".cfi_rel_offset %ebx,-12\n\t")
"subl $8,%esp\n\t"
"pushl 12(%ebp)\n\t" /* BytesRequired */
"pushl 8(%ebp)\n\t" /* This */
"movl 8(%ebp),%eax\n\t"
"movl 0(%eax),%eax\n\t"
"call *0(%eax)\n\t" /* This->lpVtbl->OnVoiceProcessingPassStart */
- "leal -8(%ebp),%esp\n\t"
+ "leal -12(%ebp),%esp\n\t"
+ "popl %ebx\n\t"
+ __ASM_CFI(".cfi_same_value %ebx\n\t")
"popl %edi\n\t"
__ASM_CFI(".cfi_same_value %edi\n\t")
"popl %esi\n\t"
--
2.20.1
More information about the wine-devel
mailing list