X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fravenscar-thread.c;h=3e0687de9835a3b95052b3c8d1085565f2e1498e;hb=ad9eb1fdda263cd91ee8fb36292fb29d546b0076;hp=67a101b15c57735769a5614e69c88e02ad5a4f51;hpb=ac61d2dbf7df54bbb7cef09ac9b5f61541da065b;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ravenscar-thread.c b/gdb/ravenscar-thread.c index 67a101b15c..3e0687de98 100644 --- a/gdb/ravenscar-thread.c +++ b/gdb/ravenscar-thread.c @@ -1,6 +1,6 @@ /* Ada Ravenscar thread support. - Copyright (C) 2004-2014 Free Software Foundation, Inc. + Copyright (C) 2004-2016 Free Software Foundation, Inc. This file is part of GDB. @@ -26,10 +26,10 @@ #include "command.h" #include "ravenscar-thread.h" #include "observer.h" -#include #include "gdbcmd.h" #include "top.h" #include "regcache.h" +#include "objfiles.h" /* If non-null, ravenscar task support is enabled. */ static int ravenscar_task_support = 1; @@ -52,9 +52,10 @@ static const char first_task_name[] = "system__tasking__debug__first_task"; static const char ravenscar_runtime_initializer[] = "system__bb__threads__initialize"; -static void ravenscar_find_new_threads (struct target_ops *ops); +static void ravenscar_update_thread_list (struct target_ops *ops); static ptid_t ravenscar_running_thread (void); -static char *ravenscar_extra_thread_info (struct thread_info *tp); +static char *ravenscar_extra_thread_info (struct target_ops *self, + struct thread_info *tp); static int ravenscar_thread_alive (struct target_ops *ops, ptid_t ptid); static void ravenscar_fetch_registers (struct target_ops *ops, struct regcache *regcache, int regnum); @@ -90,7 +91,7 @@ ravenscar_update_inferior_ptid (void) gdb_assert (!ptid_equal (inferior_ptid, null_ptid)); /* The running thread may not have been added to - system.tasking.debug's list yet; so ravenscar_find_new_threads + system.tasking.debug's list yet; so ravenscar_update_thread_list may not always add it to the thread list. Add it here. */ if (!find_thread_ptid (inferior_ptid)) add_thread (inferior_ptid); @@ -101,13 +102,13 @@ ravenscar_update_inferior_ptid (void) and return its associated minimal symbol. Return NULL if not found. */ -static struct minimal_symbol * +static struct bound_minimal_symbol get_running_thread_msymbol (void) { - struct minimal_symbol *msym; + struct bound_minimal_symbol msym; msym = lookup_minimal_symbol (running_thread_name, NULL, NULL); - if (!msym) + if (!msym.minsym) /* Older versions of the GNAT runtime were using a different (less ideal) name for the symbol where the active thread ID is stored. If we couldn't find the symbol using the latest @@ -123,17 +124,18 @@ get_running_thread_msymbol (void) static int has_ravenscar_runtime (void) { - struct minimal_symbol *msym_ravenscar_runtime_initializer = + struct bound_minimal_symbol msym_ravenscar_runtime_initializer = lookup_minimal_symbol (ravenscar_runtime_initializer, NULL, NULL); - struct minimal_symbol *msym_known_tasks = + struct bound_minimal_symbol msym_known_tasks = lookup_minimal_symbol (known_tasks_name, NULL, NULL); - struct minimal_symbol *msym_first_task = + struct bound_minimal_symbol msym_first_task = lookup_minimal_symbol (first_task_name, NULL, NULL); - struct minimal_symbol *msym_running_thread = get_running_thread_msymbol (); + struct bound_minimal_symbol msym_running_thread + = get_running_thread_msymbol (); - return (msym_ravenscar_runtime_initializer - && (msym_known_tasks || msym_first_task) - && msym_running_thread); + return (msym_ravenscar_runtime_initializer.minsym + && (msym_known_tasks.minsym || msym_first_task.minsym) + && msym_running_thread.minsym); } /* Return True if the Ada Ravenscar run-time can be found in the @@ -151,7 +153,7 @@ ravenscar_runtime_initialized (void) static CORE_ADDR get_running_thread_id (void) { - const struct minimal_symbol *object_msym = get_running_thread_msymbol (); + struct bound_minimal_symbol object_msym = get_running_thread_msymbol (); int object_size; int buf_size; gdb_byte *buf; @@ -159,13 +161,13 @@ get_running_thread_id (void) struct type *builtin_type_void_data_ptr = builtin_type (target_gdbarch ())->builtin_data_ptr; - if (!object_msym) + if (!object_msym.minsym) return 0; - object_addr = SYMBOL_VALUE_ADDRESS (object_msym); + object_addr = BMSYMBOL_VALUE_ADDRESS (object_msym); object_size = TYPE_LENGTH (builtin_type_void_data_ptr); buf_size = object_size; - buf = alloca (buf_size); + buf = (gdb_byte *) alloca (buf_size); read_memory (object_addr, buf, buf_size); return extract_typed_address (buf, builtin_type_void_data_ptr); } @@ -199,7 +201,7 @@ ravenscar_wait (struct target_ops *ops, ptid_t ptid, if (status->kind != TARGET_WAITKIND_EXITED && status->kind != TARGET_WAITKIND_SIGNALLED) { - ravenscar_find_new_threads (ops); + ravenscar_update_thread_list (ops); ravenscar_update_inferior_ptid (); } return inferior_ptid; @@ -216,7 +218,7 @@ ravenscar_add_thread (struct ada_task_info *task) } static void -ravenscar_find_new_threads (struct target_ops *ops) +ravenscar_update_thread_list (struct target_ops *ops) { ada_build_task_list (); @@ -240,7 +242,7 @@ ravenscar_running_thread (void) } static char * -ravenscar_extra_thread_info (struct thread_info *tp) +ravenscar_extra_thread_info (struct target_ops *self, struct thread_info *tp) { return "Ravenscar task"; } @@ -305,7 +307,7 @@ static void ravenscar_prepare_to_store (struct target_ops *self, struct regcache *regcache) { - struct target_ops *beneath = find_target_beneath (&ravenscar_ops); + struct target_ops *beneath = find_target_beneath (self); if (!ravenscar_runtime_initialized () || ptid_equal (inferior_ptid, base_magic_null_ptid) @@ -324,7 +326,7 @@ ravenscar_prepare_to_store (struct target_ops *self, static void ravenscar_mourn_inferior (struct target_ops *ops) { - struct target_ops *beneath = find_target_beneath (&ravenscar_ops); + struct target_ops *beneath = find_target_beneath (ops); base_ptid = null_ptid; beneath->to_mourn_inferior (beneath); @@ -336,10 +338,9 @@ ravenscar_mourn_inferior (struct target_ops *ops) static void ravenscar_inferior_created (struct target_ops *target, int from_tty) { - struct ravenscar_arch_ops *ops; if (!ravenscar_task_support - || gdbarch_ravenscar_ops (current_inferior ()->gdbarch) == NULL + || gdbarch_ravenscar_ops (target_gdbarch ()) == NULL || !has_ravenscar_runtime ()) return; @@ -349,7 +350,7 @@ ravenscar_inferior_created (struct target_ops *target, int from_tty) } static ptid_t -ravenscar_get_ada_task_ptid (long lwp, long thread) +ravenscar_get_ada_task_ptid (struct target_ops *self, long lwp, long thread) { return ptid_build (ptid_get_pid (base_ptid), 0, thread); } @@ -366,7 +367,7 @@ init_ravenscar_thread_ops (void) ravenscar_ops.to_store_registers = ravenscar_store_registers; ravenscar_ops.to_prepare_to_store = ravenscar_prepare_to_store; ravenscar_ops.to_thread_alive = ravenscar_thread_alive; - ravenscar_ops.to_find_new_threads = ravenscar_find_new_threads; + ravenscar_ops.to_update_thread_list = ravenscar_update_thread_list; ravenscar_ops.to_pid_to_str = ravenscar_pid_to_str; ravenscar_ops.to_extra_thread_info = ravenscar_extra_thread_info; ravenscar_ops.to_get_ada_task_ptid = ravenscar_get_ada_task_ptid; @@ -391,7 +392,7 @@ set_ravenscar_command (char *arg, int from_tty) { printf_unfiltered (_(\ "\"set ravenscar\" must be followed by the name of a setting.\n")); - help_list (set_ravenscar_list, "set ravenscar ", -1, gdb_stdout); + help_list (set_ravenscar_list, "set ravenscar ", all_commands, gdb_stdout); } /* Implement the "show ravenscar" prefix command. */