Home | History | Annotate | Download | only in gcc
      1 From 74570d65266a04f1cb95ff778759fa540afe92a4 Mon Sep 17 00:00:00 2001
      2 From: David 'Digit' Turner <digit (a] android.com>
      3 Date: Sun, 20 Feb 2011 20:54:32 +0100
      4 Subject: Work-around for Android __cxa_finalize bug
      5 
      6 Change-Id: I82364f6ed1ca04ecf3844179bc9887f61226fd75
      7 ---
      8  gcc-4.4.3/libstdc++-v3/libsupc++/eh_globals.cc |    8 ++++++++
      9  gcc-4.6/libstdc++-v3/libsupc++/eh_globals.cc   |    8 ++++++++
     10  2 files changed, 16 insertions(+), 0 deletions(-)
     11 
     12 diff --git a/gcc-4.4.3/libstdc++-v3/libsupc++/eh_globals.cc b/gcc-4.4.3/libstdc++-v3/libsupc++/eh_globals.cc
     13 index 63f46a9..845b6d1 100644
     14 --- a/gcc-4.4.3/libstdc++-v3/libsupc++/eh_globals.cc
     15 +++ b/gcc-4.4.3/libstdc++-v3/libsupc++/eh_globals.cc
     16 @@ -101,6 +101,14 @@ struct __eh_globals_init
     17  
     18    ~__eh_globals_init()
     19    {
     20 +    /* Work-around for an Android-specific bug, where this destructor
     21 +     * is called with a NULL object pointer. This is due to a bug in the
     22 +     * __cxa_finalize() implementation that was only fixed in 2.2.
     23 +     */
     24 +#ifdef __ANDROID__
     25 +    if (this == NULL)
     26 +        return;
     27 +#endif
     28      if (_M_init)
     29        __gthread_key_delete(_M_key);
     30      _M_init = false;
     31 diff --git a/gcc-4.6/libstdc++-v3/libsupc++/eh_globals.cc b/gcc-4.6/libstdc++-v3/libsupc++/eh_globals.cc
     32 index 63f46a9..845b6d1 100644
     33 --- a/gcc-4.6/libstdc++-v3/libsupc++/eh_globals.cc
     34 +++ b/gcc-4.6/libstdc++-v3/libsupc++/eh_globals.cc
     35 @@ -101,6 +101,14 @@ struct __eh_globals_init
     36  
     37    ~__eh_globals_init()
     38    {
     39 +    /* Work-around for an Android-specific bug, where this destructor
     40 +     * is called with a NULL object pointer. This is due to a bug in the
     41 +     * __cxa_finalize() implementation that was only fixed in 2.2.
     42 +     */
     43 +#ifdef __ANDROID__
     44 +    if (this == NULL)
     45 +        return;
     46 +#endif
     47      if (_M_init)
     48        __gthread_key_delete(_M_key);
     49      _M_init = false;
     50 -- 
     51 1.7.6.rc0
     52 
     53