Lines Matching refs:length
275 static int imm_dec(struct pt_ild *ild, uint8_t length) in imm_dec() argument
283 if (ild->max_bytes <= length) in imm_dec()
286 ild->nominal_opcode = get_byte(ild, length); in imm_dec()
287 return length + 1; in imm_dec()
294 length += ild->imm1_bytes; in imm_dec()
295 length += ild->imm2_bytes; in imm_dec()
296 if (ild->max_bytes < length) in imm_dec()
299 return length; in imm_dec()
367 static int disp_dec(struct pt_ild *ild, uint8_t length) in disp_dec() argument
381 return imm_dec(ild, length); in disp_dec()
383 if (length + disp_bytes > ild->max_bytes) in disp_dec()
388 ild->disp_pos = length; in disp_dec()
390 return imm_dec(ild, length + disp_bytes); in disp_dec()
393 static int sib_dec(struct pt_ild *ild, uint8_t length) in sib_dec() argument
400 if (ild->max_bytes <= length) in sib_dec()
403 sib = get_byte(ild, length); in sib_dec()
407 return disp_dec(ild, length + 1); in sib_dec()
410 static int modrm_dec(struct pt_ild *ild, uint8_t length) in modrm_dec() argument
429 return disp_dec(ild, length); in modrm_dec()
432 if (length >= ild->max_bytes) in modrm_dec()
435 ild->modrm_byte = get_byte(ild, length); in modrm_dec()
449 return sib_dec(ild, length + 1); in modrm_dec()
452 return disp_dec(ild, length + 1); in modrm_dec()
455 static inline int get_next_as_opcode(struct pt_ild *ild, uint8_t length) in get_next_as_opcode() argument
460 if (ild->max_bytes <= length) in get_next_as_opcode()
463 ild->nominal_opcode = get_byte(ild, length); in get_next_as_opcode()
465 return modrm_dec(ild, length + 1); in get_next_as_opcode()
468 static int opcode_dec(struct pt_ild *ild, uint8_t length) in opcode_dec() argument
476 b = get_byte(ild, length); in opcode_dec()
481 return modrm_dec(ild, length + 1); in opcode_dec()
484 length++; /* eat the 0x0F */ in opcode_dec()
486 if (ild->max_bytes <= length) in opcode_dec()
490 m = get_byte(ild, length); in opcode_dec()
494 return get_next_as_opcode(ild, length + 1); in opcode_dec()
499 return get_next_as_opcode(ild, length + 1); in opcode_dec()
503 return get_next_as_opcode(ild, length + 1); in opcode_dec()
511 return modrm_dec(ild, length + 1); in opcode_dec()
516 return modrm_dec(ild, length + 1); in opcode_dec()
520 typedef int (*prefix_decoder)(struct pt_ild *ild, uint8_t length, uint8_t rex);
522 static int prefix_osz(struct pt_ild *ild, uint8_t length, uint8_t rex);
523 static int prefix_asz(struct pt_ild *ild, uint8_t length, uint8_t rex);
524 static int prefix_lock(struct pt_ild *ild, uint8_t length, uint8_t rex);
525 static int prefix_f2(struct pt_ild *ild, uint8_t length, uint8_t rex);
526 static int prefix_f3(struct pt_ild *ild, uint8_t length, uint8_t rex);
527 static int prefix_rex(struct pt_ild *ild, uint8_t length, uint8_t rex);
528 static int prefix_vex_c4(struct pt_ild *ild, uint8_t length, uint8_t rex);
529 static int prefix_vex_c5(struct pt_ild *ild, uint8_t length, uint8_t rex);
530 static int prefix_evex(struct pt_ild *ild, uint8_t length, uint8_t rex);
531 static int prefix_ignore(struct pt_ild *ild, uint8_t length, uint8_t rex);
532 static int prefix_done(struct pt_ild *ild, uint8_t length, uint8_t rex);
808 static inline int prefix_decode(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_decode() argument
815 if (ild->max_bytes <= length) in prefix_decode()
818 byte = get_byte(ild, length); in prefix_decode()
820 return prefix_table[byte](ild, length, rex); in prefix_decode()
823 static inline int prefix_next(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_next() argument
825 return prefix_decode(ild, length + 1, rex); in prefix_next()
828 static int prefix_osz(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_osz() argument
837 return prefix_next(ild, length, 0); in prefix_osz()
840 static int prefix_asz(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_asz() argument
849 return prefix_next(ild, length, 0); in prefix_asz()
852 static int prefix_lock(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_lock() argument
861 return prefix_next(ild, length, 0); in prefix_lock()
864 static int prefix_f2(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_f2() argument
874 return prefix_next(ild, length, 0); in prefix_f2()
877 static int prefix_f3(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_f3() argument
887 return prefix_next(ild, length, 0); in prefix_f3()
890 static int prefix_ignore(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_ignore() argument
894 return prefix_next(ild, length, 0); in prefix_ignore()
897 static int prefix_done(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_done() argument
907 return opcode_dec(ild, length); in prefix_done()
910 static int prefix_rex(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_rex() argument
918 return prefix_next(ild, length, get_byte(ild, length)); in prefix_rex()
920 return opcode_dec(ild, length); in prefix_rex()
923 static inline int prefix_vex_done(struct pt_ild *ild, uint8_t length) in prefix_vex_done() argument
928 ild->nominal_opcode = get_byte(ild, length); in prefix_vex_done()
930 return modrm_dec(ild, length + 1); in prefix_vex_done()
933 static int prefix_vex_c5(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_vex_c5() argument
946 if (max_bytes <= (length + 1)) in prefix_vex_c5()
949 p1 = get_byte(ild, length + 1); in prefix_vex_c5()
953 return opcode_dec(ild, length); in prefix_vex_c5()
959 if (max_bytes < (length + 3)) in prefix_vex_c5()
969 length += 2; in prefix_vex_c5()
970 return prefix_vex_done(ild, length); in prefix_vex_c5()
973 static int prefix_vex_c4(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_vex_c4() argument
986 if (max_bytes <= (length + 1)) in prefix_vex_c4()
989 p1 = get_byte(ild, length + 1); in prefix_vex_c4()
993 return opcode_dec(ild, length); in prefix_vex_c4()
999 if (max_bytes < (length + 4)) in prefix_vex_c4()
1002 p2 = get_byte(ild, length + 2); in prefix_vex_c4()
1019 length += 3; in prefix_vex_c4()
1020 return prefix_vex_done(ild, length); in prefix_vex_c4()
1023 static int prefix_evex(struct pt_ild *ild, uint8_t length, uint8_t rex) in prefix_evex() argument
1036 if (max_bytes <= (length + 1)) in prefix_evex()
1039 p1 = get_byte(ild, length + 1); in prefix_evex()
1043 return opcode_dec(ild, length); in prefix_evex()
1049 if (max_bytes < (length + 5)) in prefix_evex()
1052 p2 = get_byte(ild, length + 2); in prefix_evex()
1067 length += 4; in prefix_evex()
1068 return prefix_vex_done(ild, length); in prefix_evex()