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:
Peter Schauer 1997-06-07 09:38:31 +00:00
parent 94d8217d65
commit 27f1958c24
5 changed files with 36 additions and 12 deletions

View File

@ -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

View File

@ -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;

View File

@ -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));

View File

@ -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;

View File

@ -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;
} }