Add a TRY_CATCH to get_prev_frame_always to better manage errors during unwind.
[deliverable/binutils-gdb.git] / gdb / target.c
index d08e2ea720210047ff23355cf5a01fde378661c1..cb154ab409b7623a14201ec951d10981b78e8f11 100644 (file)
@@ -27,6 +27,7 @@
 #include "gdbcmd.h"
 #include "symtab.h"
 #include "inferior.h"
+#include "infrun.h"
 #include "bfd.h"
 #include "symfile.h"
 #include "objfiles.h"
@@ -757,10 +758,6 @@ target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset)
          /* Fetch the load module address for this objfile.  */
          lm_addr = gdbarch_fetch_tls_load_module_address (target_gdbarch (),
                                                           objfile);
-         /* If it's 0, throw the appropriate exception.  */
-         if (lm_addr == 0)
-           throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
-                        _("TLS load module not found"));
 
          addr = target->to_get_thread_local_address (target, ptid,
                                                      lm_addr, offset);
@@ -2153,8 +2150,9 @@ target_resume (ptid_t ptid, int step, enum gdb_signal signal)
                        gdb_signal_to_name (signal));
 
   registers_changed_ptid (ptid);
+  /* We only set the internal executing state here.  The user/frontend
+     running state is set at a higher level.  */
   set_executing (ptid, 1);
-  set_running (ptid, 1);
   clear_inline_frame_state (ptid);
 }
 
@@ -2440,6 +2438,20 @@ target_require_runnable (void)
   internal_error (__FILE__, __LINE__, _("No targets found"));
 }
 
+/* Whether GDB is allowed to fall back to the default run target for
+   "run", "attach", etc. when no target is connected yet.  */
+static int auto_connect_native_target = 1;
+
+static void
+show_auto_connect_native_target (struct ui_file *file, int from_tty,
+                                struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file,
+                   _("Whether GDB may automatically connect to the "
+                     "native target is %s.\n"),
+                   value);
+}
+
 /* Look through the list of possible targets for a target that can
    execute a run or attach command without any other data.  This is
    used to locate the default process stratum.
@@ -2450,23 +2462,28 @@ target_require_runnable (void)
 static struct target_ops *
 find_default_run_target (char *do_mesg)
 {
-  struct target_ops **t;
   struct target_ops *runable = NULL;
-  int count;
 
-  count = 0;
-
-  for (t = target_structs; t < target_structs + target_struct_size;
-       ++t)
+  if (auto_connect_native_target)
     {
-      if ((*t)->to_can_run != delegate_can_run && target_can_run (*t))
+      struct target_ops **t;
+      int count = 0;
+
+      for (t = target_structs; t < target_structs + target_struct_size;
+          ++t)
        {
-         runable = *t;
-         ++count;
+         if ((*t)->to_can_run != delegate_can_run && target_can_run (*t))
+           {
+             runable = *t;
+             ++count;
+           }
        }
+
+      if (count != 1)
+       runable = NULL;
     }
 
-  if (count != 1)
+  if (runable == NULL)
     {
       if (do_mesg)
        error (_("Don't know how to %s.  Try \"help target\"."), do_mesg);
@@ -4088,16 +4105,17 @@ maintenance_print_target_stack (char *cmd, int from_tty)
     }
 }
 
-/* Controls if async mode is permitted.  */
-int target_async_permitted = 0;
+/* Controls if targets can report that they can/are async.  This is
+   just for maintainers to use when debugging gdb.  */
+int target_async_permitted = 1;
 
 /* The set command writes to this variable.  If the inferior is
    executing, target_async_permitted is *not* updated.  */
-static int target_async_permitted_1 = 0;
+static int target_async_permitted_1 = 1;
 
 static void
-set_target_async_command (char *args, int from_tty,
-                         struct cmd_list_element *c)
+maint_set_target_async_command (char *args, int from_tty,
+                               struct cmd_list_element *c)
 {
   if (have_live_inferiors ())
     {
@@ -4109,9 +4127,9 @@ set_target_async_command (char *args, int from_tty,
 }
 
 static void
-show_target_async_command (struct ui_file *file, int from_tty,
-                          struct cmd_list_element *c,
-                          const char *value)
+maint_show_target_async_command (struct ui_file *file, int from_tty,
+                                struct cmd_list_element *c,
+                                const char *value)
 {
   fprintf_filtered (file,
                    _("Controlling the inferior in "
@@ -4216,10 +4234,10 @@ result in significant performance improvement for remote targets."),
 Set whether gdb controls the inferior in asynchronous mode."), _("\
 Show whether gdb controls the inferior in asynchronous mode."), _("\
 Tells gdb whether to control the inferior in asynchronous mode."),
-                          set_target_async_command,
-                          show_target_async_command,
-                          &setlist,
-                          &showlist);
+                          maint_set_target_async_command,
+                          maint_show_target_async_command,
+                          &maintenance_set_cmdlist,
+                          &maintenance_show_cmdlist);
 
   add_setshow_boolean_cmd ("may-write-registers", class_support,
                           &may_write_registers_1, _("\
@@ -4274,4 +4292,13 @@ When this permission is on, GDB may interrupt/stop the target's execution.\n\
 Otherwise, any attempt to interrupt or stop will be ignored."),
                           set_target_permissions, NULL,
                           &setlist, &showlist);
+
+  add_setshow_boolean_cmd ("auto-connect-native-target", class_support,
+                          &auto_connect_native_target, _("\
+Set whether GDB may automatically connect to the native target."), _("\
+Show whether GDB may automatically connect to the native target."), _("\
+When on, and GDB is not connected to a target yet, GDB\n\
+attempts \"run\" and other commands with the native target."),
+                          NULL, show_auto_connect_native_target,
+                          &setlist, &showlist);
 }
This page took 0.025321 seconds and 4 git commands to generate.