eh_alloc.cc: Ensure that required macros are defined before including gthr.h.
* libsupc++/eh_alloc.cc: Ensure that required macros are defined before including gthr.h. Ensure that we get the version of gthr.h for which we know how to provide a configuration. * libsupc++/eh_globals.cc: Likewise. And, bring the threading code path into line with the current EH model. Use std, where appropriate. Co-Authored-By: John David Anglin <dave@hiauly1.hia.nrc.ca> From-SVN: r42999
This commit is contained in:
parent
5e21803304
commit
7628e178ef
3 changed files with 27 additions and 17 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
2001-06-07 Loren J. Rittle <ljrittle@acm.org>
|
||||||
|
John David Anglin <dave@hiauly1.hia.nrc.ca>
|
||||||
|
|
||||||
|
* libsupc++/eh_alloc.cc: Ensure that required macros are
|
||||||
|
defined before including gthr.h. Ensure that we get the
|
||||||
|
version of gthr.h for which we know how to provide a
|
||||||
|
configuration.
|
||||||
|
* libsupc++/eh_globals.cc: Likewise. And, bring the threading
|
||||||
|
code path into line with the current EH model. Use std, where
|
||||||
|
appropriate.
|
||||||
|
|
||||||
2001-06-07 Loren J. Rittle <ljrittle@acm.org>
|
2001-06-07 Loren J. Rittle <ljrittle@acm.org>
|
||||||
John David Anglin <dave@hiauly1.hia.nrc.ca>
|
John David Anglin <dave@hiauly1.hia.nrc.ca>
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,8 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include "unwind-cxx.h"
|
#include "unwind-cxx.h"
|
||||||
#include "gthr.h"
|
#include "bits/c++config.h"
|
||||||
|
#include "bits/gthr.h"
|
||||||
|
|
||||||
using namespace __cxxabiv1;
|
using namespace __cxxabiv1;
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,10 @@
|
||||||
|
|
||||||
|
|
||||||
#include <exception>
|
#include <exception>
|
||||||
|
#include <cstdlib>
|
||||||
#include "unwind-cxx.h"
|
#include "unwind-cxx.h"
|
||||||
#include "gthr.h"
|
#include "bits/c++config.h"
|
||||||
|
#include "bits/gthr.h"
|
||||||
|
|
||||||
using namespace __cxxabiv1;
|
using namespace __cxxabiv1;
|
||||||
|
|
||||||
|
@ -47,7 +49,7 @@ get_globals_dtor (void *ptr)
|
||||||
{
|
{
|
||||||
__gthread_key_dtor (globals_key, ptr);
|
__gthread_key_dtor (globals_key, ptr);
|
||||||
if (ptr)
|
if (ptr)
|
||||||
free (ptr);
|
std::free (ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -90,24 +92,20 @@ __cxa_get_globals ()
|
||||||
return &globals_static;
|
return &globals_static;
|
||||||
|
|
||||||
if (use_thread_key < 0)
|
if (use_thread_key < 0)
|
||||||
get_globals_init_once ();
|
{
|
||||||
|
get_globals_init_once ();
|
||||||
|
|
||||||
|
// Make sure use_thread_key got initialized.
|
||||||
|
if (use_thread_key == 0)
|
||||||
|
return &globals_static;
|
||||||
|
}
|
||||||
|
|
||||||
g = (__cxa_eh_globals *) __gthread_getspecific (globals_key);
|
g = (__cxa_eh_globals *) __gthread_getspecific (globals_key);
|
||||||
if (! g)
|
if (! g)
|
||||||
{
|
{
|
||||||
static __gthread_once_t once = __GTHREAD_ONCE_INIT;
|
if ((g = (__cxa_eh_globals *)
|
||||||
|
std::malloc (sizeof (__cxa_eh_globals))) == 0
|
||||||
// Make sure use_thread_key got initialized. Some systems have
|
|| __gthread_setspecific (globals_key, (void *) g) != 0)
|
||||||
// dummy thread routines in their libc that return a success.
|
|
||||||
if (__gthread_once (&once, eh_threads_initialize) != 0
|
|
||||||
|| use_thread_key < 0)
|
|
||||||
{
|
|
||||||
use_thread_key = 0;
|
|
||||||
return &globals_static;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((g = malloc (sizeof (__cxa_eh_globals))) == 0
|
|
||||||
|| __gthread_setspecific (eh_context_key, (void *) g) != 0)
|
|
||||||
std::terminate ();
|
std::terminate ();
|
||||||
g->caughtExceptions = 0;
|
g->caughtExceptions = 0;
|
||||||
g->uncaughtExceptions = 0;
|
g->uncaughtExceptions = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue