summaryrefslogtreecommitdiff
path: root/gdb/ada-tasks.c
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2011-10-05 07:41:09 +0000
committerTristan Gingold <gingold@adacore.com>2011-10-05 07:41:09 +0000
commit00c81b9c92ec5a6629f2cae36358e22a2ecd5939 (patch)
treeb02a851997eb2f4e88d3be3a6124bfc05e56a95e /gdb/ada-tasks.c
parenta0d84f42afc6eaf6424c23e9ae8bb3cbd4279e9b (diff)
downloadgdb-00c81b9c92ec5a6629f2cae36358e22a2ecd5939.tar.gz
2011-10-05 Tristan Gingold <gingold@adacore.com>
* ada-tasks.c (read_atcb): Make ravenscar_task_name static. Extract the ravenscar task name from the symbol for the atcb.
Diffstat (limited to 'gdb/ada-tasks.c')
-rw-r--r--gdb/ada-tasks.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/gdb/ada-tasks.c b/gdb/ada-tasks.c
index 2673fed6ab7..8ab5ad5aa63 100644
--- a/gdb/ada-tasks.c
+++ b/gdb/ada-tasks.c
@@ -591,7 +591,7 @@ read_atcb (CORE_ADDR task_id, struct ada_task_info *task_info)
struct value *entry_calls_value;
struct value *entry_calls_value_element;
int called_task_fieldno = -1;
- const char ravenscar_task_name[] = "Ravenscar task";
+ static const char ravenscar_task_name[] = "Ravenscar task";
const struct ada_tasks_pspace_data *pspace_data
= get_ada_tasks_pspace_data (current_program_space);
@@ -629,7 +629,31 @@ read_atcb (CORE_ADDR task_id, struct ada_task_info *task_info)
pspace_data->atcb_fieldno.image),
sizeof (task_info->name) - 1);
else
- strcpy (task_info->name, ravenscar_task_name);
+ {
+ struct minimal_symbol *msym;
+
+ msym = lookup_minimal_symbol_by_pc (task_id);
+ if (msym)
+ {
+ const char *full_name = SYMBOL_LINKAGE_NAME (msym);
+ const char *task_name = full_name;
+ const char *p;
+
+ /* Strip the prefix. */
+ for (p = full_name; *p; p++)
+ if (p[0] == '_' && p[1] == '_')
+ task_name = p + 2;
+
+ /* Copy the task name. */
+ strncpy (task_info->name, task_name, sizeof (task_info->name));
+ task_info->name[sizeof (task_info->name) - 1] = 0;
+ }
+ else
+ {
+ /* No symbol found. Use a default name. */
+ strcpy (task_info->name, ravenscar_task_name);
+ }
+ }
}
else
{