lkml.org 
[lkml]   [2004]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: ptrace single-stepping change breaks Wine


    On Sun, 21 Nov 2004, Davide Libenzi wrote:
    >
    > I'd agree with Linus here. A signal handler is part of the application, so
    > it should be single stepped in the same way other application code does.
    > My original patch simply reenabled the flag before returning to userspace,
    > and this had the consequence to single step into signal handlers too.

    Hmmm.. I think I may have a test-case for the problem.

    Lookie here:

    #include <signal.h>
    #include <sys/mman.h>

    void function(void)
    {
    printf("Copy protected: ok\n");
    }

    void handler(int signo)
    {
    extern char smc;
    smc++;
    }

    #define TF 0x100

    int main(int argc, char **argv)
    {
    void (*fnp)(void);

    signal(SIGTRAP, handler);
    mprotect((void *)(0xfffff000 & (unsigned long)main), 4096, PROT_READ | PROT_WRITE);
    asm volatile("pushfl ; orl %0,(%%esp) ; popfl"
    : :"i" (TF):"memory");
    asm volatile("pushfl ; andl %0,(%%esp) ; popfl"
    : :"i" (~TF):"memory");
    asm volatile("\nsmc:\n\t"
    ".byte 0xb7\n\t"
    ".long function"
    :"=d" (fnp));
    fnp();
    exit(1);
    }

    Compile it, run it, and it should say

    Copy protected: ok

    Now, try to "strace" it, or debug it with gdb, and see if you can repeat
    the behaviour.

    Roland? Think of it as a challenge,

    Linus
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2009-11-18 23:46    [W:0.019 / U:31.216 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site