* gcc.patch: Update for a different GCC (G++) bug.
authorJohn Gilmore <gnu@cygnus>
Fri, 19 Feb 1993 06:55:31 +0000 (06:55 +0000)
committerJohn Gilmore <gnu@cygnus>
Fri, 19 Feb 1993 06:55:31 +0000 (06:55 +0000)
* main.c (print_gdb_version):  Update copyright year to 1993.
* nm-hp300bsd.h:  Decide whether this is BSD 4.3 or 4.4,
conditionalize this file on it.  FIXME, right way is to split
these into two config files.
(ATTACH_DETACH):  Define for BSD 4.4
(PTRACE_ARG_TYPE):  caddr_t for BSD 4.4, unset for 4.3.
(U_REGS_OFFSET):  Revise for 4.4.
(REGISTER_U_ADDR):  Separate for 4.4, but it doesn't work yet.
* xm-hp300bsd.h:  Move definitions of UINT_MAX, INT_MAX, INT_MIN,
LONG_MAX into this file to avoid cpp "redefinition" warnings.

gdb/ChangeLog
gdb/gcc.patch
gdb/nm-hp300bsd.h
gdb/xm-hp300bsd.h

index 296d85253e0ddbecb2fc46cc4a541c069aa276c6..aedfafc8610d4dacfa0be206f2d1e13014cda7b9 100644 (file)
@@ -4,6 +4,20 @@ Thu Feb 18 22:44:40 1993  Stu Grossman  (grossman@cygnus.com)
        * am29k-tdep.c:  More minor nits with arg types for
        supply_register, NULL vs. 0, read_register_gen, & reginv_com.
 
+Thu Feb 18 22:38:03 1993  John Gilmore  (gnu@cygnus.com)
+
+       * gcc.patch:  Update for a different GCC (G++) bug.
+       * main.c (print_gdb_version):  Update copyright year to 1993.
+       * nm-hp300bsd.h:  Decide whether this is BSD 4.3 or 4.4,
+       conditionalize this file on it.  FIXME, right way is to split
+       these into two config files.  
+       (ATTACH_DETACH):  Define for BSD 4.4
+       (PTRACE_ARG_TYPE):  caddr_t for BSD 4.4, unset for 4.3.
+       (U_REGS_OFFSET):  Revise for 4.4.
+       (REGISTER_U_ADDR):  Separate for 4.4, but it doesn't work yet.
+       * xm-hp300bsd.h:  Move definitions of UINT_MAX, INT_MAX, INT_MIN,
+       LONG_MAX into this file to avoid cpp "redefinition" warnings.
+
 Thu Feb 18 16:13:28 1993  K. Richard Pixley  (rich@rtl.cygnus.com)
 
        * nm-hp300bsd.h (PTRACE_ARG3_TYPE): FSF's hp300's have int* not
index 1317d1baf6a650fb5c56dbf63c3328ff10170a1c..04aeec34d92773b85cc3244346bfd762775d1ae0 100644 (file)
@@ -1,63 +1,72 @@
-Recent versions of gcc have had a bug in how they emit debugging
-information for C++ methods (when using dbx-style stabs).
-This patch should fix the problem.  Fix you can't fix gcc,
-you can alternatively define GCC_MANGLE_BUG when compling gdb/symtab.c.
+In the 2.3.2 release of gcc/g++, how the compiler handles resolving
+multiple inheritance lattices was reworked to properly discover
+ambiguities.  We recently found an example which causes this new
+algorithm to fail in a very subtle way.  For the time being, this
+patch will make the compiler use the old algorithm, which works for
+the failing case we've found.  Note it will revert the compiler's
+ability to properly deduce MI ambiguities in many cases (to its state
+in 2.2.2 and 2.3.1).  This bug will be fixed in the next gcc/g++
+release.
 
-===================================================================
-RCS file: /rel/cvsfiles/devo/gcc/dbxout.c,v
-retrieving revision 1.53
-diff -c -r1.53 dbxout.c
-*** 1.53       1992/07/05 09:50:22
---- dbxout.c   1992/07/09 07:00:33
+Brendan Kehoe (brendan@cygnus.com)
+
+*** cp-search.c.~1~    Thu Feb 18 18:03:24 1993
+--- cp-search.c        Thu Feb 18 18:03:27 1993
 ***************
-*** 683,688 ****
---- 683,689 ----
-    tree type_encoding;
-    register tree fndecl;
-    register tree last;
-+   char formatted_type_identifier_length[16];
-    register int type_identifier_length;
-  
-    if (methods == NULL_TREE)
+*** 2389,2392 ****
+--- 2389,2393 ----
+        if ((*qfn)(base_binfo))
+       {
++ #if 0
+         if (fn == dfs_init_vbase_pointers)
+           {
 ***************
-*** 711,716 ****
---- 712,719 ----
+*** 2464,2467 ****
+--- 2465,2469 ----
+             saw_first_vbase = save_saw_first_vbase;
+           } else
++ #endif
+             dfs_walk (base_binfo, fn, qfn);
+       }
+*************** dfs_init_vbase_pointers (binfo)
+*** 2658,2661 ****
+--- 2660,2664 ----
+      return;
   
-    type_identifier_length = IDENTIFIER_LENGTH (type_encoding);
++ #if 0
+    this_vbase_ptr = vbase_decl_ptr_intermediate;
   
-+   sprintf(formatted_type_identifier_length, "%d", type_identifier_length);
-+ 
-    if (TREE_CODE (methods) == FUNCTION_DECL)
-      fndecl = methods;
-    else if (TREE_VEC_ELT (methods, 0) != NULL_TREE)
-***************
-*** 754,762 ****
---- 757,769 ----
-                 if (debug_name[0] == '_' && debug_name[1] == '_')
-                   {
-                     char *method_name = debug_name + 2;
-+                    char *length_ptr = formatted_type_identifier_length;
-                     /* Get past const and volatile qualifiers.  */
-                     while (*method_name == 'C' || *method_name == 'V')
-                       method_name++;
-+                    /* Skip digits for length of type_encoding. */
-+                    while (*method_name == *length_ptr && *length_ptr)
-+                        length_ptr++, method_name++;
-                     if (! strncmp (method_name,
-                                    IDENTIFIER_POINTER (type_encoding),
-                                    type_identifier_length))
-***************
-*** 768,775 ****
---- 775,786 ----
-             else if (debug_name[0] == '_' && debug_name[1] == '_')
-               {
-                 char *ctor_name = debug_name + 2;
-+                char *length_ptr = formatted_type_identifier_length;
-                 while (*ctor_name == 'C' || *ctor_name == 'V')
-                   ctor_name++;
-+                /* Skip digits for length of type_encoding. */
-+                while (*ctor_name == *length_ptr && *length_ptr)
-+                    length_ptr++, ctor_name++;
-                 if (!strncmp (IDENTIFIER_POINTER (type_encoding), ctor_name,
-                               type_identifier_length))
-                   debug_name = ctor_name + type_identifier_length;
+*************** dfs_init_vbase_pointers (binfo)
+*** 2662,2668 ****
+    if (TYPE_POINTER_TO (type) != TREE_TYPE (this_vbase_ptr))
+      my_friendly_abort (125);
+  
+- #if 0
+    distance = get_base_distance (type, TREE_TYPE (vbase_decl), 0, &path);
+    if (distance == -2)
+      {
+--- 2665,2672 ----
+    if (TYPE_POINTER_TO (type) != TREE_TYPE (this_vbase_ptr))
+      my_friendly_abort (125);
++ #endif
+  
+    distance = get_base_distance (type, TREE_TYPE (vbase_decl), 0, &path);
++ #if 0
+    if (distance == -2)
+      {
+*************** dfs_init_vbase_pointers (binfo)
+*** 2669,2672 ****
+--- 2673,2677 ----
+        error ("inheritance lattice too complex below");
+      }
++ #endif
+    while (path)
+      {
+*************** dfs_init_vbase_pointers (binfo)
+*** 2682,2685 ****
+--- 2687,2691 ----
+      this_vbase_ptr = convert_pointer_to (type, vbase_decl_ptr);
+  
++ #if 0
+    /* This happens when it is ambiguous. */
+    if (this_vbase_ptr == error_mark_node)
index 6a8cda7c45b8f25aa3b143d284e1b782ca59915e..353184232c90802af9de9a20c52b24beb6d16051 100644 (file)
@@ -17,6 +17,60 @@ You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
+/* This is a hack.  This is only a hack.  Were this a common source file,
+   rather than a config file specific to BSD on HP 68k's, you would have
+   been instructed to clean this up.  As it is, clean it up if FSF's 
+   HP's-running-ancient-BSD ever go away.  */
+
+#include <errno.h>
+#ifdef EPROCUNAVAIL
+  /* BSD 4.4 alpha or better */
+
+  /* We can attach to processes using ptrace.  */
+
+#define        ATTACH_DETACH
+#define        PTRACE_ATTACH   10
+#define        PTRACE_DETACH   11
+
+  /* The third argument of ptrace is declared as this type.  */
+
+#define        PTRACE_ARG3_TYPE        caddr_t
+
+/* U_REGS_OFFSET is the offset of the registers within the u area for
+   ptrace purposes.  */
+#define U_REGS_OFFSET \
+  ptrace (PT_READ_U, inferior_pid, \
+         (PTRACE_ARG3_TYPE) \
+          (offsetof (struct user, u_kproc.kp_proc.p_md.md_regs)), 0) \
+    - USRSTACK
+
+  /* This is a piece of magic that is given a register number REGNO
+     and as BLOCKEND the address in the system of the end of the user structure
+     and stores in ADDR the address in the kernel or core dump
+     of that register.  */
+
+#define REGISTER_U_ADDR(addr, blockend, regno)                         \
+{                                                                      \
+  if (regno < PS_REGNUM)                                               \
+    addr = (int) &((struct frame *)(blockend))->f_regs[regno];         \
+  else if (regno == PS_REGNUM)                                         \
+    addr = (int) &((struct frame *)(blockend))->f_stackadj;            \
+  else if (regno == PC_REGNUM)                                         \
+    addr = (int) &((struct frame *)(blockend))->f_pc;                  \
+  else if (regno < FPC_REGNUM)                                         \
+    addr = (int)                                                       \
+      &((struct user *)0)->u_pcb.pcb_fpregs.fpf_regs[((regno)-FP0_REGNUM)*3];\
+  else if (regno == FPC_REGNUM)                                                \
+    addr = (int) &((struct user *)0)->u_pcb.pcb_fpregs.fpf_fpcr;       \
+  else if (regno == FPS_REGNUM)                                                \
+    addr = (int) &((struct user *)0)->u_pcb.pcb_fpregs.fpf_fpsr;       \
+  else                                                                 \
+    addr = (int) &((struct user *)0)->u_pcb.pcb_fpregs.fpf_fpiar;      \
+}
+#else
+
+/* THIS IS BSD 4.3 or something like it.  */
+
 /* This is a piece of magic that is given a register number REGNO
    and as BLOCKEND the address in the system of the end of the user structure
    and stores in ADDR the address in the kernel or core dump
@@ -40,24 +94,4 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
   else                                                                 \
     addr = (int) &((struct user *)0)->u_pcb.pcb_fpregs.fpf_fpiar;      \
 }
-
-/* This is a hack.  This is only a hack.  Were this a common source file,
-   rather than a config file specific to BSD on HP 68k's, you would have
-   been instructed to clean this up.  As it is, clean it up if FSF's 
-   HP's-running-ancient-BSD ever go away.  */
-
-#include <errno.h>
-#ifdef EPROCUNAVAIL
-  /* BSD 4.4 alpha or better */
-
-  /* We can attach to processes using ptrace.  */
-
-#define        ATTACH_DETACH
-#define        PTRACE_ATTACH   10
-#define        PTRACE_DETACH   11
-
-  /* The third argument of ptrace is declared as this type.  */
-
-#define        PTRACE_ARG3_TYPE        caddr_t
 #endif
-
index 5defbb51c3795736cb34f8ead15ce044ef154ad7..54800fdc22646bd4b941688314767c61eaa7f9d4 100644 (file)
@@ -25,10 +25,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #define        HOST_BYTE_ORDER BIG_ENDIAN
 
-/* Avoid "INT_MIN redefined" warnings -- by defining it here, exactly
-   the same as in the system <machine/machtypes.h> file.  */
-#undef INT_MIN
-#define        INT_MIN         0x80000000
+/* Avoid "INT_MIN redefined" preprocessor warnings -- by defining them here,
+   exactly the same as in the system <limits.h> file.  */
+#define        UINT_MAX        4294967295      /* max value for an unsigned int */
+#define        INT_MAX         2147483647      /* max value for an int */
+#define        INT_MIN         (-2147483647-1) /* min value for an int */
+#define        LONG_MAX        2147483647      /* max value for a long */
 
 /* Get rid of any system-imposed stack limit if possible.  */