diff options
author | Tristan Gingold <gingold@adacore.com> | 2011-10-05 07:41:09 +0000 |
---|---|---|
committer | Tristan Gingold <gingold@adacore.com> | 2011-10-05 07:41:09 +0000 |
commit | 00c81b9c92ec5a6629f2cae36358e22a2ecd5939 (patch) | |
tree | b02a851997eb2f4e88d3be3a6124bfc05e56a95e /gdb/ada-tasks.c | |
parent | a0d84f42afc6eaf6424c23e9ae8bb3cbd4279e9b (diff) | |
download | gdb-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.c | 28 |
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 { |