blob: bd7f02617865cbe0dd0de391ece7df05de06413f [file] [log] [blame]
Ben Cheng25b3c042013-11-20 14:45:36 -08001#!/bin/gawk -f
2
3$1 == "enum" { set = ""; next }
4
5set == "" && $1 ~ /DW_([A-Z_]+)_([^ ]+)/ {
6 set = $1;
7 sub(/^DW_/, "", set);
8 sub(/_[^[:upper:]_].*$/, "", set);
9 if (set ~ /LANG_.+/) set = "LANG";
10}
11
12$1 ~ /DW([_A-Z]+)_([^ ]+)/ {
13 match($1, ("DW_" set "_([^ ]+)"), fields);
14 elt = fields[1];
15 if (set in DW)
16 DW[set] = DW[set] "," elt;
17 else
18 DW[set] = elt;
19 if ($NF == "*/" && $4 == "/*") {
20 c = $5;
21 for (i = 6; i < NF; ++i) c = c " " $i;
22 comment[set, elt] = c;
23 }
24}
25
26END {
27 print "/* Generated by config/dwarf-known.awk from libdw.h contents. */";
28 n = asorti(DW, sets);
29 for (i = 1; i <= n; ++i) {
30 set = sets[i];
31 if (what && what != set) continue;
32 split(DW[set], elts, ",");
33 m = asort(elts);
34 lo = hi = "";
35 if (m == 0) continue;
36 print "\n#define ALL_KNOWN_DW_" set " \\";
37 for (j = 1; j <= m; ++j) {
38 elt = elts[j];
39 if (elt ~ /(lo|low)_user$/) {
40 lo = elt;
41 continue;
42 }
43 if (elt ~ /(hi|high)_user$/) {
44 hi = elt;
45 continue;
46 }
47 if (comment[set, elt])
48 print " ONE_KNOWN_DW_" set "_DESC (" elt ", DW_" set "_" elt \
49 ", \"" comment[set, elt] "\") \\";
50 else
51 print " ONE_KNOWN_DW_" set " (" elt ", DW_" set "_" elt ") \\";
52 }
53 print " /* End of DW_" set "_*. */";
54 }
55}