From 630a9ab8e8ffd2fc5544f2075fad112b3029649c Mon Sep 17 00:00:00 2001 From: pancake Date: Mon, 23 May 2022 16:06:05 +0200 Subject: [PATCH] Add a parse plugin for tweaking references to r0 ##disasm --- libr/parse/p/parse_v850_pseudo.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/libr/parse/p/parse_v850_pseudo.c b/libr/parse/p/parse_v850_pseudo.c index 8cadc0ee29..9b2fa7376e 100644 --- a/libr/parse/p/parse_v850_pseudo.c +++ b/libr/parse/p/parse_v850_pseudo.c @@ -1,4 +1,4 @@ -/* radare - LGPL - Copyright 2020-2021 - pancake */ +/* radare - LGPL - Copyright 2020-2022 - pancake */ #include #include @@ -198,10 +198,29 @@ static int parse(RParse *p, const char *data, char *str) { return true; } +static bool subvar(RParse *p, RAnalFunction *f, ut64 addr, int oplen, char *data, char *str, int len) { + char *r0 = strstr (data, "[r0]"); + if (r0) { + char *neg = strstr (data, " -"); + if (neg && neg < r0) { + int negdelta = atoi (neg); + *neg = 0; + ut64 addr = UT32_MAX + negdelta + 1; + char *res = r_str_newf ("%s 0x%"PFMT64x"%s", data, addr, r0 + 4); + strcpy (str, res); + free (res); + return true; + } + } + strcpy (str, data); + return false; +} + RParsePlugin r_parse_plugin_v850_pseudo = { .name = "v850.pseudo", .desc = "v850 pseudo syntax", .parse = parse, + .subvar = &subvar, }; #ifndef R2_PLUGIN_INCORE