/* Target-dependent code for GDB, the GNU debugger.
- Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995
+ Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996
Free Software Foundation, Inc.
This file is part of GDB.
static void frame_get_cache_fsr PARAMS ((struct frame_info *fi,
struct rs6000_framedata *fdatap));
+static void pop_dummy_frame PARAMS ((void));
+
/* Calculate the destination of a branch/jump. Return -1 if not a branch. */
static CORE_ADDR
CORE_ADDR pc;
CORE_ADDR safety;
{
- register long offset;
CORE_ADDR dest;
int immediate;
int absolute;
void
single_step (signal)
- int signal;
+ enum target_signal signal;
{
#define INSNLEN(OPCODE) 4
/* store parameters in stack via frame pointer */
} else if (framep &&
- (op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r1) */
+ ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r1) */
(op & 0xfc1f0000) == 0xd81f0000 || /* stfd Rx,NUM(r1) */
- (op & 0xfc1f0000) == 0xfc1f0000) { /* frsp, fp?,NUM(r1) */
+ (op & 0xfc1f0000) == 0xfc1f0000)) { /* frsp, fp?,NUM(r1) */
continue;
/* Set up frame pointer */
GDB process that keeps track of these dummy frames! -- gnu@cygnus.com Aug92
*/
+static void
pop_dummy_frame ()
{
CORE_ADDR sp, pc;
its argumets will be passed by gdb. */
void
-fix_call_dummy (dummyname, pc, fun, nargs, type)
+rs6000_fix_call_dummy (dummyname, pc, fun, nargs, args, type, gcc_p)
char *dummyname;
CORE_ADDR pc;
CORE_ADDR fun;
- int nargs; /* not used */
- int type; /* not used */
+ int nargs;
+ value_ptr *args;
+ struct type *type;
+ int gcc_p;
{
#define TOC_ADDR_OFFSET 20
#define TARGET_ADDR_OFFSET 28
stack.
If the function is returning a structure, then the return address is passed
- in r3, then the first 7 words of the parametes can be passed in registers,
+ in r3, then the first 7 words of the parameters can be passed in registers,
starting from r4. */
CORE_ADDR
int struct_return;
CORE_ADDR struct_addr;
{
- int ii, len;
+ int ii;
+ int len = 0;
int argno; /* current argument number */
int argbytes; /* current argument byte */
char tmp_buffer [50];
int f_argno = 0; /* current floating point argno */
- value_ptr arg;
+ value_ptr arg = 0;
struct type *type;
- CORE_ADDR saved_sp, pc;
+ CORE_ADDR saved_sp;
if ( dummy_frame_count <= 0)
printf_unfiltered ("FATAL ERROR -push_arguments()! frame not found!!\n");
for (argno=0, argbytes=0; argno < nargs && ii<8; ++ii) {
arg = args[argno];
- type = check_typedef (VALUE_TYPE (arg);
+ type = check_typedef (VALUE_TYPE (arg));
len = TYPE_LENGTH (type);
if (TYPE_CODE (type) == TYPE_CODE_FLT) {
{
CORE_ADDR func_start;
struct rs6000_framedata fdata;
- int frameless;
if (fi->signal_handler_caller)
return read_memory_integer (fi->frame + SIG_FRAME_PC_OFFSET, 4);
/* FIXME -- this is never called! */
+#if 0
void
free_loadinfo ()
{
loadinfotocindex = 0;
loadinfotextindex = 0;
}
+#endif
/* this is called from xcoffread.c */
void
_initialize_rs6000_tdep ()
{
+#ifndef ELF_OBJECT_FORMAT
+ {
+ extern void (*xcoff_add_toc_to_loadinfo_hook) PARAMS ((unsigned long));
+ extern void (*xcoff_init_loadinfo_hook) PARAMS ((void));
+
+ /* Initialize hook in xcoffread for recording the toc offset value
+ of a symbol table into the ldinfo structure, for native rs6000
+ config. */
+ xcoff_add_toc_to_loadinfo_hook = &xcoff_add_toc_to_loadinfo;
+
+ /* Initialize hook in xcoffread for calling xcoff_init_loadinfo in
+ a native rs6000 config. */
+ xcoff_init_loadinfo_hook = &xcoff_init_loadinfo;
+ }
+#endif /* ELF_OBJECT_FORMAT */
+
/* FIXME, this should not be decided via ifdef. */
#ifdef GDB_TARGET_POWERPC
tm_print_insn = gdb_print_insn_powerpc;