From 59e93bff78f54a0cff3f2c6558ed1a69b47a9534 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 1 Jan 2012 20:45:15 +0100 Subject: [PATCH] Fix a crash at startup with Dolphin on Linux compiled in debug mode Use the clobber list instead of the stack to save rbx when executing the cpuid instruction with inline assembly. This avoids breaking GCC assumptions about the stack pointer location. --- Source/Core/Common/Src/CPUDetect.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Source/Core/Common/Src/CPUDetect.cpp b/Source/Core/Common/Src/CPUDetect.cpp index 99e43f5c46..93e9d25087 100644 --- a/Source/Core/Common/Src/CPUDetect.cpp +++ b/Source/Core/Common/Src/CPUDetect.cpp @@ -43,27 +43,25 @@ static inline void do_cpuid(unsigned int *eax, unsigned int *ebx, // Note: EBX is reserved on Mac OS X and in PIC on Linux, so it has to // restored at the end of the asm block. __asm__ ( - "pushq %%rbx;" "cpuid;" "movl %%ebx,%1;" - "popq %%rbx;" : "=a" (*eax), "=S" (*ebx), "=c" (*ecx), "=d" (*edx) : "a" (*eax) + : "rbx" ); #else __asm__ ( - "pushl %%ebx;" "cpuid;" "movl %%ebx,%1;" - "popl %%ebx;" : "=a" (*eax), "=S" (*ebx), "=c" (*ecx), "=d" (*edx) : "a" (*eax) + : "ebx" ); #endif }