All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: David Woodhouse <dwmw2@infradead.org>
Cc: linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [patch 1/8] extend make headers_check to detect more problems
Date: Mon, 18 Sep 2006 03:27:41 +0200	[thread overview]
Message-ID: <20060918013216.335200000@klappe.arndb.de> (raw)
In-Reply-To: <1158079495.9189.125.camel@hades.cambridge.redhat.com>

[-- Attachment #1: headercheck-base.diff --]
[-- Type: text/plain, Size: 2088 bytes --]

In addition to the problem of including non-existant header
files, a number of other things can go wrong with header
files exported to user space. This adds checks for some
common problems:

- The header fails to include the files it needs, which
  results in build errors when a program tries to include
  it. Check this by doing a dummy compile.

- There is a declarations of a static variable or non-inline
  function in the header, which results in object code
  in every file including it. Check for symbols in the object
  with 'nm'.

- Part of the header is subject to conditional compilation
  based on CONFIG_*. Add a regex search for this.

I found many problems with this, which I then fixed for
powerpc, s390 and i386, in subsequent patches.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Index: linux-cg/scripts/hdrcheck.sh
===================================================================
--- linux-cg.orig/scripts/hdrcheck.sh	2006-09-18 02:04:44.000000000 +0200
+++ linux-cg/scripts/hdrcheck.sh	2006-09-18 02:04:45.000000000 +0200
@@ -1,8 +1,28 @@
 #!/bin/sh
 
+# check if all included files exist
 for FILE in `grep '^[ \t]*#[ \t]*include[ \t]*<' $2 | cut -f2 -d\< | cut -f1 -d\> | egrep ^linux\|^asm` ; do
     if [ ! -r $1/$FILE ]; then
 	echo $2 requires $FILE, which does not exist in exported headers
 	exit 1
     fi
 done
+
+# try to compile in order to see CC warnings, show only the first few
+CHECK_CFLAGS=`grep @headercheck: $2 | sed -e 's/^.*@headercheck:\([^@]*\)@.*$/\1/'`
+CFLAGS="-Wall -std=gnu99 -xc -O2 -I$1 ${CHECK_CFLAGS}"
+tmpfile=`mktemp`
+${CC:-gcc} ${CFLAGS} -c $2 -o $tmpfile 2>&1 | sed -e "s:$1:include:g" >&2
+
+# check if object file is empty
+if [ "`nm $tmpfile`" ] ; then
+    echo include${2#$1}: warning: non-empty output >&2
+fi
+rm $tmpfile
+
+# check if we use a CONFIG_ symbol, which is not allowed in installed headers
+grep '^[ \t]*#[ \t]*if.*\<CONFIG_[[:alnum:]_]*\>' -n $2 |
+while read i ; do
+    echo include${2#$1}:${i%%:*}: warning: invalid use of `echo $i |
+	sed -e 's/.*\(\<CONFIG_[[:alnum:]_]*\>\).*/\1/g'` >&2
+done

--


  parent reply	other threads:[~2006-09-18  1:38 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-12 16:44 All arch maintainers: 'make headers_check' fails on most architectures David Woodhouse
2006-09-14 22:34 ` [PATCH] [1/5] Fix 'make headers_check' on biarch architectures for 2.6.18 David Woodhouse
2006-09-14 22:35 ` [PATCH] [2/5] Fix 'make headers_check' on s390 " David Woodhouse
2006-09-15  8:25   ` Martin Schwidefsky
2006-09-14 22:36 ` [PATCH] [3/5] Fix 'make headers_check' on ia64 " David Woodhouse
2006-09-14 22:36 ` [PATCH] [4/5] Fix 'make headers_check' on x86_64 " David Woodhouse
2006-09-14 22:37 ` [PATCH] [5/5] Fix 'make headers_check' on i386 " David Woodhouse
2006-09-17  7:39 ` All arch maintainers: 'make headers_check' fails on most architectures David Woodhouse
2006-09-17 11:51   ` Paul Mundt
2006-09-17 12:10     ` David Woodhouse
2006-09-17 12:20       ` lethal
2006-09-17 12:51       ` Paul Mundt
2006-09-17 11:56   ` Paul Mundt
2006-09-17 11:58     ` David Woodhouse
2006-09-17 12:27   ` Paul Mundt
2006-09-19  7:04   ` Hirokazu Takata
2006-09-19  8:25   ` Ian Molton
2006-09-19 15:31   ` Jeff Dike
2006-09-19 15:39     ` David Woodhouse
2006-09-19 22:03       ` Jeff Dike
2006-09-20  6:18         ` Arnd Bergmann
2006-09-20 15:02           ` Jeff Dike
2006-09-17  9:52 ` Geert Uytterhoeven
2006-09-17 10:36   ` David Woodhouse
2006-09-18  1:27 ` [patch 0/8] " Arnd Bergmann
2006-09-18  1:27 ` Arnd Bergmann [this message]
2006-09-18  6:21   ` [patch 1/8] extend make headers_check to detect more problems Sam Ravnborg
2006-09-18  6:45     ` David Woodhouse
2006-09-21 15:13       ` David Woodhouse
2006-09-18  8:05     ` Arnd Bergmann
2006-09-18  8:10       ` David Woodhouse
2006-09-23 11:04   ` David Woodhouse
2006-09-23 13:18     ` Arnd Bergmann
2006-09-18  1:27 ` [patch 2/8] fix byteorder headers for make headers_check Arnd Bergmann
2006-09-18  1:27 ` [patch 3/8] hide kernel-only parts of some installed headers Arnd Bergmann
2006-09-18  1:27 ` [patch 4/8] fix exported flock64 constants Arnd Bergmann
2006-09-18  1:27 ` [patch 5/8] add missing #includes in user space parts of headers Arnd Bergmann
2006-09-18  1:27 ` [patch 6/8] annotate header files for make headers_check Arnd Bergmann
2006-09-18  1:27 ` [patch 8/8] annotate netfilter header " Arnd Bergmann
2006-09-18  1:37 ` [patch 7/8] annotate if_* " Arnd Bergmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060918013216.335200000@klappe.arndb.de \
    --to=arnd@arndb.de \
    --cc=dwmw2@infradead.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.