-// MAGIC_BREAK();
- __asm__ __volatile__ (
- "mov %0, %%rsp;\n\t" // Set stack pointer
- "mov %1, %%r11;\n\t" // Set stack pointer
- "sysret;\n\t"
- : : "r" (Stack), "c" (IP), "r" (Flags)
- : "r11"
- );
+ Log("Proc_StartProcess: (SS=%x, Stack=%p, Flags=%x, CS=%x, IP=%p)",
+ SS, Stack, Flags, CS, IP);
+ if(CS == 0x1B)
+ {
+ // 32-bit return
+ __asm__ __volatile__ (
+ "mov %0, %%rsp;\n\t" // Set stack pointer
+ "mov %2, %%r11;\n\t" // Set RFLAGS
+ "sysret;\n\t"
+ : : "r" (Stack), "c" (IP), "r" (Flags)
+ );
+ }
+ else
+ {
+ // 64-bit return
+ __asm__ __volatile__ (
+ "mov %0, %%rsp;\n\t" // Set stack pointer
+ "mov %2, %%r11;\n\t" // Set RFLAGS
+ "sysretq;\n\t"
+ : : "r" (Stack), "c" (IP), "r" (Flags)
+ );
+ }