projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix possible bug when no args have been provided to the executable
[deliverable/binutils-gdb.git]
/
gdb
/
prologue-value.c
diff --git
a/gdb/prologue-value.c
b/gdb/prologue-value.c
index 25884cb204faa6d4ea58d4ac8af2fbad68ce17c0..5263f131ad5301284355e805cac3c6efd4f4485d 100644
(file)
--- a/
gdb/prologue-value.c
+++ b/
gdb/prologue-value.c
@@
-1,5
+1,5
@@
/* Prologue value handling for GDB.
/* 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.
This file is part of GDB.
@@
-14,11
+14,9
@@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
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 "defs.h"
-#include "gdb_string.h"
-#include "gdb_assert.h"
#include "prologue-value.h"
#include "regcache.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:
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 *
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));
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. */
/* 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;
}
return a;
}
@@
-346,6
+343,7
@@
clear_entries (struct pv_area *area)
do
{
struct area_entry *next = e->next;
do
{
struct area_entry *next = e->next;
+
xfree (e);
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
This may return zero, if AREA has no entries.
And since the entries are a ring, this may return an entry that
- entirely prece
ed
s OFFSET. This is the correct behavior: depending
+ entirely prece
de
s 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 *
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;
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;
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;
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;
e->offset = offset;
e->size = size;
e->value = value;
This page took
0.024715 seconds
and
4
git commands to generate.