about summary refs log tree commit diff
path: root/support/support_record_failure.c
diff options
context:
space:
mode:
Diffstat (limited to 'support/support_record_failure.c')
-rw-r--r--support/support_record_failure.c106
1 files changed, 0 insertions, 106 deletions
diff --git a/support/support_record_failure.c b/support/support_record_failure.c
deleted file mode 100644
index 684055c746..0000000000
--- a/support/support_record_failure.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/* Global test failure counter.
-   Copyright (C) 2016-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <support/check.h>
-#include <support/support.h>
-#include <support/test-driver.h>
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <unistd.h>
-
-/* This structure keeps track of test failures.  The counter is
-   incremented on each failure.  The failed member is set to true if a
-   failure is detected, so that even if the counter wraps around to
-   zero, the failure of a test can be detected.
-
-   The init constructor function below puts *state on a shared
-   annonymous mapping, so that failure reports from subprocesses
-   propagate to the parent process.  */
-struct test_failures
-{
-  unsigned int counter;
-  unsigned int failed;
-};
-static struct test_failures *state;
-
-static __attribute__ ((constructor)) void
-init (void)
-{
-  void *ptr = mmap (NULL, sizeof (*state), PROT_READ | PROT_WRITE,
-                    MAP_ANONYMOUS | MAP_SHARED, -1, 0);
-  if (ptr == MAP_FAILED)
-    {
-      printf ("error: could not map %zu bytes: %m\n", sizeof (*state));
-      exit (1);
-    }
-  /* Zero-initialization of the struct is sufficient.  */
-  state = ptr;
-}
-
-void
-support_record_failure (void)
-{
-  if (state == NULL)
-    {
-      write_message
-        ("error: support_record_failure called without initialization\n");
-      _exit (1);
-    }
-  /* Relaxed MO is sufficient because we are only interested in the
-     values themselves, in isolation.  */
-  __atomic_store_n (&state->failed, 1, __ATOMIC_RELEASE);
-  __atomic_add_fetch (&state->counter, 1, __ATOMIC_RELEASE);
-}
-
-int
-support_report_failure (int status)
-{
-  if (state == NULL)
-    {
-      write_message
-        ("error: support_report_failure called without initialization\n");
-      return 1;
-    }
-
-  /* Relaxed MO is sufficient because acquire test result reporting
-     assumes that exiting from the main thread happens before the
-     error reporting via support_record_failure, which requires some
-     form of external synchronization.  */
-  bool failed = __atomic_load_n (&state->failed, __ATOMIC_RELAXED);
-  if (failed)
-    printf ("error: %u test failures\n",
-            __atomic_load_n (&state->counter, __ATOMIC_RELAXED));
-
-  if ((status == 0 || status == EXIT_UNSUPPORTED) && failed)
-    /* If we have a recorded failure, it overrides a non-failure
-       report from the test function.  */
-    status = 1;
-  return status;
-}
-
-void
-support_record_failure_reset (void)
-{
-  /* Only used for testing the test framework, with external
-     synchronization, but use release MO for consistency.  */
-  __atomic_store_n (&state->failed, 0, __ATOMIC_RELAXED);
-  __atomic_add_fetch (&state->counter, 0, __ATOMIC_RELAXED);
-}