diff options
author | David 'Digit' Turner <digit@google.com> | 2009-05-20 11:42:52 +0200 |
---|---|---|
committer | David 'Digit' Turner <digit@google.com> | 2009-05-20 11:42:52 +0200 |
commit | 0ba91ed3ca9e7340a2c55303034c3378967e2327 (patch) | |
tree | a0d9e37c871decea29efca95bd0b6c292b4bfa93 /libc/stdlib | |
parent | 8169573c8744ee3a484ea74bd5e06a8a4f708e37 (diff) | |
download | bionic-0ba91ed3ca9e7340a2c55303034c3378967e2327.zip bionic-0ba91ed3ca9e7340a2c55303034c3378967e2327.tar.gz bionic-0ba91ed3ca9e7340a2c55303034c3378967e2327.tar.bz2 |
Fix __eabi_atexit() implementation, as well as a bug in the BSD-originated __cxa_finalize() implementation
This patch uses "#if ANDROID" instead of "#if 1" in the __cxa_finalize() fix
Diffstat (limited to 'libc/stdlib')
-rw-r--r-- | libc/stdlib/atexit.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/libc/stdlib/atexit.c b/libc/stdlib/atexit.c index 5bf82ba..4ba2177 100644 --- a/libc/stdlib/atexit.c +++ b/libc/stdlib/atexit.c @@ -147,10 +147,19 @@ __cxa_finalize(void *dso) p->fns[n].fn_ptr.cxa_func = NULL; mprotect(p, pgsize, PROT_READ); } +#if ANDROID + /* it looks like we should always call the function + * with an argument, even if dso is not NULL. Otherwise + * static destructors will not be called properly on + * the ARM. + */ + (*fn.fn_ptr.cxa_func)(fn.fn_arg); +#else /* !ANDROID */ if (dso != NULL) (*fn.fn_ptr.cxa_func)(fn.fn_arg); else (*fn.fn_ptr.std_func)(); +#endif /* !ANDROID */ } } |