]> rtime.felk.cvut.cz Git - l4.git/blobdiff - kernel/fiasco/src/jdb/ia32/jdb-ia32-amd64.cpp
update
[l4.git] / kernel / fiasco / src / jdb / ia32 / jdb-ia32-amd64.cpp
index 5539beb09f0a18aeb73ae1e4855b869be4d7729f..3eb134c87f54b3dda77c9da15a77dadc7016620c 100644 (file)
@@ -107,7 +107,6 @@ IMPLEMENTATION[ia32,amd64]:
 #include "apic.h"
 #include "boot_info.h"
 #include "checksum.h"
-#include "cmdline.h"
 #include "config.h"
 #include "cpu.h"
 #include "initcalls.h"
@@ -120,6 +119,7 @@ IMPLEMENTATION[ia32,amd64]:
 #include "kernel_uart.h"
 #include "kernel_task.h"
 #include "kmem.h"
+#include "koptions.h"
 #include "logdefs.h"
 #include "mem_layout.h"
 #include "pic.h"
@@ -128,11 +128,10 @@ IMPLEMENTATION[ia32,amd64]:
 #include "regdefs.h"
 #include "static_init.h"
 #include "terminate.h"
-#include "thread.h" 
+#include "thread.h"
 #include "thread_state.h"
 #include "timer.h"
 #include "trap_state.h"
-#include "virq.h"
 #include "vkey.h"
 #include "watchdog.h"
 
@@ -173,10 +172,10 @@ STATIC_INITIALIZE_P(Jdb,JDB_INIT_PRIO);
 IMPLEMENT FIASCO_INIT FIASCO_NOINLINE
 void Jdb::init()
 {
-  if (strstr (Cmdline::cmdline(), " -nojdb"))
+  if (Koptions::o()->opt(Koptions::F_nojdb))
     return;
 
-  if (strstr (Cmdline::cmdline(), " -jdb_never_stop"))
+  if (Koptions::o()->opt(Koptions::F_jdb_never_stop))
     never_break = 1;
 
   init_serial_console();
@@ -203,6 +202,29 @@ Jdb::connected()
   return _connected;
 }
 
+PROTECTED static inline
+template< typename T >
+void
+Jdb::set_monitored_address(T *dest, T val)
+{
+  *dest = val;
+}
+
+PROTECTED static inline
+template< typename T >
+T
+Jdb::monitor_address(unsigned current_cpu, T *addr)
+{
+  if (!*addr && Cpu::cpus.cpu(current_cpu).has_monitor_mwait())
+    {
+      asm volatile ("monitor \n" : : "a"(addr), "c"(0), "d"(0) );
+      Mword irq_sup = Cpu::cpus.cpu(current_cpu).has_monitor_mwait_irq() ? 1 : 0;
+      asm volatile ("mwait   \n" : : "a"(0x00), "c"(irq_sup) );
+    }
+
+  return *addr;
+}
+
 
 #if 0
 PUBLIC static
@@ -245,13 +267,15 @@ Jdb::save_disable_irqs(unsigned cpu)
        {
          Watchdog::disable();
          pic_status = Pic::disable_all_save();
+          if (Config::getchar_does_hlt && Config::getchar_does_hlt_works_ok)
+            Timer::disable();
        }
       if (Io_apic::active() && Apic::is_present())
        {
          apic_tpr.cpu(cpu) = Apic::tpr();
          Apic::tpr(APIC_IRQ_BASE - 0x10);
        }
-      
+
       if (cpu == 0 && Config::getchar_does_hlt && Config::getchar_does_hlt_works_ok)
        {
          // set timer interrupt does nothing than wakeup from hlt
@@ -483,9 +507,8 @@ Jdb::is_adapter_memory(Address virt, Space *task)
   if (!task)
     // phys requested
     phys = virt;
-  else if (task == Config::kernel_taskno
-           || (!Kmem::is_io_bitmap_page_fault(virt)
-               && Kmem::is_kmem_page_fault(virt, 0)))
+  else if (   !Kmem::is_io_bitmap_page_fault(virt)
+           &&  Kmem::is_kmem_page_fault(virt, 0))
     // kernel address
     phys = Kmem::virt_to_phys((const void*)virt);
   else
@@ -560,7 +583,7 @@ Jdb::guess_thread_state(Thread *t)
        }
     }
 
-  if (state == s_unknown && (t->state() & Thread_ipc_mask))
+  if (state == s_unknown && (t->state(false) & Thread_ipc_mask))
     state = s_ipc;
 
   return state;
@@ -945,8 +968,8 @@ Jdb::handle_nested_trap(Jdb_entry_frame *e)
       break;
     case 3:
       cursor(Jdb_screen::height(), 1);
-      printf("\nSoftware breakpoint inside jdb at "L4_PTR_FMT"\n", 
-         e->ip()-1);
+      printf("\nSoftware breakpoint inside jdb at "L4_PTR_FMT"\n",
+             e->ip()-1);
       break;
     case 13:
       switch (msr_test)