diff --git a/libr/anal/anal.c b/libr/anal/anal.c index 3d335f72c054b..44a4ce24cea77 100644 --- a/libr/anal/anal.c +++ b/libr/anal/anal.c @@ -149,6 +149,8 @@ R_API void r_anal_list(RAnal *anal) { R_API bool r_anal_use(RAnal *anal, const char *name) { RListIter *it; RAnalPlugin *h; + + bool change = anal && anal->cur && strcmp (anal->cur->name, name); r_list_foreach (anal->plugins, it, h) { if (!strcmp (h->name, name)) { #if 0 @@ -159,7 +161,9 @@ R_API bool r_anal_use(RAnal *anal, const char *name) { #endif anal->cur = h; r_anal_set_reg_profile (anal); - r_anal_set_fcnsign (anal, NULL); + if (change) { + r_anal_set_fcnsign (anal, NULL); + } if (anal->esil) { r_anal_esil_free (anal->esil); anal->esil = NULL; diff --git a/libr/core/cconfig.c b/libr/core/cconfig.c index f8f23b1540ce1..e287eaa278ef9 100755 --- a/libr/core/cconfig.c +++ b/libr/core/cconfig.c @@ -355,7 +355,13 @@ static int cb_asmarch(void *user, void *data) { r_asm_set_cpu (core->assembler, asm_cpu); free (asm_cpu); /* reload types and cc info */ - r_core_anal_type_init (core); + // changing asm.arch changes anal.arch + // changing anal.arch sets types db + // so ressetting is redundant and may lead to bugs + // 1 case this is usefull is when sdb_types is null + if (!core->anal->sdb_types) { + r_core_anal_type_init (core); + } r_core_anal_cc_init (core); return true; }