Commit f38476ae authored by Cedric Roux's avatar Cedric Roux

import VCD into the T

parent 131b1bda
...@@ -32,6 +32,14 @@ ...@@ -32,6 +32,14 @@
T_LOCAL_size += sizeof(int); \ T_LOCAL_size += sizeof(int); \
} while (0) } while (0)
#define T_PUT_ulong(argnum, val) \
do { \
unsigned long T_PUT_var = (val); \
T_CHECK_SIZE(sizeof(unsigned long), argnum); \
memcpy(T_LOCAL_buf + T_LOCAL_size, &T_PUT_var, sizeof(unsigned long)); \
T_LOCAL_size += sizeof(unsigned long); \
} while (0)
#define T_PUT_float(argnum, val) \ #define T_PUT_float(argnum, val) \
do { \ do { \
float T_PUT_var = (val); \ float T_PUT_var = (val); \
...@@ -535,6 +543,38 @@ extern T_cache_t *T_cache; ...@@ -535,6 +543,38 @@ extern T_cache_t *T_cache;
#define T30(...) T_CALL_ERROR #define T30(...) T_CALL_ERROR
#define T32(...) T_CALL_ERROR #define T32(...) T_CALL_ERROR
/* special cases for VCD logs */
#define T_VCD_VARIABLE(var, val) \
do { \
if (T_ACTIVE(((var) + VCD_FIRST_VARIABLE))) { \
if ((var) > VCD_NUM_VARIABLES) { \
printf("%s:%d:%s: VCD data out of synch for the T, contact" \
" the authors!\n", __FILE__, __LINE__, __FUNCTION__); \
abort(); \
} \
T_LOCAL_DATA \
T_HEADER(T_ID((var) + VCD_FIRST_VARIABLE)); \
T_PUT_ulong(1, (val)); \
T_SEND(); \
} \
} while (0)
#define T_VCD_FUNCTION(fun, val) \
do { \
if (T_ACTIVE(((fun) + VCD_FIRST_FUNCTION))) { \
if ((fun) > VCD_NUM_FUNCTIONS) { \
printf("%s:%d:%s: VCD data out of synch for the T, contact" \
" the authors!\n", __FILE__, __LINE__, __FUNCTION__); \
abort(); \
} \
T_LOCAL_DATA \
T_HEADER(T_ID((fun) + VCD_FIRST_FUNCTION)); \
T_PUT_int(1, (val)); \
T_SEND(); \
} \
} while (0)
#ifndef T_USE_SHARED_MEMORY #ifndef T_USE_SHARED_MEMORY
#include <stdio.h> #include <stdio.h>
......
...@@ -21,4 +21,16 @@ typedef struct { ...@@ -21,4 +21,16 @@ typedef struct {
#define T_SHM_FILENAME "/T_shm_segment" #define T_SHM_FILENAME "/T_shm_segment"
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
#define VCD_NUM_FUNCTIONS 139
/* number of VCD variables (to be kept up to date! see in T_messages.txt) */
#define VCD_NUM_VARIABLES 45
/* first VCD function (to be kept up to date! see in T_messages.txt) */
#define VCD_FIRST_FUNCTION ((uintptr_t)T_VCD_FUNCTION_RT_SLEEP)
/* first VCD variable (to be kept up to date! see in T_messages.txt) */
#define VCD_FIRST_VARIABLE ((uintptr_t)T_VCD_VARIABLE_FRAME_NUMBER_TX_ENB)
#endif /* _T_defs_H_ */ #endif /* _T_defs_H_ */
This diff is collapsed.
...@@ -36,6 +36,10 @@ event new_event(int type, int length, char *buffer, void *database) ...@@ -36,6 +36,10 @@ event new_event(int type, int length, char *buffer, void *database)
e.e[i].type = EVENT_INT; e.e[i].type = EVENT_INT;
e.e[i].i = *(int *)(&buffer[offset]); e.e[i].i = *(int *)(&buffer[offset]);
offset += 4; offset += 4;
} else if (!strcmp(f.type[i], "ulong")) {
e.e[i].type = EVENT_ULONG;
e.e[i].ul = *(unsigned long *)(&buffer[offset]);
offset += sizeof(unsigned long);
} else if (!strcmp(f.type[i], "string")) { } else if (!strcmp(f.type[i], "string")) {
e.e[i].type = EVENT_STRING; e.e[i].type = EVENT_STRING;
e.e[i].s = &buffer[offset]; e.e[i].s = &buffer[offset];
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
enum event_arg_type { enum event_arg_type {
EVENT_INT, EVENT_INT,
EVENT_ULONG,
EVENT_STRING, EVENT_STRING,
EVENT_BUFFER EVENT_BUFFER
}; };
...@@ -17,6 +18,7 @@ typedef struct { ...@@ -17,6 +18,7 @@ typedef struct {
//int offset; //int offset;
union { union {
int i; int i;
unsigned long ul;
char *s; char *s;
struct { struct {
int bsize; int bsize;
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
enum format_item_type { enum format_item_type {
INSTRING, INSTRING,
INT, STRING, BUFFER }; INT, ULONG, STRING, BUFFER };
struct format_item { struct format_item {
enum format_item_type type; enum format_item_type type;
...@@ -56,6 +56,7 @@ static void _event(void *p, event e) ...@@ -56,6 +56,7 @@ static void _event(void *p, event e)
switch(l->f[i].type) { switch(l->f[i].type) {
case INSTRING: PUTS(&l->o, l->f[i].s); break; case INSTRING: PUTS(&l->o, l->f[i].s); break;
case INT: PUTI(&l->o, e.e[l->f[i].event_arg].i); break; case INT: PUTI(&l->o, e.e[l->f[i].event_arg].i); break;
case ULONG: PUTUL(&l->o, e.e[l->f[i].event_arg].ul); break;
case STRING: PUTS_CLEAN(&l->o, e.e[l->f[i].event_arg].s); break; case STRING: PUTS_CLEAN(&l->o, e.e[l->f[i].event_arg].s); break;
case BUFFER: case BUFFER:
PUTS(&l->o, "{buffer size:"); PUTS(&l->o, "{buffer size:");
...@@ -86,6 +87,7 @@ static int find_argument(char *name, database_event_format f, ...@@ -86,6 +87,7 @@ static int find_argument(char *name, database_event_format f,
if (i == f.count) return 0; if (i == f.count) return 0;
*event_arg = i; *event_arg = i;
if (!strcmp(f.type[i], "int")) *it = INT; if (!strcmp(f.type[i], "int")) *it = INT;
else if (!strcmp(f.type[i], "ulong")) *it = ULONG;
else if (!strcmp(f.type[i], "string")) *it = STRING; else if (!strcmp(f.type[i], "string")) *it = STRING;
else if (!strcmp(f.type[i], "buffer")) *it = BUFFER; else if (!strcmp(f.type[i], "buffer")) *it = BUFFER;
else return 0; else return 0;
......
...@@ -29,6 +29,7 @@ static void _event(void *p, event e) ...@@ -29,6 +29,7 @@ static void _event(void *p, event e)
subframe = e.e[l->subframe_arg].i; subframe = e.e[l->subframe_arg].i;
switch (e.e[l->data_arg].type) { switch (e.e[l->data_arg].type) {
case EVENT_INT: value = e.e[l->data_arg].i; break; case EVENT_INT: value = e.e[l->data_arg].i; break;
case EVENT_ULONG: value = e.e[l->data_arg].ul; break;
default: printf("%s:%d: unsupported type\n", __FILE__, __LINE__); abort(); default: printf("%s:%d: unsupported type\n", __FILE__, __LINE__); abort();
} }
......
...@@ -115,3 +115,10 @@ void PUTI(OBUF *o, int i) ...@@ -115,3 +115,10 @@ void PUTI(OBUF *o, int i)
sprintf(s, "%d", i); sprintf(s, "%d", i);
PUTS(o, s); PUTS(o, s);
} }
void PUTUL(OBUF *o, unsigned long l)
{
char s[128];
sprintf(s, "%ld", l);
PUTS(o, s);
}
...@@ -36,5 +36,6 @@ void PUTC(OBUF *o, char c); ...@@ -36,5 +36,6 @@ void PUTC(OBUF *o, char c);
void PUTS(OBUF *o, char *s); void PUTS(OBUF *o, char *s);
void PUTS_CLEAN(OBUF *o, char *s); void PUTS_CLEAN(OBUF *o, char *s);
void PUTI(OBUF *o, int i); void PUTI(OBUF *o, int i);
void PUTUL(OBUF *o, unsigned long i);
#endif /* _UTILS_H_ */ #endif /* _UTILS_H_ */
...@@ -312,6 +312,16 @@ void vcd_signal_dumper_dump_function_by_name(vcd_signal_dump_functions function ...@@ -312,6 +312,16 @@ void vcd_signal_dumper_dump_function_by_name(vcd_signal_dump_functions function
extern int ouput_vcd; extern int ouput_vcd;
#if T_TRACER
#define VCD_SIGNAL_DUMPER_INIT(x) /* nothing */
#define VCD_SIGNAL_DUMPER_CLOSE() /* nothing */
#define VCD_SIGNAL_DUMPER_CREATE_HEADER() /* nothing */
#define VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(var, val) T_VCD_VARIABLE(var, val)
#define VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(var, val) T_VCD_FUNCTION(var, val)
#else /* T_TRACER */
#if defined(ENABLE_VCD) #if defined(ENABLE_VCD)
#define VCD_SIGNAL_DUMPER_INIT(aRgUmEnT) vcd_signal_dumper_init(aRgUmEnT) #define VCD_SIGNAL_DUMPER_INIT(aRgUmEnT) vcd_signal_dumper_init(aRgUmEnT)
#define VCD_SIGNAL_DUMPER_CLOSE() vcd_signal_dumper_close() #define VCD_SIGNAL_DUMPER_CLOSE() vcd_signal_dumper_close()
...@@ -326,5 +336,7 @@ extern int ouput_vcd; ...@@ -326,5 +336,7 @@ extern int ouput_vcd;
#define VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(vAr1,vAr2) #define VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(vAr1,vAr2)
#endif #endif
#endif /* T_TRACER */
#endif /* !defined (VCD_SIGNAL_DUMPER_H_) */ #endif /* !defined (VCD_SIGNAL_DUMPER_H_) */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment