diff options
Diffstat (limited to 'gdb/config')
62 files changed, 191 insertions, 1846 deletions
diff --git a/gdb/config/a29k/a29k-udi.mt b/gdb/config/a29k/a29k-udi.mt deleted file mode 100644 index 6fe45b0..0000000 --- a/gdb/config/a29k/a29k-udi.mt +++ /dev/null @@ -1,5 +0,0 @@ -# OBSOLETE # Target: AMD 29000 on EB29K board over a serial line -# OBSOLETE TDEPFILES= a29k-tdep.o remote-udi.o udip2soc.o udr.o udi2go32.o -# OBSOLETE TM_FILE= tm-a29k.h -# OBSOLETE -# OBSOLETE MT_CFLAGS = $(HOST_IPC) diff --git a/gdb/config/a29k/a29k.mt b/gdb/config/a29k/a29k.mt deleted file mode 100644 index b235c05..0000000 --- a/gdb/config/a29k/a29k.mt +++ /dev/null @@ -1,5 +0,0 @@ -# OBSOLETE # Target: AMD 29000 -# OBSOLETE TDEPFILES= a29k-tdep.o remote-eb.o remote-adapt.o -# OBSOLETE TM_FILE= tm-a29k.h -# OBSOLETE -# OBSOLETE MT_CFLAGS = -DNO_HIF_SUPPORT diff --git a/gdb/config/a29k/tm-a29k.h b/gdb/config/a29k/tm-a29k.h deleted file mode 100644 index c296f59..0000000 --- a/gdb/config/a29k/tm-a29k.h +++ /dev/null @@ -1,722 +0,0 @@ -/* OBSOLETE /* Parameters for target machine AMD 29000, for GDB, the GNU debugger. */ -/* OBSOLETE Copyright 1990, 1991, 1993, 1994, 1995, 1996, 1998, 1999, 2000, */ -/* OBSOLETE 2001 Free Software Foundation, Inc. */ -/* OBSOLETE Contributed by Cygnus Support. Written by Jim Kingdon. */ -/* OBSOLETE */ -/* OBSOLETE This file is part of GDB. */ -/* OBSOLETE */ -/* OBSOLETE This program is free software; you can redistribute it and/or modify */ -/* OBSOLETE it under the terms of the GNU General Public License as published by */ -/* OBSOLETE the Free Software Foundation; either version 2 of the License, or */ -/* OBSOLETE (at your option) any later version. */ -/* OBSOLETE */ -/* OBSOLETE This program is distributed in the hope that it will be useful, */ -/* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */ -/* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ -/* OBSOLETE GNU General Public License for more details. */ -/* OBSOLETE */ -/* OBSOLETE You should have received a copy of the GNU General Public License */ -/* OBSOLETE along with this program; if not, write to the Free Software */ -/* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, */ -/* OBSOLETE Boston, MA 02111-1307, USA. */ */ -/* OBSOLETE */ -/* OBSOLETE #include "regcache.h" */ -/* OBSOLETE */ -/* OBSOLETE /* Parameters for an EB29K (a board which plugs into a PC and is */ -/* OBSOLETE accessed through EBMON software running on the PC, which we */ -/* OBSOLETE use as we'd use a remote stub (see remote-eb.c). */ -/* OBSOLETE */ -/* OBSOLETE If gdb is ported to other a29k machines/systems, the */ -/* OBSOLETE machine/system-specific parts should be removed from this file (a */ -/* OBSOLETE la tm-m68k.h). */ */ -/* OBSOLETE */ -/* OBSOLETE /* Byte order is configurable, but this machine runs big-endian. */ */ -/* OBSOLETE #define TARGET_BYTE_ORDER BFD_ENDIAN_BIG */ -/* OBSOLETE */ -/* OBSOLETE /* Floating point uses IEEE representations. */ */ -/* OBSOLETE #define IEEE_FLOAT (1) */ -/* OBSOLETE */ -/* OBSOLETE /* Recognize our magic number. */ */ -/* OBSOLETE #define BADMAG(x) ((x).f_magic != 0572) */ -/* OBSOLETE */ -/* OBSOLETE /* Offset from address of function to start of its code. */ -/* OBSOLETE Zero on most machines. */ */ -/* OBSOLETE */ -/* OBSOLETE #define FUNCTION_START_OFFSET 0 */ -/* OBSOLETE */ -/* OBSOLETE /* Advance PC across any function entry prologue instructions */ -/* OBSOLETE to reach some "real" code. */ */ -/* OBSOLETE */ -/* OBSOLETE #define SKIP_PROLOGUE(pc) (a29k_skip_prologue (pc)) */ -/* OBSOLETE CORE_ADDR a29k_skip_prologue (); */ -/* OBSOLETE */ -/* OBSOLETE /* Immediately after a function call, return the saved pc. */ -/* OBSOLETE Can't go through the frames for this because on some machines */ -/* OBSOLETE the new frame is not set up until the new function executes */ -/* OBSOLETE some instructions. */ */ -/* OBSOLETE */ -/* OBSOLETE #define SAVED_PC_AFTER_CALL(frame) ((frame->flags & TRANSPARENT_FRAME) \ */ -/* OBSOLETE ? read_register (TPC_REGNUM) \ */ -/* OBSOLETE : read_register (LR0_REGNUM)) */ -/* OBSOLETE */ -/* OBSOLETE /* Stack grows downward. */ */ -/* OBSOLETE */ -/* OBSOLETE #define INNER_THAN(lhs,rhs) ((lhs) < (rhs)) */ -/* OBSOLETE */ -/* OBSOLETE /* Stack must be aligned on 32-bit boundaries when synthesizing */ -/* OBSOLETE function calls. */ */ -/* OBSOLETE */ -/* OBSOLETE #define STACK_ALIGN(ADDR) (((ADDR) + 3) & ~3) */ -/* OBSOLETE */ -/* OBSOLETE /* Sequence of bytes for breakpoint instruction. */ */ -/* OBSOLETE /* ASNEQ 0x50, gr1, gr1 */ -/* OBSOLETE The trap number 0x50 is chosen arbitrarily. */ -/* OBSOLETE We let the command line (or previously included files) override this */ -/* OBSOLETE setting. */ */ -/* OBSOLETE #ifndef BREAKPOINT */ -/* OBSOLETE #if TARGET_BYTE_ORDER == BFD_ENDIAN_BIG */ -/* OBSOLETE #define BREAKPOINT {0x72, 0x50, 0x01, 0x01} */ -/* OBSOLETE #else /* Target is little-endian. */ */ -/* OBSOLETE #define BREAKPOINT {0x01, 0x01, 0x50, 0x72} */ -/* OBSOLETE #endif /* Target is little-endian. */ */ -/* OBSOLETE #endif /* BREAKPOINT */ */ -/* OBSOLETE */ -/* OBSOLETE /* Amount PC must be decremented by after a breakpoint. */ -/* OBSOLETE This is often the number of bytes in BREAKPOINT */ -/* OBSOLETE but not always. */ */ -/* OBSOLETE */ -/* OBSOLETE #define DECR_PC_AFTER_BREAK 0 */ -/* OBSOLETE */ -/* OBSOLETE /* Say how long (ordinary) registers are. This is a piece of bogosity */ -/* OBSOLETE used in push_word and a few other places; REGISTER_RAW_SIZE is the */ -/* OBSOLETE real way to know how big a register is. */ */ -/* OBSOLETE */ -/* OBSOLETE #define REGISTER_SIZE 4 */ -/* OBSOLETE */ -/* OBSOLETE /* Allow the register declarations here to be overridden for remote */ -/* OBSOLETE kernel debugging. */ */ -/* OBSOLETE #if !defined (REGISTER_NAMES) */ -/* OBSOLETE */ -/* OBSOLETE /* Number of machine registers */ */ -/* OBSOLETE */ -/* OBSOLETE #define NUM_REGS 205 */ -/* OBSOLETE */ -/* OBSOLETE /* Initializer for an array of names of registers. */ -/* OBSOLETE There should be NUM_REGS strings in this initializer. */ -/* OBSOLETE */ -/* OBSOLETE FIXME, add floating point registers and support here. */ -/* OBSOLETE */ -/* OBSOLETE Also note that this list does not attempt to deal with kernel */ -/* OBSOLETE debugging (in which the first 32 registers are gr64-gr95). */ */ -/* OBSOLETE */ -/* OBSOLETE #define REGISTER_NAMES \ */ -/* OBSOLETE {"gr96", "gr97", "gr98", "gr99", "gr100", "gr101", "gr102", "gr103", "gr104", \ */ -/* OBSOLETE "gr105", "gr106", "gr107", "gr108", "gr109", "gr110", "gr111", "gr112", \ */ -/* OBSOLETE "gr113", "gr114", "gr115", "gr116", "gr117", "gr118", "gr119", "gr120", \ */ -/* OBSOLETE "gr121", "gr122", "gr123", "gr124", "gr125", "gr126", "gr127", \ */ -/* OBSOLETE "lr0", "lr1", "lr2", "lr3", "lr4", "lr5", "lr6", "lr7", "lr8", "lr9", \ */ -/* OBSOLETE "lr10", "lr11", "lr12", "lr13", "lr14", "lr15", "lr16", "lr17", "lr18", \ */ -/* OBSOLETE "lr19", "lr20", "lr21", "lr22", "lr23", "lr24", "lr25", "lr26", "lr27", \ */ -/* OBSOLETE "lr28", "lr29", "lr30", "lr31", "lr32", "lr33", "lr34", "lr35", "lr36", \ */ -/* OBSOLETE "lr37", "lr38", "lr39", "lr40", "lr41", "lr42", "lr43", "lr44", "lr45", \ */ -/* OBSOLETE "lr46", "lr47", "lr48", "lr49", "lr50", "lr51", "lr52", "lr53", "lr54", \ */ -/* OBSOLETE "lr55", "lr56", "lr57", "lr58", "lr59", "lr60", "lr61", "lr62", "lr63", \ */ -/* OBSOLETE "lr64", "lr65", "lr66", "lr67", "lr68", "lr69", "lr70", "lr71", "lr72", \ */ -/* OBSOLETE "lr73", "lr74", "lr75", "lr76", "lr77", "lr78", "lr79", "lr80", "lr81", \ */ -/* OBSOLETE "lr82", "lr83", "lr84", "lr85", "lr86", "lr87", "lr88", "lr89", "lr90", \ */ -/* OBSOLETE "lr91", "lr92", "lr93", "lr94", "lr95", "lr96", "lr97", "lr98", "lr99", \ */ -/* OBSOLETE "lr100", "lr101", "lr102", "lr103", "lr104", "lr105", "lr106", "lr107", \ */ -/* OBSOLETE "lr108", "lr109", "lr110", "lr111", "lr112", "lr113", "lr114", "lr115", \ */ -/* OBSOLETE "lr116", "lr117", "lr118", "lr119", "lr120", "lr121", "lr122", "lr123", \ */ -/* OBSOLETE "lr124", "lr125", "lr126", "lr127", \ */ -/* OBSOLETE "AI0", "AI1", "AI2", "AI3", "AI4", "AI5", "AI6", "AI7", "AI8", "AI9", \ */ -/* OBSOLETE "AI10", "AI11", "AI12", "AI13", "AI14", "AI15", "FP", \ */ -/* OBSOLETE "bp", "fc", "cr", "q", \ */ -/* OBSOLETE "vab", "ops", "cps", "cfg", "cha", "chd", "chc", "rbp", "tmc", "tmr", \ */ -/* OBSOLETE "pc0", "pc1", "pc2", "mmu", "lru", "fpe", "inte", "fps", "exo", "gr1", \ */ -/* OBSOLETE "alu", "ipc", "ipa", "ipb" } */ -/* OBSOLETE */ -/* OBSOLETE /* */ -/* OBSOLETE * Converts an sdb register number to an internal gdb register number. */ -/* OBSOLETE * Currently under epi, gr96->0...gr127->31...lr0->32...lr127->159, or... */ -/* OBSOLETE * gr64->0...gr95->31, lr0->32...lr127->159. */ -/* OBSOLETE */ */ -/* OBSOLETE #define SDB_REG_TO_REGNUM(value) \ */ -/* OBSOLETE (((value) >= 96 && (value) <= 127) ? ((value) - 96) : \ */ -/* OBSOLETE ((value) >= 128 && (value) <= 255) ? ((value) - 128 + LR0_REGNUM) : \ */ -/* OBSOLETE (value)) */ -/* OBSOLETE */ -/* OBSOLETE /* */ -/* OBSOLETE * Provide the processor register numbers of some registers that are */ -/* OBSOLETE * expected/written in instructions that might change under different */ -/* OBSOLETE * register sets. Namely, gcc can compile (-mkernel-registers) so that */ -/* OBSOLETE * it uses gr64-gr95 in stead of gr96-gr127. */ -/* OBSOLETE */ */ -/* OBSOLETE #define MSP_HW_REGNUM 125 /* gr125 */ */ -/* OBSOLETE #define RAB_HW_REGNUM 126 /* gr126 */ */ -/* OBSOLETE */ -/* OBSOLETE /* Convert Processor Special register #x to REGISTER_NAMES register # */ */ -/* OBSOLETE #define SR_REGNUM(x) \ */ -/* OBSOLETE ((x) < 15 ? VAB_REGNUM + (x) \ */ -/* OBSOLETE : (x) >= 128 && (x) < 131 ? IPC_REGNUM + (x) - 128 \ */ -/* OBSOLETE : (x) == 131 ? Q_REGNUM \ */ -/* OBSOLETE : (x) == 132 ? ALU_REGNUM \ */ -/* OBSOLETE : (x) >= 133 && (x) < 136 ? BP_REGNUM + (x) - 133 \ */ -/* OBSOLETE : (x) >= 160 && (x) < 163 ? FPE_REGNUM + (x) - 160 \ */ -/* OBSOLETE : (x) == 164 ? EXO_REGNUM \ */ -/* OBSOLETE : (error ("Internal error in SR_REGNUM"), 0)) */ -/* OBSOLETE #define GR96_REGNUM 0 */ -/* OBSOLETE */ -/* OBSOLETE /* Define the return register separately, so it can be overridden for */ -/* OBSOLETE kernel procedure calling conventions. */ */ -/* OBSOLETE #define RETURN_REGNUM GR96_REGNUM */ -/* OBSOLETE #define GR1_REGNUM 200 */ -/* OBSOLETE /* This needs to be the memory stack pointer, not the register stack pointer, */ -/* OBSOLETE to make call_function work right. */ */ -/* OBSOLETE #define SP_REGNUM MSP_REGNUM */ -/* OBSOLETE #define FP_REGNUM 33 /* lr1 */ */ -/* OBSOLETE */ -/* OBSOLETE /* Return register for transparent calling convention (gr122). */ */ -/* OBSOLETE #define TPC_REGNUM (122 - 96 + GR96_REGNUM) */ -/* OBSOLETE */ -/* OBSOLETE /* Large Return Pointer (gr123). */ */ -/* OBSOLETE #define LRP_REGNUM (123 - 96 + GR96_REGNUM) */ -/* OBSOLETE */ -/* OBSOLETE /* Static link pointer (gr124). */ */ -/* OBSOLETE #define SLP_REGNUM (124 - 96 + GR96_REGNUM) */ -/* OBSOLETE */ -/* OBSOLETE /* Memory Stack Pointer (gr125). */ */ -/* OBSOLETE #define MSP_REGNUM (125 - 96 + GR96_REGNUM) */ -/* OBSOLETE */ -/* OBSOLETE /* Register allocate bound (gr126). */ */ -/* OBSOLETE #define RAB_REGNUM (126 - 96 + GR96_REGNUM) */ -/* OBSOLETE */ -/* OBSOLETE /* Register Free Bound (gr127). */ */ -/* OBSOLETE #define RFB_REGNUM (127 - 96 + GR96_REGNUM) */ -/* OBSOLETE */ -/* OBSOLETE /* Register Stack Pointer. */ */ -/* OBSOLETE #define RSP_REGNUM GR1_REGNUM */ -/* OBSOLETE #define LR0_REGNUM 32 */ -/* OBSOLETE #define BP_REGNUM 177 */ -/* OBSOLETE #define FC_REGNUM 178 */ -/* OBSOLETE #define CR_REGNUM 179 */ -/* OBSOLETE #define Q_REGNUM 180 */ -/* OBSOLETE #define VAB_REGNUM 181 */ -/* OBSOLETE #define OPS_REGNUM (VAB_REGNUM + 1) */ -/* OBSOLETE #define CPS_REGNUM (VAB_REGNUM + 2) */ -/* OBSOLETE #define CFG_REGNUM (VAB_REGNUM + 3) */ -/* OBSOLETE #define CHA_REGNUM (VAB_REGNUM + 4) */ -/* OBSOLETE #define CHD_REGNUM (VAB_REGNUM + 5) */ -/* OBSOLETE #define CHC_REGNUM (VAB_REGNUM + 6) */ -/* OBSOLETE #define RBP_REGNUM (VAB_REGNUM + 7) */ -/* OBSOLETE #define TMC_REGNUM (VAB_REGNUM + 8) */ -/* OBSOLETE #define TMR_REGNUM (VAB_REGNUM + 9) */ -/* OBSOLETE #define NPC_REGNUM (VAB_REGNUM + 10) /* pc0 */ */ -/* OBSOLETE #define PC_REGNUM (VAB_REGNUM + 11) /* pc1 */ */ -/* OBSOLETE #define PC2_REGNUM (VAB_REGNUM + 12) */ -/* OBSOLETE #define MMU_REGNUM (VAB_REGNUM + 13) */ -/* OBSOLETE #define LRU_REGNUM (VAB_REGNUM + 14) */ -/* OBSOLETE #define FPE_REGNUM (VAB_REGNUM + 15) */ -/* OBSOLETE #define INTE_REGNUM (VAB_REGNUM + 16) */ -/* OBSOLETE #define FPS_REGNUM (VAB_REGNUM + 17) */ -/* OBSOLETE #define EXO_REGNUM (VAB_REGNUM + 18) */ -/* OBSOLETE /* gr1 is defined above as 200 = VAB_REGNUM + 19 */ */ -/* OBSOLETE #define ALU_REGNUM (VAB_REGNUM + 20) */ -/* OBSOLETE #define PS_REGNUM ALU_REGNUM */ -/* OBSOLETE #define IPC_REGNUM (VAB_REGNUM + 21) */ -/* OBSOLETE #define IPA_REGNUM (VAB_REGNUM + 22) */ -/* OBSOLETE #define IPB_REGNUM (VAB_REGNUM + 23) */ -/* OBSOLETE */ -/* OBSOLETE #endif /* !defined(REGISTER_NAMES) */ */ -/* OBSOLETE */ -/* OBSOLETE /* Total amount of space needed to store our copies of the machine's */ -/* OBSOLETE register state, the array `registers'. */ */ -/* OBSOLETE #define REGISTER_BYTES (NUM_REGS * 4) */ -/* OBSOLETE */ -/* OBSOLETE /* Index within `registers' of the first byte of the space for */ -/* OBSOLETE register N. */ */ -/* OBSOLETE #define REGISTER_BYTE(N) ((N)*4) */ -/* OBSOLETE */ -/* OBSOLETE /* Number of bytes of storage in the actual machine representation */ -/* OBSOLETE for register N. */ */ -/* OBSOLETE */ -/* OBSOLETE /* All regs are 4 bytes. */ */ -/* OBSOLETE */ -/* OBSOLETE #define REGISTER_RAW_SIZE(N) (4) */ -/* OBSOLETE */ -/* OBSOLETE /* Number of bytes of storage in the program's representation */ -/* OBSOLETE for register N. */ */ -/* OBSOLETE */ -/* OBSOLETE /* All regs are 4 bytes. */ */ -/* OBSOLETE */ -/* OBSOLETE #define REGISTER_VIRTUAL_SIZE(N) (4) */ -/* OBSOLETE */ -/* OBSOLETE /* Largest value REGISTER_RAW_SIZE can have. */ */ -/* OBSOLETE */ -/* OBSOLETE #define MAX_REGISTER_RAW_SIZE (4) */ -/* OBSOLETE */ -/* OBSOLETE /* Largest value REGISTER_VIRTUAL_SIZE can have. */ */ -/* OBSOLETE */ -/* OBSOLETE #define MAX_REGISTER_VIRTUAL_SIZE (4) */ -/* OBSOLETE */ -/* OBSOLETE /* Return the GDB type object for the "standard" data type */ -/* OBSOLETE of data in register N. */ */ -/* OBSOLETE */ -/* OBSOLETE #define REGISTER_VIRTUAL_TYPE(N) \ */ -/* OBSOLETE (((N) == PC_REGNUM || (N) == LRP_REGNUM || (N) == SLP_REGNUM \ */ -/* OBSOLETE || (N) == MSP_REGNUM || (N) == RAB_REGNUM || (N) == RFB_REGNUM \ */ -/* OBSOLETE || (N) == GR1_REGNUM || (N) == FP_REGNUM || (N) == LR0_REGNUM \ */ -/* OBSOLETE || (N) == NPC_REGNUM || (N) == PC2_REGNUM) \ */ -/* OBSOLETE ? lookup_pointer_type (builtin_type_void) : builtin_type_int) */ -/* OBSOLETE */ -/* OBSOLETE /* Store the address of the place in which to copy the structure the */ -/* OBSOLETE subroutine will return. This is called from call_function. */ */ -/* OBSOLETE /* On the a29k the LRP points to the part of the structure beyond the first */ -/* OBSOLETE 16 words. */ */ -/* OBSOLETE #define STORE_STRUCT_RETURN(ADDR, SP) \ */ -/* OBSOLETE write_register (LRP_REGNUM, (ADDR) + 16 * 4); */ -/* OBSOLETE */ -/* OBSOLETE /* Should call_function allocate stack space for a struct return? */ */ -/* OBSOLETE /* On the a29k objects over 16 words require the caller to allocate space. */ */ -/* OBSOLETE extern use_struct_convention_fn a29k_use_struct_convention; */ -/* OBSOLETE #define USE_STRUCT_CONVENTION(gcc_p, type) a29k_use_struct_convention (gcc_p, type) */ -/* OBSOLETE */ -/* OBSOLETE /* Extract from an array REGBUF containing the (raw) register state */ -/* OBSOLETE a function return value of type TYPE, and copy that, in virtual format, */ -/* OBSOLETE into VALBUF. */ */ -/* OBSOLETE */ -/* OBSOLETE #define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \ */ -/* OBSOLETE { \ */ -/* OBSOLETE int reg_length = TYPE_LENGTH (TYPE); \ */ -/* OBSOLETE if (reg_length > 16 * 4) \ */ -/* OBSOLETE { \ */ -/* OBSOLETE reg_length = 16 * 4; \ */ -/* OBSOLETE read_memory (*((int *)(REGBUF) + LRP_REGNUM), (VALBUF) + 16 * 4, \ */ -/* OBSOLETE TYPE_LENGTH (TYPE) - 16 * 4); \ */ -/* OBSOLETE } \ */ -/* OBSOLETE memcpy ((VALBUF), ((int *)(REGBUF))+RETURN_REGNUM, reg_length); \ */ -/* OBSOLETE } */ -/* OBSOLETE */ -/* OBSOLETE /* Write into appropriate registers a function return value */ -/* OBSOLETE of type TYPE, given in virtual format. */ */ -/* OBSOLETE */ -/* OBSOLETE #define STORE_RETURN_VALUE(TYPE,VALBUF) \ */ -/* OBSOLETE { \ */ -/* OBSOLETE int reg_length = TYPE_LENGTH (TYPE); \ */ -/* OBSOLETE if (reg_length > 16 * 4) \ */ -/* OBSOLETE { \ */ -/* OBSOLETE reg_length = 16 * 4; \ */ -/* OBSOLETE write_memory (read_register (LRP_REGNUM), \ */ -/* OBSOLETE (char *)(VALBUF) + 16 * 4, \ */ -/* OBSOLETE TYPE_LENGTH (TYPE) - 16 * 4); \ */ -/* OBSOLETE } \ */ -/* OBSOLETE write_register_bytes (REGISTER_BYTE (RETURN_REGNUM), (char *)(VALBUF), \ */ -/* OBSOLETE TYPE_LENGTH (TYPE)); \ */ -/* OBSOLETE } */ -/* OBSOLETE /* *INDENT-OFF* */ */ -/* OBSOLETE /* The a29k user's guide documents well what the stacks look like. */ -/* OBSOLETE But what isn't so clear there is how this interracts with the */ -/* OBSOLETE symbols, or with GDB. */ -/* OBSOLETE In the following saved_msp, saved memory stack pointer (which functions */ -/* OBSOLETE as a memory frame pointer), means either */ -/* OBSOLETE a register containing the memory frame pointer or, in the case of */ -/* OBSOLETE functions with fixed size memory frames (i.e. those who don't use */ -/* OBSOLETE alloca()), the result of the calculation msp + msize. */ -/* OBSOLETE */ -/* OBSOLETE LOC_ARG, LOC_LOCAL - For GCC, these are relative to saved_msp. */ -/* OBSOLETE For high C, these are relative to msp (making alloca impossible). */ -/* OBSOLETE LOC_REGISTER, LOC_REGPARM - The register number is the number at the */ -/* OBSOLETE time the function is running (after the prologue), or in the case */ -/* OBSOLETE of LOC_REGPARM, may be a register number in the range 160-175. */ -/* OBSOLETE */ -/* OBSOLETE The compilers do things like store an argument into memory, and then put out */ -/* OBSOLETE a LOC_ARG for it, or put it into global registers and put out a */ -/* OBSOLETE LOC_REGPARM. Thus is it important to execute the first line of */ -/* OBSOLETE code (i.e. the line of the open brace, i.e. the prologue) of a function */ -/* OBSOLETE before trying to print arguments or anything. */ -/* OBSOLETE */ -/* OBSOLETE The following diagram attempts to depict what is going on in memory */ -/* OBSOLETE (see also the _a29k user's guide_) and also how that interacts with */ -/* OBSOLETE GDB frames. We arbitrarily pick fci->frame to point the same place */ -/* OBSOLETE as the register stack pointer; since we set it ourself in */ -/* OBSOLETE INIT_EXTRA_FRAME_INFO, and access it only through the FRAME_* */ -/* OBSOLETE macros, it doesn't really matter exactly how we */ -/* OBSOLETE do it. However, note that FRAME_FP is used in two ways in GDB: */ -/* OBSOLETE (1) as a "magic cookie" which uniquely identifies frames (even over */ -/* OBSOLETE calls to the inferior), (2) (in PC_IN_CALL_DUMMY [ON_STACK]) */ -/* OBSOLETE as the value of SP_REGNUM before the dummy frame was pushed. These */ -/* OBSOLETE two meanings would be incompatible for the a29k if we defined */ -/* OBSOLETE CALL_DUMMY_LOCATION == ON_STACK (but we don't, so don't worry about it). */ -/* OBSOLETE Also note that "lr1" below, while called a frame pointer */ -/* OBSOLETE in the user's guide, has only one function: To determine whether */ -/* OBSOLETE registers need to be filled in the function epilogue. */ -/* OBSOLETE */ -/* OBSOLETE Consider the code: */ -/* OBSOLETE < call bar> */ -/* OBSOLETE loc1: . . . */ -/* OBSOLETE bar: sub gr1,gr1,rsize_b */ -/* OBSOLETE . . . */ -/* OBSOLETE add mfp,msp,0 */ -/* OBSOLETE sub msp,msp,msize_b */ -/* OBSOLETE . . . */ -/* OBSOLETE < call foo > */ -/* OBSOLETE loc2: . . . */ -/* OBSOLETE foo: sub gr1,gr1,rsize_f */ -/* OBSOLETE . . . */ -/* OBSOLETE add mfp,msp,0 */ -/* OBSOLETE sub msp,msp,msize_f */ -/* OBSOLETE . . . */ -/* OBSOLETE loc3: < suppose the inferior stops here > */ -/* OBSOLETE */ -/* OBSOLETE memory stack register stack */ -/* OBSOLETE | | |____________| */ -/* OBSOLETE | | |____loc1____| */ -/* OBSOLETE +------->|___________| | | ^ */ -/* OBSOLETE | | ^ | | locals_b | | */ -/* OBSOLETE | | | | |____________| | */ -/* OBSOLETE | | | | | | | rsize_b */ -/* OBSOLETE | | | msize_b | | args_to_f | | */ -/* OBSOLETE | | | | |____________| | */ -/* OBSOLETE | | | | |____lr1_____| V */ -/* OBSOLETE | | V | |____loc2____|<----------------+ */ -/* OBSOLETE | +--->|___________|<---------mfp | ^ | */ -/* OBSOLETE | | | ^ | | locals_f | | | */ -/* OBSOLETE | | | | msize_f | |____________| | | */ -/* OBSOLETE | | | | | | | | rsize_f | */ -/* OBSOLETE | | | V | | args | | | */ -/* OBSOLETE | | |___________|<msp |____________| | | */ -/* OBSOLETE | | |_____lr1____| V | */ -/* OBSOLETE | | |___garbage__| <- gr1 <----+ | */ -/* OBSOLETE | | | | */ -/* OBSOLETE | | | | */ -/* OBSOLETE | | pc=loc3 | | */ -/* OBSOLETE | | | | */ -/* OBSOLETE | | | | */ -/* OBSOLETE | | frame cache | | */ -/* OBSOLETE | | |_________________| | | */ -/* OBSOLETE | | |rsize=rsize_b | | | */ -/* OBSOLETE | | |msize=msize_b | | | */ -/* OBSOLETE +---|--------saved_msp | | | */ -/* OBSOLETE | |frame------------------------------------|---+ */ -/* OBSOLETE | |pc=loc2 | | */ -/* OBSOLETE | |_________________| | */ -/* OBSOLETE | |rsize=rsize_f | | */ -/* OBSOLETE | |msize=msize_f | | */ -/* OBSOLETE +--------saved_msp | | */ -/* OBSOLETE |frame------------------------------------+ */ -/* OBSOLETE |pc=loc3 | */ -/* OBSOLETE |_________________| */ -/* OBSOLETE */ -/* OBSOLETE So, is that sufficiently confusing? Welcome to the 29000. */ -/* OBSOLETE Notes: */ -/* OBSOLETE * The frame for foo uses a memory frame pointer but the frame for */ -/* OBSOLETE bar does not. In the latter case the saved_msp is */ -/* OBSOLETE computed by adding msize to the saved_msp of the */ -/* OBSOLETE next frame. */ -/* OBSOLETE * msize is in the frame cache only for high C's sake. */ */ -/* OBSOLETE /* *INDENT-ON* */ */ -/* OBSOLETE */ -/* OBSOLETE */ -/* OBSOLETE void read_register_stack (); */ -/* OBSOLETE long read_register_stack_integer (); */ -/* OBSOLETE */ -/* OBSOLETE #define FRAME_INIT_SAVED_REGS(fi) /*no-op */ */ -/* OBSOLETE */ -/* OBSOLETE #define EXTRA_FRAME_INFO \ */ -/* OBSOLETE CORE_ADDR saved_msp; \ */ -/* OBSOLETE unsigned int rsize; \ */ -/* OBSOLETE unsigned int msize; \ */ -/* OBSOLETE unsigned char flags; */ -/* OBSOLETE */ -/* OBSOLETE /* Bits for flags in EXTRA_FRAME_INFO */ */ -/* OBSOLETE #define TRANSPARENT_FRAME 0x1 /* This is a transparent frame */ */ -/* OBSOLETE #define MFP_USED 0x2 /* A memory frame pointer is used */ */ -/* OBSOLETE */ -/* OBSOLETE /* Because INIT_FRAME_PC gets passed fromleaf, that's where we init */ -/* OBSOLETE not only ->pc and ->frame, but all the extra stuff, when called from */ -/* OBSOLETE get_prev_frame, that is. */ */ -/* OBSOLETE #define INIT_EXTRA_FRAME_INFO(fromleaf, fci) init_extra_frame_info(fci) */ -/* OBSOLETE void init_extra_frame_info (); */ -/* OBSOLETE */ -/* OBSOLETE #define INIT_FRAME_PC(fromleaf, fci) init_frame_pc(fromleaf, fci) */ -/* OBSOLETE void init_frame_pc (); */ -/* OBSOLETE */ -/* OBSOLETE */ -/* OBSOLETE /* FRAME_CHAIN takes a FRAME */ -/* OBSOLETE and produces the frame's chain-pointer. */ -/* OBSOLETE */ -/* OBSOLETE However, if FRAME_CHAIN_VALID returns zero, */ -/* OBSOLETE it means the given frame is the outermost one and has no caller. */ */ -/* OBSOLETE */ -/* OBSOLETE /* On the a29k, the nominal address of a frame is the address on the */ -/* OBSOLETE register stack of the return address (the one next to the incoming */ -/* OBSOLETE arguments, not down at the bottom so nominal address == stack pointer). */ -/* OBSOLETE */ -/* OBSOLETE GDB expects "nominal address" to equal contents of FP_REGNUM, */ -/* OBSOLETE at least when it comes time to create the innermost frame. */ -/* OBSOLETE However, that doesn't work for us, so when creating the innermost */ -/* OBSOLETE frame we set ->frame ourselves in INIT_EXTRA_FRAME_INFO. */ */ -/* OBSOLETE */ -/* OBSOLETE /* These are mostly dummies for the a29k because INIT_FRAME_PC */ -/* OBSOLETE sets prev->frame instead. */ */ -/* OBSOLETE /* If rsize is zero, we must be at end of stack (or otherwise hosed). */ -/* OBSOLETE If we don't check rsize, we loop forever if we see rsize == 0. */ */ -/* OBSOLETE #define FRAME_CHAIN(thisframe) \ */ -/* OBSOLETE ((thisframe)->rsize == 0 \ */ -/* OBSOLETE ? 0 \ */ -/* OBSOLETE : (thisframe)->frame + (thisframe)->rsize) */ -/* OBSOLETE */ -/* OBSOLETE /* Determine if the frame has a 'previous' and back-traceable frame. */ */ -/* OBSOLETE #define FRAME_IS_UNCHAINED(frame) ((frame)->flags & TRANSPARENT_FRAME) */ -/* OBSOLETE */ -/* OBSOLETE /* Find the previous frame of a transparent routine. */ -/* OBSOLETE * For now lets not try and trace through a transparent routine (we might */ -/* OBSOLETE * have to assume that all transparent routines are traps). */ -/* OBSOLETE */ */ -/* OBSOLETE #define FIND_PREV_UNCHAINED_FRAME(frame) 0 */ -/* OBSOLETE */ -/* OBSOLETE /* Define other aspects of the stack frame. */ */ -/* OBSOLETE */ -/* OBSOLETE /* An expression that tells us whether the function invocation represented */ -/* OBSOLETE by FI does not have a frame on the stack associated with it. */ */ -/* OBSOLETE #define FRAMELESS_FUNCTION_INVOCATION(FI) \ */ -/* OBSOLETE (frameless_look_for_prologue (FI)) */ -/* OBSOLETE */ -/* OBSOLETE /* Saved pc (i.e. return address). */ */ -/* OBSOLETE #define FRAME_SAVED_PC(fraim) \ */ -/* OBSOLETE (read_register_stack_integer ((fraim)->frame + (fraim)->rsize, 4)) */ -/* OBSOLETE */ -/* OBSOLETE /* Local variables (i.e. LOC_LOCAL) are on the memory stack, with their */ -/* OBSOLETE offsets being relative to the memory stack pointer (high C) or */ -/* OBSOLETE saved_msp (gcc). */ */ -/* OBSOLETE */ -/* OBSOLETE #define FRAME_LOCALS_ADDRESS(fi) frame_locals_address (fi) */ -/* OBSOLETE extern CORE_ADDR frame_locals_address (); */ -/* OBSOLETE */ -/* OBSOLETE /* Return number of args passed to a frame. */ -/* OBSOLETE Can return -1, meaning no way to tell. */ */ -/* OBSOLETE /* We tried going to the effort of finding the tags word and getting */ -/* OBSOLETE the argcount field from it, to support debugging assembler code. */ -/* OBSOLETE Problem was, the "argcount" field never did hold the argument */ -/* OBSOLETE count. */ */ -/* OBSOLETE #define FRAME_NUM_ARGS(fi) (-1) */ -/* OBSOLETE */ -/* OBSOLETE #define FRAME_ARGS_ADDRESS(fi) FRAME_LOCALS_ADDRESS (fi) */ -/* OBSOLETE */ -/* OBSOLETE /* Return number of bytes at start of arglist that are not really args. */ */ -/* OBSOLETE */ -/* OBSOLETE #define FRAME_ARGS_SKIP 0 */ -/* OBSOLETE */ -/* OBSOLETE /* Provide our own get_saved_register. HAVE_REGISTER_WINDOWS is insufficient */ -/* OBSOLETE because registers get renumbered on the a29k without getting saved. */ */ -/* OBSOLETE */ -/* OBSOLETE struct frame_info; */ -/* OBSOLETE void a29k_get_saved_register (char *raw_buffer, int *optimized, */ -/* OBSOLETE CORE_ADDR * addrp, struct frame_info *frame, */ -/* OBSOLETE int regnum, enum lval_type *lvalp); */ -/* OBSOLETE #define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ */ -/* OBSOLETE a29k_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) */ -/* OBSOLETE */ -/* OBSOLETE /* Call function stuff. */ */ -/* OBSOLETE /* *INDENT-OFF* */ */ -/* OBSOLETE /* The dummy frame looks like this (see also the general frame picture */ -/* OBSOLETE above): */ -/* OBSOLETE */ -/* OBSOLETE register stack */ -/* OBSOLETE */ -/* OBSOLETE | | frame for function */ -/* OBSOLETE | locals_sproc | executing at time */ -/* OBSOLETE |________________| of call_function. */ -/* OBSOLETE | | We must not disturb */ -/* OBSOLETE | args_out_sproc | it. */ -/* OBSOLETE memory stack |________________| */ -/* OBSOLETE |____lr1_sproc___|<-+ */ -/* OBSOLETE | | |__retaddr_sproc_| | <-- gr1 (at start) */ -/* OBSOLETE |____________|<-msp 0 <-----------mfp_dummy_____| | */ -/* OBSOLETE | | (at start) | save regs | | */ -/* OBSOLETE | arg_slop | | pc0,pc1 | | */ -/* OBSOLETE | | | pc2,lr0 sproc | | */ -/* OBSOLETE | (16 words) | | gr96-gr124 | | */ -/* OBSOLETE |____________|<-msp 1--after | sr160-sr162 | | */ -/* OBSOLETE | | PUSH_DUMMY_FRAME| sr128-sr135 | | */ -/* OBSOLETE | struct ret | |________________| | */ -/* OBSOLETE | 17+ | | | | */ -/* OBSOLETE |____________|<- lrp | args_out_dummy | | */ -/* OBSOLETE | struct ret | | (16 words) | | */ -/* OBSOLETE | 16 | |________________| | */ -/* OBSOLETE | (16 words) | |____lr1_dummy___|--+ */ -/* OBSOLETE |____________|<- msp 2--after |_retaddr_dummy__|<- gr1 after */ -/* OBSOLETE | | struct ret | | PUSH_DUMMY_FRAME */ -/* OBSOLETE | margs17+ | area allocated | locals_inf | */ -/* OBSOLETE | | |________________| called */ -/* OBSOLETE |____________|<- msp 4--when | | function's */ -/* OBSOLETE | | inf called | args_out_inf | frame (set up */ -/* OBSOLETE | margs16 | |________________| by called */ -/* OBSOLETE | (16 words) | |_____lr1_inf____| function). */ -/* OBSOLETE |____________|<- msp 3--after | . | */ -/* OBSOLETE | | args pushed | . | */ -/* OBSOLETE | | | . | */ -/* OBSOLETE | | */ -/* OBSOLETE */ -/* OBSOLETE arg_slop: This area is so that when the call dummy adds 16 words to */ -/* OBSOLETE the msp, it won't end up larger than mfp_dummy (it is needed in the */ -/* OBSOLETE case where margs and struct_ret do not add up to at least 16 words). */ -/* OBSOLETE struct ret: This area is allocated by GDB if the return value is more */ -/* OBSOLETE than 16 words. struct ret_16 is not used on the a29k. */ -/* OBSOLETE margs: Pushed by GDB. The call dummy copies the first 16 words to */ -/* OBSOLETE args_out_dummy. */ -/* OBSOLETE retaddr_sproc: Contains the PC at the time we call the function. */ -/* OBSOLETE set by PUSH_DUMMY_FRAME and read by POP_FRAME. */ -/* OBSOLETE retaddr_dummy: This points to a breakpoint instruction in the dummy. */ */ -/* OBSOLETE /* *INDENT-ON* */ */ -/* OBSOLETE */ -/* OBSOLETE */ -/* OBSOLETE */ -/* OBSOLETE /* Rsize for dummy frame, in bytes. */ */ -/* OBSOLETE */ -/* OBSOLETE /* Bytes for outgoing args, lr1, and retaddr. */ */ -/* OBSOLETE #define DUMMY_ARG (2 * 4 + 16 * 4) */ -/* OBSOLETE */ -/* OBSOLETE /* Number of special registers (sr128-) to save. */ */ -/* OBSOLETE #define DUMMY_SAVE_SR128 8 */ -/* OBSOLETE /* Number of special registers (sr160-) to save. */ */ -/* OBSOLETE #define DUMMY_SAVE_SR160 3 */ -/* OBSOLETE /* Number of general (gr96- or gr64-) registers to save. */ */ -/* OBSOLETE #define DUMMY_SAVE_GREGS 29 */ -/* OBSOLETE */ -/* OBSOLETE #define DUMMY_FRAME_RSIZE \ */ -/* OBSOLETE (4 /* mfp_dummy */ \ */ -/* OBSOLETE + 4 * 4 /* pc0, pc1, pc2, lr0 */ \ */ -/* OBSOLETE + DUMMY_SAVE_GREGS * 4 \ */ -/* OBSOLETE + DUMMY_SAVE_SR160 * 4 \ */ -/* OBSOLETE + DUMMY_SAVE_SR128 * 4 \ */ -/* OBSOLETE + DUMMY_ARG \ */ -/* OBSOLETE + 4 /* pad to doubleword */ ) */ -/* OBSOLETE */ -/* OBSOLETE /* Push an empty stack frame, to record the current PC, etc. */ */ -/* OBSOLETE */ -/* OBSOLETE #define PUSH_DUMMY_FRAME push_dummy_frame() */ -/* OBSOLETE extern void push_dummy_frame (); */ -/* OBSOLETE */ -/* OBSOLETE /* Discard from the stack the innermost frame, */ -/* OBSOLETE restoring all saved registers. */ */ -/* OBSOLETE */ -/* OBSOLETE #define POP_FRAME pop_frame() */ -/* OBSOLETE extern void pop_frame (); */ -/* OBSOLETE */ -/* OBSOLETE /* This sequence of words is the instructions */ -/* OBSOLETE mtsrim cr, 15 */ -/* OBSOLETE loadm 0, 0, lr2, msp ; load first 16 words of arguments into registers */ -/* OBSOLETE add msp, msp, 16 * 4 ; point to the remaining arguments */ -/* OBSOLETE CONST_INSN: */ -/* OBSOLETE const lr0,inf ; (replaced by half of target addr) */ -/* OBSOLETE consth lr0,inf ; (replaced by other half of target addr) */ -/* OBSOLETE calli lr0, lr0 */ -/* OBSOLETE aseq 0x40,gr1,gr1 ; nop */ -/* OBSOLETE BREAKPT_INSN: */ -/* OBSOLETE asneq 0x50,gr1,gr1 ; breakpoint (replaced by local breakpoint insn) */ -/* OBSOLETE */ */ -/* OBSOLETE */ -/* OBSOLETE #error "This file is broken. GDB does not define HOST_BYTE_ORDER." */ -/* OBSOLETE #if TARGET_BYTE_ORDER == HOST_BYTE_ORDER */ -/* OBSOLETE #define BS(const) const */ -/* OBSOLETE #else */ -/* OBSOLETE #define BS(const) (((const) & 0xff) << 24) | \ */ -/* OBSOLETE (((const) & 0xff00) << 8) | \ */ -/* OBSOLETE (((const) & 0xff0000) >> 8) | \ */ -/* OBSOLETE (((const) & 0xff000000) >> 24) */ -/* OBSOLETE #endif */ -/* OBSOLETE */ -/* OBSOLETE /* Position of the "const" and blkt instructions within CALL_DUMMY in bytes. */ */ -/* OBSOLETE #define CONST_INSN (3 * 4) */ -/* OBSOLETE #define BREAKPT_INSN (7 * 4) */ -/* OBSOLETE #define CALL_DUMMY { \ */ -/* OBSOLETE BS(0x0400870f),\ */ -/* OBSOLETE BS(0x36008200|(MSP_HW_REGNUM)), \ */ -/* OBSOLETE BS(0x15000040|(MSP_HW_REGNUM<<8)|(MSP_HW_REGNUM<<16)), \ */ -/* OBSOLETE BS(0x03ff80ff), \ */ -/* OBSOLETE BS(0x02ff80ff), \ */ -/* OBSOLETE BS(0xc8008080), \ */ -/* OBSOLETE BS(0x70400101), \ */ -/* OBSOLETE BS(0x72500101)} */ -/* OBSOLETE #define CALL_DUMMY_LENGTH (8 * 4) */ -/* OBSOLETE */ -/* OBSOLETE #define CALL_DUMMY_START_OFFSET 0 /* Start execution at beginning of dummy */ */ -/* OBSOLETE */ -/* OBSOLETE /* Helper macro for FIX_CALL_DUMMY. WORDP is a long * which points to a */ -/* OBSOLETE word in target byte order; bits 0-7 and 16-23 of *WORDP are replaced with */ -/* OBSOLETE bits 0-7 and 8-15 of DATA (which is in host byte order). */ */ -/* OBSOLETE */ -/* OBSOLETE #if TARGET_BYTE_ORDER == BFD_ENDIAN_BIG */ -/* OBSOLETE #define STUFF_I16(WORDP, DATA) \ */ -/* OBSOLETE { \ */ -/* OBSOLETE *((char *)(WORDP) + 3) = ((DATA) & 0xff);\ */ -/* OBSOLETE *((char *)(WORDP) + 1) = (((DATA) >> 8) & 0xff);\ */ -/* OBSOLETE } */ -/* OBSOLETE #else /* Target is little endian. */ */ -/* OBSOLETE #define STUFF_I16(WORDP, DATA) \ */ -/* OBSOLETE { */ -/* OBSOLETE *(char *) (WORDP) = ((DATA) & 0xff); */ -/* OBSOLETE *((char *) (WORDP) + 2) = (((DATA) >> 8) & 0xff); */ -/* OBSOLETE } */ -/* OBSOLETE #endif /* Target is little endian. */ */ -/* OBSOLETE */ -/* OBSOLETE /* Insert the specified number of args and function address */ -/* OBSOLETE into a call sequence of the above form stored at DUMMYNAME. */ */ -/* OBSOLETE */ -/* OBSOLETE /* Currently this stuffs in the address of the function that we are calling. */ -/* OBSOLETE Since different a29k systems use different breakpoint instructions, it */ -/* OBSOLETE also stuffs BREAKPOINT in the right place (to avoid having to */ -/* OBSOLETE duplicate CALL_DUMMY in each tm-*.h file). */ */ -/* OBSOLETE */ -/* OBSOLETE #define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \ */ -/* OBSOLETE {\ */ -/* OBSOLETE STUFF_I16((char *)dummyname + CONST_INSN, fun); \ */ -/* OBSOLETE STUFF_I16((char *)dummyname + CONST_INSN + 4, fun >> 16); \ */ -/* OBSOLETE /* FIXME memcpy ((char *)(dummyname) + BREAKPT_INSN, break_insn, 4); */ \ */ -/* OBSOLETE } */ -/* OBSOLETE */ -/* OBSOLETE /* a29k architecture has separate data & instruction memories -- wired to */ -/* OBSOLETE different pins on the chip -- and can't execute the data memory. */ -/* OBSOLETE Also, there should be space after text_end; */ -/* OBSOLETE we won't get a SIGSEGV or scribble on data space. */ */ -/* OBSOLETE */ -/* OBSOLETE #define CALL_DUMMY_LOCATION AFTER_TEXT_END */ -/* OBSOLETE */ -/* OBSOLETE /* Because of this, we need (as a kludge) to know the addresses of the */ -/* OBSOLETE text section. */ */ -/* OBSOLETE */ -/* OBSOLETE #define NEED_TEXT_START_END 1 */ -/* OBSOLETE */ -/* OBSOLETE /* How to translate register numbers in the .stab's into gdb's internal register */ -/* OBSOLETE numbers. We don't translate them, but we warn if an invalid register */ -/* OBSOLETE number is seen. Note that FIXME, we use the value "sym" as an implicit */ -/* OBSOLETE argument in printing the error message. It happens to be available where */ -/* OBSOLETE this macro is used. (This macro definition appeared in a late revision */ -/* OBSOLETE of gdb-3.91.6 and is not well tested. Also, it should be a "complaint".) */ */ -/* OBSOLETE */ -/* OBSOLETE #define STAB_REG_TO_REGNUM(num) \ */ -/* OBSOLETE (((num) > LR0_REGNUM + 127) \ */ -/* OBSOLETE ? fprintf(stderr, \ */ -/* OBSOLETE "Invalid register number %d in symbol table entry for %s\n", \ */ -/* OBSOLETE (num), SYMBOL_SOURCE_NAME (sym)), (num) \ */ -/* OBSOLETE : (num)) */ -/* OBSOLETE */ -/* OBSOLETE extern enum a29k_processor_types */ -/* OBSOLETE { */ -/* OBSOLETE a29k_unknown, */ -/* OBSOLETE */ -/* OBSOLETE /* Bit 0x400 of the CPS does *not* identify freeze mode, i.e. 29000, */ -/* OBSOLETE 29030, etc. */ */ -/* OBSOLETE a29k_no_freeze_mode, */ -/* OBSOLETE */ -/* OBSOLETE /* Bit 0x400 of the CPS does identify freeze mode, i.e. 29050. */ */ -/* OBSOLETE a29k_freeze_mode */ -/* OBSOLETE } */ -/* OBSOLETE processor_type; */ -/* OBSOLETE */ -/* OBSOLETE /* We need three arguments for a general frame specification for the */ -/* OBSOLETE "frame" or "info frame" command. */ */ -/* OBSOLETE */ -/* OBSOLETE #define SETUP_ARBITRARY_FRAME(argc, argv) setup_arbitrary_frame (argc, argv) */ -/* OBSOLETE extern struct frame_info *setup_arbitrary_frame (int, CORE_ADDR *); */ diff --git a/gdb/config/a29k/tm-vx29k.h b/gdb/config/a29k/tm-vx29k.h deleted file mode 100644 index 40c6689..0000000 --- a/gdb/config/a29k/tm-vx29k.h +++ /dev/null @@ -1,230 +0,0 @@ -/* OBSOLETE /* Target machine description for VxWorks on the 29k, for GDB, the GNU debugger. */ -/* OBSOLETE Copyright 1994, 1995, 1998, 1999, 2000 Free Software Foundation, Inc. */ -/* OBSOLETE Contributed by Cygnus Support. */ -/* OBSOLETE */ -/* OBSOLETE This file is part of GDB. */ -/* OBSOLETE */ -/* OBSOLETE This program is free software; you can redistribute it and/or modify */ -/* OBSOLETE it under the terms of the GNU General Public License as published by */ -/* OBSOLETE the Free Software Foundation; either version 2 of the License, or */ -/* OBSOLETE (at your option) any later version. */ -/* OBSOLETE */ -/* OBSOLETE This program is distributed in the hope that it will be useful, */ -/* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */ -/* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ -/* OBSOLETE GNU General Public License for more details. */ -/* OBSOLETE */ -/* OBSOLETE You should have received a copy of the GNU General Public License */ -/* OBSOLETE along with this program; if not, write to the Free Software */ -/* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, */ -/* OBSOLETE Boston, MA 02111-1307, USA. */ */ -/* OBSOLETE */ -/* OBSOLETE #include "regcache.h" */ -/* OBSOLETE #include "value.h" */ -/* OBSOLETE #include "a29k/tm-a29k.h" */ -/* OBSOLETE #include "tm-vxworks.h" */ -/* OBSOLETE */ -/* OBSOLETE /* Number of registers in a ptrace_getregs call. */ */ -/* OBSOLETE */ -/* OBSOLETE #define VX_NUM_REGS (NUM_REGS) */ -/* OBSOLETE */ -/* OBSOLETE /* Number of registers in a ptrace_getfpregs call. */ */ -/* OBSOLETE */ -/* OBSOLETE /* #define VX_SIZE_FPREGS */ */ -/* OBSOLETE */ -/* OBSOLETE /* This is almost certainly the wrong place for this: */ */ -/* OBSOLETE #define LR2_REGNUM 34 */ -/* OBSOLETE */ -/* OBSOLETE */ -/* OBSOLETE /* Vxworks has its own CALL_DUMMY since it manages breakpoints in the kernel */ */ -/* OBSOLETE */ -/* OBSOLETE #undef CALL_DUMMY */ -/* OBSOLETE */ -/* OBSOLETE /* Replace the breakpoint instruction in the CALL_DUMMY with a nop. */ -/* OBSOLETE For Vxworks, the breakpoint is set and deleted by calls to */ -/* OBSOLETE CALL_DUMMY_BREAK_SET and CALL_DUMMY_BREAK_DELETE. */ */ -/* OBSOLETE */ -/* OBSOLETE #error "This file is broken. GDB does not define HOST_BYTE_ORDER." */ -/* OBSOLETE #if TARGET_BYTE_ORDER == HOST_BYTE_ORDER */ -/* OBSOLETE #define CALL_DUMMY {0x0400870f,\ */ -/* OBSOLETE 0x36008200|(MSP_HW_REGNUM), \ */ -/* OBSOLETE 0x15000040|(MSP_HW_REGNUM<<8)|(MSP_HW_REGNUM<<16), \ */ -/* OBSOLETE 0x03ff80ff, 0x02ff80ff, 0xc8008080, 0x70400101, 0x70400101} */ -/* OBSOLETE #else /* Byte order differs. */ */ -/* OBSOLETE #define CALL_DUMMY {0x0f870004,\ */ -/* OBSOLETE 0x00820036|(MSP_HW_REGNUM << 24), \ */ -/* OBSOLETE 0x40000015|(MSP_HW_REGNUM<<8)|(MSP_HW_REGNUM<<16), \ */ -/* OBSOLETE 0xff80ff03, 0xff80ff02, 0x808000c8, 0x01014070, 0x01014070} */ -/* OBSOLETE #endif /* Byte order differs. */ */ -/* OBSOLETE */ -/* OBSOLETE */ -/* OBSOLETE /* For the basic CALL_DUMMY definitions, see "tm-29k.h." We use the */ -/* OBSOLETE same CALL_DUMMY code, but define FIX_CALL_DUMMY (and related macros) */ -/* OBSOLETE locally to handle remote debugging of VxWorks targets. The difference */ -/* OBSOLETE is in the setting and clearing of the breakpoint at the end of the */ -/* OBSOLETE CALL_DUMMY code fragment; under VxWorks, we can't simply insert a */ -/* OBSOLETE breakpoint instruction into the code, since that would interfere with */ -/* OBSOLETE the breakpoint management mechanism on the target. */ -/* OBSOLETE Note that CALL_DUMMY is a piece of code that is used to call any C function */ -/* OBSOLETE thru VxGDB */ */ -/* OBSOLETE */ -/* OBSOLETE /* The offset of the instruction within the CALL_DUMMY code where we */ -/* OBSOLETE want the inferior to stop after the function call has completed. */ -/* OBSOLETE call_function_by_hand () sets a breakpoint here (via CALL_DUMMY_BREAK_SET), */ -/* OBSOLETE which POP_FRAME later deletes (via CALL_DUMMY_BREAK_DELETE). */ */ -/* OBSOLETE */ -/* OBSOLETE #define CALL_DUMMY_STOP_OFFSET (7 * 4) */ -/* OBSOLETE */ -/* OBSOLETE /* The offset of the first instruction of the CALL_DUMMY code fragment */ -/* OBSOLETE relative to the frame pointer for a dummy frame. This is equal to */ -/* OBSOLETE the size of the CALL_DUMMY plus the arg_slop area size (see the diagram */ -/* OBSOLETE in "tm-29k.h"). */ */ -/* OBSOLETE /* PAD : the arg_slop area size doesn't appear to me to be useful since, the */ -/* OBSOLETE call dummy code no longer modify the msp. See below. This must be checked. */ */ -/* OBSOLETE */ -/* OBSOLETE #define CALL_DUMMY_OFFSET_IN_FRAME (CALL_DUMMY_LENGTH + 16 * 4) */ -/* OBSOLETE */ -/* OBSOLETE /* Insert the specified number of args and function address */ -/* OBSOLETE into a CALL_DUMMY sequence stored at DUMMYNAME, replace the third */ -/* OBSOLETE instruction (add msp, msp, 16*4) with a nop, and leave the final nop. */ -/* OBSOLETE We can't keep using a CALL_DUMMY that modify the msp since, for VxWorks, */ -/* OBSOLETE CALL_DUMMY is stored in the Memory Stack. Adding 16 words to the msp */ -/* OBSOLETE would then make possible for the inferior to overwrite the CALL_DUMMY code, */ -/* OBSOLETE thus creating a lot of trouble when exiting the inferior to come back in */ -/* OBSOLETE a CALL_DUMMY code that no longer exists... Furthermore, ESF are also stored */ -/* OBSOLETE from the msp in the memory stack. If msp is set higher than the dummy code, */ -/* OBSOLETE an ESF may clobber this code. */ */ -/* OBSOLETE */ -/* OBSOLETE #if TARGET_BYTE_ORDER == BFD_ENDIAN_BIG */ -/* OBSOLETE #define NOP_INSTR 0x70400101 */ -/* OBSOLETE #else /* Target is little endian */ */ -/* OBSOLETE #define NOP_INSTR 0x01014070 */ -/* OBSOLETE #endif */ -/* OBSOLETE */ -/* OBSOLETE #undef FIX_CALL_DUMMY */ -/* OBSOLETE #define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \ */ -/* OBSOLETE { \ */ -/* OBSOLETE *(int *)((char *)dummyname + 8) = NOP_INSTR; \ */ -/* OBSOLETE STUFF_I16((char *)dummyname + CONST_INSN, fun); \ */ -/* OBSOLETE STUFF_I16((char *)dummyname + CONST_INSN + 4, fun >> 16); \ */ -/* OBSOLETE } */ -/* OBSOLETE */ -/* OBSOLETE /* For VxWorks, CALL_DUMMY must be stored in the stack of the task that is */ -/* OBSOLETE being debugged and executed "in the context of" this task */ */ -/* OBSOLETE */ -/* OBSOLETE #undef CALL_DUMMY_LOCATION */ -/* OBSOLETE #define CALL_DUMMY_LOCATION ON_STACK */ -/* OBSOLETE */ -/* OBSOLETE /* Set or delete a breakpoint at the location within a CALL_DUMMY code */ -/* OBSOLETE fragment where we want the target program to stop after the function */ -/* OBSOLETE call is complete. CALL_DUMMY_ADDR is the address of the first */ -/* OBSOLETE instruction in the CALL_DUMMY. DUMMY_FRAME_ADDR is the value of the */ -/* OBSOLETE frame pointer in the dummy frame. */ -/* OBSOLETE */ -/* OBSOLETE NOTE: in the both of the following definitions, we take advantage of */ -/* OBSOLETE knowledge of the implementation of the target breakpoint operation, */ -/* OBSOLETE in that we pass a null pointer as the second argument. It seems */ -/* OBSOLETE reasonable to assume that any target requiring the use of */ -/* OBSOLETE CALL_DUMMY_BREAK_{SET,DELETE} will not store the breakpoint */ -/* OBSOLETE shadow contents in GDB; in any case, this assumption is vaild */ -/* OBSOLETE for all VxWorks-related targets. */ */ -/* OBSOLETE */ -/* OBSOLETE #define CALL_DUMMY_BREAK_SET(call_dummy_addr) \ */ -/* OBSOLETE target_insert_breakpoint ((call_dummy_addr) + CALL_DUMMY_STOP_OFFSET, \ */ -/* OBSOLETE (char *) 0) */ -/* OBSOLETE */ -/* OBSOLETE #define CALL_DUMMY_BREAK_DELETE(dummy_frame_addr) \ */ -/* OBSOLETE target_remove_breakpoint ((dummy_frame_addr) - (CALL_DUMMY_OFFSET_IN_FRAME \ */ -/* OBSOLETE - CALL_DUMMY_STOP_OFFSET), \ */ -/* OBSOLETE (char *) 0) */ -/* OBSOLETE */ -/* OBSOLETE /* Return nonzero if the pc is executing within a CALL_DUMMY frame. */ */ -/* OBSOLETE */ -/* OBSOLETE #define PC_IN_CALL_DUMMY(pc, sp, frame_address) \ */ -/* OBSOLETE ((pc) >= (sp) \ */ -/* OBSOLETE && (pc) <= (sp) + CALL_DUMMY_OFFSET_IN_FRAME + CALL_DUMMY_LENGTH) */ -/* OBSOLETE */ -/* OBSOLETE /* Defining this prevents us from trying to pass a structure-valued argument */ -/* OBSOLETE to a function called via the CALL_DUMMY mechanism. This is not handled */ -/* OBSOLETE properly in call_function_by_hand (), and the fix might require re-writing */ -/* OBSOLETE the CALL_DUMMY handling for all targets (at least, a clean solution */ -/* OBSOLETE would probably require this). Arguably, this should go in "tm-29k.h" */ -/* OBSOLETE rather than here. */ */ -/* OBSOLETE */ -/* OBSOLETE #define STRUCT_VAL_ARGS_UNSUPPORTED */ -/* OBSOLETE */ -/* OBSOLETE #define BKPT_OFFSET (7 * 4) */ -/* OBSOLETE #define BKPT_INSTR 0x72500101 */ -/* OBSOLETE */ -/* OBSOLETE #undef FIX_CALL_DUMMY */ -/* OBSOLETE #define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \ */ -/* OBSOLETE {\ */ -/* OBSOLETE STUFF_I16((char *)dummyname + CONST_INSN, fun);\ */ -/* OBSOLETE STUFF_I16((char *)dummyname + CONST_INSN + 4, fun >> 16);\ */ -/* OBSOLETE *(int *)((char *)dummyname + BKPT_OFFSET) = BKPT_INSTR;\ */ -/* OBSOLETE } */ -/* OBSOLETE */ -/* OBSOLETE */ -/* OBSOLETE /* Offsets into jmp_buf. They are derived from VxWorks' REG_SET struct */ -/* OBSOLETE (see VxWorks' setjmp.h). Note that Sun2, Sun3 and SunOS4 and VxWorks have */ -/* OBSOLETE different REG_SET structs, hence different layouts for the jmp_buf struct. */ -/* OBSOLETE Only JB_PC is needed for getting the saved PC value. */ */ -/* OBSOLETE */ -/* OBSOLETE #define JB_ELEMENT_SIZE 4 /* size of each element in jmp_buf */ */ -/* OBSOLETE #define JB_PC 3 /* offset of pc (pc1) in jmp_buf */ */ -/* OBSOLETE */ -/* OBSOLETE /* Figure out where the longjmp will land. We expect that we have just entered */ -/* OBSOLETE longjmp and haven't yet setup the stack frame, so the args are still in the */ -/* OBSOLETE output regs. lr2 (LR2_REGNUM) points at the jmp_buf structure from which we */ -/* OBSOLETE extract the pc (JB_PC) that we will land at. The pc is copied into ADDR. */ -/* OBSOLETE This routine returns true on success */ */ -/* OBSOLETE */ -/* OBSOLETE #define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR) */ -/* OBSOLETE extern int get_longjmp_target (CORE_ADDR *); */ -/* OBSOLETE */ -/* OBSOLETE /* VxWorks adjusts the PC after a breakpoint has been hit. */ */ -/* OBSOLETE */ -/* OBSOLETE #undef DECR_PC_AFTER_BREAK */ -/* OBSOLETE #define DECR_PC_AFTER_BREAK 0 */ -/* OBSOLETE */ -/* OBSOLETE /* Do whatever promotions are appropriate on a value being returned */ -/* OBSOLETE from a function. VAL is the user-supplied value, and FUNC_TYPE */ -/* OBSOLETE is the return type of the function if known, else 0. */ -/* OBSOLETE */ -/* OBSOLETE For the Am29k, as far as I understand, if the function return type is known, */ -/* OBSOLETE cast the value to that type; otherwise, ensure that integer return values */ -/* OBSOLETE fill all of gr96. */ -/* OBSOLETE */ -/* OBSOLETE This definition really belongs in "tm-29k.h", since it applies */ -/* OBSOLETE to most Am29K-based systems; but once moved into that file, it might */ -/* OBSOLETE need to be redefined for all Am29K-based targets that also redefine */ -/* OBSOLETE STORE_RETURN_VALUE. For now, to be safe, we define it here. */ */ -/* OBSOLETE */ -/* OBSOLETE #define PROMOTE_RETURN_VALUE(val, func_type) \ */ -/* OBSOLETE do { \ */ -/* OBSOLETE if (func_type) \ */ -/* OBSOLETE val = value_cast (func_type, val); \ */ -/* OBSOLETE if ((TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_INT \ */ -/* OBSOLETE || TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_ENUM) \ */ -/* OBSOLETE && TYPE_LENGTH (VALUE_TYPE (val)) < REGISTER_RAW_SIZE (0)) \ */ -/* OBSOLETE val = value_cast (builtin_type_int, val); \ */ -/* OBSOLETE } while (0) */ -/* OBSOLETE */ -/* OBSOLETE extern int vx29k_frame_chain_valid (CORE_ADDR, struct frame_info *); */ -/* OBSOLETE #define FRAME_CHAIN_VALID(chain, thisframe) vx29k_frame_chain_valid (chain, thisframe) */ -/* OBSOLETE */ -/* OBSOLETE extern CORE_ADDR frame_saved_call_site (); */ -/* OBSOLETE */ -/* OBSOLETE #undef PREPARE_TO_INIT_FRAME_INFO */ -/* OBSOLETE #define PREPARE_TO_INIT_FRAME_INFO(fci) do { \ */ -/* OBSOLETE long current_msp = read_register (MSP_REGNUM); \ */ -/* OBSOLETE if (PC_IN_CALL_DUMMY (fci->pc, current_msp, 0)) \ */ -/* OBSOLETE { \ */ -/* OBSOLETE fci->rsize = DUMMY_FRAME_RSIZE; \ */ -/* OBSOLETE fci->msize = 0; \ */ -/* OBSOLETE fci->saved_msp = \ */ -/* OBSOLETE read_register_stack_integer (fci->frame + DUMMY_FRAME_RSIZE - 4, 4); \ */ -/* OBSOLETE fci->flags |= (TRANSPARENT|MFP_USED); \ */ -/* OBSOLETE return; \ */ -/* OBSOLETE } \ */ -/* OBSOLETE } while (0) */ diff --git a/gdb/config/a29k/vx29k.mt b/gdb/config/a29k/vx29k.mt deleted file mode 100644 index 95a169e..0000000 --- a/gdb/config/a29k/vx29k.mt +++ /dev/null @@ -1,4 +0,0 @@ -# OBSOLETE # Target: AMD 29k running VxWorks -# OBSOLETE TDEPFILES= a29k-tdep.o remote-vx.o remote-vx29k.o xdr_ld.o xdr_ptrace.o xdr_rdb.o -# OBSOLETE TM_FILE= tm-vx29k.h -# OBSOLETE MT_CFLAGS = -DNO_HIF_SUPPORT diff --git a/gdb/config/alpha/alpha-linux.mt b/gdb/config/alpha/alpha-linux.mt index dd1c8e2..25538b3 100644 --- a/gdb/config/alpha/alpha-linux.mt +++ b/gdb/config/alpha/alpha-linux.mt @@ -1,3 +1,3 @@ # Target: Little-endian Alpha -TDEPFILES= alpha-tdep.o solib.o solib-svr4.o solib-legacy.o +TDEPFILES= alpha-tdep.o alpha-linux-tdep.o solib.o solib-svr4.o solib-legacy.o TM_FILE= tm-alphalinux.h diff --git a/gdb/config/alpha/alpha-osf1.mt b/gdb/config/alpha/alpha-osf1.mt index 98f87c1..29212c9 100644 --- a/gdb/config/alpha/alpha-osf1.mt +++ b/gdb/config/alpha/alpha-osf1.mt @@ -1,3 +1,3 @@ # Target: Little-endian Alpha -TDEPFILES= alpha-tdep.o +TDEPFILES= alpha-tdep.o alpha-osf1-tdep.o TM_FILE= tm-alpha.h diff --git a/gdb/config/alpha/nbsd.mh b/gdb/config/alpha/nbsd.mh new file mode 100644 index 0000000..4d7664b --- /dev/null +++ b/gdb/config/alpha/nbsd.mh @@ -0,0 +1,4 @@ +# Host: Alpha running NetBSD +NAT_CLIBS= +NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o alphabsd-nat.o alphanbsd-nat.o +NAT_FILE= nm-nbsd.h diff --git a/gdb/config/alpha/nbsd.mt b/gdb/config/alpha/nbsd.mt new file mode 100644 index 0000000..f3a2ff1 --- /dev/null +++ b/gdb/config/alpha/nbsd.mt @@ -0,0 +1,3 @@ +# Target: Alpha running NetBSD +TDEPFILES= alpha-tdep.o alphanbsd-tdep.o solib.o solib-svr4.o +TM_FILE= tm-nbsd.h diff --git a/gdb/config/alpha/nm-linux.h b/gdb/config/alpha/nm-linux.h index 5d5e945..c59b88c 100644 --- a/gdb/config/alpha/nm-linux.h +++ b/gdb/config/alpha/nm-linux.h @@ -25,15 +25,6 @@ #include "nm-linux.h" -/* Figure out where the longjmp will land. We expect that we have just entered - longjmp and haven't yet setup the stack frame, so the args are still in the - argument regs. A0_REGNUM points at the jmp_buf structure from which we - extract the pc (JB_PC) that we will land at. The pc is copied into ADDR. - This routine returns true on success */ - -#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR) -extern int get_longjmp_target (CORE_ADDR *); - /* ptrace register ``addresses'' are absolute. */ #define U_REGS_OFFSET 0 @@ -50,10 +41,6 @@ extern int get_longjmp_target (CORE_ADDR *); #define CANNOT_STEP_BREAKPOINT -/* GNU/Linux has shared libraries. */ - -#define GDB_TARGET_HAS_SHARED_LIBS - /* Given a pointer to either a gregset_t or fpregset_t, return a pointer to the first register. */ #define ALPHA_REGSET_BASE(regsetp) ((long *) (regsetp)) diff --git a/gdb/config/alpha/nm-nbsd.h b/gdb/config/alpha/nm-nbsd.h new file mode 100644 index 0000000..ef6ab31 --- /dev/null +++ b/gdb/config/alpha/nm-nbsd.h @@ -0,0 +1,33 @@ +/* Native-dependent definitions for Alpha running NetBSD, for GDB. + Copyright 2002 Free Software Foundation, Inc. + Contributed by Wasabi Systems, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + 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 + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef NM_NBSD_H +#define NM_NBSD_H + +#define SVR4_SHARED_LIBS + +/* Get generic NetBSD native definitions. */ +#include "config/nm-nbsd.h" + +/* The Alpha does not step over a breakpoint. */ +#define CANNOT_STEP_BREAKPOINT + +#endif /* NM_NBSD_H */ diff --git a/gdb/config/alpha/nm-osf.h b/gdb/config/alpha/nm-osf.h index 5fc99e4..20b5ae4 100644 --- a/gdb/config/alpha/nm-osf.h +++ b/gdb/config/alpha/nm-osf.h @@ -18,15 +18,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* Figure out where the longjmp will land. We expect that we have just entered - longjmp and haven't yet setup the stack frame, so the args are still in the - argument regs. A0_REGNUM points at the jmp_buf structure from which we - extract the pc (JB_PC) that we will land at. The pc is copied into ADDR. - This routine returns true on success */ - -#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR) -extern int get_longjmp_target (CORE_ADDR *); - /* ptrace register ``addresses'' are absolute. */ #define U_REGS_OFFSET 0 @@ -43,10 +34,6 @@ extern int get_longjmp_target (CORE_ADDR *); #define CANNOT_STEP_BREAKPOINT -/* OSF/1 has shared libraries. */ - -#define GDB_TARGET_HAS_SHARED_LIBS - /* Support for shared libraries. */ #include "solib.h" diff --git a/gdb/config/alpha/tm-alpha.h b/gdb/config/alpha/tm-alpha.h index 58412d0..feb752a 100644 --- a/gdb/config/alpha/tm-alpha.h +++ b/gdb/config/alpha/tm-alpha.h @@ -24,353 +24,28 @@ #ifndef TM_ALPHA_H #define TM_ALPHA_H -#include "regcache.h" +#define GDB_MULTI_ARCH GDB_MULTI_ARCH_PARTIAL + #include "bfd.h" #include "coff/sym.h" /* Needed for PDR below. */ #include "coff/symconst.h" struct frame_info; -struct type; -struct value; struct symbol; -/* Redefine some target bit sizes from the default. */ - -#define TARGET_LONG_BIT 64 -#define TARGET_LONG_LONG_BIT 64 -#define TARGET_PTR_BIT 64 - -/* Number of traps that happen between exec'ing the shell - * to run an inferior, and when we finally get to - * the inferior code. This is 2 on most implementations. - */ +/* Number of traps that happen between exec'ing the shell + to run an inferior, and when we finally get to + the inferior code. This is 2 on most implementations. */ #define START_INFERIOR_TRAPS_EXPECTED 3 -/* 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) alpha_skip_prologue((pc)) -extern CORE_ADDR alpha_skip_prologue (CORE_ADDR addr); - -/* Immediately after a function call, return the saved pc. - Can't always 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) alpha_saved_pc_after_call(frame) -extern CORE_ADDR alpha_saved_pc_after_call (struct frame_info *); - -/* Are we currently handling a signal ? */ - -#define IN_SIGTRAMP(pc, name) alpha_osf_in_sigtramp ((pc), (name)) -extern int alpha_osf_in_sigtramp (CORE_ADDR, char *); - -/* Stack grows downward. */ - -#define INNER_THAN(lhs,rhs) core_addr_lessthan ((lhs), (rhs)) - -#define BREAKPOINT {0x80, 0, 0, 0} /* call_pal bpt */ - -/* Amount PC must be decremented by after a breakpoint. - This is often the number of bytes in BREAKPOINT - but not always. */ - -#ifndef DECR_PC_AFTER_BREAK -#define DECR_PC_AFTER_BREAK 4 -#endif - -/* Say how long (ordinary) registers are. This is a piece of bogosity - used in push_word and a few other places; REGISTER_RAW_SIZE is the - real way to know how big a register is. */ - -#define REGISTER_SIZE 8 - -/* Number of machine registers */ - -#define NUM_REGS 66 - - -/* Return the name of register REGNO. */ - -#define REGISTER_NAME(regno) alpha_register_name ((regno)) -extern char *alpha_register_name (int); - - -/* Register numbers of various important registers. - Note that most of these values are "real" register numbers, - and correspond to the general registers of the machine, - and FP_REGNUM is a "phony" register number which is too large - to be an actual register number as far as the user is concerned - but serves to get the desired value when passed to read_register. */ - -#define V0_REGNUM 0 /* Function integer return value */ -#define T7_REGNUM 8 /* Return address register for OSF/1 __add* */ -#define GCC_FP_REGNUM 15 /* Used by gcc as frame register */ -#define A0_REGNUM 16 /* Loc of first arg during a subr call */ -#define T9_REGNUM 23 /* Return address register for OSF/1 __div* */ -#define T12_REGNUM 27 /* Contains start addr of current proc */ -#define SP_REGNUM 30 /* Contains address of top of stack */ -#define RA_REGNUM 26 /* Contains return address value */ -#define ZERO_REGNUM 31 /* Read-only register, always 0 */ -#define FP0_REGNUM 32 /* Floating point register 0 */ -#define FPA0_REGNUM 48 /* First float arg during a subr call */ -#define FPCR_REGNUM 63 /* Floating point control register */ -#define PC_REGNUM 64 /* Contains program counter */ -#define FP_REGNUM 65 /* Virtual frame pointer */ - -#define CANNOT_FETCH_REGISTER(regno) \ - alpha_cannot_fetch_register ((regno)) -extern int alpha_cannot_fetch_register (int); - -#define CANNOT_STORE_REGISTER(regno) \ - alpha_cannot_store_register ((regno)) -extern int alpha_cannot_store_register (int); - -/* Total amount of space needed to store our copies of the machine's - register state, the array `registers'. */ -#define REGISTER_BYTES (NUM_REGS * 8) - -/* Index within `registers' of the first byte of the space for - register N. */ - -#define REGISTER_BYTE(N) alpha_register_byte ((N)) -extern int alpha_register_byte (int); - -/* Number of bytes of storage in the actual machine representation - for register N. On Alphas, all regs are 8 bytes. */ - -#define REGISTER_RAW_SIZE(N) alpha_register_raw_size ((N)) -extern int alpha_register_raw_size (int); - -/* Number of bytes of storage in the program's representation - for register N. On Alphas, all regs are 8 bytes. */ - -#define REGISTER_VIRTUAL_SIZE(N) alpha_register_virtual_size ((N)) -extern int alpha_register_virtual_size (int); - -/* Largest value REGISTER_RAW_SIZE can have. */ - -#define MAX_REGISTER_RAW_SIZE 8 - -/* Largest value REGISTER_VIRTUAL_SIZE can have. */ - -#define MAX_REGISTER_VIRTUAL_SIZE 8 - -/* Nonzero if register N requires conversion - from raw format to virtual format. - The alpha needs a conversion between register and memory format if - the register is a floating point register and - memory format is float, as the register format must be double - or - memory format is an integer with 4 bytes or less, as the representation - of integers in floating point registers is different. */ - -#define REGISTER_CONVERTIBLE(N) alpha_register_convertible ((N)) -extern int alpha_register_convertible (int); - -/* Convert data from raw format for register REGNUM in buffer FROM - to virtual format with type TYPE in buffer TO. */ - -#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM, TYPE, FROM, TO) \ - alpha_register_convert_to_virtual (REGNUM, TYPE, FROM, TO) -extern void -alpha_register_convert_to_virtual (int, struct type *, char *, char *); - -/* Convert data from virtual format with type TYPE in buffer FROM - to raw format for register REGNUM in buffer TO. */ - -#define REGISTER_CONVERT_TO_RAW(TYPE, REGNUM, FROM, TO) \ - alpha_register_convert_to_raw (TYPE, REGNUM, FROM, TO) -extern void -alpha_register_convert_to_raw (struct type *, int, char *, char *); - -/* Return the GDB type object for the "standard" data type - of data in register N. */ - -#define REGISTER_VIRTUAL_TYPE(N) alpha_register_virtual_type ((N)) -extern struct type * alpha_register_virtual_type (int); - -/* Store the address of the place in which to copy the structure the - subroutine will return. Handled by alpha_push_arguments. */ - -#define STORE_STRUCT_RETURN(addr, sp) \ - alpha_store_struct_return ((addr), (sp)) -extern void alpha_store_struct_return (CORE_ADDR, CORE_ADDR); -/**/ - -/* Extract from an array REGBUF containing the (raw) register state - a function return value of type TYPE, and copy that, in virtual format, - into VALBUF. */ - -#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \ - alpha_extract_return_value(TYPE, REGBUF, VALBUF) -extern void alpha_extract_return_value (struct type *, char *, char *); - -/* Write into appropriate registers a function return value - of type TYPE, given in virtual format. */ - -#define STORE_RETURN_VALUE(TYPE,VALBUF) \ - alpha_store_return_value(TYPE, VALBUF) -extern void alpha_store_return_value (struct type *, char *); - -/* Extract from an array REGBUF containing the (raw) register state - the address in which a function should return its structure value, - as a CORE_ADDR (or an expression that can be used as one). */ -/* The address is passed in a0 upon entry to the function, but when - the function exits, the compiler has copied the value to v0. This - convention is specified by the System V ABI, so I think we can rely - on it. */ - -#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \ - alpha_extract_struct_value_address (REGBUF) -extern CORE_ADDR alpha_extract_struct_value_address (char *); - -/* Structures are returned by ref in extra arg0 */ -#define USE_STRUCT_CONVENTION(gcc_p, type) \ - alpha_use_struct_convention ((gcc_p), (type)) -extern int alpha_use_struct_convention (int, struct type *); - - -/* 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. */ - -#define FRAME_CHAIN(thisframe) alpha_frame_chain (thisframe) -extern CORE_ADDR alpha_frame_chain (struct frame_info *); - -/* Define other aspects of the stack frame. */ - - -/* An expression that tells us whether the function invocation represented - by FI does not have a frame on the stack associated with it. */ -/* We handle this differently for alpha, and maybe we should not */ - -#define FRAMELESS_FUNCTION_INVOCATION(FI) \ - generic_frameless_function_invocation_not ((FI)) - -/* Saved Pc. */ - -#define FRAME_SAVED_PC(FRAME) alpha_frame_saved_pc(FRAME) -extern CORE_ADDR alpha_frame_saved_pc (struct frame_info *); - -/* The alpha has two different virtual pointers for arguments and locals. - - The virtual argument pointer is pointing to the bottom of the argument - transfer area, which is located immediately below the virtual frame - pointer. Its size is fixed for the native compiler, it is either zero - (for the no arguments case) or large enough to hold all argument registers. - gcc uses a variable sized argument transfer area. As it has - to stay compatible with the native debugging tools it has to use the same - virtual argument pointer and adjust the argument offsets accordingly. - - The virtual local pointer is localoff bytes below the virtual frame - pointer, the value of localoff is obtained from the PDR. */ - -#define ALPHA_NUM_ARG_REGS 6 - -#define FRAME_ARGS_ADDRESS(fi) alpha_frame_args_address ((fi)) -extern CORE_ADDR alpha_frame_args_address (struct frame_info *); - -#define FRAME_LOCALS_ADDRESS(fi) alpha_frame_locals_address ((fi)) -extern CORE_ADDR alpha_frame_locals_address (struct frame_info *); - -/* Return number of args passed to a frame. - Can return -1, meaning no way to tell. */ - -#define FRAME_NUM_ARGS(fi) frame_num_args_unknown ((fi)) - -/* 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_INIT_SAVED_REGS(frame_info) \ - alpha_frame_init_saved_regs (frame_info) -extern void alpha_frame_init_saved_regs (struct frame_info *); - - -/* Things needed for making the inferior call functions. */ - -#define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \ - (alpha_push_arguments((nargs), (args), (sp), (struct_return), (struct_addr))) -extern CORE_ADDR -alpha_push_arguments (int, struct value **, CORE_ADDR, int, CORE_ADDR); - -/* Push an empty stack frame, to record the current PC, etc. */ - -#define PUSH_DUMMY_FRAME alpha_push_dummy_frame() -extern void alpha_push_dummy_frame (void); - -/* Discard from the stack the innermost frame, restoring all registers. */ - -#define POP_FRAME alpha_pop_frame() -extern void alpha_pop_frame (void); - -/* Alpha OSF/1 inhibits execution of code on the stack. - But there is no need for a dummy on the alpha. PUSH_ARGUMENTS - takes care of all argument handling and bp_call_dummy takes care - of stopping the dummy. */ - -#define CALL_DUMMY_LOCATION AT_ENTRY_POINT - -/* On the Alpha the call dummy code is never copied to user space, - stopping the user call is achieved via a bp_call_dummy breakpoint. - But we need a fake CALL_DUMMY definition to enable the proper - call_function_by_hand and to avoid zero length array warnings - in valops.c */ - -#define CALL_DUMMY_P (1) - -#define CALL_DUMMY_WORDS alpha_call_dummy_words -extern LONGEST alpha_call_dummy_words[]; - -#define SIZEOF_CALL_DUMMY_WORDS 0 - -#define CALL_DUMMY_START_OFFSET (0) - -#define CALL_DUMMY_BREAKPOINT_OFFSET (0) - -#define CALL_DUMMY_ADDRESS() alpha_call_dummy_address() -extern CORE_ADDR alpha_call_dummy_address (void); - -/* Insert the specified number of args and function address - into a call sequence of the above form stored at DUMMYNAME. - We only have to set RA_REGNUM to the dummy breakpoint address - and T12_REGNUM (the `procedure value register') to the function address. */ - -#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \ - alpha_fix_call_dummy ((dummyname), (pc), (fun), (nargs), (args), \ - (type), (gcc_p)) -extern void alpha_fix_call_dummy (char *, CORE_ADDR, CORE_ADDR, int, - struct value **, struct type *, int); - -/* There's a mess in stack frame creation. See comments in blockframe.c - near reference to INIT_FRAME_PC_FIRST. */ - -#define INIT_FRAME_PC(fromleaf, prev) init_frame_pc_noop ((fromleaf), (prev)) - -#define INIT_FRAME_PC_FIRST(fromleaf, prev) \ - alpha_init_frame_pc_first ((fromleaf), (prev)) -extern void alpha_init_frame_pc_first (int, struct frame_info *); - /* Special symbol found in blocks associated with routines. We can hang alpha_extra_func_info_t's off of this. */ #define MIPS_EFI_SYMBOL_NAME "__GDB_EFI_INFO__" extern void ecoff_relocate_efi (struct symbol *, CORE_ADDR); +#define RA_REGNUM 26 /* XXXJRT needed by mdebugread.c */ + /* Specific information about a procedure. This overlays the ALPHA's PDR records, alpharead.c (ab)uses this to save memory */ @@ -390,10 +65,6 @@ typedef struct alpha_extra_func_info #define mips_extra_func_info_t alpha_extra_func_info_t -#define INIT_EXTRA_FRAME_INFO(fromleaf, fci) \ - alpha_init_extra_frame_info(fromleaf, fci) -extern void alpha_init_extra_frame_info (int, struct frame_info *); - #define PRINT_EXTRA_FRAME_INFO(fi) alpha_print_extra_frame_info ((fi)) extern void alpha_print_extra_frame_info (struct frame_info *); @@ -408,64 +79,8 @@ extern void alpha_print_extra_frame_info (struct frame_info *); up so that the primary value is the SP, and the PC is used to disambiguate multiple functions with the same SP that are at different stack levels. */ -#define SETUP_ARBITRARY_FRAME(argc, argv) setup_arbitrary_frame (argc, argv) -extern struct frame_info *setup_arbitrary_frame (int, CORE_ADDR *); - -/* This is used by heuristic_proc_start. It should be shot it the head. */ -#ifndef VM_MIN_ADDRESS -#define VM_MIN_ADDRESS (CORE_ADDR)0x120000000 -#endif - -/* If PC is in a shared library trampoline code, return the PC - where the function itself actually starts. If not, return 0. */ -#define SKIP_TRAMPOLINE_CODE(pc) find_solib_trampoline_target (pc) - -/* If the current gcc for for this target does not produce correct debugging - information for float parameters, both prototyped and unprototyped, then - define this macro. This forces gdb to always assume that floats are - passed as doubles and then converted in the callee. - - For the alpha, it appears that the debug info marks the parameters as - floats regardless of whether the function is prototyped, but the actual - values are always passed in as doubles. Thus by setting this to 1, both - types of calls will work. */ - -#define COERCE_FLOAT_TO_DOUBLE(formal, actual) \ - standard_coerce_float_to_double ((formal), (actual)) - -/* Return TRUE if procedure descriptor PROC is a procedure descriptor - that refers to a dynamically generated sigtramp function. - - OSF/1 doesn't use dynamic sigtramp functions, so this is always - FALSE. */ - -#define PROC_DESC_IS_DYN_SIGTRAMP(proc) (0) -#define SET_PROC_DESC_IS_DYN_SIGTRAMP(proc) - -/* If PC is inside a dynamically generated sigtramp function, return - how many bytes the program counter is beyond the start of that - function. Otherwise, return a negative value. - - OSF/1 doesn't use dynamic sigtramp functions, so this always - returns -1. */ - -#define DYNAMIC_SIGTRAMP_OFFSET(pc) (-1) - -/* Translate a signal handler frame into the address of the sigcontext - structure. */ - -#define SIGCONTEXT_ADDR(frame) \ - (read_memory_integer ((frame)->next ? frame->next->frame : frame->frame, 8)) - -/* If FRAME refers to a sigtramp frame, return the address of the next - frame. */ - -#define FRAME_PAST_SIGTRAMP_FRAME(frame, pc) \ - (alpha_osf_skip_sigtramp_frame (frame, pc)) -extern CORE_ADDR alpha_osf_skip_sigtramp_frame (struct frame_info *, - CORE_ADDR); - -/* Single step based on where the current instruction will take us. */ -extern void alpha_software_single_step (enum target_signal, int); +#define SETUP_ARBITRARY_FRAME(argc, argv) \ + alpha_setup_arbitrary_frame (argc, argv) +extern struct frame_info *alpha_setup_arbitrary_frame (int, CORE_ADDR *); #endif /* TM_ALPHA_H */ diff --git a/gdb/config/alpha/tm-alphalinux.h b/gdb/config/alpha/tm-alphalinux.h index 23592aa..27ff457 100644 --- a/gdb/config/alpha/tm-alphalinux.h +++ b/gdb/config/alpha/tm-alphalinux.h @@ -27,14 +27,9 @@ #include "alpha/tm-alpha.h" -/* Are we currently handling a signal ? */ - -extern long alpha_linux_sigtramp_offset (CORE_ADDR); -#undef IN_SIGTRAMP -#define IN_SIGTRAMP(pc, name) (alpha_linux_sigtramp_offset (pc) >= 0) - /* Get start and end address of sigtramp handler. */ +extern LONGEST alpha_linux_sigtramp_offset (CORE_ADDR); #define SIGTRAMP_START(pc) (pc - alpha_linux_sigtramp_offset (pc)) #define SIGTRAMP_END(pc) (SIGTRAMP_START(pc) + 3*4) @@ -42,42 +37,9 @@ extern long alpha_linux_sigtramp_offset (CORE_ADDR); /* Number of traps that happen between exec'ing the shell to run an inferior, and when we finally get to the inferior code. This is 2 on GNU/Linux and most implementations. */ - #undef START_INFERIOR_TRAPS_EXPECTED #define START_INFERIOR_TRAPS_EXPECTED 2 -/* Return TRUE if procedure descriptor PROC is a procedure descriptor - that refers to a dynamically generated sigtramp function. */ - -#undef PROC_DESC_IS_DYN_SIGTRAMP -#define PROC_SIGTRAMP_MAGIC 0x0e0f0f0f -#define PROC_DESC_IS_DYN_SIGTRAMP(proc) ((proc)->pdr.isym \ - == PROC_SIGTRAMP_MAGIC) -#undef SET_PROC_DESC_IS_DYN_SIGTRAMP -#define SET_PROC_DESC_IS_DYN_SIGTRAMP(proc) ((proc)->pdr.isym \ - = PROC_SIGTRAMP_MAGIC) - -/* If PC is inside a dynamically generated sigtramp function, return - how many bytes the program counter is beyond the start of that - function. Otherwise, return a negative value. */ - -#undef DYNAMIC_SIGTRAMP_OFFSET -#define DYNAMIC_SIGTRAMP_OFFSET(pc) (alpha_linux_sigtramp_offset (pc)) - -/* Translate a signal handler frame into the address of the sigcontext - structure. */ - -#undef SIGCONTEXT_ADDR -#define SIGCONTEXT_ADDR(frame) ((frame)->frame - 0x298) - -/* If FRAME refers to a sigtramp frame, return the address of the next frame. - - Under GNU/Linux, sigtramp handlers have dynamically generated - procedure descriptors that make this hack unnecessary. */ - -#undef FRAME_PAST_SIGTRAMP_FRAME -#define FRAME_PAST_SIGTRAMP_FRAME(frame, pc) (0) - #include "tm-linux.h" #endif /* TM_LINUXALPHA_H */ diff --git a/gdb/config/alpha/tm-fbsd.h b/gdb/config/alpha/tm-fbsd.h index 00d3c27..d1d5254 100644 --- a/gdb/config/alpha/tm-fbsd.h +++ b/gdb/config/alpha/tm-fbsd.h @@ -1,5 +1,5 @@ /* Target-dependent definitions for FreeBSD/Alpha. - Copyright 2000, 2001 Free Software Foundation, Inc. + Copyright 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GDB. @@ -23,19 +23,6 @@ #include "alpha/tm-alpha.h" -/* FreeBSD uses the old gcc convention for struct returns. */ - -#undef USE_STRUCT_CONVENTION -#define USE_STRUCT_CONVENTION(gcc_p, type) \ - alphafbsd_use_struct_convention (gcc_p, type) - -/* FreeBSD doesn't mark the outermost frame. While some FreeBSD/Alpha - releases include (a minimal amount of) debugging info in its - startup code (crt1.o), the safest thing is to consider the user - code entry point as the outermost frame. */ -#define FRAME_CHAIN_VALID(chain, thisframe) \ - func_frame_chain_valid(chain, thisframe) - /* Number of traps that happen between exec'ing the shell to run an inferior, and when we finally get to the inferior code. The default is right for FreeBSD. */ diff --git a/gdb/config/alpha/tm-nbsd.h b/gdb/config/alpha/tm-nbsd.h new file mode 100644 index 0000000..9e92656 --- /dev/null +++ b/gdb/config/alpha/tm-nbsd.h @@ -0,0 +1,32 @@ +/* Target-dependent definitions for NetBSD/Alpha. + Copyright 2002 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + 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 + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef TM_NBSD_H +#define TM_NBSD_H + +#include "alpha/tm-alpha.h" + +/* Number of traps that happen between exec'ing the shell to run an + inferior, and when we finally get to the inferior code. The + default is right for NetBSD. */ + +#undef START_INFERIOR_TRAPS_EXPECTED + +#endif /* TM_NBSD_H */ diff --git a/gdb/config/arc/tm-arc.h b/gdb/config/arc/tm-arc.h index cd94476..cbdcf41 100644 --- a/gdb/config/arc/tm-arc.h +++ b/gdb/config/arc/tm-arc.h @@ -29,15 +29,14 @@ #define FUNCTION_START_OFFSET 0 /* Advance PC across any function entry prologue instructions - to reach some "real" code. SKIP_PROLOGUE_FRAMELESS_P advances - the PC past some of the prologue, but stops as soon as it - knows that the function has a frame. Its result is equal - to its input PC if the function is frameless, unequal otherwise. */ + to reach some "real" code. */ #define SKIP_PROLOGUE(pc) (arc_skip_prologue (pc, 0)) -#define SKIP_PROLOGUE_FRAMELESS_P(pc) (arc_skip_prologue (pc, 1)) extern CORE_ADDR arc_skip_prologue (CORE_ADDR, int); +#define PROLOGUE_FRAMELESS_P(pc) arc_prologue_frameless_p(pc) +extern int arc_prologue_frameless_p (CORE_ADDR); + /* Sequence of bytes for breakpoint instruction. ??? The current value is "sr -1,[-1]" and is for the simulator only. The simulator watches for this and does the right thing. diff --git a/gdb/config/avr/avr.mt b/gdb/config/avr/avr.mt new file mode 100644 index 0000000..0354a42 --- /dev/null +++ b/gdb/config/avr/avr.mt @@ -0,0 +1,12 @@ +# Target: AVR +TDEPFILES= avr-tdep.o + +# +# There is no simulator provided with gdb (yet). +# +# See <http://savannah.gnu.org/projects/simulavr/> for the simulator +# used during development of avr support for gdb. +# +# Simulator: AVR +#SIM_OBS = remote-sim.o +#SIM = ../sim/avr/libsim.a diff --git a/gdb/config/djgpp/README b/gdb/config/djgpp/README index 2427b64..805e1df 100644 --- a/gdb/config/djgpp/README +++ b/gdb/config/djgpp/README @@ -98,16 +98,17 @@ follows: 3. How to build ------------ -The source distribution available from DJGPP archives is already -configured for DJGPP v2.x, so if you only want to compile it, just -invoke Make: +If the source distribution available from DJGPP archives is already +configured for DJGPP v2.x (if it is, you will find files named +`Makefile' in each subdirectory), then just invoke Make: make -To build a package downloaded from a GNU FTP site, you will need o -configure it first. You will also need to configure it if you want to -change the configuration options (e.g., compile without support for the -GDBMI interface). To configure GDB, type this command: +To build a package that is not yet configured, or if you downloaded +GDB from a GNU FTP site, you will need to configure it first. You +will also need to configure it if you want to change the configuration +options (e.g., compile without support for the GDBMI interface). To +configure GDB, type this command: sh ./gdb/config/djgpp/djconfig.sh diff --git a/gdb/config/h8500/tm-h8500.h b/gdb/config/h8500/tm-h8500.h index f326165..fae6704 100644 --- a/gdb/config/h8500/tm-h8500.h +++ b/gdb/config/h8500/tm-h8500.h @@ -275,7 +275,6 @@ extern CORE_ADDR h8500_read_sp (void); extern void h8500_write_sp (CORE_ADDR); extern CORE_ADDR h8500_read_fp (void); -extern void h8500_write_fp (CORE_ADDR); extern CORE_ADDR h8500_read_pc (ptid_t); extern void h8500_write_pc (CORE_ADDR, ptid_t); @@ -287,4 +286,3 @@ extern void h8500_write_pc (CORE_ADDR, ptid_t); #define TARGET_WRITE_PC(x,pid) h8500_write_pc(x,pid) #define TARGET_READ_FP() h8500_read_fp() -#define TARGET_WRITE_FP(x) h8500_write_fp(x) diff --git a/gdb/config/i386/fbsd.mh b/gdb/config/i386/fbsd.mh index 364dfa6..4509b9c 100644 --- a/gdb/config/i386/fbsd.mh +++ b/gdb/config/i386/fbsd.mh @@ -4,4 +4,4 @@ XM_FILE= xm-i386.h NAT_FILE= nm-fbsd.h # NOTE: Do not spread NATDEPFILES over several lines - it hurts BSD make. -NATDEPFILES= fork-child.o infptrace.o inftarg.o solib.o solib-svr4.o solib-legacy.o corelow.o core-aout.o core-regset.o i386-nat.o i387-nat.o i386bsd-nat.o i386fbsd-nat.o +NATDEPFILES= fork-child.o infptrace.o inftarg.o solib.o solib-svr4.o solib-legacy.o corelow.o core-aout.o core-regset.o i386-nat.o i387-nat.o i386bsd-nat.o i386fbsd-nat.o gcore.o fbsd-proc.o diff --git a/gdb/config/i386/i386gnu.mh b/gdb/config/i386/i386gnu.mh index 252b2e5..13feba5 100644 --- a/gdb/config/i386/i386gnu.mh +++ b/gdb/config/i386/i386gnu.mh @@ -1,5 +1,9 @@ # Host: Intel 386 running the GNU Hurd -NATDEPFILES= i386gnu-nat.o i387-nat.o gnu-nat.o fork-child.o solib.o solib-svr4.o solib-legacy.o corelow.o notify_S.o process_reply_S.o msg_reply_S.o msg_U.o exc_request_U.o exc_request_S.o +NATDEPFILES= i386gnu-nat.o i387-nat.o gnu-nat.o corelow.o core-regset.o \ + fork-child.o solib.o solib-svr4.o solib-legacy.o \ + notify_S.o process_reply_S.o msg_reply_S.o \ + msg_U.o exc_request_U.o exc_request_S.o + XM_FILE= xm-i386gnu.h NAT_FILE= nm-gnu.h MH_CFLAGS = -D_GNU_SOURCE diff --git a/gdb/config/i386/i386lynx.mh b/gdb/config/i386/i386lynx.mh index 0552b4d..edfb1b0 100644 --- a/gdb/config/i386/i386lynx.mh +++ b/gdb/config/i386/i386lynx.mh @@ -4,6 +4,3 @@ XM_CLIBS= -lbsd NAT_FILE= nm-i386lynx.h NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o lynx-nat.o - -## OBSOLETE ## GDBSERVER_LIBS= -lbsd -## OBSOLETE ## GDBSERVER_DEPFILES= low-lynx.o diff --git a/gdb/config/i386/i386v42mp.mh b/gdb/config/i386/i386v42mp.mh index 007a8bf..6479be3 100644 --- a/gdb/config/i386/i386v42mp.mh +++ b/gdb/config/i386/i386v42mp.mh @@ -14,5 +14,7 @@ NAT_FILE= nm-i386v42mp.h # continuation character (backslash) to extend a commented line. As a # consequence, make considers subsequent tab-indented lines to be # some sort of error. -NATDEPFILES= corelow.o core-regset.o fork-child.o i386v4-nat.o i387-nat.o solib.o solib-svr4.o solib-legacy.o procfs.o proc-api.o proc-events.o proc-flags.o proc-why.o uw-thread.o +NATDEPFILES= corelow.o core-regset.o fork-child.o i386v4-nat.o i387-nat.o \ + gcore.o solib.o solib-svr4.o solib-legacy.o procfs.o proc-api.o \ + proc-events.o proc-flags.o proc-why.o uw-thread.o diff --git a/gdb/config/i386/nbsd.mt b/gdb/config/i386/nbsd.mt index 8ab606e..b8fc668 100644 --- a/gdb/config/i386/nbsd.mt +++ b/gdb/config/i386/nbsd.mt @@ -1,5 +1,3 @@ # Target: Intel 386 running NetBSD TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o i386nbsd-tdep.o TM_FILE= tm-nbsd.h - -## OBSOLETE ## GDBSERVER_DEPFILES= low-nbsd.o diff --git a/gdb/config/i386/nbsdelf.mt b/gdb/config/i386/nbsdelf.mt index ab173d3..1bccd32 100644 --- a/gdb/config/i386/nbsdelf.mt +++ b/gdb/config/i386/nbsdelf.mt @@ -1,5 +1,3 @@ # Target: Intel 386 running NetBSD TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o TM_FILE= tm-nbsdelf.h - -## OBSOLETE ## GDBSERVER_DEPFILES= low-nbsd.o diff --git a/gdb/config/i386/nm-fbsd.h b/gdb/config/i386/nm-fbsd.h index 939b880..b791903 100644 --- a/gdb/config/i386/nm-fbsd.h +++ b/gdb/config/i386/nm-fbsd.h @@ -56,6 +56,9 @@ extern unsigned long i386bsd_dr_get_status (void); /* Override child_resume in `infptrace.c' to work around a kernel bug. */ #define CHILD_RESUME +/* Override child_pid_to_exec_file in 'inftarg.c'. */ +#define CHILD_PID_TO_EXEC_FILE + /* We can attach and detach. */ #define ATTACH_DETACH diff --git a/gdb/config/i386/nm-x86-64.h b/gdb/config/i386/nm-x86-64.h index 0d7048e..30e3731 100644 --- a/gdb/config/i386/nm-x86-64.h +++ b/gdb/config/i386/nm-x86-64.h @@ -65,10 +65,8 @@ extern int kernel_u_size (void); to get the offset in the core file of the register values. */ #define KERNEL_U_ADDR 0x0 -/* FIXME use special child_xfer_memory. */ -#define CHILD_XFER_MEMORY - #define PTRACE_ARG3_TYPE void* +#define PTRACE_XFER_TYPE unsigned long /* We define this if link.h is available, because with ELF we use SVR4 style @@ -82,9 +80,6 @@ extern int kernel_u_size (void); /* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */ #define FETCH_INFERIOR_REGISTERS -/* Override child_resume in `infptrace.c'. */ -#define CHILD_RESUME - #undef PREPARE_TO_PROCEED #include <signal.h> diff --git a/gdb/config/i386/tm-linux.h b/gdb/config/i386/tm-linux.h index 5c549b9..60c4b1e 100644 --- a/gdb/config/i386/tm-linux.h +++ b/gdb/config/i386/tm-linux.h @@ -26,6 +26,7 @@ #define I386_GNULINUX_TARGET #define HAVE_I387_REGS #ifdef HAVE_PTRACE_GETFPXREGS +#define FILL_FPXREGSET #define HAVE_SSE_REGS #endif diff --git a/gdb/config/i386/x86-64linux.mt b/gdb/config/i386/x86-64linux.mt index 1f3a796..85f1972 100644 --- a/gdb/config/i386/x86-64linux.mt +++ b/gdb/config/i386/x86-64linux.mt @@ -1,5 +1,3 @@ # Target: AMD x86-64 running GNU/Linux TDEPFILES= x86-64-tdep.o x86-64-linux-tdep.o i387-tdep.o dwarf2cfi.o \ solib.o solib-svr4.o solib-legacy.o - -## OBSOLETE ## GDBSERVER_DEPFILES= low-linux.o diff --git a/gdb/config/i960/tm-i960.h b/gdb/config/i960/tm-i960.h index 2b24889..a62e35d 100644 --- a/gdb/config/i960/tm-i960.h +++ b/gdb/config/i960/tm-i960.h @@ -1,6 +1,8 @@ /* Parameters for target machine Intel 960, for GDB, the GNU debugger. - Copyright 1990, 1991, 1993, 1994, 1996, 1998, 1999, 2000 - Free Software Foundation, Inc. + + Copyright 1990, 1991, 1993, 1994, 1996, 1998, 1999, 2000, 2002 Free + Software Foundation, Inc. + Contributed by Intel Corporation. This file is part of GDB. @@ -114,21 +116,16 @@ extern CORE_ADDR saved_pc_after_call (); /* The i960 has register windows, sort of. */ -#define HAVE_REGISTER_WINDOWS - -/* Is this register part of the register window system? A yes answer - implies that 1) The name of this register will not be the same in - other frames, and 2) This register is automatically "saved" upon - subroutine calls and thus there is no need to search more than one - stack frame for it. +extern void i960_get_saved_register (char *raw_buffer, + int *optimized, + CORE_ADDR *addrp, + struct frame_info *frame, + int regnum, + enum lval_type *lval); - On the i960, in fact, the name of this register in another frame is - "mud" -- there is no overlap between the windows. Each window is - simply saved into the stack (true for our purposes, after having been - flushed; normally they reside on-chip and are restored from on-chip - without ever going to memory). */ +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + i960_get_saved_register(raw_buffer, optimized, addrp, frame, regnum, lval) -#define REGISTER_IN_WINDOW_P(regnum) ((regnum) <= R15_REGNUM) /* Number of bytes of storage in the actual machine representation for register N. On the i960, all regs are 4 bytes except for floating diff --git a/gdb/config/m32r/m32r.mt b/gdb/config/m32r/m32r.mt index 2be2649..a200853 100644 --- a/gdb/config/m32r/m32r.mt +++ b/gdb/config/m32r/m32r.mt @@ -3,6 +3,3 @@ TDEPFILES= m32r-tdep.o monitor.o m32r-rom.o dsrec.o TM_FILE= tm-m32r.h SIM_OBS = remote-sim.o SIM = ../sim/m32r/libsim.a - -## OBSOLETE ## GDBSERVER_DEPFILES= low-sim.o -## OBSOLETE ## GDBSERVER_LIBS = ../../sim/m32r/libsim.a ../../bfd/libbfd.a ../../libiberty/libiberty.a ../../opcodes/libopcodes.a ../../intl/libintl.a diff --git a/gdb/config/m68k/m68klynx.mh b/gdb/config/m68k/m68klynx.mh index 803dac3..3838012 100644 --- a/gdb/config/m68k/m68klynx.mh +++ b/gdb/config/m68k/m68klynx.mh @@ -4,6 +4,3 @@ XM_CLIBS= -lbsd NAT_FILE= nm-m68klynx.h NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o lynx-nat.o - -## OBSOLETE ## GDBSERVER_LIBS= -lbsd -## OBSOLETE ## GDBSERVER_DEPFILES= low-lynx.o diff --git a/gdb/config/m68k/nbsd.mt b/gdb/config/m68k/nbsd.mt index d83d91d..b6ac5a0 100644 --- a/gdb/config/m68k/nbsd.mt +++ b/gdb/config/m68k/nbsd.mt @@ -1,5 +1,3 @@ # Target: Motorola m68k running NetBSD TDEPFILES= m68k-tdep.o m68knbsd-tdep.o TM_FILE= tm-nbsd.h - -## OBSOLETE ## GDBSERVER_DEPFILES= low-nbsd.o diff --git a/gdb/config/m68k/sun3os4.mh b/gdb/config/m68k/sun3os4.mh index 4ed46a2..18b1f08 100644 --- a/gdb/config/m68k/sun3os4.mh +++ b/gdb/config/m68k/sun3os4.mh @@ -2,5 +2,3 @@ XM_FILE= xm-sun3os4.h NAT_FILE= nm-sun3.h NATDEPFILES= fork-child.o inftarg.o infptrace.o corelow.o sun3-nat.o - -## OBSOLETE ## GDBSERVER_DEPFILES= low-sun3.o diff --git a/gdb/config/m68k/tm-nbsd.h b/gdb/config/m68k/tm-nbsd.h index 178bf56..354632a 100644 --- a/gdb/config/m68k/tm-nbsd.h +++ b/gdb/config/m68k/tm-nbsd.h @@ -1,4 +1,4 @@ -/* Macro definitions for i386 running under NetBSD. +/* Macro definitions for m68k running under NetBSD. Copyright 1994, 1996, 2001 Free Software Foundation, Inc. This file is part of GDB. diff --git a/gdb/config/mcore/tm-mcore.h b/gdb/config/mcore/tm-mcore.h index 7ce6373..1da21b7 100644 --- a/gdb/config/mcore/tm-mcore.h +++ b/gdb/config/mcore/tm-mcore.h @@ -1,5 +1,6 @@ /* Parameters for execution on a Motorola MCore. - Copyright 1995, 1999, 2000 Free Software Foundation, Inc. + + Copyright 1995, 1999, 2000, 2002 Free Software Foundation, Inc. This file is part of GDB. @@ -19,6 +20,8 @@ Boston, MA 02111-1307, USA. */ #include "regcache.h" +#include "symtab.h" /* For namespace_enum. */ +#include "symfile.h" /* For entry_point_address(). */ /* All registers are 32 bits */ #define REGISTER_SIZE 4 @@ -62,7 +65,8 @@ extern char *mcore_register_names[]; /* BREAKPOINT_FROM_PC uses the program counter value to determine the breakpoint that should be used. */ -extern breakpoint_from_pc_fn mcore_breakpoint_from_pc; +extern const unsigned char *mcore_breakpoint_from_pc (CORE_ADDR *pcptr, + int *lenptr); #define BREAKPOINT_FROM_PC(PCPTR, LENPTR) mcore_breakpoint_from_pc (PCPTR, LENPTR) #define INNER_THAN(LHS,RHS) ((LHS) < (RHS)) diff --git a/gdb/config/mips/vr5000.mt b/gdb/config/mips/vr5000.mt index f9811d0..7a4a915 100644 --- a/gdb/config/mips/vr5000.mt +++ b/gdb/config/mips/vr5000.mt @@ -3,6 +3,3 @@ TDEPFILES= mips-tdep.o remote-mips.o TM_FILE= tm-vr5000.h SIM_OBS = remote-sim.o SIM = ../sim/mips/libsim.a - -## OBSOLETE ## GDBSERVER_DEPFILES= low-sim.o -## OBSOLETE ## GDBSERVER_LIBS = ../../sim/mips/libsim.a ../../bfd/libbfd.a ../../libiberty/libiberty.a -lm ../../intl/libintl.a diff --git a/gdb/config/mn10200/tm-mn10200.h b/gdb/config/mn10200/tm-mn10200.h index 66fb037..4402b78 100644 --- a/gdb/config/mn10200/tm-mn10200.h +++ b/gdb/config/mn10200/tm-mn10200.h @@ -1,5 +1,7 @@ /* Parameters for execution on a Matsushita mn10200 processor. - Copyright 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + + Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software + Foundation, Inc. Contributed by Geoffrey Noer <noer@cygnus.com> @@ -24,6 +26,8 @@ declared in "regcache.h". The ``correct fix'' is to convert those macros into functions. */ #include "regcache.h" +#include "symtab.h" /* For namespace_enum. */ +#include "symfile.h" /* For entry_point_address(). */ /* ints are only 16bits on the mn10200. */ #undef TARGET_INT_BIT diff --git a/gdb/config/ns32k/nbsd.mt b/gdb/config/ns32k/nbsd.mt index f677af1..14d37f9 100644 --- a/gdb/config/ns32k/nbsd.mt +++ b/gdb/config/ns32k/nbsd.mt @@ -1,5 +1,3 @@ # Target: PC532 running NetBSD TDEPFILES= ns32k-tdep.o TM_FILE= tm-nbsd.h - -## OBSOLETE ## GDBSERVER_DEPFILES= low-nbsd.o diff --git a/gdb/config/pa/hppabsd.mh b/gdb/config/pa/hppabsd.mh index 0f66bb6..d4a152d 100644 --- a/gdb/config/pa/hppabsd.mh +++ b/gdb/config/pa/hppabsd.mh @@ -2,5 +2,3 @@ XM_FILE= xm-hppab.h NAT_FILE= nm-hppab.h NATDEPFILES= hppab-nat.o corelow.o core-aout.o inftarg.o fork-child.o somread.o infptrace.o hpread.o somsolib.o - -## OBSOLETE ## GDBSERVER_DEPFILES= low-hppabsd.o diff --git a/gdb/config/pa/hppaosf.mh b/gdb/config/pa/hppaosf.mh index 95a689a..d6dd282 100644 --- a/gdb/config/pa/hppaosf.mh +++ b/gdb/config/pa/hppaosf.mh @@ -3,6 +3,3 @@ XM_FILE= xm-hppab.h NAT_FILE= nm-hppao.h NATDEPFILES= fork-child.o m3-nat.o hppam3-nat.o somread.o hpread.o somsolib.o NAT_CLIBS= -lmachid -lnetname -lmach - -## OBSOLETE ## GDBSERVER_DEPFILES= low-hppabsd.o - diff --git a/gdb/config/pa/hpux1020.mh b/gdb/config/pa/hpux1020.mh index e9c24ee..18f542e 100644 --- a/gdb/config/pa/hpux1020.mh +++ b/gdb/config/pa/hpux1020.mh @@ -1,6 +1,10 @@ # Host: Hewlett-Packard PA-RISC machine, running HPUX 10.20 -MH_CFLAGS = -D__HP_CURSES +# FIXME: cagney/2002-04-07: gdb/366: The -Dvfork=fork hack below is +# stop GDB hanging on HP/UX. For some reason vfork() hangs yet fork() +# doesn't .... + +MH_CFLAGS = -D__HP_CURSES -Dvfork=fork XM_FILE= xm-hppah.h diff --git a/gdb/config/pa/hpux11.mh b/gdb/config/pa/hpux11.mh index a9919c4..25504e0 100644 --- a/gdb/config/pa/hpux11.mh +++ b/gdb/config/pa/hpux11.mh @@ -1,6 +1,10 @@ # Host: Hewlett-Packard PA-RISC machine, running HPUX 11.00 -MH_CFLAGS = -D__HP_CURSES +# FIXME: cagney/2002-04-07: gdb/366: The -Dvfork=fork hack below is +# stop GDB hanging on HP/UX. For some reason vfork() hangs yet fork() +# doesn't .... + +MH_CFLAGS = -D__HP_CURSES -Dvfork=fork XM_FILE= xm-hppah.h diff --git a/gdb/config/pa/hpux11w.mh b/gdb/config/pa/hpux11w.mh index 279efa1..b784263 100644 --- a/gdb/config/pa/hpux11w.mh +++ b/gdb/config/pa/hpux11w.mh @@ -1,6 +1,10 @@ # Host: Hewlett-Packard PA-RISC machine, running HPUX 11.00 -MH_CFLAGS = -D__HP_CURSES +# FIXME: cagney/2002-04-07: gdb/366: The -Dvfork=fork hack below is +# stop GDB hanging on HP/UX. For some reason vfork() hangs yet fork() +# doesn't .... + +MH_CFLAGS = -D__HP_CURSES -Dvfork=fork XM_FILE= xm-hppah.h diff --git a/gdb/config/pa/tm-hppa.h b/gdb/config/pa/tm-hppa.h index 36e57bd..227108f 100644 --- a/gdb/config/pa/tm-hppa.h +++ b/gdb/config/pa/tm-hppa.h @@ -376,15 +376,8 @@ extern void init_extra_frame_info (int, struct frame_info *); /* 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. */ +/* FRAME_CHAIN takes a frame's nominal address and produces the + frame's chain-pointer. */ /* In the case of the PA-RISC, the frame's nominal address is the address of a 4-byte word containing the calling frame's @@ -396,8 +389,6 @@ extern CORE_ADDR frame_chain (struct frame_info *); extern int hppa_frame_chain_valid (CORE_ADDR, struct frame_info *); #define FRAME_CHAIN_VALID(chain, thisframe) hppa_frame_chain_valid (chain, thisframe) -#define FRAME_CHAIN_COMBINE(chain, thisframe) (chain) - /* Define other aspects of the stack frame. */ /* A macro that tells us whether the function invocation represented diff --git a/gdb/config/powerpc/nbsd.mt b/gdb/config/powerpc/nbsd.mt index 164abfe..40a2a99 100644 --- a/gdb/config/powerpc/nbsd.mt +++ b/gdb/config/powerpc/nbsd.mt @@ -2,7 +2,5 @@ TDEPFILES= rs6000-tdep.o ppc-linux-tdep.o solib.o solib-svr4.o TM_FILE= tm-nbsd.h -## OBSOLETE ## GDBSERVER_DEPFILES= low-nbsd.o - SIM_OBS = remote-sim.o SIM = ../sim/ppc/libsim.a diff --git a/gdb/config/powerpc/tm-ppc-eabi.h b/gdb/config/powerpc/tm-ppc-eabi.h index 92e4127..e49b2bd 100644 --- a/gdb/config/powerpc/tm-ppc-eabi.h +++ b/gdb/config/powerpc/tm-ppc-eabi.h @@ -28,17 +28,11 @@ #undef SOFTWARE_SINGLE_STEP_P #define SOFTWARE_SINGLE_STEP_P() 0 -#undef DEFAULT_LR_SAVE -#define DEFAULT_LR_SAVE 4 /* eabi saves LR at 4 off of SP */ - #undef PROCESS_LINENUMBER_HOOK #undef TEXT_SEGMENT_BASE #define TEXT_SEGMENT_BASE 1 -/* Say that we're using ELF, not XCOFF. */ -#define ELF_OBJECT_FORMAT 1 - /* The value of symbols of type N_SO and N_FUN maybe null when it shouldn't be. */ #define SOFUN_ADDRESS_MAYBE_MISSING diff --git a/gdb/config/rs6000/rs6000lynx.mh b/gdb/config/rs6000/rs6000lynx.mh index 2ae49c2..096473f 100644 --- a/gdb/config/rs6000/rs6000lynx.mh +++ b/gdb/config/rs6000/rs6000lynx.mh @@ -4,6 +4,3 @@ XM_CLIBS= -lbsd NAT_FILE= nm-rs6000ly.h NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o lynx-nat.o xcoffread.o - -## OBSOLETE ## GDBSERVER_LIBS= -lbsd -## OBSOLETE ## GDBSERVER_DEPFILES= low-lynx.o diff --git a/gdb/config/rs6000/tm-rs6000.h b/gdb/config/rs6000/tm-rs6000.h index 015a592..202ac77 100644 --- a/gdb/config/rs6000/tm-rs6000.h +++ b/gdb/config/rs6000/tm-rs6000.h @@ -93,9 +93,6 @@ extern void aix_process_linenos (void); prev->next ? FRAME_SAVED_PC (prev->next) : read_pc ()); #define INIT_FRAME_PC(fromleaf, prev) /* nothing */ -/* Default offset from SP where the LR is stored */ -#define DEFAULT_LR_SAVE 8 - /* Flag for machine-specific stuff in shared files. FIXME */ #define IBM6000_TARGET diff --git a/gdb/config/s390/s390.mh b/gdb/config/s390/s390.mh index 28e2a1f..300a5e3 100644 --- a/gdb/config/s390/s390.mh +++ b/gdb/config/s390/s390.mh @@ -4,9 +4,9 @@ XM_FILE= xm-linux.h XM_CLIBS= NAT_FILE= nm-linux.h -NATDEPFILES= infptrace.o solib.o inftarg.o fork-child.o corelow.o s390-nat.o core-aout.o core-regset.o -# post 5.0 natdepfiles. -NATDEPFILES+= thread-db.o lin-lwp.o proc-service.o +NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o s390-nat.o \ + core-aout.o core-regset.o linux-proc.o gcore.o thread-db.o lin-lwp.o \ + proc-service.o LOADLIBES = -ldl -rdynamic diff --git a/gdb/config/s390/s390.mt b/gdb/config/s390/s390.mt index 9095058..6b8d91f 100644 --- a/gdb/config/s390/s390.mt +++ b/gdb/config/s390/s390.mt @@ -4,5 +4,3 @@ TDEPFILES=s390-tdep.o solib.o # Post 5.0 tdep-files TDEPFILES+=solib-svr4.o solib-legacy.o GDB_MULTI_ARCH=GDB_MULTI_ARCH_PARTIAL - -## OBSOLETE ## GDBSERVER_DEPFILES= low-linux.o s390-tdep.o s390-nat.o diff --git a/gdb/config/s390/s390x.mt b/gdb/config/s390/s390x.mt index 4df35a1..7b23cad 100644 --- a/gdb/config/s390/s390x.mt +++ b/gdb/config/s390/s390x.mt @@ -5,7 +5,5 @@ TDEPFILES=s390-tdep.o solib.o TDEPFILES+=solib-svr4.o solib-legacy.o GDB_MULTI_ARCH=GDB_MULTI_ARCH_PARTIAL -## OBSOLETE ## GDBSERVER_DEPFILES= low-linux.o s390-tdep.o s390-nat.o - # needed for gdbserver. MT_CFLAGS= -DCONFIG_ARCH_S390X diff --git a/gdb/config/sparc/linux.mh b/gdb/config/sparc/linux.mh index f2c26d5..4a2c41f 100644 --- a/gdb/config/sparc/linux.mh +++ b/gdb/config/sparc/linux.mh @@ -12,5 +12,3 @@ NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o sparc-nat.o \ LOADLIBES = -ldl -rdynamic HOST_IPC=-DBSD_IPC - -## OBSOLETE ## GDBSERVER_DEPFILES= low-sparc.o diff --git a/gdb/config/sparc/sparclynx.mh b/gdb/config/sparc/sparclynx.mh index b938b2f..c573604 100644 --- a/gdb/config/sparc/sparclynx.mh +++ b/gdb/config/sparc/sparclynx.mh @@ -4,6 +4,3 @@ XM_CLIBS= -lbsd NAT_FILE= nm-sparclynx.h NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o lynx-nat.o - -## OBSOLETE ## GDBSERVER_LIBS= -lbsd -## OBSOLETE ## GDBSERVER_DEPFILES= low-lynx.o diff --git a/gdb/config/sparc/sun4os4.mh b/gdb/config/sparc/sun4os4.mh index 516be36..4e664d7 100644 --- a/gdb/config/sparc/sun4os4.mh +++ b/gdb/config/sparc/sun4os4.mh @@ -3,8 +3,6 @@ NAT_FILE= nm-sun4os4.h NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o sparc-nat.o HOST_IPC=-DBSD_IPC -## OBSOLETE ## GDBSERVER_DEPFILES= low-sparc.o - # Setting XM_CLIBS=-lresolv would let us use the DNS, but that would screw # anyone who wants to use NIS, which includes at least one Cygnus customer # (PR 3593). So leave it this way until/unless we find a resolver which can diff --git a/gdb/config/sparc/tm-linux.h b/gdb/config/sparc/tm-linux.h index c3a6f82..34d901f 100644 --- a/gdb/config/sparc/tm-linux.h +++ b/gdb/config/sparc/tm-linux.h @@ -23,6 +23,8 @@ #ifndef TM_SPARCLINUX_H #define TM_SPARCLINUX_H +#define GDB_MULTI_ARCH GDB_MULTI_ARCH_PARTIAL + #include "sparc/tm-sparc.h" #define SIGCONTEXT_PC_OFFSET 12 diff --git a/gdb/config/sparc/tm-sp64.h b/gdb/config/sparc/tm-sp64.h index 55006c6..8486c86 100644 --- a/gdb/config/sparc/tm-sp64.h +++ b/gdb/config/sparc/tm-sp64.h @@ -268,12 +268,10 @@ CORE_ADDR sparc64_push_arguments (int, extern CORE_ADDR sparc64_read_sp (); extern CORE_ADDR sparc64_read_fp (); extern void sparc64_write_sp (CORE_ADDR); -extern void sparc64_write_fp (CORE_ADDR); #define TARGET_READ_SP() (sparc64_read_sp ()) #define TARGET_READ_FP() (sparc64_read_fp ()) #define TARGET_WRITE_SP(X) (sparc64_write_sp (X)) -#define TARGET_WRITE_FP(X) (sparc64_write_fp (X)) #undef EXTRACT_RETURN_VALUE #define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \ diff --git a/gdb/config/sparc/tm-sp64linux.h b/gdb/config/sparc/tm-sp64linux.h index 2503ccb..56b5620 100644 --- a/gdb/config/sparc/tm-sp64linux.h +++ b/gdb/config/sparc/tm-sp64linux.h @@ -21,8 +21,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TM_SPARC_LIN64_H #define TM_SPARC_LIN64_H -#define GDB_MULTI_ARCH 0 - #include "sparc/tm-sp64.h" #define SIGCONTEXT_PC_OFFSET 16 /* See asm-sparc64/sigcontext.h */ diff --git a/gdb/config/sparc/tm-sparc.h b/gdb/config/sparc/tm-sparc.h index 4db7ab7..4a53580 100644 --- a/gdb/config/sparc/tm-sparc.h +++ b/gdb/config/sparc/tm-sparc.h @@ -248,12 +248,10 @@ extern int sparc_intreg_size (void); #define BELIEVE_PCC_PROMOTION 1 /* Advance PC across any function entry prologue instructions - to reach some "real" code. SKIP_PROLOGUE_FRAMELESS_P advances - the PC past some of the prologue, but stops as soon as it - knows that the function has a frame. Its result is equal - to its input PC if the function is frameless, unequal otherwise. */ + to reach some "real" code. */ -#define SKIP_PROLOGUE(PC) sparc_skip_prologue (PC, 0) +extern CORE_ADDR sparc_skip_prologue (CORE_ADDR); +#define SKIP_PROLOGUE(PC) sparc_skip_prologue (PC) /* Immediately after a function call, return the saved pc. Can't go through the frames for this because on some machines @@ -312,6 +310,10 @@ extern CORE_ADDR sparc32_stack_align (CORE_ADDR addr); sparc_reg_struct_has_addr (GCC_P, TYPE) extern int sparc_reg_struct_has_addr (int, struct type *); +/* Is the prologue at PC frameless? */ +#define PROLOGUE_FRAMELESS_P(PC) sparc_prologue_frameless_p (PC) +extern int sparc_prologue_frameless_p (CORE_ADDR); + #endif /* GDB_MULTI_ARCH */ #if defined (GDB_MULTI_ARCH) && (GDB_MULTI_ARCH > 0) @@ -333,15 +335,6 @@ extern int sparc_y_regnum (void); #define PC_ADJUST(PC) sparc_pc_adjust (PC) extern CORE_ADDR sparc_pc_adjust (CORE_ADDR); -/* Advance PC across any function entry prologue instructions to reach - some "real" code. SKIP_PROLOGUE_FRAMELESS_P advances the PC past - some of the prologue, but stops as soon as it knows that the - function has a frame. Its result is equal to its input PC if the - function is frameless, unequal otherwise. */ - -#define SKIP_PROLOGUE_FRAMELESS_P(PC) sparc_skip_prologue (PC, 1) -extern CORE_ADDR sparc_skip_prologue (CORE_ADDR, int); - /* If an argument is declared "register", Sun cc will keep it in a register, never saving it onto the stack. So we better not believe the "p" symbol descriptor stab. */ @@ -468,9 +461,8 @@ extern CORE_ADDR sparc_skip_prologue (CORE_ADDR, int); /* time of the register saves. */ \ int sp_offset; -/* We need to override GET_SAVED_REGISTER so that we can deal with the way - outs change into ins in different frames. HAVE_REGISTER_WINDOWS can't - deal with this case and also handle flat frames at the same time. */ +/* We need to override GET_SAVED_REGISTER so that we can deal with the + way outs change into ins in different frames. */ void sparc_get_saved_register (char *raw_buffer, int *optimized, diff --git a/gdb/config/v850/tm-v850.h b/gdb/config/v850/tm-v850.h index 0636b98..c085cb5 100644 --- a/gdb/config/v850/tm-v850.h +++ b/gdb/config/v850/tm-v850.h @@ -1,6 +1,7 @@ /* Parameters for execution on an NEC V850 processor. - Copyright 1996, 1997, 1998, 1999, 2000 - Free Software Foundation, Inc. + + Copyright 1996, 1997, 1998, 1999, 2000, 2002 Free Software + Foundation, Inc. This file is part of GDB. @@ -20,6 +21,8 @@ Boston, MA 02111-1307, USA. */ #include "regcache.h" +#include "symtab.h" /* For namespace_enum. */ +#include "symfile.h" /* For entry_point_address(). */ #define NUM_REGS 66 @@ -72,7 +75,6 @@ extern char **v850_register_names; #define FP_RAW_REGNUM 29 #define TARGET_READ_FP() read_register (FP_RAW_REGNUM) -#define TARGET_WRITE_FP(VAL) write_register (FP_REGNUM, (VAL)) #define REGISTER_VIRTUAL_TYPE(REG) builtin_type_int diff --git a/gdb/config/vax/tm-vax.h b/gdb/config/vax/tm-vax.h index bfa243c..204d155 100644 --- a/gdb/config/vax/tm-vax.h +++ b/gdb/config/vax/tm-vax.h @@ -1,5 +1,5 @@ /* Definitions to make GDB run on a vax under 4.2bsd. - Copyright 1986, 1987, 1989, 1991, 1993, 1994, 1996, 1998, 1999, 2000 + Copyright 1986, 1987, 1989, 1991, 1993, 1994, 1996, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. This file is part of GDB. @@ -19,25 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "regcache.h" - -/* Offset from address of function to start of its code. - Zero on most machines. */ - -#define FUNCTION_START_OFFSET 2 - -/* Advance PC across any function entry prologue instructions - to reach some "real" code. */ - -extern CORE_ADDR vax_skip_prologue (CORE_ADDR); -#define SKIP_PROLOGUE(pc) (vax_skip_prologue (pc)) - -/* Immediately after a function call, return the saved pc. - Can't always 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) FRAME_SAVED_PC(frame) +#define GDB_MULTI_ARCH GDB_MULTI_ARCH_PARTIAL #define TARGET_UPAGES 14 #define TARGET_NBPG 512 @@ -49,260 +31,18 @@ extern CORE_ADDR vax_skip_prologue (CORE_ADDR); #define SIGTRAMP_START(pc) STACK_END_ADDR #define SIGTRAMP_END(pc) 0x80000000 -/* Stack grows downward. */ - -#define INNER_THAN(lhs,rhs) ((lhs) < (rhs)) - /* Sequence of bytes for breakpoint instruction. */ - #define BREAKPOINT {3} -/* 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 - -/* Say how long (ordinary) registers are. This is a piece of bogosity - used in push_word and a few other places; REGISTER_RAW_SIZE is the - real way to know how big a register is. */ - -#define REGISTER_SIZE 4 - -/* Number of machine registers */ - -#define NUM_REGS 17 - -/* 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", "ap", "fp", "sp", "pc", "ps"} - -/* 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 AP_REGNUM 12 -#define FP_REGNUM 13 /* Contains address of executing stack frame */ -#define SP_REGNUM 14 /* Contains address of top of stack */ -#define PC_REGNUM 15 /* Contains program counter */ -#define PS_REGNUM 16 /* Contains processor status */ - -/* Total amount of space needed to store our copies of the machine's - register state, the array `registers'. */ -#define REGISTER_BYTES (17*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 - -/* Return the GDB type object for the "standard" data type - of data in register N. */ - -#define REGISTER_VIRTUAL_TYPE(N) builtin_type_int - -/* Store the address of the place in which to copy the structure the - subroutine will return. This is called from call_function. */ - -#define STORE_STRUCT_RETURN(ADDR, SP) \ - { write_register (1, (ADDR)); } - -/* Extract from an array REGBUF containing the (raw) register state - a function return value of type TYPE, and copy that, in virtual format, - into VALBUF. */ - -#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \ - memcpy (VALBUF, REGBUF, TYPE_LENGTH (TYPE)) - -/* Write into appropriate registers a function return value - of type TYPE, given in virtual format. */ - -#define STORE_RETURN_VALUE(TYPE,VALBUF) \ - write_register_bytes (0, VALBUF, TYPE_LENGTH (TYPE)) - -/* Extract from an array REGBUF containing the (raw) register state - the address in which a function should return its structure value, - as a CORE_ADDR (or an expression that can be used as one). */ - -#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) (*(int *)(REGBUF)) - - -/* 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. */ - -/* In the case of the Vax, the frame's nominal address is the FP value, - and 12 bytes later comes the saved previous FP value as a 4-byte word. */ - -#define FRAME_CHAIN(thisframe) \ - (!inside_entry_file ((thisframe)->pc) ? \ - read_memory_integer ((thisframe)->frame + 12, 4) :\ - 0) - -/* Define other aspects of the stack frame. */ - -/* A macro that tells us whether the function invocation represented - by FI does not have a frame on the stack associated with it. If it - does not, FRAMELESS is set to 1, else 0. */ -/* On the vax, all functions have frames. */ -#define FRAMELESS_FUNCTION_INVOCATION(FI) (0) - -/* Saved Pc. Get it from sigcontext if within sigtramp. */ +#define AP_REGNUM 12 /* XXXJRT */ /* Offset to saved PC in sigcontext, from <sys/signal.h>. */ +/* XXXJRT should go away */ #define SIGCONTEXT_PC_OFFSET 12 -#define FRAME_SAVED_PC(FRAME) \ - (((FRAME)->signal_handler_caller \ - ? sigtramp_saved_pc (FRAME) \ - : read_memory_integer ((FRAME)->frame + 16, 4)) \ - ) - -/* Cannot find the AP register value directly from the FP value. Must - find it saved in the frame called by this one, or in the AP - register for the innermost frame. However, there is no way to tell - the difference between the innermost frame and a frame for which we - just don't know the frame that it called (e.g. "info frame - 0x7ffec789"). For the sake of argument suppose that the stack is - somewhat trashed (which is one reason that "info frame" exists). - So return 0 (indicating we don't know the address of - the arglist) if we don't know what frame this frame calls. */ -#define FRAME_ARGS_ADDRESS_CORRECT(fi) \ - (((fi)->next \ - ? read_memory_integer ((fi)->next->frame + 8, 4) \ - : /* read_register (AP_REGNUM) */ 0)) - -/* In most of GDB, getting the args address is too important to - just say "I don't know". This is sometimes wrong for functions - that aren't on top of the stack, but c'est la vie. */ -#define FRAME_ARGS_ADDRESS(fi) \ - (((fi)->next \ - ? read_memory_integer ((fi)->next->frame + 8, 4) \ - : read_register (AP_REGNUM) /* 0 */)) - -#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame) - -/* Return number of args passed to a frame. - Can return -1, meaning no way to tell. */ - -extern int vax_frame_num_args (struct frame_info *fi); -#define FRAME_NUM_ARGS(fi) (vax_frame_num_args ((fi))) - -/* Return number of bytes at start of arglist that are not really args. */ - -#define FRAME_ARGS_SKIP 4 - -/* 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 int regmask = read_memory_integer ((frame_info)->frame+4, 4) >> 16; \ - register CORE_ADDR next_addr; \ - memset (&frame_saved_regs, '\0', sizeof frame_saved_regs); \ - next_addr = (frame_info)->frame + 16; \ - /* Regmask's low bit is for register 0, \ - which is the first one that would be pushed. */ \ - for (regnum = 0; regnum < 12; regnum++, regmask >>= 1) \ - (frame_saved_regs).regs[regnum] = (regmask & 1) ? (next_addr += 4) : 0; \ - (frame_saved_regs).regs[SP_REGNUM] = next_addr + 4; \ - if (read_memory_integer ((frame_info)->frame + 4, 4) & 0x20000000) \ - (frame_saved_regs).regs[SP_REGNUM] += 4 + 4 * read_memory_integer (next_addr + 4, 4); \ - (frame_saved_regs).regs[PC_REGNUM] = (frame_info)->frame + 16; \ - (frame_saved_regs).regs[FP_REGNUM] = (frame_info)->frame + 12; \ - (frame_saved_regs).regs[AP_REGNUM] = (frame_info)->frame + 8; \ - (frame_saved_regs).regs[PS_REGNUM] = (frame_info)->frame + 4; \ -} - -/* 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, 0); /* arglist */ \ - for (regnum = 11; regnum >= 0; regnum--) \ - sp = push_word (sp, read_register (regnum)); \ - sp = push_word (sp, read_register (PC_REGNUM)); \ - sp = push_word (sp, read_register (FP_REGNUM)); \ - sp = push_word (sp, read_register (AP_REGNUM)); \ - sp = push_word (sp, (read_register (PS_REGNUM) & 0xffef) \ - + 0x2fff0000); \ - sp = push_word (sp, 0); \ - write_register (SP_REGNUM, sp); \ - write_register (FP_REGNUM, sp); \ - write_register (AP_REGNUM, sp + 17 * sizeof (int)); } - -/* Discard from the stack the innermost frame, restoring all registers. */ - -#define POP_FRAME \ -{ register CORE_ADDR fp = read_register (FP_REGNUM); \ - register int regnum; \ - register int regmask = read_memory_integer (fp + 4, 4); \ - write_register (PS_REGNUM, \ - (regmask & 0xffff) \ - | (read_register (PS_REGNUM) & 0xffff0000)); \ - write_register (PC_REGNUM, read_memory_integer (fp + 16, 4)); \ - write_register (FP_REGNUM, read_memory_integer (fp + 12, 4)); \ - write_register (AP_REGNUM, read_memory_integer (fp + 8, 4)); \ - fp += 16; \ - for (regnum = 0; regnum < 12; regnum++) \ - if (regmask & (0x10000 << regnum)) \ - write_register (regnum, read_memory_integer (fp += 4, 4)); \ - fp = fp + 4 + ((regmask >> 30) & 3); \ - if (regmask & 0x20000000) \ - { regnum = read_memory_integer (fp, 4); \ - fp += (regnum + 1) * 4; } \ - write_register (SP_REGNUM, fp); \ - flush_cached_frames (); \ -} - -/* This sequence of words is the instructions - calls #69, @#32323232 - bpt - Note this is 8 bytes. */ - -#define CALL_DUMMY {0x329f69fb, 0x03323232} - -#define CALL_DUMMY_START_OFFSET 0 /* Start execution at beginning of dummy */ - -#define CALL_DUMMY_BREAKPOINT_OFFSET 7 - -/* 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, pc, fun, nargs, args, type, gcc_p) \ -{ *((char *) dummyname + 1) = nargs; \ - *(int *)((char *) dummyname + 3) = fun; } +/* XXXJRT not yet under gdbarch control */ +#define FRAME_ARGS_ADDRESS_CORRECT(fi) vax_frame_args_address_correct ((fi)) +extern CORE_ADDR vax_frame_args_address_correct (struct frame_info *); /* If vax pcc says CHAR or SHORT, it provides the correct address. */ - #define BELIEVE_PCC_PROMOTION 1 |