I am not expert, so take my opinion with a grain of salt.
On Tuesday 09 December 2008 02:54, Rob Landley wrote:
> So once again I'm trying to add readelf and ldd to my cross compiler
> toolchain, to run on the host but examine target binaries, and I'm having
> problems.
You need "make hostutils". I think you discovered this already.
>
> I pointed at this back in February 2007:
>
> Let's start with adding "readelf" and "ldd" to the cross compiler. This means
> they need to run on the host, and interpret target binaries. So let's try
> doing a non-cross-compile "make utils" on an x86-64 host with an armv4l config
> file:
>
> > $ make utils
> > CC utils/readelf
> > cc1: error: unrecognized command line option "-mlittle-endian"
> > make[1]: *** [../utils/readelf] Error 1
> > make: *** [utils] Error 2
As a first step, I'd like to replace utils/Makefile.in with something
remotely readable, without changing the result. See attachment.
This is what "make V=1 utils" does:
make CROSS="" CC="gcc" -C utils
gcc ../utils/readelf.c -o ../utils/readelf \
-include ../include/libc-symbols.h \
-Wall -Wstrict-prototypes -fno-strict-aliasing -ffunction-sections \
-fdata-sections -m32 -march=i486 -fno-stack-protector -funsigned-char \
-fno-builtin -nostdinc -I../include -I. -I../libc/sysdeps/linux/i386 \
-fno-asm -DUCLIBC_INTERNAL -std=gnu99 -Os -funit-at-a-time \
-fno-tree-loop-optimize -fno-tree-dominator-opts -fno-strength-reduce \
-fomit-frame-pointer -m32 -mpreferred-stack-boundary=2 -falign-functions=1 \
-falign-jumps=1 -falign-labels=1 -falign-loops=1 \
-I../libpthread/linuxthreads/sysdeps/unix/sysv/linux/i386 \
-I../libpthread/linuxthreads/sysdeps/i386 \
-I../libpthread/linuxthreads/sysdeps/unix/sysv/linux \
-I../libpthread/linuxthreads/sysdeps/pthread \
-I../libpthread/linuxthreads \
-I../libpthread -I../../linux-2.6.27.9-i386/usr/include/ \
-I/.share/usr/app/gcc-4.2.1/bin/../lib/gcc/i386-pc-linux-gnu/4.2.1//include-fixed
\
-I/.share/usr/app/gcc-4.2.1/bin/../lib/gcc/i386-pc-linux-gnu/4.2.1/include \
-DNDEBUG -DNOT_IN_libc -B../lib -Wl,-rpath-link,../lib \
-MT ../utils/readelf -MD -MP -MF ../utils/.readelf.dep
strip -x -R .note -R .comment ../utils/readelf
This one succeeds. However, it is quite obvious that gcc flags are bogus.
makefile composed it as if it builds part of the libc.
This is extremely fragile. Much better wuld be to install
the library (libs and headers) and use those, as "normal"
library users would do.
No wonder that attempt to link ldconfig fails:
gcc ../utils/ldconfig.c ../utils/chroot_realpath.c -o ../utils/ldconfig \
-include ../include/libc-symbols.h \
-Wall -Wstrict-prototypes -fno-strict-aliasing -ffunction-sections \
-fdata-sections -m32 -march=i486 -fno-stack-protector -funsigned-char \
-fno-builtin -nostdinc -I../include -I. -I../libc/sysdeps/linux/i386 \
-fno-asm -DUCLIBC_INTERNAL -std=gnu99 -Os -funit-at-a-time \
-fno-tree-loop-optimize -fno-tree-dominator-opts -fno-strength-reduce \
-fomit-frame-pointer -m32 -mpreferred-stack-boundary=2 -falign-functions=1 \
-falign-jumps=1 -falign-labels=1 -falign-loops=1 \
-I../libpthread/linuxthreads/sysdeps/unix/sysv/linux/i386 \
-I../libpthread/linuxthreads/sysdeps/i386 \
-I../libpthread/linuxthreads/sysdeps/unix/sysv/linux \
-I../libpthread/linuxthreads/sysdeps/pthread -I../libpthread/linuxthreads \
-I../libpthread -I../../linux-2.6.27.9-i386/usr/include/ \
-I/.share/usr/app/gcc-4.2.1/bin/../lib/gcc/i386-pc-linux-gnu/4.2.1//include-fixed
\
-I/.share/usr/app/gcc-4.2.1/bin/../lib/gcc/i386-pc-linux-gnu/4.2.1/include \
-DNDEBUG -DNOT_IN_libc -B../lib -Wl,-rpath-link,../lib \
-I../ldso/include \
-DUCLIBC_RUNTIME_PREFIX="./!INSTALL/i386/" -DUCLIBC_LDSO=ld-uClibc.so.0 \
-static -MT ../utils/ldconfig -MD -MP -MF ../utils/.ldconfig.dep
In file included from ../include/bits/posix1_lim.h:153,
from ../include/dirent.h:231,
from ../utils/ldconfig.c:34:
../include/bits/local_lim.h:36:26: error: linux/limits.h: No such file or
directory
In file included from ../include/errno.h:36,
from ../utils/ldconfig.c:38:
../include/bits/errno.h:25:26: error: linux/errno.h: No such file or directory
../utils/ldconfig.c: In function 'is_shlib':
../utils/ldconfig.c:286: warning: pointer targets in passing argument 1 of
'strncmp' differ in signedness
...
I'll try to do something about it.
--
vda
# Makefile for uClibc
#
# Copyright (C) 2000-2008 Erik Andersen <[email protected]>
#
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
# "make utils" flags
CFLAGS-utils := -DNOT_IN_libc $(SSP_ALL_CFLAGS) \
-B$(top_builddir)lib -Wl,-rpath-link,$(top_builddir)lib
pie := $(PIEFLAG) $(LDPIEFLAG)
CFLAGS-ldconfig := -I$(top_srcdir)ldso/include \
-DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" -DUCLIBC_LDSO=$(UCLIBC_LDSO)
ifeq ($(UCLIBC_STATIC_LDCONFIG),y)
CFLAGS-ldconfig += -static
else
CFLAGS-ldconfig += $(pie)
endif
CFLAGS-ldd := -I$(top_srcdir)ldso/include \
-DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" -DUCLIBC_LDSO=$(UCLIBC_LDSO) \
$(pie)
CFLAGS-readelf := $(pie)
# Need CFLAGS-utils explicitely, because the source file is not located in utils
CFLAGS-iconv := $(CFLAGS-utils) $(pie) -DL_iconv_main
CFLAGS-locale := $(CFLAGS-utils)
# "make hostutils" flags
ifeq ($(LDSO_CACHE_SUPPORT),y)
LDSO_CACHE_SUPPORT := -D__LDSO_CACHE_SUPPORT__=1
endif
BUILD_CFLAGS-ldconfig.host := -Wl,-s \
-include $(top_srcdir)include/elf.h \
-I$(top_srcdir)ldso/include \
-DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" -DUCLIBC_LDSO=$(UCLIBC_LDSO) \
$(LDSO_CACHE_SUPPORT) \
BUILD_CFLAGS-ldd.host := -Wl,-s \
-include $(top_srcdir)include/elf.h \
-I$(top_srcdir)ldso/include \
-DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" -DUCLIBC_LDSO=$(UCLIBC_LDSO) \
$(LDSO_CACHE_SUPPORT) \
BUILD_CFLAGS-readelf.host := -Wl,-s \
-include $(top_srcdir)include/elf.h \
# Rules
utils_DIR := $(top_srcdir)utils
utils_OUT := $(top_builddir)utils
DEPS-ldconfig := $(utils_DIR)/chroot_realpath.c
DEPS-ldconfig.host := $(DEPS-ldconfig)
utils_OBJ := readelf
ifeq ($(HAVE_SHARED),y)
utils_OBJ += ldconfig ldd
endif
utils_ICONV_OBJ =
utils_LOCALE_OBJ =
ifeq ($(UCLIBC_HAS_LOCALE),y)
utils_ICONV_OBJ := $(utils_OUT)/iconv
utils_LOCALE_OBJ := $(utils_OUT)/locale
endif
utils_OBJ := $(patsubst %,$(utils_OUT)/%,$(utils_OBJ))
hostutils_OBJ := $(patsubst %,%.host,$(utils_OBJ))
utils: $(utils_OBJ) $(utils_ICONV_OBJ) $(utils_LOCALE_OBJ)
# NOTE: We build the utils AFTER we have a uClibc-targeted toolchain.
$(utils_OBJ): $(utils_OUT)/% : $(utils_DIR)/%.c | $(libc)
$(compile.u)
$(utils_OUT)/iconv: $(top_srcdir)libc/misc/wchar/wchar.c | $(libc)
$(compile.u)
$(utils_OUT)/locale: $(top_srcdir)extra/locale/programs/locale.c | $(libc)
$(compile.u)
hostutils: $(hostutils_OBJ)
$(hostutils_OBJ): $(utils_OUT)/%.host : $(utils_DIR)/%.c
$(hcompile.u)
install-y += utils_install
# This installs both utils and hostutils, so doesn't depend on either.
utils_install: $(addsuffix $(DOTHOST), $(utils_OBJ) $(utils_ICONV_OBJ) $(utils_LOCALE_OBJ))
$(Q)$(INSTALL) -D -m 755 $(utils_OUT)/readelf$(DOTHOST) $(PREFIX)$(DEVEL_PREFIX)bin/readelf
ifeq ($(HAVE_SHARED),y)
$(Q)$(INSTALL) -D -m 755 $(utils_OUT)/ldd$(DOTHOST) $(PREFIX)$(DEVEL_PREFIX)bin/ldd
$(Q)$(INSTALL) -D -m 755 $(utils_OUT)/ldconfig$(DOTHOST) $(PREFIX)$(RUNTIME_PREFIX)sbin/ldconfig
endif
ifeq ($(UCLIBC_HAS_LOCALE),y)
$(Q)$(INSTALL) -D -m 755 $(utils_OUT)/iconv$(DOTHOST) $(PREFIX)$(DEVEL_PREFIX)bin/iconv
$(Q)$(INSTALL) -m 755 $(utils_OUT)/locale$(DOTHOST) $(PREFIX)$(DEVEL_PREFIX)bin/locale
endif
objclean-y += utils_clean
utils_clean:
$(do_rm) $(addprefix $(utils_OUT)/, ldconfig ldd readelf iconv locale *.host)
# This is a hack..
$(Q)$(RM) $(utils_OUT)/.*.dep
_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc