#include "config.h"
#include "unwind_i.h"
#include "dwarf_i.h"
HIDDEN define_lock (s390x_lock);
HIDDEN atomic_bool tdep_init_done = 0;
HIDDEN const uint8_t dwarf_to_unw_regnum_map[DWARF_NUM_PRESERVED_REGS] =
{
UNW_S390X_R0,
UNW_S390X_R1,
UNW_S390X_R2,
UNW_S390X_R3,
UNW_S390X_R4,
UNW_S390X_R5,
UNW_S390X_R6,
UNW_S390X_R7,
UNW_S390X_R8,
UNW_S390X_R9,
UNW_S390X_R10,
UNW_S390X_R11,
UNW_S390X_R12,
UNW_S390X_R13,
UNW_S390X_R14,
UNW_S390X_R15,
UNW_S390X_F0,
UNW_S390X_F2,
UNW_S390X_F4,
UNW_S390X_F6,
UNW_S390X_F1,
UNW_S390X_F3,
UNW_S390X_F5,
UNW_S390X_F7,
UNW_S390X_F8,
UNW_S390X_F10,
UNW_S390X_F12,
UNW_S390X_F14,
UNW_S390X_F9,
UNW_S390X_F11,
UNW_S390X_F13,
UNW_S390X_F15,
};
HIDDEN void
tdep_init (void)
{
intrmask_t saved_mask;
sigfillset (&unwi_full_mask);
lock_acquire (&s390x_lock, saved_mask);
{
if (atomic_load(&tdep_init_done))
goto out;
mi_init ();
dwarf_init ();
#ifndef UNW_REMOTE_ONLY
s390x_local_addr_space_init ();
#endif
atomic_store(&tdep_init_done, 1);
}
out:
lock_release (&s390x_lock, saved_mask);
}