#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "ssv.h" #include "trace.h" struct RawLog_Data { FILE *logFile; }; int RawLog_init(struct TraceAction *this, int argc, char **argv, struct ProcessDesc *pd) { this->data = malloc(sizeof(struct RawLog_Data)); struct RawLog_Data *rld = this->data; FILE *trc = openTrace(argv[1]); if (trc==NULL) return -1; rld->logFile = trc; return 1; } int RawLog_action(struct TraceAction *this, ssv_t *state, struct ProcessDesc *pd) { struct RawLog_Data *data = this->data; int err=0; size_t w; w = asc_ssv_outraw(state, data->logFile, &err); printf("%ld: 0x%lx: %zu\n", pd->count, asc_ssv_pc(state), w); return err; } int RawLog_cleanup(struct TraceAction *this, ssv_t *last, struct ProcessDesc *pd) { struct RawLog_Data *data = this->data; fclose(data->logFile); free(data); this->data = NULL; return 1; } // setup routine called by trace after loading int SetupAction(struct TraceAction *action) { action->data = NULL; action->init = RawLog_init; action->action = RawLog_action; action->cleanup = RawLog_cleanup; return 1; }