分页: 1 / 1

[已解决] Make bochs2.4.1出错

发表于 : 2009-06-15 12:47
excalibur
make时的错误
proc_ctrl.cc:654: error: ‘CheckPDPTR’ was not declared in this scope
proc_ctrl.cc:668: error: ‘CheckPDPTR’ was not declared in this scope
make[1]: *** [proc_ctrl.o] Error 1

Google无果,还望哪位大哥指点一二
GCC版本gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3



自己解决:

代码: 全选

650行开始 
#if BX_SUPPORT_VMX 
      VMexit_CR3_Write(i, val_32); 
      if (BX_CPU_THIS_PTR cr0.get_PG() && BX_CPU_THIS_PTR cr4.get_PAE() && 
!long_mode()) { 
        if (! CheckPDPTR(val_32)) { 
          BX_ERROR(("SetCR3(): PDPTR check failed !")); 
          exception(BX_GP_EXCEPTION, 0, 0); 
        } 
      } 
      SetCR3(val_32); 
      BX_INSTR_TLB_CNTRL(BX_CPU_ID, BX_INSTR_MOV_CR3, val_32); 
      break; 
#endif 
#if BX_CPU_LEVEL > 3 
    case 4: // CR4 
#if BX_SUPPORT_VMX 
      val_32 = VMexit_CR4_Write(i, val_32); 
      if (BX_CPU_THIS_PTR cr0.get_PG() && (val_32 & (1<<5)) != 0 /* PAE */ 
&& !long_mode()) { 
        if (! CheckPDPTR(BX_CPU_THIS_PTR cr3)) { 
          BX_ERROR(("SetCR4(): PDPTR check failed !")); 
          exception(BX_GP_EXCEPTION, 0, 0); 
        } 
      } 
      // Protected mode: #GP(0) if attempt to write a 1 to 
      // any reserved bit of CR4 
      if (! SetCR4(val_32)) 
        exception(BX_GP_EXCEPTION, 0, 0); 
      break; 
#endif 
#endif 
    default: 
      BX_ERROR(("MOV_CdRd: #UD - control register %d index out of range", 
i->nnn())); 
      exception(BX_UD_EXCEPTION, 0, 0); 
  } 
} 

683结束 

Re: [已解决] Make bochs2.4.1出错

发表于 : 2009-07-11 9:24
moonese
多谢,贴个 diff 格式的,看变更清楚些

Re: [已解决] Make bochs2.4.1出错

发表于 : 2009-07-11 9:48
moonese

代码: 全选

@@ -649,7 +649,6 @@
     case 3: // CR3
 #if BX_SUPPORT_VMX
       VMexit_CR3_Write(i, val_32);
-#endif
       if (BX_CPU_THIS_PTR cr0.get_PG() && BX_CPU_THIS_PTR cr4.get_PAE() && !long_mode()) {
         if (! CheckPDPTR(val_32)) {
           BX_ERROR(("SetCR3(): PDPTR check failed !"));
@@ -659,11 +658,11 @@
       SetCR3(val_32);
       BX_INSTR_TLB_CNTRL(BX_CPU_ID, BX_INSTR_MOV_CR3, val_32);
       break;
+#endif
 #if BX_CPU_LEVEL > 3
     case 4: // CR4
 #if BX_SUPPORT_VMX
       val_32 = VMexit_CR4_Write(i, val_32);
-#endif
       if (BX_CPU_THIS_PTR cr0.get_PG() && (val_32 & (1<<5)) != 0 /* PAE */ && !long_mode()) {
         if (! CheckPDPTR(BX_CPU_THIS_PTR cr3)) {
           BX_ERROR(("SetCR4(): PDPTR check failed !"));
@@ -676,6 +675,7 @@
         exception(BX_GP_EXCEPTION, 0, 0);
       break;
 #endif
+#endif
     default:
       BX_ERROR(("MOV_CdRd: #UD - control register %d index out of range", i->nnn()));
       exception(BX_UD_EXCEPTION, 0, 0);

Re: [已解决] Make bochs2.4.1出错

发表于 : 2009-07-11 10:41
moonese
另外试了下最新的cvs snapshot,已经解决了,看代码略有不同
http://bochs.sourceforge.net/cvs-snapsh ... 704.tar.gz

Re: [已解决] Make bochs2.4.1出错

发表于 : 2009-07-16 10:58
excalibur
现在也明白了, 正式版有时候不如cvs/svn的版本...

Re: [已解决] Make bochs2.4.1出错

发表于 : 2009-07-21 15:57
yansheng1003
这个说啥子哦,看不懂

Re: [已解决] Make bochs2.4.1出错

发表于 : 2009-08-15 18:46
jingouwangzi
请问能不能解释一下这个是怎么搞的?上来就一堆代码我看不懂啊?

Re: [已解决] Make bochs2.4.1出错

发表于 : 2009-08-15 19:03
jingouwangzi
我又看明白了,问题已经解决了,谢谢啦

Re: [已解决] Make bochs2.4.1出错

发表于 : 2009-10-09 19:19
widon1104
en,看一看

Re: [已解决] Make bochs2.4.1出错

发表于 : 2009-10-10 10:15
Jarson
mark :em11