diff options
author | cc4b05f61e2d8f77114750386c9f9a60 <cc4b05f61e2d8f7@7114750386c9f9a60> | 2023-05-11 14:38:47 +0000 |
---|---|---|
committer | cc4b05f61e2d8f77114750386c9f9a60 <cc4b05f61e2d8f7@7114750386c9f9a60> | 2023-05-11 14:38:47 +0000 |
commit | f5450bfd35a6410528d124f534c2b1a958cafe51 (patch) | |
tree | a808b12d6ad5343fabdec7b8918df6b4d844e03f /src/my_break.h | |
parent | 5ad2bb7a6ac7e97c031908d2439808a00fff6214 (diff) | |
download | dmsdosnow-f5450bfd35a6410528d124f534c2b1a958cafe51.tar.gz |
dmsdos-0.9.2.2 addeddmsdos-0.9.2.2
Diffstat (limited to 'src/my_break.h')
-rw-r--r-- | src/my_break.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/my_break.h b/src/my_break.h new file mode 100644 index 0000000..df2bac0 --- /dev/null +++ b/src/my_break.h @@ -0,0 +1,30 @@ +#ifndef _MY_BREAK_H +#define _MY_BREAK_H + +#include <linux/sched.h> + +#define BREAK_NOW my_break_now(__PRETTY_FUNCTION__); + +#define get_esp() ({int a_sp; __asm__ ("mov %%esp,%0":"=r"(a_sp)); a_sp;}) + +struct wait_queue * my_break_wait=NULL; + +static void my_break_cont(void) +{ wake_up(&my_break_wait); +} + +static void my_break_now(char * s) +{ unsigned call_pc; + unsigned call_sp; + call_pc=(typeof(call_pc))__builtin_return_address(0); + call_sp=(typeof(call_sp))get_esp(); + printk ("BREAK : procces %i (current=0x%x) stopped at 0x%x in %s\n", + current->pid,(unsigned)current,call_pc,s); + printk ("BREAK : sp = 0x%x\n",call_sp); + printk ("BREAK : for continue call *0x%x()\n", + (unsigned)&my_break_cont); + sleep_on(&my_break_wait); + printk ("BREAK : continuing\n"); +} + +#endif /* _MY_BREAK_H */ |