static void free_one_thread (struct inferior_list_entry *inf) { struct thread_info *thread = get_thread (inf); free_register_cache (inferior_regcache_data (thread)); free (thread); }
static void realloc_register_cache (struct inferior_list_entry *thread_p) { struct thread_info *thread = (struct thread_info *) thread_p; struct regcache *regcache = (struct regcache *) inferior_regcache_data (thread); free_register_cache (regcache); set_inferior_regcache_data (thread, new_register_cache ()); }
static void free_register_cache_thread (struct thread_info *thread) { struct regcache *regcache = inferior_regcache_data (thread); if (regcache != NULL) { regcache_invalidate_thread (thread); free_register_cache (regcache); set_inferior_regcache_data (thread, NULL); } }
static void regcache_realloc_one (struct inferior_list_entry *entry) { struct thread_info *thread = (struct thread_info *) entry; struct inferior_regcache_data *regcache; regcache = (struct inferior_regcache_data *) inferior_regcache_data (thread); if (regcache) { free_register_cache (regcache); set_inferior_regcache_data (thread, new_register_cache ()); } }
static void s390_arch_setup (void) { const struct target_desc *tdesc; struct regset_info *regset; /* Check whether the kernel supports extra register sets. */ int pid = pid_of (get_thread_lwp (current_inferior)); int have_regset_last_break = s390_check_regset (pid, NT_S390_LAST_BREAK, 8); int have_regset_system_call = s390_check_regset (pid, NT_S390_SYSTEM_CALL, 4); int have_regset_tdb = s390_check_regset (pid, NT_S390_TDB, 256); /* Update target_regsets according to available register sets. */ for (regset = s390_regsets; regset->fill_function != NULL; regset++) if (regset->get_request == PTRACE_GETREGSET) switch (regset->nt_type) { case NT_S390_LAST_BREAK: regset->size = have_regset_last_break? 8 : 0; break; case NT_S390_SYSTEM_CALL: regset->size = have_regset_system_call? 4 : 0; break; case NT_S390_TDB: regset->size = have_regset_tdb ? 256 : 0; default: break; } /* Assume 31-bit inferior process. */ if (have_regset_system_call) tdesc = tdesc_s390_linux32v2; else if (have_regset_last_break) tdesc = tdesc_s390_linux32v1; else tdesc = tdesc_s390_linux32; /* On a 64-bit host, check the low bit of the (31-bit) PSWM -- if this is one, we actually have a 64-bit inferior. */ #ifdef __s390x__ { unsigned int pswm; struct regcache *regcache = new_register_cache (tdesc); fetch_inferior_registers (regcache, find_regno (tdesc, "pswm")); collect_register_by_name (regcache, "pswm", &pswm); free_register_cache (regcache); if (pswm & 1) { if (have_regset_tdb) tdesc = tdesc_s390x_te_linux64; if (have_regset_system_call) tdesc = tdesc_s390x_linux64v2; else if (have_regset_last_break) tdesc = tdesc_s390x_linux64v1; else tdesc = tdesc_s390x_linux64; } /* For a 31-bit inferior, check whether the kernel supports using the full 64-bit GPRs. */ else if (s390_get_hwcap (tdesc) & HWCAP_S390_HIGH_GPRS) { have_hwcap_s390_high_gprs = 1; if (have_regset_tdb) tdesc = tdesc_s390_te_linux64; else if (have_regset_system_call) tdesc = tdesc_s390_linux64v2; else if (have_regset_last_break) tdesc = tdesc_s390_linux64v1; else tdesc = tdesc_s390_linux64; } } #endif current_process ()->tdesc = tdesc; }
static void free_one_thread (thread_info *thread) { free_register_cache (thread_regcache_data (thread)); free (thread); }