From bbeb390b2d475d79ad5f8cabf3b69f5a52fbd3a8 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 6 Aug 2012 18:44:39 +0200 Subject: [PATCH 1/5] Install cpuid.h to toolchain. --- lfs/cleanup-toolchain | 3 + src/headers/cpuid.h | 177 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 src/headers/cpuid.h diff --git a/lfs/cleanup-toolchain b/lfs/cleanup-toolchain index 306b781c2..a200c2b6d 100644 --- a/lfs/cleanup-toolchain +++ b/lfs/cleanup-toolchain @@ -67,6 +67,9 @@ ifeq "$(PASS)" "2" -strip --strip-unneeded /tools/{,s}bin/* rm -rfv /tools/{info,man} /usr/local/man chown -R root:root /tools + + # Install CPUID header. + install -m 644 -v $(DIR_SRC)/headers/cpuid.h /tools/include endif ifeq "$(PASS)" "3" mv -v /tools/bin/{ld,ld-old} diff --git a/src/headers/cpuid.h b/src/headers/cpuid.h new file mode 100644 index 000000000..b5258652e --- /dev/null +++ b/src/headers/cpuid.h @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. + * + * This file is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 3, or (at your option) any + * later version. + * + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * Under Section 7 of GPL version 3, you are granted additional + * permissions described in the GCC Runtime Library Exception, version + * 3.1, as published by the Free Software Foundation. + * + * You should have received a copy of the GNU General Public License and + * a copy of the GCC Runtime Library Exception along with this program; + * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + * . + */ + +/* %ecx */ +#define bit_SSE3 (1 << 0) +#define bit_PCLMUL (1 << 1) +#define bit_SSSE3 (1 << 9) +#define bit_FMA (1 << 12) +#define bit_CMPXCHG16B (1 << 13) +#define bit_SSE4_1 (1 << 19) +#define bit_SSE4_2 (1 << 20) +#define bit_POPCNT (1 << 23) +#define bit_AES (1 << 25) +#define bit_XSAVE (1 << 26) +#define bit_OSXSAVE (1 << 27) +#define bit_AVX (1 << 28) + +/* %edx */ +#define bit_CMPXCHG8B (1 << 8) +#define bit_CMOV (1 << 15) +#define bit_MMX (1 << 23) +#define bit_FXSAVE (1 << 24) +#define bit_SSE (1 << 25) +#define bit_SSE2 (1 << 26) + +/* Extended Features */ +/* %ecx */ +#define bit_LAHF_LM (1 << 0) +#define bit_SSE4a (1 << 6) +#define bit_SSE5 (1 << 11) + +/* %edx */ +#define bit_LM (1 << 29) +#define bit_3DNOWP (1 << 30) +#define bit_3DNOW (1 << 31) + + +#if defined(__i386__) && defined(__PIC__) +/* %ebx may be the PIC register. */ +#if __GNUC__ >= 3 +#define __cpuid(level, a, b, c, d) \ + __asm__ ("xchg{l}\t{%%}ebx, %1\n\t" \ + "cpuid\n\t" \ + "xchg{l}\t{%%}ebx, %1\n\t" \ + : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ + : "0" (level)) + +#define __cpuid_count(level, count, a, b, c, d) \ + __asm__ ("xchg{l}\t{%%}ebx, %1\n\t" \ + "cpuid\n\t" \ + "xchg{l}\t{%%}ebx, %1\n\t" \ + : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ + : "0" (level), "2" (count)) +#else +/* Host GCCs older than 3.0 weren't supporting Intel asm syntax + nor alternatives in i386 code. */ +#define __cpuid(level, a, b, c, d) \ + __asm__ ("xchgl\t%%ebx, %1\n\t" \ + "cpuid\n\t" \ + "xchgl\t%%ebx, %1\n\t" \ + : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ + : "0" (level)) + +#define __cpuid_count(level, count, a, b, c, d) \ + __asm__ ("xchgl\t%%ebx, %1\n\t" \ + "cpuid\n\t" \ + "xchgl\t%%ebx, %1\n\t" \ + : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ + : "0" (level), "2" (count)) +#endif +#else +#define __cpuid(level, a, b, c, d) \ + __asm__ ("cpuid\n\t" \ + : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ + : "0" (level)) + +#define __cpuid_count(level, count, a, b, c, d) \ + __asm__ ("cpuid\n\t" \ + : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ + : "0" (level), "2" (count)) +#endif + +/* Return highest supported input value for cpuid instruction. ext can + be either 0x0 or 0x8000000 to return highest supported value for + basic or extended cpuid information. Function returns 0 if cpuid + is not supported or whatever cpuid returns in eax register. If sig + pointer is non-null, then first four bytes of the signature + (as found in ebx register) are returned in location pointed by sig. */ + +static __inline unsigned int +__get_cpuid_max (unsigned int __ext, unsigned int *__sig) +{ + unsigned int __eax, __ebx, __ecx, __edx; + +#ifndef __x86_64__ +#if __GNUC__ >= 3 + /* See if we can use cpuid. On AMD64 we always can. */ + __asm__ ("pushf{l|d}\n\t" + "pushf{l|d}\n\t" + "pop{l}\t%0\n\t" + "mov{l}\t{%0, %1|%1, %0}\n\t" + "xor{l}\t{%2, %0|%0, %2}\n\t" + "push{l}\t%0\n\t" + "popf{l|d}\n\t" + "pushf{l|d}\n\t" + "pop{l}\t%0\n\t" + "popf{l|d}\n\t" + : "=&r" (__eax), "=&r" (__ebx) + : "i" (0x00200000)); +#else +/* Host GCCs older than 3.0 weren't supporting Intel asm syntax + nor alternatives in i386 code. */ + __asm__ ("pushfl\n\t" + "pushfl\n\t" + "popl\t%0\n\t" + "movl\t%0, %1\n\t" + "xorl\t%2, %0\n\t" + "pushl\t%0\n\t" + "popfl\n\t" + "pushfl\n\t" + "popl\t%0\n\t" + "popfl\n\t" + : "=&r" (__eax), "=&r" (__ebx) + : "i" (0x00200000)); +#endif + + if (!((__eax ^ __ebx) & 0x00200000)) + return 0; +#endif + + /* Host supports cpuid. Return highest supported cpuid input value. */ + __cpuid (__ext, __eax, __ebx, __ecx, __edx); + + if (__sig) + *__sig = __ebx; + + return __eax; +} + +/* Return cpuid data for requested cpuid level, as found in returned + eax, ebx, ecx and edx registers. The function checks if cpuid is + supported and returns 1 for valid cpuid information or 0 for + unsupported cpuid level. All pointers are required to be non-null. */ + +static __inline int +__get_cpuid (unsigned int __level, + unsigned int *__eax, unsigned int *__ebx, + unsigned int *__ecx, unsigned int *__edx) +{ + unsigned int __ext = __level & 0x80000000; + + if (__get_cpuid_max (__ext, 0) < __level) + return 0; + + __cpuid (__level, *__eax, *__ebx, *__ecx, *__edx); + return 1; +} From af4bfa79951880aebfa0a6ae22b9f583624ebac9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 6 Aug 2012 20:19:35 +0200 Subject: [PATCH 2/5] glibc: Add some more conifgure flags. Enable experimental malloc and clean up redundant lines. --- lfs/glibc | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/lfs/glibc b/lfs/glibc index 0ce510c9f..b215d3504 100644 --- a/lfs/glibc +++ b/lfs/glibc @@ -36,30 +36,42 @@ DIR_APP = $(DIR_SRC)/$(THISAPP) # ifeq "$(ROOT)" "" TARGET = $(DIR_INFO)/$(THISAPP) - EXTRA_CONFIG = --prefix=/usr \ - --disable-profile --enable-add-ons \ - --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc + EXTRA_CONFIG = \ + --prefix=/usr \ + --libexecdir=/usr/lib/glibc EXTRA_MAKE = EXTRA_INSTALL = else TARGET = $(DIR_INFO)/$(THISAPP)-tools - EXTRA_CONFIG = --prefix=/tools \ - --disable-profile --enable-add-ons \ - --enable-kernel=2.6.0 --with-binutils=/tools/bin \ - --without-gd --with-headers=/tools/include \ - --without-selinux + EXTRA_CONFIG = \ + --prefix=/tools \ + --with-binutils=/tools/bin \ + --with-headers=/tools/include \ + --without-gd EXTRA_MAKE = EXTRA_INSTALL = endif EXTRA_CONFIG += --build=$(BUILDTARGET) +# Enable some extra optimization for the glibc code. +export CFLAGS := $(subst -O2,-O3,$(CFLAGS)) + ifeq "$(MACHINE_TYPE)" "arm" # Disable hardware FP for ARM. EXTRA_CONFIG += \ --without-fp endif +# Add some general configuration flags +EXTRA_CONFIG += \ + --disable-profile \ + --enable-kernel=2.6.16 \ + --enable-add-ons \ + --without-selinux \ + --enable-experimental-malloc \ + --enable-bind-now + ############################################################################### # Top-level Rules ############################################################################### From 4d156ef691138d5da786db9507e1078882cdece6 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 6 Aug 2012 21:59:53 +0200 Subject: [PATCH 3/5] libnl: Fix compilation with new glibc. --- lfs/libnl | 1 + src/patches/libnl-1.1-ULONG_MAX.patch | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 src/patches/libnl-1.1-ULONG_MAX.patch diff --git a/lfs/libnl b/lfs/libnl index d1747752e..ea557d913 100644 --- a/lfs/libnl +++ b/lfs/libnl @@ -73,6 +73,7 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/libnl-1.1-ULONG_MAX.patch cd $(DIR_APP) && ln -s /usr/src/linux/include/linux/if_vlan.h \ include/linux/if_vlan.h cd $(DIR_APP) && ln -s /usr/src/linux/include/linux/netfilter/nf_conntrack_common.h \ diff --git a/src/patches/libnl-1.1-ULONG_MAX.patch b/src/patches/libnl-1.1-ULONG_MAX.patch new file mode 100644 index 000000000..ca3dd4013 --- /dev/null +++ b/src/patches/libnl-1.1-ULONG_MAX.patch @@ -0,0 +1,11 @@ +--- libnl-1.1/include/netlink-local.h.orig 2008-06-08 19:09:20.000000000 +0200 ++++ libnl-1.1/include/netlink-local.h 2008-06-08 19:09:33.000000000 +0200 +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + #include + #include + From 2dda66c97dcfcbdef7b2afd83e7b6f80e1316c86 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 6 Aug 2012 22:00:10 +0200 Subject: [PATCH 4/5] openldap: Fix compilation with newer glibc. --- lfs/openldap | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lfs/openldap b/lfs/openldap index 9771ae441..aca5ed75d 100644 --- a/lfs/openldap +++ b/lfs/openldap @@ -36,6 +36,8 @@ PAK_VER = 2 DEPS = "" +export CPPFLAGS = -D_GNU_SOURCE + ############################################################################### # Top-level Rules ############################################################################### From 72d2cdfde7bee20c96b82f592ea28d273ff1801b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 6 Aug 2012 22:00:25 +0200 Subject: [PATCH 5/5] xfsprogs: Fix compilation with newer glibc. --- lfs/xfsprogs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lfs/xfsprogs b/lfs/xfsprogs index 0dd83d33a..2a548be83 100644 --- a/lfs/xfsprogs +++ b/lfs/xfsprogs @@ -77,6 +77,9 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && sed -i "/include/a #include " \ + libxfs/xfs_ialloc.c quota/quot.c mdrestore/xfs_mdrestore.c \ + rtcp/xfs_rtcp.c cd $(DIR_APP) && make DEBUG=-DNDEBUG INSTALL_USER=root INSTALL_GROUP=root \ LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes" cd $(DIR_APP) && make install