Annotation of gdb/=rt-changes, revision 1.1.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.