Allow integer immediate for VFP vmov instructions.
[deliverable/binutils-gdb.git] / gdb / frame.c
index e40685f715dbd0ec46957e8d0269aa76b13f2b49..07fa2bc77d6e8d4d1cea0517fef9223f96045b4d 100644 (file)
@@ -1,6 +1,6 @@
 /* Cache and manage frames for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2017 Free Software Foundation, Inc.
+   Copyright (C) 1986-2018 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -34,7 +34,7 @@
 #include "frame-base.h"
 #include "command.h"
 #include "gdbcmd.h"
-#include "observer.h"
+#include "observable.h"
 #include "objfiles.h"
 #include "gdbthread.h"
 #include "block.h"
@@ -1017,14 +1017,13 @@ do_frame_register_read (void *src, int regnum, gdb_byte *buf)
     return REG_VALID;
 }
 
-std::unique_ptr<struct regcache>
+std::unique_ptr<readonly_detached_regcache>
 frame_save_as_regcache (struct frame_info *this_frame)
 {
-  const address_space *aspace = get_frame_address_space (this_frame);
-  std::unique_ptr<struct regcache> regcache
-    (new struct regcache (get_frame_arch (this_frame), aspace));
+  std::unique_ptr<readonly_detached_regcache> regcache
+    (new readonly_detached_regcache (get_frame_arch (this_frame),
+                                    do_frame_register_read, this_frame));
 
-  regcache_save (regcache.get (), do_frame_register_read, this_frame);
   return regcache;
 }
 
@@ -1058,7 +1057,7 @@ frame_pop (struct frame_info *this_frame)
      Save them in a scratch buffer so that there isn't a race between
      trying to extract the old values from the current regcache while
      at the same time writing new values into that same cache.  */
-  std::unique_ptr<struct regcache> scratch
+  std::unique_ptr<readonly_detached_regcache> scratch
     = frame_save_as_regcache (prev_frame);
 
   /* FIXME: cagney/2003-03-16: It should be possible to tell the
@@ -1069,9 +1068,8 @@ frame_pop (struct frame_info *this_frame)
      Unfortunately, they don't implement it.  Their lack of a formal
      definition can lead to targets writing back bogus values
      (arguably a bug in the target code mind).  */
-  /* Now copy those saved registers into the current regcache.
-     Here, regcache_cpy() calls regcache_restore().  */
-  regcache_cpy (get_current_regcache (), scratch.get ());
+  /* Now copy those saved registers into the current regcache.  */
+  get_current_regcache ()->restore (scratch.get ());
 
   /* We've made right mess of GDB's local state, just discard
      everything.  */
@@ -1119,7 +1117,6 @@ frame_register_unwind (struct frame_info *frame, int regnum,
   /* Dispose of the new value.  This prevents watchpoints from
      trying to watch the saved frame pointer.  */
   release_value (value);
-  value_free (value);
 }
 
 void
@@ -1266,7 +1263,6 @@ frame_unwind_register_signed (struct frame_info *frame, int regnum)
                                      byte_order);
 
   release_value (value);
-  value_free (value);
   return r;
 }
 
@@ -1301,7 +1297,6 @@ frame_unwind_register_unsigned (struct frame_info *frame, int regnum)
                                         byte_order);
 
   release_value (value);
-  value_free (value);
   return r;
 }
 
@@ -1448,12 +1443,10 @@ get_frame_register_bytes (struct frame_info *frame, int regnum,
          if (*optimizedp || *unavailablep)
            {
              release_value (value);
-             value_free (value);
              return 0;
            }
          memcpy (myaddr, value_contents_all (value) + offset, curr_len);
          release_value (value);
-         value_free (value);
        }
 
       myaddr += curr_len;
@@ -1502,7 +1495,6 @@ put_frame_register_bytes (struct frame_info *frame, int regnum,
                  curr_len);
          put_frame_register (frame, regnum, value_contents_raw (value));
          release_value (value);
-         value_free (value);
        }
 
       myaddr += curr_len;
@@ -2225,7 +2217,7 @@ inside_main_func (struct frame_info *this_frame)
      returned.  */
   maddr = gdbarch_convert_from_func_ptr_addr (get_frame_arch (this_frame),
                                              BMSYMBOL_VALUE_ADDRESS (msymbol),
-                                             &current_target);
+                                             target_stack);
   return maddr == get_frame_func (this_frame);
 }
 
@@ -2925,7 +2917,7 @@ _initialize_frame (void)
 
   frame_stash_create ();
 
-  observer_attach_target_changed (frame_observer_target_changed);
+  gdb::observers::target_changed.attach (frame_observer_target_changed);
 
   add_prefix_cmd ("backtrace", class_maintenance, set_backtrace_cmd, _("\
 Set backtrace specific variables.\n\
This page took 0.036432 seconds and 4 git commands to generate.