Ver Fonte

hv_vcpu_config_get_feature_regs: add feature regs

From 12.5.1 decompile
osy há 2 anos atrás
pai
commit
87a9b023af
1 ficheiros alterados com 15 adições e 2 exclusões
  1. 15 2
      hv.m

+ 15 - 2
hv.m

@@ -1,4 +1,5 @@
 // Decompiled by hand (based-ish on a Ghidra decompile) from Hypervisor.framework on macOS 12.0b1
+// 06/09/22: updated for 12.5.1
 @import Darwin;
 @import Dispatch;
 #include <Hypervisor/Hypervisor.h>
@@ -61,6 +62,11 @@ struct hv_vcpu_data_feature_regs {
   uint64_t aa64mmfr2_el1;  // 0x38
   uint64_t aa64pfr0_el1;   // 0x40
   uint64_t aa64pfr1_el1;   // 0x48
+  uint64_t ctr_el0;        // 0x50
+  uint64_t dczid_el0;      // 0x58
+  uint64_t clidr_el1;      // 0x60
+  uint64_t ccsidr_el1_inst[8]; // 0x68
+  uint64_t ccsidr_el1_data_or_unified[8]; // 0xA8
 };
 
 static hv_return_t _hv_vcpu_config_get_feature_regs(
@@ -80,6 +86,13 @@ static hv_return_t _hv_vcpu_config_get_feature_regs(
   feature_regs->aa64mmfr2_el1 = caps->id_aa64mmfr2_el1;
   feature_regs->aa64pfr0_el1 = caps->id_aa64pfr0_el1;
   feature_regs->aa64pfr1_el1 = caps->id_aa64pfr1_el1;
+  feature_regs->ctr_el0 = caps->ctr_el0;
+  feature_regs->dczid_el0 = caps->dczid_el0;
+  feature_regs->clidr_el1 = caps->clidr_el1;
+  static_assert(sizeof(feature_regs->ccsidr_el1_inst) == sizeof(caps->ccsidr_el1_inst), "ccsidr_el1_inst size");
+  memcpy(feature_regs->ccsidr_el1_inst, caps->ccsidr_el1_inst, sizeof(feature_regs->ccsidr_el1_inst));
+  static_assert(sizeof(feature_regs->ccsidr_el1_data_or_unified) == sizeof(caps->ccsidr_el1_data_or_unified), "ccsidr_el1_data_or_unified size");
+  memcpy(feature_regs->ccsidr_el1_data_or_unified, caps->ccsidr_el1_data_or_unified, sizeof(feature_regs->ccsidr_el1_data_or_unified));
   return 0;
 }
 
@@ -148,10 +161,10 @@ static_assert(sizeof(struct hv_vcpu_zone) == 0x8000, "hv_vcpu_zone");
 struct hv_vcpu_data {
   struct hv_vcpu_zone* vcpu_zone;                 // 0x0
   struct hv_vcpu_data_feature_regs feature_regs;  // 0x8
-  char filler[0xe8 - 0x50];                       // 0x50
   uint64_t pending_interrupts;                    // 0xe8
   hv_vcpu_exit_t exit;                            // 0xf0
-  char filler2[0x8];                              // 0x110
+  uint32_t timer_enabled;                         // 0x110
+  uint32_t field_114;                             // 0x114
 };
 
 static_assert(sizeof(struct hv_vcpu_data) == 0x118, "hv_vcpu_data");