summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdlib/atexit.c
diff options
context:
space:
mode:
authorguenther <guenther@openbsd.org>2017-12-16 20:06:55 +0000
committerguenther <guenther@openbsd.org>2017-12-16 20:06:55 +0000
commit720afc0eea9594cc39e94e9ff3059afbb0ab9593 (patch)
treee0bd94023227a3c013eb92ad0ef505430f4a8e3c /lib/libc/stdlib/atexit.c
parentsync (diff)
downloadwireguard-openbsd-720afc0eea9594cc39e94e9ff3059afbb0ab9593.tar.xz
wireguard-openbsd-720afc0eea9594cc39e94e9ff3059afbb0ab9593.zip
Move __cxa_thread_atexit* to its own .c file to avoid pulling the code
(w/ _dlctl reference) into static executables. It's all Mark's code so put his preferred copyright on it. ok kettenis@
Diffstat (limited to 'lib/libc/stdlib/atexit.c')
-rw-r--r--lib/libc/stdlib/atexit.c39
1 files changed, 3 insertions, 36 deletions
diff --git a/lib/libc/stdlib/atexit.c b/lib/libc/stdlib/atexit.c
index fe4d5bc79f2..ea9dd129c1f 100644
--- a/lib/libc/stdlib/atexit.c
+++ b/lib/libc/stdlib/atexit.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: atexit.c,v 1.26 2017/12/05 21:11:10 kettenis Exp $ */
+/* $OpenBSD: atexit.c,v 1.27 2017/12/16 20:06:56 guenther Exp $ */
/*
* Copyright (c) 2002 Daniel Hartmeier
* All rights reserved.
@@ -31,24 +31,14 @@
#include <sys/types.h>
#include <sys/mman.h>
-#include <dlfcn.h>
-#include <elf.h>
-#pragma weak _DYNAMIC
#include <stdlib.h>
#include <string.h>
+#include <tib.h>
#include <unistd.h>
+
#include "atexit.h"
#include "atfork.h"
#include "thread_private.h"
-#include "tib.h"
-
-typeof(dlctl) dlctl asm("_dlctl") __attribute__((weak));
-
-struct thread_atexit_fn {
- void (*func)(void *);
- void *arg;
- struct thread_atexit_fn *next;
-};
struct atexit *__atexit;
static int restartloop;
@@ -133,29 +123,6 @@ atexit(void (*fn)(void))
}
DEF_STRONG(atexit);
-__weak_alias(__cxa_thread_atexit, __cxa_thread_atexit_impl);
-
-int
-__cxa_thread_atexit_impl(void (*func)(void *), void *arg, void *dso)
-{
- struct thread_atexit_fn *fnp;
- struct tib *tib = TIB_GET();
-
- fnp = calloc(1, sizeof(struct thread_atexit_fn));
- if (fnp == NULL)
- return -1;
-
- if (_DYNAMIC)
- dlctl(NULL, DL_REFERENCE, dso);
-
- fnp->func = func;
- fnp->arg = arg;
- fnp->next = tib->tib_atexit;
- tib->tib_atexit = fnp;
-
- return 0;
-}
-
void
_thread_finalize(void)
{