Lines Matching refs:length
314 static int imm_dec(struct pt_ild *ild, uint8_t length) in imm_dec() argument
322 if (ild->max_bytes <= length) in imm_dec()
325 ild->nominal_opcode = get_byte(ild, length); in imm_dec()
326 return length + 1; in imm_dec()
333 length += ild->imm1_bytes; in imm_dec()
334 length += ild->imm2_bytes; in imm_dec()
335 if (ild->max_bytes < length) in imm_dec()
338 return length; in imm_dec()
406 static int disp_dec(struct pt_ild *ild, uint8_t length) in disp_dec() argument
420 return imm_dec(ild, length); in disp_dec()
422 if (length + disp_bytes > ild->max_bytes) in disp_dec()
427 ild->disp_pos = length; in disp_dec()
429 return imm_dec(ild, length + disp_bytes); in disp_dec()
432 static int sib_dec(struct pt_ild *ild, uint8_t length) in sib_dec() argument
439 if (ild->max_bytes <= length) in sib_dec()
442 sib = get_byte(ild, length); in sib_dec()
446 return disp_dec(ild, length + 1); in sib_dec()
449 static int modrm_dec(struct pt_ild *ild, uint8_t length) in modrm_dec() argument
468 return disp_dec(ild, length); in modrm_dec()
471 if (length >= ild->max_bytes) in modrm_dec()
474 ild->modrm_byte = get_byte(ild, length); in modrm_dec()
488 return sib_dec(ild, length + 1); in modrm_dec()
491 return disp_dec(ild, length + 1); in modrm_dec()
494 static inline int get_next_as_opcode(struct pt_ild *ild, uint8_t length) in get_next_as_opcode() argument
499 if (ild->max_bytes <= length) in get_next_as_opcode()
502 ild->nominal_opcode = get_byte(ild, length); in get_next_as_opcode()
504 return modrm_dec(ild, length + 1); in get_next_as_opcode()
507 static int opcode_dec(struct pt_ild *ild, uint8_t length) in opcode_dec() argument
515 b = get_byte(ild, length); in opcode_dec()
520 return modrm_dec(ild, length + 1); in opcode_dec()
523 length++; /* eat the 0x0F */ in opcode_dec()
525 if (ild->max_bytes <= length) in opcode_dec()
529 m = get_byte(ild, length); in opcode_dec()
533 return get_next_as_opcode(ild, length + 1); in opcode_dec()
538 return get_next_as_opcode(ild, length + 1); in opcode_dec()
542 return get_next_as_opcode(ild, length + 1); in opcode_dec()
550 return modrm_dec(ild, length + 1); in opcode_dec()
555 return modrm_dec(ild, length + 1); in opcode_dec()
559 typedef int (*prefix_decoder)(struct pt_ild *ild, uint8_t length, uint8_t rex);
562 static inline int prefix_decode(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_decode() argument
569 if (ild->max_bytes <= length) in prefix_decode()
572 byte = get_byte(ild, length); in prefix_decode()
574 return prefix_table[byte](ild, length, rex); in prefix_decode()
577 static inline int prefix_next(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_next() argument
579 return prefix_decode(ild, length + 1, rex); in prefix_next()
582 static int prefix_osz(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_osz() argument
591 return prefix_next(ild, length, 0); in prefix_osz()
594 static int prefix_asz(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_asz() argument
603 return prefix_next(ild, length, 0); in prefix_asz()
606 static int prefix_lock(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_lock() argument
615 return prefix_next(ild, length, 0); in prefix_lock()
618 static int prefix_f2(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_f2() argument
628 return prefix_next(ild, length, 0); in prefix_f2()
631 static int prefix_f3(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_f3() argument
641 return prefix_next(ild, length, 0); in prefix_f3()
644 static int prefix_ignore(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_ignore() argument
648 return prefix_next(ild, length, 0); in prefix_ignore()
651 static int prefix_done(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_done() argument
661 return opcode_dec(ild, length); in prefix_done()
664 static int prefix_rex(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_rex() argument
672 return prefix_next(ild, length, get_byte(ild, length)); in prefix_rex()
674 return opcode_dec(ild, length); in prefix_rex()
677 static inline int prefix_vex_done(struct pt_ild *ild, uint8_t length) in prefix_vex_done() argument
682 ild->nominal_opcode = get_byte(ild, length); in prefix_vex_done()
684 return modrm_dec(ild, length + 1); in prefix_vex_done()
687 static int prefix_vex_c5(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_vex_c5() argument
700 if (max_bytes <= (length + 1)) in prefix_vex_c5()
703 p1 = get_byte(ild, length + 1); in prefix_vex_c5()
707 return opcode_dec(ild, length); in prefix_vex_c5()
713 if (max_bytes < (length + 3)) in prefix_vex_c5()
723 length += 2; in prefix_vex_c5()
724 return prefix_vex_done(ild, length); in prefix_vex_c5()
727 static int prefix_vex_c4(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_vex_c4() argument
740 if (max_bytes <= (length + 1)) in prefix_vex_c4()
743 p1 = get_byte(ild, length + 1); in prefix_vex_c4()
747 return opcode_dec(ild, length); in prefix_vex_c4()
753 if (max_bytes < (length + 4)) in prefix_vex_c4()
756 p2 = get_byte(ild, length + 2); in prefix_vex_c4()
773 length += 3; in prefix_vex_c4()
774 return prefix_vex_done(ild, length); in prefix_vex_c4()
777 static int prefix_evex(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_evex() argument
790 if (max_bytes <= (length + 1)) in prefix_evex()
793 p1 = get_byte(ild, length + 1); in prefix_evex()
797 return opcode_dec(ild, length); in prefix_evex()
803 if (max_bytes < (length + 5)) in prefix_evex()
806 p2 = get_byte(ild, length + 2); in prefix_evex()
821 length += 4; in prefix_evex()
822 return prefix_vex_done(ild, length); in prefix_evex()