Fix possible bug when no args have been provided to the executable
[deliverable/binutils-gdb.git] / gdb / prologue-value.c
index 25884cb204faa6d4ea58d4ac8af2fbad68ce17c0..5263f131ad5301284355e805cac3c6efd4f4485d 100644 (file)
@@ -1,5 +1,5 @@
 /* Prologue value handling for GDB.
-   Copyright 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2003-2017 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    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, see <http://www.gnu.org/licenses/>. */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "gdb_string.h"
-#include "gdb_assert.h"
 #include "prologue-value.h"
 #include "regcache.h"
 
@@ -202,7 +200,7 @@ pv_is_identical (pv_t a, pv_t b)
     case pvk_register:
       return (a.reg == b.reg && a.k == b.k);
     default:
-      gdb_assert (0);
+      gdb_assert_not_reached ("unexpected prologue value kind");
     }
 }
 
@@ -314,9 +312,9 @@ struct pv_area
 
 
 struct pv_area *
-make_pv_area (int base_reg)
+make_pv_area (int base_reg, int addr_bit)
 {
-  struct pv_area *a = (struct pv_area *) xmalloc (sizeof (*a));
+  struct pv_area *a = XNEW (struct pv_area);
 
   memset (a, 0, sizeof (*a));
 
@@ -325,8 +323,7 @@ make_pv_area (int base_reg)
 
   /* Remember that shift amounts equal to the type's width are
      undefined.  */
-  a->addr_mask = ((((CORE_ADDR) 1
-                  << (gdbarch_addr_bit (current_gdbarch) - 1)) - 1) << 1) | 1;
+  a->addr_mask = ((((CORE_ADDR) 1 << (addr_bit - 1)) - 1) << 1) | 1;
 
   return a;
 }
@@ -346,6 +343,7 @@ clear_entries (struct pv_area *area)
       do
         {
           struct area_entry *next = e->next;
+
           xfree (e);
           e = next;
         }
@@ -398,7 +396,7 @@ pv_area_store_would_trash (struct pv_area *area, pv_t addr)
    This may return zero, if AREA has no entries.
 
    And since the entries are a ring, this may return an entry that
-   entirely preceeds OFFSET.  This is the correct behavior: depending
+   entirely precedes OFFSET.  This is the correct behavior: depending
    on the sizes involved, we could still overlap such an area, with
    wrap-around.  */
 static struct area_entry *
@@ -468,6 +466,7 @@ pv_area_store (struct pv_area *area,
       while (e && overlaps (area, e, offset, size))
         {
           struct area_entry *next = (e->next == e) ? 0 : e->next;
+
           e->prev->next = e->next;
           e->next->prev = e->prev;
 
@@ -491,7 +490,8 @@ pv_area_store (struct pv_area *area,
   else
     {
       CORE_ADDR offset = addr.k;
-      struct area_entry *e = (struct area_entry *) xmalloc (sizeof (*e));
+      struct area_entry *e = XNEW (struct area_entry);
+
       e->offset = offset;
       e->size = size;
       e->value = value;
This page took 0.026121 seconds and 4 git commands to generate.