Remove RzFlag.base

The only place where this field was set to a non-zero value was the now
removed fb command, and it was never used for anything sensible. Thus it
is safe to remove.
This commit is contained in:
Florian Märkl 2024-04-01 20:03:43 +02:00
parent f223247b46
commit eeda6b1b59
10 changed files with 130 additions and 31 deletions

View file

@ -1527,7 +1527,7 @@ RZ_API bool rz_core_bin_apply_symbols(RzCore *core, RzBinFile *binfile, bool va)
}
if (fi) {
rz_flag_item_set_realname(fi, sn.methname);
if ((fi->offset - core->flags->base) == addr) {
if (fi->offset == addr) {
rz_flag_unset(core->flags, fi);
}
} else {

View file

@ -610,7 +610,7 @@ RZ_API bool rz_project_migrate_v14_v15(RzProject *prj, RzSerializeResultInfo *re
// --
// Migration 15 -> 16
//
// Changes from <commit hash not yet known>:
// Changes from f9422ac0cd6922f73208e5f5e6f47b3d64b3bd0d:
// Removed options:
// - `bin.maxstr`
// Renamed options:
@ -631,6 +631,21 @@ RZ_API bool rz_project_migrate_v15_v16(RzProject *prj, RzSerializeResultInfo *re
return true;
}
// --
// Migration 16 -> 17
//
// Changes from <commit hash not yet known>:
// Removed /core/flags/base key (RzFlag.base)
RZ_API bool rz_project_migrate_v16_v17(RzProject *prj, RzSerializeResultInfo *res) {
Sdb *core_db;
RZ_SERIALIZE_SUB(prj, core_db, res, "core", return false;);
Sdb *flags_db;
RZ_SERIALIZE_SUB(core_db, flags_db, res, "flags", return false;);
sdb_unset(flags_db, "base", 0);
return true;
}
static bool (*const migrations[])(RzProject *prj, RzSerializeResultInfo *res) = {
rz_project_migrate_v1_v2,
rz_project_migrate_v2_v3,
@ -647,6 +662,7 @@ static bool (*const migrations[])(RzProject *prj, RzSerializeResultInfo *res) =
rz_project_migrate_v13_v14,
rz_project_migrate_v14_v15,
rz_project_migrate_v15_v16,
rz_project_migrate_v16_v17
};
/// Migrate the given project to the current version in-place

View file

@ -227,7 +227,6 @@ RZ_API RzFlag *rz_flag_new(void) {
rz_flag_free(f);
return NULL;
}
f->base = 0;
f->zones = NULL;
f->tags = sdb_new0();
f->ht_name = ht_pp_new(NULL, ht_free_flag, NULL);
@ -660,7 +659,7 @@ RZ_API RzFlagItem *rz_flag_set(RzFlag *f, const char *name, ut64 off, ut32 size)
item->space = rz_flag_space_cur(f);
item->size = size;
update_flag_item_offset(f, item, off + f->base, is_new, true);
update_flag_item_offset(f, item, off, is_new, true);
update_flag_item_name(f, item, name, true);
return item;
err:

View file

@ -8,7 +8,6 @@
* SDB Format:
*
* /
* base=<base>
* realnames=<realnames?"1":"0">
* /spaces
* see spaces.c
@ -18,7 +17,6 @@
* <zone name>={"from":<from>,"to":<to>}
* /flags
* <flag name>={"realname":<str>,"demangled":<bool>,"offset":<uint>,"size":<uint>,"space":<str>,"color":<str>,"comment":<str>,"alias":<str>}
*
*/
RZ_API void rz_serialize_flag_zones_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzList /*<RzFlagZoneItem *>*/ *zones) {
@ -122,11 +120,6 @@ static bool flag_save_cb(RzFlagItem *flag, void *user) {
RZ_API void rz_serialize_flag_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzFlag *flag) {
rz_serialize_spaces_save(sdb_ns(db, "spaces", true), &flag->spaces);
char buf[32];
if (snprintf(buf, sizeof(buf), "%" PFMT64d, flag->base) < 0) {
return;
}
sdb_set(db, "base", buf, 0);
sdb_set(db, "realnames", flag->realnames ? "1" : "0", 0);
sdb_copy(flag->tags, sdb_ns(db, "tags", true));
rz_serialize_flag_zones_save(sdb_ns(db, "zones", true), flag->zones);
@ -227,7 +220,7 @@ static bool flag_load_cb(void *user, const char *k, const char *v) {
goto beach;
}
RzFlagItem *item = rz_flag_set(ctx->flag, k, proto.offset - ctx->flag->base, proto.size);
RzFlagItem *item = rz_flag_set(ctx->flag, k, proto.offset, proto.size);
if (proto.realname) {
rz_flag_item_set_realname(item, proto.realname);
}
@ -270,14 +263,7 @@ static bool load_flags(RZ_NONNULL Sdb *flags_db, RZ_NONNULL RzFlag *flag) {
RZ_API bool rz_serialize_flag_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzFlag *flag, RZ_NULLABLE RzSerializeResultInfo *res) {
rz_flag_unset_all(flag);
const char *str = sdb_const_get(db, "base", NULL);
if (!str) {
RZ_SERIALIZE_ERR(res, "flag base key is missing");
return false;
}
flag->base = strtoll(str, NULL, 0);
str = sdb_const_get(db, "realnames", 0);
const char *str = sdb_const_get(db, "realnames", 0);
if (!str) {
RZ_SERIALIZE_ERR(res, "flag realnames key is missing");
return false;

View file

@ -45,7 +45,6 @@ typedef struct rz_flag_item_t {
typedef struct rz_flag_t {
RzSpaces spaces; /* handle flag spaces */
st64 base; /* base address for all flag items */
bool realnames;
Sdb *tags;
RzNum *num;

View file

@ -12,7 +12,7 @@
extern "C" {
#endif
#define RZ_PROJECT_VERSION 16
#define RZ_PROJECT_VERSION 17
typedef Sdb RzProject;
@ -61,6 +61,7 @@ RZ_API bool rz_project_migrate_v12_v13(RzProject *prj, RzSerializeResultInfo *re
RZ_API bool rz_project_migrate_v13_v14(RzProject *prj, RzSerializeResultInfo *res);
RZ_API bool rz_project_migrate_v14_v15(RzProject *prj, RzSerializeResultInfo *res);
RZ_API bool rz_project_migrate_v15_v16(RzProject *prj, RzSerializeResultInfo *res);
RZ_API bool rz_project_migrate_v16_v17(RzProject *prj, RzSerializeResultInfo *res);
RZ_API bool rz_project_migrate(RzProject *prj, unsigned long version, RzSerializeResultInfo *res);
#ifdef __cplusplus

View file

@ -374,6 +374,7 @@ Detailed project load info:
project migrated from version 13 to 14.
project migrated from version 14 to 15.
project migrated from version 15 to 16.
project migrated from version 16 to 17.
EOF
RUN

View file

@ -574,6 +574,22 @@ static bool test_migrate_v15_v16_str_config() {
mu_end;
}
static bool test_migrate_v16_v17_flags_base() {
RzProject *prj = rz_project_load_file_raw("prj/v16-flags-base.rzdb");
mu_assert_notnull(prj, "load raw project");
RzSerializeResultInfo *res = rz_serialize_result_info_new();
bool s = rz_project_migrate_v16_v17(prj, res);
mu_assert_true(s, "migrate success");
Sdb *core_db = sdb_ns(prj, "core", false);
mu_assert_notnull(core_db, "core ns");
Sdb *config_db = sdb_ns(core_db, "flags", false);
mu_assert_notnull(config_db, "config ns");
mu_assert_null(sdb_get(config_db, "base", 0), "flags base");
rz_serialize_result_info_free(res);
rz_project_free(prj);
mu_end;
}
/// Load project of given version from file into core and check the log for migration success messages
#define BEGIN_LOAD_TEST(core, version, file) \
@ -954,6 +970,14 @@ static bool test_load_v15_str_config() {
mu_end;
}
static bool test_load_v16() {
RzCore *core = rz_core_new();
BEGIN_LOAD_TEST(core, 16, "prj/v16-flags-base.rzdb");
// No new or changed info here
rz_core_free(core);
mu_end;
}
int all_tests() {
mu_run_test(test_migrate_v1_v2_noreturn);
mu_run_test(test_migrate_v1_v2_noreturn_empty);
@ -973,6 +997,7 @@ int all_tests() {
mu_run_test(test_migrate_v2_v12);
mu_run_test(test_migrate_v14_v15);
mu_run_test(test_migrate_v15_v16_str_config);
mu_run_test(test_migrate_v16_v17_flags_base);
mu_run_test(test_load_v1_noreturn);
mu_run_test(test_load_v1_noreturn_empty);
mu_run_test(test_load_v1_unknown_type);
@ -994,6 +1019,7 @@ int all_tests() {
mu_run_test(test_load_v14);
mu_run_test(test_load_v15_seek_history);
mu_run_test(test_load_v15_str_config);
mu_run_test(test_load_v16);
return tests_passed != tests_run;
}

View file

@ -0,0 +1,76 @@
/
type=rizin rz-db project
version=16
/core
blocksize=0x100
offset=0x5ae0
/core/analysis
/core/analysis/blocks
/core/analysis/callables
/core/analysis/cc
/core/analysis/classes
/core/analysis/classes/attrs
/core/analysis/functions
/core/analysis/hints
/core/analysis/imports
/core/analysis/meta
/core/analysis/meta/spaces
name=CS
spacestack=["*"]
/core/analysis/meta/spaces/spaces
bin=s
/core/analysis/noreturn
/core/analysis/types
/core/analysis/vars
/core/analysis/xrefs
/core/config
/core/debug
/core/debug/breakpoints
/core/file
relative=../bins/elf/ls
/core/flags
base=100
realnames=1
/core/flags/flags
/core/flags/spaces
name=fs
spacestack=["*"]
/core/flags/spaces/spaces
classes=s
relocs=s
sections=s
segments=s
strings=s
symbols=s
/core/flags/tags
/core/flags/zones
/core/seek
0={"offset":23264,"cursor":0,"current":true}

View file

@ -8,7 +8,6 @@
Sdb *ref_0_db() {
Sdb *db = sdb_new0();
sdb_set(db, "base", "-1337", 0);
sdb_set(db, "realnames", "1", 0);
Sdb *spaces_db = sdb_ns(db, "spaces", true);
@ -27,9 +26,9 @@ Sdb *ref_0_db() {
sdb_set(zones_db, PERTURBATOR, "{\"from\":3735928559,\"to\":18446744073709551614}", 0);
Sdb *flags_db = sdb_ns(db, "flags", true);
sdb_set(flags_db, "foobars", "{\"realname\":\"Foobars\",\"demangled\":true,\"offset\":3582,\"size\":16,\"space\":\"reveries\",\"color\":\"white\",\"comment\":\"windowpane\",\"alias\":\"f00b4r5\"}", 0);
sdb_set(flags_db, "f00b4r5", "{\"realname\":\"f00b4r5\",\"demangled\":false,\"offset\":3582,\"size\":1}", 0);
sdb_set(flags_db, "deliverance", "{\"realname\":\"deliverance\",\"demangled\":false,\"offset\":66,\"size\":19}", 0);
sdb_set(flags_db, "foobars", "{\"realname\":\"Foobars\",\"demangled\":true,\"offset\":4919,\"size\":16,\"space\":\"reveries\",\"color\":\"white\",\"comment\":\"windowpane\",\"alias\":\"f00b4r5\"}", 0);
sdb_set(flags_db, "f00b4r5", "{\"realname\":\"f00b4r5\",\"demangled\":false,\"offset\":4919,\"size\":1}", 0);
sdb_set(flags_db, "deliverance", "{\"realname\":\"deliverance\",\"demangled\":false,\"offset\":1403,\"size\":19}", 0);
return db;
}
@ -37,7 +36,6 @@ Sdb *ref_0_db() {
RzFlag *ref_0_flag() {
RzFlag *flag = rz_flag_new();
flag->base = -1337;
flag->realnames = true;
rz_flag_set(flag, "deliverance", 0x42 + 1337, 0x13);
@ -67,7 +65,6 @@ RzFlag *ref_0_flag() {
Sdb *ref_1_db() {
Sdb *db = sdb_new0();
sdb_set(db, "base", "0", 0);
sdb_set(db, "realnames", "0", 0);
Sdb *spaces_db = sdb_ns(db, "spaces", true);
@ -83,7 +80,6 @@ Sdb *ref_1_db() {
RzFlag *ref_1_flag() {
RzFlag *flag = rz_flag_new();
flag->base = 0;
flag->realnames = false;
return flag;
}
@ -204,7 +200,6 @@ static bool test_load(Sdb *db, RzFlag *ref) {
continue;
}
mu_assert_eq_fmt(flag->base, ref->base, "base", "0x%" PFMT64x);
mu_assert_eq(flag->realnames, ref->realnames, "realnames");
assert_sdb_eq(flag->tags, ref->tags, "tags");
@ -238,4 +233,4 @@ int all_tests() {
return tests_passed != tests_run;
}
mu_main(all_tests)
mu_main(all_tests)