HIDDEN void tdep_init (void) { intrmask_t saved_mask; sigfillset (&unwi_full_mask); lock_acquire (&arm_lock, saved_mask); { if (tdep_init_done) /* another thread else beat us to it... */ goto out; /* read ARM unwind method setting */ const char* str = getenv ("UNW_ARM_UNWIND_METHOD"); if (str) { unwi_unwind_method = atoi (str); } mi_init (); dwarf_init (); #ifndef UNW_REMOTE_ONLY arm_local_addr_space_init (); #endif tdep_init_done = 1; /* signal that we're initialized... */ } out: lock_release (&arm_lock, saved_mask); }
HIDDEN void tdep_init (void) { intrmask_t saved_mask; sigfillset (&unwi_full_mask); sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); mutex_lock (&arm_lock); { if (!tdep_needs_initialization) /* another thread else beat us to it... */ goto out; mi_init (); dwarf_init (); #ifndef UNW_REMOTE_ONLY arm_local_addr_space_init (); #endif tdep_needs_initialization = 0; /* signal that we're initialized... */ } out: mutex_unlock (&arm_lock); sigprocmask (SIG_SETMASK, &saved_mask, NULL); }