[uClinux-dev] [patch] ucfront-ld and CONFIG_DEFAULTS_LIBC_NONE

John Williams jwilliams at itee.uq.edu.au
Sun Feb 25 23:34:44 EST 2007


Hi,

ucfront-ld tool chokes on the "NONE" libc option (for standalone 
toolchains with built-in uClibc, for example).

Dumping the environment inside config/common/config.arch, I have:

CONFIG_DEFAULTS_LIBC_NONE=y
CONFIG_LIBCDIR=

Here's what ucfront-ld says about that:

FATAL: Could not determine libc. Are $CONFIG_DEFAULTS_LIBC_... and 
$CONFIG_LIBCDIR set correctly?

Obviously in the LIBC_NONE case ucfront-ld doesn't have a lot to do, but 
one place it is used is when common/config.arch tests linker support for 
  --fatal-warnings:

      ifeq "$(shell $(LD) --fatal-warnings 2>&1 | grep 'unrecogni.ed 
option')" ""
             # Linker warnings are almost always a sign of badness
             LDFLAGS  += -Wl,--fatal-warnings
     endif

With LIBC_NONE, ucfront-ld doesn't get as far as invoking $(CROSS)-ld - 
it just pukes about LIBCDIR.

ucfront-ld assumes that if it's CONFIG_DEFAULTS_LIBC_NONE, then 
CONFIG_LIBCDIR should not be set.  This is wrong, CONFIG_LIBCDIR is set, 
but empty.   There's another error whereby it would pass an empty 
libdirectory on the command line, so we'd get

$(LD) ... -L {nothing} ...

which is also bogus.

Attached patch seems to work OK here, but I couldn't actually find any 
dist apps that explicitly invoke the linker - all seem to do it via 
$(GCC).  Any comments?

Thanks,

John
-------------- next part --------------
Index: tools/ucfront/ucfront-ld.c
===================================================================
--- tools/ucfront/ucfront-ld.c	(revision 2231)
+++ tools/ucfront/ucfront-ld.c	(working copy)
@@ -282,6 +282,9 @@
 			x_asprintf(&libc_libdir, "%s/lib/%s", rootdir, config_libcdir);
 		}
 	}
+	else if (getenv("CONFIG_DEFAULTS_LIBC_NONE")) {
+		libtype = LIBTYPE_NONE;
+	}
 	else {
 		fatal("Could not determine libc. Are $CONFIG_DEFAULTS_LIBC_... and $CONFIG_LIBCDIR set correctly?"); 
 	}
@@ -325,8 +328,10 @@
 	if (!nostdlib) {
 		args_add(stripped_args, "-nostdlib");
 
-		args_add(stripped_args, "-L");
-		args_add(stripped_args, libc_libdir);
+		if(libc_libdir) {
+			args_add(stripped_args, "-L");
+			args_add(stripped_args, libc_libdir);
+		}
 
 		x_asprintf(&e, "%s/lib", rootdir);
 		args_add(stripped_args, "-L");


More information about the uClinux-dev mailing list