10.8. EGLIBC-2.15 N32

The EGLIBC package contains the main C library. This library provides the basic routines for allocating memory, searching directories, opening and closing files, reading and writing files, string handling, pattern matching, arithmetic, and so on.

10.8.1. Installation of EGLIBC

At the end of the installation, the build system will run a sanity test to make sure everything installed properly. This script will attempt to test for a library that is only used in the test suite and is never installed. Prevent the script from testing for this library with the following command:

sed -i 's/\(&& $name ne\) "db1"/ & \1 "nss_test1"/' scripts/test-installation.pl

This same script performs its tests by attempting to compile test programs against certain libraries. However it does not specify the ld.so, and our toolchain is still configured to use the one in /tools. The following set of commands will force the script to use the complete path of the new ld.so that was just installed:

LINKER=$(readelf -l /tools/bin/bash | sed -n 's@.*interpret.*/tools\(.*\)]$@\1@p')
sed -i "s|libs -o|libs -L/usr/lib32 -Wl,-dynamic-linker=${LINKER} -o|" \
  scripts/test-installation.pl
unset LINKER

The following patch fixes an issue that can cause ALSA to crash:

patch -Np1 -i ../eglibc-2.15-fixes-1.patch

The EGLIBC build system is self-contained and will install perfectly, even though the compiler specs file and linker are still pointing at /tools. The specs and linker cannot be adjusted before the EGLIBC install because the EGLIBC Autoconf tests would give false results and defeat the goal of achieving a clean build.

MIPS is not supported in the main EGLIBC tree, so we need the eglibc-ports tarball. Unpack eglibc-ports-2.15-r21467:

tar -xvf ../eglibc-ports-2.15-r21467.tar.xz

The following will cause EGLIBC to use an absolute path to the ldd-rewrite-script instead of a relative path:

cp -v config.make.in{,.orig}
sed '/ldd-rewrite-script/s:@:${objdir}/&:' config.make.in.orig > config.make.in

The EGLIBC documentation recommends building EGLIBC outside of the source directory in a dedicated build directory:

mkdir -v ../eglibc-build
cd ../eglibc-build

Tell EGLIBC to install its 32-bit libraries into /lib32:

echo "slibdir=/lib32" >> configparms

Prepare EGLIBC for compilation:

CC="gcc ${BUILDN32}" CXX="g++ ${BUILDN32}" \
    ../eglibc-2.15/configure --prefix=/usr \
    --disable-profile --enable-kernel=2.6.32 \
    --libexecdir=/usr/lib32/eglibc --libdir=/usr/lib32

The meaning of the new configure option:

--libexecdir=/usr/lib32/eglibc

This changes the location of the pt_chown program from its default of /usr/libexec to /usr/lib32/eglibc.

Compile the package:

make
[Important]

Important

The test suite for EGLIBC is considered critical. Do not skip it under any circumstance.

Before running the tests, copy a file from the source tree into our build tree to prevent a couple of test failures, then run the tests:

cp -v ../eglibc-2.15/iconvdata/gconv-modules iconvdata
make -k check 2>&1 | tee eglibc-check-log; grep Error eglibc-check-log

The EGLIBC test suite is highly dependent on certain functions of the host system, in particular the kernel. The posix/annexc test normally fails and you should see Error 1 (ignored) in the output. Apart from this, the EGLIBC test suite is always expected to pass. However, in certain circumstances, some failures are unavoidable. If a test fails because of a missing program (or missing symbolic link), or a segfault, you will see an error code greater than 127 and the details will be in the log. More commonly, tests will fail with Error 2 - for these, the contents of the corresponding .out file, e.g. posix/annexc.out may be informative. Here is a list of the most common issues:

  • The math tests sometimes fail. Certain optimization settings are known to be a factor here.

  • If you have mounted the CLFS partition with the noatime option, the atime test will fail. As mentioned in Section 2.4, “Mounting the New Partition”, do not use the noatime option while building CLFS.

  • When running on older and slower hardware, some tests can fail because of test timeouts being exceeded.

Install the package:

make install

Details on this package are located in Section 10.9.5, “Contents of EGLIBC.”