get_sysreg_offsets.m 679 B

12345678910111213141516171819
  1. @import Darwin;
  2. @import Hypervisor;
  3. int main() {
  4. // 12.3.1
  5. const uint64_t kHvVcpuGetSysRegAddr = 0x00000001e383f020ull;
  6. const uint64_t kFindSysRegAddr = 0x00000001e383f314ull;
  7. int64_t find_sys_reg_offset = kFindSysRegAddr - kHvVcpuGetSysRegAddr;
  8. uint64_t get_sys_reg_addr = (uint64_t)&hv_vcpu_get_sys_reg;
  9. bool (*find_sys_reg)(uint32_t reg, uint64_t * offset, uint64_t * flags) =
  10. (void*)(get_sys_reg_addr + find_sys_reg_offset);
  11. for (uint32_t reg = 0; reg < 0x10000; reg++) {
  12. uint64_t offset = 0;
  13. uint64_t flags = 0;
  14. bool found = find_sys_reg(reg, &offset, &flags);
  15. if (found) {
  16. printf("%x %llx %llx\n", reg, offset, flags);
  17. }
  18. }
  19. }