Change maybe_disable_address_space_randomization to a class
[deliverable/binutils-gdb.git] / gdb / nat / linux-personality.c
index 21a9ca9d83f4b9663813b9b4afe686cb057c747a..bcec2ce5f381b63eb619799320bf040c2bc45600 100644 (file)
 # endif /* ! HAVE_DECL_ADDR_NO_RANDOMIZE */
 #endif /* HAVE_PERSONALITY */
 
-#ifdef HAVE_PERSONALITY
-
-/* Restore address space randomization of the inferior.  ARG is the
-   original inferior's personality value before the address space
-   randomization was disabled.  */
-
-static void
-restore_personality (void *arg)
-{
-  int personality_orig = (int) (uintptr_t) arg;
-
-  errno = 0;
-  personality (personality_orig);
-  if (errno != 0)
-    warning (_("Error restoring address space randomization: %s"),
-            safe_strerror (errno));
-}
-#endif /* HAVE_PERSONALITY */
-
-/* Return a cleanup responsible for restoring the inferior's
-   personality (and restoring the inferior's address space
-   randomization) if HAVE_PERSONALITY and if PERSONALITY_SET is not
-   zero; return a null cleanup if not HAVE_PERSONALITY or if
-   PERSONALITY_SET is zero.  */
-
-static struct cleanup *
-make_disable_asr_cleanup (int personality_set, int personality_orig)
-{
-#ifdef HAVE_PERSONALITY
-  if (personality_set != 0)
-    return make_cleanup (restore_personality,
-                        (void *) (uintptr_t) personality_orig);
-#endif /* HAVE_PERSONALITY */
-
-  return make_cleanup (null_cleanup, NULL);
-}
-
 /* See comment on nat/linux-personality.h.  */
 
-struct cleanup *
+maybe_disable_address_space_randomization::
 maybe_disable_address_space_randomization (int disable_randomization)
+  : m_personality_set (false),
+    m_personality_orig (0)
 {
-  int personality_orig = 0;
-  int personality_set = 0;
-
 #ifdef HAVE_PERSONALITY
   if (disable_randomization)
     {
       errno = 0;
-      personality_orig = personality (0xffffffff);
-      if (errno == 0 && !(personality_orig & ADDR_NO_RANDOMIZE))
+      m_personality_orig = personality (0xffffffff);
+      if (errno == 0 && !(m_personality_orig & ADDR_NO_RANDOMIZE))
        {
-         personality_set = 1;
-         personality (personality_orig | ADDR_NO_RANDOMIZE);
+         m_personality_set = true;
+         personality (m_personality_orig | ADDR_NO_RANDOMIZE);
        }
-      if (errno != 0 || (personality_set
+      if (errno != 0 || (m_personality_set
                         && !(personality (0xffffffff) & ADDR_NO_RANDOMIZE)))
        warning (_("Error disabling address space randomization: %s"),
                 safe_strerror (errno));
     }
 #endif /* HAVE_PERSONALITY */
+}
+
+maybe_disable_address_space_randomization::
+~maybe_disable_address_space_randomization ()
+{
+#ifdef HAVE_PERSONALITY
 
-  return make_disable_asr_cleanup (personality_set,
-                                  personality_orig);
+  if (m_personality_set)
+    {
+      errno = 0;
+      personality (m_personality_orig);
+      if (errno != 0)
+       warning (_("Error restoring address space randomization: %s"),
+                safe_strerror (errno));
+    }
+#endif /* HAVE_PERSONALITY */
 }
This page took 0.023869 seconds and 4 git commands to generate.