static struct pt_section_list *pt_mk_section_list(struct pt_section *section, const struct pt_asid *asid, uint64_t vaddr, int isid) { struct pt_section_list *list; int errcode; list = malloc(sizeof(*list)); if (!list) return NULL; memset(list, 0, sizeof(*list)); errcode = pt_section_get(section); if (errcode < 0) goto out_mem; pt_msec_init(&list->section, section, asid, vaddr); list->isid = isid; return list; out_mem: free(list); return NULL; }
static struct ptunit_result end_bad(void) { struct pt_mapped_section msec; uint64_t end; pt_msec_init(&msec, NULL, NULL, 0x1000); end = pt_msec_end(&msec); ptu_uint_eq(end, 0ull); return ptu_passed(); }
static struct ptunit_result asid(void) { struct pt_mapped_section msec; struct pt_asid asid; const struct pt_asid *pasid; pt_asid_init(&asid); asid.cr3 = 0xa00; pt_msec_init(&msec, NULL, &asid, 0ull); pasid = pt_msec_asid(&msec); ptu_uint_eq(pasid->size, asid.size); ptu_uint_eq(pasid->cr3, asid.cr3); return ptu_passed(); }
static struct ptunit_result sfix_init(struct section_fixture *sfix) { uint8_t i; sfix->section.size = sfix->mapping.size = sizeof(sfix->mapping.content); sfix->vaddr = 0x1000; for (i = 0; i < sfix->mapping.size; ++i) sfix->mapping.content[i] = i; sfix->section.status = &sfix->mapping; sfix->section.mapping = NULL; pt_asid_init(&sfix->asid); sfix->asid.cr3 = 0x4200ull; pt_msec_init(&sfix->msec, &sfix->section, &sfix->asid, sfix->vaddr); return ptu_passed(); }