前一篇文章介绍了构建arm-linux-gcc3.4.5,现在介绍gcc4版本的构建 以gcc4.2.4 版本为例
1.首先配置linux内核(同前一篇文章)我用了版本binutils-2.18,配置编译同前
2.编译binutils (同前一篇文章)
3 编译 gcc4.2.4 c编译器
$tar xvjf gcc-4.2.4.tar.bz2
$cd gcc-4.2.4
$mkdir arm-linux
打上补丁
----------------------------------------------------------------------------------------------------------------
diff -Nur gcc-4.2.4/gcc/config/arm/lib1funcs.asm gcc-4.2.4n/gcc/config/arm/lib1funcs.asm
--- gcc-4.2.4/gcc/config/arm/lib1funcs.asm 2006-01-18 15:39:17.000000000 -0500
+++ gcc-4.2.4n/gcc/config/arm/lib1funcs.asm 2010-06-09 23:02:56.000000000 -0400
@@ -996,8 +996,8 @@
FUNC_START div0
stmfd sp!, {r1, lr}
- mov r0, #SIGFPE
- bl SYM(raise) __PLT__
+ bl SYM(__div0) __PLT__
+ mov r0, #0
RETLDM r1
FUNC_END div0
diff -Nur gcc-4.2.4/gcc/config/arm/linux-elf.h gcc-4.2.4n/gcc/config/arm/linux-elf.h
--- gcc-4.2.4/gcc/config/arm/linux-elf.h 2007-09-01 11:28:30.000000000 -0400
+++ gcc-4.2.4n/gcc/config/arm/linux-elf.h 2010-06-09 22:44:54.000000000 -0400
@@ -48,7 +48,7 @@
%{shared:-lc} /
%{!shared:%{profile:-lc_p}%{!profile:-lc}}"
-#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
+/*#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"*/
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
diff -Nur gcc-4.2.4/gcc/config/arm/t-linux gcc-4.2.4n/gcc/config/arm/t-linux
--- gcc-4.2.4/gcc/config/arm/t-linux 2004-05-15 08:41:35.000000000 -0400
+++ gcc-4.2.4n/gcc/config/arm/t-linux 2010-06-10 01:47:36.000000000 -0400
@@ -1,15 +1,32 @@
# Just for these, we omit the frame pointer since it makes such a big
# difference. It is then pointless adding debugging.
-TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC
+TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix
LIBGCC2_DEBUG_CFLAGS = -g0
+ENQUIRE=
LIB1ASMSRC = arm/lib1funcs.asm
-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
+LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx/
+ _bb_init_func _call_via_rX _interwork_call_via_rX /
+ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi /
+ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 /
+ _fixsfsi _fixunssfsi
-# MULTILIB_OPTIONS = mhard-float/msoft-float
-# MULTILIB_DIRNAMES = hard-float soft-float
-# EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o
-# LIBGCC = stmp-multilib
-# INSTALL_LIBGCC = install-multilib
+MULTILIB_OPTIONS = mlittle-endian/mbig-endian mhard-float/msoft-float
+MULTILIB_DIRNAMES = le be hard-float soft-float
+
+EXTRA_MULTILIB_PARTS = crtbegin.o crtbeginS.o crtend.o crtendS.o crti.o crtn.o crtbeginT.o
+
+LIBGCC = stmp-multilib
+INSTALL_LIBGCC = install-multilib
+T_CFLAGS = -Dinhibit_libc -D__gthr_posix_h
+
+$(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES)
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) /
+ -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm
+
+$(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES)
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) /
+ -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm
+
diff -Nur gcc-4.2.4/libjava/java/net/natInetAddressPosix.cc gcc-4.2.4n/libjava/java/net/natInetAddressPosix.cc
--- gcc-4.2.4/libjava/java/net/natInetAddressPosix.cc 2004-08-14 01:04:52.000000000 -0400
+++ gcc-4.2.4n/libjava/java/net/natInetAddressPosix.cc 2010-06-10 01:51:42.000000000 -0400
@@ -40,7 +40,7 @@
#endif
#ifndef HAVE_GETHOSTNAME_DECL
-extern "C" int gethostname (char *name, int namelen);
+extern "C" int gethostname (char *name, unsigned int namelen);
#endif
jbyteArray