1991-03-28 17:28:29 +01:00
|
|
|
|
/* Definitions to make GDB run on a Pyramidax under OSx 4.0 (4.2bsd).
|
|
|
|
|
Copyright (C) 1988, 1989 Free Software Foundation, Inc.
|
|
|
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
1991-06-04 09:31:55 +02:00
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
1991-03-28 17:28:29 +01:00
|
|
|
|
it under the terms of the GNU General Public License as published by
|
1991-06-04 09:31:55 +02:00
|
|
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
(at your option) any later version.
|
1991-03-28 17:28:29 +01:00
|
|
|
|
|
1991-06-04 09:31:55 +02:00
|
|
|
|
This program is distributed in the hope that it will be useful,
|
1991-03-28 17:28:29 +01:00
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
1991-06-04 09:31:55 +02:00
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
1991-03-28 17:28:29 +01:00
|
|
|
|
|
|
|
|
|
#define HOST_BYTE_ORDER BIG_ENDIAN
|
|
|
|
|
|
|
|
|
|
/* Define PYRAMID_CONTROL_FRAME_DEBUGGING to get copious messages
|
|
|
|
|
about reading the control stack on standard output. This
|
|
|
|
|
makes gdb unusable as a debugger. */
|
|
|
|
|
|
|
|
|
|
/* #define PYRAMID_CONTROL_FRAME_DEBUGGING */
|
|
|
|
|
|
|
|
|
|
/* Define PYRAMID_FRAME_DEBUGGING for ? */
|
|
|
|
|
|
|
|
|
|
/* use Pyramid's slightly strange ptrace */
|
|
|
|
|
#define PYRAMID_PTRACE
|
|
|
|
|
|
|
|
|
|
/* Traditional Unix virtual address spaces have thre regions: text,
|
|
|
|
|
data and stack. The text, initialised data, and uninitialised data
|
|
|
|
|
are represented in separate segments of the a.out file.
|
|
|
|
|
When a process dumps core, the data and stack regions are written
|
|
|
|
|
to a core file. This gives a debugger enough information to
|
|
|
|
|
reconstruct (and debug) the virtual address space at the time of
|
|
|
|
|
the coredump.
|
|
|
|
|
Pyramids have an distinct fourth region of the virtual address
|
|
|
|
|
space, in which the contents of the windowed registers are stacked
|
|
|
|
|
in fixed-size frames. Pyramid refer to this region as the control
|
|
|
|
|
stack. Each call (or trap) automatically allocates a new register
|
|
|
|
|
frame; each return deallocates the current frame and restores the
|
|
|
|
|
windowed registers to their values before the call.
|
|
|
|
|
|
|
|
|
|
When dumping core, the control stack is written to a core files as
|
|
|
|
|
a third segment. The core-handling functions need to know to deal
|
|
|
|
|
with it. */
|
|
|
|
|
|
|
|
|
|
/* Tell dep.c what the extra segment is. */
|
|
|
|
|
#define PYRAMID_CORE
|
|
|
|
|
|
|
|
|
|
#define NO_SIGINTERRUPT
|
|
|
|
|
|
|
|
|
|
#define HAVE_WAIT_STRUCT
|
|
|
|
|
|
|
|
|
|
/* Get rid of any system-imposed stack limit if possible. */
|
|
|
|
|
|
|
|
|
|
#define SET_STACK_LIMIT_HUGE
|
|
|
|
|
|
|
|
|
|
/* 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 (0x80000000 - (UPAGES * NBPG))
|
|
|
|
|
|
|
|
|
|
/* Define offsets of registers in the core file (or maybe u area) */
|
|
|
|
|
#define REGISTER_U_ADDR(addr, blockend, regno) \
|
|
|
|
|
{ struct user __u; \
|
|
|
|
|
addr = blockend + (regno - 16 ) * 4; \
|
|
|
|
|
if (regno == 67) { \
|
|
|
|
|
printf("\\geting reg 67\\"); \
|
|
|
|
|
addr = (int)(&__u.u_pcb.pcb_csp) - (int) &__u; \
|
|
|
|
|
} else if (regno == KSP_REGNUM) { \
|
|
|
|
|
printf("\\geting KSP (reg %d)\\", KSP_REGNUM); \
|
|
|
|
|
addr = (int)(&__u.u_pcb.pcb_ksp) - (int) &__u; \
|
|
|
|
|
} else if (regno == CSP_REGNUM) { \
|
|
|
|
|
printf("\\geting CSP (reg %d\\",CSP_REGNUM); \
|
|
|
|
|
addr = (int)(&__u.u_pcb.pcb_csp) - (int) &__u; \
|
|
|
|
|
} else if (regno == 64) { \
|
|
|
|
|
printf("\\geting reg 64\\"); \
|
|
|
|
|
addr = (int)(&__u.u_pcb.pcb_csp) - (int) &__u; \
|
|
|
|
|
} else if (regno == PS_REGNUM) \
|
|
|
|
|
addr = blockend - 4; \
|
|
|
|
|
else if (1 && ((16 > regno) && (regno > 11))) \
|
|
|
|
|
addr = last_frame_offset + (4 *(regno+32)); \
|
|
|
|
|
else if (0 && (12 > regno)) \
|
|
|
|
|
addr = global_reg_offset + (4 *regno); \
|
|
|
|
|
else if (16 > regno) \
|
|
|
|
|
addr = global_reg_offset + (4 *regno); \
|
|
|
|
|
else \
|
|
|
|
|
addr = blockend + (regno - 16 ) * 4; \
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Override copies of {fetch,store}_inferior_registers in infptrace.c. */
|
|
|
|
|
#define FETCH_INFERIOR_REGISTERS
|
|
|
|
|
|
|
|
|
|
/* Compensate for lack of `vprintf' function. */
|
|
|
|
|
#define MISSING_VPRINTF
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Interface definitions for kernel debugger KDB. */
|
|
|
|
|
|
|
|
|
|
/* I have *no idea* how to debug OSx kernels, so this
|
|
|
|
|
is flushed, possible forever. */
|