2004-01-16 Andrew Cagney <cagney@redhat.com>

Changes from Peter Schauer.
	* rs6000-tdep.c: Update copyright year.
	(rs6000_push_dummy_call): Update the stack pointer before
	accessing the corresponding stack region.
	* rs6000-nat.c: Update copyright year.
	(set_host_arch): Set "info.abfd" to "exec_bfd".
This commit is contained in:
Andrew Cagney 2004-01-17 00:00:48 +00:00
parent 593a5c7394
commit 7aea86e6b1
3 changed files with 33 additions and 12 deletions

View File

@ -1,3 +1,12 @@
2004-01-16 Andrew Cagney <cagney@redhat.com>
Changes from Peter Schauer.
* rs6000-tdep.c: Update copyright year.
(rs6000_push_dummy_call): Update the stack pointer before
accessing the corresponding stack region.
* rs6000-nat.c: Update copyright year.
(set_host_arch): Set "info.abfd" to "exec_bfd".
2004-01-15 Mark Kettenis <kettenis@gnu.org> 2004-01-15 Mark Kettenis <kettenis@gnu.org>
* blockframe.c: Update copyright year. * blockframe.c: Update copyright year.

View File

@ -1,8 +1,8 @@
/* IBM RS/6000 native-dependent code for GDB, the GNU debugger. /* IBM RS/6000 native-dependent code for GDB, the GNU debugger.
Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
Inc. Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -1002,6 +1002,7 @@ set_host_arch (int pid)
gdbarch_info_init (&info); gdbarch_info_init (&info);
info.bfd_arch_info = bfd_get_arch_info (&abfd); info.bfd_arch_info = bfd_get_arch_info (&abfd);
info.abfd = exec_bfd;
if (!gdbarch_update_p (info)) if (!gdbarch_update_p (info))
{ {

View File

@ -1,7 +1,8 @@
/* Target-dependent code for GDB, the GNU debugger. /* Target-dependent code for GDB, the GNU debugger.
Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, 2003 Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
Free Software Foundation, Inc. 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -1247,6 +1248,14 @@ ran_out_of_registers_for_arguments:
space = (space + 15) & -16; space = (space + 15) & -16;
sp -= space; sp -= space;
/* This is another instance we need to be concerned about
securing our stack space. If we write anything underneath %sp
(r1), we might conflict with the kernel who thinks he is free
to use this area. So, update %sp first before doing anything
else. */
regcache_raw_write_signed (regcache, SP_REGNUM, sp);
/* If the last argument copied into the registers didn't fit there /* If the last argument copied into the registers didn't fit there
completely, push the rest of it into stack. */ completely, push the rest of it into stack. */
@ -1288,16 +1297,18 @@ ran_out_of_registers_for_arguments:
} }
} }
/* set back chain properly */ /* Set the stack pointer. According to the ABI, the SP is meant to
be set _before_ the corresponding stack space is used. On AIX,
this even applies when the target has been completely stopped!
Not doing this can lead to conflicts with the kernel which thinks
that it still has control over this not-yet-allocated stack
region. */
regcache_raw_write_signed (regcache, SP_REGNUM, sp);
/* Set back chain properly. */
store_unsigned_integer (tmp_buffer, 4, saved_sp); store_unsigned_integer (tmp_buffer, 4, saved_sp);
write_memory (sp, tmp_buffer, 4); write_memory (sp, tmp_buffer, 4);
/* Set the stack pointer. According to the ABI, the SP is meant to
be set _before_ the corresponding stack space is used. No need
for that here though - the target has been completely stopped -
it isn't possible for an exception handler to stomp on the stack. */
regcache_raw_write_signed (regcache, SP_REGNUM, sp);
/* Point the inferior function call's return address at the dummy's /* Point the inferior function call's return address at the dummy's
breakpoint. */ breakpoint. */
regcache_raw_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr); regcache_raw_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr);