From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11069 invoked by alias); 26 May 2011 19:41:36 -0000 Received: (qmail 11049 invoked by uid 22791); 26 May 2011 19:41:35 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,TW_CP,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp.gentoo.org (HELO smtp.gentoo.org) (140.211.166.183) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 26 May 2011 19:41:21 +0000 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.gentoo.org (Postfix) with ESMTP id 4BB0A1B4008; Thu, 26 May 2011 19:41:20 +0000 (UTC) From: Mike Frysinger To: gdb-patches@sourceware.org Cc: toolchain-devel@blackfin.uclinux.org Subject: [PATCH 2/2] sim: bfin: lookup target strings when tracing system calls Date: Thu, 26 May 2011 19:41:00 -0000 Message-Id: <1306438878-14479-2-git-send-email-vapier@gentoo.org> In-Reply-To: <1306438878-14479-1-git-send-email-vapier@gentoo.org> References: <1306438878-14479-1-git-send-email-vapier@gentoo.org> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-05/txt/msg00618.txt.bz2 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 2011-05-26 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. --- 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 aac35e6..7ae05f0 100644 --- a/sim/bfin/interp.c +++ b/sim/bfin/interp.c @@ -156,7 +156,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); @@ -435,14 +435,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); @@ -510,7 +514,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]); @@ -519,31 +526,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]); -- 1.7.5.rc3