Home | History | Annotate | Line # | Download | only in alpha
      1  1.7  gehenna $NetBSD: STYLE,v 1.7 2002/09/06 13:18:43 gehenna Exp $
      2  1.1      cgd 
      3  1.1      cgd Style guide for NetBSD/alpha kernel files.
      4  1.1      cgd 
      5  1.1      cgd This file is meant to supplement the NetBSD KNF style guide (which covers
      6  1.1      cgd most of the rest of the system, and can be found in /usr/share/misc/style).
      7  1.1      cgd 
      8  1.1      cgd 
      9  1.1      cgd SECTIONS
     10  1.1      cgd 
     11  1.1      cgd 	* INCLUDE FILES
     12  1.1      cgd 	* RCS IDS
     13  1.1      cgd 	* COMPILATION FLAGS
     14  1.1      cgd 	* MACRO DEFINITIONS
     15  1.1      cgd 	* BLOCKS AND EXPRESSIONS
     16  1.1      cgd 
     17  1.1      cgd 
     18  1.1      cgd INCLUDE FILES
     19  1.1      cgd 
     20  1.4  thorpej (1) All option headers should be included first, and sorted, like:
     21  1.4  thorpej 
     22  1.4  thorpej #include "opt_dec_3000_300.h"
     23  1.4  thorpej #include "opt_dec_3000_500.h"
     24  1.4  thorpej 
     25  1.4  thorpej (2) All C sources should include <sys/cdefs.h> as the first header to
     26  1.4  thorpej be included after any option headers, with a line like:
     27  1.1      cgd 
     28  1.1      cgd #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
     29  1.1      cgd 
     30  1.1      cgd 
     31  1.1      cgd RCS IDS
     32  1.1      cgd 
     33  1.7  gehenna (1) NetBSD RCS ID tags ($NetBSD: STYLE,v 1.7 2002/09/06 13:18:43 gehenna Exp $ tags) in C sources and headers should
     34  1.1      cgd appear at the top of the file in a single-line comment of the form
     35  1.1      cgd 
     36  1.7  gehenna /*<space>$NetBSD: STYLE,v 1.7 2002/09/06 13:18:43 gehenna Exp $<space>*/
     37  1.1      cgd 
     38  1.1      cgd which differs from the normal NetBSD style, in that it uses spaces
     39  1.5      wiz rather than tabs to separate the tag from the comment start and end
     40  1.1      cgd delimiters.
     41  1.1      cgd 
     42  1.2      cgd (2) All C and assembler sources should include an RCS ID tag which can
     43  1.2      cgd be compiled into the binary, with a line like:
     44  1.1      cgd 
     45  1.7  gehenna __KERNEL_RCSID(0, "$NetBSD: STYLE,v 1.7 2002/09/06 13:18:43 gehenna Exp $");
     46  1.1      cgd 
     47  1.2      cgd after the inclusion of cdefs.h.  Source files which include other source
     48  1.2      cgd files should change the number '0' to a different number, so that it
     49  1.6      wiz doesn't conflict with the RCS ID definitions in included sources.
     50  1.2      cgd Generation of these RCS IDs is disabled if the kernel option
     51  1.2      cgd NO_KERNEL_RCSIDS is defined.  (In some cases, picking the number to use
     52  1.2      cgd may not be so straightforward, but the rule above usually works.)
     53  1.1      cgd 
     54  1.1      cgd 
     55  1.1      cgd COMPILATION FLAGS
     56  1.1      cgd 
     57  1.1      cgd By default, NetBSD/alpha kernel files are compiled with the following gcc
     58  1.1      cgd warning flags:
     59  1.1      cgd 
     60  1.1      cgd 	-Werror
     61  1.1      cgd 	-Wall
     62  1.1      cgd 	-Wstrict-prototypes
     63  1.1      cgd 	-Wmissing-prototypes
     64  1.1      cgd 	-Wno-format
     65  1.1      cgd 
     66  1.1      cgd NetBSD/alpha kernel code should compile cleanly with those flags.  At some
     67  1.1      cgd point in the future (when the nonstandard extensions have been removed
     68  1.1      cgd from the kernel printf() function), -Wformat will be re-enabled, so sources
     69  1.1      cgd should be able to compile with it enabled as well.
     70  1.1      cgd 
     71  1.1      cgd 
     72  1.1      cgd MACRO DEFINITIONS
     73  1.1      cgd 
     74  1.1      cgd (1) Macros which use C blocks (i.e. are of the form "{ ... expressions
     75  1.1      cgd ... }") should always be defined like:
     76  1.1      cgd 
     77  1.1      cgd #define	MACRO(arg1, arg2, argN)					\
     78  1.1      cgd do {								\
     79  1.1      cgd 	...							\
     80  1.1      cgd 	expressions						\
     81  1.1      cgd 	...							\
     82  1.1      cgd } while (0)
     83  1.1      cgd 
     84  1.1      cgd so that they behave like functions or macros which don't use blocks (e.g.
     85  1.1      cgd for the purpose of "if (foo) MACRO(); else ...").
     86  1.1      cgd 
     87  1.1      cgd 
     88  1.1      cgd BLOCKS AND EXPRESSIONS
     89  1.1      cgd 
     90  1.1      cgd (1) Surround blocks with { and } more often than is absolutely necessary.
     91  1.1      cgd For instance:
     92  1.1      cgd 
     93  1.1      cgd 	if (foo)
     94  1.1      cgd 		bar();
     95  1.1      cgd 
     96  1.1      cgd is acceptable, but:
     97  1.1      cgd 
     98  1.1      cgd 	if (foo) {
     99  1.1      cgd 		bar();
    100  1.1      cgd 	}
    101  1.1      cgd 
    102  1.1      cgd is preferred.  (In contrast, NetBSD KNF says that no braces are to be
    103  1.1      cgd used for control statements with zero or one statements.)
    104  1.1      cgd 
    105  1.1      cgd (2) Use extra parentheses when it makes expressions clearer.  For instance,
    106  1.1      cgd 
    107  1.1      cgd 	(foo == 10 && bar == 20)
    108  1.1      cgd 
    109  1.1      cgd is acceptable, but:
    110  1.1      cgd 
    111  1.1      cgd 	((foo == 10) && (bar == 20))
    112  1.1      cgd 
    113  1.1      cgd is preferred.  (In contrast, NetBSD KNF says to avoid using parentheses
    114  1.1      cgd except where necessary unless the expression is very confusing without
    115  1.1      cgd them.)
    116