9 static char magic
[] = "TRACEBUF";
11 typedef struct Tracebuf Tracebuf
;
24 t
= kmallocz(sizeof(*t
), 1);
25 memmove(t
->magic
, magic
, sizeof(t
->magic
));
30 checktrace(Tracebuf
*t
)
32 if(memcmp(t
->magic
, magic
, sizeof(t
->magic
)) != 0)
33 panic("tracebuffer corrupted");
37 freetrace(Tracebuf
*t
)
42 memset(t
, 0, sizeof(*t
));
47 vputtrace(Tracebuf
*t
, char *fmt
, va_list a
)
52 s
= t
->lines
[t
->wp
++ % nelem(t
->lines
)];
53 vsnprint(s
, sizeof(t
->lines
[0]), fmt
, a
);
55 fprint(2, "%d\t%s\n", (current
!= nil
) ? current
->tid
: 0, s
);
61 current
->trace
= alloctrace();
64 void exittrace(Uproc
*proc
)
74 void clonetrace(Uproc
*new, int copy
)
78 if((t
= current
->trace
) == nil
){
86 x
= kmalloc(sizeof(*t
));
87 memmove(x
, t
, sizeof(*t
));
93 new->trace
= alloctrace();
96 void tprint(char *fmt
, ...)
104 vputtrace((Tracebuf
*)p
->trace
, fmt
, a
);