diff options
author | Mike Frysinger <vapier@gentoo.org> | 2011-12-03 19:05:15 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2011-12-03 19:05:15 +0000 |
commit | cc5add8c1cef548dfcefecb01a603112f2df99a8 (patch) | |
tree | 34626a7a72f01b583cddc79b4bd1c47f8e544ec9 /sim/bfin/interp.c | |
parent | 7171232768ab846e00032b7218b2a4ad275b6ae2 (diff) | |
download | gdb-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.c | 43 |
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]); |