mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-12-22 19:43:42 +01:00
Invert tdep_init() flag logic
Invert the flag that signals that tdep_init() was called, to move the symbol from data to BSS.
This commit is contained in:
parent
c2d6f85a0a
commit
5d0f376b08
33 changed files with 58 additions and 61 deletions
|
@ -227,7 +227,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
#endif /* !UNW_LOCAL_ONLY */
|
||||
|
||||
#define tdep_getcontext_trace unw_getcontext
|
||||
#define tdep_needs_initialization UNW_OBJ(needs_initialization)
|
||||
#define tdep_init_done UNW_OBJ(init_done)
|
||||
#define tdep_init UNW_OBJ(init)
|
||||
#define arm_find_proc_info UNW_OBJ(find_proc_info)
|
||||
#define arm_put_unwind_info UNW_OBJ(put_unwind_info)
|
||||
|
@ -264,7 +264,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
#define tdep_get_ip(c) ((c)->dwarf.ip)
|
||||
#define tdep_big_endian(as) ((as)->big_endian)
|
||||
|
||||
extern int tdep_needs_initialization;
|
||||
extern int tdep_init_done;
|
||||
|
||||
extern void tdep_init (void);
|
||||
extern int arm_find_proc_info (unw_addr_space_t as, unw_word_t ip,
|
||||
|
|
|
@ -224,7 +224,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
#endif /* !UNW_LOCAL_ONLY */
|
||||
|
||||
#define tdep_getcontext_trace unw_getcontext
|
||||
#define tdep_needs_initialization UNW_OBJ(needs_initialization)
|
||||
#define tdep_init_done UNW_OBJ(init_done)
|
||||
#define tdep_init UNW_OBJ(init)
|
||||
/* Platforms that support UNW_INFO_FORMAT_TABLE need to define
|
||||
tdep_search_unwind_table. */
|
||||
|
@ -259,7 +259,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
#define tdep_get_ip(c) ((c)->dwarf.ip)
|
||||
#define tdep_big_endian(as) 1
|
||||
|
||||
extern int tdep_needs_initialization;
|
||||
extern int tdep_init_done;
|
||||
|
||||
extern void tdep_init (void);
|
||||
extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip,
|
||||
|
|
|
@ -186,7 +186,7 @@ struct ia64_global_unwind_state
|
|||
{
|
||||
pthread_mutex_t lock; /* global data lock */
|
||||
|
||||
volatile char needs_initialization;
|
||||
volatile char init_done;
|
||||
|
||||
/* Table of registers that prologues can save (and order in which
|
||||
they're saved). */
|
||||
|
@ -217,7 +217,7 @@ struct ia64_global_unwind_state
|
|||
};
|
||||
|
||||
#define tdep_getcontext_trace unw_getcontext
|
||||
#define tdep_needs_initialization unw.needs_initialization
|
||||
#define tdep_init_done unw.init_done
|
||||
#define tdep_init UNW_OBJ(init)
|
||||
/* Platforms that support UNW_INFO_FORMAT_TABLE need to define
|
||||
tdep_search_unwind_table. */
|
||||
|
|
|
@ -277,7 +277,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
#endif /* !UNW_LOCAL_ONLY */
|
||||
|
||||
#define tdep_getcontext_trace unw_getcontext
|
||||
#define tdep_needs_initialization UNW_OBJ(needs_initialization)
|
||||
#define tdep_init_done UNW_OBJ(init_done)
|
||||
#define tdep_init UNW_OBJ(init)
|
||||
/* Platforms that support UNW_INFO_FORMAT_TABLE need to define
|
||||
tdep_search_unwind_table. */
|
||||
|
@ -311,7 +311,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
#define tdep_get_as_arg(c) ((c)->dwarf.as_arg)
|
||||
#define tdep_get_ip(c) ((c)->dwarf.ip)
|
||||
|
||||
extern int tdep_needs_initialization;
|
||||
extern int tdep_init_done;
|
||||
|
||||
extern void tdep_init (void);
|
||||
extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip,
|
||||
|
|
|
@ -252,7 +252,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
}
|
||||
|
||||
#define tdep_getcontext_trace unw_getcontext
|
||||
#define tdep_needs_initialization UNW_OBJ(needs_initialization)
|
||||
#define tdep_init_done UNW_OBJ(init_done)
|
||||
#define tdep_init UNW_OBJ(init)
|
||||
/* Platforms that support UNW_INFO_FORMAT_TABLE need to define
|
||||
tdep_search_unwind_table. */
|
||||
|
@ -291,7 +291,7 @@ extern int tdep_fetch_proc_info_post (struct dwarf_cursor *c, unw_word_t ip,
|
|||
#define tdep_get_ip(c) ((c)->dwarf.ip)
|
||||
#define tdep_big_endian(as) 1
|
||||
|
||||
extern int tdep_needs_initialization;
|
||||
extern int tdep_init_done;
|
||||
|
||||
extern void tdep_init (void);
|
||||
extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip,
|
||||
|
|
|
@ -252,7 +252,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
}
|
||||
|
||||
#define tdep_getcontext_trace unw_getcontext
|
||||
#define tdep_needs_initialization UNW_OBJ(needs_initialization)
|
||||
#define tdep_init_done UNW_OBJ(init_done)
|
||||
#define tdep_init UNW_OBJ(init)
|
||||
/* Platforms that support UNW_INFO_FORMAT_TABLE need to define
|
||||
tdep_search_unwind_table. */
|
||||
|
@ -291,7 +291,7 @@ extern int tdep_fetch_proc_info_post (struct dwarf_cursor *c, unw_word_t ip,
|
|||
#define tdep_get_ip(c) ((c)->dwarf.ip)
|
||||
#define tdep_big_endian(as) 1
|
||||
|
||||
extern int tdep_needs_initialization;
|
||||
extern int tdep_init_done;
|
||||
|
||||
extern void tdep_init (void);
|
||||
extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip,
|
||||
|
|
|
@ -238,7 +238,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
#endif /* !UNW_LOCAL_ONLY */
|
||||
|
||||
#define tdep_getcontext_trace unw_getcontext
|
||||
#define tdep_needs_initialization UNW_OBJ(needs_initialization)
|
||||
#define tdep_init_done UNW_OBJ(init_done)
|
||||
#define tdep_init UNW_OBJ(init)
|
||||
/* Platforms that support UNW_INFO_FORMAT_TABLE need to define
|
||||
tdep_search_unwind_table. */
|
||||
|
@ -273,7 +273,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
#define tdep_get_ip(c) ((c)->dwarf.ip)
|
||||
#define tdep_big_endian(as) 0
|
||||
|
||||
extern int tdep_needs_initialization;
|
||||
extern int tdep_init_done;
|
||||
|
||||
extern void tdep_init (void);
|
||||
extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip,
|
||||
|
|
|
@ -178,7 +178,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
}
|
||||
|
||||
#define tdep_getcontext_trace UNW_ARCH_OBJ(getcontext_trace)
|
||||
#define tdep_needs_initialization UNW_OBJ(needs_initialization)
|
||||
#define tdep_init_done UNW_OBJ(init_done)
|
||||
#define tdep_init_mem_validate UNW_OBJ(init_mem_validate)
|
||||
#define tdep_init UNW_OBJ(init)
|
||||
/* Platforms that support UNW_INFO_FORMAT_TABLE need to define
|
||||
|
@ -220,7 +220,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
|||
#define tdep_get_ip(c) ((c)->dwarf.ip)
|
||||
#define tdep_big_endian(as) 0
|
||||
|
||||
extern int tdep_needs_initialization;
|
||||
extern int tdep_init_done;
|
||||
|
||||
extern void tdep_init (void);
|
||||
extern void tdep_init_mem_validate (void);
|
||||
|
|
|
@ -26,7 +26,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|||
#include "dwarf_i.h"
|
||||
|
||||
HIDDEN pthread_mutex_t arm_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
HIDDEN int tdep_needs_initialization = 1;
|
||||
HIDDEN int tdep_init_done;
|
||||
|
||||
/* Unwinding methods to use. See UNW_METHOD_ enums */
|
||||
HIDDEN int unwi_unwind_method = UNW_ARM_METHOD_ALL;
|
||||
|
@ -40,7 +40,7 @@ tdep_init (void)
|
|||
|
||||
lock_acquire (&arm_lock, saved_mask);
|
||||
{
|
||||
if (!tdep_needs_initialization)
|
||||
if (tdep_init_done)
|
||||
/* another thread else beat us to it... */
|
||||
goto out;
|
||||
|
||||
|
@ -58,7 +58,7 @@ tdep_init (void)
|
|||
#ifndef UNW_REMOTE_ONLY
|
||||
arm_local_addr_space_init ();
|
||||
#endif
|
||||
tdep_needs_initialization = 0; /* signal that we're initialized... */
|
||||
tdep_init_done = 1; /* signal that we're initialized... */
|
||||
}
|
||||
out:
|
||||
lock_release (&arm_lock, saved_mask);
|
||||
|
|
|
@ -41,7 +41,7 @@ unw_init_local (unw_cursor_t *cursor, unw_context_t *uc)
|
|||
{
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -33,7 +33,7 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg)
|
|||
#else /* !UNW_LOCAL_ONLY */
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -26,7 +26,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|||
#include "unwind_i.h"
|
||||
|
||||
HIDDEN pthread_mutex_t hppa_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
HIDDEN int tdep_needs_initialization = 1;
|
||||
HIDDEN int tdep_init_done;
|
||||
|
||||
HIDDEN void
|
||||
tdep_init (void)
|
||||
|
@ -37,7 +37,7 @@ tdep_init (void)
|
|||
|
||||
lock_acquire (&hppa_lock, saved_mask);
|
||||
{
|
||||
if (!tdep_needs_initialization)
|
||||
if (tdep_init_done)
|
||||
/* another thread else beat us to it... */
|
||||
goto out;
|
||||
|
||||
|
@ -48,7 +48,7 @@ tdep_init (void)
|
|||
#ifndef UNW_REMOTE_ONLY
|
||||
hppa_local_addr_space_init ();
|
||||
#endif
|
||||
tdep_needs_initialization = 0; /* signal that we're initialized... */
|
||||
tdep_init_done = 1; /* signal that we're initialized... */
|
||||
}
|
||||
out:
|
||||
lock_release (&hppa_lock, saved_mask);
|
||||
|
|
|
@ -41,7 +41,7 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc)
|
|||
{
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -34,7 +34,7 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg)
|
|||
#else /* !UNW_LOCAL_ONLY */
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -28,10 +28,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|||
PROTECTED unw_accessors_t *
|
||||
unw_get_accessors (unw_addr_space_t as)
|
||||
{
|
||||
if (hppa_needs_initialization)
|
||||
{
|
||||
hppa_needs_initialization = 0;
|
||||
hppa_init ();
|
||||
}
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
return &as->acc;
|
||||
}
|
||||
|
|
|
@ -29,7 +29,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|||
|
||||
HIDDEN struct ia64_global_unwind_state unw =
|
||||
{
|
||||
.needs_initialization = 1,
|
||||
.lock = PTHREAD_MUTEX_INITIALIZER,
|
||||
.save_order = {
|
||||
IA64_REG_IP, IA64_REG_PFS, IA64_REG_PSP, IA64_REG_PR,
|
||||
|
@ -73,7 +72,7 @@ tdep_init (void)
|
|||
|
||||
lock_acquire (&unw.lock, saved_mask);
|
||||
{
|
||||
if (!tdep_needs_initialization)
|
||||
if (tdep_init_done)
|
||||
/* another thread else beat us to it... */
|
||||
goto out;
|
||||
|
||||
|
@ -116,7 +115,7 @@ tdep_init (void)
|
|||
#ifndef UNW_REMOTE_ONLY
|
||||
ia64_local_addr_space_init ();
|
||||
#endif
|
||||
tdep_needs_initialization = 0; /* signal that we're initialized... */
|
||||
tdep_init_done = 1; /* signal that we're initialized... */
|
||||
}
|
||||
out:
|
||||
lock_release (&unw.lock, saved_mask);
|
||||
|
|
|
@ -83,7 +83,7 @@ unw_init_local (unw_cursor_t *cursor, unw_context_t *uc)
|
|||
unw_word_t sp, bsp;
|
||||
int ret;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -36,7 +36,7 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg)
|
|||
unw_word_t sp, bsp;
|
||||
int ret;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -28,7 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|||
PROTECTED unw_accessors_t *
|
||||
unw_get_accessors (unw_addr_space_t as)
|
||||
{
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
return &as->acc;
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|||
PROTECTED int
|
||||
unw_set_caching_policy (unw_addr_space_t as, unw_caching_policy_t policy)
|
||||
{
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
#ifndef HAVE___THREAD
|
||||
|
|
|
@ -26,7 +26,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|||
#include "dwarf_i.h"
|
||||
|
||||
HIDDEN pthread_mutex_t mips_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
HIDDEN int tdep_needs_initialization = 1;
|
||||
HIDDEN int tdep_init_done;
|
||||
|
||||
HIDDEN void
|
||||
tdep_init (void)
|
||||
|
@ -37,7 +37,7 @@ tdep_init (void)
|
|||
|
||||
lock_acquire (&mips_lock, saved_mask);
|
||||
{
|
||||
if (!tdep_needs_initialization)
|
||||
if (tdep_init_done)
|
||||
/* another thread else beat us to it... */
|
||||
goto out;
|
||||
|
||||
|
@ -48,7 +48,7 @@ tdep_init (void)
|
|||
#ifndef UNW_REMOTE_ONLY
|
||||
mips_local_addr_space_init ();
|
||||
#endif
|
||||
tdep_needs_initialization = 0; /* signal that we're initialized... */
|
||||
tdep_init_done = 1; /* signal that we're initialized... */
|
||||
}
|
||||
out:
|
||||
lock_release (&mips_lock, saved_mask);
|
||||
|
|
|
@ -40,7 +40,7 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc)
|
|||
{
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -33,7 +33,7 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg)
|
|||
#else /* !UNW_LOCAL_ONLY */
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -48,7 +48,7 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc)
|
|||
{
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -41,7 +41,7 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg)
|
|||
#else /* !UNW_LOCAL_ONLY */
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -29,7 +29,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|||
#include "dwarf_i.h"
|
||||
|
||||
HIDDEN pthread_mutex_t ppc32_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
HIDDEN int tdep_needs_initialization = 1;
|
||||
HIDDEN int tdep_init_done;
|
||||
|
||||
/* The API register numbers are exactly the same as the .eh_frame
|
||||
registers, for now at least. */
|
||||
|
@ -117,7 +117,7 @@ tdep_init (void)
|
|||
|
||||
lock_acquire (&ppc32_lock, saved_mask);
|
||||
{
|
||||
if (!tdep_needs_initialization)
|
||||
if (tdep_init_done)
|
||||
/* another thread else beat us to it... */
|
||||
goto out;
|
||||
|
||||
|
@ -128,7 +128,7 @@ tdep_init (void)
|
|||
#ifndef UNW_REMOTE_ONLY
|
||||
ppc32_local_addr_space_init ();
|
||||
#endif
|
||||
tdep_needs_initialization = 0; /* signal that we're initialized... */
|
||||
tdep_init_done = 1; /* signal that we're initialized... */
|
||||
}
|
||||
out:
|
||||
lock_release (&ppc32_lock, saved_mask);
|
||||
|
|
|
@ -29,7 +29,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|||
#include "dwarf_i.h"
|
||||
|
||||
HIDDEN pthread_mutex_t ppc64_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
HIDDEN int tdep_needs_initialization = 1;
|
||||
HIDDEN int tdep_init_done;
|
||||
|
||||
/* The API register numbers are exactly the same as the .eh_frame
|
||||
registers, for now at least. */
|
||||
|
@ -164,7 +164,7 @@ tdep_init (void)
|
|||
|
||||
lock_acquire (&ppc64_lock, saved_mask);
|
||||
{
|
||||
if (!tdep_needs_initialization)
|
||||
if (tdep_init_done)
|
||||
/* another thread else beat us to it... */
|
||||
goto out;
|
||||
|
||||
|
@ -175,7 +175,7 @@ tdep_init (void)
|
|||
#ifndef UNW_REMOTE_ONLY
|
||||
ppc64_local_addr_space_init ();
|
||||
#endif
|
||||
tdep_needs_initialization = 0; /* signal that we're initialized... */
|
||||
tdep_init_done = 1; /* signal that we're initialized... */
|
||||
}
|
||||
out:
|
||||
lock_release (&ppc64_lock, saved_mask);
|
||||
|
|
|
@ -27,7 +27,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|||
#include "dwarf_i.h"
|
||||
|
||||
HIDDEN pthread_mutex_t x86_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
HIDDEN int tdep_needs_initialization = 1;
|
||||
HIDDEN int tdep_init_done;
|
||||
|
||||
/* See comments for svr4_dbx_register_map[] in gcc/config/i386/i386.c. */
|
||||
|
||||
|
@ -49,7 +49,7 @@ tdep_init (void)
|
|||
|
||||
lock_acquire (&x86_lock, saved_mask);
|
||||
{
|
||||
if (!tdep_needs_initialization)
|
||||
if (tdep_init_done)
|
||||
/* another thread else beat us to it... */
|
||||
goto out;
|
||||
|
||||
|
@ -60,7 +60,7 @@ tdep_init (void)
|
|||
#ifndef UNW_REMOTE_ONLY
|
||||
x86_local_addr_space_init ();
|
||||
#endif
|
||||
tdep_needs_initialization = 0; /* signal that we're initialized... */
|
||||
tdep_init_done = 1; /* signal that we're initialized... */
|
||||
}
|
||||
out:
|
||||
lock_release (&x86_lock, saved_mask);
|
||||
|
|
|
@ -41,7 +41,7 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc)
|
|||
{
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -34,7 +34,7 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg)
|
|||
#else /* !UNW_LOCAL_ONLY */
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -30,7 +30,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|||
#include "dwarf_i.h"
|
||||
|
||||
HIDDEN pthread_mutex_t x86_64_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
HIDDEN int tdep_needs_initialization = 1;
|
||||
HIDDEN int tdep_init_done;
|
||||
|
||||
/* See comments for svr4_dbx_register_map[] in gcc/config/i386/i386.c. */
|
||||
|
||||
|
@ -82,7 +82,7 @@ tdep_init (void)
|
|||
|
||||
lock_acquire (&x86_64_lock, saved_mask);
|
||||
{
|
||||
if (!tdep_needs_initialization)
|
||||
if (tdep_init_done)
|
||||
/* another thread else beat us to it... */
|
||||
goto out;
|
||||
|
||||
|
@ -95,7 +95,7 @@ tdep_init (void)
|
|||
#ifndef UNW_REMOTE_ONLY
|
||||
x86_64_local_addr_space_init ();
|
||||
#endif
|
||||
tdep_needs_initialization = 0; /* signal that we're initialized... */
|
||||
tdep_init_done = 1; /* signal that we're initialized... */
|
||||
}
|
||||
out:
|
||||
lock_release (&x86_64_lock, saved_mask);
|
||||
|
|
|
@ -43,7 +43,7 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc)
|
|||
{
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (unlikely (tdep_needs_initialization))
|
||||
if (unlikely (!tdep_init_done))
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
|
@ -36,7 +36,7 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg)
|
|||
#else /* !UNW_LOCAL_ONLY */
|
||||
struct cursor *c = (struct cursor *) cursor;
|
||||
|
||||
if (tdep_needs_initialization)
|
||||
if (!tdep_init_done)
|
||||
tdep_init ();
|
||||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
|
Loading…
Reference in a new issue