asm-i386 : config.h should not be included out of kernel
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() */
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 <><
Hi,
Quoted 2 lines
Just drop that line completely, including
linux/config.his 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
Quoted 3 lines · Olivier MATZ
But in my opinion, as we use
CONFIG_HERTZinparam.h, we should keep the include ofconfig.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
Quoted 8 lines · Sam Ravnborg
Quoted 2 lines · Olivier MATZ
But in my opinion, as we use
CONFIG_HERTZinparam.h, we should keep the include ofconfig.h.If you look at the commandline passed to gcc you will notice -include
include/linux/autoconf.hwhich tell gcc to pull inautoconf.h. So it is no longer required to includeconfig.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
Hi Sam,
Quoted 3 lines
If you look at the commandline passed to gcc you will notice -include
include/linux/autoconf.hwhich tell gcc to pull inautoconf.h. So it is no longer required to includeconfig.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
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.hwhich tell gcc to pull inautoconf.h. So it is no longer required to includeconfig.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
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.hwhich tell gcc to pull inautoconf.h. So it is no longer required to includeconfig.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
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