00001
00002
00003 #ifndef jdb_bt_i_h
00004 #define jdb_bt_i_h
00005
00006 #include <cstdio>
00007 #include <cctype>
00008
00009 #include "config.h"
00010 #include "jdb.h"
00011 #include "jdb_input.h"
00012 #include "jdb_lines.h"
00013 #include "jdb_module.h"
00014 #include "jdb_symbol.h"
00015 #include "mem_layout.h"
00016 #include "keycodes.h"
00017 #include "thread.h"
00018
00019 class Jdb_bt : public Jdb_module, public Jdb_input_task_addr
00020 {
00021 static char dummy;
00022 static char first_char;
00023 static char first_char_addr;
00024 static Address addr;
00025 static Global_id tid;
00026 static Task_num task;
00027
00028 public:
00029 Jdb_module::Action_code action(int cmd, void *&args, char const *&fmt, int &next_char);
00030
00031 Jdb_module::Cmd const *const cmds() const;
00032
00033 int const num_cmds() const;
00034
00035 Jdb_bt();
00036
00037 private:
00038
00039 static void get_user_eip_ebp(Address &eip, Address &ebp);
00040
00041 static Mword get_user_ebp_following_kernel_stack();
00042
00043 static void get_kernel_eip_ebp(Mword &eip1, Mword &eip2, Mword &ebp);
00044
00046 static void show_item(int nr, Address addr, Address_type user);
00047
00048 static void show_without_ebp();
00049
00050 static void show(Mword ebp, Mword eip1, Mword eip2, Address_type user);
00051 };
00052
00053 #endif // jdb_bt_i_h