static struct ptunit_result overflow(struct evq_fixture *efix, enum pt_event_binding evb, size_t num) { struct pt_event *in[evq_max], *out[evq_max], *ev; size_t idx; ptu_uint_le(num, evq_max - 2); for (idx = 0; idx < (evq_max - 2); ++idx) { in[idx] = pt_evq_enqueue(&efix->evq, evb); ptu_ptr(in[idx]); } for (idx = 0; idx < num; ++idx) { ev = pt_evq_enqueue(&efix->evq, evb); ptu_null(ev); } for (idx = 0; idx < num; ++idx) { out[idx] = pt_evq_dequeue(&efix->evq, evb); ptu_ptr_eq(out[idx], in[idx]); } return ptu_passed(); }
static struct ptunit_result enqueue_all_dequeue(struct evq_fixture *efix, enum pt_event_binding evb, size_t num) { struct pt_event *in[evq_max], *out[evq_max]; size_t idx; ptu_uint_le(num, evq_max - 2); for (idx = 0; idx < num; ++idx) { in[idx] = pt_evq_enqueue(&efix->evq, evb); ptu_ptr(in[idx]); } ptu_test(evq_pending, efix, evb); ptu_test(evq_others_empty, efix, evb); for (idx = 0; idx < num; ++idx) { out[idx] = pt_evq_dequeue(&efix->evq, evb); ptu_ptr_eq(out[idx], in[idx]); } ptu_test(evq_empty, efix, evb); return ptu_passed(); }
static struct ptunit_result init(struct section_fixture *sfix) { ptu_ptr_eq(sfix->msec.section, &sfix->section); ptu_uint_eq(sfix->msec.vaddr, sfix->vaddr); ptu_uint_eq(sfix->msec.asid.size, sfix->asid.size); ptu_uint_eq(sfix->msec.asid.cr3, sfix->asid.cr3); return ptu_passed(); }
static struct ptunit_result unknown(struct packet_fixture *pfix, int exp) { int size; pfix->buffer[0] = pt_opc_bad; pfix->unknown = exp; size = pt_pkt_next(&pfix->decoder, &pfix->packet[1], sizeof(pfix->packet[1])); ptu_int_eq(size, pfix->unknown); if (size >= 0) { ptu_int_eq(pfix->packet[1].type, ppt_unknown); ptu_uint_eq(pfix->packet[1].size, (uint8_t) size); ptu_ptr_eq(pfix->packet[1].payload.unknown.packet, pfix->buffer); ptu_ptr_eq(pfix->packet[1].payload.unknown.priv, pfix); } return ptu_passed(); }
static struct ptunit_result fetch_unknown(struct fetch_fixture *ffix) { const struct pt_decoder_function *dfun; int errcode; ffix->config.begin[0] = pt_opc_bad; errcode = pt_df_fetch(&dfun, ffix->config.begin, &ffix->config); ptu_int_eq(errcode, 0); ptu_ptr_eq(dfun, &pt_decode_unknown); return ptu_passed(); }
static struct ptunit_result sync_bwd(struct sync_fixture *sfix) { const uint8_t *sync; int errcode; sfix_encode_psb(sfix->config.begin + 0x23); errcode = pt_sync_backward(&sync, sfix->config.end, &sfix->config); ptu_int_eq(errcode, 0); ptu_ptr_eq(sync, sfix->config.begin + 0x23); return ptu_passed(); }
static struct ptunit_result sync_fwd_here(struct sync_fixture *sfix) { const uint8_t *sync; int errcode; sfix_encode_psb(sfix->config.begin); errcode = pt_sync_forward(&sync, sfix->config.begin, &sfix->config); ptu_int_eq(errcode, 0); ptu_ptr_eq(sync, sfix->config.begin); return ptu_passed(); }
static struct ptunit_result fetch_packet(struct fetch_fixture *ffix, const struct pt_packet *packet, const struct pt_decoder_function *df) { const struct pt_decoder_function *dfun; int errcode; errcode = pt_enc_next(&ffix->encoder, packet); ptu_int_ge(errcode, 0); errcode = pt_df_fetch(&dfun, ffix->config.begin, &ffix->config); ptu_int_eq(errcode, 0); ptu_ptr_eq(dfun, df); return ptu_passed(); }
static struct ptunit_result enqueue_one_dequeue(struct evq_fixture *efix, enum pt_event_binding evb, size_t num) { size_t idx; for (idx = 0; idx < num; ++idx) { struct pt_event *in, *out; in = pt_evq_enqueue(&efix->evq, evb); ptu_ptr(in); out = pt_evq_dequeue(&efix->evq, evb); ptu_ptr_eq(out, in); } return ptu_passed(); }
static struct ptunit_result find(struct evq_fixture *efix, enum pt_event_binding evb, enum pt_event_type evt, size_t before, size_t after) { struct pt_event *in, *out; ptu_test(evq_enqueue_other, efix, evb, evt, before); in = pt_evq_enqueue(&efix->evq, evb); ptu_ptr(in); in->type = evt; ptu_test(evq_enqueue_other, efix, evb, evt, after); out = pt_evq_find(&efix->evq, evb, evt); ptu_ptr_eq(out, in); return ptu_passed(); }