From cc5add8c1cef548dfcefecb01a603112f2df99a8 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sat, 3 Dec 2011 19:05:15 +0000 Subject: [PATCH] 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 --- sim/bfin/ChangeLog | 8 ++++++++ sim/bfin/interp.c | 43 +++++++++++++++++++++++++++++++++---------- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/sim/bfin/ChangeLog b/sim/bfin/ChangeLog index f8f9ce9..1376e6b 100644 --- a/sim/bfin/ChangeLog +++ b/sim/bfin/ChangeLog @@ -1,5 +1,13 @@ 2011-12-03 Mike Frysinger + * interp.c (bfin_syscall): Increase _tbuf storage. Declare new local + tstr buffer. Call cb_get_string on tstr when handling CB_SYS_stat64, + CB_SYS_lstat64, CB_SYS_open, CB_SYS_write, CB_SYS_unlink, + CB_SYS_truncate, CB_SYS_rename, CB_SYS_stat, CB_SYS_lstat. Include + tstr in the tbuf output. + +2011-12-03 Mike Frysinger + * Makefile.in: Delete all dependency rules. * aclocal.m4, configure: Regenerate. 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]); -- 2.7.4