• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/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}
56