Toolchain upgrades

Michael Labuschke michael at labuschke.de
Thu Jun 8 14:01:43 PDT 2006


hi robert,

first of all good job on the update thing.
sadly i  can't get past glibc-headers in ch5.

the configure fails with

checking for .preinit_array/.init_array/.fini_array support... no
configure: error: Need linker with .init_array/.fini_array support.

i run
../glibc-2.4/configure --prefix=/tools \
            --host=${target} --without-cvs \
            --disable-sanity-checks --with-headers=/tools/include

the host is

binutils 2.16.1
gcc 3.4.5
glibc 2.3.6

after what i goggled. this is a binutils/glibc update problem, but how 
can i update glibc when i can't run configure ? ;)

michael
Robert Connolly schrieb:
> I have attached my preliminary/experimental differences to build HLFS with 
> gcc-4.1.1 and glibc-2.4. Comments are welcome.
>
> robert
>   
> ------------------------------------------------------------------------
>
> # May 28th, 2006
>
> # These are the differences to use GCC-4.1 and Glibc-2.4 with the HLFS-unstable
> # book, available at http://www.linuxfromscratch.org/hlfs/view/unstable/glibc/
>
> # Glibc-2.4 and GCC-4.1 have integrated SSP, so the SSP patches are no longer
> # needed.
>
> # Thanks to CLFS and LFS for some commands I stole :-)
>
> # New/additional patches are available at:
> # http://www.linuxfromscratch.org/patches/downloads/glibc/
> # http://www.linuxfromscratch.org/~robert/new/newpatches/
> # http://www.grsecurity.net/~spender/
>
> # Commands here depend on Sed version 4 or higher, and Perl, as usual.
>
> # I tested this with Binutils-2.16.93, but the testsuite had many failures. Feel
> # free to try HJL Binutils instead.
>
> # - Chapter 5 -
>
> # - Kernel headers (I used linux-2.6.16.18):
> # I dont know if this will be the way kernel headers are installed, but it works
> # for now. It's a good idea to be running this kernel version on the host system,
> # for Glibc.
> # Unpack your kernel source.
>
> make mrproper &&
> make include/linux/version.h &&
> make include/asm &&
> install -d /tools/include/asm &&
> cp -R include/asm/* /tools/include/asm &&
> cp -R include/asm-generic /tools/include &&
> cp -R include/linux /tools/include
>
> # Don't worry about ".config: No such file or directory".
>
> # - Glibc-2.4 headers:
>
> # Break the GCC version sanity check (this doesn't matter because we're only
> # installing the Glibc headers):
>
> sed -e 's/3.4\*/\*/' -i configure
>
> # After 'make install-headers' (just he Glibc version number below was changed):
>
> cp bits/stdio_lim.h /tools/include/bits &&
> touch /tools/include/gnu/stubs.h &&
> cp ../glibc-2.4/nptl/sysdeps/pthread/pthread.h /tools/include &&
> cp ../glibc-2.4/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h \
>     /tools/include/bits
>
> # - Binutils-2.16.93 cross-linker:
> # GCC-4.1 needs binutils-2.16.91 or higher.
> # ftp://sources.redhat.com/pub/binutils/snapshots/binutils-2.16.93.tar.bz2
>
> # After 'make install':
>
> make -C ld clean &&
> make -C ld LIB_PATH=/tools/lib &&
> install ld/ld-new /tools/bin/${target}-ld-new
>
> # Remove the binutils-2.16.93/ and binutils-build/ directories.
>
> # - GCC-4.1.1 cross-compiler:
>
> patch -Np1 -i ../gcc-4.1.1-specs_x86-1.patch
>
> # No need to 'touch ${ldso}'.
>
> # Add '--disable-libssp --disable-libmudflap' to the configure command.
>
> # - Glibc-2.4:
>
> # The ssp patch is no longer needed. The pt_pax and dl_execstack_PaX patches from
> # 2.3.6 still work on 2.4.
>
> tar xf ../glibc-libidn-2.4.tar.bz2 &&
> mv glibc-libidn-2.4 libidn
>
> # This patch stops localedef from crashing while running a PaX kernel:
>
> patch -Np1 -i ../glibc-2.4-localedef_segfault-1.patch
>
> # This patch is so that we can just use a simple 'make' command, instead of
> # 'make libgcc_eh="" gnulib="-lgcc" static-gnulib="-lgcc"':
>
> patch -Np1 -i ../glibc-2.4-libgcc_eh-1.patch
>
> # Run 'make check' like this:
>
> make -k check >glibc-check-log 2>&1 ; grep Error glibc-check-log
>
> # I couldn't get 'make check' to pass perfectly even under the best conditions.
> # make[2]: [/mnt/hlfs/usr/src/glibc-build/posix/annexc.out] Error 1 (ignored)
> # make[2]: *** [/mnt/hlfs/usr/src/glibc-build/nptl/tst-cancel24.o] Error 1
> # make[1]: *** [nptl/tests] Error 2
> # make[2]: *** [/mnt/hlfs/usr/src/glibc-build/elf/check-localplt.out] Error 1
> # make[1]: *** [elf/tests] Error 2
> # make: *** [check] Error 2
>
> # Install like this:
>
> install -d /tools/etc &&
> touch /tools/etc/ld.so.conf &&
> make install
>
> # - Adjusting toolchain:
>
> mv /tools/bin/${target}-{ld-new,ld} &&
> ln -f /tools/bin/${target}-ld /tools/${target}/bin/ld
>
> # Then test it...
>
> # - Binutils-2.16.93:
>
> # After 'make install':
>
> make -C ld clean &&
> make -C ld LIB_PATH=/usr/lib:/lib &&
> install ld/ld-new /tools/bin/ld-new
>
> # Remove the binutils-2.16.93/ and binutils-build/ directories.
>
> # - GCC-4.1:
>
> # Don't use the SSP patch, or the version.c sed command.
>
> # The nofixincludes patch is replaced by this:
>
> sed 's@\./fixinc\.sh at -c true@' -i gcc/Makefile.in
>
> #
>
> patch -Np1 -i ../gcc-4.1.1-specs_x86-1.patch
>
> # GCC-4.1.1 does not detect SSP when Glibc is installed to non-standard locations,
> # like /tools. Fix that:
>
> sed -e 's@\=\/usr\/include@\=\/tools\/include@' -i gcc/configure
>
> # GCC will still build and install libssp, but gcc won't use it.
>
> # 'make', 'make bootstrap', or 'make profiledbootstrap', whichever you prefer.
> # 'make bootstrap' is probably a good idea, but this gcc is being built by the
> # same version of gcc, so it may not make a difference.
>
> # - Adding hardened specs:
>
> # This requires Perl on your host system.
> # Get:
> # http://www.linuxfromscratch.org/~robert/new/newpatches/hardened-specs.sh
>
> install hardened-specs.sh /tools/bin/hardened-specs &&
> gcc -dumpspecs > `dirname $(gcc -print-libgcc-file-name)`/specs &&
> /tools/bin/hardened-specs
>
> # The two lines with __guard need to be removed from test.c for it to compile.
> # Glibc's SSP does not use __guard anymore, but Glibc's testsuite will also run
> # tests for SSP in chapter 6 to conferm it is working properly.
>
> # - Chapter 6 -
>
> # - Kernel headers (for Glibc):
>
> # Unpack the kernel.
>
> patch --no-backup-if-mismatch -Np1 -i \
>     ../linux-libc-headers-2.6.12.0-pseudo_random-1.patch &&
> patch --no-backup-if-mismatch -Np1 -i \
>     ../linux-libc-headers-2.6.12.0-unistd_x86_PIC-1.patch &&
> make mrproper &&
> make include/linux/version.h &&
> make include/asm &&
> mkdir /usr/src/glibcheaders &&
> cp -HR include/asm /usr/src/glibcheaders &&
> cp -R include/asm-generic /usr/src/glibcheaders &&
> cp -R include/linux /usr/src/glibcheaders &&
> touch /usr/src/glibcheaders/linux/autoconf.h
>
> # - Glibc-2.4:
>
> tar xf ../glibc-libidn-2.4.tar.bz2 &&
> mv glibc-libidn-2.4 libidn
>
> # Don't forget to apply the dl_execstack_PaX and pt_pax patches. Don't use the
> # fstack_protector patch for now.
>
> patch -Np1 -i ../glibc-2.4-localedef_segfault-1.patch
>
> # The glibc-2.3.6-arc4random-2.patch is now optional. Glibc and uClibc have moved
> # the SSP functions to ld.so (rtld). In order to use arc4random with SSP the
> # arc4random code would also need to be moved to ld.so, and that's not a sane idea.
> # Some packages, like OpenSSL, OpenNTPD, and BIND can still use arc4random via
> # libc if it is available.
>
> # If you want to preserve your kernel entropy you should use /dev/erandom instead
> # of /dev/urandom for SSP. This is especially important for servers with little
> # or no keyboard and mouse activity. Note: doing this while compiling Glibc on a
> # vanilla kernel may cause a couple test failures because erandom doesn't exist.
> # To do that enter this:
>
> sed -e 's/urandom/erandom/' -i sysdeps/unix/sysv/linux/dl-osinfo.h
>
> # Add --enable-stackguard-randomization to have Glibc use urandom/erandom to generate
> # random canary values used with SSP.
>
> # Add '--with-headers=/usr/src/glibcheaders' to point Glibc to the raw kernel headers.
>
> # This 'make check' resulted the same as chapter 5.
>
> # - Sanitized headers:
> # http://download.fedora.redhat.com/pub/fedora/linux/core/development/source/SRPMS/\
> #	glibc-kernheaders-3.0-??.src.rpm
>
> # You'll need to rpm2tgz this package, then unpack it. Inside there's another
> # tarball.
>
> tar xf glibc-kernheaders-2.6.??-?.????_FC6.tar.bz2 &&
> cd usr/include/ &&
> cp -R asm-i386 /usr/include/asm &&
> cp -R asm-generic /usr/include &&
> cp -R linux /usr/include
>
> # - Adjusting toolchain:
>
> install /tools/bin/ld{-new,} &&
> perl -pi -e 's:/tools${ldso}:${ldso}:g;' \
> 	-e 's@\*startfile_prefix_spec:\n@$_/usr/lib/@g;' \
> 	`dirname $(gcc -print-libgcc-file-name)`/specs
>
>
> # - Binutils-2.16.93:
>
> # To do 'make check':
>
> make CC_FOR_TARGET="gcc -no-pie -fno-stack-protector" -k check
>
> # However, many of the tests won't pass (I'm pretty sure this is a problem with
> # the binutils snapshot, and not HLFS). Binutils tests are also sensitive to CFLAGS.
>
> # - GCC-4.1.1:
>
> # No patches are needed (with Glibc).
>
> # Fix libiberty/Makefile.in:
>
> sed -e 's/install_to_$(INSTALL_DEST) //' -i libiberty/Makefile.in
>
> # Disable fixincludes if you want:
>
> sed 's@\./fixinc\.sh at -c true@' -i gcc/Makefile.in
>
> # Fix gccbug:
>
> sed 's/@have_mktemp_command@/yes/' -i gcc/gccbug.in
>
> # Configure GCC...
>
> # Compile GCC with -fstack-protector and -pie:
>
> make CFLAGS="-fstack-protector-all -fPIC -fomit-frame-pointer -O2" \
> 	CXXFLAGS="-fstack-protector-all -fPIC -fomit-frame-pointer -O2" \
> 	LDFLAGS="-z relro -z now -pie"
>
> # Use BOOT_CFLAGS, BOOT_CXXFLAGS, and BOOT_LDFLAGS, if you are using
> # 'make bootstrap'.
>
> # Maybe one day I'll figure out how to stick -fPIE in GCC's build, so it runs
> # more optimally. Alternately the specs can be hardcoded with a patch.
>
> # After 'make install':
>
> gcc -dumpspecs > `dirname $(gcc -print-libgcc-file-name)`/specs &&
> /tools/bin/hardened-specs
>
> # - Kernel
>
> # The pseudo_random kernel patch is also optional, but only if you are not using
> # the arc4random libc patch, and you are not using /dev/erandom with SSP. It is
> # advisable to use the pseudo_random kernel patch.
>
> # It should be downhill after this, aside from gcc-4.1.1 issues. Now I need to
> # get this working with uClibc too, and see if it can be cleaned up better.
>
> # robert - ashes
>
>   



More information about the hlfs-dev mailing list