This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.26-190-g5f3b183


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  5f3b183d198b39ca993a41aadb02bddd9fde078d (commit)
      from  99ee4d26dc07c3eadfbf6793db26ef9dfb1551e5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=5f3b183d198b39ca993a41aadb02bddd9fde078d

commit 5f3b183d198b39ca993a41aadb02bddd9fde078d
Author: Paul Pluzhnikov <ppluzhnikov@google.com>
Date:   Sun Aug 27 19:10:40 2017 -0700

    2017-08-27  Paul Pluzhnikov  <ppluzhnikov@google.com>
    
    	* stdlib/Makefile (tst-atexit, tst-at_quick_exit): New tests.
    	(tst-cxa_atexit, tst-on_exit): Likewise.
    	* stdlib/Makefile (tests): Add tst-atexit, tst-at_quick_exit,
    	tst-cxa_atexit, and tst-on_exit.
    	* stdlib/tst-atexit-common.c: New file.
    	* stdlib/tst-atexit.c: New file.
    	* stdlib/tst-at_quick_exit.c: New file.
    	* stdlib/tst-cxa_atexit.c: New file.
    	* stdlib/tst-on_exit.c: New file.

diff --git a/ChangeLog b/ChangeLog
index a93769f..6dbf10c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2017-08-27  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* stdlib/Makefile (tst-atexit, tst-at_quick_exit): New tests.
+	(tst-cxa_atexit, tst-on_exit): Likewise.
+	* stdlib/Makefile (tests): Add tst-atexit, tst-at_quick_exit,
+	tst-cxa_atexit, and tst-on_exit.
+	* stdlib/tst-atexit-common.c: New file.
+	* stdlib/tst-atexit.c: New file.
+	* stdlib/tst-at_quick_exit.c: New file.
+	* stdlib/tst-cxa_atexit.c: New file.
+	* stdlib/tst-on_exit.c: New file.
+
 2017-08-27  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
 	* sysdeps/mach/hurd/bits/sysmacros.h: New file.
diff --git a/stdlib/Makefile b/stdlib/Makefile
index e4b36ca..2da39e0 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -80,7 +80,9 @@ tests		:= tst-strtol tst-strtod testmb testrand testsort testdiv   \
 		   tst-strtol-locale tst-strtod-nan-locale tst-strfmon_l    \
 		   tst-quick_exit tst-thread-quick_exit tst-width	    \
 		   tst-width-stdint tst-strfrom tst-strfrom-locale	    \
-		   tst-getrandom
+		   tst-getrandom tst-atexit tst-at_quick_exit 		    \
+		   tst-cxa_atexit tst-on_exit
+
 tests-internal	:= tst-strtod1i tst-strtod3 tst-strtod4 tst-strtod5i \
 		   tst-tls-atexit tst-tls-atexit-nodelete
 tests-static	:= tst-secure-getenv
diff --git a/stdlib/tst-at_quick_exit.c b/stdlib/tst-at_quick_exit.c
new file mode 100644
index 0000000..ea9e81d
--- /dev/null
+++ b/stdlib/tst-at_quick_exit.c
@@ -0,0 +1,22 @@
+/* Verify functions registered via at_auick_exit run in LIFO order.
+   Copyright (C) 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/>.  */
+
+#define ATEXIT(fn) at_quick_exit (fn)
+#define EXIT(x) quick_exit (x)
+
+#include <stdlib/tst-atexit-common.c>
diff --git a/stdlib/tst-atexit-common.c b/stdlib/tst-atexit-common.c
new file mode 100644
index 0000000..262235a
--- /dev/null
+++ b/stdlib/tst-atexit-common.c
@@ -0,0 +1,95 @@
+/* Helper file for tst-{atexit,at_quick_exit,cxa_atexit,on_exit}.
+   Copyright (C) 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 <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define MAX_ATEXIT 20  /* Large enough for current set of invocations.  */
+static char crumbs[MAX_ATEXIT];
+static int next_slot = 0;
+
+static void
+fn0 (void)
+{
+  crumbs[next_slot++] = '0';
+}
+
+static void
+fn1 (void)
+{
+  crumbs[next_slot++] = '1';
+}
+
+static void
+fn2 (void)
+{
+  crumbs[next_slot++] = '2';
+  ATEXIT (fn1);
+}
+
+static void
+fn3 (void)
+{
+  crumbs[next_slot++] = '3';
+  ATEXIT (fn2);
+  ATEXIT (fn0);
+}
+
+static void
+fn_final (void)
+{
+  /* Arbitrary sequence matching current registrations.  */
+  const char expected[] = "3021121130211";
+
+  if (strcmp (crumbs, expected) == 0)
+    _exit (0);
+
+  printf ("crumbs:   %s\n", crumbs);
+  printf ("expected: %s\n", expected);
+  _exit (1);
+}
+
+/* This is currently just a basic test to verify that exit handlers execute
+   in LIFO order, even when the handlers register additional new handlers.
+
+   TODO: Additional tests that we should do:
+   1. POSIX says we need to support at least ATEXIT_MAX
+   2. Verify that fork'd child inherit the registrations of the parent.
+   3. ...  */
+
+static int
+do_test (void)
+{
+  /* Register this first so it can verify expected order of the rest.  */
+  ATEXIT (fn_final);
+
+  ATEXIT (fn1);
+  ATEXIT (fn3);
+  ATEXIT (fn1);
+  ATEXIT (fn2);
+  ATEXIT (fn1);
+  ATEXIT (fn3);
+
+  EXIT (2);  /* If we see this exit code, fn_final must have not worked.  */
+}
+
+#define TEST_FUNCTION do_test
+#include <support/test-driver.c>
diff --git a/stdlib/tst-atexit.c b/stdlib/tst-atexit.c
new file mode 100644
index 0000000..f7b2ea4
--- /dev/null
+++ b/stdlib/tst-atexit.c
@@ -0,0 +1,22 @@
+/* Verify functions registered via atexit run in LIFO order.
+   Copyright (C) 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/>.  */
+
+#define ATEXIT(fn) atexit (fn)
+#define EXIT(x) exit (x)
+
+#include <stdlib/tst-atexit-common.c>
diff --git a/stdlib/tst-cxa_atexit.c b/stdlib/tst-cxa_atexit.c
new file mode 100644
index 0000000..f6d2cc3
--- /dev/null
+++ b/stdlib/tst-cxa_atexit.c
@@ -0,0 +1,24 @@
+/* Verify functions registered via __cxa_atexit run in LIFO order.
+   Copyright (C) 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/>.  */
+
+extern int __cxa_atexit (void (*func) (void *), void *arg, void *d);
+
+#define ATEXIT(fn) __cxa_atexit ((void (*) (void *)) fn, (void *) 0, (void *) 0)
+#define EXIT(x) exit (x)
+
+#include <stdlib/tst-atexit-common.c>
diff --git a/stdlib/tst-on_exit.c b/stdlib/tst-on_exit.c
new file mode 100644
index 0000000..970d214
--- /dev/null
+++ b/stdlib/tst-on_exit.c
@@ -0,0 +1,22 @@
+/* Verify functions registered via on_exit run in LIFO order.
+   Copyright (C) 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/>.  */
+
+#define ATEXIT(fn) on_exit ((void (*) (int, void *)) fn, (void *) 0)
+#define EXIT(x) exit (x)
+
+#include <stdlib/tst-atexit-common.c>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                  |   12 ++++++
 stdlib/Makefile            |    4 +-
 stdlib/tst-at_quick_exit.c |   22 ++++++++++
 stdlib/tst-atexit-common.c |   95 ++++++++++++++++++++++++++++++++++++++++++++
 stdlib/tst-atexit.c        |   22 ++++++++++
 stdlib/tst-cxa_atexit.c    |   24 +++++++++++
 stdlib/tst-on_exit.c       |   22 ++++++++++
 7 files changed, 200 insertions(+), 1 deletions(-)
 create mode 100644 stdlib/tst-at_quick_exit.c
 create mode 100644 stdlib/tst-atexit-common.c
 create mode 100644 stdlib/tst-atexit.c
 create mode 100644 stdlib/tst-cxa_atexit.c
 create mode 100644 stdlib/tst-on_exit.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]