aboutsummaryrefslogtreecommitdiff
path: root/sim/bfin/interp.c
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2011-12-03 19:05:15 +0000
committerMike Frysinger <vapier@gentoo.org>2011-12-03 19:05:15 +0000
commitcc5add8c1cef548dfcefecb01a603112f2df99a8 (patch)
tree34626a7a72f01b583cddc79b4bd1c47f8e544ec9 /sim/bfin/interp.c
parent7171232768ab846e00032b7218b2a4ad275b6ae2 (diff)
downloadgdb-cc5add8c1cef548dfcefecb01a603112f2df99a8.zip
gdb-cc5add8c1cef548dfcefecb01a603112f2df99a8.tar.gz
gdb-cc5add8c1cef548dfcefecb01a603112f2df99a8.tar.bz2
sim: bfin: lookup target strings when tracing system calls
Parsing target addresses is hard if not generally useless, so use the new cb_get_string function to lookup the associated strings as well. Now the trace output is quickly useful instead of just marginally so. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'sim/bfin/interp.c')
-rw-r--r--sim/bfin/interp.c43
1 files changed, 33 insertions, 10 deletions
diff --git a/sim/bfin/interp.c b/sim/bfin/interp.c
index 4e7a45c..f107171 100644
--- a/sim/bfin/interp.c
+++ b/sim/bfin/interp.c
@@ -161,7 +161,7 @@ bfin_syscall (SIM_CPU *cpu)
bu32 args[6];
CB_SYSCALL sc;
char *p;
- char _tbuf[512], *tbuf = _tbuf;
+ char _tbuf[1024 * 3], *tbuf = _tbuf, tstr[1024];
int fmt_ret_hex = 0;
CB_SYSCALL_INIT (&sc);
@@ -440,14 +440,18 @@ bfin_syscall (SIM_CPU *cpu)
break;
case CB_SYS_stat64:
- tbuf += sprintf (tbuf, "stat64(%#x, %u)", args[0], args[1]);
+ if (cb_get_string (cb, &sc, tstr, sizeof (tstr), args[0]))
+ strcpy (tstr, "???");
+ tbuf += sprintf (tbuf, "stat64(%#x:\"%s\", %u)", args[0], tstr, args[1]);
cb->stat_map = stat_map_64;
sc.func = TARGET_LINUX_SYS_stat;
cb_syscall (cb, &sc);
cb->stat_map = stat_map_32;
break;
case CB_SYS_lstat64:
- tbuf += sprintf (tbuf, "lstat64(%#x, %u)", args[0], args[1]);
+ if (cb_get_string (cb, &sc, tstr, sizeof (tstr), args[0]))
+ strcpy (tstr, "???");
+ tbuf += sprintf (tbuf, "lstat64(%#x:\"%s\", %u)", args[0], tstr, args[1]);
cb->stat_map = stat_map_64;
sc.func = TARGET_LINUX_SYS_lstat;
cb_syscall (cb, &sc);
@@ -515,7 +519,10 @@ bfin_syscall (SIM_CPU *cpu)
break;
case CB_SYS_open:
- tbuf += sprintf (tbuf, "open(%#x, %#x, %o)", args[0], args[1], args[2]);
+ if (cb_get_string (cb, &sc, tstr, sizeof (tstr), args[0]))
+ strcpy (tstr, "???");
+ tbuf += sprintf (tbuf, "open(%#x:\"%s\", %#x, %o)",
+ args[0], tstr, args[1], args[2]);
goto case_default;
case CB_SYS_close:
tbuf += sprintf (tbuf, "close(%i)", args[0]);
@@ -524,31 +531,47 @@ bfin_syscall (SIM_CPU *cpu)
tbuf += sprintf (tbuf, "read(%i, %#x, %u)", args[0], args[1], args[2]);
goto case_default;
case CB_SYS_write:
- tbuf += sprintf (tbuf, "write(%i, %#x, %u)", args[0], args[1], args[2]);
+ if (cb_get_string (cb, &sc, tstr, sizeof (tstr), args[1]))
+ strcpy (tstr, "???");
+ tbuf += sprintf (tbuf, "write(%i, %#x:\"%s\", %u)",
+ args[0], args[1], tstr, args[2]);
goto case_default;
case CB_SYS_lseek:
tbuf += sprintf (tbuf, "lseek(%i, %i, %i)", args[0], args[1], args[2]);
goto case_default;
case CB_SYS_unlink:
- tbuf += sprintf (tbuf, "unlink(%#x)", args[0]);
+ if (cb_get_string (cb, &sc, tstr, sizeof (tstr), args[0]))
+ strcpy (tstr, "???");
+ tbuf += sprintf (tbuf, "unlink(%#x:\"%s\")", args[0], tstr);
goto case_default;
case CB_SYS_truncate:
- tbuf += sprintf (tbuf, "truncate(%#x, %i)", args[0], args[1]);
+ if (cb_get_string (cb, &sc, tstr, sizeof (tstr), args[0]))
+ strcpy (tstr, "???");
+ tbuf += sprintf (tbuf, "truncate(%#x:\"%s\", %i)", args[0], tstr, args[1]);
goto case_default;
case CB_SYS_ftruncate:
tbuf += sprintf (tbuf, "ftruncate(%i, %i)", args[0], args[1]);
goto case_default;
case CB_SYS_rename:
- tbuf += sprintf (tbuf, "rename(%#x, %#x)", args[0], args[1]);
+ if (cb_get_string (cb, &sc, tstr, sizeof (tstr), args[0]))
+ strcpy (tstr, "???");
+ tbuf += sprintf (tbuf, "rename(%#x:\"%s\", ", args[0], tstr);
+ if (cb_get_string (cb, &sc, tstr, sizeof (tstr), args[1]))
+ strcpy (tstr, "???");
+ tbuf += sprintf (tbuf, "%#x:\"%s\")", args[1], tstr);
goto case_default;
case CB_SYS_stat:
- tbuf += sprintf (tbuf, "stat(%#x, %#x)", args[0], args[1]);
+ if (cb_get_string (cb, &sc, tstr, sizeof (tstr), args[0]))
+ strcpy (tstr, "???");
+ tbuf += sprintf (tbuf, "stat(%#x:\"%s\", %#x)", args[0], tstr, args[1]);
goto case_default;
case CB_SYS_fstat:
tbuf += sprintf (tbuf, "fstat(%i, %#x)", args[0], args[1]);
goto case_default;
case CB_SYS_lstat:
- tbuf += sprintf (tbuf, "lstat(%i, %#x)", args[0], args[1]);
+ if (cb_get_string (cb, &sc, tstr, sizeof (tstr), args[0]))
+ strcpy (tstr, "???");
+ tbuf += sprintf (tbuf, "lstat(%#x:\"%s\", %#x)", args[0], tstr, args[1]);
goto case_default;
case CB_SYS_pipe:
tbuf += sprintf (tbuf, "pipe(%#x, %#x)", args[0], args[1]);