diff -urpbd binutils-2.9.5.0.31-orig/opcodes/i386-dis.c binutils-2.9.5.0.31/opcodes/i386-dis.c --- binutils-2.9.5.0.31-orig/opcodes/i386-dis.c Thu Jan 13 20:43:43 2000 +++ binutils-2.9.5.0.31/opcodes/i386-dis.c Mon Apr 17 14:50:58 2000 @@ -1514,6 +1514,12 @@ static const struct dis386 dis386_twobyt { "(bad)", XX, XX, XX } }; +static const struct dis386 dis386_l4[] = { + /* 00 */ + { "", XX, XX, XX }, + { "int3", XX, XX, XX } +}; + static const unsigned char onebyte_has_modrm[256] = { /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ /* ------------------------------- */ @@ -2205,6 +2211,100 @@ print_insn_i386 (pc, info) dp = &dis386_twobyte_att[*++codep]; need_modrm = twobyte_has_modrm[*codep]; uses_f3_prefix = twobyte_uses_f3_prefix[*codep]; + } + else + if (*codep == 0xcc) + { + /* L4KD's hacks */ + FETCH_DATA (info, codep + 3); /* get two more bytes */ + need_modrm = 0; + uses_f3_prefix = 0; + + dp = &dis386_l4[0]; + switch (*++codep) + { + case 0x3c: + switch(*++codep) + { + case 0: oappend ("l4kd outchar(%al)"); break; + case 1: oappend ("l4kd outstring(%eax)"); break; + case 2: oappend ("l4kd outcstring(%eax)"); break; + case 3: oappend ("l4kd clear_page"); break; + case 4: oappend ("l4kd cursor"); break; + case 5: oappend ("l4kd outhex32(%eax)"); break; + case 6: oappend ("l4kd outhex20(%eax)"); break; + case 7: oappend ("l4kd outhex16(%eax)"); break; + case 8: oappend ("l4kd outhex12(%eax)"); break; + case 9: oappend ("l4kd outhex8(%eax)"); break; + case 10: oappend ("l4kd outhex4(%eax)"); break; + case 11: oappend ("l4kd outdec(%eax)"); break; + case 12: oappend ("l4kd incharety"); break; + case 13: oappend ("l4kd inchar"); break; + case 14: oappend ("l4kd inhex32"); break; + case 15: oappend ("l4kd inhex16"); break; + case 16: oappend ("l4kd inhex8"); break; + case 17: oappend ("l4kd inhext"); break; + case ' ' ... 0x7f: + { + char msg[2] = {*codep,0}; + oappend ("l4kd ko('"); oappend (msg); oappend ("')"); + }; break; + default: + oappend ("l4kd ???"); break; + }; + break; + + case 0x90: + { + int len; + + if (*++codep == 0xeb) + { + oappend ("l4kd kd_display(\""); + + FETCH_DATA (info, codep + 2); + len = *++codep; + + FETCH_DATA (info, codep + len + 1); + { + char msg[len + 1]; + strncpy(msg, codep + 1, len); + msg[len] = 0; + oappend (msg); + codep += len; + }; + oappend ("\")"); + } + else + { + codep -= 2; + dp = &dis386_l4[1]; + }; + + }; break; + case 0xeb: + { + int len; + oappend ("l4kd enter_kdebug(\""); + + FETCH_DATA (info, codep + 2); + len = *++codep; + + FETCH_DATA (info, codep + len + 1); + { + char msg[len + 1]; + strncpy(msg, codep + 1, len); + msg[len] = 0; + oappend (msg); + codep += len; + }; + oappend ("\")"); + }; break; + default: + codep--; + dp = &dis386_l4[1]; + break; + } } else {