Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 May 1998 23:56:37 +0200
From:      Eivind Eklund <eivind@yes.no>
To:        hackers@FreeBSD.ORG
Subject:   Kernel hackers Tricks & Tips
Message-ID:  <19980522235637.35026@follo.net>

next in thread | raw e-mail | index | archive | help
At request, I start off this document - I'll also volunteer to
function as editor until it is in a suitable state to be put in the
handbook.


1. The kernel is large; it is convenient to be able to grep in it
   without it taking time corresponding to it's size.  To accomplish
   this, you can use 'glimpse' from the ports collection
   (textproc/glimpse).
   To build the indexes (assuming you have your kernel in /sys):
   % glimpseindex -b /sys/ 
                  ^^ large index - no option give you a tiny index
                  (2-3%), -o small (7-8%), -b large (20-30%)
   Afterwards, you just use
   % glimpse <regexp>
   to search for <regexp>.  Glimpse support a somewhat limited set of
   regexpen.

2. Sometimes you might want to do large-scale style-changes to the
   kernel (e.g, moving options to be 'new-style' instead of
   'old-style').  These are changes that should result in any change
   to the kernel, but how do you test that?  Simple - diff the object
   files from an old kernel against the object files from your a
   kernel with your changes in it.  However, don't become too scared
   if something turn up as changed - a few kernel files contain
   uses __LINE__ for printing debugging info; check for this first.

3. You can automatically find problems (potential bugs) in old source
   by running flexelint against it - flexelint is available from
   Gimpel software (http://www.gimpel.com/).  It is kind of pricey,
   but tend to pay back quickly if you're programming for a living.
   It e.g. allowed staticizing of the entire FreeBSD kernel in
   approximately two hours.  ("Just a satisfied customer" and all that
   stuff.)

4. If you are changing kernel APIs and wonder if your changes are
   breaking the LKMs, there is a simple test.  Compile the 'LKM'
   kernel, build the LKMs, and run 'make regress' in the src/lkm
   directory.

5. There exists a 'magic' way of making timing-related bugs static:
   Add full checking for the integrity of datastructures (invariants).
   If you have a weird bug involving timing-dependent corruption, add
   as full checks as you are able to any nearby data structures.  The
   bugs tend to suddenly become deterministic failures.  (This assume
   that you have some knowledge of the area of code you're changing).

Now, anybody else want to chip in?

Eivind.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980522235637.35026>