]> Zhao Yanbai Git Server - minix.git/commitdiff
libc:x86 fix for get and setcontext assembly calls.
authorKees Jongenburger <kees.jongenburger@gmail.com>
Wed, 2 Apr 2014 07:28:38 +0000 (09:28 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:21 +0000 (17:05 +0200)
The get and set context calls where wrongly assuming that the value
of arguments passed on the stack where kept unmodified.

Change-Id: I779b08d7f5a6472c5e9dc351ae44abb2acafb3bd

lib/libc/arch/i386/sys-minix/ucontext.S

index 92ec539d69c9b83c643abbc0dece30cc5249f6e1..e72331a47867835a1dc910b098aaf80325f6eddc 100644 (file)
@@ -34,9 +34,11 @@ ENTRY(_getcontext)
        cmp $[_UC_IGNFPU|_UC_IGNSIGM], %eax
        jz 5f                           /* Ignore both, skip getuctx */
        PIC_PROLOGUE
-       push %edx                
+       push %edx /* push a copy for us */
+       push %edx /* push a copy as function argument */
        call PIC_PLT(_C_LABEL(getuctx)) /* getuctx(ucp) */
-       pop %edx                        /* clean up stack and restore edx */
+       pop %edx        /* clean up stack */
+       pop %edx        /* clean up stack and  restore edx */
        PIC_EPILOGUE
 
 5:
@@ -96,9 +98,11 @@ ENTRY(setcontext)
                                 * state and signal mask */
 
        PIC_PROLOGUE
-       push %edx                
+       push %edx /* push a copy for us */
+       push %edx /* push a copy as function argument */
        call PIC_PLT(_C_LABEL(setuctx)) /* setuctx(ucp) */
-       pop %edx                        /* Clean up stack and restore edx */
+       pop %edx        /* clean up stack */
+       pop %edx        /* clean up stack and  restore edx */
        PIC_EPILOGUE
 
 5:     /* Restore the registers (except EAX and EDX) */