summaryrefslogtreecommitdiff
path: root/cesar/lib/src/trace.c
diff options
context:
space:
mode:
authorschodet2009-02-20 12:57:09 +0000
committerschodet2009-02-20 12:57:09 +0000
commit2fc6279684a51ab9bee679a3ade2dda68a0683e0 (patch)
tree52fde2a040e12b79a8b3d1706e41cb70cc2b3275 /cesar/lib/src/trace.c
parenta53ae188bc14f0f98c27308225e565df144dd1ae (diff)
* lib/trace:
- added tools to debug bad trace messages. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@4062 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar/lib/src/trace.c')
-rw-r--r--cesar/lib/src/trace.c41
1 files changed, 31 insertions, 10 deletions
diff --git a/cesar/lib/src/trace.c b/cesar/lib/src/trace.c
index cfdea8cef4..9f0e8f9d43 100644
--- a/cesar/lib/src/trace.c
+++ b/cesar/lib/src/trace.c
@@ -19,6 +19,7 @@
#include <stdio.h>
#define TRACE_ALIGN (sizeof (u32))
+#define TRACE_DEBUG_ARGS 0
/** Trace system context. */
struct trace_t
@@ -301,19 +302,39 @@ trace_buffer_dump_event (char *text, char *text_end,
int ret;
if (namespace->formats[*fp - 'A'].size == 1)
{
- dbg_assert (args);
- args--;
- ret = namespace->formats[*fp - 'A'].callback.format_u32 (
- p, text_end - p, *parg++);
+ if (TRACE_DEBUG_ARGS && !args)
+ {
+ if (p == text_end)
+ return -1;
+ *p++ = '?';
+ ret = 1;
+ }
+ else
+ {
+ dbg_assert (args);
+ args--;
+ ret = namespace->formats[*fp - 'A'].callback.format_u32 (
+ p, text_end - p, *parg++);
+ }
}
else
{
- dbg_assert (args >= 2);
- args -= 2;
- u64 arg = (u64) parg[1] << 32 | parg[0];
- ret = namespace->formats[*fp - 'A'].callback.format_u64 (
- p, text_end - p, arg);
- parg += 2;
+ if (TRACE_DEBUG_ARGS && args < 2)
+ {
+ if (p == text_end)
+ return -1;
+ *p++ = '?';
+ ret = 1;
+ }
+ else
+ {
+ dbg_assert (args >= 2);
+ args -= 2;
+ u64 arg = (u64) parg[1] << 32 | parg[0];
+ ret = namespace->formats[*fp - 'A'].callback.format_u64 (
+ p, text_end - p, arg);
+ parg += 2;
+ }
}
if (ret == -1)
return -1;