summaryrefslogtreecommitdiff
path: root/openembedded
diff options
context:
space:
mode:
Diffstat (limited to 'openembedded')
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/arm-gotoff.dpatch135
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/arm-ldm-peephole.patch91
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/arm-ldm.dpatch148
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/arm-tune.patch9
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/bash3.patch20
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/gcc-uclibc-3.3-100-conf.patch1593
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/gcc-uclibc-3.3-110-conf.patch55
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/gcc-uclibc-3.3-120-softfloat.patch14
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/gcc-uclibc-3.3-200-code.patch3021
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/gcc34-15089.patch19
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/libibery-crosstool.patch683
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/reverse-compare.patch31
-rw-r--r--openembedded/packages/gcc/gcc-3.3.4/sdk-libstdc++-includes.patch48
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/15342.patch22
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/GCC3.4.0VisibilityPatch.diff1100
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/always-fixincperm.patch32
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc-3.4.0-arm-bigendian-uclibc.patch30
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc-3.4.0-arm-bigendian.patch70
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc-3.4.0-arm-lib1asm.patch24
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc-3.4.0-arm-nolibfloat.patch24
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc-3.4.0-arm-softfloat.patch256
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc-3.4.1-uclibc-100-conf.patch442
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc-3.4.1-uclibc-200-locale.patch3246
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc-uclibc-3.4.0-120-softfloat.patch14
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc34-arm-ldm-peephole.patch79
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc34-arm-ldm.patch119
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc34-arm-tune.patch9
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc34-configure.in.patch22
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc34-reverse-compare.patch32
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/gcc34-thumb-support.patch156
-rw-r--r--openembedded/packages/gcc/gcc-3.4.4/sdk-libstdc++-includes.patch22
-rw-r--r--openembedded/packages/gcc/gcc-4.0.2/arm-nolibfloat.patch24
-rw-r--r--openembedded/packages/gcc/gcc-4.0.2/arm-softfloat.patch16
-rw-r--r--openembedded/packages/gcc/gcc-4.0.2/ldflags.patch22
-rw-r--r--openembedded/packages/gcc/gcc-cross-initial_3.3.4.bb28
-rw-r--r--openembedded/packages/gcc/gcc-cross-initial_3.4.4.bb28
-rw-r--r--openembedded/packages/gcc/gcc-cross-initial_4.0.2.bb29
-rw-r--r--openembedded/packages/gcc/gcc-cross_3.3.4.bb100
-rw-r--r--openembedded/packages/gcc/gcc-cross_3.4.4.bb16
-rw-r--r--openembedded/packages/gcc/gcc-cross_4.0.2.bb16
-rw-r--r--openembedded/packages/gcc/gcc_3.3.4.bb176
-rw-r--r--openembedded/packages/gcc/gcc_3.4.4.bb30
-rw-r--r--openembedded/packages/gcc/gcc_4.0.2.bb19
43 files changed, 12070 insertions, 0 deletions
diff --git a/openembedded/packages/gcc/gcc-3.3.4/arm-gotoff.dpatch b/openembedded/packages/gcc/gcc-3.3.4/arm-gotoff.dpatch
new file mode 100644
index 0000000000..610f9430e0
--- /dev/null
+++ b/openembedded/packages/gcc/gcc-3.3.4/arm-gotoff.dpatch
@@ -0,0 +1,135 @@
+#! /bin/sh -e
+
+src=gcc
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+ pdir="-d $3"
+ src=$3/gcc
+elif [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+case "$1" in
+ -patch)
+ patch $pdir -f --no-backup-if-mismatch -p0 --fuzz 10 < $0
+ ;;
+ -unpatch)
+ patch $pdir -f --no-backup-if-mismatch -R -p0 --fuzz 10 < $0
+ ;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+esac
+exit 0
+
+# DP: use GOTOFF not GOT relocs for .LCn and other local symbols;
+# DP: don't use gotoff for non-static functions, even if defined locally
+
+--- gcc/config/arm/arm.c 2003-06-14 15:20:53.000000000 +0100
++++ gcc/config/arm/arm.c 2004-03-06 15:15:32.000000000 +0000
+@@ -2364,6 +2394,40 @@
+ return 1;
+ }
+
++/* Return true if OP is a symbolic operand that resolves locally. */
++
++static int
++local_symbolic_operand (op, mode)
++ rtx op;
++ enum machine_mode mode ATTRIBUTE_UNUSED;
++{
++ if (GET_CODE (op) == CONST
++ && GET_CODE (XEXP (op, 0)) == PLUS
++ && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT)
++ op = XEXP (XEXP (op, 0), 0);
++
++ if (GET_CODE (op) == LABEL_REF)
++ return 1;
++
++ if (GET_CODE (op) != SYMBOL_REF)
++ return 0;
++
++ /* These we've been told are local by varasm and encode_section_info
++ respectively. */
++ if (CONSTANT_POOL_ADDRESS_P (op) || ENCODED_LOCAL_BINDING_ATTR_P (XSTR (op, 0)))
++ return 1;
++
++ /* There is, however, a not insubstantial body of code in the rest of
++ the compiler that assumes it can just stick the results of
++ ASM_GENERATE_INTERNAL_LABEL in a symbol_ref and have done. */
++ /* ??? This is a hack. Should update the body of the compiler to
++ always create a DECL an invoke targetm.encode_section_info. */
++ if (strncmp (arm_strip_name_encoding (XSTR (op, 0)), ".L", 2) == 0)
++ return 1;
++
++ return 0;
++}
++
+ rtx
+ legitimize_pic_address (orig, mode, reg)
+ rtx orig;
+@@ -2404,10 +2468,7 @@
+ else
+ emit_insn (gen_pic_load_addr_thumb (address, orig));
+
+- if ((GET_CODE (orig) == LABEL_REF
+- || (GET_CODE (orig) == SYMBOL_REF &&
+- ENCODED_SHORT_CALL_ATTR_P (XSTR (orig, 0))))
+- && NEED_GOT_RELOC)
++ if (local_symbolic_operand (orig, Pmode) && NEED_GOT_RELOC)
+ pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, address);
+ else
+ {
+@@ -8804,11 +8911,7 @@
+ if (NEED_GOT_RELOC && flag_pic && making_const_table &&
+ (GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == LABEL_REF))
+ {
+- if (GET_CODE (x) == SYMBOL_REF
+- && (CONSTANT_POOL_ADDRESS_P (x)
+- || ENCODED_SHORT_CALL_ATTR_P (XSTR (x, 0))))
+- fputs ("(GOTOFF)", asm_out_file);
+- else if (GET_CODE (x) == LABEL_REF)
++ if (local_symbolic_operand (x, Pmode))
+ fputs ("(GOTOFF)", asm_out_file);
+ else
+ fputs ("(GOT)", asm_out_file);
+@@ -11335,6 +11418,11 @@
+ else if (! TREE_PUBLIC (decl))
+ arm_encode_call_attribute (decl, SHORT_CALL_FLAG_CHAR);
+ }
++
++ if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd'
++ && flag_pic
++ && (*targetm.binds_local_p) (decl))
++ arm_encode_call_attribute (decl, LOCAL_BINDING_FLAG_CHAR);
+ }
+ #endif /* !ARM_PE */
+
+
+--- gcc/config/arm/arm.h Fri Mar 5 18:49:44 2004
++++ gcc/config/arm/arm.h Fri Mar 5 15:04:31 2004
+@@ -1870,6 +1870,7 @@
+ Note, '@' and '*' have already been taken. */
+ #define SHORT_CALL_FLAG_CHAR '^'
+ #define LONG_CALL_FLAG_CHAR '#'
++#define LOCAL_BINDING_FLAG_CHAR '%'
+
+ #define ENCODED_SHORT_CALL_ATTR_P(SYMBOL_NAME) \
+ (*(SYMBOL_NAME) == SHORT_CALL_FLAG_CHAR)
+@@ -1877,6 +1878,9 @@
+ #define ENCODED_LONG_CALL_ATTR_P(SYMBOL_NAME) \
+ (*(SYMBOL_NAME) == LONG_CALL_FLAG_CHAR)
+
++#define ENCODED_LOCAL_BINDING_ATTR_P(SYMBOL_NAME) \
++ (*(SYMBOL_NAME) == LOCAL_BINDING_FLAG_CHAR)
++
+ #ifndef SUBTARGET_NAME_ENCODING_LENGTHS
+ #define SUBTARGET_NAME_ENCODING_LENGTHS
+ #endif
+@@ -1888,6 +1892,7 @@
+ #define ARM_NAME_ENCODING_LENGTHS \
+ case SHORT_CALL_FLAG_CHAR: return 1; \
+ case LONG_CALL_FLAG_CHAR: return 1; \
++ case LOCAL_BINDING_FLAG_CHAR: return 1; \
+ case '*': return 1; \
+ SUBTARGET_NAME_ENCODING_LENGTHS
+
diff --git a/openembedded/packages/gcc/gcc-3.3.4/arm-ldm-peephole.patch b/openembedded/packages/gcc/gcc-3.3.4/arm-ldm-peephole.patch
new file mode 100644
index 0000000000..83b07e0343
--- /dev/null
+++ b/openembedded/packages/gcc/gcc-3.3.4/arm-ldm-peephole.patch
@@ -0,0 +1,91 @@
+2004-03-19 Philip Blundell <philb@gnu.org>
+
+ * config/arm/arm.c (adjacent_mem_locations): Reject location pairs
+ where both offsets are nonzero if target is Harvard architecture.
+ (load_multiple_sequence, store_multiple_sequence): Avoid two-word
+ LDM/STM on XScale unless -Os.
+ * config/arm/arm.md (arith_adjacentmem): Inhibit if tuning for
+ XScale and not -Os.
+ * genpeep.c: Have generated code include flags.h.
+
+--- gcc/genpeep.c~ 2001-12-02 00:04:19.000000000 +0000
++++ gcc/genpeep.c 2004-03-19 11:17:18.000000000 +0000
+@@ -402,6 +402,7 @@
+ printf ("#include \"recog.h\"\n");
+ printf ("#include \"except.h\"\n\n");
+ printf ("#include \"function.h\"\n\n");
++ printf ("#include \"flags.h\"\n\n");
+
+ printf ("#ifdef HAVE_peephole\n");
+ printf ("extern rtx peep_operand[];\n\n");
+
+--- gcc/config/arm/arm.md~ 2004-03-11 15:28:01.000000000 +0000
++++ gcc/config/arm/arm.md 2004-03-19 13:00:03.000000000 +0000
+@@ -7958,13 +7958,16 @@
+ (set_attr "length" "4,8,8")]
+ )
+
++; Try to convert LDR+LDR+arith into [add+]LDM+arith
++; On XScale, LDM is always slower than two LDRs, so only do this if
++; optimising for size.
+ (define_insn "*arith_adjacentmem"
+ [(set (match_operand:SI 0 "s_register_operand" "=r")
+ (match_operator:SI 1 "shiftable_operator"
+ [(match_operand:SI 2 "memory_operand" "m")
+ (match_operand:SI 3 "memory_operand" "m")]))
+ (clobber (match_scratch:SI 4 "=r"))]
+- "TARGET_ARM && adjacent_mem_locations (operands[2], operands[3])"
++ "TARGET_ARM && (!arm_tune_xscale || optimize_size) && adjacent_mem_locations (operands[2], operands[3])"
+ "*
+ {
+ rtx ldm[3];
+@@ -7999,7 +8002,9 @@
+ }
+ if (val1 && val2)
+ {
++ /* This would be a loss on a Harvard core, but adjacent_mem_locations()
++ will prevent it from happening. */
+ rtx ops[3];
+ ldm[0] = ops[0] = operands[4];
+ ops[1] = XEXP (XEXP (operands[2], 0), 0);
+
+--- gcc/config/arm/arm.c~ 2004-03-11 15:28:01.000000000 +0000
++++ gcc/config/arm/arm.c 2004-03-19 15:36:03.000000000 +0000
+@@ -3818,8 +3818,11 @@
+ sequence. */
+ if (!const_ok_for_op (PLUS, val0) || !const_ok_for_op (PLUS, val1))
+ return 0;
+-
+- return (reg0 == reg1) && ((val1 - val0) == 4 || (val0 - val1) == 4);
++
++ /* For Harvard cores, only accept pairs where one offset is zero.
++ See comment in load_multiple_sequence. */
++ return (reg0 == reg1) && ((val1 - val0) == 4 || (val0 - val1) == 4)
++ && (!arm_ld_sched || val0 == 0 || val1 == 0);
+ }
+ return 0;
+ }
+@@ -4075,6 +4078,11 @@
+ *load_offset = unsorted_offsets[order[0]];
+ }
+
++ /* For XScale a two-word LDM is a performance loss, so only do this if
++ size is more important. See comments in arm_gen_load_multiple. */
++ if (nops == 2 && arm_tune_xscale && !optimize_size)
++ return 0;
++
+ if (unsorted_offsets[order[0]] == 0)
+ return 1; /* ldmia */
+
+@@ -4307,6 +4315,11 @@
+ *load_offset = unsorted_offsets[order[0]];
+ }
+
++ /* For XScale a two-word LDM is a performance loss, so only do this if
++ size is more important. See comments in arm_gen_load_multiple. */
++ if (nops == 2 && arm_tune_xscale && !optimize_size)
++ return 0;
++
+ if (unsorted_offsets[order[0]] == 0)
+ return 1; /* stmia */
+
diff --git a/openembedded/packages/gcc/gcc-3.3.4/arm-ldm.dpatch b/openembedded/packages/gcc/gcc-3.3.4/arm-ldm.dpatch
new file mode 100644
index 0000000000..561624f39c
--- /dev/null
+++ b/openembedded/packages/gcc/gcc-3.3.4/arm-ldm.dpatch
@@ -0,0 +1,148 @@
+#! /bin/sh -e
+
+src=gcc
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+ pdir="-d $3"
+ src=$3/gcc
+elif [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+case "$1" in
+ -patch)
+ patch $pdir -f --no-backup-if-mismatch -p0 --fuzz 10 < $0
+ ;;
+ -unpatch)
+ patch $pdir -f --no-backup-if-mismatch -R -p0 --fuzz 10 < $0
+ ;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+esac
+exit 0
+
+# DP: try harder to avoid ldm in function epilogues
+
+--- gcc/config/arm/arm.c Fri Mar 5 18:49:42 2004
++++ gcc/config/arm/arm.c Fri Mar 5 16:00:21 2004
+@@ -7598,6 +7629,26 @@
+ return_used_this_function = 0;
+ }
+
++/* Return the number (counting from 0) of
++ the least significant set bit in MASK. */
++
++#ifdef __GNUC__
++inline
++#endif
++static int
++number_of_first_bit_set (mask)
++ int mask;
++{
++ int bit;
++
++ for (bit = 0;
++ (mask & (1 << bit)) == 0;
++ ++bit)
++ continue;
++
++ return bit;
++}
++
+ const char *
+ arm_output_epilogue (really_return)
+ int really_return;
+@@ -7788,27 +7839,47 @@
+ saved_regs_mask |= (1 << PC_REGNUM);
+ }
+
+- /* Load the registers off the stack. If we only have one register
+- to load use the LDR instruction - it is faster. */
+- if (saved_regs_mask == (1 << LR_REGNUM))
+- {
+- /* The exception handler ignores the LR, so we do
+- not really need to load it off the stack. */
+- if (eh_ofs)
+- asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
+- else
+- asm_fprintf (f, "\tldr\t%r, [%r], #4\n", LR_REGNUM, SP_REGNUM);
+- }
+- else if (saved_regs_mask)
++ if (saved_regs_mask)
+ {
+- if (saved_regs_mask & (1 << SP_REGNUM))
+- /* Note - write back to the stack register is not enabled
+- (ie "ldmfd sp!..."). We know that the stack pointer is
+- in the list of registers and if we add writeback the
+- instruction becomes UNPREDICTABLE. */
+- print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++ /* Load the registers off the stack. If we only have one register
++ to load use the LDR instruction - it is faster. */
++ if (bit_count (saved_regs_mask) == 1)
++ {
++ int reg = number_of_first_bit_set (saved_regs_mask);
++
++ switch (reg)
++ {
++ case SP_REGNUM:
++ /* Mustn't use base writeback when loading SP. */
++ asm_fprintf (f, "\tldr\t%r, [%r]\n", SP_REGNUM, SP_REGNUM);
++ break;
++
++ case LR_REGNUM:
++ if (eh_ofs)
++ {
++ /* The exception handler ignores the LR, so we do
++ not really need to load it off the stack. */
++ asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
++ break;
++ }
++ /* else fall through */
++
++ default:
++ asm_fprintf (f, "\tldr\t%r, [%r], #4\n", reg, SP_REGNUM);
++ break;
++ }
++ }
+ else
+- print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++ {
++ if (saved_regs_mask & (1 << SP_REGNUM))
++ /* Note - write back to the stack register is not enabled
++ (ie "ldmfd sp!..."). We know that the stack pointer is
++ in the list of registers and if we add writeback the
++ instruction becomes UNPREDICTABLE. */
++ print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++ else
++ print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++ }
+ }
+
+ if (current_function_pretend_args_size)
+@@ -9610,26 +9677,6 @@
+ }
+ }
+
+-/* Return the number (counting from 0) of
+- the least significant set bit in MASK. */
+-
+-#ifdef __GNUC__
+-inline
+-#endif
+-static int
+-number_of_first_bit_set (mask)
+- int mask;
+-{
+- int bit;
+-
+- for (bit = 0;
+- (mask & (1 << bit)) == 0;
+- ++bit)
+- continue;
+-
+- return bit;
+-}
+-
+ /* Generate code to return from a thumb function.
+ If 'reg_containing_return_addr' is -1, then the return address is
+ actually on the stack, at the stack pointer. */
diff --git a/openembedded/packages/gcc/gcc-3.3.4/arm-tune.patch b/openembedded/packages/gcc/gcc-3.3.4/arm-tune.patch
new file mode 100644
index 0000000000..701c99b87c
--- /dev/null
+++ b/openembedded/packages/gcc/gcc-3.3.4/arm-tune.patch
@@ -0,0 +1,9 @@
+--- gcc/config/arm/linux-elf.h.orig 2004-03-11 14:46:33.000000000 +0000
++++ gcc/config/arm/linux-elf.h 2004-03-11 14:48:23.000000000 +0000
+@@ -128,3 +128,6 @@
+
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
++
++/* Tune for XScale. */
++#define TARGET_TUNE_DEFAULT TARGET_CPU_xscale
diff --git a/openembedded/packages/gcc/gcc-3.3.4/bash3.patch b/openembedded/packages/gcc/gcc-3.3.4/bash3.patch
new file mode 100644
index 0000000000..614ba50eec
--- /dev/null
+++ b/openembedded/packages/gcc/gcc-3.3.4/bash3.patch
@@ -0,0 +1,20 @@
+--- gcc-3.3.4/configure.orig 2002-09-29 18:11:24.000000000 +0200
++++ gcc-3.3.4/configure 2005-01-28 12:26:40.000000000 +0100
+@@ -697,7 +697,7 @@
+ if test -f skip-this-dir; then
+ # Perform the same cleanup as the trap handler, minus the "exit 1" of course,
+ # and reset the trap handler.
+- trap 0
++ trap '' 0
+ rm -rf Makefile* ${tmpdir}
+ # Execute the final clean-up actions
+ ${config_shell} skip-this-dir
+@@ -1596,7 +1596,7 @@
+ # Perform the same cleanup as the trap handler, minus the "exit 1" of course,
+ # and reset the trap handler.
+ rm -rf ${tmpdir}
+-trap 0
++trap '' 0
+
+ exit 0
+
diff --git a/openembedded/packages/gcc/gcc-3.3.4/gcc-uclibc-3.3-100-conf.patch b/openembedded/packages/gcc/gcc-3.3.4/gcc-uclibc-3.3-100-conf.patch
new file mode 100644
index 0000000000..213b4fbbd6
--- /dev/null
+++ b/openembedded/packages/gcc/gcc-3.3.4/gcc-uclibc-3.3-100-conf.patch
@@ -0,0 +1,1593 @@
+diff -urN gcc-3.3.3/boehm-gc/config.sub gcc-3.3.3-new/boehm-gc/config.sub
+--- gcc-3.3.3/boehm-gc/config.sub 2002-02-11 22:37:53.000000000 -0600
++++ gcc-3.3.3-new/boehm-gc/config.sub 2004-02-16 21:12:16.000000000 -0600
+@@ -118,7 +118,7 @@
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+- nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
++ nto-qnx* | linux-gnu* | linux-uclibc* | storm-chaos* | os2-emx* | windows32-*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+@@ -1089,7 +1089,8 @@
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++ | -mingw32* | -linux-gnu* | -linux-uclibc* \
++ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN gcc-3.3.3/config.sub gcc-3.3.3-new/config.sub
+--- gcc-3.3.3/config.sub 2003-01-30 17:25:36.000000000 -0600
++++ gcc-3.3.3-new/config.sub 2004-02-16 21:12:16.000000000 -0600
+@@ -118,7 +118,7 @@
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+- nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++ nto-qnx* | linux-gnu* | linux-uclibc* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+@@ -1112,7 +1112,8 @@
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++ | -mingw32* | -linux-gnu* | -linux-uclibc* \
++ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN gcc-3.3.3/gcc/config/arm/linux-elf.h gcc-3.3.3-new/gcc/config/arm/linux-elf.h
+--- gcc-3.3.3/gcc/config/arm/linux-elf.h 2003-09-16 10:39:23.000000000 -0500
++++ gcc-3.3.3-new/gcc/config/arm/linux-elf.h 2004-02-16 21:12:16.000000000 -0600
+@@ -78,6 +78,18 @@
+ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++ %{b} %{Wl,*:%*} \
++ %{static:-Bstatic} \
++ %{shared:-shared} \
++ %{symbolic:-Bsymbolic} \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++ -X \
++ %{mbig-endian:-EB}" \
++ SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+ %{b} %{Wl,*:%*} \
+ %{static:-Bstatic} \
+@@ -88,6 +100,7 @@
+ -X \
+ %{mbig-endian:-EB}" \
+ SUBTARGET_EXTRA_LINK_SPEC
++#endif
+
+ #define TARGET_OS_CPP_BUILTINS() \
+ do { \
+diff -urN gcc-3.3.3/gcc/config/cris/linux.h gcc-3.3.3-new/gcc/config/cris/linux.h
+--- gcc-3.3.3/gcc/config/cris/linux.h 2003-03-10 21:01:35.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/cris/linux.h 2004-02-16 21:12:16.000000000 -0600
+@@ -81,6 +81,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++ -rpath-link include/asm/../..%s\
++ %{shared} %{static}\
++ %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++ %{!shared: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++ %{!r:%{O2|O3: --gc-sections}}"
++
++#else /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+
+@@ -95,6 +114,8 @@
+ %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+ %{!r:%{O2|O3: --gc-sections}}"
+
++#endif /* USE_UCLIBC */
++
+
+ /* Node: Run-time Target */
+
+diff -urN gcc-3.3.3/gcc/config/cris/t-linux-uclibc gcc-3.3.3-new/gcc/config/cris/t-linux-uclibc
+--- gcc-3.3.3/gcc/config/cris/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/cris/t-linux-uclibc 2004-02-16 21:12:16.000000000 -0600
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.3.3/gcc/config/i386/linux.h gcc-3.3.3-new/gcc/config/i386/linux.h
+--- gcc-3.3.3/gcc/config/i386/linux.h 2003-11-14 00:46:12.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/i386/linux.h 2004-02-16 21:12:16.000000000 -0600
+@@ -136,6 +136,15 @@
+ %{static:-static}}}"
+ #endif
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++ %{!shared: \
++ %{!ibcs: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+@@ -144,6 +153,7 @@
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ %{static:-static}}}"
+ #endif
++#endif
+
+ /* A C statement (sans semicolon) to output to the stdio stream
+ FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.3.3/gcc/config/mips/linux.h gcc-3.3.3-new/gcc/config/mips/linux.h
+--- gcc-3.3.3/gcc/config/mips/linux.h 2003-12-23 02:58:00.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/mips/linux.h 2004-02-16 21:12:16.000000000 -0600
+@@ -175,6 +175,17 @@
+
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++ %{shared:-shared} \
++ %{!shared: \
++ %{!ibcs: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+ "%(endian_spec) \
+ %{shared:-shared} \
+@@ -184,6 +195,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+ %{static:-static}}}"
++#endif
+
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.3.3/gcc/config/sh/linux.h gcc-3.3.3-new/gcc/config/sh/linux.h
+--- gcc-3.3.3/gcc/config/sh/linux.h 2003-11-06 17:13:33.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/sh/linux.h 2004-02-16 21:12:16.000000000 -0600
+@@ -44,12 +44,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++ "%{shared:-shared} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+ "%{shared:-shared} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ %{static:-static}"
++#endif
+
+ /* The GNU C++ standard library requires that these macros be defined. */
+ #undef CPLUSPLUS_CPP_SPEC
+diff -urN gcc-3.3.3/gcc/config/sh/t-linux-uclibc gcc-3.3.3-new/gcc/config/sh/t-linux-uclibc
+--- gcc-3.3.3/gcc/config/sh/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/sh/t-linux-uclibc 2004-02-16 21:12:16.000000000 -0600
+@@ -0,0 +1,16 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Don't run fixproto
++STMP_FIXPROTO =
++
++TARGET_LIBGCC2_CFLAGS = -fpic
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES=
++MULTILIB_MATCHES =
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o
+diff -urN gcc-3.3.3/gcc/config/sh/t-sh64-uclibc gcc-3.3.3-new/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.3.3/gcc/config/sh/t-sh64-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/sh/t-sh64-uclibc 2004-02-16 21:12:16.000000000 -0600
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++ _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++ _shcompact_call_trampoline _shcompact_return_trampoline \
++ _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++ _push_pop_shmedia_regs \
++ _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.3.3/gcc/config/t-linux-uclibc gcc-3.3.3-new/gcc/config/t-linux-uclibc
+--- gcc-3.3.3/gcc/config/t-linux-uclibc 1969-12-31 18:0