summaryrefslogtreecommitdiff
path: root/gdb/ada-lang.c
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2011-11-29 01:00:44 +0000
committerJoel Brobecker <brobecker@gnat.com>2011-11-29 01:00:44 +0000
commit2b6f9b0ed123b81a4c1ba667f72ca205e64d98a5 (patch)
tree33584244d9e14d572e7ddb8ba678b935fb463f10 /gdb/ada-lang.c
parent16c166f82dd15d776fc75a530815015e3b6df554 (diff)
downloadgdb-2b6f9b0ed123b81a4c1ba667f72ca205e64d98a5.tar.gz
wrong value returned by ada-lang.c:compare_names
The ada-lang.c:compare_names function returns the wrong value when the first string starts with the same contents as the second string, followed by '_' and then some characters that do not make a symbol name suffix. For instance: string1 = "generics__test_generics__instance__print" string2 = "generics__test_generics" In that case, compare_names (string1, string2) return -1, when clearly, string1 is greater than string2. A consequence of this problem is that GDB may fail to lookup "generics.test_generics" from our partial symtabs, because partial symbols are ordered by strcmp_iw_ordered: (gdb) b generics.test_generics Function "generics.test_generics" not defined. Make breakpoint pending on future shared library load? (y or [n]) gdb/ChangeLog: * ada-lang.c (compare_names): Fix wrong return value in case string1 starts with the same contents as string2, followed by an underscore that do not start a symbol name suffix. gdb/testsuite/ChangeLog: * gdb.ada/fullname_bp: New testcase.
Diffstat (limited to 'gdb/ada-lang.c')
-rw-r--r--gdb/ada-lang.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index e396596f1f2..f960a25058c 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -4894,7 +4894,7 @@ compare_names (const char *string1, const char *string2)
if (is_name_suffix (string1))
return 0;
else
- return -1;
+ return 1;
}
/* FALLTHROUGH */
default: