Hide __atexit and __atexit_register_cleanup()
authorguenther <guenther@openbsd.org>
Sun, 25 Oct 2015 18:01:24 +0000 (18:01 +0000)
committerguenther <guenther@openbsd.org>
Sun, 25 Oct 2015 18:01:24 +0000 (18:01 +0000)
Wrap __cxa_{atexit,finalize}() so the call from exit() goes direct
Switch regress/lib/libc/atexit/ to be built with -static so that it can
  still access __atexit*

ok millert@ jca@

lib/libc/Symbols.list
lib/libc/hidden/stdlib.h
lib/libc/stdio/local.h
lib/libc/stdlib/atexit.c
lib/libc/stdlib/atexit.h
regress/lib/libc/atexit/Makefile

index 09da8af..c1b9e26 100644 (file)
@@ -1428,8 +1428,6 @@ random
 
 /* stdlib */
 _Exit
-__atexit
-__atexit_register_cleanup
 __cxa_atexit
 __cxa_finalize
 __isthreaded
index 9d0e771..36e4607 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: stdlib.h,v 1.4 2015/09/19 04:02:21 guenther Exp $     */
+/*     $OpenBSD: stdlib.h,v 1.5 2015/10/25 18:01:24 guenther Exp $     */
 /*     $NetBSD: stdlib.h,v 1.25 1995/12/27 21:19:08 jtc Exp $  */
 
 /*-
@@ -39,6 +39,7 @@
 
 __BEGIN_HIDDEN_DECLS
 char   *__findenv(const char *, int, int *);
+void   __atexit_register_cleanup(void (*)(void));
 __END_HIDDEN_DECLS
 
 #if 0
index 79f2365..94b2804 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: local.h,v 1.22 2015/10/04 07:33:46 guenther Exp $     */
+/*     $OpenBSD: local.h,v 1.23 2015/10/25 18:01:24 guenther Exp $     */
 
 /*-
  * Copyright (c) 1990, 1993
@@ -45,8 +45,6 @@ void  _cleanup(void);
 int    _fwalk(int (*)(FILE *));
 PROTO_NORMAL(_fwalk);
 
-extern void __atexit_register_cleanup(void (*)(void));
-
 __BEGIN_HIDDEN_DECLS
 int    __sflush(FILE *);
 int    __sflush_locked(FILE *);
index a330805..4ccf845 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: atexit.c,v 1.21 2015/04/07 01:27:07 guenther Exp $ */
+/*     $OpenBSD: atexit.c,v 1.22 2015/10/25 18:01:24 guenther Exp $ */
 /*
  * Copyright (c) 2002 Daniel Hartmeier
  * All rights reserved.
@@ -103,6 +103,7 @@ unlock:
        _ATEXIT_UNLOCK();
        return (ret);
 }
+DEF_STRONG(__cxa_atexit);
 
 /*
  * Call all handlers registered with __cxa_atexit() for the shared
@@ -180,6 +181,7 @@ restart:
 
        }
 }
+DEF_STRONG(__cxa_finalize);
 
 /*
  * Register the cleanup function
index 3de2aa3..e2e821d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: atexit.h,v 1.9 2014/06/18 19:01:10 kettenis Exp $ */
+/*     $OpenBSD: atexit.h,v 1.10 2015/10/25 18:01:24 guenther Exp $ */
 
 /*
  * Copyright (c) 2002 Daniel Hartmeier
@@ -41,7 +41,12 @@ struct atexit {
        } fns[1];                       /* the table itself */
 };
 
+__BEGIN_HIDDEN_DECLS
 extern struct atexit *__atexit;                /* points to head of LIFO stack */
+__END_HIDDEN_DECLS
 
 int    __cxa_atexit(void (*)(void *), void *, void *);
 void   __cxa_finalize(void *);
+
+PROTO_NORMAL(__cxa_atexit);
+PROTO_NORMAL(__cxa_finalize);
index c14b3c7..057844d 100644 (file)
@@ -1,9 +1,10 @@
-#      $OpenBSD: Makefile,v 1.5 2003/07/31 22:46:59 david Exp $
+#      $OpenBSD: Makefile,v 1.6 2015/10/25 18:01:24 guenther Exp $
 
 NOMAN=
 PROG=atexit_test
-CPPFLAGS+=-I${.CURDIR}/../../../../lib/libc
+CPPFLAGS+=-I${.CURDIR}/../../../../lib/libc -D'PROTO_NORMAL(x)=__asm("")'
 CLEANFILES+= invalid.out valid.out
+LDADD=-static
 
 run-regress-atexit_test: ${PROG}
        ./${PROG} -valid 2>${.OBJDIR}/valid.out