Index: minsyms.c =================================================================== RCS file: /product/tools/gdb/gdb/minsyms.c,v retrieving revision 1.2 diff -c -r1.2 minsyms.c *** minsyms.c 6 Sep 2002 20:20:43 -0000 1.2 --- minsyms.c 30 Oct 2002 19:52:08 -0000 *************** *** 952,958 **** /* Try to guess the appropriate C++ ABI by looking at the names of the minimal symbols in the table. */ ! { int i; for (i = 0; i < mcount; i++) --- 952,958 ---- /* Try to guess the appropriate C++ ABI by looking at the names of the minimal symbols in the table. */ ! if (!current_cp_abi_equals("gnu-v3")) { int i; for (i = 0; i < mcount; i++) *************** *** 960,967 **** const char *name = SYMBOL_NAME (&objfile->msymbols[i]); if (name[0] == '_' && name[1] == 'Z') { ! switch_to_cp_abi ("gnu-v3"); ! break; } } } --- 960,971 ---- const char *name = SYMBOL_NAME (&objfile->msymbols[i]); if (name[0] == '_' && name[1] == 'Z') { ! char *demangled; ! if((demangled = cplus_demangle(name, GNU_V3_DEMANGLING)) != NULL){ ! free(demangled); ! switch_to_cp_abi ("gnu-v3"); ! break; ! } } } } Index: cp-abi.c =================================================================== RCS file: /product/tools/gdb/gdb/cp-abi.c,v retrieving revision 1.2 diff -c -r1.2 cp-abi.c *** cp-abi.c 6 Sep 2002 20:20:42 -0000 1.2 --- cp-abi.c 30 Oct 2002 19:52:08 -0000 *************** *** 107,109 **** --- 107,115 ---- return 1; } + int + current_cp_abi_equals (const char *short_name) + { + return strcmp(current_cp_abi.shortname, short_name) == 0; + } + Index: cp-abi.h =================================================================== RCS file: /product/tools/gdb/gdb/cp-abi.h,v retrieving revision 1.2 diff -c -r1.2 cp-abi.h *** cp-abi.h 6 Sep 2002 20:20:42 -0000 1.2 --- cp-abi.h 30 Oct 2002 19:52:08 -0000 *************** *** 168,173 **** --- 168,174 ---- extern struct cp_abi_ops current_cp_abi; extern int register_cp_abi (struct cp_abi_ops abi); extern int switch_to_cp_abi (const char *short_name); + extern int current_cp_abi_equals (const char *short_name); #endif