Annotation of gdb/=rt-changes, revision 1.1

1.1     ! root        1: From: zs01#@andrew.cmu.edu (Zalman Stern)
        !             2: Date: Sun, 24 May 87 03:20:57 edt
        !             3: To: [email protected]
        !             4: Subject: RT diffs for gdb version 2.1
        !             5: 
        !             6: Here are the new files, followed by the diffs to old files. The first file below
        !             7: is ITCMODS which is my attempt to document some of our changes. Unfortunately,
        !             8: it has not been maintained particularly well and notably does not include info
        !             9: about our changes to support the HIGH-C compiler. One big change we put in was
        !            10: to use a number of initialize routines instead of the "linked list of object
        !            11: modules" that is used on other machines. The RT object file format appears to
        !            12: have a variable size header before the code, making it very difficult
        !            13: (impossible?) to get the initialization stuff to work. If you have any
        !            14: questions, don't hesitate to send me mail.
        !            15: 
        !            16: -Z-
        !            17: 
        !            18: Only in .: ITCMODS
        !            19: 
        !            20: blockframe.c:
        !            21:     set_current_frame now takes an extra argument.
        !            22:     RT specific code for interpreting and caching of trace table entries.
        !            23:     Added initialize routine.
        !            24: 
        !            25: breakpoint.c:
        !            26:     Added new_breakpoint_commands flag to prevent incorrect interpretation of command lists containing a continue statement.
        !            27:     Modified do_breakpoint_commands to know about new_breakpoint_commands.
        !            28:     Modified clear_breakpoint_commands to set new_breakpoint_commands.
        !            29:     Added initialize routine.
        !            30: 
        !            31: core.c:
        !            32:     RT specific code to find the uarea.
        !            33:     RT specific code to indicate the start of the data segment.
        !            34:     set_current_frame now takes an extra argument.
        !            35:     Added initialize routine.
        !            36: 
        !            37: dbxread.c:
        !            38:     Added support for the Camphor dynamic loading system. (All under #ifdef CAMPHOR).
        !            39:     Fix for multiple declarations of register variables (i.e. they are declared twice). The fix munges the incorrect declaration (i.e. the one which is not register).
        !            40:     set_rel_command to set relocation offset for camphor loaded files. (Under #ifdef CAMPHOR).
        !            41:     add_file_command to append a file's symbols to the current symbol table instead of replacing it. (Under #ifdef CAMPHOR).
        !            42:     RT specific code to deal with function names being _.foo instead of _foo.
        !            43:     Added initialize routine.
        !            44: 
        !            45:     Feb 8, 1987 Zalman Stern.
        !            46:         Added test in symbol_file_command to see if file was compiled with debugging. If not print an error message instead of dumping core.
        !            47:         Added same test in add_file_command and made it run through BZPATH, CLASSPATH, and PATH in that order (Under #ifdef CAMPHOR).
        !            48: 
        !            49: environ.c:
        !            50:     Fixed error in calculating new size of a reallocated environment.
        !            51: 
        !            52: eval.c:
        !            53:     Added initialize routine.
        !            54: 
        !            55: expread.y:
        !            56:     Moved alloca call out of variable initializations.
        !            57: 
        !            58: findvar.c:
        !            59:     Added initialize routine.
        !            60: 
        !            61: firstfile.c:
        !            62:     Added main initialization driver routine.
        !            63: 
        !            64: frame.h:
        !            65:     Added RT specific declarations to hold frame information, and to deal with trace table caching.
        !            66: 
        !            67: ibm032-pinsn.c:
        !            68:     New file, contains RT disassembler.
        !            69: 
        !            70: ibm032-opcode.h:
        !            71:     New file, contains RT opcode definitions.
        !            72: 
        !            73: infcmd.c
        !            74:     Changed code to use csh instead of sh to avoid the anoyance of the environment bug.
        !            75:     Added initialize routine.
        !            76: 
        !            77: inflow.c:
        !            78:     Added initialize routine.
        !            79: 
        !            80: infrun.c:
        !            81:     set_current_frame now takes an extra argument.
        !            82:     Added some code to deal with stopping in the middle of a camphor link. (Under #ifdef CAMPHOR).
        !            83:     Added RT specific code to get the return values from the right registers. Replaces code that was there for RT.
        !            84:     RT specific code to do a "POP_DUMMY_FRAME." Dummy frames are to store more complete state than a normal frame. Makes calling a function in inferior more reliable. Perhaps this should be expanded to other machine types.
        !            85:     Added initialize routine.
        !            86: 
        !            87:     Feb 9, 1987 Zalman Stern.
        !            88:         Added call to select_frame after popping a stack dummy frame in normal_stop. This fixes the bug where you could not print variables without doing a "frame 0" after printing an expression with a function call in it.
        !            89: 
        !            90: iniitialize.h:
        !            91:     Changed file to use #ifdef's for machine type. Allows one to use same sources for different machines.
        !            92: 
        !            93: m-ibm032.h:
        !            94:     New file, contains RT specific macros and variables.
        !            95: 
        !            96: param.h:
        !            97:     Changed file to use #ifdef's for machine type. Allows one to use same sources for different machines.
        !            98: 
        !            99: pinsn.c:
        !           100:     Changed file to use #ifdef's for machine type. Allows one to use same sources for different machines.
        !           101: 
        !           102: printcmd.c:
        !           103:     Moved alloca calls out of variable initialization.
        !           104:     Added initialize routine.
        !           105: 
        !           106: source.c:
        !           107:     Added initialize routine.
        !           108: 
        !           109: stack.c:
        !           110:     Added initialize routine.
        !           111: 
        !           112: symmisc.c:
        !           113:     Added initialize routine.
        !           114: 
        !           115: symtab.c:
        !           116:     RT specific code to deal with function names being _.foo instead of _foo.
        !           117:     Added initialize routine.
        !           118: 
        !           119: utils.c:
        !           120:     Added comment.
        !           121: 
        !           122: valarith.c:
        !           123:     Added initialize routine.
        !           124: 
        !           125: valops.c:
        !           126:     Added initialize routine.
        !           127: 
        !           128: valprint.c:
        !           129:     Added initialize routine.
        !           130: 
        !           131: values.c:
        !           132:     Added initialize routine.
        !           133: 
        !           134: Only in .: ibm032-opcode.h
        !           135: 
        !           136: /* The opcode table consists of a 256 element array containing an
        !           137:  * instruction mnemonic and an instruction type field. This can be
        !           138:  * indexed directly by the first eight bits of an RT instruction.
        !           139:  * The instruction type consists of a type field and some flags. 
        !           140:  * In addition to this, there is an ifdef'd out "instruction" table
        !           141:  * at the end of the file. This is an alphabetical listing of the instructions
        !           142:  * containing mnemonic, opcode, and type. This is useful for modification
        !           143:  * purposes. There is also some code in the ifdef to convert the
        !           144:  * instruction table into an opcode table.
        !           145:  */
        !           146: 
        !           147: /* Various useful bit masks. */
        !           148: #define ibm032_typeMask                0x0f /* Mask to get actual type info out of instruction type. */
        !           149: #define LOW4                   0x0f
        !           150: #define HIGH4                  0xf0
        !           151: #define LOW16                  0x0000ffff
        !           152: #define HIGH16                 0xffff0000
        !           153: #define LOW20                  0x000fffff
        !           154: #define LOW24                  0x00ffffff
        !           155: 
        !           156: /* Instruction types consist of a type id in the low 4 bits and flags above that. */
        !           157: 
        !           158: /* Flags. */
        !           159: #define ibm032_conditional     0x10
        !           160: #define ibm032_negative                0x20
        !           161: 
        !           162: /* Format types. */
        !           163: #define ibm032_JI      0x0     /* Jump immediate. */
        !           164: #define ibm032_X       0x1     /* ??? */
        !           165: 
        !           166: /* These next ones are in a special bit position. Do not change their defines. */
        !           167: #define ibm032_DS0     0x2     /* Data short with no shift for immediate value. */
        !           168: #define ibm032_DS1     0x3     /* Data short with 1 bit shift for immediate value. */
        !           169: #define ibm032_DS2     0x4     /* Data short with 2 bit shift for immediate value */
        !           170: #define ibm032_DSShiftOffset   ibm032_DS0 /* Offset to get shift value from ibm032_DS? types. */
        !           171: 
        !           172: #define ibm032_RR      0x5     /* R format where second argument is a register */
        !           173: #define ibm032_RI      0x6     /* R format where second argument is 4 bit immediate. */
        !           174: #define ibm032_BI      0x7     /* Branch immediate. */
        !           175: #define ibm032_BA      0x8     /* Branch absolute. */
        !           176: #define ibm032_D       0x9     /* Data. */
        !           177: 
        !           178: /* What an instruction looks like. */
        !           179: struct ibm032_opcode {
        !           180:     char *mnemonic; /* the name. NULL indicates illegal instruction. */
        !           181:     int type; /* See above. */
        !           182: };
        !           183: 
        !           184: #define MAXOPCODES 256 /* Pretty well hardwired. */
        !           185: 
        !           186: #ifndef BUILDTABLE
        !           187: /* The actual data. */
        !           188: struct ibm032_opcode ibm032_opcodes[] = {
        !           189:     {"j%s",            ibm032_JI | ibm032_conditional | ibm032_negative},
        !           190:     {"j%s",            ibm032_JI | ibm032_conditional | ibm032_negative},
        !           191:     {"j%s",            ibm032_JI | ibm032_conditional | ibm032_negative},
        !           192:     {"j%s",            ibm032_JI | ibm032_conditional | ibm032_negative},
        !           193:     {"j%s",            ibm032_JI | ibm032_conditional | ibm032_negative},
        !           194:     {"j%s",            ibm032_JI | ibm032_conditional | ibm032_negative},
        !           195:     {"j%s",            ibm032_JI | ibm032_conditional | ibm032_negative},
        !           196:     {"j%s",            ibm032_JI | ibm032_conditional | ibm032_negative},
        !           197:     {"j%s",            ibm032_JI | ibm032_conditional},
        !           198:     {"j%s",            ibm032_JI | ibm032_conditional},
        !           199:     {"j%s",            ibm032_JI | ibm032_conditional},
        !           200:     {"j%s",            ibm032_JI | ibm032_conditional},
        !           201:     {"j%s",            ibm032_JI | ibm032_conditional},
        !           202:     {"j%s",            ibm032_JI | ibm032_conditional},
        !           203:     {"j%s",            ibm032_JI | ibm032_conditional},
        !           204:     {"j%s",            ibm032_JI | ibm032_conditional},
        !           205:     {"stcs",           ibm032_DS0},
        !           206:     {"stcs",           ibm032_DS0},
        !           207:     {"stcs",           ibm032_DS0},
        !           208:     {"stcs",           ibm032_DS0},
        !           209:     {"stcs",           ibm032_DS0},
        !           210:     {"stcs",           ibm032_DS0},
        !           211:     {"stcs",           ibm032_DS0},
        !           212:     {"stcs",           ibm032_DS0},
        !           213:     {"stcs",           ibm032_DS0},
        !           214:     {"stcs",           ibm032_DS0},
        !           215:     {"stcs",           ibm032_DS0},
        !           216:     {"stcs",           ibm032_DS0},
        !           217:     {"stcs",           ibm032_DS0},
        !           218:     {"stcs",           ibm032_DS0},
        !           219:     {"stcs",           ibm032_DS0},
        !           220:     {"stcs",           ibm032_DS0},
        !           221:     {"sths",           ibm032_DS1},
        !           222:     {"sths",           ibm032_DS1},
        !           223:     {"sths",           ibm032_DS1},
        !           224:     {"sths",           ibm032_DS1},
        !           225:     {"sths",           ibm032_DS1},
        !           226:     {"sths",           ibm032_DS1},
        !           227:     {"sths",           ibm032_DS1},
        !           228:     {"sths",           ibm032_DS1},
        !           229:     {"sths",           ibm032_DS1},
        !           230:     {"sths",           ibm032_DS1},
        !           231:     {"sths",           ibm032_DS1},
        !           232:     {"sths",           ibm032_DS1},
        !           233:     {"sths",           ibm032_DS1},
        !           234:     {"sths",           ibm032_DS1},
        !           235:     {"sths",           ibm032_DS1},
        !           236:     {"sths",           ibm032_DS1},
        !           237:     {"sts",            ibm032_DS2},
        !           238:     {"sts",            ibm032_DS2},
        !           239:     {"sts",            ibm032_DS2},
        !           240:     {"sts",            ibm032_DS2},
        !           241:     {"sts",            ibm032_DS2},
        !           242:     {"sts",            ibm032_DS2},
        !           243:     {"sts",            ibm032_DS2},
        !           244:     {"sts",            ibm032_DS2},
        !           245:     {"sts",            ibm032_DS2},
        !           246:     {"sts",            ibm032_DS2},
        !           247:     {"sts",            ibm032_DS2},
        !           248:     {"sts",            ibm032_DS2},
        !           249:     {"sts",            ibm032_DS2},
        !           250:     {"sts",            ibm032_DS2},
        !           251:     {"sts",            ibm032_DS2},
        !           252:     {"sts",            ibm032_DS2},
        !           253:     {"lcs",            ibm032_DS0},
        !           254:     {"lcs",            ibm032_DS0},
        !           255:     {"lcs",            ibm032_DS0},
        !           256:     {"lcs",            ibm032_DS0},
        !           257:     {"lcs",            ibm032_DS0},
        !           258:     {"lcs",            ibm032_DS0},
        !           259:     {"lcs",            ibm032_DS0},
        !           260:     {"lcs",            ibm032_DS0},
        !           261:     {"lcs",            ibm032_DS0},
        !           262:     {"lcs",            ibm032_DS0},
        !           263:     {"lcs",            ibm032_DS0},
        !           264:     {"lcs",            ibm032_DS0},
        !           265:     {"lcs",            ibm032_DS0},
        !           266:     {"lcs",            ibm032_DS0},
        !           267:     {"lcs",            ibm032_DS0},
        !           268:     {"lcs",            ibm032_DS0},
        !           269:     {"lhas",           ibm032_DS1},
        !           270:     {"lhas",           ibm032_DS1},
        !           271:     {"lhas",           ibm032_DS1},
        !           272:     {"lhas",           ibm032_DS1},
        !           273:     {"lhas",           ibm032_DS1},
        !           274:     {"lhas",           ibm032_DS1},
        !           275:     {"lhas",           ibm032_DS1},
        !           276:     {"lhas",           ibm032_DS1},
        !           277:     {"lhas",           ibm032_DS1},
        !           278:     {"lhas",           ibm032_DS1},
        !           279:     {"lhas",           ibm032_DS1},
        !           280:     {"lhas",           ibm032_DS1},
        !           281:     {"lhas",           ibm032_DS1},
        !           282:     {"lhas",           ibm032_DS1},
        !           283:     {"lhas",           ibm032_DS1},
        !           284:     {"lhas",           ibm032_DS1},
        !           285:     {"cas",            ibm032_X},
        !           286:     {"cas",            ibm032_X},
        !           287:     {"cas",            ibm032_X},
        !           288:     {"cas",            ibm032_X},
        !           289:     {"cas",            ibm032_X},
        !           290:     {"cas",            ibm032_X},
        !           291:     {"cas",            ibm032_X},
        !           292:     {"cas",            ibm032_X},
        !           293:     {"cas",            ibm032_X},
        !           294:     {"cas",            ibm032_X},
        !           295:     {"cas",            ibm032_X},
        !           296:     {"cas",            ibm032_X},
        !           297:     {"cas",            ibm032_X},
        !           298:     {"cas",            ibm032_X},
        !           299:     {"cas",            ibm032_X},
        !           300:     {"cas",            ibm032_X},
        !           301:     {"ls",             ibm032_DS2},
        !           302:     {"ls",             ibm032_DS2},
        !           303:     {"ls",             ibm032_DS2},
        !           304:     {"ls",             ibm032_DS2},
        !           305:     {"ls",             ibm032_DS2},
        !           306:     {"ls",             ibm032_DS2},
        !           307:     {"ls",             ibm032_DS2},
        !           308:     {"ls",             ibm032_DS2},
        !           309:     {"ls",             ibm032_DS2},
        !           310:     {"ls",             ibm032_DS2},
        !           311:     {"ls",             ibm032_DS2},
        !           312:     {"ls",             ibm032_DS2},
        !           313:     {"ls",             ibm032_DS2},
        !           314:     {"ls",             ibm032_DS2},
        !           315:     {"ls",             ibm032_DS2},
        !           316:     {"ls",             ibm032_DS2},
        !           317:     {0,                        0},
        !           318:     {0,                        0},
        !           319:     {0,                        0},
        !           320:     {0,                        0},
        !           321:     {0,                        0},
        !           322:     {0,                        0},
        !           323:     {0,                        0},
        !           324:     {0,                        0},
        !           325:     {"b%s",            ibm032_BI | ibm032_conditional | ibm032_negative},
        !           326:     {"b%sx",           ibm032_BI | ibm032_conditional | ibm032_negative},
        !           327:     {"bala",           ibm032_BA},
        !           328:     {"balax",          ibm032_BA},
        !           329:     {"bali",           ibm032_BI},
        !           330:     {"balix",          ibm032_BI},
        !           331:     {"b%s",            ibm032_BI | ibm032_conditional},
        !           332:     {"b%sx",           ibm032_BI | ibm032_conditional},
        !           333:     {"ais",            ibm032_RI},
        !           334:     {"inc",            ibm032_RI},
        !           335:     {"sis",            ibm032_RI},
        !           336:     {"dec",            ibm032_RI},
        !           337:     {"cis",            ibm032_RI},
        !           338:     {"clrsb",          ibm032_RI},
        !           339:     {"mfs",            ibm032_RR},
        !           340:     {"setsb",          ibm032_RI},
        !           341:     {"clrbu",          ibm032_RI},
        !           342:     {"clrbl",          ibm032_RI},
        !           343:     {"setbu",          ibm032_RI},
        !           344:     {"setbl",          ibm032_RI},
        !           345:     {"mftbiu",         ibm032_RI},
        !           346:     {"mftbil",         ibm032_RI},
        !           347:     {"mttbiu",         ibm032_RI},
        !           348:     {"mttbil",         ibm032_RI},
        !           349:     {"sari",           ibm032_RI},
        !           350:     {"sari16",         ibm032_RI},
        !           351:     {0,                        0},
        !           352:     {0,                        0},
        !           353:     {"lis",            ibm032_RI},
        !           354:     {0,                        0},
        !           355:     {0,                        0},
        !           356:     {0,                        0},
        !           357:     {"sri",            ibm032_RI},
        !           358:     {"sri16",          ibm032_RI},
        !           359:     {"sli",            ibm032_RI},
        !           360:     {"sli16",          ibm032_RI},
        !           361:     {"srpi",           ibm032_RI},
        !           362:     {"srpi16",         ibm032_RI},
        !           363:     {"slpi",           ibm032_RI},
        !           364:     {"slpi16",         ibm032_RI},
        !           365:     {"sar",            ibm032_RR},
        !           366:     {"exts",           ibm032_RR},
        !           367:     {"sf",             ibm032_RR},
        !           368:     {"cl",             ibm032_RR},
        !           369:     {"c",              ibm032_RR},
        !           370:     {"mts",            ibm032_RR},
        !           371:     {"d",              ibm032_RR},
        !           372:     {0,                        0},
        !           373:     {"sr",             ibm032_RR},
        !           374:     {"srp",            ibm032_RR},
        !           375:     {"sl",             ibm032_RR},
        !           376:     {"slp",            ibm032_RR},
        !           377:     {"mftb",           ibm032_RR},
        !           378:     {"tgte",           ibm032_RR},
        !           379:     {"tlt",            ibm032_RR},
        !           380:     {"mttb",           ibm032_RR},
        !           381:     {"svc",            ibm032_D},
        !           382:     {"ai",             ibm032_D},
        !           383:     {"cal16",          ibm032_D},
        !           384:     {"oiu",            ibm032_D},
        !           385:     {"oil",            ibm032_D},
        !           386:     {"nilz",           ibm032_D},
        !           387:     {"nilo",           ibm032_D},
        !           388:     {"xil",            ibm032_D},
        !           389:     {"cal",            ibm032_D},
        !           390:     {"lm",             ibm032_D},
        !           391:     {"lha",            ibm032_D},
        !           392:     {"ior",            ibm032_D},
        !           393:     {"ti",             ibm032_D},
        !           394:     {"l",              ibm032_D},
        !           395:     {"lc",             ibm032_D},
        !           396:     {"tsh",            ibm032_D},
        !           397:     {"lps",            ibm032_D},
        !           398:     {"aei",            ibm032_D},
        !           399:     {"sfi",            ibm032_D},
        !           400:     {"cli",            ibm032_D},
        !           401:     {"ci",             ibm032_D},
        !           402:     {"niuz",           ibm032_D},
        !           403:     {"niuo",           ibm032_D},
        !           404:     {"xiu",            ibm032_D},
        !           405:     {"cau",            ibm032_D},
        !           406:     {"stm",            ibm032_D},
        !           407:     {"lh",             ibm032_D},
        !           408:     {"iow",            ibm032_D},
        !           409:     {"sth",            ibm032_D},
        !           410:     {"st",             ibm032_D},
        !           411:     {"stc",            ibm032_D},
        !           412:     {0,                        0},
        !           413:     {"abs",            ibm032_RR},
        !           414:     {"a",              ibm032_RR},
        !           415:     {"s",              ibm032_RR},
        !           416:     {"o",              ibm032_RR},
        !           417:     {"twoc",           ibm032_RR},
        !           418:     {"n",              ibm032_RR},
        !           419:     {"m",              ibm032_RR},
        !           420:     {"x",              ibm032_RR},
        !           421:     {"b%sr",           ibm032_RR | ibm032_conditional | ibm032_negative},
        !           422:     {"b%srx",          ibm032_RR | ibm032_conditional | ibm032_negative},
        !           423:     {0,                        0},
        !           424:     {"lhs",            ibm032_RR},
        !           425:     {"balr",           ibm032_RR},
        !           426:     {"balrx",          ibm032_RR},
        !           427:     {"b%sr",           ibm032_RR | ibm032_conditional},
        !           428:     {"b%srx",          ibm032_RR | ibm032_conditional},
        !           429:     {"wait",           ibm032_RR},
        !           430:     {"ae",             ibm032_RR},
        !           431:     {"se",             ibm032_RR},
        !           432:     {"ca16",           ibm032_RR},
        !           433:     {"onec",           ibm032_RR},
        !           434:     {"clz",            ibm032_RR},
        !           435:     {0,                        0},
        !           436:     {0,                        0},
        !           437:     {0,                        0},
        !           438:     {"mc03",           ibm032_RR},
        !           439:     {"mc13",           ibm032_RR},
        !           440:     {"mc23",           ibm032_RR},
        !           441:     {"mc33",           ibm032_RR},
        !           442:     {"mc30",           ibm032_RR},
        !           443:     {"mc31",           ibm032_RR},
        !           444:     {"mc32",           ibm032_RR},
        !           445: };
        !           446: 
        !           447: #else
        !           448: struct ibm032_opcode ibm032_opcodes[MAXOPCODES];
        !           449: 
        !           450: struct ibm032_instruction {
        !           451:     char *mnemonic; /* Mnemonic for this instruction */
        !           452:     char opcode; /* Numerical value of opcode. */
        !           453:     int type; /* This instructions format. */
        !           454: };
        !           455: 
        !           456: struct ibm032_instruction ibm032_instructions[] =
        !           457: {
        !           458:  {"a",         0xe1, ibm032_RR},
        !           459:  {"abs",       0xe0, ibm032_RR},
        !           460:  {"ae",                0xf1, ibm032_RR},
        !           461:  {"aei",       0xd1, ibm032_D},
        !           462:  {"ai",                0xc1, ibm032_D},
        !           463:  {"ais",       0x90, ibm032_RI},
        !           464:  {"bala",      0x8a, ibm032_BA},
        !           465:  {"balax",     0x8b, ibm032_BA},
        !           466:  {"bali",      0x8c, ibm032_BI},
        !           467:  {"balix",     0x8d, ibm032_BI},
        !           468:  {"balr",      0xec, ibm032_RR},
        !           469:  {"balrx",     0xed, ibm032_RR},
        !           470:  {"b%s",       0x8e, ibm032_BI | ibm032_conditional},
        !           471:  {"b%sr",      0xee, ibm032_RR | ibm032_conditional},
        !           472:  {"b%srx",     0xef, ibm032_RR | ibm032_conditional},
        !           473:  {"b%sx",      0x8f, ibm032_BI | ibm032_conditional},
        !           474:  {"b%s",       0x88, ibm032_BI | ibm032_conditional | ibm032_negative},
        !           475:  {"b%sr",      0xe8, ibm032_RR | ibm032_conditional | ibm032_negative},
        !           476:  {"b%srx",     0xe9, ibm032_RR | ibm032_conditional | ibm032_negative},
        !           477:  {"b%sx",      0x89, ibm032_BI | ibm032_conditional | ibm032_negative},
        !           478:  {"c",         0xb4, ibm032_RR},
        !           479:  {"cal",       0xc8, ibm032_D},
        !           480:  {"cal16",     0xc2, ibm032_D},
        !           481:  {"cas",       0x60, ibm032_X},
        !           482:  {"cau",       0xd8, ibm032_D},
        !           483:  {"ca16",      0xf3, ibm032_RR},
        !           484:  {"ci",                0xd4, ibm032_D},
        !           485:  {"cis",       0x94, ibm032_RI},
        !           486:  {"cl",                0xb3, ibm032_RR},
        !           487:  {"cli",       0xd3, ibm032_D},
        !           488:  {"clrbl",     0x99, ibm032_RI},
        !           489:  {"clrbu",     0x98, ibm032_RI},
        !           490:  {"clrsb",     0x95, ibm032_RI},
        !           491:  {"clz",       0xf5, ibm032_RR},
        !           492:  {"d",         0xb6, ibm032_RR},
        !           493:  {"dec",       0x93, ibm032_RI},
        !           494:  {"exts",      0xb1, ibm032_RR},
        !           495:  {"inc",       0x91, ibm032_RI},
        !           496:  {"ior",       0xcb, ibm032_D},
        !           497:  {"iow",       0xdb, ibm032_D},
        !           498: 
        !           499:  {"j%s",       0x08, ibm032_JI | ibm032_conditional},
        !           500:  {"j%s",       0x00, ibm032_JI | ibm032_conditional | ibm032_negative},
        !           501: 
        !           502:  {"l",         0xcd, ibm032_D},
        !           503:  {"lc",                0xce, ibm032_D},
        !           504:  {"lcs",       0x40, ibm032_DS0},
        !           505:  {"lh",                0xda, ibm032_D},
        !           506:  {"lha",       0xca, ibm032_D},
        !           507:  {"lhas",      0x50, ibm032_DS1},
        !           508:  {"lhs",       0xeb, ibm032_RR},
        !           509:  {"lis",       0xa4, ibm032_RI},
        !           510:  {"lm",                0xc9, ibm032_D},
        !           511:  {"lps",       0xd0, ibm032_D},
        !           512:  {"ls",                0x70, ibm032_DS2},
        !           513:  {"m",         0xe6, ibm032_RR},
        !           514:  {"mc03",      0xf9, ibm032_RR},
        !           515:  {"mc13",      0xfa, ibm032_RR},
        !           516:  {"mc23",      0xfb, ibm032_RR},
        !           517:  {"mc33",      0xfc, ibm032_RR},
        !           518:  {"mc30",      0xfd, ibm032_RR},
        !           519:  {"mc31",      0xfe, ibm032_RR},
        !           520:  {"mc32",      0xff, ibm032_RR},
        !           521:  {"mfs",       0x96, ibm032_RR},
        !           522:  {"mftb",      0xbc, ibm032_RR},
        !           523:  {"mftbil",    0x9d, ibm032_RI},
        !           524:  {"mftbiu",    0x9c, ibm032_RI},
        !           525:  {"mts",       0xb5, ibm032_RR},
        !           526:  {"mttb",      0xbf, ibm032_RR},
        !           527:  {"mttbil",    0x9f, ibm032_RI},
        !           528:  {"mttbiu",    0x9e, ibm032_RI},
        !           529:  {"n",         0xe5, ibm032_RR},
        !           530: 
        !           531:  {"nilo",      0xc6, ibm032_D},
        !           532:  {"nilz",      0xc5, ibm032_D},
        !           533:  {"niuo",      0xd6, ibm032_D},
        !           534:  {"niuz",      0xd5, ibm032_D},
        !           535:  {"o",         0xe3, ibm032_RR},
        !           536:  {"oil",       0xc4, ibm032_D},
        !           537:  {"oiu",       0xc3, ibm032_D},
        !           538:  {"onec",      0xf4, ibm032_RR},
        !           539:  {"s",         0xe2, ibm032_RR},
        !           540:  {"sar",       0xb0, ibm032_RR},
        !           541:  {"sari",      0xa0, ibm032_RI},
        !           542:  {"sari16",    0xa1, ibm032_RI},
        !           543:  {"se",                0xf2, ibm032_RR},
        !           544:  {"setbl",     0x9b, ibm032_RI},
        !           545:  {"setbu",     0x9a, ibm032_RI},
        !           546:  {"setsb",     0x97, ibm032_RI},
        !           547:  {"sf",                0xb2, ibm032_RR},
        !           548: 
        !           549:  {"sfi",       0xd2, ibm032_D},
        !           550: 
        !           551:  {"sis",       0x92, ibm032_RI},
        !           552:  {"sl",                0xba, ibm032_RR},
        !           553:  {"sli",       0xaa, ibm032_RI},
        !           554:  {"sli16",     0xab, ibm032_RI},
        !           555:  {"slp",       0xbb, ibm032_RR},
        !           556:  {"slpi",      0xae, ibm032_RI},
        !           557:  {"slpi16",    0xaf, ibm032_RI},
        !           558:  {"sr",                0xb8, ibm032_RR},
        !           559:  {"sri",       0xa8, ibm032_RI},
        !           560:  {"sri16",     0xa9, ibm032_RI},
        !           561:  {"srp",       0xb9, ibm032_RR},
        !           562:  {"srpi",      0xac, ibm032_RI},
        !           563:  {"srpi16",    0xad, ibm032_RI},
        !           564: 
        !           565:  {"st",                0xdd, ibm032_D},
        !           566: 
        !           567:  {"stc",       0xde, ibm032_D},
        !           568:  {"stcs",      0x10, ibm032_DS0},
        !           569:  {"sth",       0xdc, ibm032_D},
        !           570:  {"sths",      0x20, ibm032_DS1},
        !           571:  {"stm",       0xd9, ibm032_D},
        !           572:  {"sts",       0x30, ibm032_DS2},
        !           573:  {"svc",       0xc0, ibm032_D},
        !           574:  {"tgte",      0xbd, ibm032_RR},
        !           575:  {"ti",                0xcc, ibm032_D},
        !           576:  {"tlt",       0xbe, ibm032_RR},
        !           577:  {"tsh",       0xcf, ibm032_D},
        !           578:  {"twoc",      0xe4, ibm032_RR},
        !           579:  {"wait",      0xf0, ibm032_RR},
        !           580:  {"x",         0xe7, ibm032_RR},
        !           581:  {"xil",       0xc7, ibm032_D},
        !           582:  {"xiu",       0xd7, ibm032_D}
        !           583: };
        !           584: 
        !           585: /* Code to generate the packed opcode table from the instructions table. */
        !           586: 
        !           587: #include <stdio.h>
        !           588: 
        !           589: char *typeNames[] = {
        !           590:     "ibm032_JI",
        !           591:     "ibm032_X",
        !           592:     "ibm032_DS0",
        !           593:     "ibm032_DS1",
        !           594:     "ibm032_DS2",
        !           595:     "ibm032_RR",
        !           596:     "ibm032_RI",
        !           597:     "ibm032_BI",
        !           598:     "ibm032_BA",
        !           599:     "ibm032_D"
        !           600: };
        !           601: 
        !           602: main()
        !           603: {
        !           604: 
        !           605:     int i, j, opcode, type;
        !           606: 
        !           607:     for (j = (sizeof(ibm032_instructions) / sizeof(struct ibm032_instruction)); j >= 0; j--) {
        !           608:         opcode = ibm032_instructions[j].opcode;
        !           609:         switch (ibm032_instructions[j].type & ibm032_typeMask) {
        !           610:             case ibm032_JI:
        !           611:                 i = 7;
        !           612:                 break;
        !           613:             case ibm032_X:
        !           614:             case ibm032_DS0:
        !           615:             case ibm032_DS1:
        !           616:             case ibm032_DS2:
        !           617:                 i = 15;
        !           618:                 break;
        !           619:             case ibm032_RR:
        !           620:             case ibm032_RI:
        !           621:             default:
        !           622:                 i = 0;
        !           623:                 break;
        !           624:         }
        !           625:         for (;i >= 0; i--) {
        !           626:             ibm032_opcodes[opcode + i].mnemonic = ibm032_instructions[j].mnemonic;
        !           627:             ibm032_opcodes[opcode + i].type = ibm032_instructions[j].type;
        !           628:         }
        !           629:     }
        !           630: 
        !           631:     printf("struct ibm032_opcode ibm032_opcodes[] = {\n");
        !           632:     for ( j = 0; j < 256; j++) {
        !           633:         type = ibm032_opcodes[j].type;      
        !           634:         if (ibm032_opcodes[j].mnemonic != NULL)
        !           635:             printf("    {\"%s\",\t\t%s%s%s},\n", ibm032_opcodes[j].mnemonic,
        !           636:                    typeNames[type & ibm032_typeMask],
        !           637:                    (type & ibm032_conditional) ? " | ibm032_conditional" : "",
        !           638:                    (type & ibm032_negative) ? " | ibm032_negative" : "");
        !           639:         else
        !           640:             printf("    {0,\t\t\t0},\n");
        !           641:     }
        !           642:     printf("};\n");
        !           643: }
        !           644: #endif /* BUILDTABLE */
        !           645: 
        !           646: Only in .: ibm032-pinsn.c
        !           647: 
        !           648: /* Print ibm032 instructions for GDB, the GNU debugger.
        !           649:    Copyright (C) 1986 Free Software Foundation, Inc.
        !           650: 
        !           651: GDB is distributed in the hope that it will be useful, but WITHOUT ANY
        !           652: WARRANTY.  No author or distributor accepts responsibility to anyone
        !           653: for the consequences of using it or for whether it serves any
        !           654: particular purpose or works at all, unless he says so in writing.
        !           655: Refer to the GDB General Public License for full details.
        !           656: 
        !           657: Everyone is granted permission to copy, modify and redistribute GDB,
        !           658: but only under the conditions described in the GDB General Public
        !           659: License.  A copy of this license is supposed to have been given to you
        !           660: along with GDB so you can know your rights and responsibilities.  It
        !           661: should be in a file named COPYING.  Among other things, the copyright
        !           662: notice and this notice must be preserved on all copies.
        !           663: 
        !           664: In other words, go ahead and share GDB, but don't try to stop
        !           665: anyone else from sharing it farther.  Help stamp out software hoarding!
        !           666: */
        !           667: 
        !           668: #include <stdio.h>
        !           669: 
        !           670: #include "defs.h"
        !           671: #include "param.h"
        !           672: #include "symtab.h"
        !           673: #include "ibm032-opcode.h"
        !           674: 
        !           675: /* ibm032 instructions are never longer than this many bytes.  */
        !           676: #define MAXLEN 4
        !           677: 
        !           678: extern char *reg_names[];
        !           679: 
        !           680: static char *mapCondition();
        !           681: 
        !           682: 
        !           683: /* Print the ibm032 instruction at address MEMADDR in debugged memory,
        !           684:    on STREAM.  Returns length of the instruction, in bytes.  */
        !           685: 
        !           686: int
        !           687: print_insn (memaddr, stream)
        !           688:      CORE_ADDR memaddr;
        !           689:      FILE *stream;
        !           690: {
        !           691:   unsigned char buffer[MAXLEN];
        !           692:   int opcodeIndex, instructionBits, type;
        !           693:   char *mnemonic;
        !           694: 
        !           695:   read_memory (memaddr, buffer, MAXLEN);
        !           696:   instructionBits = (buffer[0] << 24) + (buffer[1] << 16) + (buffer[2] << 8) + buffer[3]; /* Get it into an int for easy use. */
        !           697: 
        !           698:   if ((mnemonic = ibm032_opcodes[opcodeIndex = buffer[0]].mnemonic) == NULL)
        !           699:     {
        !           700:       fprintf (stream, "0%o", (instructionBits & HIGH16) >> 16);
        !           701:       return 2;
        !           702:     }
        !           703:   type = ibm032_opcodes[opcodeIndex].type;
        !           704:   if (!(type & ibm032_conditional)) {
        !           705:     fprintf (stream, "%s", mnemonic);
        !           706: 
        !           707:     switch (type) {
        !           708: 
        !           709:       int displacement; /* Used for sign extensions. */
        !           710:       char *sign;
        !           711: 
        !           712:       case ibm032_X:
        !           713:         fprintf(stream, "\t%s, %s(%s)", reg_names[buffer[0] & LOW4], (buffer[1] & HIGH4) ? (reg_names[(buffer[1] & HIGH4) >> 4]) : "", reg_names[buffer[1] & LOW4]);
        !           714:         return 2;
        !           715:       case ibm032_DS0:
        !           716:       case ibm032_DS1:
        !           717:       case ibm032_DS2:
        !           718:         fprintf(stream, "\t%s, %x", reg_names[(buffer[1] & HIGH4) >> 4], (buffer[0] & LOW4) << (ibm032_opcodes[opcodeIndex].type - ibm032_DSShiftOffset)); /* Hacked to shift imediate field. */
        !           719:         if (buffer[1] & LOW4)
        !           720:           fprintf(stream, "(%s)", reg_names[buffer[1] & LOW4]);
        !           721:         return 2;
        !           722:       case ibm032_RR:
        !           723:         fprintf(stream, "\t%s, %s", reg_names[(buffer[1] & HIGH4) >> 4], reg_names[buffer[1] & 0x0f]);
        !           724:         return 2;
        !           725:       case ibm032_RI:
        !           726:         fprintf(stream, "\t%s, %x", reg_names[(buffer[1] & HIGH4) >> 4], buffer[1] & LOW4);
        !           727:         return 2;
        !           728:       case ibm032_BI:
        !           729:         fprintf(stream, "\t%s, ", reg_names[(buffer[1] & HIGH4) >> 4]);
        !           730:         displacement = (instructionBits & LOW20);
        !           731:         if ((displacement & (1 << 19)) != 0) /* Cover sign extension. */
        !           732:             displacement |= 0xfff00000;
        !           733:         print_address(memaddr + (displacement * 2), stream); /* Need sign extension. */
        !           734:         return 4;
        !           735:       case ibm032_BA:
        !           736:         print_address((instructionBits & LOW24) & ~1, stream);
        !           737:         return 4;
        !           738:       case ibm032_D:
        !           739:         displacement = (instructionBits & LOW16);
        !           740:         if ((displacement & (1 << 15)) != 0) { /* Cover sign extension. */
        !           741:           displacement = - (displacement | 0xffff0000);
        !           742:           sign = "-";
        !           743:         }
        !           744:         else
        !           745:           sign = "";
        !           746:         fprintf(stream, "\t%s, %s, %s%x", reg_names[(buffer[1] & HIGH4) >> 4], reg_names[buffer[1] & LOW4], sign, displacement);
        !           747:         return 4;
        !           748:     }
        !           749:   }
        !           750:   else { /* Conditional branches are hacked. */
        !           751:     switch (type & 0x0f) {
        !           752: 
        !           753:       int displacement;
        !           754: 
        !           755:       case ibm032_JI:
        !           756:         fprintf(stream, ibm032_opcodes[opcodeIndex].mnemonic, mapCondition(type & ibm032_negative, buffer[0] & LOW4));
        !           757:       putc('\t', stream);
        !           758:       print_address((buffer[1] << 1) + memaddr, stream);
        !           759:       return 2;
        !           760:     case ibm032_BI:
        !           761:       fprintf(stream, ibm032_opcodes[opcodeIndex].mnemonic, mapCondition(type & ibm032_negative, (buffer[1] & HIGH4) >> 4));
        !           762:       putc('\t', stream);
        !           763:         displacement = (instructionBits & LOW20);
        !           764:         if ((displacement & (1 << 19)) != 0) /* Cover sign extension. */
        !           765:             displacement |= 0xfff00000;
        !           766:         print_address((displacement * 2) + memaddr, stream);
        !           767:       return 4;
        !           768:     case ibm032_RR:
        !           769:       fprintf(stream, ibm032_opcodes[opcodeIndex].mnemonic, mapCondition(type & ibm032_negative, (buffer[1] & HIGH4) >> 4));
        !           770:       fprintf(stream, "\t%s", reg_names[buffer[1] & LOW4]);
        !           771:       return 2;   
        !           772:     }
        !           773:   }
        !           774: }
        !           775: 
        !           776: /* Converts a 4 bit "conditional specifier" into a semi-meaningful name. */
        !           777: static char *mapCondition(negative, conditionBits)
        !           778:     int conditionBits;
        !           779: {
        !           780: 
        !           781:     char *condition;
        !           782: 
        !           783:     if (negative)
        !           784:         switch (conditionBits) {
        !           785:             case 0x8:
        !           786:                 condition = "";
        !           787:                 break;
        !           788:             case 0x9:
        !           789:                 condition = "ge";
        !           790:                 break;
        !           791:             case 0xa:
        !           792:                 condition = "ne";
        !           793:                 break;
        !           794:             case 0xb:
        !           795:                 condition = "le";
        !           796:                 break;
        !           797:             case 0xc:
        !           798:                 condition = "nc";
        !           799:                 break;
        !           800:             case 0xd: /* Reserved. */
        !           801:                 condition = "notbogus";
        !           802:                 break;
        !           803:             case 0xe:
        !           804:                  condition = "no";
        !           805:                 break;
        !           806:             case 0xf:
        !           807:                 condition = "ntb";
        !           808:                 break;
        !           809:             default:
        !           810:                 condition = "notbogus";
        !           811:                 break;
        !           812:         }
        !           813:     else
        !           814:         switch (conditionBits) {
        !           815:             case 0x8:
        !           816:                 condition = "nop";
        !           817:                 break;
        !           818:             case 0x9:
        !           819:                 condition = "lt";
        !           820:                 break;
        !           821:             case 0xa:
        !           822:                 condition = "eq";
        !           823:                 break;
        !           824:             case 0xb:
        !           825:                 condition = "gt";
        !           826:                 break;
        !           827:             case 0xc:
        !           828:                 condition = "c";
        !           829:                 break;
        !           830:             case 0xd: /* Reserved. */
        !           831:                 condition = "bogus";
        !           832:                 break;
        !           833:             case 0xe:
        !           834:                 condition = "o";
        !           835:                 break;
        !           836:             case 0xf:
        !           837:                 condition = "tb";
        !           838:                 break;
        !           839:             default:
        !           840:                 condition = "bogus";
        !           841:                 break;
        !           842:         }
        !           843:     return condition;
        !           844: }
        !           845: 
        !           846: Only in .: m-ibm032.h
        !           847: 
        !           848: /* Parameters for execution on an IBM RT, for GDB, the GNU debugger.
        !           849:    Copyright (C) 1986 Free Software Foundation, Inc.
        !           850: 
        !           851: GDB is distributed in the hope that it will be useful, but WITHOUT ANY
        !           852: WARRANTY.  No author or distributor accepts responsibility to anyone
        !           853: for the consequences of using it or for whether it serves any
        !           854: particular purpose or works at all, unless he says so in writing.
        !           855: Refer to the GDB General Public License for full details.
        !           856: 
        !           857: Everyone is granted permission to copy, modify and redistribute GDB,
        !           858: but only under the conditions described in the GDB General Public
        !           859: License.  A copy of this license is supposed to have been given to you
        !           860: along with GDB so you can know your rights and responsibilities.  It
        !           861: should be in a file named COPYING.  Among other things, the copyright
        !           862: notice and this notice must be preserved on all copies.
        !           863: 
        !           864: In other words, go ahead and share GDB, but don't try to stop
        !           865: anyone else from sharing it farther.  Help stamp out software hoarding!
        !           866: */
        !           867: 
        !           868: /* Define this if the C compiler puts an underscore at the front
        !           869:    of external names before giving them to the linker.  */
        !           870: 
        !           871: #define NAMES_HAVE_UNDERSCORE
        !           872: 
        !           873: /* Offset from address of function to start of its code.
        !           874:    Zero on most machines.  */
        !           875: 
        !           876: #define FUNCTION_START_OFFSET 0
        !           877: 
        !           878: /* Advance PC across any function entry prologue instructions
        !           879:    to reach some "real" code.  */
        !           880: 
        !           881: #define SKIP_PROLOGUE(pc)   \
        !           882: { register int op = read_memory_integer (pc, 1) & 0x00ff; \
        !           883:     if (op == 0xd9) { \
        !           884:        pc += 4; \
        !           885:        op = read_memory_integer (pc, 2); \
        !           886:        if ((op & 0xff00) == 0xc100) { /* pcc prolog add r1, number */ \
        !           887:            pc += 4; \
        !           888:            op = read_memory_integer (pc, 1) & 0x00ff; \
        !           889:            if (op == 0x6e) {                   /* cas r14, 0 */ \
        !           890:                pc += 2; \
        !           891:                op = read_memory_integer (pc, 2) & 0xffff; \
        !           892:                if (op == 0xc8d1) pc += 4; /* cal r13, junk(r1) */ \
        !           893:            } \
        !           894:        } \
        !           895:        else if ((op & 0xffff) == 0x6e00) { /* hc prolog cas r14, 0 */ \
        !           896:            pc += 4; \
        !           897:            op = read_memory_integer(pc, 1) & 0xff; \
        !           898:            if (op == 0x6d) { /* cas r13 junk, probably */ \
        !           899:                pc += 2; \
        !           900:                op = read_memory_integer(pc, 2) & 0xffff; \
        !           901:                if (op == 0xc811) pc += 4; /* cal r1,  foo(r1) */       \
        !           902:            } \
        !           903:        } \
        !           904:     } \
        !           905:     while (1) { \
        !           906:        /* now watch for st, sth, stc, and short versions thereof, cas instructions and exts */ \
        !           907:        /* which are all used to store the parameters from r2-r5 onto the stack or into reg vars */ \
        !           908:        op = read_memory_integer (pc, 2); \
        !           909:        if ((op & 0xff00) == 0x3000 && (op & 0xf0) >= 0x20 && (op & 0xf0) <= 0x50) pc += 2; \
        !           910:        else if ((op & 0xff00) == 0x2300 && (op & 0xf0) >= 0x20 && (op & 0xf0) <= 0x50) pc += 2; \
        !           911:        else if ((op & 0xff00) == 0x1b00 && (op & 0xf0) >= 0x20 && (op & 0xf0) <= 0x50) pc += 2; \
        !           912:        else if ((op & 0xff00) == 0x6c00 && (op & 0xf0) >= 0x20 && (op & 0xf0) <= 0x50) pc += 2; \
        !           913:        else if ((op & 0xff00) == 0xb100) pc += 2; /* extend sign */ \
        !           914:        else if ((op & 0xff00) == 0xdd00 && (op & 0xf0) >= 0x20 && (op & 0xf0) <= 0x50) pc += 4; \
        !           915:        else break; \
        !           916:     } \
        !           917: }
        !           918: 
        !           919: /* Immediately after a function call, return the saved pc.
        !           920:    Can't go through the frames for this because on some machines
        !           921:    the new frame is not set up until the new function executes
        !           922:    some instructions.  */
        !           923: 
        !           924: #define SAVED_PC_AFTER_CALL(frame) \
        !           925: read_register (15)
        !           926: 
        !           927: /* This is the amount to subtract from u.u_ar0
        !           928:    to get the offset in the core file of the register values.  */
        !           929: 
        !           930: #define KERNEL_U_ADDR (0x20000000 - NBPG * (UPAGES))
        !           931: 
        !           932: /* Address of end of stack space.  */
        !           933: 
        !           934: /* extra page is for the "red zone" */
        !           935: #define STACK_END_ADDR (0x20000000 - NBPG * (UPAGES+1))
        !           936: 
        !           937: /* Stack grows downward.  */
        !           938: 
        !           939: #define INNER_THAN <
        !           940: 
        !           941: /* Sequence of bytes for breakpoint instruction.  */
        !           942: 
        !           943: #define BREAKPOINT {0xbd, 0x00}
        !           944: 
        !           945: /* Amount PC must be decremented by after a breakpoint.
        !           946:    This is often the number of bytes in BREAKPOINT
        !           947:    but not always.  */
        !           948: 
        !           949: #define DECR_PC_AFTER_BREAK 0
        !           950: 
        !           951: /* Nonzero if instruction at PC is a return instruction.  */
        !           952: 
        !           953: #define ABOUT_TO_RETURN(pc) (read_memory_integer (pc, 1) & 0x00ff == 0xc9)
        !           954: 
        !           955: /* Return 1 if P points to an invalid floating point value.  */
        !           956: 
        !           957: #define INVALID_FLOAT(p) 0   /* Just a first guess; not checked */
        !           958: 
        !           959: /* Say how long (ordinary) registers are.  */
        !           960: 
        !           961: #define REGISTER_TYPE long
        !           962: 
        !           963: /* Number of machine registers */
        !           964: 
        !           965: #define NUM_REGS 18
        !           966: 
        !           967: /* Initializer for an array of names of registers.
        !           968:    There should be NUM_REGS strings in this initializer.  */
        !           969: 
        !           970: #define REGISTER_NAMES {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "iar", "mq"}
        !           971: 
        !           972: /* Register numbers of various important registers.
        !           973:    Note that some of these values are "real" register numbers,
        !           974:    and correspond to the general registers of the machine,
        !           975:    and some are "phony" register numbers which are too large
        !           976:    to be actual register numbers as far as the user is concerned
        !           977:    but do serve to get the desired values when passed to read_register.  */
        !           978: 
        !           979: #define FP_REGNUM 13           /* Contains address of executing stack frame */
        !           980: #define SP_REGNUM 1            /* Contains address of top of stack */
        !           981: #define PS_REGNUM 17           /* Contains processor status */
        !           982: #define PC_REGNUM 16           /* Contains program counter */
        !           983: 
        !           984: #define REGISTER_U_ADDR(addr, blockend, regno)         \
        !           985: { addr = blockend + regno * 4; }
        !           986: 
        !           987: /* Total amount of space needed to store our copies of the machine's
        !           988:    register state, the array `registers'.  */
        !           989: #define REGISTER_BYTES (NUM_REGS*4)
        !           990: 
        !           991: /* Index within `registers' of the first byte of the space for
        !           992:    register N.  */
        !           993: 
        !           994: #define REGISTER_BYTE(N) ((N) * 4)
        !           995: 
        !           996: /* Number of bytes of storage in the actual machine representation
        !           997:    for register N.  On the vax, all regs are 4 bytes.  */
        !           998: 
        !           999: #define REGISTER_RAW_SIZE(N) 4
        !          1000: 
        !          1001: /* Number of bytes of storage in the program's representation
        !          1002:    for register N.  On the vax, all regs are 4 bytes.  */
        !          1003: 
        !          1004: #define REGISTER_VIRTUAL_SIZE(N) 4
        !          1005: 
        !          1006: /* Largest value REGISTER_RAW_SIZE can have.  */
        !          1007: 
        !          1008: #define MAX_REGISTER_RAW_SIZE 4
        !          1009: 
        !          1010: /* Largest value REGISTER_VIRTUAL_SIZE can have.  */
        !          1011: 
        !          1012: #define MAX_REGISTER_VIRTUAL_SIZE 4
        !          1013: 
        !          1014: /* Nonzero if register N requires conversion
        !          1015:    from raw format to virtual format.  */
        !          1016: 
        !          1017: #define REGISTER_CONVERTIBLE(N) 0
        !          1018: 
        !          1019: /* Convert data from raw format for register REGNUM
        !          1020:    to virtual format for register REGNUM.  */
        !          1021: 
        !          1022: #define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,FROM,TO)    \
        !          1023:   bcopy ((FROM), (TO), 4);
        !          1024: 
        !          1025: /* Convert data from virtual format for register REGNUM
        !          1026:    to raw format for register REGNUM.  */
        !          1027: 
        !          1028: #define REGISTER_CONVERT_TO_RAW(REGNUM,FROM,TO)        \
        !          1029:   bcopy ((FROM), (TO), 4);
        !          1030: 
        !          1031: /* Return the GDB type object for the "standard" data type
        !          1032:    of data in register N.  */
        !          1033: 
        !          1034: #define REGISTER_VIRTUAL_TYPE(N) builtin_type_int
        !          1035: 
        !          1036: /* Describe the pointer in each stack frame to the previous stack frame
        !          1037:    (its caller).  */
        !          1038: 
        !          1039: /* FRAME_CHAIN takes a frame's nominal address
        !          1040:    and produces the frame's chain-pointer.
        !          1041: 
        !          1042:    FRAME_CHAIN_COMBINE takes the chain pointer and the frame's nominal address
        !          1043:    and produces the nominal address of the caller frame.
        !          1044: 
        !          1045:    However, if FRAME_CHAIN_VALID returns zero,
        !          1046:    it means the given frame is the outermost one and has no caller.
        !          1047:    In that case, FRAME_CHAIN_COMBINE is not used.  */
        !          1048: 
        !          1049: /* In the case of the Sun, the frame's nominal address
        !          1050:    is the address of a 4-byte word containing the calling frame's address.  */
        !          1051: 
        !          1052: #define FRAME_CHAIN(thisframe)  (rt_prev_frame(thisframe))
        !          1053: 
        !          1054: #define FRAME_CHAIN_VALID(chain, thisframe) \
        !          1055:   (chain >= 0x10000000 && chain < 0x20000000)
        !          1056: 
        !          1057: #define FRAME_CHAIN_COMBINE(chain, thisframe) (chain)
        !          1058: 
        !          1059: /* Define other aspects of the stack frame.  */
        !          1060: 
        !          1061: #define FRAME_SAVED_PC(frame) (rt_frame_reg(frame, 15))
        !          1062: 
        !          1063: #define FRAME_ARGS_ADDRESS(fi) (rt_frame_args(fi.frame))
        !          1064: 
        !          1065: #define FRAME_LOCALS_ADDRESS(fi) (fi.frame)
        !          1066: 
        !          1067: /* Return number of args passed to a frame.
        !          1068:    Can return -1, meaning no way to tell.  */
        !          1069: 
        !          1070: #define FRAME_NUM_ARGS(val, fi)  \
        !          1071: {register struct rt_frame *tf; \
        !          1072:     tf = get_cached_frame(fi.frame); \
        !          1073:     val = -1; \
        !          1074:     if (tf) val = tf->nParms;\
        !          1075: }
        !          1076: 
        !          1077: /* Return number of bytes at start of arglist that are not really args.  */
        !          1078: 
        !          1079: #define FRAME_ARGS_SKIP 0
        !          1080: 
        !          1081: /* Put here the code to store, into a struct frame_saved_regs,
        !          1082:    the addresses of the saved registers of frame described by FRAME_INFO.
        !          1083:    This includes special registers such as pc and fp saved in special
        !          1084:    ways in the stack frame.  sp is even more special:
        !          1085:    the address we return for it IS the sp for the next frame.  */
        !          1086: 
        !          1087: #define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs)            \
        !          1088: { register int regnum;                                                 \
        !          1089:   register struct rt_frame *tf;                        \
        !          1090:   register CORE_ADDR next_addr;                                                \
        !          1091:   bzero (&(frame_saved_regs), sizeof (frame_saved_regs));                      \
        !          1092:   tf = get_cached_frame((frame_info).frame);                                   \
        !          1093:   if (tf) {                                                                                    \
        !          1094:     for(regnum = tf->firstReg; regnum < 16; regnum++) {                \
        !          1095:       (frame_saved_regs).regs[regnum] = tf->firstRLoc+ 4*(regnum - tf->firstReg); \
        !          1096:     } \
        !          1097:   } \
        !          1098: }
        !          1099: 
        !          1100: 
        !          1101: /* Things needed for making the inferior call functions.  */
        !          1102: 
        !          1103: /* Push an empty stack frame, to record the current PC, etc.  */
        !          1104: 
        !          1105: #define PUSH_DUMMY_FRAME \
        !          1106: { register CORE_ADDR sp = read_register (SP_REGNUM);\
        !          1107:   register int regnum;                             \
        !          1108:   sp = push_word (sp, read_register (PC_REGNUM));   \
        !          1109:   for (regnum = 15; regnum >= 0; regnum--)  \
        !          1110:     sp = push_word (sp, read_register (regnum));    \
        !          1111:   write_register (FP_REGNUM, sp+64);               \
        !          1112:   write_register (SP_REGNUM, sp);  }
        !          1113: 
        !          1114: /* discard special frame pushed by PUSH_DUMMY_FRAME */
        !          1115: #define POP_DUMMY_FRAME \
        !          1116:     {register CORE_ADDR sp; \
        !          1117:     register int regnum; \
        !          1118:     sp = read_register(FP_REGNUM)-64; \
        !          1119:     for(regnum = 0; regnum < 16;regnum++) { \
        !          1120:        write_register(regnum, read_memory_integer(sp, 4)); \
        !          1121:        sp += 4; \
        !          1122:     } \
        !          1123:     /* now get the pc */ \
        !          1124:     write_register(PC_REGNUM, read_memory_integer(sp, 4)); \
        !          1125:     sp += 4; \
        !          1126:     }
        !          1127: 
        !          1128: /* Discard from the stack the innermost frame, restoring all registers.  */
        !          1129: /* THIS ROUTINE DOES NOT SET R1 (SP_REGNUM) CORRECTLY */
        !          1130: /* REALLY MUST CONSULT TRACE TBL TO FIND OUT FRAME SIZE */
        !          1131: #define POP_FRAME  \
        !          1132: { register CORE_ADDR fp = read_register (FP_REGNUM);            \
        !          1133:   register int regnum;                                          \
        !          1134:   register struct rt_frame *tf;                        \
        !          1135:   tf = (struct rt_frame *) get_cached_frame(fp);                       \
        !          1136:   if (tf) {                                                    \
        !          1137:     for(regnum = tf->firstReg; regnum < 16; regnum++) {                \
        !          1138:        write_register(regnum,                          \
        !          1139:            read_memory_integer (tf->firstRLoc + 4*(regnum-tf->firstReg), 4)    \
        !          1140:            );  \
        !          1141:     }          \
        !          1142:     write_register(PC_REGNUM, read_register(15));              \
        !          1143:     write_register(SP_REGNUM, tf->firstRLoc + 4*(16-tf->firstReg) + 36);       \
        !          1144:   }            \
        !          1145: }
        !          1146: 
        !          1147: /* This sequence of words is the instructions
        !          1148:      ls                r2,0(r1)                        2 bytes         pick up args
        !          1149:      ls                r3,4(r1)                        2 bytes         pick up args
        !          1150:      ls                r4,8(r1)                        2 bytes         pick up args
        !          1151:      ls                r5,c(r1)                        2 bytes         pick up args
        !          1152:      cal       r1,16(r1)                       4 bytes         fix up ap (==sp)
        !          1153:      cal16     r15,<low>                       4 bytes         do call
        !          1154:      oiu       r15,<high>(r15) 4
        !          1155:      lr                r0,r15                  2
        !          1156:      ls                r15,0(r15)                      2
        !          1157:      balr      r15                             2
        !          1158:      bpt                                       2                       get back to gdb
        !          1159:      <4 byte trace table>              4
        !          1160: 
        !          1161: This is 16 bytes.
        !          1162: */
        !          1163: 
        !          1164: #define CALL_DUMMY {0x70217131, 0x72417351, 0xc8110010, 0xc2f06969, \
        !          1165:     0xc3ff6969, 0x60f070ff, 0xecffbd00, 0xdf7fdf00}
        !          1166: 
        !          1167: #define CALL_DUMMY_LENGTH 32
        !          1168: 
        !          1169: #define CALL_DUMMY_START_OFFSET 0
        !          1170: 
        !          1171: /* Insert the specified number of args and function address
        !          1172:    into a call sequence of the above form stored at DUMMYNAME.  */
        !          1173: 
        !          1174: #define FIX_CALL_DUMMY(dummyname, fun, nargs)     \
        !          1175: { *((short *)(((char *)dummyname)+14)) = fun&0xffff; \
        !          1176: *((short *)(((char *)dummyname)+18)) = (fun>>16)&0xffff; \
        !          1177: }
        !          1178: 
        !          1179: /* Interface definitions for kernel debugger KDB.  */
        !          1180: 
        !          1181: /* Map machine fault codes into signal numbers.
        !          1182:    First subtract 0, divide by 4, then index in a table.
        !          1183:    Faults for which the entry in this table is 0
        !          1184:    are not handled by KDB; the program's own trap handler
        !          1185:    gets to handle then.  */
        !          1186: 
        !          1187: #define FAULT_CODE_ORIGIN 0
        !          1188: #define FAULT_CODE_UNITS 4
        !          1189: #define FAULT_TABLE    \
        !          1190: { 0, 0, 0, 0, SIGTRAP, 0, 0, 0, \
        !          1191:   0, SIGTRAP, 0, 0, 0, 0, 0, SIGKILL, \
        !          1192:   0, 0, 0, 0, 0, 0, 0, 0, \
        !          1193:   SIGILL }
        !          1194: 
        !          1195: /* Start running with a stack stretching from BEG to END.
        !          1196:    BEG and END should be symbols meaningful to the assembler.
        !          1197:    This is used only for kdb, which we do not support. */
        !          1198: 
        !          1199: #define INIT_STACK(beg, end)  \
        !          1200: {  }
        !          1201: 
        !          1202: /* Push the frame pointer register on the stack.  */
        !          1203: #define PUSH_FRAME_PTR \
        !          1204: { }
        !          1205: 
        !          1206: /* Copy the top-of-stack to the frame pointer register.  */
        !          1207: #define POP_FRAME_PTR \
        !          1208: { }
        !          1209: 
        !          1210: /* After KDB is entered by a fault, push all registers
        !          1211:    that GDB thinks about (all NUM_REGS of them),
        !          1212:    so that they appear in order of ascending GDB register number.
        !          1213:    The fault code will be on the stack beyond the last register.  */
        !          1214: 
        !          1215: #define PUSH_REGISTERS        \
        !          1216: { }
        !          1217: 
        !          1218: /* Assuming the registers (including processor status) have been
        !          1219:    pushed on the stack in order of ascending GDB register number,
        !          1220:    restore them and return to the address in the saved PC register.  */
        !          1221: 
        !          1222: #define POP_REGISTERS          \
        !          1223: { }
        !          1224: 
        !          1225: Only in .: m-ibm032init.h
        !          1226: 
        !          1227: /* This is how the size of an individual .o file's text segment
        !          1228:    is rounded on a sun.  */
        !          1229: 
        !          1230: #define FILEADDR_ROUND(addr) ((addr + 3) & -4)
        !          1231: 
        !          1232: diff -c ../../gnu/gdb/blockframe.c ./blockframe.c
        !          1233: *** ../../gnu/gdb/blockframe.c Sat Apr  4 22:06:18 1987
        !          1234: --- ./blockframe.c     Mon Apr 27 01:06:06 1987
        !          1235: ***************
        !          1236: *** 53,62 ****
        !          1237:   }
        !          1238:   
        !          1239:   void
        !          1240: ! set_current_frame (frame)
        !          1241:        FRAME frame;
        !          1242:   {
        !          1243:     current_frame = frame;
        !          1244:   }
        !          1245:   
        !          1246:   /* Return the frame that called FRAME.
        !          1247: --- 53,67 ----
        !          1248:   }
        !          1249:   
        !          1250:   void
        !          1251: ! set_current_frame (frame, validp)
        !          1252:        FRAME frame;
        !          1253: +      int validp;
        !          1254:   {
        !          1255:     current_frame = frame;
        !          1256: + #ifdef ibm032
        !          1257: +   if (validp)
        !          1258: +     recache_frames();
        !          1259: + #endif
        !          1260:   }
        !          1261:   
        !          1262:   /* Return the frame that called FRAME.
        !          1263: ***************
        !          1264: *** 291,301 ****
        !          1265:        CORE_ADDR pc;
        !          1266:   {
        !          1267:     register int i;
        !          1268:   
        !          1269:     /* Note that the last thing in the vector is always _etext.  */
        !          1270:     for (i = 0; i < misc_function_count; i++)
        !          1271:       {
        !          1272: !       if (pc < misc_function_vector[i].address)
        !          1273:        return i - 1;
        !          1274:       }
        !          1275:     return -1;
        !          1276: --- 296,309 ----
        !          1277:        CORE_ADDR pc;
        !          1278:   {
        !          1279:     register int i;
        !          1280: +   register long j;
        !          1281:   
        !          1282:     /* Note that the last thing in the vector is always _etext.  */
        !          1283:     for (i = 0; i < misc_function_count; i++)
        !          1284:       {
        !          1285: !       if ((j = misc_function_vector[i].address) < 0)
        !          1286: !         continue;
        !          1287: !       if (pc < j)
        !          1288:        return i - 1;
        !          1289:       }
        !          1290:     return -1;
        !          1291: ***************
        !          1292: *** 325,333 ****
        !          1293: --- 333,610 ----
        !          1294:       }
        !          1295:   }
        !          1296:   
        !          1297: + #ifdef ibm032
        !          1298: + /* RT frame format:
        !          1299: +     arg 3    these are not really here, but are in regs
        !          1300: +     arg 2
        !          1301: +     arg 1
        !          1302: +     arg 0
        !          1303: +     resvd 20 bytes
        !          1304: +     rn to r15        saved regs
        !          1305: +     floating regs (at first assume 0 bytes, fix later)
        !          1306: +     locals
        !          1307: + 
        !          1308: + N.B. r13 points 64 bytes below the end of the locals.
        !          1309: + */
        !          1310: + 
        !          1311: + /*
        !          1312: +  * Routine for ibm032 stack trace.  Called after a new frame has been set.  Do an entire stack
        !          1313: +  * trace, and squirrel away the information.  We need to do this since the ibm032 (rt) does
        !          1314: +  * not have enough info in a known place off of the frame ptr (r13) to do anything useful.
        !          1315: +  * Instead, one also requires the pc, and can then perform various operations to find
        !          1316: +  * out how that procedure built its frame, and thus, to decode it.  However, since this is
        !          1317: +  * fairly slow, we only do it after a set_current_frame operation has been performed.
        !          1318: + */
        !          1319: + 
        !          1320: + #define rtTTSize 50
        !          1321: + static struct rtTTCache {
        !          1322: +     CORE_ADDR lbound;                /* lowest address so far known as using this trace table */
        !          1323: +     CORE_ADDR ttaddr;                /* address of the last '0xdf' in the trace table */
        !          1324: +     char ttype;                              /* type of the trace table -- 0 == unused */
        !          1325: + } ttcache[rtTTSize];
        !          1326: + short ttptr = 0;
        !          1327: + 
        !          1328: + #define rtSize       50
        !          1329: + static struct rt_frame rtFrames[rtSize];
        !          1330: + static int rtCount;
        !          1331: + static CORE_ADDR rt_next_frame, rt_next_pc;
        !          1332: + 
        !          1333: + static struct rtTTCache *ttfind (addr)
        !          1334: +     CORE_ADDR addr; {
        !          1335: +     register int i;
        !          1336: +     register struct rtTTCache *tp;
        !          1337: +     for(i=0,tp=ttcache;i<rtTTSize;i++,tp++) {
        !          1338: +      if (addr >= tp->lbound && addr <= tp->ttaddr) return tp;
        !          1339: +     }
        !          1340: +     return 0;
        !          1341: + }
        !          1342: + 
        !          1343: + static ttadd(lowaddr, ttaddr, type)
        !          1344: +     register CORE_ADDR lowaddr, ttaddr;
        !          1345: +     char type; {
        !          1346: +     register struct rtTTCache *tp;
        !          1347: +     if (tp = ttfind(ttaddr)) {
        !          1348: +      /* possibly increase the bound on this cache element */
        !          1349: +      if (lowaddr < tp->lbound) tp->lbound = lowaddr;
        !          1350: +     }
        !          1351: +     else {
        !          1352: +      /* add a new element */
        !          1353: +      tp = &ttcache[ttptr++];
        !          1354: +      tp->lbound = lowaddr;
        !          1355: +      tp->ttaddr = ttaddr;
        !          1356: +      tp->ttype = type;
        !          1357: +      if (ttptr >= rtTTSize) ttptr = 0;       /* keep it in bounds */
        !          1358: +     }
        !          1359: + }
        !          1360: + 
        !          1361: + /* this routine scans for a trace table, and returns 4 bytes: 0 0 <n params> <first saved reg> */
        !          1362: + rt_num_regs (pc, tf)
        !          1363: + register struct rt_frame *tf;
        !          1364: + CORE_ADDR pc; {
        !          1365: +     register state = 0;
        !          1366: +     register long newpc = pc;
        !          1367: +     register int tc;
        !          1368: +     short nparms, firstreg;
        !          1369: +     short ttype;
        !          1370: +     short optx;
        !          1371: +     long offset;
        !          1372: +     char offtype;
        !          1373: +     struct rtTTCache *tp;
        !          1374: +     CORE_ADDR frame;
        !          1375: + 
        !          1376: +     frame = tf->frame;
        !          1377: +     /* first see if it is in our ttcache */
        !          1378: +     if (tp = ttfind(pc)) {
        !          1379: +      state = 3;
        !          1380: +      ttype = tp->ttype;
        !          1381: +      newpc = tp->ttaddr;
        !          1382: +     }
        !          1383: +     else {
        !          1384: +      /* state machine to look for 'df' 'xx' 'df' */
        !          1385: +      while (1) {
        !          1386: +          tc = read_memory_integer(newpc, 2);
        !          1387: +          if (state == 0 && (tc&0xff00) == 0xdf00) {
        !          1388: +              state = 1;
        !          1389: +              ttype = tc & 0xff;
        !          1390: +          }
        !          1391: +          else if (state == 1 && (tc & 0xff00) == 0xdf00) {
        !          1392: +              state = 3;
        !          1393: +              break;
        !          1394: +          }
        !          1395: +          else state = 0;
        !          1396: +          if (newpc - pc > 20000) break;
        !          1397: +          newpc += 2;
        !          1398: +      }
        !          1399: +      if (state == 3) ttadd(pc, newpc, ttype);        /* add to cache */
        !          1400: +     }
        !          1401: +     if (state != 3) {
        !          1402: +      printf("No trace table for pc %x, making one up.\n", pc);
        !          1403: +      tf->nParms = 0;
        !          1404: +      tf->firstReg = 12;
        !          1405: +      tf->firstRLoc = frame+64;
        !          1406: +      rt_next_pc = read_memory_integer(frame+64+12, 4);
        !          1407: +      rt_next_frame = read_memory_integer(frame+64+4, 4);
        !          1408: +      return 0;
        !          1409: +     }
        !          1410: +     /* otherwise newpc is pointing at the last 'df' in the trace table */
        !          1411: +     else if (ttype == 3) {
        !          1412: +      /* funny trace table found by OBSERVATION (not doc) to be in program prolog */
        !          1413: +      return -1;              /* special value checked by recache_frames */
        !          1414: +     }
        !          1415: +     else if (ttype == 2) {
        !          1416: +      /* assembly: no registers were saved */
        !          1417: +      tf->nParms = 0;
        !          1418: +      tf->firstReg = 16;
        !          1419: +      tf->firstRLoc = 0;
        !          1420: +      rt_next_pc = read_register(15);         /* where we go back to */
        !          1421: +      rt_next_frame = frame;
        !          1422: +      tf->frame -= 100;               /* hack to eliminate duplicate tags */
        !          1423: +      return 0;
        !          1424: +     }
        !          1425: +     else if (ttype == 0x7f) {
        !          1426: +      /* special machine state frame saved by STACK_DUMMY */
        !          1427: +      tf->nParms = 0;
        !          1428: +      tf->firstReg = 16;
        !          1429: +      tf->firstRLoc = 0;
        !          1430: +      rt_next_pc = read_memory_integer(frame + 64 - 64, 4);
        !          1431: +      rt_next_frame = read_memory_integer(frame -64 + 13*4, 4);
        !          1432: +      return 0;
        !          1433: +     }
        !          1434: +     else {
        !          1435: +      /* C program, I hope */
        !          1436: +      nparms = (read_memory_integer(newpc+2, 1) >> 4) & 0x0f;
        !          1437: +      firstreg = ((tc=read_memory_integer(newpc+1, 1)) >> 4) & 0x0f;
        !          1438: +      optx = ((tc&4)? 1 : 0); /* flags says if floating registers described */
        !          1439: +      offtype = read_memory_integer(newpc+optx+3, 1) & 0xff;
        !          1440: +      if ((offtype & 0xc0) == 0) {
        !          1441: +          /* 6 bits of local offset */
        !          1442: +          offset = offtype & 0x3f;
        !          1443: +      }
        !          1444: +      else if ((offtype & 0xc0) == 0x40) {
        !          1445: +          /* 14 bits of local offset */
        !          1446: +          offset = (offtype & 0x3f) << 8;
        !          1447: +          offset += (read_memory_integer(newpc+optx+4, 1) & 0xff);
        !          1448: +      }
        !          1449: +      else if ((offtype & 0xc0) == 0x80) {
        !          1450: +          /* 22 bits of local offset */
        !          1451: +          offset = (offtype & 0x3f) << 8;
        !          1452: +          offset += (read_memory_integer(newpc+optx+4, 1) & 0xff);
        !          1453: +          offset <<= 8;
        !          1454: +          offset += (read_memory_integer(newpc+optx+5, 1) & 0xff);
        !          1455: +      }
        !          1456: +      else if ((offtype & 0xc0) == 0xc0) {
        !          1457: +          /* 30 bits of local offset */
        !          1458: +          offset = (offtype & 0x3f) << 8;
        !          1459: +          offset += (read_memory_integer(newpc+optx+4, 1) & 0xff);
        !          1460: +          offset <<= 8;
        !          1461: +          offset += (read_memory_integer(newpc+optx+5, 1) & 0xff);
        !          1462: +          offset <<= 8;
        !          1463: +          offset += (read_memory_integer(newpc+optx+6, 1) & 0xff);
        !          1464: +      }
        !          1465: +      offset <<= 2;
        !          1466: +      tf->nParms = nparms;
        !          1467: +      tf->firstReg = firstreg;
        !          1468: +      tf->firstRLoc = frame   /* initial frame location */
        !          1469: +          + offset                            /* to top of frame */
        !          1470: +          - 36                                /* pascal static link, incomings args and linkage */
        !          1471: +          - (4*(16-firstreg));        /* space used by general regs */
        !          1472: +      rt_next_pc = read_memory_integer(tf->firstRLoc + 4*(15-firstreg), 4);
        !          1473: +      rt_next_frame = read_memory_integer(tf->firstRLoc + 4*(13-firstreg), 4);
        !          1474: +      return 0;
        !          1475: +     }
        !          1476: + }
        !          1477: + 
        !          1478: + recache_frames() {
        !          1479: +     register long i, j;
        !          1480: +     long pc;
        !          1481: +     CORE_ADDR curfp;
        !          1482: +     struct rt_frame *tf;
        !          1483: + 
        !          1484: +     pc = read_pc();
        !          1485: +     curfp = current_frame;
        !          1486: +     rtCount = 0;
        !          1487: +     /* these next special cases can only occur with frame #0; others can't make calls
        !          1488: +         in these intermediate states.
        !          1489: +     */
        !          1490: +     /* if pc points at br or brx, we're doing a return, so set the pc to the target */
        !          1491: +     i=read_memory_integer(pc, 2);
        !          1492: +     if ((i & 0xfe00) == 0xe800) {
        !          1493: +      /* we're looking at a br or brx instruction */
        !          1494: +      pc = read_register(i&0x0f);
        !          1495: +     }
        !          1496: +     /* also, if pc points at d9xx or c111 we're in the middle of a frame push, and should
        !          1497: +        use r15 for the pc.
        !          1498: +    */
        !          1499: +    if ((i & 0xff00) == 0xd900 || (i & 0xffff) == 0xc111) {
        !          1500: +      pc = read_register(15);
        !          1501: +    }
        !          1502: +     while (1) {
        !          1503: +      if (curfp <= 0x10000000 || curfp >= 0x20000000) break;
        !          1504: +      if (pc > 0x20000000) break;
        !          1505: +      /* otherwise try to add a new frame structure */
        !          1506: +      if (rtCount >= rtTTSize) break;
        !          1507: +      tf = &rtFrames[rtCount++];
        !          1508: +      tf->frame = curfp;
        !          1509: +      tf->pc = pc;
        !          1510: +      i = rt_num_regs(pc, tf);
        !          1511: +      if (i<0) {      /* exceptional values */
        !          1512: +          rtCount--;          /* last frame was bogus */
        !          1513: +          break;
        !          1514: +      }
        !          1515: +      /* now setup for next iteration */
        !          1516: +      pc = rt_next_pc;
        !          1517: +      curfp = rt_next_frame;
        !          1518: +     }
        !          1519: + }
        !          1520: + 
        !          1521: + struct rt_frame *get_cached_frame(aframe)
        !          1522: + CORE_ADDR aframe; {
        !          1523: +     register int i;
        !          1524: +     for(i=0;i<rtCount;i++) {
        !          1525: +      if (rtFrames[i].frame == aframe) return &rtFrames[i];
        !          1526: +     }
        !          1527: +     return 0;
        !          1528: + }
        !          1529: + 
        !          1530: + long rt_prev_frame(frame)
        !          1531: + register CORE_ADDR frame; {
        !          1532: +     register int i;
        !          1533: +     for(i=0;i<rtCount-1;i++) {
        !          1534: +      if (rtFrames[i].frame == frame) return rtFrames[i+1].frame;
        !          1535: +     }
        !          1536: +     return 0;
        !          1537: + }
        !          1538: + 
        !          1539: + long rt_frame_reg(frame, reg)
        !          1540: + CORE_ADDR frame;
        !          1541: + register long reg; {
        !          1542: +     register struct rt_frame *tf;
        !          1543: +     tf = get_cached_frame(frame);
        !          1544: +     if (tf == 0) return 0;
        !          1545: +     if (tf->firstReg > reg) return 0;        /* didn't save this one! */
        !          1546: +     return read_memory_integer(tf->firstRLoc + 4 * (reg - tf->firstReg), 4);
        !          1547: + }
        !          1548: + 
        !          1549: + long rt_frame_args(frame)
        !          1550: + CORE_ADDR frame; {
        !          1551: +     register struct rt_frame *tf;
        !          1552: +     tf = get_cached_frame(frame);
        !          1553: +     if (!tf) return 0;
        !          1554: +     return tf->firstRLoc + 20 + 4*(16 - tf->firstReg);
        !          1555: + }
        !          1556: + #endif
        !          1557: + 
        !          1558: + blockinitialize() {initialize();}
        !          1559: + 
        !          1560:   static
        !          1561:   initialize ()
        !          1562:   {
        !          1563: + #ifdef ibm032
        !          1564: + #ifdef CAMPHOR
        !          1565: +   add_com ("recache-frames", class_stack, recache_frames,
        !          1566: +       "Tell debugger to recompute PC/RT stack frame cache\n");
        !          1567: + #endif
        !          1568: + #endif
        !          1569:   }
        !          1570:   
        !          1571:   END_FILE
        !          1572: diff -c ../../gnu/gdb/breakpoint.c ./breakpoint.c
        !          1573: *** ../../gnu/gdb/breakpoint.c Sat Apr  4 22:22:44 1987
        !          1574: --- ./breakpoint.c     Sun Apr 26 23:02:20 1987
        !          1575: ***************
        !          1576: *** 94,99 ****
        !          1577: --- 94,100 ----
        !          1578:      of last breakpoint hit.  */
        !          1579:   
        !          1580:   struct command_line *breakpoint_commands;
        !          1581: + char new_breakpoint_commands = 0; /* Zalman Stern, ITC 1/12/1987 */
        !          1582:   
        !          1583:   START_FILE
        !          1584:   
        !          1585: ***************
        !          1586: *** 203,210 ****
        !          1587:       {
        !          1588:         execute_command (breakpoint_commands->line, 0);
        !          1589:         /* If command was "cont", breakpoint_commands is 0 now.  */
        !          1590: !       if (breakpoint_commands)
        !          1591:        breakpoint_commands = breakpoint_commands->next;
        !          1592:       }
        !          1593:     clear_momentary_breakpoints ();
        !          1594:   }
        !          1595: --- 204,213 ----
        !          1596:       {
        !          1597:         execute_command (breakpoint_commands->line, 0);
        !          1598:         /* If command was "cont", breakpoint_commands is 0 now.  */
        !          1599: !       if (breakpoint_commands && !new_breakpoint_commands) /* Zalman Stern, ITC 1/12/1987 */
        !          1600:        breakpoint_commands = breakpoint_commands->next;
        !          1601: +       else /* Zalman Stern, ITC 1/12/1987 */
        !          1602: +         new_breakpoint_commands = 0; /* Zalman Stern, ITC 1/12/1987 */
        !          1603:       }
        !          1604:     clear_momentary_breakpoints ();
        !          1605:   }
        !          1606: ***************
        !          1607: *** 215,220 ****
        !          1608: --- 218,225 ----
        !          1609:   void
        !          1610:   clear_breakpoint_commands ()
        !          1611:   {
        !          1612: +   if (breakpoint_commands != 0) /* Zalman Stern, ITC 1/12/1987 */
        !          1613: +     new_breakpoint_commands = 1; /* Zalman Stern, ITC 1/12/1987 */
        !          1614:     breakpoint_commands = 0;
        !          1615:     breakpoint_auto_delete (0);
        !          1616:   }
        !          1617: ***************
        !          1618: *** 921,926 ****
        !          1619: --- 926,933 ----
        !          1620:   struct cmd_list_element *enablelist;
        !          1621:   
        !          1622:   extern struct cmd_list_element *cmdlist;
        !          1623: + 
        !          1624: + breakinitialize() {initialize();}
        !          1625:   
        !          1626:   static
        !          1627:   initialize ()
        !          1628: diff -c ../../gnu/gdb/command.c ./command.c
        !          1629: *** ../../gnu/gdb/command.c    Sat Apr  4 22:24:07 1987
        !          1630: --- ./command.c        Sat Apr 25 17:18:15 1987
        !          1631: ***************
        !          1632: *** 94,100 ****
        !          1633:   You are forbidden to forbid anyone else to use, share and improve
        !          1634:   what you give them.   Help stamp out software-hoarding!  */
        !          1635:   
        !          1636: - 
        !          1637:   #include "command.h"
        !          1638:   #include <stdio.h>
        !          1639:   
        !          1640: --- 94,99 ----
        !          1641: ***************
        !          1642: *** 388,394 ****
        !          1643:       {
        !          1644:         if (nfound > 1 && allow_unknown >= 0)
        !          1645:        {
        !          1646: !        *p = 0;
        !          1647:          ambbuf[0] = 0;
        !          1648:          for (c = list; c; c = c->next)
        !          1649:            if (!strncmp (*line, c->name, p - *line))
        !          1650: --- 387,393 ----
        !          1651:       {
        !          1652:         if (nfound > 1 && allow_unknown >= 0)
        !          1653:        {
        !          1654: !           *p = 0;
        !          1655:          ambbuf[0] = 0;
        !          1656:          for (c = list; c; c = c->next)
        !          1657:            if (!strncmp (*line, c->name, p - *line))
        !          1658: diff -c ../../gnu/gdb/core.c ./core.c
        !          1659: *** ../../gnu/gdb/core.c       Sat Apr  4 22:27:23 1987
        !          1660: --- ./core.c   Mon Apr 27 13:20:47 1987
        !          1661: ***************
        !          1662: *** 163,172 ****
        !          1663:        int reg_offset;
        !          1664:   
        !          1665:        /* 4.2bsd-style core dump */
        !          1666:        val = myread (corechan, &u, sizeof u);
        !          1667:        if (val < 0)
        !          1668: !        perror_with_name (filename);
        !          1669:        data_start = exec_data_start;
        !          1670:        data_end = data_start + NBPG * u.u_dsize;
        !          1671:        stack_start = stack_end - NBPG * u.u_ssize;
        !          1672:        data_offset = NBPG * UPAGES;
        !          1673: --- 163,180 ----
        !          1674:        int reg_offset;
        !          1675:   
        !          1676:        /* 4.2bsd-style core dump */
        !          1677: + #ifdef ibm032
        !          1678: +      /* on ibm032, uarea is at the far end of the u pages */
        !          1679: +      lseek(corechan, UPAGES*NBPG - sizeof(u), 0);
        !          1680: + #endif
        !          1681:        val = myread (corechan, &u, sizeof u);
        !          1682:        if (val < 0)
        !          1683: !        perror_with_name (execfile);
        !          1684: ! #ifdef ibm032
        !          1685: !      data_start = 0x10000000;
        !          1686: ! #else
        !          1687:        data_start = exec_data_start;
        !          1688: + #endif
        !          1689:        data_end = data_start + NBPG * u.u_dsize;
        !          1690:        stack_start = stack_end - NBPG * u.u_ssize;
        !          1691:        data_offset = NBPG * UPAGES;
        !          1692: ***************
        !          1693: *** 208,214 ****
        !          1694:          corefile = concat (dirname, "/", filename);
        !          1695:        }
        !          1696:   
        !          1697: !       set_current_frame (read_register (FP_REGNUM));
        !          1698:         select_frame (get_current_frame (), 0);
        !          1699:         validate_files ();
        !          1700:       }
        !          1701: --- 216,222 ----
        !          1702:          corefile = concat (dirname, "/", filename);
        !          1703:        }
        !          1704:   
        !          1705: !       set_current_frame (read_register (FP_REGNUM), 1);
        !          1706:         select_frame (get_current_frame (), 0);
        !          1707:         validate_files ();
        !          1708:       }
        !          1709: ***************
        !          1710: *** 523,528 ****
        !          1711: --- 531,539 ----
        !          1712:   
        !          1713:   #endif /* not NEW_SUN_CORE */
        !          1714:   
        !          1715: + 
        !          1716: + coreinitialize() {initialize();}
        !          1717: + 
        !          1718:   static
        !          1719:   initialize ()
        !          1720:   {
        !          1721: diff -c ../../gnu/gdb/dbxread.c ./dbxread.c
        !          1722: *** ../../gnu/gdb/dbxread.c    Sat Apr  4 22:29:54 1987
        !          1723: --- ./dbxread.c        Fri May 15 15:52:24 1987
        !          1724: ***************
        !          1725: *** 28,33 ****
        !          1726: --- 28,36 ----
        !          1727:   #include "initialize.h"
        !          1728:   #include "symtab.h"
        !          1729:   #include "param.h"
        !          1730: + #ifdef CAMPHOR
        !          1731: + #include "value.h"
        !          1732: + #endif
        !          1733:   
        !          1734:   static void add_symbol_to_list ();
        !          1735:   static void read_dbx_symtab ();
        !          1736: ***************
        !          1737: *** 89,94 ****
        !          1738: --- 92,109 ----
        !          1739:     int prev_line_number;
        !          1740:   };
        !          1741:   
        !          1742: + /*  When dealing with dynamically loaded objects, the symbol table in the sym file
        !          1743: +     does not match where we actually load the files.  Thus, gdb has to relocate those
        !          1744: +     symbols during dbxread.  This is only used by the camphor support code, and
        !          1745: +     probably should be under an ifdef camphor.  */
        !          1746: + 
        !          1747: + struct dlreloc
        !          1748: +   {
        !          1749: +     long text;
        !          1750: +     long data;
        !          1751: +     long bss;
        !          1752: +   } dlreloc;
        !          1753: + 
        !          1754:   static struct subfile *subfiles;
        !          1755:   
        !          1756:   static struct subfile *current_subfile;
        !          1757: ***************
        !          1758: *** 1015,1020 ****
        !          1759: --- 1030,1037 ----
        !          1760:     register int i, nbl;
        !          1761:     register struct blockvector *bv;
        !          1762:     register struct block *b;
        !          1763: +   int j;
        !          1764: +   struct symbol *ts1, *ts2;
        !          1765:   
        !          1766:     for (s = symtab_list; s; s = s->next)
        !          1767:       {
        !          1768: ***************
        !          1769: *** 1025,1034 ****
        !          1770: --- 1042,1238 ----
        !          1771:          b = BLOCKVECTOR_BLOCK (bv, i);
        !          1772:          qsort (&BLOCK_SYM (b, 0), BLOCK_NSYMS (b),
        !          1773:                 sizeof (struct symbol *), compare_symbols);
        !          1774: +           /* Register parms have two decls, but the register one is the only one of interest */
        !          1775: +        /* So, trash the name of the bad one, since binary srch could get either.  Yucko. */
        !          1776: +        /* doing name this way enables symbol freeing code to keep working */
        !          1777: +           for(j=1;j<BLOCK_NSYMS(b);j++)
        !          1778: +           {
        !          1779: +              ts1 = BLOCK_SYM(b,j-1);
        !          1780: +                 ts2 = BLOCK_SYM(b, j);
        !          1781: +              if (SYMBOL_NAMESPACE(ts1) == VAR_NAMESPACE
        !          1782: +               && SYMBOL_NAMESPACE(ts2) == VAR_NAMESPACE
        !          1783: +               && strcmp(SYMBOL_NAME(ts1), SYMBOL_NAME(ts2)) == 0)
        !          1784: +                {if (SYMBOL_CLASS(ts1) == LOC_REGISTER)
        !          1785: +                  {SYMBOL_CLASS(ts2) = LOC_REGISTER;
        !          1786: +                  SYMBOL_TYPE(ts2) = SYMBOL_TYPE(ts1);
        !          1787: +                  SYMBOL_VALUE(ts2) = SYMBOL_VALUE(ts1);
        !          1788: +                  }
        !          1789: +                else if (SYMBOL_CLASS(ts2) == LOC_REGISTER )
        !          1790: +                  {SYMBOL_CLASS(ts1) = LOC_REGISTER;
        !          1791: +                  SYMBOL_TYPE(ts1) = SYMBOL_TYPE(ts2);
        !          1792: +                  SYMBOL_VALUE(ts1) = SYMBOL_VALUE(ts2);
        !          1793: +                  }
        !          1794: + #ifdef notdef
        !          1795: +                else printf("Check out def of symbol %s\n", SYMBOL_NAME(ts1));
        !          1796: + #endif
        !          1797: +                }
        !          1798: +           }
        !          1799:        }
        !          1800:       }
        !          1801:   }
        !          1802:   
        !          1803: + 
        !          1804: + #ifdef CAMPHOR
        !          1805: + set_rel_command(exp)
        !          1806: +       char *exp;
        !          1807: + {
        !          1808: +   struct expression *expr = (struct expression *) parse_c_expression (exp);
        !          1809: +   register value val;
        !          1810: +   register long temp;
        !          1811: +   register struct cleanup *old_chain
        !          1812: +     = make_cleanup (free_current_contents, &expr);
        !          1813: +   val = evaluate_expression (expr);
        !          1814: +   temp = value_as_long (val);
        !          1815: +   dlreloc.text = dlreloc.data = dlreloc.bss = temp;
        !          1816: +   printf("Relocation for all segs set to %x.\n", temp);
        !          1817: +   do_cleanups (old_chain);
        !          1818: + }
        !          1819: + 
        !          1820: + void
        !          1821: + add_file_command (name)
        !          1822: +      char *name;
        !          1823: + {
        !          1824: +   register int desc;
        !          1825: +   struct exec hdr;
        !          1826: +   struct nlist *nlist;
        !          1827: +   char *stringtab;
        !          1828: +   long buffer;
        !          1829: +   register int val;
        !          1830: +   extern void close ();
        !          1831: +   struct cleanup *old_chain;
        !          1832: +   int in_this_dir = 1;
        !          1833: +   struct symtab *symtab_temp;
        !          1834: + 
        !          1835: +   dont_repeat ();
        !          1836: + 
        !          1837: +   if (name == 0)
        !          1838: +     error_no_arg ("file to add symbols from");
        !          1839: + 
        !          1840: +   if (symtab_list && !query ("Add more symbols from \"%s\"? ", name))
        !          1841: +     error ("Not confirmed.");
        !          1842: + 
        !          1843: +   if (symfile)
        !          1844: +     free (symfile);
        !          1845: +   symfile = 0;
        !          1846: + 
        !          1847: +   desc = open (name, 0);
        !          1848: +   if (desc < 0)
        !          1849: +     {
        !          1850: +       if ((desc = openp (getenv ("BZPATH"), name, 0, 0)) < 0)
        !          1851: +         if ((desc = openp (getenv ("CLASSPATH"), name, 0, 0)) < 0)
        !          1852: +           desc = openp (getenv ("PATH"), name, 0, 0);
        !          1853: + 
        !          1854: +       in_this_dir = 0;
        !          1855: +     }
        !          1856: +   if (desc < 0)
        !          1857: +     perror_with_name (name);
        !          1858: + 
        !          1859: +   old_chain = make_cleanup (close, desc);
        !          1860: + 
        !          1861: +   val = myread (desc, &hdr, sizeof hdr);
        !          1862: +   if (val < 0)
        !          1863: +     perror_with_name (name);
        !          1864: + 
        !          1865: +   if (N_BADMAG (hdr))
        !          1866: +     error ("File \"%s\" not in executable format.", name);
        !          1867: + 
        !          1868: +   if (hdr.a_syms == 0)
        !          1869: +     {
        !          1870: +       free_all_symtabs ();           /* check this */
        !          1871: +       return;
        !          1872: +     }
        !          1873: + 
        !          1874: +   /* Now read the string table, all at once.  */
        !          1875: +   val = lseek (desc, N_SYMOFF (hdr) + hdr.a_syms, 0);
        !          1876: +   if (val < 0)
        !          1877: +     perror_with_name (name);
        !          1878: +   val = myread (desc, &buffer, sizeof buffer);
        !          1879: +   if (val < 0)
        !          1880: +     perror_with_name (name);
        !          1881: +   stringtab = (char *) alloca (buffer);
        !          1882: +   bcopy (&buffer, stringtab, sizeof buffer);
        !          1883: +   val = myread (desc, stringtab + sizeof buffer, buffer - sizeof buffer);
        !          1884: +   if (val < 0)
        !          1885: +     perror_with_name (name);
        !          1886: + 
        !          1887: + #ifdef READ_GDB_SYMSEGS
        !          1888: +   /* That puts us at the symsegs.  Read them.  */
        !          1889: +   symseg_chain = read_symsegs (desc, name);
        !          1890: +   hash_symsegs ();
        !          1891: + #else
        !          1892: +   /* Where people are using the 4.2 ld program, must not check for
        !          1893: +      symsegs, because that ld puts randonm garbage at the end of
        !          1894: +      the output file and that would trigger an error message.  */
        !          1895: +   symseg_chain = 0;
        !          1896: + #endif
        !          1897: + 
        !          1898: +   /* Position to read the symbol table.  Do not read it all at once. */
        !          1899: +   val = lseek (desc, N_SYMOFF (hdr), 0);
        !          1900: +   if (val < 0)
        !          1901: +     perror_with_name (name);
        !          1902: + 
        !          1903: +   printf ("Reading symbol data from %s...", name);
        !          1904: +   fflush (stdout);
        !          1905: + 
        !          1906: +   init_misc_functions ();
        !          1907: +   make_cleanup (discard_misc_bunches, 0);
        !          1908: +   init_header_files ();
        !          1909: +   make_cleanup (free_header_files, 0);
        !          1910: + 
        !          1911: +  /* Remember symtab_list to check if the added file had any dbx info in it. */
        !          1912: +   symtab_temp = symtab_list;
        !          1913: + 
        !          1914: +   /* Now that the symbol table data of the executable file are all in core,
        !          1915: +      process them and define symbols accordingly.  Closes desc.  */
        !          1916: + 
        !          1917: +   read_dbx_symtab (desc, stringtab, hdr.a_syms / sizeof (struct nlist));
        !          1918: + 
        !          1919: +   if (symtab_list == symtab_temp) {
        !          1920: +     printf("\n%s not compiled with -g, debugging posibilities are limited.\n", name);
        !          1921: +     fflush(stdout);
        !          1922: +   }
        !          1923: +   else {
        !          1924: + 
        !          1925: +   /* Sort symbols alphabetically within each block.  */
        !          1926: + 
        !          1927: +     sort_syms ();
        !          1928: + 
        !          1929: +   /* Go over the misc functions and install them in vector.  */
        !          1930: + 
        !          1931: +     condense_misc_bunches ();
        !          1932: + 
        !          1933: +   /* Make a default for file to list.  */
        !          1934: + 
        !          1935: +     select_source_symtab (symtab_list);
        !          1936: +   }
        !          1937: + 
        !          1938: +   do_cleanups (old_chain);
        !          1939: + 
        !          1940: +   /* Free the symtabs made by read_symsegs, but not their contents,
        !          1941: +      which have been copied into symtabs on symtab_list.  */
        !          1942: +   while (symseg_chain)
        !          1943: +     {
        !          1944: +       register struct symtab *s = symseg_chain->next;
        !          1945: +       free (symseg_chain);
        !          1946: +       symseg_chain = s;
        !          1947: +     }
        !          1948: + 
        !          1949: +   if (in_this_dir && name[0] != '/')
        !          1950: +     {
        !          1951: +       char dirname[MAXPATHLEN];
        !          1952: + 
        !          1953: +       getwd (dirname);
        !          1954: +       symfile = concat (dirname, "/",
        !          1955: +                      savestring (name, strlen (name)));
        !          1956: +     }
        !          1957: +   else
        !          1958: +     symfile = savestring (name, strlen (name));
        !          1959: + 
        !          1960: +   printf ("done.\n");
        !          1961: +   fflush (stdout);
        !          1962: + }
        !          1963: + #endif
        !          1964: + 
        !          1965:   /* This is the symbol-file command.  Read the file, analyze its symbols,
        !          1966:      and add a struct symtab to symtab_list.  */
        !          1967:   
        !          1968: ***************
        !          1969: *** 1047,1052 ****
        !          1970: --- 1251,1263 ----
        !          1971:   
        !          1972:     dont_repeat ();
        !          1973:   
        !          1974: + #ifdef CAMPHOR
        !          1975: +   /* this command does not deal with automatically relocated stuff */
        !          1976: +   dlreloc.text = 0;
        !          1977: +   dlreloc.data = 0;
        !          1978: +   dlreloc.bss = 0;
        !          1979: + #endif
        !          1980: + 
        !          1981:     if (name == 0)
        !          1982:       error_no_arg ("file to read symbols from");
        !          1983:   
        !          1984: ***************
        !          1985: *** 1130,1151 ****
        !          1986:   
        !          1987:     read_dbx_symtab (desc, stringtab, hdr.a_syms / sizeof (struct nlist));
        !          1988:   
        !          1989:     /* Sort symbols alphabetically within each block.  */
        !          1990:   
        !          1991: !   sort_syms ();
        !          1992:   
        !          1993:     /* Go over the misc functions and install them in vector.  */
        !          1994:   
        !          1995: !   condense_misc_bunches ();
        !          1996:   
        !          1997:     /* Don't allow char * to have a typename (else would get caddr_t.)  */
        !          1998:   
        !          1999: !   TYPE_NAME (lookup_pointer_type (builtin_type_char)) = 0;
        !          2000:   
        !          2001:     /* Make a default for file to list.  */
        !          2002:   
        !          2003: !   select_source_symtab (symtab_list);
        !          2004:   
        !          2005:     symfile = savestring (name, strlen (name));
        !          2006:   
        !          2007:     do_cleanups (old_chain);
        !          2008: --- 1341,1372 ----
        !          2009:   
        !          2010:     read_dbx_symtab (desc, stringtab, hdr.a_syms / sizeof (struct nlist));
        !          2011:   
        !          2012: +   /* Check to make sure file was compiled with -g. */
        !          2013: + 
        !          2014: +   if (symtab_list == NULL) {
        !          2015: +     printf("\n%s not compiled with -g, debugging posibilities are limited.\n", name);
        !          2016: +     fflush(stdout);
        !          2017: +   }
        !          2018: +   else {
        !          2019: + 
        !          2020:     /* Sort symbols alphabetically within each block.  */
        !          2021:   
        !          2022: !     sort_syms ();
        !          2023:   
        !          2024:     /* Go over the misc functions and install them in vector.  */
        !          2025:   
        !          2026: !     condense_misc_bunches ();
        !          2027:   
        !          2028:     /* Don't allow char * to have a typename (else would get caddr_t.)  */
        !          2029:   
        !          2030: !     TYPE_NAME (lookup_pointer_type (builtin_type_char)) = 0;
        !          2031:   
        !          2032:     /* Make a default for file to list.  */
        !          2033:   
        !          2034: !     select_source_symtab (symtab_list);
        !          2035:   
        !          2036: +   }
        !          2037: + 
        !          2038:     symfile = savestring (name, strlen (name));
        !          2039:   
        !          2040:     do_cleanups (old_chain);
        !          2041: ***************
        !          2042: *** 1204,1209 ****
        !          2043: --- 1425,1440 ----
        !          2044:       {
        !          2045:         fread (&buf, sizeof buf, 1, stream);
        !          2046:         namestring = buf.n_un.n_strx ? buf.n_un.n_strx + stringtab : 0;
        !          2047: + #ifdef CAMPHOR
        !          2048: +       if ((buf.n_type & N_TYPE) == N_UNDF) {
        !          2049: +        /* don't screw around with undefined symbols */
        !          2050: +       }
        !          2051: +       else {
        !          2052: +      if ((buf.n_type & N_TYPE) == N_TEXT) buf.n_value += dlreloc.text;
        !          2053: +      else if ((buf.n_type & N_TYPE) == N_DATA) buf.n_value += dlreloc.data;
        !          2054: +      else if ((buf.n_type & N_TYPE) == N_BSS) buf.n_value += dlreloc.bss;
        !          2055: +       }
        !          2056: + #endif
        !          2057:         if (buf.n_type & N_STAB)
        !          2058:        process_one_symbol (buf.n_type, buf.n_desc,
        !          2059:                            buf.n_value, namestring);
        !          2060: ***************
        !          2061: *** 1356,1361 ****
        !          2062: --- 1587,1596 ----
        !          2063:       }
        !          2064:   }
        !          2065:   
        !          2066: + #ifdef ibm032
        !          2067: + static  char hcState;                /* two different, incompatible compilers for the RT */
        !          2068: + #endif
        !          2069: +   
        !          2070:   static void
        !          2071:   process_one_symbol (type, desc, value, name)
        !          2072:        int type, desc;
        !          2073: ***************
        !          2074: *** 1363,1369 ****
        !          2075:        char *name;
        !          2076:   {
        !          2077:     register struct context_stack *new;
        !          2078: !   
        !          2079:     /* Something is wrong if we see real data before
        !          2080:        seeing a source file name.  */
        !          2081:     
        !          2082: --- 1598,1633 ----
        !          2083:        char *name;
        !          2084:   {
        !          2085:     register struct context_stack *new;
        !          2086: !   char tname[256];
        !          2087: !   /* Now, there are two compilers for the RT, and they are seriously incompatible.
        !          2088: !       pcc is just like normal c compilers: stabs for a block occur before the LBRAC
        !          2089: !       stab for that same block.  Thus this code squirrels them away in the context
        !          2090: !       and when the RBRAC is hit, restores local_symbols as of the time the LBRAC
        !          2091: !       was encountered, and adds these symbosl to the block that just ended.
        !          2092: !       
        !          2093: !       However, with the HC compiler, those symbols occur *after* the LBRAC symbol
        !          2094: !       declaring the block's start.  Totally incompatible, of course.  One expects no
        !          2095: !       less from IBM.  For hc compiled  programs, we use the symbols in local_symbols
        !          2096: !       *before* the RBRAC command pops the context stack.
        !          2097: !       
        !          2098: !       Amazingly enough, when we complained to IBM/Palo Alto about this incompatibility,
        !          2099: !       they claimed that Mark Linton (original author of dbx) liked the new way better, and
        !          2100: !       that he didn't even know that pcc used a different order.  Sorta explains some things
        !          2101: !       about dbx, n'est-ce pas?  Furthermore, of course, IBM  doesn't want to change
        !          2102: !       either pcc or hc.
        !          2103: ! 
        !          2104: !       Anyway, hc and pcc compiled .o files often co-exist in programs.  How do we
        !          2105: !       tell which is which?  Stupid heuristic which doesn't work with programs
        !          2106: !       with no top-level locals or parameters: after seeing a function's start, if we see
        !          2107: !       an LBRAC before seeing a variable, then we are using hc, otherwise it is pcc.
        !          2108: !       Stupid heuristics are better than none, so we use it.
        !          2109: !       
        !          2110: !       The variable hcState is used to keep track of this crap.
        !          2111: !       0 ==> saw function symbol
        !          2112: !       1 ==> saw lbrac in state 0, this is hc.
        !          2113: !       2 ==> saw symbol in state 0, this is pcc.
        !          2114: !   */
        !          2115: ! 
        !          2116:     /* Something is wrong if we see real data before
        !          2117:        seeing a source file name.  */
        !          2118:     
        !          2119: ***************
        !          2120: *** 1384,1389 ****
        !          2121: --- 1648,1656 ----
        !          2122:         also the end of the lexical context for the previous function.  */
        !          2123:         new = context_stack;
        !          2124:         within_function = 1;
        !          2125: + #ifdef ibm032
        !          2126: +       hcState = 0;
        !          2127: + #endif
        !          2128:         if (new)
        !          2129:        {
        !          2130:          /* Make a block for the local symbols within.  */
        !          2131: ***************
        !          2132: *** 1400,1406 ****
        !          2133: --- 1667,1679 ----
        !          2134:         new->locals = 0;
        !          2135:         new->old_blocks = pending_blocks;
        !          2136:         new->start_addr = value;
        !          2137: + #ifdef ibm032
        !          2138: +       strcpy(tname, ".");
        !          2139: +       strcat(tname, name);
        !          2140: +       new->name = define_symbol(value, tname);
        !          2141: + #else
        !          2142:         new->name = define_symbol (value, name);
        !          2143: + #endif
        !          2144:         local_symbols = 0;
        !          2145:         break;
        !          2146:   
        !          2147: ***************
        !          2148: *** 1407,1412 ****
        !          2149: --- 1680,1688 ----
        !          2150:       case N_LBRAC:
        !          2151:         /* This "symbol" just indicates the start of an inner lexical
        !          2152:         context within a function.  */
        !          2153: + #ifdef ibm032
        !          2154: +       if (hcState == 0) hcState = 1;
        !          2155: + #endif
        !          2156:         new = (struct context_stack *) xmalloc (sizeof (struct context_stack));
        !          2157:         new->depth = desc;
        !          2158:         new->next = context_stack;
        !          2159: ***************
        !          2160: *** 1422,1430 ****
        !          2161:         /* This "symbol" just indicates the end of an inner lexical
        !          2162:         context that was started with N_RBRAC.  */
        !          2163:         new = context_stack;
        !          2164:         if (new == 0 || desc != new->depth)
        !          2165:        error ("Invalid symbol data: N_LBRAC/N_RBRAC symbol mismatch, symtab pos %d.", symnum);
        !          2166: -       local_symbols = new->locals;
        !          2167:         context_stack = new->next;
        !          2168:         /* If this is not the outermost LBRAC...RBRAC pair in the
        !          2169:         function, its local symbols preceded it, and are the ones
        !          2170: --- 1698,1711 ----
        !          2171:         /* This "symbol" just indicates the end of an inner lexical
        !          2172:         context that was started with N_RBRAC.  */
        !          2173:         new = context_stack;
        !          2174: + #ifdef ibm032
        !          2175: +       if (hcState == 2)      /* pcc */
        !          2176: +        local_symbols = new->locals;
        !          2177: + #else
        !          2178: +       local_symbols = new->locals;
        !          2179: + #endif
        !          2180:         if (new == 0 || desc != new->depth)
        !          2181:        error ("Invalid symbol data: N_LBRAC/N_RBRAC symbol mismatch, symtab pos %d.", symnum);
        !          2182:         context_stack = new->next;
        !          2183:         /* If this is not the outermost LBRAC...RBRAC pair in the
        !          2184:         function, its local symbols preceded it, and are the ones
        !          2185: ***************
        !          2186: *** 1443,1448 ****
        !          2187: --- 1724,1733 ----
        !          2188:                        new->start_addr + last_source_start_addr,
        !          2189:                        value + last_source_start_addr);
        !          2190:        }
        !          2191: + #ifdef ibm032
        !          2192: +       if (hcState == 1 && context_stack->next)       /* hc */
        !          2193: +         local_symbols = new->locals;         /* now we get them */
        !          2194: + #endif
        !          2195:         free (new);
        !          2196:         break;
        !          2197:   
        !          2198: ***************
        !          2199: *** 1493,1498 ****
        !          2200: --- 1778,1786 ----
        !          2201:         break;
        !          2202:   
        !          2203:       default:
        !          2204: + #ifdef ibm032
        !          2205: +       if (hcState == 0) hcState = 2;
        !          2206: + #endif
        !          2207:         if (name)
        !          2208:        define_symbol (value, name);
        !          2209:       }
        !          2210: ***************
        !          2211: *** 1553,1558 ****
        !          2212: --- 1841,1849 ----
        !          2213:         Dbx data never actually contains 'l'.  */
        !          2214:       case 'l':
        !          2215:         SYMBOL_CLASS (sym) = LOC_LOCAL;
        !          2216: + #ifdef ibm032
        !          2217: +       if (hcState == 1) value += 1000000;            /* temporary hack until rel 3 pcc matches hc */
        !          2218: + #endif
        !          2219:         SYMBOL_VALUE (sym) = value;
        !          2220:         SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
        !          2221:         add_symbol_to_list (sym, &local_symbols);
        !          2222: ***************
        !          2223: *** 1572,1577 ****
        !          2224: --- 1863,1875 ----
        !          2225:         add_symbol_to_list (sym, &local_symbols);
        !          2226:         break;
        !          2227:   
        !          2228: +     case 'R':
        !          2229: +       SYMBOL_CLASS (sym) = LOC_REGISTER;
        !          2230: +       SYMBOL_VALUE (sym) = value;
        !          2231: +       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
        !          2232: +       add_symbol_to_list (sym, &local_symbols);
        !          2233: +       break;
        !          2234: + 
        !          2235:       case 'S':
        !          2236:         /* Static symbol at top level of file */
        !          2237:         SYMBOL_CLASS (sym) = LOC_STATIC;
        !          2238: ***************
        !          2239: *** 1616,1622 ****
        !          2240:         break;
        !          2241:   
        !          2242:       default:
        !          2243: !       error ("Invalid symbol data: unknown symbol-type code `%c' at symtab pos %d.", deftype, symnum);
        !          2244:       }
        !          2245:     return sym;
        !          2246:   }
        !          2247: --- 1914,1928 ----
        !          2248:         break;
        !          2249:   
        !          2250:       default:
        !          2251: !       printf ("Unknown symbol-type code '%c' in dbx symbol table, assuming local.\n", deftype);
        !          2252: !       SYMBOL_CLASS (sym) = LOC_LOCAL;
        !          2253: ! #ifdef ibm032
        !          2254: !       if (hcState == 1) value += 1000000;            /* temporary hack until rel 3 pcc matches hc */
        !          2255: ! #endif
        !          2256: !       SYMBOL_VALUE (sym) = value;
        !          2257: !       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
        !          2258: !       add_symbol_to_list (sym, &local_symbols);      
        !          2259: !       break;
        !          2260:       }
        !          2261:     return sym;
        !          2262:   }
        !          2263: ***************
        !          2264: *** 1741,1746 ****
        !          2265: --- 2047,2056 ----
        !          2266:        (*pp) += 5;
        !          2267:         else if (!strncmp (*pp, "r(0,1);0;", 9))
        !          2268:        (*pp) += 9;
        !          2269: + #if 1
        !          2270: +       else if ((**pp == 'r') && (!strncmp(*pp + 2, ";0;", 3)))
        !          2271: +         (*pp) += 5;
        !          2272: + #endif
        !          2273:         else break;
        !          2274:   
        !          2275:         TYPE_CODE (type) = TYPE_CODE_ARRAY;
        !          2276: ***************
        !          2277: *** 1980,1986 ****
        !          2278:        rather than -128 which is what I would like.
        !          2279:        So use n1 != 0 to prevent char from being taken as unsigned.  */
        !          2280:   
        !          2281: !   else if (n2 == 0 && n1 == 1)
        !          2282:       {
        !          2283:         /* an unsigned type */
        !          2284:         if (n3 == (1 << (8 * sizeof (int))))
        !          2285: --- 2290,2296 ----
        !          2286:        rather than -128 which is what I would like.
        !          2287:        So use n1 != 0 to prevent char from being taken as unsigned.  */
        !          2288:   
        !          2289: !   if (n2 == 0)
        !          2290:       {
        !          2291:         /* an unsigned type */
        !          2292:         if (n3 == (1 << (8 * sizeof (int))))
        !          2293: ***************
        !          2294: *** 1989,1994 ****
        !          2295: --- 2299,2306 ----
        !          2296:        return builtin_type_unsigned_short;
        !          2297:         if (n3 == (1 << (8 * sizeof (char))))
        !          2298:        return builtin_type_unsigned_char;
        !          2299: +       if (n3 == (1 << (8 * sizeof (char) - 1)))
        !          2300: +      return builtin_type_char;
        !          2301:       }
        !          2302:     else
        !          2303:       {
        !          2304: ***************
        !          2305: *** 2002,2007 ****
        !          2306: --- 2314,2321 ----
        !          2307:         if (n3 == (1 << (8 * sizeof (char) - 1)))
        !          2308:        return builtin_type_char;
        !          2309:       }
        !          2310: +    if (n2 == 0 && n3 == 1)
        !          2311: +     return builtin_type_void;
        !          2312:     error ("Invalid symbol data: range type spec %s at symtab pos %d.",
        !          2313:         errp - 1, symnum);
        !          2314:   }
        !          2315: ***************
        !          2316: *** 2033,2040 ****
        !          2317: --- 2347,2364 ----
        !          2318:   
        !          2319:     /* Read the digits, as far as they go.  */
        !          2320:   
        !          2321: + #if 0 /* Yet another "Compiler sucks" fix. */
        !          2322:     while ((c = *p++) >= '0' && c <= '9')
        !          2323: + #else
        !          2324: +   while (((c = *p++) >= '0' && c <= '9') || ((end != '\n') && (c == '\n')))
        !          2325: + #endif
        !          2326:       {
        !          2327: + #if 1
        !          2328: +       if (c == '\n') {
        !          2329: +         printf("Ignoring bogus newline in stabs entry. Your compiler should be fixed.\n");
        !          2330: +         continue;
        !          2331: +       }
        !          2332: + #endif
        !          2333:         n *= 10;
        !          2334:         n += c - '0';
        !          2335:       }
        !          2336: ***************
        !          2337: *** 2050,2060 ****
        !          2338: --- 2374,2392 ----
        !          2339:     return n * sign;
        !          2340:   }
        !          2341:   
        !          2342: + dbxinitialize() {initialize();}
        !          2343: + 
        !          2344:   static
        !          2345:   initialize ()
        !          2346:   {
        !          2347:     symfile = 0;
        !          2348:   
        !          2349: + #ifdef CAMPHOR
        !          2350: +   add_com ("add-file", class_files, add_file_command,
        !          2351: +            "Add a new symbol table (in dbx format) from file FILE.");
        !          2352: +   add_com("set-rel", class_files, set_rel_command,
        !          2353: +            "Set relocation for add-file command to NUMBER.");
        !          2354: + #endif
        !          2355:     add_com ("symbol-file", class_files, symbol_file_command,
        !          2356:           "Load symbol table (in dbx format) from executable file FILE.");
        !          2357:   }
        !          2358: diff -c ../../gnu/gdb/environ.c ./environ.c
        !          2359: *** ../../gnu/gdb/environ.c    Sat Apr  4 22:31:16 1987
        !          2360: --- ./environ.c        Sun Apr 26 23:48:05 1987
        !          2361: ***************
        !          2362: *** 129,135 ****
        !          2363:   
        !          2364:     if (e->allocated < i)
        !          2365:       {
        !          2366: !       e->allocated = max (i, e->allocated + 10);
        !          2367:         e->vector = (char **) xrealloc (e->vector,
        !          2368:                                      (e->allocated + 1) * sizeof (char *));
        !          2369:       }
        !          2370: --- 129,136 ----
        !          2371:   
        !          2372:     if (e->allocated < i)
        !          2373:       {
        !          2374: !       e->allocated = i + 10;
        !          2375:         e->vector = (char **) xrealloc (e->vector,
        !          2376:                                      (e->allocated + 1) * sizeof (char *));
        !          2377:       }
        !          2378: diff -c ../../gnu/gdb/eval.c ./eval.c
        !          2379: *** ../../gnu/gdb/eval.c       Sat Apr  4 22:32:36 1987
        !          2380: --- ./eval.c   Mon Apr 27 00:01:27 1987
        !          2381: ***************
        !          2382: *** 546,551 ****
        !          2383: --- 546,553 ----
        !          2384:       }
        !          2385:   }
        !          2386:   
        !          2387: + evalinitialize() {initialize();}
        !          2388: + 
        !          2389:   static
        !          2390:   initialize ()
        !          2391:   { }
        !          2392: diff -c ../../gnu/gdb/expread.y ./expread.y
        !          2393: *** ../../gnu/gdb/expread.y    Sat Apr  4 22:35:27 1987
        !          2394: --- ./expread.y        Sun Apr 26 23:56:51 1987
        !          2395: ***************
        !          2396: *** 650,655 ****
        !          2397: --- 650,656 ----
        !          2398:            ;
        !          2399:          else
        !          2400:            {
        !          2401: +            /*N.B. error does a longjmp, so we do not have to worry about storage */
        !          2402:              err_copy = (char *) alloca (olen + 1);
        !          2403:              bcopy (lexptr, err_copy, olen);
        !          2404:              err_copy[olen] = 0;
        !          2405: ***************
        !          2406: *** 945,953 ****
        !          2407:   {
        !          2408:     register int len = sizeof (struct expression) +
        !          2409:                                    expr->nelts * sizeof (union exp_element);
        !          2410: !   register struct expression *temp
        !          2411: !     = (struct expression *) alloca (len);
        !          2412:     register int inpos = expr->nelts, outpos = 0;
        !          2413:   
        !          2414:     /* Copy the original expression into temp.  */
        !          2415:     bcopy (expr, temp, len);
        !          2416: --- 946,955 ----
        !          2417:   {
        !          2418:     register int len = sizeof (struct expression) +
        !          2419:                                    expr->nelts * sizeof (union exp_element);
        !          2420: !   register struct expression *temp;
        !          2421:     register int inpos = expr->nelts, outpos = 0;
        !          2422: + 
        !          2423: +   temp = (struct expression *) alloca(len);
        !          2424:   
        !          2425:     /* Copy the original expression into temp.  */
        !          2426:     bcopy (expr, temp, len);
        !          2427: diff -c ../../gnu/gdb/findvar.c ./findvar.c
        !          2428: *** ../../gnu/gdb/findvar.c    Sat Apr  4 22:36:38 1987
        !          2429: --- ./findvar.c        Mon Apr 27 00:01:44 1987
        !          2430: ***************
        !          2431: *** 359,364 ****
        !          2432: --- 359,366 ----
        !          2433:     return value_cast (lookup_pointer_type (SYMBOL_TYPE (var)),
        !          2434:                     value_from_long (builtin_type_long, addr));
        !          2435:   }
        !          2436: + 
        !          2437: + findinitialize() {initialize();}
        !          2438:   
        !          2439:   static
        !          2440:   initialize ()
        !          2441: diff -c ../../gnu/gdb/firstfile.c ./firstfile.c
        !          2442: *** ../../gnu/gdb/firstfile.c  Sat Apr  4 22:37:06 1987
        !          2443: --- ./firstfile.c      Mon Apr 27 00:02:06 1987
        !          2444: ***************
        !          2445: *** 125,130 ****
        !          2446: --- 125,152 ----
        !          2447:   static initialize_dummy_1 ();
        !          2448:   static initialize_dummy_2 ();
        !          2449:   
        !          2450: + initialize_all_files() {
        !          2451: +     blockinitialize();
        !          2452: +     breakinitialize();
        !          2453: +     coreinitialize();
        !          2454: +     dbxinitialize();
        !          2455: +     evalinitialize();
        !          2456: +     findinitialize();
        !          2457: +     infcmdinitialize();
        !          2458: +     inflowinitialize();
        !          2459: +     infruninitialize();
        !          2460: +     symmiscinitialize();
        !          2461: +     symtabinitialize();
        !          2462: +     valarithinitialize();
        !          2463: +     valopsinitialize();
        !          2464: +     valprintinitialize();
        !          2465: +     valuesinitialize();
        !          2466: +     printcmdinitialize();
        !          2467: +     sourceinitialize();
        !          2468: +     stackinitialize();
        !          2469: + }
        !          2470: + 
        !          2471: + #if 0
        !          2472:   initialize_all_files ()
        !          2473:   {
        !          2474:     initialize_next_file ((char *) initialize_dummy_2
        !          2475: ***************
        !          2476: *** 148,153 ****
        !          2477: --- 170,176 ----
        !          2478:   initialize_dummy_2 ()
        !          2479:   {
        !          2480:   }
        !          2481: + #endif
        !          2482:   
        !          2483:   /* This makes the function initialize_next_file.  */
        !          2484:   
        !          2485: diff -c ../../gnu/gdb/frame.h ./frame.h
        !          2486: *** ../../gnu/gdb/frame.h      Sat Apr  4 22:37:22 1987
        !          2487: --- ./frame.h  Mon Apr 27 00:02:14 1987
        !          2488: ***************
        !          2489: *** 20,25 ****
        !          2490: --- 20,35 ----
        !          2491:   
        !          2492:   /* Note that frame.h requires param.h! */
        !          2493:   
        !          2494: + #ifdef ibm032
        !          2495: + struct rt_frame {
        !          2496: +     CORE_ADDR frame;         /* frame address */
        !          2497: +     CORE_ADDR pc;                    /* pc we called from */
        !          2498: +     CORE_ADDR firstRLoc;     /* loc'n of first saved general reg */
        !          2499: +     short nParms;                    /* number of parameters to this frame */
        !          2500: +     short firstReg;                  /* the reg stored at 64(fp) */
        !          2501: + };
        !          2502: + #endif
        !          2503: + 
        !          2504:   #define FRAME CORE_ADDR
        !          2505:   
        !          2506:   struct frame_info
        !          2507: ***************
        !          2508: *** 62,64 ****
        !          2509: --- 72,77 ----
        !          2510:   extern struct block *get_selected_block ();
        !          2511:   extern struct symbol *get_frame_function ();
        !          2512:   extern struct symbol *get_pc_function ();
        !          2513: + #ifdef ibm032
        !          2514: + extern struct rt_frame *get_cached_frame();
        !          2515: + #endif
        !          2516: diff -c ../../gnu/gdb/infcmd.c ./infcmd.c
        !          2517: *** ../../gnu/gdb/infcmd.c     Sat Apr  4 22:47:22 1987
        !          2518: --- ./infcmd.c Mon Apr 27 00:07:53 1987
        !          2519: ***************
        !          2520: *** 39,45 ****
        !          2521:   /* String containing arguments to give to the program,
        !          2522:      with a space added at the front.  Just a space means no args.  */
        !          2523:   
        !          2524: ! static char *inferior_args;
        !          2525:   
        !          2526:   /* Pid of our debugged inferior, or 0 if no inferior now.  */
        !          2527:   
        !          2528: --- 39,45 ----
        !          2529:   /* String containing arguments to give to the program,
        !          2530:      with a space added at the front.  Just a space means no args.  */
        !          2531:   
        !          2532: ! static char *inferior_args = NULL;
        !          2533:   
        !          2534:   /* Pid of our debugged inferior, or 0 if no inferior now.  */
        !          2535:   
        !          2536: ***************
        !          2537: *** 112,119 ****
        !          2538:   set_args_command (args)
        !          2539:        char *args;
        !          2540:   {
        !          2541: !   free (inferior_args);
        !          2542: !   if (!args) args = "";
        !          2543:     inferior_args = concat (" ", args, "");
        !          2544:   }
        !          2545:   
        !          2546: --- 112,121 ----
        !          2547:   set_args_command (args)
        !          2548:        char *args;
        !          2549:   {
        !          2550: !   if (inferior_args != NULL)
        !          2551: !     free (inferior_args);
        !          2552: !   if (!args)
        !          2553: !     args = "";
        !          2554:     inferior_args = concat (" ", args, "");
        !          2555:   }
        !          2556:   
        !          2557: ***************
        !          2558: *** 171,177 ****
        !          2559:         signal (SIGINT, SIG_DFL);  */
        !          2560:   
        !          2561:         ptrace (0);
        !          2562: !       execle ("/bin/sh", "sh", "-c", allargs, 0,
        !          2563:              environ_vector (inferior_environ));
        !          2564:   
        !          2565:         fprintf (stderr, "Cannot exec /bin/sh: %s.\n",
        !          2566: --- 173,180 ----
        !          2567:         signal (SIGINT, SIG_DFL);  */
        !          2568:   
        !          2569:         ptrace (0);
        !          2570: ! 
        !          2571: !       execle ("/bin/csh", "csh", "-f", "-c", allargs, 0,
        !          2572:              environ_vector (inferior_environ));
        !          2573:   
        !          2574:         fprintf (stderr, "Cannot exec /bin/sh: %s.\n",
        !          2575: ***************
        !          2576: *** 473,478 ****
        !          2577: --- 476,482 ----
        !          2578:   
        !          2579:         retbuf[0] = stop_r0;
        !          2580:         retbuf[1] = stop_r1;
        !          2581: + 
        !          2582:         val = value_being_returned (value_type, retbuf);
        !          2583:         printf ("Value returned is $%d = ", record_latest_value (val));
        !          2584:         value_print (val, stdout);
        !          2585: ***************
        !          2586: *** 705,710 ****
        !          2587: --- 709,716 ----
        !          2588:     printf ("Contents are relative to selected stack frame.\n");
        !          2589:   }
        !          2590:   
        !          2591: + infcmdinitialize() {initialize();}
        !          2592: + 
        !          2593:   static
        !          2594:   initialize ()
        !          2595:   {
        !          2596: diff -c ../../gnu/gdb/inflow.c ./inflow.c
        !          2597: *** ../../gnu/gdb/inflow.c     Sat Apr  4 22:56:34 1987
        !          2598: --- ./inflow.c Mon Apr 27 00:12:10 1987
        !          2599: ***************
        !          2600: *** 188,194 ****
        !          2601:     inferior_pid = 0;
        !          2602:     mark_breakpoints_out ();
        !          2603:     if (have_core_file_p ())
        !          2604: !     set_current_frame (read_register (FP_REGNUM));
        !          2605:   }
        !          2606:   
        !          2607:   /* Resume execution of the inferior process.
        !          2608: --- 188,194 ----
        !          2609:     inferior_pid = 0;
        !          2610:     mark_breakpoints_out ();
        !          2611:     if (have_core_file_p ())
        !          2612: !     set_current_frame (read_register (FP_REGNUM), 1);
        !          2613:   }
        !          2614:   
        !          2615:   /* Resume execution of the inferior process.
        !          2616: ***************
        !          2617: *** 266,271 ****
        !          2618: --- 266,274 ----
        !          2619:     char buf[MAX_REGISTER_RAW_SIZE];
        !          2620:     register int i;
        !          2621:   
        !          2622: + #ifdef ibm032
        !          2623: +   offset += UPAGES*NBPG - sizeof(u); /* ibm032: ustruct at end of uarea */
        !          2624: + #endif
        !          2625:     offset = ptrace (3, inferior_pid, offset, 0) - KERNEL_U_ADDR;
        !          2626:     for (regno = 0; regno < NUM_REGS; regno++)
        !          2627:       {
        !          2628: ***************
        !          2629: *** 291,296 ****
        !          2630: --- 294,303 ----
        !          2631:     register unsigned int regaddr;
        !          2632:     char buf[80];
        !          2633:   
        !          2634: + #ifdef ibm032
        !          2635: +   offset += UPAGES*NBPG - sizeof(u); /* ibm032: ustruct at end of uarea */
        !          2636: + #endif
        !          2637: + 
        !          2638:     offset = ptrace (3, inferior_pid, offset, 0) - KERNEL_U_ADDR;
        !          2639:   
        !          2640:     if (regno >= 0)
        !          2641: ***************
        !          2642: *** 340,347 ****
        !          2643:     register int count
        !          2644:       = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
        !          2645:     /* Allocate buffer of that many longwords.  */
        !          2646: !   register int *buffer = (int *) alloca (count * sizeof (int));
        !          2647:   
        !          2648:     /* Read all the longwords */
        !          2649:     for (i = 0; i < count; i++, addr += sizeof (int))
        !          2650:       buffer[i] = ptrace (1, inferior_pid, addr, 0);
        !          2651: --- 347,355 ----
        !          2652:     register int count
        !          2653:       = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
        !          2654:     /* Allocate buffer of that many longwords.  */
        !          2655: !   register int *buffer;
        !          2656:   
        !          2657: +   buffer = (int *) alloca(count * sizeof(int));
        !          2658:     /* Read all the longwords */
        !          2659:     for (i = 0; i < count; i++, addr += sizeof (int))
        !          2660:       buffer[i] = ptrace (1, inferior_pid, addr, 0);
        !          2661: ***************
        !          2662: *** 367,377 ****
        !          2663:     register int count
        !          2664:       = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
        !          2665:     /* Allocate buffer of that many longwords.  */
        !          2666: !   register int *buffer = (int *) alloca (count * sizeof (int));
        !          2667:     extern int errno;
        !          2668:   
        !          2669:     /* Fill start and end extra bytes of buffer with existing memory data.  */
        !          2670:   
        !          2671:     buffer[0] = ptrace (1, inferior_pid, addr, 0);
        !          2672:     if (count > 1)
        !          2673:       buffer[count - 1]
        !          2674: --- 375,386 ----
        !          2675:     register int count
        !          2676:       = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
        !          2677:     /* Allocate buffer of that many longwords.  */
        !          2678: !   register int *buffer;
        !          2679:     extern int errno;
        !          2680:   
        !          2681:     /* Fill start and end extra bytes of buffer with existing memory data.  */
        !          2682:   
        !          2683: +   buffer = (int *) alloca (count * sizeof (int));
        !          2684:     buffer[0] = ptrace (1, inferior_pid, addr, 0);
        !          2685:     if (count > 1)
        !          2686:       buffer[count - 1]
        !          2687: ***************
        !          2688: *** 388,397 ****
        !          2689:       {
        !          2690:         errno = 0;
        !          2691:         ptrace (4, inferior_pid, addr, buffer[i]);
        !          2692: !       if (errno)
        !          2693:        return 1;
        !          2694:       }
        !          2695: - 
        !          2696:     return 0;
        !          2697:   }
        !          2698:   
        !          2699: --- 397,406 ----
        !          2700:       {
        !          2701:         errno = 0;
        !          2702:         ptrace (4, inferior_pid, addr, buffer[i]);
        !          2703: !       if (errno) {
        !          2704:        return 1;
        !          2705: +      }
        !          2706:       }
        !          2707:     return 0;
        !          2708:   }
        !          2709:   
        !          2710: ***************
        !          2711: *** 421,426 ****
        !          2712: --- 430,437 ----
        !          2713:       }
        !          2714:   }
        !          2715:   
        !          2716: + inflowinitialize() {initialize();}
        !          2717: + 
        !          2718:   static
        !          2719:   initialize ()
        !          2720:   {
        !          2721: diff -c ../../gnu/gdb/infrun.c ./infrun.c
        !          2722: *** ../../gnu/gdb/infrun.c     Sat Apr  4 22:57:15 1987
        !          2723: --- ./infrun.c Mon Apr 27 00:17:40 1987
        !          2724: ***************
        !          2725: *** 257,263 ****
        !          2726:         pc_changed = 0;
        !          2727:         fetch_inferior_registers ();
        !          2728:         stop_pc = read_pc ();
        !          2729: !       set_current_frame (read_register (FP_REGNUM));
        !          2730:         stop_frame = get_current_frame ();
        !          2731:         stop_sp = read_register (SP_REGNUM);
        !          2732:         another_trap = 0;
        !          2733: --- 257,271 ----
        !          2734:         pc_changed = 0;
        !          2735:         fetch_inferior_registers ();
        !          2736:         stop_pc = read_pc ();
        !          2737: ! #ifdef CAMPHOR
        !          2738: !       /* if we're not going to stop, don't bother with a stack trace */
        !          2739: !       if (WIFSTOPPED(w) && !signal_stop[WSTOPSIG(w)])
        !          2740: !        set_current_frame(read_register(FP_REGNUM), 0);
        !          2741: !       else
        !          2742: !        set_current_frame(read_register(FP_REGNUM), 1);
        !          2743: ! #else
        !          2744: !       set_current_frame (read_register (FP_REGNUM), 1);
        !          2745: ! #endif
        !          2746:         stop_frame = get_current_frame ();
        !          2747:         stop_sp = read_register (SP_REGNUM);
        !          2748:         another_trap = 0;
        !          2749: ***************
        !          2750: *** 688,700 ****
        !          2751:   
        !          2752:     /* Save the function value return registers
        !          2753:        We might be about to restore their previous contents.  */
        !          2754: !   stop_r0 = read_register (0);
        !          2755: !   stop_r1 = read_register (1);
        !          2756:   
        !          2757:     if (stop_stack_dummy)
        !          2758:       {
        !          2759:         /* Pop the empty frame that contains the stack dummy.  */
        !          2760:         POP_FRAME;
        !          2761:         select_frame (read_register (FP_REGNUM), 0);
        !          2762:       }
        !          2763:   }
        !          2764: --- 696,717 ----
        !          2765:   
        !          2766:     /* Save the function value return registers
        !          2767:        We might be about to restore their previous contents.  */
        !          2768: ! #ifdef ibm032
        !          2769: !     stop_r0 = read_register (2);
        !          2770: !     stop_r1 = read_register (3);
        !          2771: ! #else
        !          2772: !     stop_r0 = read_register (0);
        !          2773: !     stop_r1 = read_register (1);
        !          2774: ! #endif
        !          2775:   
        !          2776:     if (stop_stack_dummy)
        !          2777:       {
        !          2778:         /* Pop the empty frame that contains the stack dummy.  */
        !          2779: + #ifdef ibm032
        !          2780: +       POP_DUMMY_FRAME;
        !          2781: + #else
        !          2782:         POP_FRAME;
        !          2783: + #endif
        !          2784:         select_frame (read_register (FP_REGNUM), 0);
        !          2785:       }
        !          2786:   }
        !          2787: ***************
        !          2788: *** 841,846 ****
        !          2789: --- 858,865 ----
        !          2790:     printf ("\nUse the \"handle\" command to change these tables.\n");
        !          2791:   }
        !          2792:   
        !          2793: + infruninitialize() {initialize();}
        !          2794: + 
        !          2795:   static
        !          2796:   initialize ()
        !          2797:   {
        !          2798: diff -c ../../gnu/gdb/initialize.h ./initialize.h
        !          2799: *** ../../gnu/gdb/initialize.h Sat Apr  4 22:58:27 1987
        !          2800: --- ./initialize.h     Sun May 24 00:19:21 1987
        !          2801: ***************
        !          2802: *** 103,109 ****
        !          2803: --- 103,120 ----
        !          2804:      of the end of one object file's text to the start of the next
        !          2805:      object file's text.  */
        !          2806:   
        !          2807: + /* Changed to use ifdefs on the machine type.  David Nichols, 11/28/86 */
        !          2808: + #ifdef ibm032
        !          2809: + #include "m-ibm032init.h"
        !          2810: + #endif
        !          2811: + 
        !          2812: + #ifdef vax
        !          2813:   #include "m-vaxinit.h"
        !          2814: + #endif
        !          2815: + 
        !          2816: + #ifdef sun
        !          2817: + #include "m-suninit.h"
        !          2818: + #endif
        !          2819:   
        !          2820:   /* This is used to make a file's initialization function.
        !          2821:      It calls another function named `initialize', which must
        !          2822: diff -c ../../gnu/gdb/main.c ./main.c
        !          2823: *** ../../gnu/gdb/main.c       Sat Apr  4 23:11:59 1987
        !          2824: --- ./main.c   Mon Apr 27 00:27:21 1987
        !          2825: ***************
        !          2826: *** 236,241 ****
        !          2827: --- 236,243 ----
        !          2828:     if (*p)
        !          2829:       {
        !          2830:         c = lookup_cmd (&p, cmdlist, "", 0);
        !          2831: +       if (c->function == 0)
        !          2832: +      error ("That is not a command, just a help topic.");
        !          2833:         if (c->class == (int) class_user)
        !          2834:        {
        !          2835:          if (*p)
        !          2836: ***************
        !          2837: *** 457,463 ****
        !          2838:   
        !          2839:   /* Add an element to the list of commands.  */
        !          2840:   
        !          2841: ! void
        !          2842:   add_com (name, class, fun, doc)
        !          2843:        char *name;
        !          2844:        int class;
        !          2845: --- 459,465 ----
        !          2846:   
        !          2847:   /* Add an element to the list of commands.  */
        !          2848:   
        !          2849: ! struct cmd_list_element *
        !          2850:   add_com (name, class, fun, doc)
        !          2851:        char *name;
        !          2852:        int class;
        !          2853: ***************
        !          2854: *** 464,470 ****
        !          2855:        void (*fun) ();
        !          2856:        char *doc;
        !          2857:   {
        !          2858: !   add_cmd (name, class, fun, doc, &cmdlist);
        !          2859:   }
        !          2860:   
        !          2861:   /* Add an alias or abbreviation command to the list of commands.  */
        !          2862: --- 466,473 ----
        !          2863:        void (*fun) ();
        !          2864:        char *doc;
        !          2865:   {
        !          2866: ! 
        !          2867: !   return add_cmd (name, class, fun, doc, &cmdlist);
        !          2868:   }
        !          2869:   
        !          2870:   /* Add an alias or abbreviation command to the list of commands.  */
        !          2871: ***************
        !          2872: *** 547,552 ****
        !          2873: --- 550,556 ----
        !          2874:   
        !          2875:     if (c && c->class == (int) class_user)
        !          2876:       free_command_lines (&c->function);
        !          2877: + 
        !          2878:   
        !          2879:     add_com (comname, class_user, cmds,
        !          2880:           (c && c->class == (int) class_user)
        !          2881: diff -c ../../gnu/gdb/param.h ./param.h
        !          2882: *** ../../gnu/gdb/param.h      Sat Apr  4 23:15:44 1987
        !          2883: --- ./param.h  Mon Apr 27 00:28:17 1987
        !          2884: ***************
        !          2885: *** 1 ****
        !          2886: --- 1,19 ----
        !          2887: + /* Changed to use ifdefs so we don't have to edit it all the time.
        !          2888: + David Nichols
        !          2889: + 28 November 1986 */
        !          2890: + 
        !          2891: + #ifdef vax
        !          2892:   #include "m-vax.h"
        !          2893: + #endif
        !          2894: + 
        !          2895: + #ifdef ibm032
        !          2896: + #include "m-ibm032.h"
        !          2897: + #endif
        !          2898: + 
        !          2899: + #ifdef sun
        !          2900: + #ifdef mc68020
        !          2901: + #include "m-sun3.h"
        !          2902: + #else
        !          2903: + #include "m-sun2.h"
        !          2904: + #endif
        !          2905: + #endif
        !          2906: diff -c ../../gnu/gdb/pinsn.c ./pinsn.c
        !          2907: *** ../../gnu/gdb/pinsn.c      Sat Apr  4 23:15:58 1987
        !          2908: --- ./pinsn.c  Mon Apr 27 00:28:36 1987
        !          2909: ***************
        !          2910: *** 1 ****
        !          2911: --- 1,15 ----
        !          2912: + /* Changed to use ifdefs so we don't have to edit this.
        !          2913: + David Nichols
        !          2914: + 28 Nov 1986 */
        !          2915: + 
        !          2916: + #ifdef ibm032
        !          2917: + #include "ibm032-pinsn.c"
        !          2918: + #endif
        !          2919: + 
        !          2920: + #ifdef vax
        !          2921:   #include "vax-pinsn.c"
        !          2922: + #endif
        !          2923: + 
        !          2924: + #ifdef sun
        !          2925: + #include "m68k-pinsn.c"
        !          2926: + #endif
        !          2927: diff -c ../../gnu/gdb/printcmd.c ./printcmd.c
        !          2928: *** ../../gnu/gdb/printcmd.c   Sat Apr  4 23:17:03 1987
        !          2929: --- ./printcmd.c       Mon Apr 27 00:30:52 1987
        !          2930: ***************
        !          2931: *** 797,804 ****
        !          2932:        CORE_ADDR frame;
        !          2933:        FILE *stream;
        !          2934:   {
        !          2935: !   char *space = (char *) alloca (TYPE_LENGTH (SYMBOL_TYPE (var)));
        !          2936:     value val = read_var_value (var, frame);
        !          2937:     value_print (val, stream);
        !          2938:   }
        !          2939:   
        !          2940: --- 797,805 ----
        !          2941:        CORE_ADDR frame;
        !          2942:        FILE *stream;
        !          2943:   {
        !          2944: !   char *space;
        !          2945:     value val = read_var_value (var, frame);
        !          2946: +   space = (char *) alloca (TYPE_LENGTH (SYMBOL_TYPE (var)));
        !          2947:     value_print (val, stream);
        !          2948:   }
        !          2949:   
        !          2950: ***************
        !          2951: *** 883,888 ****
        !          2952: --- 884,891 ----
        !          2953:       }
        !          2954:   }
        !          2955:   
        !          2956: + printcmdinitialize() {initialize();}
        !          2957: + 
        !          2958:   static
        !          2959:   initialize ()
        !          2960:   {
        !          2961: diff -c ../../gnu/gdb/source.c ./source.c
        !          2962: *** ../../gnu/gdb/source.c     Sat Apr  4 23:17:55 1987
        !          2963: --- ./source.c Mon Apr 27 00:31:25 1987
        !          2964: ***************
        !          2965: *** 276,282 ****
        !          2966:     if (get_exec_file () != 0 && exec_mtime < st.st_mtime)
        !          2967:       printf ("Source file is more recent than executable.\n");
        !          2968:   
        !          2969: !   data = (char *) alloca (st.st_size);
        !          2970:     myread (desc, data, st.st_size, s->filename);
        !          2971:     end = data + st.st_size;
        !          2972:     p = data;
        !          2973: --- 276,283 ----
        !          2974:     if (get_exec_file () != 0 && exec_mtime < st.st_mtime)
        !          2975:       printf ("Source file is more recent than executable.\n");
        !          2976:   
        !          2977: !   data = (char *) alloca(st.st_size);
        !          2978: ! 
        !          2979:     myread (desc, data, st.st_size, s->filename);
        !          2980:     end = data + st.st_size;
        !          2981:     p = data;
        !          2982: ***************
        !          2983: *** 530,535 ****
        !          2984: --- 531,538 ----
        !          2985:       printf ("Line number %d is out of range for \"%s\".\n",
        !          2986:            sal.line, sal.symtab->filename);
        !          2987:   }
        !          2988: + 
        !          2989: + sourceinitialize() {initialize();}
        !          2990:   
        !          2991:   static
        !          2992:   initialize ()
        !          2993: diff -c ../../gnu/gdb/stack.c ./stack.c
        !          2994: *** ../../gnu/gdb/stack.c      Sun Apr  5 00:28:05 1987
        !          2995: --- ./stack.c  Mon Apr 27 00:31:50 1987
        !          2996: ***************
        !          2997: *** 511,516 ****
        !          2998: --- 511,517 ----
        !          2999:   
        !          3000:     print_stack_frame (selected_frame, selected_frame_level, 1);
        !          3001:   }
        !          3002: + 
        !          3003:   
        !          3004:   static void
        !          3005:   return_command (retval_exp)
        !          3006: ***************
        !          3007: *** 538,543 ****
        !          3008: --- 539,546 ----
        !          3009:     frame_command ("0", 1);
        !          3010:   }
        !          3011:   
        !          3012: + stackinitialize() {initialize();}
        !          3013: + 
        !          3014:   static
        !          3015:   initialize ()
        !          3016:   {
        !          3017: diff -c ../../gnu/gdb/symmisc.c ./symmisc.c
        !          3018: *** ../../gnu/gdb/symmisc.c    Sun Apr  5 00:33:16 1987
        !          3019: --- ./symmisc.c        Mon Apr 27 00:37:46 1987
        !          3020: ***************
        !          3021: *** 504,509 ****
        !          3022: --- 504,511 ----
        !          3023:     return i;
        !          3024:   }
        !          3025:   
        !          3026: + symmiscinitialize() {initialize();}
        !          3027: + 
        !          3028:   static
        !          3029:   initialize ()
        !          3030:   {
        !          3031: diff -c ../../gnu/gdb/symtab.c ./symtab.c
        !          3032: *** ../../gnu/gdb/symtab.c     Sun Apr  5 00:35:45 1987
        !          3033: --- ./symtab.c Mon Apr 27 00:38:19 1987
        !          3034: ***************
        !          3035: *** 71,78 ****
        !          3036:     strcpy (copy, name);
        !          3037:     strcat (copy, ".c");
        !          3038:     for (s = symtab_list; s; s = s->next)
        !          3039: !     if (!strcmp (copy, s->filename))
        !          3040:         return s;
        !          3041:   
        !          3042:     return 0;
        !          3043:   }
        !          3044: --- 71,79 ----
        !          3045:     strcpy (copy, name);
        !          3046:     strcat (copy, ".c");
        !          3047:     for (s = symtab_list; s; s = s->next)
        !          3048: !     if (!strcmp (copy, s->filename)) {
        !          3049:         return s;
        !          3050: +     }
        !          3051:   
        !          3052:     return 0;
        !          3053:   }
        !          3054: ***************
        !          3055: *** 703,709 ****
        !          3056:     register struct symbol *sym;
        !          3057:     register CORE_ADDR pc;
        !          3058:     register int i;
        !          3059: !   char *copy;
        !          3060:   
        !          3061:     /* Defaults have defaults.  */
        !          3062:   
        !          3063: --- 704,710 ----
        !          3064:     register struct symbol *sym;
        !          3065:     register CORE_ADDR pc;
        !          3066:     register int i;
        !          3067: !   char *copy, *dotcopy;
        !          3068:   
        !          3069:     /* Defaults have defaults.  */
        !          3070:   
        !          3071: ***************
        !          3072: *** 818,825 ****
        !          3073: --- 819,847 ----
        !          3074:     /* Look up that token as a function.
        !          3075:        If file specified, use that file's per-file block to start with.  */
        !          3076:   
        !          3077: + #ifdef ibm032
        !          3078: +   /* RT has stupid dots in front of function names (_.foo), and worse, has bogus _foo
        !          3079: +       symbol to confuse us, too.
        !          3080: +   */
        !          3081: +   if (*copy != '.') {
        !          3082: +       dotcopy = (char *) alloca (strlen(copy)+2);    /* one for the null and one for the dot */
        !          3083: +       dotcopy[0] = '.';
        !          3084: +       strcpy(dotcopy+1, copy);
        !          3085: +       sym = lookup_symbol (dotcopy, s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), 1) : 0,
        !          3086: +                         VAR_NAMESPACE);
        !          3087: +       }
        !          3088: +   else {
        !          3089: +       sym = 0;
        !          3090: +       dotcopy = 0;
        !          3091: +   }
        !          3092: +   if (!sym || SYMBOL_CLASS(sym) != LOC_BLOCK) {
        !          3093: +       sym = lookup_symbol (copy, s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), 1) : 0,
        !          3094: +         VAR_NAMESPACE);
        !          3095: +   }
        !          3096: + #else
        !          3097:     sym = lookup_symbol (copy, s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), 1) : 0,
        !          3098:                       VAR_NAMESPACE);
        !          3099: + #endif
        !          3100:   
        !          3101:     if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
        !          3102:       {
        !          3103: ***************
        !          3104: *** 835,840 ****
        !          3105: --- 857,875 ----
        !          3106:     if (sym)
        !          3107:       error ("%s is not a function.", copy);
        !          3108:   
        !          3109: + #ifdef ibm032
        !          3110: +   /* try the dot version first */
        !          3111: +   if (dotcopy) for (i = 0; i < misc_function_count; i++)
        !          3112: +     if (!strcmp (misc_function_vector[i].name, dotcopy))
        !          3113: +       {
        !          3114: +      value.symtab = 0;
        !          3115: +      value.line = 0;
        !          3116: +      value.pc = misc_function_vector[i].address + FUNCTION_START_OFFSET;
        !          3117: +      if (funfirstline)
        !          3118: +        SKIP_PROLOGUE (value.pc);
        !          3119: +      return value;
        !          3120: +       }
        !          3121: + #endif
        !          3122:     for (i = 0; i < misc_function_count; i++)
        !          3123:       if (!strcmp (misc_function_vector[i].name, copy))
        !          3124:         {
        !          3125: ***************
        !          3126: *** 1027,1032 ****
        !          3127: --- 1062,1069 ----
        !          3128:   
        !          3129:     return type;
        !          3130:   }
        !          3131: + 
        !          3132: + symtabinitialize() {initialize();}
        !          3133:   
        !          3134:   static
        !          3135:   initialize ()
        !          3136: diff -c ../../gnu/gdb/utils.c ./utils.c
        !          3137: *** ../../gnu/gdb/utils.c      Sun Apr  5 00:40:01 1987
        !          3138: --- ./utils.c  Mon Apr 27 00:40:01 1987
        !          3139: ***************
        !          3140: *** 151,156 ****
        !          3141: --- 151,157 ----
        !          3142:     else
        !          3143:       err = "unknown error";
        !          3144:   
        !          3145: +   /* ibm032: no core leak or other problems 'cause we alway call error -> longjmps away */
        !          3146:     combined = (char *) alloca (strlen (err) + strlen (string) + 3);
        !          3147:     strcpy (combined, string);
        !          3148:     strcat (combined, ": ");
        !          3149: diff -c ../../gnu/gdb/valarith.c ./valarith.c
        !          3150: *** ../../gnu/gdb/valarith.c   Sun Apr  5 00:40:44 1987
        !          3151: --- ./valarith.c       Fri May 22 20:18:46 1987
        !          3152: ***************
        !          3153: *** 239,245 ****
        !          3154:     COERCE_ARRAY (arg1);
        !          3155:   
        !          3156:     len = TYPE_LENGTH (VALUE_TYPE (arg1));
        !          3157: !   p = VALUE_CONTENTS (arg1);
        !          3158:   
        !          3159:     while (--len >= 0)
        !          3160:       {
        !          3161: --- 239,245 ----
        !          3162:     COERCE_ARRAY (arg1);
        !          3163:   
        !          3164:     len = TYPE_LENGTH (VALUE_TYPE (arg1));
        !          3165: !   p = (char *) VALUE_CONTENTS (arg1);
        !          3166:   
        !          3167:     while (--len >= 0)
        !          3168:       {
        !          3169: ***************
        !          3170: *** 281,288 ****
        !          3171:           && ((len = TYPE_LENGTH (VALUE_TYPE (arg1)))
        !          3172:               == TYPE_LENGTH (VALUE_TYPE (arg2))))
        !          3173:       {
        !          3174: !       p1 = VALUE_CONTENTS (arg1);
        !          3175: !       p2 = VALUE_CONTENTS (arg2);
        !          3176:         while (--len >= 0)
        !          3177:        {
        !          3178:          if (*p1++ != *p2++)
        !          3179: --- 281,288 ----
        !          3180:           && ((len = TYPE_LENGTH (VALUE_TYPE (arg1)))
        !          3181:               == TYPE_LENGTH (VALUE_TYPE (arg2))))
        !          3182:       {
        !          3183: !       p1 = (char *) VALUE_CONTENTS (arg1);
        !          3184: !       p2 = (char *) VALUE_CONTENTS (arg2);
        !          3185:         while (--len >= 0)
        !          3186:        {
        !          3187:          if (*p1++ != *p2++)
        !          3188: ***************
        !          3189: *** 348,353 ****
        !          3190: --- 348,355 ----
        !          3191:     return value_from_long (VALUE_TYPE (arg1), ~ value_as_long (arg1));
        !          3192:   }
        !          3193:   
        !          3194: + valarithinitialize() {initialize();}
        !          3195: + 
        !          3196:   static
        !          3197:   initialize ()
        !          3198:   {
        !          3199: diff -c ../../gnu/gdb/valops.c ./valops.c
        !          3200: *** ../../gnu/gdb/valops.c     Sun Apr  5 00:41:32 1987
        !          3201: --- ./valops.c Fri May 22 20:13:02 1987
        !          3202: ***************
        !          3203: *** 174,180 ****
        !          3204:     /* Return a value just like TOVAL except with the contents of FROMVAL.  */
        !          3205:   
        !          3206:     val = allocate_value (type);
        !          3207: !   bcopy (toval, val, VALUE_CONTENTS (val) - (char *) val);
        !          3208:     bcopy (VALUE_CONTENTS (fromval), VALUE_CONTENTS (val), TYPE_LENGTH (type));
        !          3209:   
        !          3210:     return val;
        !          3211: --- 174,180 ----
        !          3212:     /* Return a value just like TOVAL except with the contents of FROMVAL.  */
        !          3213:   
        !          3214:     val = allocate_value (type);
        !          3215: !   bcopy (toval, val, (char *) VALUE_CONTENTS (val) - (char *) val);
        !          3216:     bcopy (VALUE_CONTENTS (fromval), VALUE_CONTENTS (val), TYPE_LENGTH (type));
        !          3217:   
        !          3218:     return val;
        !          3219: ***************
        !          3220: *** 413,419 ****
        !          3221: --- 413,427 ----
        !          3222:         }
        !          3223:       else if (code == TYPE_CODE_PTR)
        !          3224:         {
        !          3225: + #ifdef ibm032
        !          3226: +      /* apparently '_a' pseudoprocedure has lval_memory as its lval type */
        !          3227: +      if (VALUE_LVAL(function) == lval_memory) 
        !          3228: +        funaddr = VALUE_ADDRESS(function);
        !          3229: +      else
        !          3230: +           funaddr = value_as_long (function);
        !          3231: + #else
        !          3232:        funaddr = value_as_long (function);
        !          3233: + #endif
        !          3234:        if (TYPE_CODE (TYPE_TARGET_TYPE (ftype))
        !          3235:            == TYPE_CODE_FUNC)
        !          3236:          value_type = TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (ftype));
        !          3237: ***************
        !          3238: *** 429,439 ****
        !          3239:        else
        !          3240:          /* Handle integer used as address of a function.  */
        !          3241:          funaddr = value_as_long (function);
        !          3242: - 
        !          3243:        value_type = builtin_type_int;
        !          3244:         }
        !          3245: !     else
        !          3246:         error ("Invalid data type for function to be called.");
        !          3247:   
        !          3248:       /* Create a call sequence customized for this function
        !          3249:          and the number of arguments for it.  */
        !          3250: --- 437,447 ----
        !          3251:        else
        !          3252:          /* Handle integer used as address of a function.  */
        !          3253:          funaddr = value_as_long (function);
        !          3254:        value_type = builtin_type_int;
        !          3255:         }
        !          3256: !     else {
        !          3257:         error ("Invalid data type for function to be called.");
        !          3258: +     }
        !          3259:   
        !          3260:       /* Create a call sequence customized for this function
        !          3261:          and the number of arguments for it.  */
        !          3262: ***************
        !          3263: *** 590,595 ****
        !          3264: --- 598,605 ----
        !          3265:     return value_field (arg1, i);
        !          3266:   }
        !          3267:   
        !          3268: + valopsinitialize() {initialize();}
        !          3269: + 
        !          3270:   static
        !          3271:   initialize ()
        !          3272:   { }
        !          3273: diff -c ../../gnu/gdb/valprint.c ./valprint.c
        !          3274: *** ../../gnu/gdb/valprint.c   Sun Apr  5 00:42:28 1987
        !          3275: --- ./valprint.c       Mon Apr 27 00:40:56 1987
        !          3276: ***************
        !          3277: *** 529,534 ****
        !          3278: --- 529,536 ----
        !          3279:     print_max = atoi (arg);
        !          3280:   }
        !          3281:   
        !          3282: + valprintinitialize() {initialize();}
        !          3283: + 
        !          3284:   static
        !          3285:   initialize ()
        !          3286:   {
        !          3287: diff -c ../../gnu/gdb/value.h ./value.h
        !          3288: *** ../../gnu/gdb/value.h      Sun Apr  5 00:43:44 1987
        !          3289: --- ./value.h  Fri May 22 20:03:32 1987
        !          3290: ***************
        !          3291: *** 37,43 ****
        !          3292:       short repeated;
        !          3293:       short repetitions;
        !          3294:       short regno;
        !          3295: !     char contents[1];
        !          3296:     };
        !          3297:   
        !          3298:   typedef struct value *value;
        !          3299: --- 37,43 ----
        !          3300:       short repeated;
        !          3301:       short repetitions;
        !          3302:       short regno;
        !          3303: !     long contents[1]; /* Forces alignment... */
        !          3304:     };
        !          3305:   
        !          3306:   typedef struct value *value;
        !          3307: diff -c ../../gnu/gdb/values.c ./values.c
        !          3308: *** ../../gnu/gdb/values.c     Sun Apr  5 00:45:14 1987
        !          3309: --- ./values.c Fri May 22 20:12:40 1987
        !          3310: ***************
        !          3311: *** 338,344 ****
        !          3312:        int offset, bitpos, bitsize;
        !          3313:        value newval;
        !          3314:   {
        !          3315: !   register char *addr = VALUE_CONTENTS (var->value) + offset;
        !          3316:     if (bitsize)
        !          3317:       modify_field (addr, value_as_long (newval),
        !          3318:                  bitpos, bitsize);
        !          3319: --- 338,344 ----
        !          3320:        int offset, bitpos, bitsize;
        !          3321:        value newval;
        !          3322:   {
        !          3323: !   register char *addr = (char *) VALUE_CONTENTS (var->value) + offset;
        !          3324:     if (bitsize)
        !          3325:       modify_field (addr, value_as_long (newval),
        !          3326:                  bitpos, bitsize);
        !          3327: ***************
        !          3328: *** 733,738 ****
        !          3329: --- 733,740 ----
        !          3330:     write_register (1, retbuf[1]);
        !          3331:   }
        !          3332:   
        !          3333: + valuesinitialize() {initialize();}
        !          3334: + 
        !          3335:   static
        !          3336:   initialize ()
        !          3337:   {
        !          3338: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.