Commit 6625518cd6 broke cross compiling?

Rob Landley rob at landley.net
Fri Sep 4 20:07:23 UTC 2009


Before the August 25 commit "default ?conf to native arch", I could do this:

make KCONFIG_ALLCONFIG=miniconfig-uClibc.$ARCH allnoconfig &&
make KERNEL_HEADERS="${STAGE_DIR}/include" PREFIX="${STAGE_DIR}/" \
  CROSS="${ARCH}-" RUNTIME_PREFIX=/ DEVEL_PREFIX=/ -j $CPUS \
  install hostutils

The KCONFIG_ALLCONFIG file would specify the architecture it was building for, 
and CROSS= would specified the appropriate cross compiler prefix.  (This is how 
uCLibc has worked for many years now.

Now whenever I'm _not_ building for my host system, it dies trying to build 
x86-64 assembly source with the target toolchain.  For example, when building 
for an armv4l target (see attached miniconfig file), it does:

  AS lib/crt1.o
libc/sysdeps/linux/x86_64/crt1.S: Assembler messages:
libc/sysdeps/linux/x86_64/crt1.S:80: Error: bad instruction `xorl %ebp,%ebp'
libc/sysdeps/linux/x86_64/crt1.S:96: Error: bad instruction `movq %rdx,%r9'
libc/sysdeps/linux/x86_64/crt1.S:97: Error: bad instruction `popq %rsi'
libc/sysdeps/linux/x86_64/crt1.S:98: Error: bad instruction `movq %rsp,%rdx'
libc/sysdeps/linux/x86_64/crt1.S:101: Error: bad instruction `andq $~15,%rsp'
libc/sysdeps/linux/x86_64/crt1.S:103: Error: bad instruction `pushq %rax'
libc/sysdeps/linux/x86_64/crt1.S:107: Error: bad instruction `pushq %rsp'
libc/sysdeps/linux/x86_64/crt1.S:121: Error: bad instruction `movq $main,%rdi'
libc/sysdeps/linux/x86_64/crt1.S:124: Error: bad instruction `movq $_init,
%rcx'
libc/sysdeps/linux/x86_64/crt1.S:125: Error: bad instruction `movq $_fini,%r8'
libc/sysdeps/linux/x86_64/crt1.S:128: Error: bad instruction `call 
__uClibc_main'
libc/sysdeps/linux/x86_64/crt1.S:131: Error: bad instruction `hlt'

And on -j 2 it'll do the same for Scrt1.o on its way out.

Before that commit, it didn't do that.  It seems like a new redundant symbol 
showed up, but there's no way to set it in menuconfig!  Here's the start of the 
resulting .config:

TARGET_ARCH="x86_64"
# TARGET_alpha is not set
TARGET_arm=y
# TARGET_avr32 is not set
# TARGET_bfin is not set

And in menuconfig target architecture is indeed arm, but there's nowhere to set 
TARGET_ARCH.  If I do a forward slash search for TARGET_ARCH it says:

 Symbol: TARGET_ARCH [=x86_64]

Notice the lack of a menu location: it's a hidden symbol.

That's not the target arch, that's the HOST_ARCH.

How do I figure out what magic values I need to stick in the .config to specify 
a SECOND way what target I'm building for?  (Is the powerpc target "ppc" or 
"powerpc"?  Is the sh4 target "superh"?  I see that x86_64 has an underscore 
rather than a dash.  Presumably it's i686 rather than x86 for 32-bit...)

More to the point: what exactly is this change _for_?  What's the point of 
adding a new symbol to redundantly specify information that's already in the 
.config, without even adding kconfig dependencies to see if the two ways of 
specifying it are remotely similar?

Rob
-- 
Latency is more important than throughput. It's that simple. - Linus Torvalds
-------------- next part --------------
TARGET_arm=y
ARCH_WANTS_LITTLE_ENDIAN=y
ARCH_HAS_MMU=y
ARCH_USE_MMU=y
UCLIBC_HAS_FLOATS=y
DO_C99_MATH=y
UCLIBC_HAS_FENV=y
HAVE_SHARED=y
LDSO_CACHE_SUPPORT=y
LDSO_BASE_FILENAME="ld-uClibc.so"
UCLIBC_STATIC_LDCONFIG=y
LDSO_RUNPATH=y
UCLIBC_CTOR_DTOR=y
UCLIBC_HAS_THREADS=y
LINUXTHREADS_OLD=y
UCLIBC_HAS_SYSLOG=y
UCLIBC_HAS_LFS=y
MALLOC=y
MALLOC_GLIBC_COMPAT=y
UCLIBC_DYNAMIC_ATEXIT=y
UCLIBC_SUSV3_LEGACY=y
UCLIBC_SUSV3_LEGACY_MACROS=y
UCLIBC_HAS_SHADOW=y
UCLIBC_HAS_PTY=y
ASSUME_DEVPTS=y
UNIX98PTY_ONLY=y
UCLIBC_HAS_TM_EXTENSIONS=y
UCLIBC_HAS_TZ_CACHING=y
UCLIBC_HAS_TZ_FILE=y
UCLIBC_HAS_TZ_FILE_READ_MANY=y
UCLIBC_LINUX_MODULE_24=y
UCLIBC_LINUX_SPECIFIC=y
UCLIBC_HAS_GNU_ERROR=y
UCLIBC_BSD_SPECIFIC=y
UCLIBC_HAS_BSD_ERR=y
UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y
UCLIBC_HAS_OBSOLETE_SYSV_SIGNAL=y
UCLIBC_NTP_LEGACY=y
UCLIBC_SV4_DEPRECATED=y
UCLIBC_HAS_EPOLL=y
UCLIBC_HAS_XATTR=y
UCLIBC_HAS_PROFILING=y
UCLIBC_HAS_CRYPT_IMPL=y
UCLIBC_HAS_NETWORK_SUPPORT=y
UCLIBC_HAS_IPV4=y
UCLIBC_HAS_IPV6=y
UCLIBC_HAS_RPC=y
UCLIBC_HAS_FULL_RPC=y
UCLIBC_HAS_REENTRANT_RPC=y
UCLIBC_HAS_STRING_GENERIC_OPT=y
UCLIBC_HAS_STRING_ARCH_OPT=y
UCLIBC_HAS_CTYPE_TABLES=y
UCLIBC_HAS_CTYPE_SIGNED=y
UCLIBC_HAS_WCHAR=y
UCLIBC_HAS_STDIO_GETC_MACRO=y
UCLIBC_HAS_STDIO_PUTC_MACRO=y
UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
UCLIBC_HAS_PRINTF_M_SPEC=y
UCLIBC_HAS_ERRNO_MESSAGES=y
UCLIBC_HAS_SIGNUM_MESSAGES=y
UCLIBC_HAS_GNU_GETOPT=y
UCLIBC_HAS_GNU_GETSUBOPT=y
UCLIBC_HAS_REGEX=y
UCLIBC_HAS_REGEX_OLD=y
UCLIBC_HAS_FNMATCH=y
UCLIBC_HAS_FNMATCH_OLD=y
UCLIBC_HAS_GLOB=y
UCLIBC_HAS_GNU_GLOB=y
UCLIBC_BUILD_RELRO=y
UCLIBC_BUILD_NOEXECSTACK=y


More information about the uClibc mailing list