mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 12:03:41 +08:00
start-sanitize-gdbtk
* gdbtk.c (gdb_get_breakpoint_info): Add string for new enumeration del_at_next_stop to bpdisp array. end-sanitize-gdbtk * eval.c (evaluate_subexp_for_sizeof): Handle dereferencing of non-pointer values. * symtab.c (gdb_mangle_name): Improve mangling of nested types, their physical names already include the class name. * valops.c (value_cast): Handle upcast of a class pointer. From Andreas Schwab (schwab@issan.informatik.uni-dortmund.de): * corelow.c (get_core_registers): Make secname big enough.
This commit is contained in:
parent
94d8217d65
commit
27f1958c24
@ -1,3 +1,21 @@
|
|||||||
|
Sat Jun 7 02:34:19 1997 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
|
||||||
|
|
||||||
|
start-sanitize-gdbtk
|
||||||
|
* gdbtk.c (gdb_get_breakpoint_info): Add string for new
|
||||||
|
enumeration del_at_next_stop to bpdisp array.
|
||||||
|
|
||||||
|
end-sanitize-gdbtk
|
||||||
|
* eval.c (evaluate_subexp_for_sizeof): Handle dereferencing
|
||||||
|
of non-pointer values.
|
||||||
|
|
||||||
|
* symtab.c (gdb_mangle_name): Improve mangling of nested types,
|
||||||
|
their physical names already include the class name.
|
||||||
|
|
||||||
|
* valops.c (value_cast): Handle upcast of a class pointer.
|
||||||
|
|
||||||
|
From Andreas Schwab (schwab@issan.informatik.uni-dortmund.de):
|
||||||
|
* corelow.c (get_core_registers): Make secname big enough.
|
||||||
|
|
||||||
Fri Jun 6 14:43:23 1997 Keith Seitz <keiths@pizza.cygnus.com>
|
Fri Jun 6 14:43:23 1997 Keith Seitz <keiths@pizza.cygnus.com>
|
||||||
|
|
||||||
* config/sh/tm-sh.h: add define for FPSCR_REGNUM
|
* config/sh/tm-sh.h: add define for FPSCR_REGNUM
|
||||||
|
@ -278,7 +278,7 @@ get_core_registers (regno)
|
|||||||
sec_ptr reg_sec;
|
sec_ptr reg_sec;
|
||||||
unsigned size;
|
unsigned size;
|
||||||
char *the_regs;
|
char *the_regs;
|
||||||
char secname[10];
|
char secname[30];
|
||||||
enum bfd_flavour our_flavour = bfd_get_flavour (core_bfd);
|
enum bfd_flavour our_flavour = bfd_get_flavour (core_bfd);
|
||||||
struct core_fns *cf = NULL;
|
struct core_fns *cf = NULL;
|
||||||
|
|
||||||
|
18
gdb/eval.c
18
gdb/eval.c
@ -1,5 +1,5 @@
|
|||||||
/* Evaluate expressions for GDB.
|
/* Evaluate expressions for GDB.
|
||||||
Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996
|
Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GDB.
|
This file is part of GDB.
|
||||||
@ -524,9 +524,6 @@ evaluate_subexp_standard (expect_type, exp, pos, noside)
|
|||||||
low_bound = 0;
|
low_bound = 0;
|
||||||
high_bound = (TYPE_LENGTH (type) / element_size) - 1;
|
high_bound = (TYPE_LENGTH (type) / element_size) - 1;
|
||||||
}
|
}
|
||||||
if (nargs > (high_bound - low_bound + 1))
|
|
||||||
/* to avoid memory corruption */
|
|
||||||
error ("Too many array elements");
|
|
||||||
index = low_bound;
|
index = low_bound;
|
||||||
memset (VALUE_CONTENTS_RAW (array), 0, TYPE_LENGTH (expect_type));
|
memset (VALUE_CONTENTS_RAW (array), 0, TYPE_LENGTH (expect_type));
|
||||||
for (tem = nargs; --nargs >= 0; )
|
for (tem = nargs; --nargs >= 0; )
|
||||||
@ -551,6 +548,9 @@ evaluate_subexp_standard (expect_type, exp, pos, noside)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (index > high_bound)
|
||||||
|
/* to avoid memory corruption */
|
||||||
|
error ("Too many array elements");
|
||||||
memcpy (VALUE_CONTENTS_RAW (array)
|
memcpy (VALUE_CONTENTS_RAW (array)
|
||||||
+ (index - low_bound) * element_size,
|
+ (index - low_bound) * element_size,
|
||||||
VALUE_CONTENTS (element),
|
VALUE_CONTENTS (element),
|
||||||
@ -1445,7 +1445,8 @@ evaluate_subexp_standard (expect_type, exp, pos, noside)
|
|||||||
arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
|
arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
|
||||||
if (noside == EVAL_SKIP)
|
if (noside == EVAL_SKIP)
|
||||||
goto nosideret;
|
goto nosideret;
|
||||||
if (TYPE_CODE (VALUE_TYPE (arg2)) != TYPE_CODE_INT)
|
type = check_typedef (VALUE_TYPE (arg2));
|
||||||
|
if (TYPE_CODE (type) != TYPE_CODE_INT)
|
||||||
error ("Non-integral right operand for \"@\" operator.");
|
error ("Non-integral right operand for \"@\" operator.");
|
||||||
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||||
{
|
{
|
||||||
@ -1560,7 +1561,8 @@ evaluate_subexp_standard (expect_type, exp, pos, noside)
|
|||||||
return value_zero (exp->elts[pc + 1].type, lval_memory);
|
return value_zero (exp->elts[pc + 1].type, lval_memory);
|
||||||
else
|
else
|
||||||
return value_at_lazy (exp->elts[pc + 1].type,
|
return value_at_lazy (exp->elts[pc + 1].type,
|
||||||
value_as_pointer (arg1));
|
value_as_pointer (arg1),
|
||||||
|
NULL);
|
||||||
|
|
||||||
case UNOP_PREINCREMENT:
|
case UNOP_PREINCREMENT:
|
||||||
arg1 = evaluate_subexp (expect_type, exp, pos, noside);
|
arg1 = evaluate_subexp (expect_type, exp, pos, noside);
|
||||||
@ -1801,6 +1803,10 @@ evaluate_subexp_for_sizeof (exp, pos)
|
|||||||
(*pos)++;
|
(*pos)++;
|
||||||
val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
|
val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
|
||||||
type = check_typedef (VALUE_TYPE (val));
|
type = check_typedef (VALUE_TYPE (val));
|
||||||
|
if (TYPE_CODE (type) != TYPE_CODE_PTR
|
||||||
|
&& TYPE_CODE (type) != TYPE_CODE_REF
|
||||||
|
&& TYPE_CODE (type) != TYPE_CODE_ARRAY)
|
||||||
|
error ("Attempt to take contents of a non-pointer value.");
|
||||||
type = check_typedef (TYPE_TARGET_TYPE (type));
|
type = check_typedef (TYPE_TARGET_TYPE (type));
|
||||||
return value_from_longest (builtin_type_int, (LONGEST)
|
return value_from_longest (builtin_type_int, (LONGEST)
|
||||||
TYPE_LENGTH (type));
|
TYPE_LENGTH (type));
|
||||||
|
@ -376,7 +376,7 @@ gdb_get_breakpoint_info (clientData, interp, argc, argv)
|
|||||||
"longjmp", "longjmp resume", "step resume",
|
"longjmp", "longjmp resume", "step resume",
|
||||||
"through sigtramp", "watchpoint scope",
|
"through sigtramp", "watchpoint scope",
|
||||||
"call dummy" };
|
"call dummy" };
|
||||||
static char *bpdisp[] = {"delete", "disable", "donttouch"};
|
static char *bpdisp[] = {"delete", "delstop", "disable", "donttouch"};
|
||||||
struct command_line *cmd;
|
struct command_line *cmd;
|
||||||
int bpnum;
|
int bpnum;
|
||||||
struct breakpoint *b;
|
struct breakpoint *b;
|
||||||
|
@ -305,12 +305,11 @@ gdb_mangle_name (type, i, j)
|
|||||||
if (len == 0)
|
if (len == 0)
|
||||||
{
|
{
|
||||||
sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
|
sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
|
||||||
if (strcmp(buf, "__") == 0)
|
|
||||||
buf[0] = '\0';
|
|
||||||
}
|
}
|
||||||
else if (newname != NULL && strchr (newname, '<') != NULL)
|
else if (physname[0] == 't' || physname[0] == 'Q')
|
||||||
{
|
{
|
||||||
/* Template methods are fully mangled. */
|
/* The physname for template and qualified methods already includes
|
||||||
|
the class name. */
|
||||||
sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
|
sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
|
||||||
newname = NULL;
|
newname = NULL;
|
||||||
len = 0;
|
len = 0;
|
||||||
@ -2063,6 +2062,7 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line, canonical)
|
|||||||
xmalloc (sizeof (struct symtab_and_line));
|
xmalloc (sizeof (struct symtab_and_line));
|
||||||
values.nelts = 1;
|
values.nelts = 1;
|
||||||
values.sals[0] = find_pc_line (pc, 0);
|
values.sals[0] = find_pc_line (pc, 0);
|
||||||
|
values.sals[0].pc = pc;
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user