|
|
1.1 ! root 1: #include <u.h> ! 2: #include <libc.h> ! 3: #include <bio.h> ! 4: #include <mach.h> ! 5: /* table for selecting machine-dependent parameters */ ! 6: ! 7: typedef struct machtab Machtab; ! 8: ! 9: struct machtab ! 10: { ! 11: char *name; /* machine name */ ! 12: short type; /* executable type */ ! 13: short boottype; /* bootable type */ ! 14: int asstype; /* disassembler code */ ! 15: Mach *mach; /* machine description */ ! 16: Machdata *machdata; /* machine functions */ ! 17: }; ! 18: ! 19: extern Mach mmips, msparc, m68020, mi386, mi960; ! 20: extern Machdata mipsmach, sparcmach, m68020mach, i386mach, i960mach; ! 21: ! 22: /* ! 23: * machine selection table. machines with native disassemblers should ! 24: * follow the plan 9 variant in the table; native modes are selectable ! 25: * only by name. ! 26: */ ! 27: Machtab machines[] = ! 28: { ! 29: { "68020", /*68020*/ ! 30: F68020, ! 31: F68020B, ! 32: A68020, ! 33: &m68020, ! 34: &m68020mach, }, ! 35: { "68020", /*Next 68040 bootable*/ ! 36: F68020, ! 37: FNEXTB, ! 38: A68020, ! 39: &m68020, ! 40: &m68020mach, }, ! 41: { "mips", /*plan 9 mips*/ ! 42: FMIPS, ! 43: FMIPSB, ! 44: AMIPS, ! 45: &mmips, ! 46: &mipsmach, }, ! 47: { "mipsco", /*native mips - must follow plan 9*/ ! 48: FMIPS, ! 49: FMIPSB, ! 50: AMIPSCO, ! 51: &mmips, ! 52: &mipsmach, }, ! 53: { "sparc", /*plan 9 sparc */ ! 54: FSPARC, ! 55: FSPARCB, ! 56: ASPARC, ! 57: &msparc, ! 58: &sparcmach, }, ! 59: { "sunsparc", /*native sparc - must follow plan 9*/ ! 60: FSPARC, ! 61: FSPARCB, ! 62: ASUNSPARC, ! 63: &msparc, ! 64: &sparcmach, }, ! 65: { "386", /*plan 9 386*/ ! 66: FI386, ! 67: FI386B, ! 68: AI386, ! 69: &mi386, ! 70: &i386mach, }, ! 71: { "86", /*8086 - a peach of a machine*/ ! 72: FI386, ! 73: FI386B, ! 74: AI8086, ! 75: &mi386, ! 76: &i386mach, }, ! 77: { "960", /*i960*/ ! 78: FI960, ! 79: FI960B, ! 80: AI960, ! 81: &mi960, ! 82: &i960mach, }, ! 83: { 0 }, /*the terminator*/ ! 84: }; ! 85: ! 86: /* ! 87: * select a machine by executable file type ! 88: */ ! 89: void ! 90: machbytype(int type) ! 91: { ! 92: Machtab *mp; ! 93: ! 94: for (mp = machines; mp->name; mp++){ ! 95: if (mp->type == type || mp->boottype == type) { ! 96: asstype = mp->asstype; ! 97: machdata = mp->machdata; ! 98: break; ! 99: } ! 100: } ! 101: } ! 102: /* ! 103: * select a machine by name ! 104: */ ! 105: int ! 106: machbyname(char *name) ! 107: { ! 108: Machtab *mp; ! 109: ! 110: if (!name) { ! 111: asstype = AMIPS; ! 112: machdata = &mipsmach; ! 113: mach = &mmips; ! 114: return 1; ! 115: } ! 116: for (mp = machines; mp->name; mp++){ ! 117: if (strcmp(mp->name, name) == 0) { ! 118: asstype = mp->asstype; ! 119: machdata = mp->machdata; ! 120: mach = mp->mach; ! 121: return 1; ! 122: } ! 123: } ! 124: return 0; ! 125: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.