diff options
author | Tristan Gingold <gingold@adacore.com> | 2011-10-05 07:41:13 +0000 |
---|---|---|
committer | Tristan Gingold <gingold@adacore.com> | 2011-10-05 07:41:13 +0000 |
commit | b1c8db38fceb8464f02f1673b52c926c56203593 (patch) | |
tree | e19eef29486c8f495e3106b7eec0fa2cfd378133 /gdb/ada-tasks.c | |
parent | 4a99173dc363332fe92b6783151b1270ee8e4b39 (diff) | |
download | gdb-b1c8db38fceb8464f02f1673b52c926c56203593.zip gdb-b1c8db38fceb8464f02f1673b52c926c56203593.tar.gz gdb-b1c8db38fceb8464f02f1673b52c926c56203593.tar.bz2 |
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 2673fed..8ab5ad5 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 { |