1 # $NetBSD: genlintstub.awk,v 1.8 2005/02/26 21:34:55 perry Exp $
2 #
3 # Copyright 2001 Wasabi Systems, Inc.
4 # All rights reserved.
5 #
6 # Written by Perry E. Metzger for Wasabi Systems, Inc.
7 #
8 # Redistribution and use in source and binary forms, with or without
9 # modification, are permitted provided that the following conditions
10 # are met:
11 # 1. Redistributions of source code must retain the above copyright
12 # notice, this list of conditions and the following disclaimer.
13 # 2. Redistributions in binary form must reproduce the above copyright
14 # notice, this list of conditions and the following disclaimer in the
15 # documentation and/or other materials provided with the distribution.
16 # 3. All advertising materials mentioning features or use of this software
17 # must display the following acknowledgement:
18 # This product includes software developed for the NetBSD Project by
19 # Wasabi Systems, Inc.
20 # 4. The name of Wasabi Systems, Inc. may not be used to endorse
21 # or promote products derived from this software without specific prior
22 # written permission.
23 #
24 # THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
25 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
26 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
28 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 # POSSIBILITY OF SUCH DAMAGE.
35 #
36
37 # This awk script is used by kernel Makefiles to construct C lint
38 # stubs automatically from properly formatted comments in .S files. In
39 # general, a .S file should have a special comment for anything with
40 # something like an ENTRY designation. The special formats are:
41 #
42 # /* LINTSTUB: Empty */
43 # This is used as an indicator that the file contains no stubs at
44 # all. It generates a /* LINTED */ comment to quiet lint.
45 #
46 # /* LINTSTUB: Func: type function(args) */
47 # type must be void, int or long. A return is faked up for ints and longs.
48 #
49 # /* LINTSTUB: Var: type variable, variable; */
50 # This is often appropriate for assembly bits that the rest of the
51 # kernel has declared as char * and such, like various bits of
52 # trampoline code.
53 #
54 # /* LINTSTUB: include foo */
55 # Turns into a literal `#include foo' line in the source. Useful for
56 # making sure the stubs are checked against system prototypes like
57 # systm.h, cpu.h, etc., and to make sure that various types are
58 # properly declared.
59 #
60 # /* LINTSTUB: Ignore */
61 # This is used as an indicator to humans (and possible future
62 # automatic tools) that the entry is only used internally by other .S
63 # files and does not need a stub. You want this so you know you
64 # haven't just forgotten to put a stub in for something and you are
65 # *deliberately* ignoring it.
66
67 BEGIN {
68 printf "/* DO NOT EDIT! DO NOT EDIT! DO NOT EDIT! */\n";
69 printf "/* DO NOT EDIT! DO NOT EDIT! DO NOT EDIT! */\n";
70 printf "/* This file was automatically generated. */\n";
71 printf "/* see genlintstub.awk for details. */\n";
72 printf "/* This file was automatically generated. */\n";
73 printf "/* DO NOT EDIT! DO NOT EDIT! DO NOT EDIT! */\n";
74 printf "/* DO NOT EDIT! DO NOT EDIT! DO NOT EDIT! */\n";
75 printf "\n\n";
76 }
77
78 /^\/\* LINTSTUB: Empty.*\*\/[ \t]*$/ {
79 printf "/* LINTED (empty translation unit) */\n";
80 next;
81 }
82
83 /^\/\* LINTSTUB: Func:.*\)[ \t]*[;]?[ \t]+\*\/[ \t]*$/ {
84 if (($4 == "int") || ($4 == "long"))
85 retflag = 1;
86 else if ($4 == "void")
87 retflag = 0;
88 else {
89 printf "ERROR: %s: type is not int or void\n", $4 > "/dev/stderr";
90 exit 1;
91 }
92 print "/* ARGSUSED */";
93 for (i = 4; i < NF; i++) {
94 if (i != (NF - 1))
95 printf "%s ", $i;
96 else {
97 sub(";$", "", $i);
98 printf "%s\n", $i;
99 }
100 }
101 print "{";
102 if (retflag)
103 print "\treturn(0);"
104 print "}\n";
105 next;
106 }
107
108 /^\/\* LINTSTUB: Func:/ {
109 printf "ERROR: bad function declaration: %s\n", $0 > "/dev/stderr";
110 exit 1;
111 }
112
113 /^\/\* LINTSTUB: Var:.*[ \t]+\*\/[ \t]*$/ {
114 for (i = 4; i < NF; i++) {
115 if (i != (NF - 1))
116 printf "%s ", $i;
117 else {
118 gsub(";$", "", $i);
119 printf "%s;\n\n", $i;
120 }
121 }
122 next;
123 }
124
125 /^\/\* LINTSTUB: Var:/ {
126 printf "ERROR: bad variable declaration: %s\n", $0 > "/dev/stderr";
127 exit 1;
128 }
129
130 /^\/\* LINTSTUB: include[ \t]+.*\*\/[ \t]*$/ {
131 printf "#include %s\n", $4;
132 next;
133 }
134
135 /^\/\* LINTSTUB: Ignore.*\*\/[ \t]*$/ { next; }
136
137 /^\/\* LINTSTUB: Ignore/ {
138 printf "ERROR: bad ignore declaration: %s\n", $0 > "/dev/stderr";
139 exit 1;
140 }
141
142 /^\/\* LINTSTUBS:/ {
143 printf "ERROR: LINTSTUB, not LINTSTUBS: %s\n", $0 > "/dev/stderr";
144 exit 1;
145 }
146
147 /^\/\* LINTSTUB:/ {
148 printf "ERROR: bad declaration: %s\n", $0 > "/dev/stderr";
149 exit 1;
150 }
Cache object: 96c403a93cf9fa6c6e5348b76928813e
|