diff --git a/source/module/monitor_kernel_lib.c b/source/module/monitor_kernel_lib.c index 0f30ee9..4ecaed2 100644 --- a/source/module/monitor_kernel_lib.c +++ b/source/module/monitor_kernel_lib.c @@ -56,17 +56,23 @@ static int init_buffer(unsigned int buf_size) { void diag_tsk(struct task_struct *p, variable_monitor_task *tsk_info,unsigned long *flags) { + printk(KERN_INFO "diag_tsk\n"); diag_task_brief(p, &tsk_info->task); // task brief + printk("1\n"); diag_task_user_stack(p, &tsk_info->user_stack); // user stack + printk("2\n"); diag_task_kern_stack(p, &tsk_info->kern_stack); // kernel stack + printk("3\n"); dump_proc_chains_argv(1, p, &mm_tree_struct, &tsk_info->proc_chains); // proc chains - + printk("4\n"); diag_variant_buffer_spin_lock(&load_monitor_variant_buffer, *flags); diag_variant_buffer_reserve(&load_monitor_variant_buffer, sizeof(variable_monitor_task)); + printk("5\n"); diag_variant_buffer_write_nolock(&load_monitor_variant_buffer, &tsk_info, sizeof(variable_monitor_task)); + printk("6\n"); diag_variant_buffer_seal(&load_monitor_variant_buffer); diag_variant_buffer_spin_unlock(&load_monitor_variant_buffer, *flags); } @@ -196,8 +202,8 @@ enum hrtimer_restart check_variable_cb(struct hrtimer *timer) { unsigned long flags; unsigned long event_id = get_cycles(); - static variable_monitor_task tsk_info; - static variable_monitor_record vm_record; + static variable_monitor_task tsk_info = {0}; + static variable_monitor_record vm_record = {0}; vm_record.id = event_id; vm_record.et_type = 1; //! todo event type diff --git a/source/module/monitor_trace.c b/source/module/monitor_trace.c index 236f3ee..5d0b943 100644 --- a/source/module/monitor_trace.c +++ b/source/module/monitor_trace.c @@ -293,15 +293,20 @@ void diag_task_user_stack(struct task_struct *tsk, user_stack_detail *detail) { unsigned long sp, ip, bp; struct task_struct *leader; - if (!detail) + if (!detail){ + printk("diag_task_user_stack 4\n"); return; + } detail->stack[0] = 0; - if (!tsk || !tsk->mm) + if (!tsk || !tsk->mm){ + printk("diag_task_user_stack 5\n"); return; + } leader = tsk->group_leader; if (!leader || !leader->mm || leader->exit_state == EXIT_ZOMBIE) { + printk("diag_task_user_stack 6\n"); return; } @@ -311,26 +316,19 @@ void diag_task_user_stack(struct task_struct *tsk, user_stack_detail *detail) { regs = task_pt_regs(tsk); if (regs) { sp = regs->sp; -#if defined(DIAG_ARM64) - ip = regs->pc; - bp = regs->sp; -#else ip = regs->ip; bp = regs->bp; -#endif } -#if defined(DIAG_ARM64) - detail->regs = regs->user_regs; -#else detail->regs = *regs; -#endif detail->sp = sp; detail->ip = ip; detail->bp = bp; if (tsk == current) { + printk("diag_task_user_stack 7\n"); diagnose_save_stack_trace_user(detail->stack); } else { + printk("diag_task_user_stack 8\n"); diagnose_save_stack_trace_user_remote(tsk, detail->stack); } }