diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/ada-lang.c | 6 | ||||
-rw-r--r-- | gdb/dictionary.c | 11 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/task_bp.exp | 68 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/task_bp/foo.adb | 20 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/task_bp/pck.adb | 21 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/task_bp/pck.ads | 20 |
8 files changed, 157 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 66cd31e..aba954f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2011-12-21 Joel Brobecker <brobecker@adacore.com> + + * ada-lang.c (is_name_suffix): Add handling of "TKB" suffixes. + Update function documentation. + * dictionary.c (dict_hash): Ignore "TKB" suffixes in hash + computation. + 2011-12-20 Pedro Alves <alves.ped@gmail.com> Jan Kratochvil <jan.kratochvil@redhat.com> diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 1befc43..41e81ab 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -5154,6 +5154,7 @@ ada_lookup_symbol_nonlocal (const char *name, [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux] ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX] + TKB [subprogram suffix for task bodies] _E[0-9]+[bs]$ [protected object entry suffixes] (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$ @@ -5199,6 +5200,11 @@ is_name_suffix (const char *str) return 1; } + /* "TKB" suffixes are used for subprograms implementing task bodies. */ + + if (strcmp (str, "TKB") == 0) + return 1; + #if 0 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end with a N at the end. Unfortunately, the compiler uses the same diff --git a/gdb/dictionary.c b/gdb/dictionary.c index 8142d29..7c451d2 100644 --- a/gdb/dictionary.c +++ b/gdb/dictionary.c @@ -801,6 +801,17 @@ dict_hash (const char *string0) hash = 0; while (*string) { + /* Ignore "TKB" suffixes. + + These are used by Ada for subprograms implementing a task body. + For instance for a task T inside package Pck, the name of the + subprogram implementing T's body is `pck__tTKB'. We need to + ignore the "TKB" suffix because searches for this task body + subprogram are going to be performed using `pck__t' (the encoded + version of the natural name `pck.t'). */ + if (strcmp (string, "TKB") == 0) + return hash; + switch (*string) { case '$': diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e815b07..d1cb3f1 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-12-21 Joel Brobecker <brobecker@adacore.com> + + * gdb.ada/task_bp: New testcase. + 2011-12-19 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.base/reread.exp: If srcfile2 fails to build retry it with diff --git a/gdb/testsuite/gdb.ada/task_bp.exp b/gdb/testsuite/gdb.ada/task_bp.exp new file mode 100644 index 0000000..3d07ad6 --- /dev/null +++ b/gdb/testsuite/gdb.ada/task_bp.exp @@ -0,0 +1,68 @@ +# Copyright 2011 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib "ada.exp" + +set testdir "task_bp" +set testfile "${testdir}/foo" +set srcfile ${srcdir}/${subdir}/${testfile}.adb +set binfile ${objdir}/${subdir}/${testfile} + +file mkdir ${objdir}/${subdir}/${testdir} +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { + return -1 +} + +# Insert a breakpoint at LOC, and run the program expecting us to +# reach that breakpoint. +# +# LOC is expected to be a linespec referencing the body of task +# Pck.Dummy_Task (the purpose is to test all the variations of +# these equivalent linespecs). +# +# MSG is just a string that's used to qualify the name of the tests +# that are executed inside that procedure. The purpose to be able +# to call that function multiple times with the same linespec, in +# order to test one given linespec under multiple conditions. + +proc test_bp { loc msg } { + gdb_test "break $loc" \ + "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: file .*pck.adb, line \[0-9\]+\." \ + "break $loc - $msg" + + gdb_run_cmd + gdb_test "" \ + "Breakpoint \[0-9\]+, pck\\.dummy_task (.*)" \ + "run to $loc - $msg" +} + +set all_linespecs { "pck.dummy_task" "dummy_task" + "pck.adb:pck.dummy_task" "pck.adb:dummy_task"} + +# First, test the linespecs when the associated symtab hasn't been +# expanded yet. + +foreach linespec $all_linespecs { + clean_restart ${testfile} + test_bp $linespec "from psymtab" +} + +# Now, do the same, but with the associated symtab already expanded. + +foreach linespec $all_linespecs { + clean_restart ${testfile} + gdb_test "list pck.adb:1" ".*" "expanding symtab for $linespec" + test_bp $linespec "from full symtab" +} diff --git a/gdb/testsuite/gdb.ada/task_bp/foo.adb b/gdb/testsuite/gdb.ada/task_bp/foo.adb new file mode 100644 index 0000000..98919a9 --- /dev/null +++ b/gdb/testsuite/gdb.ada/task_bp/foo.adb @@ -0,0 +1,20 @@ +-- Copyright 2011 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +with Pck; use Pck; +procedure Foo is +begin + Dummy_Task.Start; +end Foo; diff --git a/gdb/testsuite/gdb.ada/task_bp/pck.adb b/gdb/testsuite/gdb.ada/task_bp/pck.adb new file mode 100644 index 0000000..0b1a15c --- /dev/null +++ b/gdb/testsuite/gdb.ada/task_bp/pck.adb @@ -0,0 +1,21 @@ +-- Copyright 2011 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +package body Pck is + task body Dummy_Task is + begin + accept Start; + end Dummy_Task; +end Pck; diff --git a/gdb/testsuite/gdb.ada/task_bp/pck.ads b/gdb/testsuite/gdb.ada/task_bp/pck.ads new file mode 100644 index 0000000..37460ed --- /dev/null +++ b/gdb/testsuite/gdb.ada/task_bp/pck.ads @@ -0,0 +1,20 @@ +-- Copyright 2011 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +package Pck is + task Dummy_Task is + entry Start; + end Dummy_Task; +end Pck; |