summaryrefslogtreecommitdiff
path: root/gdb/=rt-changes
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/=rt-changes')
-rw-r--r--gdb/=rt-changes3338
1 files changed, 0 insertions, 3338 deletions
diff --git a/gdb/=rt-changes b/gdb/=rt-changes
deleted file mode 100644
index 1eda81c8df4..00000000000
--- a/gdb/=rt-changes
+++ /dev/null
@@ -1,3338 +0,0 @@
-From: zs01#@andrew.cmu.edu (Zalman Stern)
-Date: Sun, 24 May 87 03:20:57 edt
-To: rms@prep.ai.mit.edu
-Subject: RT diffs for gdb version 2.1
-
-Here are the new files, followed by the diffs to old files. The first file below
-is ITCMODS which is my attempt to document some of our changes. Unfortunately,
-it has not been maintained particularly well and notably does not include info
-about our changes to support the HIGH-C compiler. One big change we put in was
-to use a number of initialize routines instead of the "linked list of object
-modules" that is used on other machines. The RT object file format appears to
-have a variable size header before the code, making it very difficult
-(impossible?) to get the initialization stuff to work. If you have any
-questions, don't hesitate to send me mail.
-
--Z-
-
-Only in .: ITCMODS
-
-blockframe.c:
- set_current_frame now takes an extra argument.
- RT specific code for interpreting and caching of trace table entries.
- Added initialize routine.
-
-breakpoint.c:
- Added new_breakpoint_commands flag to prevent incorrect interpretation of command lists containing a continue statement.
- Modified do_breakpoint_commands to know about new_breakpoint_commands.
- Modified clear_breakpoint_commands to set new_breakpoint_commands.
- Added initialize routine.
-
-core.c:
- RT specific code to find the uarea.
- RT specific code to indicate the start of the data segment.
- set_current_frame now takes an extra argument.
- Added initialize routine.
-
-dbxread.c:
- Added support for the Camphor dynamic loading system. (All under #ifdef CAMPHOR).
- 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).
- set_rel_command to set relocation offset for camphor loaded files. (Under #ifdef CAMPHOR).
- add_file_command to append a file's symbols to the current symbol table instead of replacing it. (Under #ifdef CAMPHOR).
- RT specific code to deal with function names being _.foo instead of _foo.
- Added initialize routine.
-
- Feb 8, 1987 Zalman Stern.
- Added test in symbol_file_command to see if file was compiled with debugging. If not print an error message instead of dumping core.
- Added same test in add_file_command and made it run through BZPATH, CLASSPATH, and PATH in that order (Under #ifdef CAMPHOR).
-
-environ.c:
- Fixed error in calculating new size of a reallocated environment.
-
-eval.c:
- Added initialize routine.
-
-expread.y:
- Moved alloca call out of variable initializations.
-
-findvar.c:
- Added initialize routine.
-
-firstfile.c:
- Added main initialization driver routine.
-
-frame.h:
- Added RT specific declarations to hold frame information, and to deal with trace table caching.
-
-ibm032-pinsn.c:
- New file, contains RT disassembler.
-
-ibm032-opcode.h:
- New file, contains RT opcode definitions.
-
-infcmd.c
- Changed code to use csh instead of sh to avoid the anoyance of the environment bug.
- Added initialize routine.
-
-inflow.c:
- Added initialize routine.
-
-infrun.c:
- set_current_frame now takes an extra argument.
- Added some code to deal with stopping in the middle of a camphor link. (Under #ifdef CAMPHOR).
- Added RT specific code to get the return values from the right registers. Replaces code that was there for RT.
- 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.
- Added initialize routine.
-
- Feb 9, 1987 Zalman Stern.
- 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.
-
-iniitialize.h:
- Changed file to use #ifdef's for machine type. Allows one to use same sources for different machines.
-
-m-ibm032.h:
- New file, contains RT specific macros and variables.
-
-param.h:
- Changed file to use #ifdef's for machine type. Allows one to use same sources for different machines.
-
-pinsn.c:
- Changed file to use #ifdef's for machine type. Allows one to use same sources for different machines.
-
-printcmd.c:
- Moved alloca calls out of variable initialization.
- Added initialize routine.
-
-source.c:
- Added initialize routine.
-
-stack.c:
- Added initialize routine.
-
-symmisc.c:
- Added initialize routine.
-
-symtab.c:
- RT specific code to deal with function names being _.foo instead of _foo.
- Added initialize routine.
-
-utils.c:
- Added comment.
-
-valarith.c:
- Added initialize routine.
-
-valops.c:
- Added initialize routine.
-
-valprint.c:
- Added initialize routine.
-
-values.c:
- Added initialize routine.
-
-Only in .: ibm032-opcode.h
-
-/* The opcode table consists of a 256 element array containing an
- * instruction mnemonic and an instruction type field. This can be
- * indexed directly by the first eight bits of an RT instruction.
- * The instruction type consists of a type field and some flags.
- * In addition to this, there is an ifdef'd out "instruction" table
- * at the end of the file. This is an alphabetical listing of the instructions
- * containing mnemonic, opcode, and type. This is useful for modification
- * purposes. There is also some code in the ifdef to convert the
- * instruction table into an opcode table.
- */
-
-/* Various useful bit masks. */
-#define ibm032_typeMask 0x0f /* Mask to get actual type info out of instruction type. */
-#define LOW4 0x0f
-#define HIGH4 0xf0
-#define LOW16 0x0000ffff
-#define HIGH16 0xffff0000
-#define LOW20 0x000fffff
-#define LOW24 0x00ffffff
-
-/* Instruction types consist of a type id in the low 4 bits and flags above that. */
-
-/* Flags. */
-#define ibm032_conditional 0x10
-#define ibm032_negative 0x20
-
-/* Format types. */
-#define ibm032_JI 0x0 /* Jump immediate. */
-#define ibm032_X 0x1 /* ??? */
-
-/* These next ones are in a special bit position. Do not change their defines. */
-#define ibm032_DS0 0x2 /* Data short with no shift for immediate value. */
-#define ibm032_DS1 0x3 /* Data short with 1 bit shift for immediate value. */
-#define ibm032_DS2 0x4 /* Data short with 2 bit shift for immediate value */
-#define ibm032_DSShiftOffset ibm032_DS0 /* Offset to get shift value from ibm032_DS? types. */
-
-#define ibm032_RR 0x5 /* R format where second argument is a register */
-#define ibm032_RI 0x6 /* R format where second argument is 4 bit immediate. */
-#define ibm032_BI 0x7 /* Branch immediate. */
-#define ibm032_BA 0x8 /* Branch absolute. */
-#define ibm032_D 0x9 /* Data. */
-
-/* What an instruction looks like. */
-struct ibm032_opcode {
- char *mnemonic; /* the name. NULL indicates illegal instruction. */
- int type; /* See above. */
-};
-
-#define MAXOPCODES 256 /* Pretty well hardwired. */
-
-#ifndef BUILDTABLE
-/* The actual data. */
-struct ibm032_opcode ibm032_opcodes[] = {
- {"j%s", ibm032_JI | ibm032_conditional | ibm032_negative},
- {"j%s", ibm032_JI | ibm032_conditional | ibm032_negative},
- {"j%s", ibm032_JI | ibm032_conditional | ibm032_negative},
- {"j%s", ibm032_JI | ibm032_conditional | ibm032_negative},
- {"j%s", ibm032_JI | ibm032_conditional | ibm032_negative},
- {"j%s", ibm032_JI | ibm032_conditional | ibm032_negative},
- {"j%s", ibm032_JI | ibm032_conditional | ibm032_negative},
- {"j%s", ibm032_JI | ibm032_conditional | ibm032_negative},
- {"j%s", ibm032_JI | ibm032_conditional},
- {"j%s", ibm032_JI | ibm032_conditional},
- {"j%s", ibm032_JI | ibm032_conditional},
- {"j%s", ibm032_JI | ibm032_conditional},
- {"j%s", ibm032_JI | ibm032_conditional},
- {"j%s", ibm032_JI | ibm032_conditional},
- {"j%s", ibm032_JI | ibm032_conditional},
- {"j%s", ibm032_JI | ibm032_conditional},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"stcs", ibm032_DS0},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sths", ibm032_DS1},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"sts", ibm032_DS2},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lcs", ibm032_DS0},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"lhas", ibm032_DS1},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"cas", ibm032_X},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {"ls", ibm032_DS2},
- {0, 0},
- {0, 0},
- {0, 0},
- {0, 0},
- {0, 0},
- {0, 0},
- {0, 0},
- {0, 0},
- {"b%s", ibm032_BI | ibm032_conditional | ibm032_negative},
- {"b%sx", ibm032_BI | ibm032_conditional | ibm032_negative},
- {"bala", ibm032_BA},
- {"balax", ibm032_BA},
- {"bali", ibm032_BI},
- {"balix", ibm032_BI},
- {"b%s", ibm032_BI | ibm032_conditional},
- {"b%sx", ibm032_BI | ibm032_conditional},
- {"ais", ibm032_RI},
- {"inc", ibm032_RI},
- {"sis", ibm032_RI},
- {"dec", ibm032_RI},
- {"cis", ibm032_RI},
- {"clrsb", ibm032_RI},
- {"mfs", ibm032_RR},
- {"setsb", ibm032_RI},
- {"clrbu", ibm032_RI},
- {"clrbl", ibm032_RI},
- {"setbu", ibm032_RI},
- {"setbl", ibm032_RI},
- {"mftbiu", ibm032_RI},
- {"mftbil", ibm032_RI},
- {"mttbiu", ibm032_RI},
- {"mttbil", ibm032_RI},
- {"sari", ibm032_RI},
- {"sari16", ibm032_RI},
- {0, 0},
- {0, 0},
- {"lis", ibm032_RI},
- {0, 0},
- {0, 0},
- {0, 0},
- {"sri", ibm032_RI},
- {"sri16", ibm032_RI},
- {"sli", ibm032_RI},
- {"sli16", ibm032_RI},
- {"srpi", ibm032_RI},
- {"srpi16", ibm032_RI},
- {"slpi", ibm032_RI},
- {"slpi16", ibm032_RI},
- {"sar", ibm032_RR},
- {"exts", ibm032_RR},
- {"sf", ibm032_RR},
- {"cl", ibm032_RR},
- {"c", ibm032_RR},
- {"mts", ibm032_RR},
- {"d", ibm032_RR},
- {0, 0},
- {"sr", ibm032_RR},
- {"srp", ibm032_RR},
- {"sl", ibm032_RR},
- {"slp", ibm032_RR},
- {"mftb", ibm032_RR},
- {"tgte", ibm032_RR},
- {"tlt", ibm032_RR},
- {"mttb", ibm032_RR},
- {"svc", ibm032_D},
- {"ai", ibm032_D},
- {"cal16", ibm032_D},
- {"oiu", ibm032_D},
- {"oil", ibm032_D},
- {"nilz", ibm032_D},
- {"nilo", ibm032_D},
- {"xil", ibm032_D},
- {"cal", ibm032_D},
- {"lm", ibm032_D},
- {"lha", ibm032_D},
- {"ior", ibm032_D},
- {"ti", ibm032_D},
- {"l", ibm032_D},
- {"lc", ibm032_D},
- {"tsh", ibm032_D},
- {"lps", ibm032_D},
- {"aei", ibm032_D},
- {"sfi", ibm032_D},
- {"cli", ibm032_D},
- {"ci", ibm032_D},
- {"niuz", ibm032_D},
- {"niuo", ibm032_D},
- {"xiu", ibm032_D},
- {"cau", ibm032_D},
- {"stm", ibm032_D},
- {"lh", ibm032_D},
- {"iow", ibm032_D},
- {"sth", ibm032_D},
- {"st", ibm032_D},
- {"stc", ibm032_D},
- {0, 0},
- {"abs", ibm032_RR},
- {"a", ibm032_RR},
- {"s", ibm032_RR},
- {"o", ibm032_RR},
- {"twoc", ibm032_RR},
- {"n", ibm032_RR},
- {"m", ibm032_RR},
- {"x", ibm032_RR},
- {"b%sr", ibm032_RR | ibm032_conditional | ibm032_negative},
- {"b%srx", ibm032_RR | ibm032_conditional | ibm032_negative},
- {0, 0},
- {"lhs", ibm032_RR},
- {"balr", ibm032_RR},
- {"balrx", ibm032_RR},
- {"b%sr", ibm032_RR | ibm032_conditional},
- {"b%srx", ibm032_RR | ibm032_conditional},
- {"wait", ibm032_RR},
- {"ae", ibm032_RR},
- {"se", ibm032_RR},
- {"ca16", ibm032_RR},
- {"onec", ibm032_RR},
- {"clz", ibm032_RR},
- {0, 0},
- {0, 0},
- {0, 0},
- {"mc03", ibm032_RR},
- {"mc13", ibm032_RR},
- {"mc23", ibm032_RR},
- {"mc33", ibm032_RR},
- {"mc30", ibm032_RR},
- {"mc31", ibm032_RR},
- {"mc32", ibm032_RR},
-};
-
-#else
-struct ibm032_opcode ibm032_opcodes[MAXOPCODES];
-
-struct ibm032_instruction {
- char *mnemonic; /* Mnemonic for this instruction */
- char opcode; /* Numerical value of opcode. */
- int type; /* This instructions format. */
-};
-
-struct ibm032_instruction ibm032_instructions[] =
-{
- {"a", 0xe1, ibm032_RR},
- {"abs", 0xe0, ibm032_RR},
- {"ae", 0xf1, ibm032_RR},
- {"aei", 0xd1, ibm032_D},
- {"ai", 0xc1, ibm032_D},
- {"ais", 0x90, ibm032_RI},
- {"bala", 0x8a, ibm032_BA},
- {"balax", 0x8b, ibm032_BA},
- {"bali", 0x8c, ibm032_BI},
- {"balix", 0x8d, ibm032_BI},
- {"balr", 0xec, ibm032_RR},
- {"balrx", 0xed, ibm032_RR},
- {"b%s", 0x8e, ibm032_BI | ibm032_conditional},
- {"b%sr", 0xee, ibm032_RR | ibm032_conditional},
- {"b%srx", 0xef, ibm032_RR | ibm032_conditional},
- {"b%sx", 0x8f, ibm032_BI | ibm032_conditional},
- {"b%s", 0x88, ibm032_BI | ibm032_conditional | ibm032_negative},
- {"b%sr", 0xe8, ibm032_RR | ibm032_conditional | ibm032_negative},
- {"b%srx", 0xe9, ibm032_RR | ibm032_conditional | ibm032_negative},
- {"b%sx", 0x89, ibm032_BI | ibm032_conditional | ibm032_negative},
- {"c", 0xb4, ibm032_RR},
- {"cal", 0xc8, ibm032_D},
- {"cal16", 0xc2, ibm032_D},
- {"cas", 0x60, ibm032_X},
- {"cau", 0xd8, ibm032_D},
- {"ca16", 0xf3, ibm032_RR},
- {"ci", 0xd4, ibm032_D},
- {"cis", 0x94, ibm032_RI},
- {"cl", 0xb3, ibm032_RR},
- {"cli", 0xd3, ibm032_D},
- {"clrbl", 0x99, ibm032_RI},
- {"clrbu", 0x98, ibm032_RI},
- {"clrsb", 0x95, ibm032_RI},
- {"clz", 0xf5, ibm032_RR},
- {"d", 0xb6, ibm032_RR},
- {"dec", 0x93, ibm032_RI},
- {"exts", 0xb1, ibm032_RR},
- {"inc", 0x91, ibm032_RI},
- {"ior", 0xcb, ibm032_D},
- {"iow", 0xdb, ibm032_D},
-
- {"j%s", 0x08, ibm032_JI | ibm032_conditional},
- {"j%s", 0x00, ibm032_JI | ibm032_conditional | ibm032_negative},
-
- {"l", 0xcd, ibm032_D},
- {"lc", 0xce, ibm032_D},
- {"lcs", 0x40, ibm032_DS0},
- {"lh", 0xda, ibm032_D},
- {"lha", 0xca, ibm032_D},
- {"lhas", 0x50, ibm032_DS1},
- {"lhs", 0xeb, ibm032_RR},
- {"lis", 0xa4, ibm032_RI},
- {"lm", 0xc9, ibm032_D},
- {"lps", 0xd0, ibm032_D},
- {"ls", 0x70, ibm032_DS2},
- {"m", 0xe6, ibm032_RR},
- {"mc03", 0xf9, ibm032_RR},
- {"mc13", 0xfa, ibm032_RR},
- {"mc23", 0xfb, ibm032_RR},
- {"mc33", 0xfc, ibm032_RR},
- {"mc30", 0xfd, ibm032_RR},
- {"mc31", 0xfe, ibm032_RR},
- {"mc32", 0xff, ibm032_RR},
- {"mfs", 0x96, ibm032_RR},
- {"mftb", 0xbc, ibm032_RR},
- {"mftbil", 0x9d, ibm032_RI},
- {"mftbiu", 0x9c, ibm032_RI},
- {"mts", 0xb5, ibm032_RR},
- {"mttb", 0xbf, ibm032_RR},
- {"mttbil", 0x9f, ibm032_RI},
- {"mttbiu", 0x9e, ibm032_RI},
- {"n", 0xe5, ibm032_RR},
-
- {"nilo", 0xc6, ibm032_D},
- {"nilz", 0xc5, ibm032_D},
- {"niuo", 0xd6, ibm032_D},
- {"niuz", 0xd5, ibm032_D},
- {"o", 0xe3, ibm032_RR},
- {"oil", 0xc4, ibm032_D},
- {"oiu", 0xc3, ibm032_D},
- {"onec", 0xf4, ibm032_RR},
- {"s", 0xe2, ibm032_RR},
- {"sar", 0xb0, ibm032_RR},
- {"sari", 0xa0, ibm032_RI},
- {"sari16", 0xa1, ibm032_RI},
- {"se", 0xf2, ibm032_RR},
- {"setbl", 0x9b, ibm032_RI},
- {"setbu", 0x9a, ibm032_RI},
- {"setsb", 0x97, ibm032_RI},
- {"sf", 0xb2, ibm032_RR},
-
- {"sfi", 0xd2, ibm032_D},
-
- {"sis", 0x92, ibm032_RI},
- {"sl", 0xba, ibm032_RR},
- {"sli", 0xaa, ibm032_RI},
- {"sli16", 0xab, ibm032_RI},
- {"slp", 0xbb, ibm032_RR},
- {"slpi", 0xae, ibm032_RI},
- {"slpi16", 0xaf, ibm032_RI},
- {"sr", 0xb8, ibm032_RR},
- {"sri", 0xa8, ibm032_RI},
- {"sri16", 0xa9, ibm032_RI},
- {"srp", 0xb9, ibm032_RR},
- {"srpi", 0xac, ibm032_RI},
- {"srpi16", 0xad, ibm032_RI},
-
- {"st", 0xdd, ibm032_D},
-
- {"stc", 0xde, ibm032_D},
- {"stcs", 0x10, ibm032_DS0},
- {"sth", 0xdc, ibm032_D},
- {"sths", 0x20, ibm032_DS1},
- {"stm", 0xd9, ibm032_D},
- {"sts", 0x30, ibm032_DS2},
- {"svc", 0xc0, ibm032_D},
- {"tgte", 0xbd, ibm032_RR},
- {"ti", 0xcc, ibm032_D},
- {"tlt", 0xbe, ibm032_RR},
- {"tsh", 0xcf, ibm032_D},
- {"twoc", 0xe4, ibm032_RR},
- {"wait", 0xf0, ibm032_RR},
- {"x", 0xe7, ibm032_RR},
- {"xil", 0xc7, ibm032_D},
- {"xiu", 0xd7, ibm032_D}
-};
-
-/* Code to generate the packed opcode table from the instructions table. */
-
-#include <stdio.h>
-
-char *typeNames[] = {
- "ibm032_JI",
- "ibm032_X",
- "ibm032_DS0",
- "ibm032_DS1",
- "ibm032_DS2",
- "ibm032_RR",
- "ibm032_RI",
- "ibm032_BI",
- "ibm032_BA",
- "ibm032_D"
-};
-
-main()
-{
-
- int i, j, opcode, type;
-
- for (j = (sizeof(ibm032_instructions) / sizeof(struct ibm032_instruction)); j >= 0; j--) {
- opcode = ibm032_instructions[j].opcode;
- switch (ibm032_instructions[j].type & ibm032_typeMask) {
- case ibm032_JI:
- i = 7;
- break;
- case ibm032_X:
- case ibm032_DS0:
- case ibm032_DS1:
- case ibm032_DS2:
- i = 15;
- break;
- case ibm032_RR:
- case ibm032_RI:
- default:
- i = 0;
- break;
- }
- for (;i >= 0; i--) {
- ibm032_opcodes[opcode + i].mnemonic = ibm032_instructions[j].mnemonic;
- ibm032_opcodes[opcode + i].type = ibm032_instructions[j].type;
- }
- }
-
- printf("struct ibm032_opcode ibm032_opcodes[] = {\n");
- for ( j = 0; j < 256; j++) {
- type = ibm032_opcodes[j].type;
- if (ibm032_opcodes[j].mnemonic != NULL)
- printf(" {\"%s\",\t\t%s%s%s},\n", ibm032_opcodes[j].mnemonic,
- typeNames[type & ibm032_typeMask],
- (type & ibm032_conditional) ? " | ibm032_conditional" : "",
- (type & ibm032_negative) ? " | ibm032_negative" : "");
- else
- printf(" {0,\t\t\t0},\n");
- }
- printf("};\n");
-}
-#endif /* BUILDTABLE */
-
-Only in .: ibm032-pinsn.c
-
-/* Print ibm032 instructions for GDB, the GNU debugger.
- Copyright (C) 1986 Free Software Foundation, Inc.
-
-GDB is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY. No author or distributor accepts responsibility to anyone
-for the consequences of using it or for whether it serves any
-particular purpose or works at all, unless he says so in writing.
-Refer to the GDB General Public License for full details.
-
-Everyone is granted permission to copy, modify and redistribute GDB,
-but only under the conditions described in the GDB General Public
-License. A copy of this license is supposed to have been given to you
-along with GDB so you can know your rights and responsibilities. It
-should be in a file named COPYING. Among other things, the copyright
-notice and this notice must be preserved on all copies.
-
-In other words, go ahead and share GDB, but don't try to stop
-anyone else from sharing it farther. Help stamp out software hoarding!
-*/
-
-#include <stdio.h>
-
-#include "defs.h"
-#include "param.h"
-#include "symtab.h"
-#include "ibm032-opcode.h"
-
-/* ibm032 instructions are never longer than this many bytes. */
-#define MAXLEN 4
-
-extern char *reg_names[];
-
-static char *mapCondition();
-
-
-/* Print the ibm032 instruction at address MEMADDR in debugged memory,
- on STREAM. Returns length of the instruction, in bytes. */
-
-int
-print_insn (memaddr, stream)
- CORE_ADDR memaddr;
- FILE *stream;
-{
- unsigned char buffer[MAXLEN];
- int opcodeIndex, instructionBits, type;
- char *mnemonic;
-
- read_memory (memaddr, buffer, MAXLEN);
- instructionBits = (buffer[0] << 24) + (buffer[1] << 16) + (buffer[2] << 8) + buffer[3]; /* Get it into an int for easy use. */
-
- if ((mnemonic = ibm032_opcodes[opcodeIndex = buffer[0]].mnemonic) == NULL)
- {
- fprintf (stream, "0%o", (instructionBits & HIGH16) >> 16);
- return 2;
- }
- type = ibm032_opcodes[opcodeIndex].type;
- if (!(type & ibm032_conditional)) {
- fprintf (stream, "%s", mnemonic);
-
- switch (type) {
-
- int displacement; /* Used for sign extensions. */
- char *sign;
-
- case ibm032_X:
- 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]);
- return 2;
- case ibm032_DS0:
- case ibm032_DS1:
- case ibm032_DS2:
- 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. */
- if (buffer[1] & LOW4)
- fprintf(stream, "(%s)", reg_names[buffer[1] & LOW4]);
- return 2;
- case ibm032_RR:
- fprintf(stream, "\t%s, %s", reg_names[(buffer[1] & HIGH4) >> 4], reg_names[buffer[1] & 0x0f]);
- return 2;
- case ibm032_RI:
- fprintf(stream, "\t%s, %x", reg_names[(buffer[1] & HIGH4) >> 4], buffer[1] & LOW4);
- return 2;
- case ibm032_BI:
- fprintf(stream, "\t%s, ", reg_names[(buffer[1] & HIGH4) >> 4]);
- displacement = (instructionBits & LOW20);
- if ((displacement & (1 << 19)) != 0) /* Cover sign extension. */
- displacement |= 0xfff00000;
- print_address(memaddr + (displacement * 2), stream); /* Need sign extension. */
- return 4;
- case ibm032_BA:
- print_address((instructionBits & LOW24) & ~1, stream);
- return 4;
- case ibm032_D:
- displacement = (instructionBits & LOW16);
- if ((displacement & (1 << 15)) != 0) { /* Cover sign extension. */
- displacement = - (displacement | 0xffff0000);
- sign = "-";
- }
- else
- sign = "";
- fprintf(stream, "\t%s, %s, %s%x", reg_names[(buffer[1] & HIGH4) >> 4], reg_names[buffer[1] & LOW4], sign, displacement);
- return 4;
- }
- }
- else { /* Conditional branches are hacked. */
- switch (type & 0x0f) {
-
- int displacement;
-
- case ibm032_JI:
- fprintf(stream, ibm032_opcodes[opcodeIndex].mnemonic, mapCondition(type & ibm032_negative, buffer[0] & LOW4));
- putc('\t', stream);
- print_address((buffer[1] << 1) + memaddr, stream);
- return 2;
- case ibm032_BI:
- fprintf(stream, ibm032_opcodes[opcodeIndex].mnemonic, mapCondition(type & ibm032_negative, (buffer[1] & HIGH4) >> 4));
- putc('\t', stream);
- displacement = (instructionBits & LOW20);
- if ((displacement & (1 << 19)) != 0) /* Cover sign extension. */
- displacement |= 0xfff00000;
- print_address((displacement * 2) + memaddr, stream);
- return 4;
- case ibm032_RR:
- fprintf(stream, ibm032_opcodes[opcodeIndex].mnemonic, mapCondition(type & ibm032_negative, (buffer[1] & HIGH4) >> 4));
- fprintf(stream, "\t%s", reg_names[buffer[1] & LOW4]);
- return 2;
- }
- }
-}
-
-/* Converts a 4 bit "conditional specifier" into a semi-meaningful name. */
-static char *mapCondition(negative, conditionBits)
- int conditionBits;
-{
-
- char *condition;
-
- if (negative)
- switch (conditionBits) {
- case 0x8:
- condition = "";
- break;
- case 0x9:
- condition = "ge";
- break;
- case 0xa:
- condition = "ne";
- break;
- case 0xb:
- condition = "le";
- break;
- case 0xc:
- condition = "nc";
- break;
- case 0xd: /* Reserved. */
- condition = "notbogus";
- break;
- case 0xe:
- condition = "no";
- break;
- case 0xf:
- condition = "ntb";
- break;
- default:
- condition = "notbogus";
- break;
- }
- else
- switch (conditionBits) {
- case 0x8:
- condition = "nop";
- break;
- case 0x9:
- condition = "lt";
- break;
- case 0xa:
- condition = "eq";
- break;
- case 0xb:
- condition = "gt";
- break;
- case 0xc:
- condition = "c";
- break;
- case 0xd: /* Reserved. */
- condition = "bogus";
- break;
- case 0xe:
- condition = "o";
- break;
- case 0xf:
- condition = "tb";
- break;
- default:
- condition = "bogus";
- break;
- }
- return condition;
-}
-
-Only in .: m-ibm032.h
-
-/* Parameters for execution on an IBM RT, for GDB, the GNU debugger.
- Copyright (C) 1986 Free Software Foundation, Inc.
-
-GDB is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY. No author or distributor accepts responsibility to anyone
-for the consequences of using it or for whether it serves any
-particular purpose or works at all, unless he says so in writing.
-Refer to the GDB General Public License for full details.
-
-Everyone is granted permission to copy, modify and redistribute GDB,
-but only under the conditions described in the GDB General Public
-License. A copy of this license is supposed to have been given to you
-along with GDB so you can know your rights and responsibilities. It
-should be in a file named COPYING. Among other things, the copyright
-notice and this notice must be preserved on all copies.
-
-In other words, go ahead and share GDB, but don't try to stop
-anyone else from sharing it farther. Help stamp out software hoarding!
-*/
-
-/* Define this if the C compiler puts an underscore at the front
- of external names before giving them to the linker. */
-
-#define NAMES_HAVE_UNDERSCORE
-
-/* Offset from address of function to start of its code.
- Zero on most machines. */
-
-#define FUNCTION_START_OFFSET 0
-
-/* Advance PC across any function entry prologue instructions
- to reach some "real" code. */
-
-#define SKIP_PROLOGUE(pc) \
-{ register int op = read_memory_integer (pc, 1) & 0x00ff; \
- if (op == 0xd9) { \
- pc += 4; \
- op = read_memory_integer (pc, 2); \
- if ((op & 0xff00) == 0xc100) { /* pcc prolog add r1, number */ \
- pc += 4; \
- op = read_memory_integer (pc, 1) & 0x00ff; \
- if (op == 0x6e) { /* cas r14, 0 */ \
- pc += 2; \
- op = read_memory_integer (pc, 2) & 0xffff; \
- if (op == 0xc8d1) pc += 4; /* cal r13, junk(r1) */ \
- } \
- } \
- else if ((op & 0xffff) == 0x6e00) { /* hc prolog cas r14, 0 */ \
- pc += 4; \
- op = read_memory_integer(pc, 1) & 0xff; \
- if (op == 0x6d) { /* cas r13 junk, probably */ \
- pc += 2; \
- op = read_memory_integer(pc, 2) & 0xffff; \
- if (op == 0xc811) pc += 4; /* cal r1, foo(r1) */ \
- } \
- } \
- } \
- while (1) { \
- /* now watch for st, sth, stc, and short versions thereof, cas instructions and exts */ \
- /* which are all used to store the parameters from r2-r5 onto the stack or into reg vars */ \
- op = read_memory_integer (pc, 2); \
- if ((op & 0xff00) == 0x3000 && (op & 0xf0) >= 0x20 && (op & 0xf0) <= 0x50) pc += 2; \
- else if ((op & 0xff00) == 0x2300 && (op & 0xf0) >= 0x20 && (op & 0xf0) <= 0x50) pc += 2; \
- else if ((op & 0xff00) == 0x1b00 && (op & 0xf0) >= 0x20 && (op & 0xf0) <= 0x50) pc += 2; \
- else if ((op & 0xff00) == 0x6c00 && (op & 0xf0) >= 0x20 && (op & 0xf0) <= 0x50) pc += 2; \
- else if ((op & 0xff00) == 0xb100) pc += 2; /* extend sign */ \
- else if ((op & 0xff00) == 0xdd00 && (op & 0xf0) >= 0x20 && (op & 0xf0) <= 0x50) pc += 4; \
- else break; \
- } \
-}
-
-/* Immediately after a function call, return the saved pc.
- Can't go through the frames for this because on some machines
- the new frame is not set up until the new function executes
- some instructions. */
-
-#define SAVED_PC_AFTER_CALL(frame) \
-read_register (15)
-
-/* This is the amount to subtract from u.u_ar0
- to get the offset in the core file of the register values. */
-
-#define KERNEL_U_ADDR (0x20000000 - NBPG * (UPAGES))
-
-/* Address of end of stack space. */
-
-/* extra page is for the "red zone" */
-#define STACK_END_ADDR (0x20000000 - NBPG * (UPAGES+1))
-
-/* Stack grows downward. */
-
-#define INNER_THAN <
-
-/* Sequence of bytes for breakpoint instruction. */
-
-#define BREAKPOINT {0xbd, 0x00}
-
-/* Amount PC must be decremented by after a breakpoint.
- This is often the number of bytes in BREAKPOINT
- but not always. */
-
-#define DECR_PC_AFTER_BREAK 0
-
-/* Nonzero if instruction at PC is a return instruction. */
-
-#define ABOUT_TO_RETURN(pc) (read_memory_integer (pc, 1) & 0x00ff == 0xc9)
-
-/* Return 1 if P points to an invalid floating point value. */
-
-#define INVALID_FLOAT(p) 0 /* Just a first guess; not checked */
-
-/* Say how long (ordinary) registers are. */
-
-#define REGISTER_TYPE long
-
-/* Number of machine registers */
-
-#define NUM_REGS 18
-
-/* Initializer for an array of names of registers.
- There should be NUM_REGS strings in this initializer. */
-
-#define REGISTER_NAMES {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "iar", "mq"}
-
-/* Register numbers of various important registers.
- Note that some of these values are "real" register numbers,
- and correspond to the general registers of the machine,
- and some are "phony" register numbers which are too large
- to be actual register numbers as far as the user is concerned
- but do serve to get the desired values when passed to read_register. */
-
-#define FP_REGNUM 13 /* Contains address of executing stack frame */
-#define SP_REGNUM 1 /* Contains address of top of stack */
-#define PS_REGNUM 17 /* Contains processor status */
-#define PC_REGNUM 16 /* Contains program counter */
-
-#define REGISTER_U_ADDR(addr, blockend, regno) \
-{ addr = blockend + regno * 4; }
-
-/* Total amount of space needed to store our copies of the machine's
- register state, the array `registers'. */
-#define REGISTER_BYTES (NUM_REGS*4)
-
-/* Index within `registers' of the first byte of the space for
- register N. */
-
-#define REGISTER_BYTE(N) ((N) * 4)
-
-/* Number of bytes of storage in the actual machine representation
- for register N. On the vax, all regs are 4 bytes. */
-
-#define REGISTER_RAW_SIZE(N) 4
-
-/* Number of bytes of storage in the program's representation
- for register N. On the vax, all regs are 4 bytes. */
-
-#define REGISTER_VIRTUAL_SIZE(N) 4
-
-/* Largest value REGISTER_RAW_SIZE can have. */
-
-#define MAX_REGISTER_RAW_SIZE 4
-
-/* Largest value REGISTER_VIRTUAL_SIZE can have. */
-
-#define MAX_REGISTER_VIRTUAL_SIZE 4
-
-/* Nonzero if register N requires conversion
- from raw format to virtual format. */
-
-#define REGISTER_CONVERTIBLE(N) 0
-
-/* Convert data from raw format for register REGNUM
- to virtual format for register REGNUM. */
-
-#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,FROM,TO) \
- bcopy ((FROM), (TO), 4);
-
-/* Convert data from virtual format for register REGNUM
- to raw format for register REGNUM. */
-
-#define REGISTER_CONVERT_TO_RAW(REGNUM,FROM,TO) \
- bcopy ((FROM), (TO), 4);
-
-/* Return the GDB type object for the "standard" data type
- of data in register N. */
-
-#define REGISTER_VIRTUAL_TYPE(N) builtin_type_int
-
-/* Describe the pointer in each stack frame to the previous stack frame
- (its caller). */
-
-/* FRAME_CHAIN takes a frame's nominal address
- and produces the frame's chain-pointer.
-
- FRAME_CHAIN_COMBINE takes the chain pointer and the frame's nominal address
- and produces the nominal address of the caller frame.
-
- However, if FRAME_CHAIN_VALID returns zero,
- it means the given frame is the outermost one and has no caller.
- In that case, FRAME_CHAIN_COMBINE is not used. */
-
-/* In the case of the Sun, the frame's nominal address
- is the address of a 4-byte word containing the calling frame's address. */
-
-#define FRAME_CHAIN(thisframe) (rt_prev_frame(thisframe))
-
-#define FRAME_CHAIN_VALID(chain, thisframe) \
- (chain >= 0x10000000 && chain < 0x20000000)
-
-#define FRAME_CHAIN_COMBINE(chain, thisframe) (chain)
-
-/* Define other aspects of the stack frame. */
-
-#define FRAME_SAVED_PC(frame) (rt_frame_reg(frame, 15))
-
-#define FRAME_ARGS_ADDRESS(fi) (rt_frame_args(fi.frame))
-
-#define FRAME_LOCALS_ADDRESS(fi) (fi.frame)
-
-/* Return number of args passed to a frame.
- Can return -1, meaning no way to tell. */
-
-#define FRAME_NUM_ARGS(val, fi) \
-{register struct rt_frame *tf; \
- tf = get_cached_frame(fi.frame); \
- val = -1; \
- if (tf) val = tf->nParms;\
-}
-
-/* Return number of bytes at start of arglist that are not really args. */
-
-#define FRAME_ARGS_SKIP 0
-
-/* Put here the code to store, into a struct frame_saved_regs,
- the addresses of the saved registers of frame described by FRAME_INFO.
- This includes special registers such as pc and fp saved in special
- ways in the stack frame. sp is even more special:
- the address we return for it IS the sp for the next frame. */
-
-#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs) \
-{ register int regnum; \
- register struct rt_frame *tf; \
- register CORE_ADDR next_addr; \
- bzero (&(frame_saved_regs), sizeof (frame_saved_regs)); \
- tf = get_cached_frame((frame_info).frame); \
- if (tf) { \
- for(regnum = tf->firstReg; regnum < 16; regnum++) { \
- (frame_saved_regs).regs[regnum] = tf->firstRLoc+ 4*(regnum - tf->firstReg); \
- } \
- } \
-}
-
-
-/* Things needed for making the inferior call functions. */
-
-/* Push an empty stack frame, to record the current PC, etc. */
-
-#define PUSH_DUMMY_FRAME \
-{ register CORE_ADDR sp = read_register (SP_REGNUM);\
- register int regnum; \
- sp = push_word (sp, read_register (PC_REGNUM)); \
- for (regnum = 15; regnum >= 0; regnum--) \
- sp = push_word (sp, read_register (regnum)); \
- write_register (FP_REGNUM, sp+64); \
- write_register (SP_REGNUM, sp); }
-
-/* discard special frame pushed by PUSH_DUMMY_FRAME */
-#define POP_DUMMY_FRAME \
- {register CORE_ADDR sp; \
- register int regnum; \
- sp = read_register(FP_REGNUM)-64; \
- for(regnum = 0; regnum < 16;regnum++) { \
- write_register(regnum, read_memory_integer(sp, 4)); \
- sp += 4; \
- } \
- /* now get the pc */ \
- write_register(PC_REGNUM, read_memory_integer(sp, 4)); \
- sp += 4; \
- }
-
-/* Discard from the stack the innermost frame, restoring all registers. */
-/* THIS ROUTINE DOES NOT SET R1 (SP_REGNUM) CORRECTLY */
-/* REALLY MUST CONSULT TRACE TBL TO FIND OUT FRAME SIZE */
-#define POP_FRAME \
-{ register CORE_ADDR fp = read_register (FP_REGNUM); \
- register int regnum; \
- register struct rt_frame *tf; \
- tf = (struct rt_frame *) get_cached_frame(fp); \
- if (tf) { \
- for(regnum = tf->firstReg; regnum < 16; regnum++) { \
- write_register(regnum, \
- read_memory_integer (tf->firstRLoc + 4*(regnum-tf->firstReg), 4) \
- ); \
- } \
- write_register(PC_REGNUM, read_register(15)); \
- write_register(SP_REGNUM, tf->firstRLoc + 4*(16-tf->firstReg) + 36); \
- } \
-}
-
-/* This sequence of words is the instructions
- ls r2,0(r1) 2 bytes pick up args
- ls r3,4(r1) 2 bytes pick up args
- ls r4,8(r1) 2 bytes pick up args
- ls r5,c(r1) 2 bytes pick up args
- cal r1,16(r1) 4 bytes fix up ap (==sp)
- cal16 r15,<low> 4 bytes do call
- oiu r15,<high>(r15) 4
- lr r0,r15 2
- ls r15,0(r15) 2
- balr r15 2
- bpt 2 get back to gdb
- <4 byte trace table> 4
-
-This is 16 bytes.
-*/
-
-#define CALL_DUMMY {0x70217131, 0x72417351, 0xc8110010, 0xc2f06969, \
- 0xc3ff6969, 0x60f070ff, 0xecffbd00, 0xdf7fdf00}
-
-#define CALL_DUMMY_LENGTH 32
-
-#define CALL_DUMMY_START_OFFSET 0
-
-/* Insert the specified number of args and function address
- into a call sequence of the above form stored at DUMMYNAME. */
-
-#define FIX_CALL_DUMMY(dummyname, fun, nargs) \
-{ *((short *)(((char *)dummyname)+14)) = fun&0xffff; \
-*((short *)(((char *)dummyname)+18)) = (fun>>16)&0xffff; \
-}
-
-/* Interface definitions for kernel debugger KDB. */
-
-/* Map machine fault codes into signal numbers.
- First subtract 0, divide by 4, then index in a table.
- Faults for which the entry in this table is 0
- are not handled by KDB; the program's own trap handler
- gets to handle then. */
-
-#define FAULT_CODE_ORIGIN 0
-#define FAULT_CODE_UNITS 4
-#define FAULT_TABLE \
-{ 0, 0, 0, 0, SIGTRAP, 0, 0, 0, \
- 0, SIGTRAP, 0, 0, 0, 0, 0, SIGKILL, \
- 0, 0, 0, 0, 0, 0, 0, 0, \
- SIGILL }
-
-/* Start running with a stack stretching from BEG to END.
- BEG and END should be symbols meaningful to the assembler.
- This is used only for kdb, which we do not support. */
-
-#define INIT_STACK(beg, end) \
-{ }
-
-/* Push the frame pointer register on the stack. */
-#define PUSH_FRAME_PTR \
-{ }
-
-/* Copy the top-of-stack to the frame pointer register. */
-#define POP_FRAME_PTR \
-{ }
-
-/* After KDB is entered by a fault, push all registers
- that GDB thinks about (all NUM_REGS of them),
- so that they appear in order of ascending GDB register number.
- The fault code will be on the stack beyond the last register. */
-
-#define PUSH_REGISTERS \
-{ }
-
-/* Assuming the registers (including processor status) have been
- pushed on the stack in order of ascending GDB register number,
- restore them and return to the address in the saved PC register. */
-
-#define POP_REGISTERS \
-{ }
-
-Only in .: m-ibm032init.h
-
-/* This is how the size of an individual .o file's text segment
- is rounded on a sun. */
-
-#define FILEADDR_ROUND(addr) ((addr + 3) & -4)
-
-diff -c ../../gnu/gdb/blockframe.c ./blockframe.c
-*** ../../gnu/gdb/blockframe.c Sat Apr 4 22:06:18 1987
---- ./blockframe.c Mon Apr 27 01:06:06 1987
-***************
-*** 53,62 ****
- }
-
- void
-! set_current_frame (frame)
- FRAME frame;
- {
- current_frame = frame;
- }
-
- /* Return the frame that called FRAME.
---- 53,67 ----
- }
-
- void
-! set_current_frame (frame, validp)
- FRAME frame;
-+ int validp;
- {
- current_frame = frame;
-+ #ifdef ibm032
-+ if (validp)
-+ recache_frames();
-+ #endif
- }
-
- /* Return the frame that called FRAME.
-***************
-*** 291,301 ****
- CORE_ADDR pc;
- {
- register int i;
-
- /* Note that the last thing in the vector is always _etext. */
- for (i = 0; i < misc_function_count; i++)
- {
-! if (pc < misc_function_vector[i].address)
- return i - 1;
- }
- return -1;
---- 296,309 ----
- CORE_ADDR pc;
- {
- register int i;
-+ register long j;
-
- /* Note that the last thing in the vector is always _etext. */
- for (i = 0; i < misc_function_count; i++)
- {
-! if ((j = misc_function_vector[i].address) < 0)
-! continue;
-! if (pc < j)
- return i - 1;
- }
- return -1;
-***************
-*** 325,333 ****
---- 333,610 ----
- }
- }
-
-+ #ifdef ibm032
-+ /* RT frame format:
-+ arg 3 these are not really here, but are in regs
-+ arg 2
-+ arg 1
-+ arg 0
-+ resvd 20 bytes
-+ rn to r15 saved regs
-+ floating regs (at first assume 0 bytes, fix later)
-+ locals
-+
-+ N.B. r13 points 64 bytes below the end of the locals.
-+ */
-+
-+ /*
-+ * Routine for ibm032 stack trace. Called after a new frame has been set. Do an entire stack
-+ * trace, and squirrel away the information. We need to do this since the ibm032 (rt) does
-+ * not have enough info in a known place off of the frame ptr (r13) to do anything useful.
-+ * Instead, one also requires the pc, and can then perform various operations to find
-+ * out how that procedure built its frame, and thus, to decode it. However, since this is
-+ * fairly slow, we only do it after a set_current_frame operation has been performed.
-+ */
-+
-+ #define rtTTSize 50
-+ static struct rtTTCache {
-+ CORE_ADDR lbound; /* lowest address so far known as using this trace table */
-+ CORE_ADDR ttaddr; /* address of the last '0xdf' in the trace table */
-+ char ttype; /* type of the trace table -- 0 == unused */
-+ } ttcache[rtTTSize];
-+ short ttptr = 0;
-+
-+ #define rtSize 50
-+ static struct rt_frame rtFrames[rtSize];
-+ static int rtCount;
-+ static CORE_ADDR rt_next_frame, rt_next_pc;
-+
-+ static struct rtTTCache *ttfind (addr)
-+ CORE_ADDR addr; {
-+ register int i;
-+ register struct rtTTCache *tp;
-+ for(i=0,tp=ttcache;i<rtTTSize;i++,tp++) {
-+ if (addr >= tp->lbound && addr <= tp->ttaddr) return tp;
-+ }
-+ return 0;
-+ }
-+
-+ static ttadd(lowaddr, ttaddr, type)
-+ register CORE_ADDR lowaddr, ttaddr;
-+ char type; {
-+ register struct rtTTCache *tp;
-+ if (tp = ttfind(ttaddr)) {
-+ /* possibly increase the bound on this cache element */
-+ if (lowaddr < tp->lbound) tp->lbound = lowaddr;
-+ }
-+ else {
-+ /* add a new element */
-+ tp = &ttcache[ttptr++];
-+ tp->lbound = lowaddr;
-+ tp->ttaddr = ttaddr;
-+ tp->ttype = type;
-+ if (ttptr >= rtTTSize) ttptr = 0; /* keep it in bounds */
-+ }
-+ }
-+
-+ /* this routine scans for a trace table, and returns 4 bytes: 0 0 <n params> <first saved reg> */
-+ rt_num_regs (pc, tf)
-+ register struct rt_frame *tf;
-+ CORE_ADDR pc; {
-+ register state = 0;
-+ register long newpc = pc;
-+ register int tc;
-+ short nparms, firstreg;
-+ short ttype;
-+ short optx;
-+ long offset;
-+ char offtype;
-+ struct rtTTCache *tp;
-+ CORE_ADDR frame;
-+
-+ frame = tf->frame;
-+ /* first see if it is in our ttcache */
-+ if (tp = ttfind(pc)) {
-+ state = 3;
-+ ttype = tp->ttype;
-+ newpc = tp->ttaddr;
-+ }
-+ else {
-+ /* state machine to look for 'df' 'xx' 'df' */
-+ while (1) {
-+ tc = read_memory_integer(newpc, 2);
-+ if (state == 0 && (tc&0xff00) == 0xdf00) {
-+ state = 1;
-+ ttype = tc & 0xff;
-+ }
-+ else if (state == 1 && (tc & 0xff00) == 0xdf00) {
-+ state = 3;
-+ break;
-+ }
-+ else state = 0;
-+ if (newpc - pc > 20000) break;
-+ newpc += 2;
-+ }
-+ if (state == 3) ttadd(pc, newpc, ttype); /* add to cache */
-+ }
-+ if (state != 3) {
-+ printf("No trace table for pc %x, making one up.\n", pc);
-+ tf->nParms = 0;
-+ tf->firstReg = 12;
-+ tf->firstRLoc = frame+64;
-+ rt_next_pc = read_memory_integer(frame+64+12, 4);
-+ rt_next_frame = read_memory_integer(frame+64+4, 4);
-+ return 0;
-+ }
-+ /* otherwise newpc is pointing at the last 'df' in the trace table */
-+ else if (ttype == 3) {
-+ /* funny trace table found by OBSERVATION (not doc) to be in program prolog */
-+ return -1; /* special value checked by recache_frames */
-+ }
-+ else if (ttype == 2) {
-+ /* assembly: no registers were saved */
-+ tf->nParms = 0;
-+ tf->firstReg = 16;
-+ tf->firstRLoc = 0;
-+ rt_next_pc = read_register(15); /* where we go back to */
-+ rt_next_frame = frame;
-+ tf->frame -= 100; /* hack to eliminate duplicate tags */
-+ return 0;
-+ }
-+ else if (ttype == 0x7f) {
-+ /* special machine state frame saved by STACK_DUMMY */
-+ tf->nParms = 0;
-+ tf->firstReg = 16;
-+ tf->firstRLoc = 0;
-+ rt_next_pc = read_memory_integer(frame + 64 - 64, 4);
-+ rt_next_frame = read_memory_integer(frame -64 + 13*4, 4);
-+ return 0;
-+ }
-+ else {
-+ /* C program, I hope */
-+ nparms = (read_memory_integer(newpc+2, 1) >> 4) & 0x0f;
-+ firstreg = ((tc=read_memory_integer(newpc+1, 1)) >> 4) & 0x0f;
-+ optx = ((tc&4)? 1 : 0); /* flags says if floating registers described */
-+ offtype = read_memory_integer(newpc+optx+3, 1) & 0xff;
-+ if ((offtype & 0xc0) == 0) {
-+ /* 6 bits of local offset */
-+ offset = offtype & 0x3f;
-+ }
-+ else if ((offtype & 0xc0) == 0x40) {
-+ /* 14 bits of local offset */
-+ offset = (offtype & 0x3f) << 8;
-+ offset += (read_memory_integer(newpc+optx+4, 1) & 0xff);
-+ }
-+ else if ((offtype & 0xc0) == 0x80) {
-+ /* 22 bits of local offset */
-+ offset = (offtype & 0x3f) << 8;
-+ offset += (read_memory_integer(newpc+optx+4, 1) & 0xff);
-+ offset <<= 8;
-+ offset += (read_memory_integer(newpc+optx+5, 1) & 0xff);
-+ }
-+ else if ((offtype & 0xc0) == 0xc0) {
-+ /* 30 bits of local offset */
-+ offset = (offtype & 0x3f) << 8;
-+ offset += (read_memory_integer(newpc+optx+4, 1) & 0xff);
-+ offset <<= 8;
-+ offset += (read_memory_integer(newpc+optx+5, 1) & 0xff);
-+ offset <<= 8;
-+ offset += (read_memory_integer(newpc+optx+6, 1) & 0xff);
-+ }
-+ offset <<= 2;
-+ tf->nParms = nparms;
-+ tf->firstReg = firstreg;
-+ tf->firstRLoc = frame /* initial frame location */
-+ + offset /* to top of frame */
-+ - 36 /* pascal static link, incomings args and linkage */
-+ - (4*(16-firstreg)); /* space used by general regs */
-+ rt_next_pc = read_memory_integer(tf->firstRLoc + 4*(15-firstreg), 4);
-+ rt_next_frame = read_memory_integer(tf->firstRLoc + 4*(13-firstreg), 4);
-+ return 0;
-+ }
-+ }
-+
-+ recache_frames() {
-+ register long i, j;
-+ long pc;
-+ CORE_ADDR curfp;
-+ struct rt_frame *tf;
-+
-+ pc = read_pc();
-+ curfp = current_frame;
-+ rtCount = 0;
-+ /* these next special cases can only occur with frame #0; others can't make calls
-+ in these intermediate states.
-+ */
-+ /* if pc points at br or brx, we're doing a return, so set the pc to the target */
-+ i=read_memory_integer(pc, 2);
-+ if ((i & 0xfe00) == 0xe800) {
-+ /* we're looking at a br or brx instruction */
-+ pc = read_register(i&0x0f);
-+ }
-+ /* also, if pc points at d9xx or c111 we're in the middle of a frame push, and should
-+ use r15 for the pc.
-+ */
-+ if ((i & 0xff00) == 0xd900 || (i & 0xffff) == 0xc111) {
-+ pc = read_register(15);
-+ }
-+ while (1) {
-+ if (curfp <= 0x10000000 || curfp >= 0x20000000) break;
-+ if (pc > 0x20000000) break;
-+ /* otherwise try to add a new frame structure */
-+ if (rtCount >= rtTTSize) break;
-+ tf = &rtFrames[rtCount++];
-+ tf->frame = curfp;
-+ tf->pc = pc;
-+ i = rt_num_regs(pc, tf);
-+ if (i<0) { /* exceptional values */
-+ rtCount--; /* last frame was bogus */
-+ break;
-+ }
-+ /* now setup for next iteration */
-+ pc = rt_next_pc;
-+ curfp = rt_next_frame;
-+ }
-+ }
-+
-+ struct rt_frame *get_cached_frame(aframe)
-+ CORE_ADDR aframe; {
-+ register int i;
-+ for(i=0;i<rtCount;i++) {
-+ if (rtFrames[i].frame == aframe) return &rtFrames[i];
-+ }
-+ return 0;
-+ }
-+
-+ long rt_prev_frame(frame)
-+ register CORE_ADDR frame; {
-+ register int i;
-+ for(i=0;i<rtCount-1;i++) {
-+ if (rtFrames[i].frame == frame) return rtFrames[i+1].frame;
-+ }
-+ return 0;
-+ }
-+
-+ long rt_frame_reg(frame, reg)
-+ CORE_ADDR frame;
-+ register long reg; {
-+ register struct rt_frame *tf;
-+ tf = get_cached_frame(frame);
-+ if (tf == 0) return 0;
-+ if (tf->firstReg > reg) return 0; /* didn't save this one! */
-+ return read_memory_integer(tf->firstRLoc + 4 * (reg - tf->firstReg), 4);
-+ }
-+
-+ long rt_frame_args(frame)
-+ CORE_ADDR frame; {
-+ register struct rt_frame *tf;
-+ tf = get_cached_frame(frame);
-+ if (!tf) return 0;
-+ return tf->firstRLoc + 20 + 4*(16 - tf->firstReg);
-+ }
-+ #endif
-+
-+ blockinitialize() {initialize();}
-+
- static
- initialize ()
- {
-+ #ifdef ibm032
-+ #ifdef CAMPHOR
-+ add_com ("recache-frames", class_stack, recache_frames,
-+ "Tell debugger to recompute PC/RT stack frame cache\n");
-+ #endif
-+ #endif
- }
-
- END_FILE
-diff -c ../../gnu/gdb/breakpoint.c ./breakpoint.c
-*** ../../gnu/gdb/breakpoint.c Sat Apr 4 22:22:44 1987
---- ./breakpoint.c Sun Apr 26 23:02:20 1987
-***************
-*** 94,99 ****
---- 94,100 ----
- of last breakpoint hit. */
-
- struct command_line *breakpoint_commands;
-+ char new_breakpoint_commands = 0; /* Zalman Stern, ITC 1/12/1987 */
-
- START_FILE
-
-***************
-*** 203,210 ****
- {
- execute_command (breakpoint_commands->line, 0);
- /* If command was "cont", breakpoint_commands is 0 now. */
-! if (breakpoint_commands)
- breakpoint_commands = breakpoint_commands->next;
- }
- clear_momentary_breakpoints ();
- }
---- 204,213 ----
- {
- execute_command (breakpoint_commands->line, 0);
- /* If command was "cont", breakpoint_commands is 0 now. */
-! if (breakpoint_commands && !new_breakpoint_commands) /* Zalman Stern, ITC 1/12/1987 */
- breakpoint_commands = breakpoint_commands->next;
-+ else /* Zalman Stern, ITC 1/12/1987 */
-+ new_breakpoint_commands = 0; /* Zalman Stern, ITC 1/12/1987 */
- }
- clear_momentary_breakpoints ();
- }
-***************
-*** 215,220 ****
---- 218,225 ----
- void
- clear_breakpoint_commands ()
- {
-+ if (breakpoint_commands != 0) /* Zalman Stern, ITC 1/12/1987 */
-+ new_breakpoint_commands = 1; /* Zalman Stern, ITC 1/12/1987 */
- breakpoint_commands = 0;
- breakpoint_auto_delete (0);
- }
-***************
-*** 921,926 ****
---- 926,933 ----
- struct cmd_list_element *enablelist;
-
- extern struct cmd_list_element *cmdlist;
-+
-+ breakinitialize() {initialize();}
-
- static
- initialize ()
-diff -c ../../gnu/gdb/command.c ./command.c
-*** ../../gnu/gdb/command.c Sat Apr 4 22:24:07 1987
---- ./command.c Sat Apr 25 17:18:15 1987
-***************
-*** 94,100 ****
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding! */
-
--
- #include "command.h"
- #include <stdio.h>
-
---- 94,99 ----
-***************
-*** 388,394 ****
- {
- if (nfound > 1 && allow_unknown >= 0)
- {
-! *p = 0;
- ambbuf[0] = 0;
- for (c = list; c; c = c->next)
- if (!strncmp (*line, c->name, p - *line))
---- 387,393 ----
- {
- if (nfound > 1 && allow_unknown >= 0)
- {
-! *p = 0;
- ambbuf[0] = 0;
- for (c = list; c; c = c->next)
- if (!strncmp (*line, c->name, p - *line))
-diff -c ../../gnu/gdb/core.c ./core.c
-*** ../../gnu/gdb/core.c Sat Apr 4 22:27:23 1987
---- ./core.c Mon Apr 27 13:20:47 1987
-***************
-*** 163,172 ****
- int reg_offset;
-
- /* 4.2bsd-style core dump */
- val = myread (corechan, &u, sizeof u);
- if (val < 0)
-! perror_with_name (filename);
- data_start = exec_data_start;
- data_end = data_start + NBPG * u.u_dsize;
- stack_start = stack_end - NBPG * u.u_ssize;
- data_offset = NBPG * UPAGES;
---- 163,180 ----
- int reg_offset;
-
- /* 4.2bsd-style core dump */
-+ #ifdef ibm032
-+ /* on ibm032, uarea is at the far end of the u pages */
-+ lseek(corechan, UPAGES*NBPG - sizeof(u), 0);
-+ #endif
- val = myread (corechan, &u, sizeof u);
- if (val < 0)
-! perror_with_name (execfile);
-! #ifdef ibm032
-! data_start = 0x10000000;
-! #else
- data_start = exec_data_start;
-+ #endif
- data_end = data_start + NBPG * u.u_dsize;
- stack_start = stack_end - NBPG * u.u_ssize;
- data_offset = NBPG * UPAGES;
-***************
-*** 208,214 ****
- corefile = concat (dirname, "/", filename);
- }
-
-! set_current_frame (read_register (FP_REGNUM));
- select_frame (get_current_frame (), 0);
- validate_files ();
- }
---- 216,222 ----
- corefile = concat (dirname, "/", filename);
- }
-
-! set_current_frame (read_register (FP_REGNUM), 1);
- select_frame (get_current_frame (), 0);
- validate_files ();
- }
-***************
-*** 523,528 ****
---- 531,539 ----
-
- #endif /* not NEW_SUN_CORE */
-
-+
-+ coreinitialize() {initialize();}
-+
- static
- initialize ()
- {
-diff -c ../../gnu/gdb/dbxread.c ./dbxread.c
-*** ../../gnu/gdb/dbxread.c Sat Apr 4 22:29:54 1987
---- ./dbxread.c Fri May 15 15:52:24 1987
-***************
-*** 28,33 ****
---- 28,36 ----
- #include "initialize.h"
- #include "symtab.h"
- #include "param.h"
-+ #ifdef CAMPHOR
-+ #include "value.h"
-+ #endif
-
- static void add_symbol_to_list ();
- static void read_dbx_symtab ();
-***************
-*** 89,94 ****
---- 92,109 ----
- int prev_line_number;
- };
-
-+ /* When dealing with dynamically loaded objects, the symbol table in the sym file
-+ does not match where we actually load the files. Thus, gdb has to relocate those
-+ symbols during dbxread. This is only used by the camphor support code, and
-+ probably should be under an ifdef camphor. */
-+
-+ struct dlreloc
-+ {
-+ long text;
-+ long data;
-+ long bss;
-+ } dlreloc;
-+
- static struct subfile *subfiles;
-
- static struct subfile *current_subfile;
-***************
-*** 1015,1020 ****
---- 1030,1037 ----
- register int i, nbl;
- register struct blockvector *bv;
- register struct block *b;
-+ int j;
-+ struct symbol *ts1, *ts2;
-
- for (s = symtab_list; s; s = s->next)
- {
-***************
-*** 1025,1034 ****
---- 1042,1238 ----
- b = BLOCKVECTOR_BLOCK (bv, i);
- qsort (&BLOCK_SYM (b, 0), BLOCK_NSYMS (b),
- sizeof (struct symbol *), compare_symbols);
-+ /* Register parms have two decls, but the register one is the only one of interest */
-+ /* So, trash the name of the bad one, since binary srch could get either. Yucko. */
-+ /* doing name this way enables symbol freeing code to keep working */
-+ for(j=1;j<BLOCK_NSYMS(b);j++)
-+ {
-+ ts1 = BLOCK_SYM(b,j-1);
-+ ts2 = BLOCK_SYM(b, j);
-+ if (SYMBOL_NAMESPACE(ts1) == VAR_NAMESPACE
-+ && SYMBOL_NAMESPACE(ts2) == VAR_NAMESPACE
-+ && strcmp(SYMBOL_NAME(ts1), SYMBOL_NAME(ts2)) == 0)
-+ {if (SYMBOL_CLASS(ts1) == LOC_REGISTER)
-+ {SYMBOL_CLASS(ts2) = LOC_REGISTER;
-+ SYMBOL_TYPE(ts2) = SYMBOL_TYPE(ts1);
-+ SYMBOL_VALUE(ts2) = SYMBOL_VALUE(ts1);
-+ }
-+ else if (SYMBOL_CLASS(ts2) == LOC_REGISTER )
-+ {SYMBOL_CLASS(ts1) = LOC_REGISTER;
-+ SYMBOL_TYPE(ts1) = SYMBOL_TYPE(ts2);
-+ SYMBOL_VALUE(ts1) = SYMBOL_VALUE(ts2);
-+ }
-+ #ifdef notdef
-+ else printf("Check out def of symbol %s\n", SYMBOL_NAME(ts1));
-+ #endif
-+ }
-+ }
- }
- }
- }
-
-+
-+ #ifdef CAMPHOR
-+ set_rel_command(exp)
-+ char *exp;
-+ {
-+ struct expression *expr = (struct expression *) parse_c_expression (exp);
-+ register value val;
-+ register long temp;
-+ register struct cleanup *old_chain
-+ = make_cleanup (free_current_contents, &expr);
-+ val = evaluate_expression (expr);
-+ temp = value_as_long (val);
-+ dlreloc.text = dlreloc.data = dlreloc.bss = temp;
-+ printf("Relocation for all segs set to %x.\n", temp);
-+ do_cleanups (old_chain);
-+ }
-+
-+ void
-+ add_file_command (name)
-+ char *name;
-+ {
-+ register int desc;
-+ struct exec hdr;
-+ struct nlist *nlist;
-+ char *stringtab;
-+ long buffer;
-+ register int val;
-+ extern void close ();
-+ struct cleanup *old_chain;
-+ int in_this_dir = 1;
-+ struct symtab *symtab_temp;
-+
-+ dont_repeat ();
-+
-+ if (name == 0)
-+ error_no_arg ("file to add symbols from");
-+
-+ if (symtab_list && !query ("Add more symbols from \"%s\"? ", name))
-+ error ("Not confirmed.");
-+
-+ if (symfile)
-+ free (symfile);
-+ symfile = 0;
-+
-+ desc = open (name, 0);
-+ if (desc < 0)
-+ {
-+ if ((desc = openp (getenv ("BZPATH"), name, 0, 0)) < 0)
-+ if ((desc = openp (getenv ("CLASSPATH"), name, 0, 0)) < 0)
-+ desc = openp (getenv ("PATH"), name, 0, 0);
-+
-+ in_this_dir = 0;
-+ }
-+ if (desc < 0)
-+ perror_with_name (name);
-+
-+ old_chain = make_cleanup (close, desc);
-+
-+ val = myread (desc, &hdr, sizeof hdr);
-+ if (val < 0)
-+ perror_with_name (name);
-+
-+ if (N_BADMAG (hdr))
-+ error ("File \"%s\" not in executable format.", name);
-+
-+ if (hdr.a_syms == 0)
-+ {
-+ free_all_symtabs (); /* check this */
-+ return;
-+ }
-+
-+ /* Now read the string table, all at once. */
-+ val = lseek (desc, N_SYMOFF (hdr) + hdr.a_syms, 0);
-+ if (val < 0)
-+ perror_with_name (name);
-+ val = myread (desc, &buffer, sizeof buffer);
-+ if (val < 0)
-+ perror_with_name (name);
-+ stringtab = (char *) alloca (buffer);
-+ bcopy (&buffer, stringtab, sizeof buffer);
-+ val = myread (desc, stringtab + sizeof buffer, buffer - sizeof buffer);
-+ if (val < 0)
-+ perror_with_name (name);
-+
-+ #ifdef READ_GDB_SYMSEGS
-+ /* That puts us at the symsegs. Read them. */
-+ symseg_chain = read_symsegs (desc, name);
-+ hash_symsegs ();
-+ #else
-+ /* Where people are using the 4.2 ld program, must not check for
-+ symsegs, because that ld puts randonm garbage at the end of
-+ the output file and that would trigger an error message. */
-+ symseg_chain = 0;
-+ #endif
-+
-+ /* Position to read the symbol table. Do not read it all at once. */
-+ val = lseek (desc, N_SYMOFF (hdr), 0);
-+ if (val < 0)
-+ perror_with_name (name);
-+
-+ printf ("Reading symbol data from %s...", name);
-+ fflush (stdout);
-+
-+ init_misc_functions ();
-+ make_cleanup (discard_misc_bunches, 0);
-+ init_header_files ();
-+ make_cleanup (free_header_files, 0);
-+
-+ /* Remember symtab_list to check if the added file had any dbx info in it. */
-+ symtab_temp = symtab_list;
-+
-+ /* Now that the symbol table data of the executable file are all in core,
-+ process them and define symbols accordingly. Closes desc. */
-+
-+ read_dbx_symtab (desc, stringtab, hdr.a_syms / sizeof (struct nlist));
-+
-+ if (symtab_list == symtab_temp) {
-+ printf("\n%s not compiled with -g, debugging posibilities are limited.\n", name);
-+ fflush(stdout);
-+ }
-+ else {
-+
-+ /* Sort symbols alphabetically within each block. */
-+
-+ sort_syms ();
-+
-+ /* Go over the misc functions and install them in vector. */
-+
-+ condense_misc_bunches ();
-+
-+ /* Make a default for file to list. */
-+
-+ select_source_symtab (symtab_list);
-+ }
-+
-+ do_cleanups (old_chain);
-+
-+ /* Free the symtabs made by read_symsegs, but not their contents,
-+ which have been copied into symtabs on symtab_list. */
-+ while (symseg_chain)
-+ {
-+ register struct symtab *s = symseg_chain->next;
-+ free (symseg_chain);
-+ symseg_chain = s;
-+ }
-+
-+ if (in_this_dir && name[0] != '/')
-+ {
-+ char dirname[MAXPATHLEN];
-+
-+ getwd (dirname);
-+ symfile = concat (dirname, "/",
-+ savestring (name, strlen (name)));
-+ }
-+ else
-+ symfile = savestring (name, strlen (name));
-+
-+ printf ("done.\n");
-+ fflush (stdout);
-+ }
-+ #endif
-+
- /* This is the symbol-file command. Read the file, analyze its symbols,
- and add a struct symtab to symtab_list. */
-
-***************
-*** 1047,1052 ****
---- 1251,1263 ----
-
- dont_repeat ();
-
-+ #ifdef CAMPHOR
-+ /* this command does not deal with automatically relocated stuff */
-+ dlreloc.text = 0;
-+ dlreloc.data = 0;
-+ dlreloc.bss = 0;
-+ #endif
-+
- if (name == 0)
- error_no_arg ("file to read symbols from");
-
-***************
-*** 1130,1151 ****
-
- read_dbx_symtab (desc, stringtab, hdr.a_syms / sizeof (struct nlist));
-
- /* Sort symbols alphabetically within each block. */
-
-! sort_syms ();
-
- /* Go over the misc functions and install them in vector. */
-
-! condense_misc_bunches ();
-
- /* Don't allow char * to have a typename (else would get caddr_t.) */
-
-! TYPE_NAME (lookup_pointer_type (builtin_type_char)) = 0;
-
- /* Make a default for file to list. */
-
-! select_source_symtab (symtab_list);
-
- symfile = savestring (name, strlen (name));
-
- do_cleanups (old_chain);
---- 1341,1372 ----
-
- read_dbx_symtab (desc, stringtab, hdr.a_syms / sizeof (struct nlist));
-
-+ /* Check to make sure file was compiled with -g. */
-+
-+ if (symtab_list == NULL) {
-+ printf("\n%s not compiled with -g, debugging posibilities are limited.\n", name);
-+ fflush(stdout);
-+ }
-+ else {
-+
- /* Sort symbols alphabetically within each block. */
-
-! sort_syms ();
-
- /* Go over the misc functions and install them in vector. */
-
-! condense_misc_bunches ();
-
- /* Don't allow char * to have a typename (else would get caddr_t.) */
-
-! TYPE_NAME (lookup_pointer_type (builtin_type_char)) = 0;
-
- /* Make a default for file to list. */
-
-! select_source_symtab (symtab_list);
-
-+ }
-+
- symfile = savestring (name, strlen (name));
-
- do_cleanups (old_chain);
-***************
-*** 1204,1209 ****
---- 1425,1440 ----
- {
- fread (&buf, sizeof buf, 1, stream);
- namestring = buf.n_un.n_strx ? buf.n_un.n_strx + stringtab : 0;
-+ #ifdef CAMPHOR
-+ if ((buf.n_type & N_TYPE) == N_UNDF) {
-+ /* don't screw around with undefined symbols */
-+ }
-+ else {
-+ if ((buf.n_type & N_TYPE) == N_TEXT) buf.n_value += dlreloc.text;
-+ else if ((buf.n_type & N_TYPE) == N_DATA) buf.n_value += dlreloc.data;
-+ else if ((buf.n_type & N_TYPE) == N_BSS) buf.n_value += dlreloc.bss;
-+ }
-+ #endif
- if (buf.n_type & N_STAB)
- process_one_symbol (buf.n_type, buf.n_desc,
- buf.n_value, namestring);
-***************
-*** 1356,1361 ****
---- 1587,1596 ----
- }
- }
-
-+ #ifdef ibm032
-+ static char hcState; /* two different, incompatible compilers for the RT */
-+ #endif
-+
- static void
- process_one_symbol (type, desc, value, name)
- int type, desc;
-***************
-*** 1363,1369 ****
- char *name;
- {
- register struct context_stack *new;
-!
- /* Something is wrong if we see real data before
- seeing a source file name. */
-
---- 1598,1633 ----
- char *name;
- {
- register struct context_stack *new;
-! char tname[256];
-! /* Now, there are two compilers for the RT, and they are seriously incompatible.
-! pcc is just like normal c compilers: stabs for a block occur before the LBRAC
-! stab for that same block. Thus this code squirrels them away in the context
-! and when the RBRAC is hit, restores local_symbols as of the time the LBRAC
-! was encountered, and adds these symbosl to the block that just ended.
-!
-! However, with the HC compiler, those symbols occur *after* the LBRAC symbol
-! declaring the block's start. Totally incompatible, of course. One expects no
-! less from IBM. For hc compiled programs, we use the symbols in local_symbols
-! *before* the RBRAC command pops the context stack.
-!
-! Amazingly enough, when we complained to IBM/Palo Alto about this incompatibility,
-! they claimed that Mark Linton (original author of dbx) liked the new way better, and
-! that he didn't even know that pcc used a different order. Sorta explains some things
-! about dbx, n'est-ce pas? Furthermore, of course, IBM doesn't want to change
-! either pcc or hc.
-!
-! Anyway, hc and pcc compiled .o files often co-exist in programs. How do we
-! tell which is which? Stupid heuristic which doesn't work with programs
-! with no top-level locals or parameters: after seeing a function's start, if we see
-! an LBRAC before seeing a variable, then we are using hc, otherwise it is pcc.
-! Stupid heuristics are better than none, so we use it.
-!
-! The variable hcState is used to keep track of this crap.
-! 0 ==> saw function symbol
-! 1 ==> saw lbrac in state 0, this is hc.
-! 2 ==> saw symbol in state 0, this is pcc.
-! */
-!
- /* Something is wrong if we see real data before
- seeing a source file name. */
-
-***************
-*** 1384,1389 ****
---- 1648,1656 ----
- also the end of the lexical context for the previous function. */
- new = context_stack;
- within_function = 1;
-+ #ifdef ibm032
-+ hcState = 0;
-+ #endif
- if (new)
- {
- /* Make a block for the local symbols within. */
-***************
-*** 1400,1406 ****
---- 1667,1679 ----
- new->locals = 0;
- new->old_blocks = pending_blocks;
- new->start_addr = value;
-+ #ifdef ibm032
-+ strcpy(tname, ".");
-+ strcat(tname, name);
-+ new->name = define_symbol(value, tname);
-+ #else
- new->name = define_symbol (value, name);
-+ #endif
- local_symbols = 0;
- break;
-
-***************
-*** 1407,1412 ****
---- 1680,1688 ----
- case N_LBRAC:
- /* This "symbol" just indicates the start of an inner lexical
- context within a function. */
-+ #ifdef ibm032
-+ if (hcState == 0) hcState = 1;
-+ #endif
- new = (struct context_stack *) xmalloc (sizeof (struct context_stack));
- new->depth = desc;
- new->next = context_stack;
-***************
-*** 1422,1430 ****
- /* This "symbol" just indicates the end of an inner lexical
- context that was started with N_RBRAC. */
- new = context_stack;
- if (new == 0 || desc != new->depth)
- error ("Invalid symbol data: N_LBRAC/N_RBRAC symbol mismatch, symtab pos %d.", symnum);
-- local_symbols = new->locals;
- context_stack = new->next;
- /* If this is not the outermost LBRAC...RBRAC pair in the
- function, its local symbols preceded it, and are the ones
---- 1698,1711 ----
- /* This "symbol" just indicates the end of an inner lexical
- context that was started with N_RBRAC. */
- new = context_stack;
-+ #ifdef ibm032
-+ if (hcState == 2) /* pcc */
-+ local_symbols = new->locals;
-+ #else
-+ local_symbols = new->locals;
-+ #endif
- if (new == 0 || desc != new->depth)
- error ("Invalid symbol data: N_LBRAC/N_RBRAC symbol mismatch, symtab pos %d.", symnum);
- context_stack = new->next;
- /* If this is not the outermost LBRAC...RBRAC pair in the
- function, its local symbols preceded it, and are the ones
-***************
-*** 1443,1448 ****
---- 1724,1733 ----
- new->start_addr + last_source_start_addr,
- value + last_source_start_addr);
- }
-+ #ifdef ibm032
-+ if (hcState == 1 && context_stack->next) /* hc */
-+ local_symbols = new->locals; /* now we get them */
-+ #endif
- free (new);
- break;
-
-***************
-*** 1493,1498 ****
---- 1778,1786 ----
- break;
-
- default:
-+ #ifdef ibm032
-+ if (hcState == 0) hcState = 2;
-+ #endif
- if (name)
- define_symbol (value, name);
- }
-***************
-*** 1553,1558 ****
---- 1841,1849 ----
- Dbx data never actually contains 'l'. */
- case 'l':
- SYMBOL_CLASS (sym) = LOC_LOCAL;
-+ #ifdef ibm032
-+ if (hcState == 1) value += 1000000; /* temporary hack until rel 3 pcc matches hc */
-+ #endif
- SYMBOL_VALUE (sym) = value;
- SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
- add_symbol_to_list (sym, &local_symbols);
-***************
-*** 1572,1577 ****
---- 1863,1875 ----
- add_symbol_to_list (sym, &local_symbols);
- break;
-
-+ case 'R':
-+ SYMBOL_CLASS (sym) = LOC_REGISTER;
-+ SYMBOL_VALUE (sym) = value;
-+ SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
-+ add_symbol_to_list (sym, &local_symbols);
-+ break;
-+
- case 'S':
- /* Static symbol at top level of file */
- SYMBOL_CLASS (sym) = LOC_STATIC;
-***************
-*** 1616,1622 ****
- break;
-
- default:
-! error ("Invalid symbol data: unknown symbol-type code `%c' at symtab pos %d.", deftype, symnum);
- }
- return sym;
- }
---- 1914,1928 ----
- break;
-
- default:
-! printf ("Unknown symbol-type code '%c' in dbx symbol table, assuming local.\n", deftype);
-! SYMBOL_CLASS (sym) = LOC_LOCAL;
-! #ifdef ibm032
-! if (hcState == 1) value += 1000000; /* temporary hack until rel 3 pcc matches hc */
-! #endif
-! SYMBOL_VALUE (sym) = value;
-! SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
-! add_symbol_to_list (sym, &local_symbols);
-! break;
- }
- return sym;
- }
-***************
-*** 1741,1746 ****
---- 2047,2056 ----
- (*pp) += 5;
- else if (!strncmp (*pp, "r(0,1);0;", 9))
- (*pp) += 9;
-+ #if 1
-+ else if ((**pp == 'r') && (!strncmp(*pp + 2, ";0;", 3)))
-+ (*pp) += 5;
-+ #endif
- else break;
-
- TYPE_CODE (type) = TYPE_CODE_ARRAY;
-***************
-*** 1980,1986 ****
- rather than -128 which is what I would like.
- So use n1 != 0 to prevent char from being taken as unsigned. */
-
-! else if (n2 == 0 && n1 == 1)
- {
- /* an unsigned type */
- if (n3 == (1 << (8 * sizeof (int))))
---- 2290,2296 ----
- rather than -128 which is what I would like.
- So use n1 != 0 to prevent char from being taken as unsigned. */
-
-! if (n2 == 0)
- {
- /* an unsigned type */
- if (n3 == (1 << (8 * sizeof (int))))
-***************
-*** 1989,1994 ****
---- 2299,2306 ----
- return builtin_type_unsigned_short;
- if (n3 == (1 << (8 * sizeof (char))))
- return builtin_type_unsigned_char;
-+ if (n3 == (1 << (8 * sizeof (char) - 1)))
-+ return builtin_type_char;
- }
- else
- {
-***************
-*** 2002,2007 ****
---- 2314,2321 ----
- if (n3 == (1 << (8 * sizeof (char) - 1)))
- return builtin_type_char;
- }
-+ if (n2 == 0 && n3 == 1)
-+ return builtin_type_void;
- error ("Invalid symbol data: range type spec %s at symtab pos %d.",
- errp - 1, symnum);
- }
-***************
-*** 2033,2040 ****
---- 2347,2364 ----
-
- /* Read the digits, as far as they go. */
-
-+ #if 0 /* Yet another "Compiler sucks" fix. */
- while ((c = *p++) >= '0' && c <= '9')
-+ #else
-+ while (((c = *p++) >= '0' && c <= '9') || ((end != '\n') && (c == '\n')))
-+ #endif
- {
-+ #if 1
-+ if (c == '\n') {
-+ printf("Ignoring bogus newline in stabs entry. Your compiler should be fixed.\n");
-+ continue;
-+ }
-+ #endif
- n *= 10;
- n += c - '0';
- }
-***************
-*** 2050,2060 ****
---- 2374,2392 ----
- return n * sign;
- }
-
-+ dbxinitialize() {initialize();}
-+
- static
- initialize ()
- {
- symfile = 0;
-
-+ #ifdef CAMPHOR
-+ add_com ("add-file", class_files, add_file_command,
-+ "Add a new symbol table (in dbx format) from file FILE.");
-+ add_com("set-rel", class_files, set_rel_command,
-+ "Set relocation for add-file command to NUMBER.");
-+ #endif
- add_com ("symbol-file", class_files, symbol_file_command,
- "Load symbol table (in dbx format) from executable file FILE.");
- }
-diff -c ../../gnu/gdb/environ.c ./environ.c
-*** ../../gnu/gdb/environ.c Sat Apr 4 22:31:16 1987
---- ./environ.c Sun Apr 26 23:48:05 1987
-***************
-*** 129,135 ****
-
- if (e->allocated < i)
- {
-! e->allocated = max (i, e->allocated + 10);
- e->vector = (char **) xrealloc (e->vector,
- (e->allocated + 1) * sizeof (char *));
- }
---- 129,136 ----
-
- if (e->allocated < i)
- {
-! e->allocated = i + 10;
- e->vector = (char **) xrealloc (e->vector,
- (e->allocated + 1) * sizeof (char *));
- }
-diff -c ../../gnu/gdb/eval.c ./eval.c
-*** ../../gnu/gdb/eval.c Sat Apr 4 22:32:36 1987
---- ./eval.c Mon Apr 27 00:01:27 1987
-***************
-*** 546,551 ****
---- 546,553 ----
- }
- }
-
-+ evalinitialize() {initialize();}
-+
- static
- initialize ()
- { }
-diff -c ../../gnu/gdb/expread.y ./expread.y
-*** ../../gnu/gdb/expread.y Sat Apr 4 22:35:27 1987
---- ./expread.y Sun Apr 26 23:56:51 1987
-***************
-*** 650,655 ****
---- 650,656 ----
- ;
- else
- {
-+ /*N.B. error does a longjmp, so we do not have to worry about storage */
- err_copy = (char *) alloca (olen + 1);
- bcopy (lexptr, err_copy, olen);
- err_copy[olen] = 0;
-***************
-*** 945,953 ****
- {
- register int len = sizeof (struct expression) +
- expr->nelts * sizeof (union exp_element);
-! register struct expression *temp
-! = (struct expression *) alloca (len);
- register int inpos = expr->nelts, outpos = 0;
-
- /* Copy the original expression into temp. */
- bcopy (expr, temp, len);
---- 946,955 ----
- {
- register int len = sizeof (struct expression) +
- expr->nelts * sizeof (union exp_element);
-! register struct expression *temp;
- register int inpos = expr->nelts, outpos = 0;
-+
-+ temp = (struct expression *) alloca(len);
-
- /* Copy the original expression into temp. */
- bcopy (expr, temp, len);
-diff -c ../../gnu/gdb/findvar.c ./findvar.c
-*** ../../gnu/gdb/findvar.c Sat Apr 4 22:36:38 1987
---- ./findvar.c Mon Apr 27 00:01:44 1987
-***************
-*** 359,364 ****
---- 359,366 ----
- return value_cast (lookup_pointer_type (SYMBOL_TYPE (var)),
- value_from_long (builtin_type_long, addr));
- }
-+
-+ findinitialize() {initialize();}
-
- static
- initialize ()
-diff -c ../../gnu/gdb/firstfile.c ./firstfile.c
-*** ../../gnu/gdb/firstfile.c Sat Apr 4 22:37:06 1987
---- ./firstfile.c Mon Apr 27 00:02:06 1987
-***************
-*** 125,130 ****
---- 125,152 ----
- static initialize_dummy_1 ();
- static initialize_dummy_2 ();
-
-+ initialize_all_files() {
-+ blockinitialize();
-+ breakinitialize();
-+ coreinitialize();
-+ dbxinitialize();
-+ evalinitialize();
-+ findinitialize();
-+ infcmdinitialize();
-+ inflowinitialize();
-+ infruninitialize();
-+ symmiscinitialize();
-+ symtabinitialize();
-+ valarithinitialize();
-+ valopsinitialize();
-+ valprintinitialize();
-+ valuesinitialize();
-+ printcmdinitialize();
-+ sourceinitialize();
-+ stackinitialize();
-+ }
-+
-+ #if 0
- initialize_all_files ()
- {
- initialize_next_file ((char *) initialize_dummy_2
-***************
-*** 148,153 ****
---- 170,176 ----
- initialize_dummy_2 ()
- {
- }
-+ #endif
-
- /* This makes the function initialize_next_file. */
-
-diff -c ../../gnu/gdb/frame.h ./frame.h
-*** ../../gnu/gdb/frame.h Sat Apr 4 22:37:22 1987
---- ./frame.h Mon Apr 27 00:02:14 1987
-***************
-*** 20,25 ****
---- 20,35 ----
-
- /* Note that frame.h requires param.h! */
-
-+ #ifdef ibm032
-+ struct rt_frame {
-+ CORE_ADDR frame; /* frame address */
-+ CORE_ADDR pc; /* pc we called from */
-+ CORE_ADDR firstRLoc; /* loc'n of first saved general reg */
-+ short nParms; /* number of parameters to this frame */
-+ short firstReg; /* the reg stored at 64(fp) */
-+ };
-+ #endif
-+
- #define FRAME CORE_ADDR
-
- struct frame_info
-***************
-*** 62,64 ****
---- 72,77 ----
- extern struct block *get_selected_block ();
- extern struct symbol *get_frame_function ();
- extern struct symbol *get_pc_function ();
-+ #ifdef ibm032
-+ extern struct rt_frame *get_cached_frame();
-+ #endif
-diff -c ../../gnu/gdb/infcmd.c ./infcmd.c
-*** ../../gnu/gdb/infcmd.c Sat Apr 4 22:47:22 1987
---- ./infcmd.c Mon Apr 27 00:07:53 1987
-***************
-*** 39,45 ****
- /* String containing arguments to give to the program,
- with a space added at the front. Just a space means no args. */
-
-! static char *inferior_args;
-
- /* Pid of our debugged inferior, or 0 if no inferior now. */
-
---- 39,45 ----
- /* String containing arguments to give to the program,
- with a space added at the front. Just a space means no args. */
-
-! static char *inferior_args = NULL;
-
- /* Pid of our debugged inferior, or 0 if no inferior now. */
-
-***************
-*** 112,119 ****
- set_args_command (args)
- char *args;
- {
-! free (inferior_args);
-! if (!args) args = "";
- inferior_args = concat (" ", args, "");
- }
-
---- 112,121 ----
- set_args_command (args)
- char *args;
- {
-! if (inferior_args != NULL)
-! free (inferior_args);
-! if (!args)
-! args = "";
- inferior_args = concat (" ", args, "");
- }
-
-***************
-*** 171,177 ****
- signal (SIGINT, SIG_DFL); */
-
- ptrace (0);
-! execle ("/bin/sh", "sh", "-c", allargs, 0,
- environ_vector (inferior_environ));
-
- fprintf (stderr, "Cannot exec /bin/sh: %s.\n",
---- 173,180 ----
- signal (SIGINT, SIG_DFL); */
-
- ptrace (0);
-!
-! execle ("/bin/csh", "csh", "-f", "-c", allargs, 0,
- environ_vector (inferior_environ));
-
- fprintf (stderr, "Cannot exec /bin/sh: %s.\n",
-***************
-*** 473,478 ****
---- 476,482 ----
-
- retbuf[0] = stop_r0;
- retbuf[1] = stop_r1;
-+
- val = value_being_returned (value_type, retbuf);
- printf ("Value returned is $%d = ", record_latest_value (val));
- value_print (val, stdout);
-***************
-*** 705,710 ****
---- 709,716 ----
- printf ("Contents are relative to selected stack frame.\n");
- }
-
-+ infcmdinitialize() {initialize();}
-+
- static
- initialize ()
- {
-diff -c ../../gnu/gdb/inflow.c ./inflow.c
-*** ../../gnu/gdb/inflow.c Sat Apr 4 22:56:34 1987
---- ./inflow.c Mon Apr 27 00:12:10 1987
-***************
-*** 188,194 ****
- inferior_pid = 0;
- mark_breakpoints_out ();
- if (have_core_file_p ())
-! set_current_frame (read_register (FP_REGNUM));
- }
-
- /* Resume execution of the inferior process.
---- 188,194 ----
- inferior_pid = 0;
- mark_breakpoints_out ();
- if (have_core_file_p ())
-! set_current_frame (read_register (FP_REGNUM), 1);
- }
-
- /* Resume execution of the inferior process.
-***************
-*** 266,271 ****
---- 266,274 ----
- char buf[MAX_REGISTER_RAW_SIZE];
- register int i;
-
-+ #ifdef ibm032
-+ offset += UPAGES*NBPG - sizeof(u); /* ibm032: ustruct at end of uarea */
-+ #endif
- offset = ptrace (3, inferior_pid, offset, 0) - KERNEL_U_ADDR;
- for (regno = 0; regno < NUM_REGS; regno++)
- {
-***************
-*** 291,296 ****
---- 294,303 ----
- register unsigned int regaddr;
- char buf[80];
-
-+ #ifdef ibm032
-+ offset += UPAGES*NBPG - sizeof(u); /* ibm032: ustruct at end of uarea */
-+ #endif
-+
- offset = ptrace (3, inferior_pid, offset, 0) - KERNEL_U_ADDR;
-
- if (regno >= 0)
-***************
-*** 340,347 ****
- register int count
- = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
- /* Allocate buffer of that many longwords. */
-! register int *buffer = (int *) alloca (count * sizeof (int));
-
- /* Read all the longwords */
- for (i = 0; i < count; i++, addr += sizeof (int))
- buffer[i] = ptrace (1, inferior_pid, addr, 0);
---- 347,355 ----
- register int count
- = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
- /* Allocate buffer of that many longwords. */
-! register int *buffer;
-
-+ buffer = (int *) alloca(count * sizeof(int));
- /* Read all the longwords */
- for (i = 0; i < count; i++, addr += sizeof (int))
- buffer[i] = ptrace (1, inferior_pid, addr, 0);
-***************
-*** 367,377 ****
- register int count
- = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
- /* Allocate buffer of that many longwords. */
-! register int *buffer = (int *) alloca (count * sizeof (int));
- extern int errno;
-
- /* Fill start and end extra bytes of buffer with existing memory data. */
-
- buffer[0] = ptrace (1, inferior_pid, addr, 0);
- if (count > 1)
- buffer[count - 1]
---- 375,386 ----
- register int count
- = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
- /* Allocate buffer of that many longwords. */
-! register int *buffer;
- extern int errno;
-
- /* Fill start and end extra bytes of buffer with existing memory data. */
-
-+ buffer = (int *) alloca (count * sizeof (int));
- buffer[0] = ptrace (1, inferior_pid, addr, 0);
- if (count > 1)
- buffer[count - 1]
-***************
-*** 388,397 ****
- {
- errno = 0;
- ptrace (4, inferior_pid, addr, buffer[i]);
-! if (errno)
- return 1;
- }
--
- return 0;
- }
-
---- 397,406 ----
- {
- errno = 0;
- ptrace (4, inferior_pid, addr, buffer[i]);
-! if (errno) {
- return 1;
-+ }
- }
- return 0;
- }
-
-***************
-*** 421,426 ****
---- 430,437 ----
- }
- }
-
-+ inflowinitialize() {initialize();}
-+
- static
- initialize ()
- {
-diff -c ../../gnu/gdb/infrun.c ./infrun.c
-*** ../../gnu/gdb/infrun.c Sat Apr 4 22:57:15 1987
---- ./infrun.c Mon Apr 27 00:17:40 1987
-***************
-*** 257,263 ****
- pc_changed = 0;
- fetch_inferior_registers ();
- stop_pc = read_pc ();
-! set_current_frame (read_register (FP_REGNUM));
- stop_frame = get_current_frame ();
- stop_sp = read_register (SP_REGNUM);
- another_trap = 0;
---- 257,271 ----
- pc_changed = 0;
- fetch_inferior_registers ();
- stop_pc = read_pc ();
-! #ifdef CAMPHOR
-! /* if we're not going to stop, don't bother with a stack trace */
-! if (WIFSTOPPED(w) && !signal_stop[WSTOPSIG(w)])
-! set_current_frame(read_register(FP_REGNUM), 0);
-! else
-! set_current_frame(read_register(FP_REGNUM), 1);
-! #else
-! set_current_frame (read_register (FP_REGNUM), 1);
-! #endif
- stop_frame = get_current_frame ();
- stop_sp = read_register (SP_REGNUM);
- another_trap = 0;
-***************
-*** 688,700 ****
-
- /* Save the function value return registers
- We might be about to restore their previous contents. */
-! stop_r0 = read_register (0);
-! stop_r1 = read_register (1);
-
- if (stop_stack_dummy)
- {
- /* Pop the empty frame that contains the stack dummy. */
- POP_FRAME;
- select_frame (read_register (FP_REGNUM), 0);
- }
- }
---- 696,717 ----
-
- /* Save the function value return registers
- We might be about to restore their previous contents. */
-! #ifdef ibm032
-! stop_r0 = read_register (2);
-! stop_r1 = read_register (3);
-! #else
-! stop_r0 = read_register (0);
-! stop_r1 = read_register (1);
-! #endif
-
- if (stop_stack_dummy)
- {
- /* Pop the empty frame that contains the stack dummy. */
-+ #ifdef ibm032
-+ POP_DUMMY_FRAME;
-+ #else
- POP_FRAME;
-+ #endif
- select_frame (read_register (FP_REGNUM), 0);
- }
- }
-***************
-*** 841,846 ****
---- 858,865 ----
- printf ("\nUse the \"handle\" command to change these tables.\n");
- }
-
-+ infruninitialize() {initialize();}
-+
- static
- initialize ()
- {
-diff -c ../../gnu/gdb/initialize.h ./initialize.h
-*** ../../gnu/gdb/initialize.h Sat Apr 4 22:58:27 1987
---- ./initialize.h Sun May 24 00:19:21 1987
-***************
-*** 103,109 ****
---- 103,120 ----
- of the end of one object file's text to the start of the next
- object file's text. */
-
-+ /* Changed to use ifdefs on the machine type. David Nichols, 11/28/86 */
-+ #ifdef ibm032
-+ #include "m-ibm032init.h"
-+ #endif
-+
-+ #ifdef vax
- #include "m-vaxinit.h"
-+ #endif
-+
-+ #ifdef sun
-+ #include "m-suninit.h"
-+ #endif
-
- /* This is used to make a file's initialization function.
- It calls another function named `initialize', which must
-diff -c ../../gnu/gdb/main.c ./main.c
-*** ../../gnu/gdb/main.c Sat Apr 4 23:11:59 1987
---- ./main.c Mon Apr 27 00:27:21 1987
-***************
-*** 236,241 ****
---- 236,243 ----
- if (*p)
- {
- c = lookup_cmd (&p, cmdlist, "", 0);
-+ if (c->function == 0)
-+ error ("That is not a command, just a help topic.");
- if (c->class == (int) class_user)
- {
- if (*p)
-***************
-*** 457,463 ****
-
- /* Add an element to the list of commands. */
-
-! void
- add_com (name, class, fun, doc)
- char *name;
- int class;
---- 459,465 ----
-
- /* Add an element to the list of commands. */
-
-! struct cmd_list_element *
- add_com (name, class, fun, doc)
- char *name;
- int class;
-***************
-*** 464,470 ****
- void (*fun) ();
- char *doc;
- {
-! add_cmd (name, class, fun, doc, &cmdlist);
- }
-
- /* Add an alias or abbreviation command to the list of commands. */
---- 466,473 ----
- void (*fun) ();
- char *doc;
- {
-!
-! return add_cmd (name, class, fun, doc, &cmdlist);
- }
-
- /* Add an alias or abbreviation command to the list of commands. */
-***************
-*** 547,552 ****
---- 550,556 ----
-
- if (c && c->class == (int) class_user)
- free_command_lines (&c->function);
-+
-
- add_com (comname, class_user, cmds,
- (c && c->class == (int) class_user)
-diff -c ../../gnu/gdb/param.h ./param.h
-*** ../../gnu/gdb/param.h Sat Apr 4 23:15:44 1987
---- ./param.h Mon Apr 27 00:28:17 1987
-***************
-*** 1 ****
---- 1,19 ----
-+ /* Changed to use ifdefs so we don't have to edit it all the time.
-+ David Nichols
-+ 28 November 1986 */
-+
-+ #ifdef vax
- #include "m-vax.h"
-+ #endif
-+
-+ #ifdef ibm032
-+ #include "m-ibm032.h"
-+ #endif
-+
-+ #ifdef sun
-+ #ifdef mc68020
-+ #include "m-sun3.h"
-+ #else
-+ #include "m-sun2.h"
-+ #endif
-+ #endif
-diff -c ../../gnu/gdb/pinsn.c ./pinsn.c
-*** ../../gnu/gdb/pinsn.c Sat Apr 4 23:15:58 1987
---- ./pinsn.c Mon Apr 27 00:28:36 1987
-***************
-*** 1 ****
---- 1,15 ----
-+ /* Changed to use ifdefs so we don't have to edit this.
-+ David Nichols
-+ 28 Nov 1986 */
-+
-+ #ifdef ibm032
-+ #include "ibm032-pinsn.c"
-+ #endif
-+
-+ #ifdef vax
- #include "vax-pinsn.c"
-+ #endif
-+
-+ #ifdef sun
-+ #include "m68k-pinsn.c"
-+ #endif
-diff -c ../../gnu/gdb/printcmd.c ./printcmd.c
-*** ../../gnu/gdb/printcmd.c Sat Apr 4 23:17:03 1987
---- ./printcmd.c Mon Apr 27 00:30:52 1987
-***************
-*** 797,804 ****
- CORE_ADDR frame;
- FILE *stream;
- {
-! char *space = (char *) alloca (TYPE_LENGTH (SYMBOL_TYPE (var)));
- value val = read_var_value (var, frame);
- value_print (val, stream);
- }
-
---- 797,805 ----
- CORE_ADDR frame;
- FILE *stream;
- {
-! char *space;
- value val = read_var_value (var, frame);
-+ space = (char *) alloca (TYPE_LENGTH (SYMBOL_TYPE (var)));
- value_print (val, stream);
- }
-
-***************
-*** 883,888 ****
---- 884,891 ----
- }
- }
-
-+ printcmdinitialize() {initialize();}
-+
- static
- initialize ()
- {
-diff -c ../../gnu/gdb/source.c ./source.c
-*** ../../gnu/gdb/source.c Sat Apr 4 23:17:55 1987
---- ./source.c Mon Apr 27 00:31:25 1987
-***************
-*** 276,282 ****
- if (get_exec_file () != 0 && exec_mtime < st.st_mtime)
- printf ("Source file is more recent than executable.\n");
-
-! data = (char *) alloca (st.st_size);
- myread (desc, data, st.st_size, s->filename);
- end = data + st.st_size;
- p = data;
---- 276,283 ----
- if (get_exec_file () != 0 && exec_mtime < st.st_mtime)
- printf ("Source file is more recent than executable.\n");
-
-! data = (char *) alloca(st.st_size);
-!
- myread (desc, data, st.st_size, s->filename);
- end = data + st.st_size;
- p = data;
-***************
-*** 530,535 ****
---- 531,538 ----
- printf ("Line number %d is out of range for \"%s\".\n",
- sal.line, sal.symtab->filename);
- }
-+
-+ sourceinitialize() {initialize();}
-
- static
- initialize ()
-diff -c ../../gnu/gdb/stack.c ./stack.c
-*** ../../gnu/gdb/stack.c Sun Apr 5 00:28:05 1987
---- ./stack.c Mon Apr 27 00:31:50 1987
-***************
-*** 511,516 ****
---- 511,517 ----
-
- print_stack_frame (selected_frame, selected_frame_level, 1);
- }
-+
-
- static void
- return_command (retval_exp)
-***************
-*** 538,543 ****
---- 539,546 ----
- frame_command ("0", 1);
- }
-
-+ stackinitialize() {initialize();}
-+
- static
- initialize ()
- {
-diff -c ../../gnu/gdb/symmisc.c ./symmisc.c
-*** ../../gnu/gdb/symmisc.c Sun Apr 5 00:33:16 1987
---- ./symmisc.c Mon Apr 27 00:37:46 1987
-***************
-*** 504,509 ****
---- 504,511 ----
- return i;
- }
-
-+ symmiscinitialize() {initialize();}
-+
- static
- initialize ()
- {
-diff -c ../../gnu/gdb/symtab.c ./symtab.c
-*** ../../gnu/gdb/symtab.c Sun Apr 5 00:35:45 1987
---- ./symtab.c Mon Apr 27 00:38:19 1987
-***************
-*** 71,78 ****
- strcpy (copy, name);
- strcat (copy, ".c");
- for (s = symtab_list; s; s = s->next)
-! if (!strcmp (copy, s->filename))
- return s;
-
- return 0;
- }
---- 71,79 ----
- strcpy (copy, name);
- strcat (copy, ".c");
- for (s = symtab_list; s; s = s->next)
-! if (!strcmp (copy, s->filename)) {
- return s;
-+ }
-
- return 0;
- }
-***************
-*** 703,709 ****
- register struct symbol *sym;
- register CORE_ADDR pc;
- register int i;
-! char *copy;
-
- /* Defaults have defaults. */
-
---- 704,710 ----
- register struct symbol *sym;
- register CORE_ADDR pc;
- register int i;
-! char *copy, *dotcopy;
-
- /* Defaults have defaults. */
-
-***************
-*** 818,825 ****
---- 819,847 ----
- /* Look up that token as a function.
- If file specified, use that file's per-file block to start with. */
-
-+ #ifdef ibm032
-+ /* RT has stupid dots in front of function names (_.foo), and worse, has bogus _foo
-+ symbol to confuse us, too.
-+ */
-+ if (*copy != '.') {
-+ dotcopy = (char *) alloca (strlen(copy)+2); /* one for the null and one for the dot */
-+ dotcopy[0] = '.';
-+ strcpy(dotcopy+1, copy);
-+ sym = lookup_symbol (dotcopy, s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), 1) : 0,
-+ VAR_NAMESPACE);
-+ }
-+ else {
-+ sym = 0;
-+ dotcopy = 0;
-+ }
-+ if (!sym || SYMBOL_CLASS(sym) != LOC_BLOCK) {
-+ sym = lookup_symbol (copy, s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), 1) : 0,
-+ VAR_NAMESPACE);
-+ }
-+ #else
- sym = lookup_symbol (copy, s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), 1) : 0,
- VAR_NAMESPACE);
-+ #endif
-
- if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
- {
-***************
-*** 835,840 ****
---- 857,875 ----
- if (sym)
- error ("%s is not a function.", copy);
-
-+ #ifdef ibm032
-+ /* try the dot version first */
-+ if (dotcopy) for (i = 0; i < misc_function_count; i++)
-+ if (!strcmp (misc_function_vector[i].name, dotcopy))
-+ {
-+ value.symtab = 0;
-+ value.line = 0;
-+ value.pc = misc_function_vector[i].address + FUNCTION_START_OFFSET;
-+ if (funfirstline)
-+ SKIP_PROLOGUE (value.pc);
-+ return value;
-+ }
-+ #endif
- for (i = 0; i < misc_function_count; i++)
- if (!strcmp (misc_function_vector[i].name, copy))
- {
-***************
-*** 1027,1032 ****
---- 1062,1069 ----
-
- return type;
- }
-+
-+ symtabinitialize() {initialize();}
-
- static
- initialize ()
-diff -c ../../gnu/gdb/utils.c ./utils.c
-*** ../../gnu/gdb/utils.c Sun Apr 5 00:40:01 1987
---- ./utils.c Mon Apr 27 00:40:01 1987
-***************
-*** 151,156 ****
---- 151,157 ----
- else
- err = "unknown error";
-
-+ /* ibm032: no core leak or other problems 'cause we alway call error -> longjmps away */
- combined = (char *) alloca (strlen (err) + strlen (string) + 3);
- strcpy (combined, string);
- strcat (combined, ": ");
-diff -c ../../gnu/gdb/valarith.c ./valarith.c
-*** ../../gnu/gdb/valarith.c Sun Apr 5 00:40:44 1987
---- ./valarith.c Fri May 22 20:18:46 1987
-***************
-*** 239,245 ****
- COERCE_ARRAY (arg1);
-
- len = TYPE_LENGTH (VALUE_TYPE (arg1));
-! p = VALUE_CONTENTS (arg1);
-
- while (--len >= 0)
- {
---- 239,245 ----
- COERCE_ARRAY (arg1);
-
- len = TYPE_LENGTH (VALUE_TYPE (arg1));
-! p = (char *) VALUE_CONTENTS (arg1);
-
- while (--len >= 0)
- {
-***************
-*** 281,288 ****
- && ((len = TYPE_LENGTH (VALUE_TYPE (arg1)))
- == TYPE_LENGTH (VALUE_TYPE (arg2))))
- {
-! p1 = VALUE_CONTENTS (arg1);
-! p2 = VALUE_CONTENTS (arg2);
- while (--len >= 0)
- {
- if (*p1++ != *p2++)
---- 281,288 ----
- && ((len = TYPE_LENGTH (VALUE_TYPE (arg1)))
- == TYPE_LENGTH (VALUE_TYPE (arg2))))
- {
-! p1 = (char *) VALUE_CONTENTS (arg1);
-! p2 = (char *) VALUE_CONTENTS (arg2);
- while (--len >= 0)
- {
- if (*p1++ != *p2++)
-***************
-*** 348,353 ****
---- 348,355 ----
- return value_from_long (VALUE_TYPE (arg1), ~ value_as_long (arg1));
- }
-
-+ valarithinitialize() {initialize();}
-+
- static
- initialize ()
- {
-diff -c ../../gnu/gdb/valops.c ./valops.c
-*** ../../gnu/gdb/valops.c Sun Apr 5 00:41:32 1987
---- ./valops.c Fri May 22 20:13:02 1987
-***************
-*** 174,180 ****
- /* Return a value just like TOVAL except with the contents of FROMVAL. */
-
- val = allocate_value (type);
-! bcopy (toval, val, VALUE_CONTENTS (val) - (char *) val);
- bcopy (VALUE_CONTENTS (fromval), VALUE_CONTENTS (val), TYPE_LENGTH (type));
-
- return val;
---- 174,180 ----
- /* Return a value just like TOVAL except with the contents of FROMVAL. */
-
- val = allocate_value (type);
-! bcopy (toval, val, (char *) VALUE_CONTENTS (val) - (char *) val);
- bcopy (VALUE_CONTENTS (fromval), VALUE_CONTENTS (val), TYPE_LENGTH (type));
-
- return val;
-***************
-*** 413,419 ****
---- 413,427 ----
- }
- else if (code == TYPE_CODE_PTR)
- {
-+ #ifdef ibm032
-+ /* apparently '_a' pseudoprocedure has lval_memory as its lval type */
-+ if (VALUE_LVAL(function) == lval_memory)
-+ funaddr = VALUE_ADDRESS(function);
-+ else
-+ funaddr = value_as_long (function);
-+ #else
- funaddr = value_as_long (function);
-+ #endif
- if (TYPE_CODE (TYPE_TARGET_TYPE (ftype))
- == TYPE_CODE_FUNC)
- value_type = TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (ftype));
-***************
-*** 429,439 ****
- else
- /* Handle integer used as address of a function. */
- funaddr = value_as_long (function);
--
- value_type = builtin_type_int;
- }
-! else
- error ("Invalid data type for function to be called.");
-
- /* Create a call sequence customized for this function
- and the number of arguments for it. */
---- 437,447 ----
- else
- /* Handle integer used as address of a function. */
- funaddr = value_as_long (function);
- value_type = builtin_type_int;
- }
-! else {
- error ("Invalid data type for function to be called.");
-+ }
-
- /* Create a call sequence customized for this function
- and the number of arguments for it. */
-***************
-*** 590,595 ****
---- 598,605 ----
- return value_field (arg1, i);
- }
-
-+ valopsinitialize() {initialize();}
-+
- static
- initialize ()
- { }
-diff -c ../../gnu/gdb/valprint.c ./valprint.c
-*** ../../gnu/gdb/valprint.c Sun Apr 5 00:42:28 1987
---- ./valprint.c Mon Apr 27 00:40:56 1987
-***************
-*** 529,534 ****
---- 529,536 ----
- print_max = atoi (arg);
- }
-
-+ valprintinitialize() {initialize();}
-+
- static
- initialize ()
- {
-diff -c ../../gnu/gdb/value.h ./value.h
-*** ../../gnu/gdb/value.h Sun Apr 5 00:43:44 1987
---- ./value.h Fri May 22 20:03:32 1987
-***************
-*** 37,43 ****
- short repeated;
- short repetitions;
- short regno;
-! char contents[1];
- };
-
- typedef struct value *value;
---- 37,43 ----
- short repeated;
- short repetitions;
- short regno;
-! long contents[1]; /* Forces alignment... */
- };
-
- typedef struct value *value;
-diff -c ../../gnu/gdb/values.c ./values.c
-*** ../../gnu/gdb/values.c Sun Apr 5 00:45:14 1987
---- ./values.c Fri May 22 20:12:40 1987
-***************
-*** 338,344 ****
- int offset, bitpos, bitsize;
- value newval;
- {
-! register char *addr = VALUE_CONTENTS (var->value) + offset;
- if (bitsize)
- modify_field (addr, value_as_long (newval),
- bitpos, bitsize);
---- 338,344 ----
- int offset, bitpos, bitsize;
- value newval;
- {
-! register char *addr = (char *) VALUE_CONTENTS (var->value) + offset;
- if (bitsize)
- modify_field (addr, value_as_long (newval),
- bitpos, bitsize);
-***************
-*** 733,738 ****
---- 733,740 ----
- write_register (1, retbuf[1]);
- }
-
-+ valuesinitialize() {initialize();}
-+
- static
- initialize ()
- {
-