Function report |
Source Code:kernel\debug\debug_core.c |
Create Date:2022-07-28 11:37:55 |
Last Modify:2020-03-17 19:04:10 | Copyright©Brick |
home page | Tree |
Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:kgdb_cpu_enter
Proto:static int kgdb_cpu_enter(struct kgdb_state *ks, struct pt_regs *regs, int exception_state)
Type:int
Parameter:
Type | Parameter | Name |
---|---|---|
struct kgdb_state * | ks | |
struct pt_regs * | regs | |
int | exception_state |
560 | sstep_tries = 100 |
563 | trace_on = 0 |
564 | online_cpus = num_online_cpus() |
567 | enter_kgdb++ |
568 | exception_state |= exception_state |
570 | If exception_state == Waiting to become a master kgdb cpu Then atomic_inc( & We use NR_CPUs not PERCPU, in case kgdb is used to debug early* bootup code (which might not have percpu set up yet):) |
572 | Else atomic_inc( & slaves_in_kgdb) |
575 | If disable_hw_break Then disable_hw_break(regs) |
578 | acquirelock : |
583 | local_irq_save(flags) |
586 | debuggerinfo = regs |
587 | task = current process |
588 | ret_state = 0 |
589 | irq_depth = hardirq_count() >> HARDIRQ_SHIFT |
592 | smp_mb() |
594 | If Guard for recursive entry == 1 Then |
597 | Go to cpu_master_loop |
604 | When 1 cycle |
605 | cpu_loop : |
606 | If exception_state & Transition from one master cpu to another Then |
608 | Go to cpu_master_loop |
609 | Else if exception_state & Waiting to become a master kgdb cpu Then |
612 | Break |
614 | Else if exception_state & Slave cpu should backtrace then clear flag Then |
617 | Else if exception_state & Slave cpu enter exception Then |
618 | If Not raw_spin_is_locked( & dbg_slave_lock) Then Go to return_normal |
620 | Else |
621 | return_normal : |
625 | If correct_hw_break Then correct_hw_break() |
627 | If trace_on Then tracing_on() |
629 | debuggerinfo = NULL |
630 | task = NULL |
633 | enter_kgdb-- |
634 | smp_mb__before_atomic() |
635 | atomic_dec( & slaves_in_kgdb) |
636 | dbg_touch_watchdogs() |
637 | local_irq_restore(flags) |
638 | Return 0 |
640 | cpu_relax() |
649 | If atomic_read( & keep track of the CPU which is doing the single stepping) != -1 && task && process id != kgdb_sstep_pid && --sstep_tries Then |
652 | atomic_set( & The CPU# of the active CPU, or -1 if none:, - 1) |
653 | raw_spin_unlock( & dbg_master_lock) |
654 | dbg_touch_watchdogs() |
655 | local_irq_restore(flags) |
657 | Go to acquirelock |
660 | If Not Return true if there is a valid kgdb I/O module Then |
661 | ret_state = 1 |
662 | Go to kgdb_restore |
668 | If kgdb_skipexception - Bail out of KGDB when we've been triggered Then Go to kgdb_restore |
672 | If pre_exception Then pre_exception() |
679 | If Not kgdb_single_step Then raw_spin_lock( & dbg_slave_lock) |
699 | 0x10c7 is 2**32 / 1000000 (rounded up) (1000) |
708 | kgdb_single_step = 0 |
710 | Guard for recursive entry = 0 |
711 | trace_on = tracing_is_on() |
712 | If trace_on Then tracing_off() |
715 | When 1 cycle |
716 | cpu_master_loop : |
717 | If Use kdb or gdbserver mode Then |
720 | If error == -1 Then Continue |
723 | Else |
727 | If error == stub return value for switching between the gdbstub and kdb Then |
729 | Else if error == Switch from one cpu to another Then |
732 | Go to cpu_loop |
733 | Else |
740 | If post_exception Then post_exception() |
743 | If Not kgdb_single_step Then |
744 | raw_spin_unlock( & dbg_slave_lock) |
747 | cpu_relax() |
750 | kgdb_restore : |
751 | If atomic_read( & keep track of the CPU which is doing the single stepping) != -1 Then |
753 | If task Then kgdb_sstep_pid = process id |
755 | Else kgdb_sstep_pid = 0 |
758 | If correct_hw_break Then correct_hw_break() |
760 | If trace_on Then tracing_on() |
763 | debuggerinfo = NULL |
764 | task = NULL |
767 | enter_kgdb-- |
768 | smp_mb__before_atomic() |
769 | atomic_dec( & We use NR_CPUs not PERCPU, in case kgdb is used to debug early* bootup code (which might not have percpu set up yet):) |
771 | atomic_set( & The CPU# of the active CPU, or -1 if none:, - 1) |
772 | raw_spin_unlock( & dbg_master_lock) |
773 | dbg_touch_watchdogs() |
774 | local_irq_restore(flags) |
776 | Return ret_state |
Name | Describe |
---|---|
kgdb_handle_exception | kgdb_handle_exception() - main entry point from a kernel exception* Locking hierarchy:* interface locks, if any (begin_session)* kgdb lock (kgdb_active) |
Source code conversion tool public plug-in interface | X |
---|---|
Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |