aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/GCCLibraries/crtend/crtend.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/runtime/GCCLibraries/crtend/crtend.c b/runtime/GCCLibraries/crtend/crtend.c
index 69eac4ff98..50bbdb7081 100644
--- a/runtime/GCCLibraries/crtend/crtend.c
+++ b/runtime/GCCLibraries/crtend/crtend.c
@@ -34,8 +34,12 @@ void __main(void) {
/* Loop over all of the constructor records, calling each function pointer. */
TorRec *R = __llvm_getGlobalCtors();
- if (atexit(run_destructors))
- abort(); /* Should be able to install ONE atexit handler! */
+ /* Only register the global dtor handler if there is at least one global
+ * dtor!
+ */
+ if (__llvm_getGlobalDtors()[0].FP)
+ if (atexit(run_destructors))
+ abort(); /* Should be able to install ONE atexit handler! */
/* FIXME: This should sort the list by priority! */
for (; R->FP; ++R)