From: John Gilmore Date: Fri, 19 Feb 1993 06:55:31 +0000 (+0000) Subject: * gcc.patch: Update for a different GCC (G++) bug. X-Git-Tag: gdb-4_18~20081 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5e3d0ab075496938efe61a15c129f7464464d083;p=external%2Fbinutils.git * 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 296d852..aedfafc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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 diff --git a/gdb/gcc.patch b/gdb/gcc.patch index 1317d1b..04aeec3 100644 --- a/gdb/gcc.patch +++ b/gdb/gcc.patch @@ -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) diff --git a/gdb/nm-hp300bsd.h b/gdb/nm-hp300bsd.h index 6a8cda7..3531842 100644 --- a/gdb/nm-hp300bsd.h +++ b/gdb/nm-hp300bsd.h @@ -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 +#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 -#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 - diff --git a/gdb/xm-hp300bsd.h b/gdb/xm-hp300bsd.h index 5defbb5..54800fd 100644 --- a/gdb/xm-hp300bsd.h +++ b/gdb/xm-hp300bsd.h @@ -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 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 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. */