17 #ifndef GSC_KERNEL_MAX_CALLTRACE_RECORD 18 #define GSC_KERNEL_MAX_CALLTRACE_RECORD 32 // $gsc カーネルシステムコールトレース記録数 21 static struct st_call_record call_record[GSC_KERNEL_MAX_CALLTRACE_RECORD];
23 char flg_rec_round = 0;
25 extern const char syscall_name[][16];
33 void record_calltrace(
int syscall,
int status,
void *resource,
int arg,
int count,
void *sp)
35 struct st_call_record *rp;
37 rp = &call_record[callrec_num];
42 rp->syscall = syscall;
44 rp->resource = resource;
50 if(callrec_num >= GSC_KERNEL_MAX_CALLTRACE_RECORD) {
56 extern const char status_str[][7];
58 static void print_record(
struct st_call_record *rp)
60 tkprintf(
"%8ld.%03ld : [%2d]%10s %6s %12s",
65 status_str[rp->status],
66 syscall_name[rp->syscall]);
69 case SYSCALL_DISPATCH:
73 case SYSCALL_TASK_ADD:
74 case SYSCALL_TASK_EXEC:
75 case SYSCALL_TASK_EXIT:
76 case SYSCALL_TASK_PAUSE:
79 case SYSCALL_TASK_SLEEP:
83 case SYSCALL_TASK_KILL:
84 case SYSCALL_TASK_WAKEUP:
85 case SYSCALL_EVTQUE_INIT:
88 case SYSCALL_EVTQUE_WAIT:
92 case SYSCALL_EVTQUE_PUSH:
96 case SYSCALL_EVTQUE_CLEAR:
97 tkprintf(
"%10s %8s %8d", ((
struct st_event *)(rp->resource))->name,
"", rp->count);
100 case SYSCALL_EVTQUE_CHECK:
104 case SYSCALL_EVTQUE_WAKEUP:
105 tkprintf(
"%10s %8s %8d", ((
struct st_event *)(rp->resource))->name,
"", rp->count);
108 case SYSCALL_EVTQUE_DISPOSE:
112 case SYSCALL_MUTEX_INIT:
116 case SYSCALL_MUTEX_LOCK:
120 case SYSCALL_MUTEX_UNLOCK:
124 case SYSCALL_MUTEX_DISPOSE:
128 case SYSCALL_SET_CONSOLE_IN:
129 case SYSCALL_SET_CONSOLE_OUT:
130 case SYSCALL_SET_ERROR_OUT:
133 case SYSCALL_TIMEOUT_WAKEUP:
136 case SYSCALL_PRINT_TASK_LIST:
137 case SYSCALL_PRINT_TASK_QUEUE:
138 case SYSCALL_PRINT_CALLTRACE:
149 void print_calltrace(
void)
153 if(flg_rec_round != 0) {
154 for(i=callrec_num; i<GSC_KERNEL_MAX_CALLTRACE_RECORD; i++) {
155 print_record(&call_record[i]);
159 for(i=0; i<callrec_num; i++) {
160 print_record(&call_record[i]);
unsigned long long get_system_utime(void)
システム時間を取得する
#define init_calltrace(...)
< $gsc カーネルシステムコールトレースを有効にする
int tkprintf(const char *fmt,...)
非タスクコンテキスト実行用メッセージ出力