aboutsummaryrefslogtreecommitdiffstats
path: root/src/my_break.h
diff options
context:
space:
mode:
authorcc4b05f61e2d8f77114750386c9f9a60 <cc4b05f61e2d8f7@7114750386c9f9a60>2023-05-11 14:38:47 +0000
committercc4b05f61e2d8f77114750386c9f9a60 <cc4b05f61e2d8f7@7114750386c9f9a60>2023-05-11 14:38:47 +0000
commitf5450bfd35a6410528d124f534c2b1a958cafe51 (patch)
treea808b12d6ad5343fabdec7b8918df6b4d844e03f /src/my_break.h
parent5ad2bb7a6ac7e97c031908d2439808a00fff6214 (diff)
downloaddmsdosnow-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.h30
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 */