aboutsummaryrefslogtreecommitdiffstats
path: root/emulator/qtools/tests/macros.h
diff options
context:
space:
mode:
Diffstat (limited to 'emulator/qtools/tests/macros.h')
-rw-r--r--emulator/qtools/tests/macros.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/emulator/qtools/tests/macros.h b/emulator/qtools/tests/macros.h
new file mode 100644
index 0000000..066374b
--- /dev/null
+++ b/emulator/qtools/tests/macros.h
@@ -0,0 +1,93 @@
+#ifndef _TEST_TRACE_C_H_
+#define _TEST_TRACE_C_H_
+
+/* the base address of trace device */
+#define TRACE_DEV_BASE_ADDR 0x21000000
+
+/*the register addresses of the trace device */
+#define TRACE_DEV_REG_SWITCH 0
+#define TRACE_DEV_REG_FORK 1
+#define TRACE_DEV_REG_EXECVE_PID 2
+#define TRACE_DEV_REG_EXECVE_VMSTART 3
+#define TRACE_DEV_REG_EXECVE_VMEND 4
+#define TRACE_DEV_REG_EXECVE_OFFSET 5
+#define TRACE_DEV_REG_EXECVE_EXEPATH 6
+#define TRACE_DEV_REG_EXIT 7
+#define TRACE_DEV_REG_CMDLINE 8
+#define TRACE_DEV_REG_CMDLINE_LEN 9
+#define TRACE_DEV_REG_MMAP_EXEPATH 10
+#define TRACE_DEV_REG_INIT_PID 11
+#define TRACE_DEV_REG_INIT_NAME 12
+#define TRACE_DEV_REG_CLONE 13
+#define TRACE_DEV_REG_DYN_SYM 50
+#define TRACE_DEV_REG_DYN_SYM_ADDR 51
+#define TRACE_DEV_REG_PRINT_STR 60
+#define TRACE_DEV_REG_PRINT_NUM_DEC 61
+#define TRACE_DEV_REG_PRINT_NUM_HEX 62
+#define TRACE_DEV_REG_STOP_EMU 90
+#define TRACE_DEV_REG_ENABLE 100
+#define TRACE_DEV_REG_DISABLE 101
+
+/* write a word to a trace device register */
+#define DEV_WRITE_WORD(addr,value)\
+ (*(volatile unsigned long *)(TRACE_DEV_BASE_ADDR + ((addr) << 2)) = (value))
+
+/*************************************************************/
+/* generates test events */
+
+/* context switch */
+#define TRACE_SWITCH(pid) DEV_WRITE_WORD(TRACE_DEV_REG_SWITCH, (pid))
+/* fork */
+#define TRACE_FORK(pid) DEV_WRITE_WORD(TRACE_DEV_REG_FORK, (pid))
+/* clone */
+#define TRACE_CLONE(pid) DEV_WRITE_WORD(TRACE_DEV_REG_CLONE, (pid))
+/* dump name and path of threads executed before trace device created */
+#define TRACE_INIT_NAME(pid,path)\
+do {\
+ DEV_WRITE_WORD(TRACE_DEV_REG_INIT_PID, (pid));\
+ DEV_WRITE_WORD(TRACE_DEV_REG_INIT_NAME, (unsigned long)(path));\
+}while(0)
+/* dump exec mapping of threads executed before trace device created */
+#define TRACE_INIT_EXEC(vstart,vend,eoff,path)\
+do {\
+ DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_VMSTART, (vstart));\
+ DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_VMEND, (vend));\
+ DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_OFFSET, (eoff));\
+ DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_EXEPATH, (unsigned long)(path));\
+}while(0)
+/* mmap */
+#define TRACE_MMAP(vstart,vend,eoff,path)\
+do {\
+ DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_VMSTART, (vstart));\
+ DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_VMEND, (vend));\
+ DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_OFFSET, (eoff));\
+ DEV_WRITE_WORD(TRACE_DEV_REG_MMAP_EXEPATH, (unsigned long)(path));\
+}while(0)
+/* execve */
+#define TRACE_EXECVE(cmdlen,cmd)\
+do {\
+ DEV_WRITE_WORD(TRACE_DEV_REG_CMDLINE_LEN, (cmdlen));\
+ DEV_WRITE_WORD(TRACE_DEV_REG_CMDLINE, (unsigned long)(cmd));\
+}while(0)
+/* exit */
+#define TRACE_EXIT(retv) DEV_WRITE_WORD(TRACE_DEV_REG_EXIT, (retv))
+
+/* other commands */
+
+/* stop emulation */
+#define TRACE_STOP_EMU() DEV_WRITE_WORD(TRACE_DEV_REG_STOP_EMU, 1)
+/* enable/disable tracing */
+#define TRACE_ENABLE_TRACING() DEV_WRITE_WORD(TRACE_DEV_REG_ENABLE, 1)
+#define TRACE_DISABLE_TRACING() DEV_WRITE_WORD(TRACE_DEV_REG_DISABLE, 1)
+/* dynamic symbols */
+#define TRACE_DYN_SYM(addr,sym)\
+do {\
+ DEV_WRITE_WORD(TRACE_DEV_REG_DYN_SYM_ADDR, (addr));\
+ DEV_WRITE_WORD(TRACE_DEV_REG_DYN_SYM, (unsigned long)(sym));\
+}while(0)
+/* prints */
+#define PRINT_STR(str) DEV_WRITE_WORD(TRACE_DEV_REG_PRINT_STR, (unsigned long)(str))
+#define PRINT_NUM_DEC(num) DEV_WRITE_WORD(TRACE_DEV_REG_PRINT_NUM_DEC, (num))
+#define PRINT_NUM_HEX(num) DEV_WRITE_WORD(TRACE_DEV_REG_PRINT_NUM_HEX, (num))
+
+#endif