From: Thomas Faber Date: Sun, 26 Aug 2012 12:06:45 +0000 (+0000) Subject: [KMTESTS:EX] X-Git-Tag: backups/ros-csrss@57560~382 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=80034019911208a0027b26b52b9def4a318f50db [KMTESTS:EX] - Make hard-coded calling convention exceptions in ExInterlocked compatible with GCC 4.7, and add the corresponding TODO about how ugly this is svn path=/trunk/; revision=57166 --- diff --git a/rostests/kmtests/ntos_ex/ExInterlocked.c b/rostests/kmtests/ntos_ex/ExInterlocked.c index 83eab0f6f57..97353cf7c9c 100644 --- a/rostests/kmtests/ntos_ex/ExInterlocked.c +++ b/rostests/kmtests/ntos_ex/ExInterlocked.c @@ -50,6 +50,8 @@ typedef struct typedef int PROCESSOR_STATE; #endif +/* TODO: these need to be rewritten in proper assembly to account for registers + * saved by the caller */ #if defined(_MSC_VER) && defined(_M_IX86) #define SaveState(State) do \ { \ @@ -74,19 +76,20 @@ typedef int PROCESSOR_STATE; #elif defined(__GNUC__) && defined(_M_IX86) #define SaveState(State) \ asm volatile( \ - "movl\t%%esi, (%%ecx)\n\t" \ - "movl\t%%edi, 4(%%ecx)\n\t" \ - "movl\t%%ebx, 8(%%ecx)\n\t" \ - "movl\t%%ebp, 12(%%ecx)\n\t" \ - "movl\t%%esp, 16(%%ecx)" \ + "movl\t%%esi, (%%ecx)\n\t" \ + "movl\t%%edi, 4(%%ecx)\n\t" \ + "movl\t%%ebx, 8(%%ecx)\n\t" \ + "movl\t%%ebp, 12(%%ecx)\n\t" \ + "movl\t%%esp, 16(%%ecx)" \ : : "c" (&State) : "memory" \ ); #define CheckState(OldState, NewState) do \ { \ - ok_eq_hex((OldState)->esi, (NewState)->esi); \ + /* TODO: GCC 4.7 uses esi and saves it before, so this is okay */ \ + /*ok_eq_hex((OldState)->esi, (NewState)->esi);*/ \ ok_eq_hex((OldState)->edi, (NewState)->edi); \ - /* TODO: GCC uses ebx and saves it before, so this is okay */ \ + /* TODO: GCC 4.4 uses ebx and saves it before, so this is okay */ \ /*ok_eq_hex((OldState)->ebx, (NewState)->ebx);*/ \ ok_eq_hex((OldState)->ebp, (NewState)->ebp); \ ok_eq_hex((OldState)->esp, (NewState)->esp); \ @@ -94,15 +97,15 @@ typedef int PROCESSOR_STATE; #elif defined(__GNUC__) && defined(_M_AMD64) #define SaveState(State) \ asm volatile( \ - "mov\t%%rsi, (%%rcx)\n\t" \ - "mov\t%%rdi, 8(%%rcx)\n\t" \ - "mov\t%%rbx, 16(%%rcx)\n\t" \ - "mov\t%%rbp, 24(%%rcx)\n\t" \ - "mov\t%%rsp, 32(%%rcx)\n\t" \ - "mov\t%%r12, 40(%%rcx)\n\t" \ - "mov\t%%r13, 48(%%rcx)\n\t" \ - "mov\t%%r14, 56(%%rcx)\n\t" \ - "mov\t%%r15, 64(%%rcx)" \ + "mov\t%%rsi, (%%rcx)\n\t" \ + "mov\t%%rdi, 8(%%rcx)\n\t" \ + "mov\t%%rbx, 16(%%rcx)\n\t" \ + "mov\t%%rbp, 24(%%rcx)\n\t" \ + "mov\t%%rsp, 32(%%rcx)\n\t" \ + "mov\t%%r12, 40(%%rcx)\n\t" \ + "mov\t%%r13, 48(%%rcx)\n\t" \ + "mov\t%%r14, 56(%%rcx)\n\t" \ + "mov\t%%r15, 64(%%rcx)" \ : : "c" (&State) : "memory" \ );