Bart De VOS pointed out that removing absolute paths from the libc linker scripts is plainly wrong.
It dates from dawn ages of the original crosstool code, and is not well explained. At that time, binutils might not understand the sysroot stuff, and it was necessary to remove absolute paths in that case.
/trunk/scripts/build/libc/glibc.sh | 14 2 12 0 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)
1 Applies to both glibc-2.2.5 and glibc-2.3.2, and probably glibc cvs as of Aug 2004.
2 Needed to build glibc with linux kernels 2.4.23 or higher on ARM,
5 ../sysdeps/unix/sysv/linux/arm/ioperm.c: In function `init_iosys':
6 ../sysdeps/unix/sysv/linux/arm/ioperm.c:103: error: `BUS_ISA' undeclared (first use in this function)
7 ../sysdeps/unix/sysv/linux/arm/ioperm.c:103: error: (Each undeclared identifier is reported only once
8 ../sysdeps/unix/sysv/linux/arm/ioperm.c:103: error: for each function it appears in.)
9 ../sysdeps/unix/sysv/linux/arm/ioperm.c:103: error: initializer element is not constant
10 ../sysdeps/unix/sysv/linux/arm/ioperm.c:103: error: (near initialization for `iobase_name[1]')
11 ../sysdeps/unix/sysv/linux/arm/ioperm.c:104: error: initializer element is not constant
12 ../sysdeps/unix/sysv/linux/arm/ioperm.c:104: error: (near initialization for `ioshift_name[1]')
13 make[2]: *** [/home/dank/crosstool-0.28/build/arm-softfloat-linux-gnu/gcc-3.3.4-glibc-2.2.5/build-glibc/misc/ioperm.o] Error 1
15 cf. "[SYSCTL] BUS_ISA -> CTL_BUS_ISA", http://www.ussg.iu.edu/hypermail/linux/kernel/0311.0/0529.html
17 --- glibc-2.3.2/sysdeps/unix/sysv/linux/arm/ioperm.c.old 2003-02-20 14:22:24.000000000 -0800
18 +++ glibc-2.3.2/sysdeps/unix/sysv/linux/arm/ioperm.c 2004-01-31 16:01:50.000000000 -0800
21 #include <sys/sysctl.h>
23 +/* see http://www.ussg.iu.edu/hypermail/linux/kernel/0311.0/0529.html */
24 +#include <linux/version.h>
25 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,23))
26 +#define CTL_BUS_ISA BUS_ISA /* and hope it's not the one from linux/input.h */
29 #define PATH_ARM_SYSTYPE "/etc/arm_systype"
30 #define PATH_CPUINFO "/proc/cpuinfo"
33 * Initialize I/O system. There are several ways to get the information
34 * we need. Each is tried in turn until one succeeds.
36 - * 1. Sysctl (CTL_BUS, BUS_ISA, ISA_*). This is the preferred method
37 + * 1. Sysctl (CTL_BUS, CTL_BUS_ISA, ISA_*). This is the preferred method
38 * but not all kernels support it.
40 * 2. Read the value (not the contents) of symlink PATH_ARM_SYSTYPE.
45 - static int iobase_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_BASE };
46 - static int ioshift_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_SHIFT };
47 + static int iobase_name[] = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_BASE };
48 + static int ioshift_name[] = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_SHIFT };
49 size_t len = sizeof(io.base);
51 if (! sysctl (iobase_name, 3, &io.io_base, &len, NULL, 0)
53 Signed-off-by: Robert P. J. Day <rpjday@mindspring.com>