Skip to contentSkip to conversation

asm-i386 : config.h should not be included out of kernel

PATCH In review Olivier MATZ 4 participants 9 messages Dec 6, 2005 – Dec 8, 2005

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 asm-i386 : config.h should not be included out of kernel

Hi,

It seems that in include/asm-i386/param.h the "#include <linux/config.h>" should be inside the #ifdef __KERNEL__, as it is done in asm-ia64.

Some applications cannot compile/work correctly whithout this patch. For example busybox defines for itself CONFIG_TR (related to the tr program), which is unfortunately undefined when including sys/param.h, which includes linux/config.h (CONFIG_TR is the config for token ring).

Can you consider the following patch ?

Thanks,
Olivier

include/asm-i386/param.h +2 -2
@@ -1,9 +1,9 @@
-#include <linux/config.h>
-
 #ifndef _ASMi386_PARAM_H
 #define _ASMi386_PARAM_H
 
 #ifdef __KERNEL__
+#include <linux/config.h>  /* mustn't include <linux/config.h> outside of #ifdef __KERNEL__ */
+
 # define HZ		CONFIG_HZ	/* Internal kernel timer frequency */
 # define USER_HZ	100		/* .. some user interfaces are in "ticks" */
 # define CLOCKS_PER_SEC		(USER_HZ)	/* like times() */
#1 lore raw

Am Dienstag 06 Dezember 2005 21:26 schrieb Olivier MATZ:

Quoted 9 lines
include/asm-i386/param.h +0 -2
@@ -1,9 +1,9 @@
-#include <linux/config.h>
-
  #ifndef _ASMi386_PARAM_H
  #define _ASMi386_PARAM_H


 #ifdef __KERNEL__
+#include <linux/config.h>  /* mustn't include <linux/config.h> outside of #ifdef __KERNEL__ */ +

Just drop that line completely, including linux/config.h is no longer necessary.

	Arnd <><
#2 lore raw

Hi,

Quoted 2 lines

Just drop that line completely, including linux/config.h is no longer necessary.

You're right, including linux/config.h is not necessary because every file that includes asm/param.h also includes the linux/config.h directly or indirectly.

But in my opinion, as we use CONFIG_HERTZ in param.h, we should keep the include of config.h.

Olivier

#3 lore raw
Quoted 3 lines · Olivier MATZ

But in my opinion, as we use CONFIG_HERTZ in param.h, we should keep the include of config.h.

If you look at the commandline passed to gcc you will notice -include include/linux/autoconf.h which tell gcc to pull in autoconf.h. So it is no longer required to include config.h.

Sam

#4 lore raw
Quoted 8 lines · Sam Ravnborg
Quoted 2 lines · Olivier MATZ

But in my opinion, as we use CONFIG_HERTZ in param.h, we should keep the include of config.h.

If you look at the commandline passed to gcc you will notice -include include/linux/autoconf.h which tell gcc to pull in autoconf.h. So it is no longer required to include config.h.

Is it the intention for the real kernel headers to be used by userland apps, and for linux-libc-headers et-al to be deprecated?

If so, how far down this road are we? I tested a few things recently, out of interest;

- recent glibc builds fine with real 2.6.14.2 headers
- x11 cvs won't build without real kernel headers
- net-tools will only build with sanitized headers

Andrew Walrond

#5 lore raw
In reply to Sam Ravnborg

Hi Sam,

Quoted 3 lines

If you look at the commandline passed to gcc you will notice -include include/linux/autoconf.h which tell gcc to pull in autoconf.h. So it is no longer required to include config.h.

I'm not sure. On my 2.6.14.3, this is a compilation line :

gcc -m32 -Wp,-MD,kernel/.sys.o.d -nostdinc -isystem /usr/lib/gcc-lib/i486-linux-gnu/3.3.6/include -D__KERNEL__ -Iinclude -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing
-fno-common -ffreestanding -Os -fno-omit-frame-pointer
-fno-optimize-sibling-calls -g -pipe -msoft-float -mpreferred-stack-boundary=2 -march=i686 -mregparm=3
-Iinclude/asm-i386/mach-default -DKBUILD_BASENAME=sys
-DKBUILD_MODNAME=sys -c -o kernel/.tmp_sys.o kernel/sys.c

Moreover, if I try to compile a C file which only define a variable and assign it to a CONFIG_XXX, it doesn't work. Did I do something wrong ?

Olivier

#6 lore raw
Quoted 7 lines · Olivier MATZ

Hi Sam,

Quoted 3 lines

If you look at the commandline passed to gcc you will notice -include include/linux/autoconf.h which tell gcc to pull in autoconf.h. So it is no longer required to include config.h.

I'm not sure. On my 2.6.14.3, this is a compilation line

Ok, I was speaking on the 2.6.15-rc kernels. I was added when 2.6.15 opened up and will first appear in a 'relased' kernel as of 2.6.15.

Quoted 2 lines

Moreover, if I try to compile a C file which only define a variable and assign it to a CONFIG_XXX, it doesn't work. Did I do something wrong ?

I do not get what you tried and what did not work.

Sam

#7 lore raw

Hi,

Quoted 8 lines
Quoted 5 lines
Quoted 3 lines

If you look at the commandline passed to gcc you will notice -include include/linux/autoconf.h which tell gcc to pull in autoconf.h. So it is no longer required to include config.h.

I'm not sure. On my 2.6.14.3, this is a compilation line

Ok, I was speaking on the 2.6.15-rc kernels. I was added when 2.6.15 opened up and will first appear in a 'relased' kernel as of 2.6.15.

I have one more question about dependancies : in 2.6.15-rc, if we modify the config, do we have to recompile everything ?

Olivier

#8 lore raw
Quoted 2 lines · Olivier MATZ

I have one more question about dependancies : in 2.6.15-rc, if we modify the config, do we have to recompile everything ?

No, kbuild will rebuild only what is necessary. That may be a lot, or it may be only very limited. Depending on what symbol you change.

Sam