]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit - gdb/ada-lang.c
[Ada] Breakpoints on task bodies
authorJoel Brobecker <brobecker@gnat.com>
Wed, 21 Dec 2011 07:10:59 +0000 (07:10 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Wed, 21 Dec 2011 07:10:59 +0000 (07:10 +0000)
commit9ac7f98e7cc67d360b5aab46f281440b6b446288
treef1a0d36649bfce4ebcecd77290eb1fbe0f32fc0e
parent496c2508ac12824a98d5ded95fa999e9ebc6c34b
[Ada] Breakpoints on task bodies

Consider the following declaration:

    package Pck is
       task Dummy_Task is
          entry Start;
       end Dummy_Task;
    end Pck;

Inserting a breakpoint on the body of that task does not currently
work:

    (gdb) b pck.dummy_task
    "pck.dummy_task" is not a function
    Make breakpoint pending on future shared library load? (y or [n]) n

What happens here is that the compiler generates two symbols:

  (a) Symbol `pck__dummy_task' which is a *variable* referencing
      the task;

  (b) Symbol `pck__dummy_taskTKB' which is the subprogram implementing
      the body of the task.

The symbol lookup only finds the variable before of the TKB suffix in
the subprogram name. This patch fixes the problem by adjusting the
ada-lang.c:is_name_suffix routine to recognize "TKB" suffixes.  But
that's not enough, because the search in the symtab is performed via
the block dictionary, using a hashing algorithm. So, for the search
to find `pck__dummy_taskTKB', I had to modify the hashing function
to ignore TKB suffixes as well.

gdb/ChangeLog:

        * ada-lang.c (is_name_suffix): Add handling of "TKB" suffixes.
        Update function documentation.
        * dictionary.c (dict_hash): Ignore "TKB" suffixes in hash
        computation.

gdb/testsuite/ChangeLog:

        * gdb.ada/task_bp: New testcase.
gdb/ChangeLog
gdb/ada-lang.c
gdb/dictionary.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.ada/task_bp.exp [new file with mode: 0644]
gdb/testsuite/gdb.ada/task_bp/foo.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/task_bp/pck.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/task_bp/pck.ads [new file with mode: 0644]