lkml.org 
[lkml]   [1998]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject2 switch_to() puzzles


    Why the switch_to() macro saves on the stack the values of
    ebx, esi and edi (ebp is used by gcc because of the
    -fno-omit-frame-pointer option) ?

    We tried the following patch (2.1.131) and it worked just fine.


    --- include/asm-i386/system.h.orig Mon Dec 7 14:21:45 1998
    +++ include/asm-i386/system.h Mon Dec 7 14:22:30 1998
    @@ -15,10 +15,7 @@
    */
    #define switch_to(prev,next) do { \
    unsigned long eax, edx, ecx; \
    - asm volatile("pushl %%ebx\n\t" \
    - "pushl %%esi\n\t" \
    - "pushl %%edi\n\t" \
    - "pushl %%ebp\n\t" \
    + asm volatile("pushl %%ebp\n\t" \
    "movl %%esp,%0\n\t" /* save ESP */ \
    "movl %5,%%esp\n\t" /* restore ESP */ \
    "movl $1f,%1\n\t" /* save EIP */ \
    @@ -26,9 +23,6 @@
    "jmp __switch_to\n" \
    "1:\t" \
    "popl %%ebp\n\t" \
    - "popl %%edi\n\t" \
    - "popl %%esi\n\t" \
    - "popl %%ebx" \
    :"=m" (prev->tss.esp),"=m" (prev->tss.eip), \
    "=a" (eax), "=d" (edx), "=c" (ecx) \
    :"m" (next->tss.esp),"m" (next->tss.eip), \

    By the way, why inserting the following code in the __switch_to() function?
    As far as I know, the debug registers can only be accessed in Kernel Mode
    and (as far as I could see) Linux doesn't provide any support to change their
    values stored in TSSs.

    /*
    * Now maybe reload the debug registers
    */
    if (next->tss.debugreg[7]){
    loaddebug(next,0);
    loaddebug(next,1);
    loaddebug(next,2);
    loaddebug(next,3);
    loaddebug(next,6);
    loaddebug(next,7);
    }

    Marco Cesati


    +---------------------------------------------------------------+
    | Computer Engineering - Project BRAVO |
    +---------------------------------------------------------------+
    | University of Rome "Tor Vergata" |
    | Dept. of Computer Science, Systems and Industrial Engineering |
    | via di Tor Vergata, 00133 Rome (Italy) |
    | e-mail: bravo@russell.ce.uniroma2.it |
    +---------------------------------------------------------------+
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.rutgers.edu
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:45    [W:4.335 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site