I'm not going to sit and debug your asm, but you're doing something wrong because this works. Here's some 32-bit functions I wrote a while back for a project, it should help you figure out whats going on. void unsetTF(void) { __asm__ __volatile__( "pushf \n" "mov $0x100, %eax \n" "not %eax \n" "andl (%esp), %eax \n" "popf \n" ); } void setTF(void) { __asm__ __volatile__( "pushf \n" "orl $0x100, (%esp) \n" "popf " ); return; } unsigned int isTFset(void) { unsigned int retval; __asm__ __volatile__( "xor %%eax, %%eax \n" "pushf \n" "pop %%eax \n" "and $0x100, %%eax \n" : "=a" (retval) ); return retval; } On Dec 5, 2007 11:19 AM, ninjaboy <n0b0dyn1nj4@xxxxxxxxx> wrote: > 2007/12/5, Rene Herman <rene.herman@xxxxxxxxxxxx>: > > > On 05-12-07 15:23, ninjaboy wrote: > > > > > why if i put TF in my prog and install an handler to SIGTRAP the > > > handler is not caught? > > > > Works for me. > > > > Rene. > > > > /* gcc -W -Wall -o sigtrap sigtrap.c */ > > > > #include <stdlib.h> > > #include <stdio.h> > > #include <signal.h> > > > > volatile sig_atomic_t trap; > > > > void sigtrap(int signum __attribute__((unused))) > > { > > trap = 1; > > } > > > > int main(void) > > { > > struct sigaction sa; > > > > sa.sa_handler = sigtrap; > > sigemptyset(&sa.sa_mask); > > sa.sa_flags = 0; > > > > if (sigaction(SIGTRAP, &sa, NULL) < 0) { > > perror("could not install handler"); > > return EXIT_FAILURE; > > } > > > > asm("int3"); > > > > printf("trap = %d\n", (int)trap); > > return EXIT_SUCCESS; > > } > > > > > Ehm... int3 works for me too, the TF doesn't work. > > pushf > xor %rax, %rax > pop %rax > orq $0x100, %rax > pushq %rax > popf > > the trap released here doesn't exec my handler. > > > -- > noone is alone. > > -- > To unsubscribe from this list: send an email with > "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx > Please read the FAQ at http://kernelnewbies.org/FAQ > > -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ