2004-01-16 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Sat, 17 Jan 2004 00:00:48 +0000 (00:00 +0000)
committerAndrew Cagney <cagney@redhat.com>
Sat, 17 Jan 2004 00:00:48 +0000 (00:00 +0000)
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".

gdb/ChangeLog
gdb/rs6000-nat.c
gdb/rs6000-tdep.c

index d158b11..7a61444 100644 (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>
 
        * blockframe.c: Update copyright year.
index 7878984..3d6c07c 100644 (file)
@@ -1,8 +1,8 @@
 /* IBM RS/6000 native-dependent code for GDB, the GNU debugger.
 
    Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
-   1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation,
-   Inc.
+   1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
+   Foundation, Inc.
 
    This file is part of GDB.
 
@@ -1002,6 +1002,7 @@ set_host_arch (int pid)
 
   gdbarch_info_init (&info);
   info.bfd_arch_info = bfd_get_arch_info (&abfd);
+  info.abfd = exec_bfd;
 
   if (!gdbarch_update_p (info))
     {
index 698e77a..a1edf5a 100644 (file)
@@ -1,7 +1,8 @@
 /* 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
-   Free Software Foundation, Inc.
+
+   Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
+   1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
+   Foundation, Inc.
 
    This file is part of GDB.
 
@@ -1247,6 +1248,14 @@ ran_out_of_registers_for_arguments:
       space = (space + 15) & -16;
       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 
          completely, push the rest of it into stack.  */
 
@@ -1288,16 +1297,18 @@ ran_out_of_registers_for_arguments:
        }
     }
 
-  /* set back chain properly */
-  store_unsigned_integer (tmp_buffer, 4, saved_sp);
-  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.  */
+     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);
+  write_memory (sp, tmp_buffer, 4);
+
   /* Point the inferior function call's return address at the dummy's
      breakpoint.  */
   regcache_raw_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr);