start-sanitize-gdbtk
authorPeter Schauer <Peter.Schauer@mytum.de>
Sat, 7 Jun 1997 09:38:31 +0000 (09:38 +0000)
committerPeter Schauer <Peter.Schauer@mytum.de>
Sat, 7 Jun 1997 09:38:31 +0000 (09:38 +0000)
* 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.

gdb/ChangeLog
gdb/corelow.c
gdb/eval.c
gdb/gdbtk.c
gdb/symtab.c

index d2b557a..a0811fe 100644 (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>
 
        * config/sh/tm-sh.h: add define for FPSCR_REGNUM
index d7cab71..458e646 100644 (file)
@@ -278,7 +278,7 @@ get_core_registers (regno)
   sec_ptr reg_sec;
   unsigned size;
   char *the_regs;
-  char secname[10];
+  char secname[30];
   enum bfd_flavour our_flavour = bfd_get_flavour (core_bfd);
   struct core_fns *cf = NULL;
 
index 5d6a594..4a7da00 100644 (file)
@@ -1,5 +1,5 @@
 /* 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.
 
 This file is part of GDB.
@@ -524,9 +524,6 @@ evaluate_subexp_standard (expect_type, exp, pos, noside)
              low_bound = 0;
              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;
          memset (VALUE_CONTENTS_RAW (array), 0, TYPE_LENGTH (expect_type));
          for (tem = nargs;  --nargs >= 0;  )
@@ -551,6 +548,9 @@ evaluate_subexp_standard (expect_type, exp, pos, noside)
                }
              else
                {
+                 if (index > high_bound)
+                   /* to avoid memory corruption */
+                   error ("Too many array elements");
                  memcpy (VALUE_CONTENTS_RAW (array)
                          + (index - low_bound) * element_size,
                          VALUE_CONTENTS (element),
@@ -1445,7 +1445,8 @@ evaluate_subexp_standard (expect_type, exp, pos, noside)
       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
       if (noside == EVAL_SKIP)
        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.");
       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);
       else
        return value_at_lazy (exp->elts[pc + 1].type,
-                             value_as_pointer (arg1));
+                             value_as_pointer (arg1),
+                             NULL);
 
     case UNOP_PREINCREMENT:
       arg1 = evaluate_subexp (expect_type, exp, pos, noside);
@@ -1801,6 +1803,10 @@ evaluate_subexp_for_sizeof (exp, pos)
       (*pos)++;
       val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
       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));
       return value_from_longest (builtin_type_int, (LONGEST)
                      TYPE_LENGTH (type));
index 2306d09..72b711b 100644 (file)
@@ -376,7 +376,7 @@ gdb_get_breakpoint_info (clientData, interp, argc, argv)
                              "longjmp", "longjmp resume", "step resume",
                              "through sigtramp", "watchpoint scope",
                              "call dummy" };
-  static char *bpdisp[] = {"delete", "disable", "donttouch"};
+  static char *bpdisp[] = {"delete", "delstop", "disable", "donttouch"};
   struct command_line *cmd;
   int bpnum;
   struct breakpoint *b;
index 61bbe28..732ba0d 100644 (file)
@@ -305,12 +305,11 @@ gdb_mangle_name (type, i, j)
   if (len == 0)
     {
       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);
       newname = NULL;
       len = 0;
@@ -2063,6 +2062,7 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line, canonical)
        xmalloc (sizeof (struct symtab_and_line));
       values.nelts = 1;
       values.sals[0] = find_pc_line (pc, 0);
+      values.sals[0].pc = pc;
       return values;
     }