SWV tracing for diagnosing hangs.
[SCSI2SD.git] / tools / trace2name.pl
1 # Author James Laird-Wah <james@laird-wah.net>
2 # This is free and unencumbered software released into the public domain.
3 #
4 # Anyone is free to copy, modify, publish, use, compile, sell, or
5 # distribute this software, either in source code form or as a compiled
6 # binary, for any purpose, commercial or non-commercial, and by any
7 # means.
8 #
9 # In jurisdictions that recognize copyright laws, the author or authors
10 # of this software dedicate any and all copyright interest in the
11 # software to the public domain. We make this dedication for the benefit
12 # of the public at large and to the detriment of our heirs and
13 # successors. We intend this dedication to be an overt act of
14 # relinquishment in perpetuity of all present and future rights to this
15 # software under copyright law.
16 #
17 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 # IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 # OTHER DEALINGS IN THE SOFTWARE.
24
25 # For more information, please refer to <http://unlicense.org/>
26 open HDR, '<trace.h';
27 $next = 0;
28 $enum = 0;
29 for (<HDR>) {
30     chomp;
31     /^enum trace_event/ || $enum or next;
32     $enum++;
33     /}/ && break;
34     /trace_(\S+)(\s*=\s*(\S+))?\s*,\s*$/ or next;
35     ($name, $valmatch, $val) = ($1, $2, $3);
36     $next = hex $val if defined $val;
37     $names{$next} = $name;
38     $next++;
39 }
40     
41 while (!eof STDIN) {
42     $ch = ord getc;
43     if ($ch==1 || $ch==9) {
44         $data = ord getc;
45         print "ISR: " if $ch==9;
46         $name = $names{$data} // sprintf "unk: 0x%X", $data;
47         print $names{$data}, "\n"
48     } else {
49         print "<dropped>\n";
50     }
51 }