1 #ifndef _TEST_TRACE_C_H_ 2 #define _TEST_TRACE_C_H_ 3 4 /* the base address of trace device */ 5 #define TRACE_DEV_BASE_ADDR 0x21000000 6 7 /*the register addresses of the trace device */ 8 #define TRACE_DEV_REG_SWITCH 0 9 #define TRACE_DEV_REG_FORK 1 10 #define TRACE_DEV_REG_EXECVE_PID 2 11 #define TRACE_DEV_REG_EXECVE_VMSTART 3 12 #define TRACE_DEV_REG_EXECVE_VMEND 4 13 #define TRACE_DEV_REG_EXECVE_OFFSET 5 14 #define TRACE_DEV_REG_EXECVE_EXEPATH 6 15 #define TRACE_DEV_REG_EXIT 7 16 #define TRACE_DEV_REG_CMDLINE 8 17 #define TRACE_DEV_REG_CMDLINE_LEN 9 18 #define TRACE_DEV_REG_MMAP_EXEPATH 10 19 #define TRACE_DEV_REG_INIT_PID 11 20 #define TRACE_DEV_REG_INIT_NAME 12 21 #define TRACE_DEV_REG_CLONE 13 22 #define TRACE_DEV_REG_DYN_SYM 50 23 #define TRACE_DEV_REG_DYN_SYM_ADDR 51 24 #define TRACE_DEV_REG_PRINT_STR 60 25 #define TRACE_DEV_REG_PRINT_NUM_DEC 61 26 #define TRACE_DEV_REG_PRINT_NUM_HEX 62 27 #define TRACE_DEV_REG_STOP_EMU 90 28 #define TRACE_DEV_REG_ENABLE 100 29 #define TRACE_DEV_REG_DISABLE 101 30 31 /* write a word to a trace device register */ 32 #define DEV_WRITE_WORD(addr,value)\ 33 (*(volatile unsigned long *)(TRACE_DEV_BASE_ADDR + ((addr) << 2)) = (value)) 34 35 /*************************************************************/ 36 /* generates test events */ 37 38 /* context switch */ 39 #define TRACE_SWITCH(pid) DEV_WRITE_WORD(TRACE_DEV_REG_SWITCH, (pid)) 40 /* fork */ 41 #define TRACE_FORK(pid) DEV_WRITE_WORD(TRACE_DEV_REG_FORK, (pid)) 42 /* clone */ 43 #define TRACE_CLONE(pid) DEV_WRITE_WORD(TRACE_DEV_REG_CLONE, (pid)) 44 /* dump name and path of threads executed before trace device created */ 45 #define TRACE_INIT_NAME(pid,path)\ 46 do {\ 47 DEV_WRITE_WORD(TRACE_DEV_REG_INIT_PID, (pid));\ 48 DEV_WRITE_WORD(TRACE_DEV_REG_INIT_NAME, (unsigned long)(path));\ 49 }while(0) 50 /* dump exec mapping of threads executed before trace device created */ 51 #define TRACE_INIT_EXEC(vstart,vend,eoff,path)\ 52 do {\ 53 DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_VMSTART, (vstart));\ 54 DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_VMEND, (vend));\ 55 DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_OFFSET, (eoff));\ 56 DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_EXEPATH, (unsigned long)(path));\ 57 }while(0) 58 /* mmap */ 59 #define TRACE_MMAP(vstart,vend,eoff,path)\ 60 do {\ 61 DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_VMSTART, (vstart));\ 62 DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_VMEND, (vend));\ 63 DEV_WRITE_WORD(TRACE_DEV_REG_EXECVE_OFFSET, (eoff));\ 64 DEV_WRITE_WORD(TRACE_DEV_REG_MMAP_EXEPATH, (unsigned long)(path));\ 65 }while(0) 66 /* execve */ 67 #define TRACE_EXECVE(cmdlen,cmd)\ 68 do {\ 69 DEV_WRITE_WORD(TRACE_DEV_REG_CMDLINE_LEN, (cmdlen));\ 70 DEV_WRITE_WORD(TRACE_DEV_REG_CMDLINE, (unsigned long)(cmd));\ 71 }while(0) 72 /* exit */ 73 #define TRACE_EXIT(retv) DEV_WRITE_WORD(TRACE_DEV_REG_EXIT, (retv)) 74 75 /* other commands */ 76 77 /* stop emulation */ 78 #define TRACE_STOP_EMU() DEV_WRITE_WORD(TRACE_DEV_REG_STOP_EMU, 1) 79 /* enable/disable tracing */ 80 #define TRACE_ENABLE_TRACING() DEV_WRITE_WORD(TRACE_DEV_REG_ENABLE, 1) 81 #define TRACE_DISABLE_TRACING() DEV_WRITE_WORD(TRACE_DEV_REG_DISABLE, 1) 82 /* dynamic symbols */ 83 #define TRACE_DYN_SYM(addr,sym)\ 84 do {\ 85 DEV_WRITE_WORD(TRACE_DEV_REG_DYN_SYM_ADDR, (addr));\ 86 DEV_WRITE_WORD(TRACE_DEV_REG_DYN_SYM, (unsigned long)(sym));\ 87 }while(0) 88 /* prints */ 89 #define PRINT_STR(str) DEV_WRITE_WORD(TRACE_DEV_REG_PRINT_STR, (unsigned long)(str)) 90 #define PRINT_NUM_DEC(num) DEV_WRITE_WORD(TRACE_DEV_REG_PRINT_NUM_DEC, (num)) 91 #define PRINT_NUM_HEX(num) DEV_WRITE_WORD(TRACE_DEV_REG_PRINT_NUM_HEX, (num)) 92 93 #endif 94