aboutsummaryrefslogtreecommitdiff
path: root/gdb/ada-tasks.c
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2011-10-05 07:41:13 +0000
committerTristan Gingold <gingold@adacore.com>2011-10-05 07:41:13 +0000
commitb1c8db38fceb8464f02f1673b52c926c56203593 (patch)
treee19eef29486c8f495e3106b7eec0fa2cfd378133 /gdb/ada-tasks.c
parent4a99173dc363332fe92b6783151b1270ee8e4b39 (diff)
downloadgdb-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.c28
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
{