mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [patch 2/2] kbuild: fix crossbuild base config
@ 2004-11-02 23:20 blaisorblade_spam
  2004-11-03 16:56 ` Roman Zippel
  0 siblings, 1 reply; 8+ messages in thread
From: blaisorblade_spam @ 2004-11-02 23:20 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel, blaisorblade_spam, julian, mcr, sam


From: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it>
Cc: Julian Scheid <julian@sektor37.de>, Michael Richardson <mcr@sandelman.ottawa.on.ca>, Sam Ravnborg <sam@ravnborg.org>

When we are doing "make %config" on a normal build, we search a file to read
default settings from: we take the 1st existing one in a list specified in
scripts/kconfig/confdata.c. This list includes also /boot/config-$VER,
/lib/modules/$VER/.config, which is a wrong choice when we are
cross-compiling. So when cross-compiling we should ignore most files except
.config and arch/$ARCH/defconfig.

This has actually created not-working UML binaries (since UML is always
"cross-compiled" for this purpose), as reported by Julian Scheid.

We all agreed on this kind of general, not UML-only fix, and I (Paolo)
implemented it.

Implementation notes:
- I used a environment var, instead of adding yet another option, because it
  was the least intrusive way. Adding a new option and parsing it in all
  configurators, even the one not yet accepting command line option, was very
  intrusive.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it>
---

 vanilla-linux-2.6.9-paolo/scripts/kconfig/Makefile   |    8 ++++++++
 vanilla-linux-2.6.9-paolo/scripts/kconfig/confdata.c |   19 +++++++++++++++++--
 vanilla-linux-2.6.9-paolo/scripts/kconfig/lkc.h      |    1 -
 3 files changed, 25 insertions(+), 3 deletions(-)

diff -puN scripts/kconfig/confdata.c~kbuild-fix-crossbuild-defconfig scripts/kconfig/confdata.c
--- vanilla-linux-2.6.9/scripts/kconfig/confdata.c~kbuild-fix-crossbuild-defconfig	2004-11-03 00:18:27.359070256 +0100
+++ vanilla-linux-2.6.9-paolo/scripts/kconfig/confdata.c	2004-11-03 00:18:27.365069344 +0100
@@ -18,7 +18,9 @@ const char conf_def_filename[] = ".confi
 
 const char conf_defname[] = "arch/$ARCH/defconfig";
 
-const char *conf_confnames[] = {
+/*These are used only when conf_read(NULL) is called, i.e. when doing
+ * make config */
+static const char *__conf_confnames[] = {
 	".config",
 	"/lib/modules/$UNAME_RELEASE/.config",
 	"/etc/kernel-config",
@@ -27,6 +29,19 @@ const char *conf_confnames[] = {
 	NULL,
 };
 
+/* If we are doing a cross-compilation, using the host system config is
+ * dangerous (silently broken binaries can be the result).*/
+static const char *__cross_conf_confnames[] = {
+	".config",
+	conf_defname,
+	NULL,
+};
+
+static inline const char **get_conf_confnames(void)
+{
+	return getenv("__KBUILD_CROSS_COMPILING") ? __cross_conf_confnames: __conf_confnames;
+}
+
 static char *conf_expand_value(const signed char *in)
 {
 	struct symbol *sym;
@@ -83,7 +98,7 @@ int conf_read(const char *name)
 	if (name) {
 		in = zconf_fopen(name);
 	} else {
-		const char **names = conf_confnames;
+		const char **names = get_conf_confnames();
 		while ((name = *names++)) {
 			name = conf_expand_value(name);
 			in = zconf_fopen(name);
diff -puN scripts/kconfig/lkc.h~kbuild-fix-crossbuild-defconfig scripts/kconfig/lkc.h
--- vanilla-linux-2.6.9/scripts/kconfig/lkc.h~kbuild-fix-crossbuild-defconfig	2004-11-03 00:18:27.361069952 +0100
+++ vanilla-linux-2.6.9-paolo/scripts/kconfig/lkc.h	2004-11-03 00:18:27.365069344 +0100
@@ -36,7 +36,6 @@ char *zconf_curname(void);
 
 /* confdata.c */
 extern const char conf_def_filename[];
-extern char conf_filename[];
 
 char *conf_get_default_confname(void);
 
diff -puN scripts/kconfig/Makefile~kbuild-fix-crossbuild-defconfig scripts/kconfig/Makefile
--- vanilla-linux-2.6.9/scripts/kconfig/Makefile~kbuild-fix-crossbuild-defconfig	2004-11-03 00:18:27.362069800 +0100
+++ vanilla-linux-2.6.9-paolo/scripts/kconfig/Makefile	2004-11-03 00:18:27.365069344 +0100
@@ -4,6 +4,14 @@
 
 .PHONY: oldconfig xconfig gconfig menuconfig config silentoldconfig
 
+ifneq ($(SUBARCH),$(ARCH))
+  # This is used in scripts/kconfig/confdata.c
+  export __KBUILD_CROSS_COMPILING := 1
+else
+  #Let's prevent interferences from the environment.
+  unexport __KBUILD_CROSS_COMPILING
+endif
+
 xconfig: $(obj)/qconf
 	$< arch/$(ARCH)/Kconfig
 
_

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 2/2] kbuild: fix crossbuild base config
  2004-11-02 23:20 [patch 2/2] kbuild: fix crossbuild base config blaisorblade_spam
@ 2004-11-03 16:56 ` Roman Zippel
  2004-11-03 17:48   ` Tom Rini
  0 siblings, 1 reply; 8+ messages in thread
From: Roman Zippel @ 2004-11-03 16:56 UTC (permalink / raw)
  To: blaisorblade_spam; +Cc: akpm, linux-kernel, julian, mcr, sam

Hi,

On Wed, 3 Nov 2004 blaisorblade_spam@yahoo.it wrote:

> This has actually created not-working UML binaries (since UML is always
> "cross-compiled" for this purpose), as reported by Julian Scheid.

This rather suggests, there is a problem with UML. Either fix your Kconfig 
to prevent nonvalid configurations or detect and report the problem at 
runtime.

> We all agreed on this kind of general, not UML-only fix, and I (Paolo)
> implemented it.

I don't like the two separate lists, it would be easier to just skip all 
absolute path names.
I would also like to avoid this patch at all. If this really should be a 
problem, I'd consider to don't run kconfig at all in this case if there 
is no configuration and instead suggest running defconfig (or one of 
machine specific config targets) first.

bye, Roman

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 2/2] kbuild: fix crossbuild base config
  2004-11-03 16:56 ` Roman Zippel
@ 2004-11-03 17:48   ` Tom Rini
  2004-11-03 18:19     ` Roman Zippel
  0 siblings, 1 reply; 8+ messages in thread
From: Tom Rini @ 2004-11-03 17:48 UTC (permalink / raw)
  To: Roman Zippel; +Cc: blaisorblade_spam, akpm, linux-kernel, julian, mcr, sam

On Wed, Nov 03, 2004 at 05:56:46PM +0100, Roman Zippel wrote:
> Hi,
> 
> On Wed, 3 Nov 2004 blaisorblade_spam@yahoo.it wrote:
> 
> > This has actually created not-working UML binaries (since UML is always
> > "cross-compiled" for this purpose), as reported by Julian Scheid.
> 
> This rather suggests, there is a problem with UML. Either fix your Kconfig 
> to prevent nonvalid configurations or detect and report the problem at 
> runtime.

No, this is a damn annoying kbuild problem when cross compiling.  It's
just nice that the UML folks run into this too and found a better fix
than deleting the /boot and /lib files from the list.

> > We all agreed on this kind of general, not UML-only fix, and I (Paolo)
> > implemented it.
> 
> I don't like the two separate lists, it would be easier to just skip all 
> absolute path names.
> I would also like to avoid this patch at all. If this really should be a 
> problem, I'd consider to don't run kconfig at all in this case if there 
> is no configuration and instead suggest running defconfig (or one of 
> machine specific config targets) first.

I have a feeling that changing the behavior of 'make {,x,g,q}config' to
fail if there's no .config will upset a lot of users, possibly even more
than would be upset by never looking in /boot or /lib ever.

-- 
Tom Rini
http://gate.crashing.org/~trini/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 2/2] kbuild: fix crossbuild base config
  2004-11-03 17:48   ` Tom Rini
@ 2004-11-03 18:19     ` Roman Zippel
  2004-11-03 18:34       ` Tom Rini
  0 siblings, 1 reply; 8+ messages in thread
From: Roman Zippel @ 2004-11-03 18:19 UTC (permalink / raw)
  To: Tom Rini; +Cc: blaisorblade_spam, akpm, linux-kernel, julian, mcr, sam

Hi,

On Wed, 3 Nov 2004, Tom Rini wrote:

> > > This has actually created not-working UML binaries (since UML is always
> > > "cross-compiled" for this purpose), as reported by Julian Scheid.
> > 
> > This rather suggests, there is a problem with UML. Either fix your Kconfig 
> > to prevent nonvalid configurations or detect and report the problem at 
> > runtime.
> 
> No, this is a damn annoying kbuild problem when cross compiling.

The ability to create a nonworkable UML binary is _not_ a kbuild problem, 
especially in the UML case I would expect it should be possible to avoid 
this.

> > > We all agreed on this kind of general, not UML-only fix, and I (Paolo)
> > > implemented it.
> > 
> > I don't like the two separate lists, it would be easier to just skip all 
> > absolute path names.
> > I would also like to avoid this patch at all. If this really should be a 
> > problem, I'd consider to don't run kconfig at all in this case if there 
> > is no configuration and instead suggest running defconfig (or one of 
> > machine specific config targets) first.
> 
> I have a feeling that changing the behavior of 'make {,x,g,q}config' to
> fail if there's no .config will upset a lot of users, possibly even more
> than would be upset by never looking in /boot or /lib ever.

I'm only talking about cross compiling here. From people who do this, I 
sort of expect, that they know what they do. You can misconfigure a kernel 
in native compiles as well, this patch solves the wrong problem. 
E.g. if someone wrote a patch which stores the arch in .config and warns/ 
refuses to load it for a different configuration, I would accept it 
happily.

bye, Roman

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 2/2] kbuild: fix crossbuild base config
  2004-11-03 18:19     ` Roman Zippel
@ 2004-11-03 18:34       ` Tom Rini
  2004-11-03 20:32         ` Blaisorblade
  2004-11-04  0:04         ` Roman Zippel
  0 siblings, 2 replies; 8+ messages in thread
From: Tom Rini @ 2004-11-03 18:34 UTC (permalink / raw)
  To: Roman Zippel; +Cc: blaisorblade_spam, akpm, linux-kernel, julian, mcr, sam

On Wed, Nov 03, 2004 at 07:19:37PM +0100, Roman Zippel wrote:
> Hi,
> 
> On Wed, 3 Nov 2004, Tom Rini wrote:
> 
> > > > This has actually created not-working UML binaries (since UML is always
> > > > "cross-compiled" for this purpose), as reported by Julian Scheid.
> > > 
> > > This rather suggests, there is a problem with UML. Either fix your Kconfig 
> > > to prevent nonvalid configurations or detect and report the problem at 
> > > runtime.
> > 
> > No, this is a damn annoying kbuild problem when cross compiling.
> 
> The ability to create a nonworkable UML binary is _not_ a kbuild problem, 
> especially in the UML case I would expect it should be possible to avoid 
> this.

How about how easy it is to create a totally bogus config for any arch?
This isn't a UML problem, this is a cross compiling for any arch
problem.

> > > > We all agreed on this kind of general, not UML-only fix, and I (Paolo)
> > > > implemented it.
> > > 
> > > I don't like the two separate lists, it would be easier to just skip all 
> > > absolute path names.
> > > I would also like to avoid this patch at all. If this really should be a 
> > > problem, I'd consider to don't run kconfig at all in this case if there 
> > > is no configuration and instead suggest running defconfig (or one of 
> > > machine specific config targets) first.
> > 
> > I have a feeling that changing the behavior of 'make {,x,g,q}config' to
> > fail if there's no .config will upset a lot of users, possibly even more
> > than would be upset by never looking in /boot or /lib ever.
> 
> I'm only talking about cross compiling here. From people who do this, I 
> sort of expect, that they know what they do.

The following argument makes less sense, possibly, as 2.6 lives on, but
this is new breakage for people moving up from 2.4 that just looked in
.config and arch/$(ARCH)/defconfig and who don't otherwise know that
things have been changed or broken, depending on how you look at it.

> You can misconfigure a kernel 
> in native compiles as well, this patch solves the wrong problem. 

I disagree.  This solves the "why did the kernel decide to look at
/boot/config when it really should have known better" problem.

> E.g. if someone wrote a patch which stores the arch in .config and warns/ 
> refuses to load it for a different configuration, I would accept it 
> happily.

We already have part of this, except I don't know for certain of
CONFIG_ARCH == CONFIG_$(SUBARCH) (... to mix syntax all the hell up).

-- 
Tom Rini
http://gate.crashing.org/~trini/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 2/2] kbuild: fix crossbuild base config
  2004-11-03 18:34       ` Tom Rini
@ 2004-11-03 20:32         ` Blaisorblade
  2004-11-04  0:06           ` Roman Zippel
  2004-11-04  0:04         ` Roman Zippel
  1 sibling, 1 reply; 8+ messages in thread
From: Blaisorblade @ 2004-11-03 20:32 UTC (permalink / raw)
  To: Tom Rini; +Cc: Roman Zippel, linux-kernel, julian, mcr, sam

On Wednesday 03 November 2004 19:34, Tom Rini wrote:
> On Wed, Nov 03, 2004 at 07:19:37PM +0100, Roman Zippel wrote:
> > Hi,
> >
> > On Wed, 3 Nov 2004, Tom Rini wrote:
> > > > > This has actually created not-working UML binaries (since UML is
> > > > > always "cross-compiled" for this purpose), as reported by Julian
> > > > > Scheid.

> > > > This rather suggests, there is a problem with UML. Either fix your
> > > > Kconfig to prevent nonvalid configurations or detect and report the
> > > > problem at runtime.

> > > No, this is a damn annoying kbuild problem when cross compiling.

> > The ability to create a nonworkable UML binary is _not_ a kbuild problem,
> > especially in the UML case I would expect it should be possible to avoid
> > this.

I agree that this is a UML problem and I'm addressing it, too (it maybe wasn't 
clear in the original mail, but it's obvious). And maybe, it is even 
unrelated from this issue.

That said, indipendently from the UML issue, it is *meaningless* to read a 
config default from /boot or /etc or /lib/modules. And, in fact, you never 
say "it's a good thing to do in that case".

You later say "If possible, I'd avoid this patch at all". Why? Is this code 
too intrusive, or implementing a wrong check, or bloating the source?

> How about how easy it is to create a totally bogus config for any arch?
> This isn't a UML problem, this is a cross compiling for any arch
> problem.

> > > > > We all agreed on this kind of general, not UML-only fix, and I
> > > > > (Paolo) implemented it.

> > > > I don't like the two separate lists, it would be easier to just skip
> > > > all absolute path names.
Ok, fine. I was dubious on this, too (I went the lazy way because it's just 3 
duplicated lines).

Would it be ok for this to use:

struct confsource {
 char * path;
 int * cross_valid;
}

?

Since you didn't comment on this, I also suppose the env.var idea is fine for 
you.

> > > > I would also like to avoid this patch at all.

> > > > If this really should 
> > > > be a problem, I'd consider to don't run kconfig at all in this case
> > > > if there is no configuration and instead suggest running defconfig
> > > > (or one of machine specific config targets) first.

When there is no .config and no other source, the last resort is taking the 
defaults from defconfig, normally, isn't it? So, when cross-compiling, that 
should still be correct.

> > > I have a feeling that changing the behavior of 'make {,x,g,q}config' to
> > > fail if there's no .config will upset a lot of users, possibly even
> > > more than would be upset by never looking in /boot or /lib ever.

> > I'm only talking about cross compiling here. From people who do this, I
> > sort of expect, that they know what they do.

* UML is always cross-compiled (even if the compiler is the host one), and 
most UML user *don't* know what they are doing.

* Looking in /boot, /etc or /lib is not documented at all, and "read the 
flaming source" is not a welcome documentation source.

> The following argument makes less sense, possibly, as 2.6 lives on, but
> this is new breakage for people moving up from 2.4 that just looked in
> .config and arch/$(ARCH)/defconfig and who don't otherwise know that
> things have been changed or broken, depending on how you look at it.

> > You can misconfigure a kernel
> > in native compiles as well, this patch solves the wrong problem.

> I disagree.  This solves the "why did the kernel decide to look at
> /boot/config when it really should have known better" problem.

> > E.g. if someone wrote a patch which stores the arch in .config and warns/
> > refuses to load it for a different configuration, I would accept it
> > happily.
Yes, this is another idea, which is also fine, while not excluding the other 
IMHO.
> We already have part of this, except I don't know for certain of
> CONFIG_ARCH == CONFIG_$(SUBARCH) (... to mix syntax all the hell up).

No warning is output. Or better, yes, you get warnings, but tons of not clear 
ones, like "warning, undefined symbol".

UML uses currently CONFIG_USERMODE rather than CONFIG_UM (is this a bug?). I 
have no idea for other archs. Do you suggest using KCONFIG_ARCH= or 
CONFIG_THIS_ARCH= or what?
-- 
Paolo Giarrusso, aka Blaisorblade
Linux registered user n. 292729

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 2/2] kbuild: fix crossbuild base config
  2004-11-03 18:34       ` Tom Rini
  2004-11-03 20:32         ` Blaisorblade
@ 2004-11-04  0:04         ` Roman Zippel
  1 sibling, 0 replies; 8+ messages in thread
From: Roman Zippel @ 2004-11-04  0:04 UTC (permalink / raw)
  To: Tom Rini; +Cc: blaisorblade_spam, akpm, linux-kernel, julian, mcr, sam

Hi,

On Wed, 3 Nov 2004, Tom Rini wrote:

> How about how easy it is to create a totally bogus config for any arch?

I'm open to suggestions, but this patch doesn't solve the problem.

> > You can misconfigure a kernel 
> > in native compiles as well, this patch solves the wrong problem. 
> 
> I disagree.  This solves the "why did the kernel decide to look at
> /boot/config when it really should have known better" problem.

In a lot of other cases it does make sense. The kconfig core shouldn't 
behave differently if we are cross compiling.

bye, Roman

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 2/2] kbuild: fix crossbuild base config
  2004-11-03 20:32         ` Blaisorblade
@ 2004-11-04  0:06           ` Roman Zippel
  0 siblings, 0 replies; 8+ messages in thread
From: Roman Zippel @ 2004-11-04  0:06 UTC (permalink / raw)
  To: Blaisorblade; +Cc: Tom Rini, linux-kernel, julian, mcr, sam

Hi,

On Wed, 3 Nov 2004, Blaisorblade wrote:

> You later say "If possible, I'd avoid this patch at all". Why? Is this code 
> too intrusive, or implementing a wrong check, or bloating the source?

It adds a special case to the kconfig core to make it behave differently, 
but it shouldn't behave differently depending on how the kernel is 
compiled.

> > > E.g. if someone wrote a patch which stores the arch in .config and warns/
> > > refuses to load it for a different configuration, I would accept it
> > > happily.
> Yes, this is another idea, which is also fine, while not excluding the other 
> IMHO.

This is the better solution, because it solves the more general problem, 
when a .config doesn't match the Kconfig and not just your special case.

> > We already have part of this, except I don't know for certain of
> > CONFIG_ARCH == CONFIG_$(SUBARCH) (... to mix syntax all the hell up).
> 
> No warning is output. Or better, yes, you get warnings, but tons of not clear 
> ones, like "warning, undefined symbol".

I don't really expect to use CONFIG_$(SUBARCH) and rather add a real 
CONFIG_ARCH to Kconfig.

bye, Roman


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2004-11-04  0:16 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-11-02 23:20 [patch 2/2] kbuild: fix crossbuild base config blaisorblade_spam
2004-11-03 16:56 ` Roman Zippel
2004-11-03 17:48   ` Tom Rini
2004-11-03 18:19     ` Roman Zippel
2004-11-03 18:34       ` Tom Rini
2004-11-03 20:32         ` Blaisorblade
2004-11-04  0:06           ` Roman Zippel
2004-11-04  0:04         ` Roman Zippel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®