gcc-glibc compiles on both SPARC and i386
authorAndrew Waterman <waterman@parcad.millennium.berkeley.edu>
Sun, 28 Feb 2010 01:07:58 +0000 (17:07 -0800)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:36 +0000 (17:35 -0700)
17 files changed:
.gitignore
kern/arch/i386/ros/hart.h
kern/arch/i386/ros/syscall.h
kern/arch/sparc/ros/hart.h
kern/include/ros/common.h
kern/src/elf.c
lib/parlib/hart.h
tools/compilers/gcc-glibc/Makefile
tools/compilers/gcc-glibc/Makelocal.template
tools/compilers/gcc-glibc/binutils-2.18-ros.patch
tools/compilers/gcc-glibc/gcc-4.3.2-ros.patch
tools/compilers/gcc-glibc/glibc-2.11.1-ros/malloc/Makefile [new file with mode: 0644]
tools/compilers/gcc-glibc/glibc-2.11.1-ros/sysdeps/i386/configure [new file with mode: 0644]
tools/compilers/gcc-glibc/glibc-2.11.1-ros/sysdeps/i386/tlsdesc.sym [new file with mode: 0644]
tools/compilers/gcc-glibc/glibc-2.11.1-ros/sysdeps/ros/getdents.c
tools/compilers/gcc-glibc/glibc-2.11.1-ros/sysdeps/ros/i386/sysdep.h
tools/compilers/gcc-glibc/glibc-2.11.1-ros/sysdeps/ros/i386/tls.h

index 18142ae..864ad8c 100644 (file)
@@ -29,8 +29,8 @@ tools/compilers/gcc-glibc/.*
 tools/compilers/gcc-glibc/binutils-2.18
 tools/compilers/gcc-glibc/gcc-4.3.2
 tools/compilers/gcc-glibc/glibc-2.11.1
-tools/compilers/gcc-glibc/sparc-ros-*
-tools/compilers/gcc-glibc/i386-ros-*
+tools/compilers/gcc-glibc/install
+tools/compilers/gcc-glibc/*-builddir
 tools/syscall_server/syscall_server_*
 tools/syscall_server/sandbox/
 tools/syscall_server/apps/*
index ecc71ce..9eebfa7 100644 (file)
@@ -5,8 +5,14 @@
 
 #include <ros/syscall.h>
 
+#define HART_CL_SIZE 64
+
 // this is how we get our thread id on entry.
-register int __hart_self_on_entry asm ("eax");
+#define __hart_self_on_entry \
+({ \
+       register int temp asm ("eax"); \
+       temp; \
+})
 
 // The actual hart_self() function is a global symbol that invokes this routine.
 static inline int
index f2c506a..46fd488 100644 (file)
@@ -5,25 +5,36 @@
 
 #ifndef ROS_KERNEL
 
+#include <sys/types.h>
+#include <stdint.h>
+#include <ros/common.h>
+
 // TODO: fix sysenter to take all 5 params
 static inline intreg_t syscall_sysenter(uint16_t num, intreg_t a1,
                                  intreg_t a2, intreg_t a3,
                                  intreg_t a4, intreg_t a5)
 {
+       // TODO: Maybe think about this a little more.
+       // We just added code to push and pop 'ebx' because 
+       // when compiling glibc we were getting register allocation 
+       // errors.  Not happy with this, but it works.
        intreg_t ret;
        asm volatile ("  pushl %%ebp;        "
                      "  pushl %%esi;        "
+                     "  pushl %%ebx;        "
                      "  movl %%esp, %%ebp;  "
+                     "  movl %4, %%ebx;     "
                      "  leal 1f, %%esi;     "
                      "  sysenter;           "
                      "1:                    "
+                     "  popl %%ebx;         "
                      "  popl %%esi;         "
                      "  popl %%ebp;         "
                      : "=a" (ret)
                      : "a" (num),
                        "d" (a1),
                        "c" (a2),
-                       "b" (a3),
+                       "r" (a3),
                        "D" (a4)
                      : "cc", "memory");
        return ret;
@@ -64,9 +75,9 @@ static inline long __attribute__((always_inline))
 __ros_syscall(long _num, long _a0, long _a1, long _a2, long _a3, long _a4)
 {
        #ifndef SYSCALL_TRAP
-               return syscall_sysenter(_num, _a1, _a2, _a3, _a4, _a5);
+               return syscall_sysenter(_num, _a0, _a1, _a2, _a3, _a4);
        #else
-               return syscall_trap(_num, _a1, _a2, _a3, _a4, _a5);
+               return syscall_trap(_num, _a0, _a1, _a2, _a3, _a4);
        #endif
 }
 
index f24f79c..258aa0d 100644 (file)
@@ -7,6 +7,9 @@ double do_fsqrt(double);
 double do_recip(double);
 double do_rsqrt(double);
 
+#define HART_CL_SIZE 128
+#define HART_ATOMIC_HASHTABLE_SIZE 17
+
 #define __hart_self_on_entry (__hart_self())
 
 static inline int
@@ -38,10 +41,10 @@ __hart_swap(int* addr, int val)
 
 extern int __hart_atomic_hash_locks[HART_CL_SIZE*HART_ATOMIC_HASHTABLE_SIZE];
 static inline int*
-__hart_atomic_hash(int* addr)
+__hart_atomic_hash_lock(int* addr)
 {
        int hash = ((unsigned int)addr/sizeof(int*))/HART_ATOMIC_HASHTABLE_SIZE;
-       return __hart_atomic_hash_locks[HART_CL_SIZE/sizeof(int)*hash];
+       return &__hart_atomic_hash_locks[HART_CL_SIZE/sizeof(int)*hash];
 }
 
 static inline int
@@ -65,7 +68,7 @@ __hart_compare_and_swap(int* addr, int testval, int newval)
 
        int old = *addr;
        if(old == testval)
-               *word = newval;
+               *addr = newval;
 
        *lock = 0;
        return old;
index 66cb428..0a2203f 100644 (file)
@@ -32,6 +32,7 @@ typedef size_t uintreg_t;
        for (int _var = 0, var = (next); _var < (size); _var++, var = (var + 1) % (size))
 
 // Efficient min and max operations
+#ifdef ROS_KERNEL
 #define MIN(_a, _b)                                            \
 ({                                                             \
        typeof(_a) __a = (_a);                                  \
@@ -44,6 +45,7 @@ typedef size_t uintreg_t;
        typeof(_b) __b = (_b);                                  \
        __a >= __b ? __a : __b;                                 \
 })
+#endif
 
 // Rounding operations (efficient when n is a power of 2)
 // Round down to the nearest multiple of n
index 27d1380..28f4bb8 100644 (file)
@@ -66,6 +66,7 @@ int load_one_elf(struct proc* p, int fd, int pgoffset, struct elf_info* ei)
 
                        // mmap will zero the rest of the page if filesz % PGSIZE != 0
                        if(filesz)
+                               // TODO: waterman, figure out proper permissions
                                if(mmap(p, memstart+pgoffset*PGSIZE, filesz,
                                        PROT_READ|PROT_WRITE|PROT_EXEC, MAP_FIXED,
                                        fd, filestart/PGSIZE) == MAP_FAILED)
@@ -140,8 +141,8 @@ intreg_t sys_exec(struct proc* p, const char fn[MAX_PATH_LEN], procinfo_t* pi)
        if(p->state != PROC_RUNNING_S)
                return -1;
 
-       char kfn[PGSIZE];
-       if(memcpy_from_user(p,kfn,fn,PGSIZE))
+       char kfn[MAX_PATH_LEN];
+       if(memcpy_from_user(p,kfn,fn,MAX_PATH_LEN))
                return -1;
 
        if(memcpy_from_user(p,p->env_procinfo,pi,sizeof(procinfo_t)))
index e6dc52c..af2a6d2 100644 (file)
@@ -10,7 +10,6 @@ extern "C" {
 
 #define HART_LOG2_MAX_MAX_HARTS 6
 #define HART_MAX_MAX_HARTS (1 << HART_LOG2_MAX_MAX_HARTS)
-#define HART_CL_SIZE 128
 
 typedef struct hart_lock_qnode
 {
index 7062b82..1d58171 100644 (file)
@@ -1,11 +1,6 @@
 # Defines where to install the toolchain
 -include Makelocal
 
-ifndef ROSDIR
-busted0: 
-       @echo "You need to set ROSDIR to the path of the ROS source code. The best way to do this is to create a 'Makelocal' file in the current directory and put it in there."
-endif
-
 ifndef RAMP_INSTDIR
 ifndef X86_INSTDIR
 busted: 
@@ -18,17 +13,20 @@ GCC_VERSION := 4.3.2
 GLIBC_VERSION := 2.11.1
 
 BUILDDIR ?= $(shell pwd)/
+ROSDIR ?= $(BUILDDIR)/../../../
 DESTDIR ?= /
 
 # Configuration parameters for make-ramp
 RAMP_ARCH := sparc
 RAMP_BINARY_PREFIX := $(RAMP_ARCH)-ros-
 RAMP_GCC_BUILD_FLAGS := --with-cpu=v8
+RAMP_CFLAGS :=
 
 # Configuration parameters for x86
-X86_ARCH := i386
+X86_ARCH := i686
 X86_BINARY_PREFIX := $(X86_ARCH)-ros-
 X86_GCC_BUILD_FLAGS := 
+X86_CFLAGS := -march=i486
 
 all:
        @echo "You need to run one of the following commands, "
@@ -47,6 +45,7 @@ ramp:
        export INSTDIR=$(RAMP_INSTDIR);\
        export PATH=$(DESTDIR)$(RAMP_INSTDIR)/bin:$(PATH);\
        export ARCH=$(RAMP_ARCH);\
+       export ARCH_CFLAGS=$(RAMP_CFLAGS);\
        export ROS_ARCH_DIR=$(RAMP_ARCH);\
        export BINARY_PREFIX=$(RAMP_BINARY_PREFIX);\
        export GCC_BUILD_FLAGS=$(RAMP_GCC_BUILD_FLAGS);\
@@ -59,7 +58,8 @@ x86:
        export INSTDIR=$(X86_INSTDIR);\
        export PATH=$(DESTDIR)$(X86_INSTDIR)/bin:$(PATH);\
        export ARCH=$(X86_ARCH);\
-       export ROS_ARCH_DIR=$(X86_ARCH);\
+       export ARCH_CFLAGS=$(X86_CFLAGS);\
+       export ROS_ARCH_DIR=i386;\
        export BINARY_PREFIX=$(X86_BINARY_PREFIX);\
        export GCC_BUILD_FLAGS=$(X86_GCC_BUILD_FLAGS);\
        $(MAKE) make-all
@@ -68,18 +68,14 @@ make-all:
        $(MAKE) .glibc-patch
        $(MAKE) .$(BINARY_PREFIX)binutils-make
        $(MAKE) .$(BINARY_PREFIX)binutils-install
-       $(MAKE) .$(BINARY_PREFIX)glibc-headers-install
        $(MAKE) .$(BINARY_PREFIX)ros-headers-install
+       $(MAKE) .$(BINARY_PREFIX)glibc-headers-install
        $(MAKE) .$(BINARY_PREFIX)gcc-stage1-make
        $(MAKE) .$(BINARY_PREFIX)gcc-stage1-install
        $(MAKE) .$(BINARY_PREFIX)glibc-make
        $(MAKE) .$(BINARY_PREFIX)glibc-install
        $(MAKE) .$(BINARY_PREFIX)gcc-stage2-make
        $(MAKE) .$(BINARY_PREFIX)gcc-stage2-install
-       ln -f $(INSTDIR)/lib/gcc/$(ARCH)-ros/$(GCC_VERSION)/crtbegin.o \
-             $(INSTDIR)/lib/gcc/$(ARCH)-ros/$(GCC_VERSION)/crtbeginT.o
-       ln -f $(INSTDIR)/lib/gcc/$(ARCH)-ros/$(GCC_VERSION)/crtend.o \
-             $(INSTDIR)/lib/gcc/$(ARCH)-ros/$(GCC_VERSION)/crtendT.o
        mkdir -p $(ROSDIR)/fs/$(ARCH)/lib
        cp -r $(INSTDIR)/$(ARCH)-ros/lib/* $(ROSDIR)/fs/$(ARCH)/lib
 
@@ -144,6 +140,9 @@ glibc-$(GLIBC_VERSION):
        tar -jxf glibc-$(GLIBC_VERSION).tar.bz2
        rm glibc-$(GLIBC_VERSION)/sysdeps/sparc/sparc32/elf/start.S
        rm glibc-$(GLIBC_VERSION)/sysdeps/i386/elf/start.S
+       rm glibc-$(GLIBC_VERSION)/sysdeps/i386/____longjmp_chk.S
+       rm glibc-$(GLIBC_VERSION)/sysdeps/i386/init-first.c
+       rm glibc-$(GLIBC_VERSION)/sysdeps/i386/sysdep.h
        $(MAKE) .glibc-patch
 
 .glibc-patch: glibc-$(GLIBC_VERSION)
@@ -179,6 +178,7 @@ $(BINARY_PREFIX)gcc-stage2-builddir: gcc-$(GCC_VERSION)
        cd $(BINARY_PREFIX)binutils-builddir; \
        ./configure --enable-shared \
                    --disable-multilib \
+                   --disable-nls \
                    --target=$(ARCH)-ros \
                    --prefix=$(INSTDIR) \
                    --includedir=$(INSTDIR)/include \
@@ -193,18 +193,19 @@ $(BINARY_PREFIX)gcc-stage2-builddir: gcc-$(GCC_VERSION)
        cd $(BINARY_PREFIX)binutils-builddir; \
        make -j install
 
-.$(BINARY_PREFIX)glibc-headers-configure: 
+.$(BINARY_PREFIX)glibc-headers-configure:
        $(MAKE) $(BINARY_PREFIX)glibc-headers-builddir
        cd $(BINARY_PREFIX)glibc-headers-builddir; \
        ../glibc-$(GLIBC_VERSION)/configure \
                  --host=$(ARCH)-ros \
                  --enable-hacker-mode \
                  --enable-shared \
+                 --disable-nls \
                  --with-elf \
                  --with-tls \
                  --with-__thread \
                  --prefix=$(INSTDIR)/$(ARCH)-ros \
-                 --with-headers=$(ROSDIR)/kern/include/ \
+                 --with-headers=$(INSTDIR)/$(ARCH)-ros/sys-include \
                  libc_cv_forced_unwind=yes \
                  libc_cv_c_cleanup=yes;
        touch $@
@@ -213,15 +214,14 @@ $(BINARY_PREFIX)gcc-stage2-builddir: gcc-$(GCC_VERSION)
        cd $(BINARY_PREFIX)glibc-headers-builddir; \
        make -j install-headers; \
        mkdir -p $(INSTDIR)/$(ARCH)-ros/include/gnu; \
-       touch $(INSTDIR)/$(ARCH)-ros/include/gnu/stubs.h; \
+       echo > $(INSTDIR)/$(ARCH)-ros/include/gnu/stubs.h; \
        cp bits/stdio_lim.h $(INSTDIR)/$(ARCH)-ros/include/bits/
 
 .$(BINARY_PREFIX)ros-headers-install: $(ROSDIR)
-       $(MAKE) -C $(ROSDIR) symlinks
        mkdir -p $(INSTDIR)/$(ARCH)-ros/sys-include/arch
        cp -r $(ROSDIR)/kern/include/ros \
           $(INSTDIR)/$(ARCH)-ros/sys-include/
-       cp -r $(ROSDIR)/kern/include/arch/* \
+       cp -r $(ROSDIR)/kern/arch/$(ROS_ARCH_DIR)/* \
           $(INSTDIR)/$(ARCH)-ros/sys-include/arch/
 
 .$(BINARY_PREFIX)gcc-stage1-configure: 
@@ -236,6 +236,7 @@ $(BINARY_PREFIX)gcc-stage2-builddir: gcc-$(GCC_VERSION)
                --disable-libmudflap \
                --disable-libssp \
                --disable-libgomp \
+               --disable-nls \
                --program-prefix=$(BINARY_PREFIX) \
                --target=$(ARCH)-ros \
                --prefix=$(INSTDIR) \
@@ -249,11 +250,13 @@ $(BINARY_PREFIX)gcc-stage2-builddir: gcc-$(GCC_VERSION)
        # It appears to still work though since this is just stage 1 of compiling
        # Should really look into fixing this though...
        -cd $(BINARY_PREFIX)gcc-stage1-builddir; \
-       make -j
+       make -j inhibit_libc=true cross-compiling=yes
 
 .$(BINARY_PREFIX)gcc-stage1-install: 
        cd $(BINARY_PREFIX)gcc-stage1-builddir; \
        make -j install
+       #-ln -vs libgcc.a `$(BINARY_PREFIX)gcc -print-libgcc-file-name | \
+       #                 sed 's/libgcc/&_eh/'`
 
 .$(BINARY_PREFIX)glibc-configure: 
        $(MAKE) $(BINARY_PREFIX)glibc-builddir
@@ -264,11 +267,13 @@ $(BINARY_PREFIX)gcc-stage2-builddir: gcc-$(GCC_VERSION)
                  --enable-shared \
                  --with-elf \
                  --with-tls \
+                 --disable-nls \
                  --with-__thread \
-                 --with-headers=$(ROSDIR)/kern/include/ \
+                 --with-headers=$(INSTDIR)/$(ARCH)-ros/sys-include \
                  --prefix=$(INSTDIR)/$(ARCH)-ros \
                  libc_cv_forced_unwind=yes \
-                 libc_cv_c_cleanup=yes;
+                 libc_cv_c_cleanup=yes \
+                 CFLAGS="$(ARCH_CFLAGS) -O2 -pipe";
        touch $@
 
 .$(BINARY_PREFIX)glibc-make: .$(BINARY_PREFIX)glibc-configure
@@ -279,12 +284,13 @@ $(BINARY_PREFIX)gcc-stage2-builddir: gcc-$(GCC_VERSION)
        cd $(BINARY_PREFIX)glibc-builddir; \
        make -j install
 
-.$(BINARY_PREFIX)gcc-stage2-configure: 
+.$(BINARY_PREFIX)gcc-stage2-configure:
        $(MAKE) $(BINARY_PREFIX)gcc-stage2-builddir
        cd $(BINARY_PREFIX)gcc-stage2-builddir; \
        ../gcc-$(GCC_VERSION)/configure \
                  --enable-shared \
                  --disable-multilib \
+                 --disable-nls \
                  --program-prefix=$(BINARY_PREFIX) \
                  --target=$(ARCH)-ros \
                  --prefix=$(INSTDIR) \
@@ -305,15 +311,6 @@ $(BINARY_PREFIX)gcc-stage2-builddir: gcc-$(GCC_VERSION)
        make -j install
 
 patches:
-       -cd glibc-$(GLIBC_VERSION)/manual; make realclean
-       rm -rf glibc-$(GLIBC_VERSION)/autom4te.cache
-       mv glibc-$(GLIBC_VERSION) glibc-$(GLIBC_VERSION).new
-       tar -jxf glibc-$(GLIBC_VERSION).tar.bz2
-       -diff -ruN glibc-$(GLIBC_VERSION) glibc-$(GLIBC_VERSION).new \
-             > glibc-$(GLIBC_VERSION)-ros.patch
-       rm -rf glibc-$(GLIBC_VERSION)
-       mv glibc-$(GLIBC_VERSION).new glibc-$(GLIBC_VERSION)
-       
        mv gcc-$(GCC_VERSION)/gmp .
        mv gcc-$(GCC_VERSION)/mpfr .
        rm -rf gcc-$(GCC_VERSION)/libstdc++-v3/autom4te.cache
index af8044a..fa34a38 100644 (file)
@@ -1,4 +1,3 @@
 RAMP_INSTDIR := /scratch/klueska/ros-gcc-glibc/install-sparc-ros-gcc/
 X86_INSTDIR := /scratch/klueska/ros-gcc-glibc/install-i386-ros-gcc/
 
-ROSDIR := /scratch/klueska/ros
index d8a1163..09477e0 100644 (file)
@@ -1,6 +1,6 @@
 diff -ruN binutils-2.18/bfd/config.bfd binutils-2.18.new/bfd/config.bfd
 --- binutils-2.18/bfd/config.bfd       2007-08-28 10:19:33.000000000 -0700
-+++ binutils-2.18.new/bfd/config.bfd   2010-02-12 21:57:57.000000000 -0800
++++ binutils-2.18.new/bfd/config.bfd   2010-02-27 15:18:45.000000000 -0800
 @@ -499,6 +499,9 @@
    i[3-7]86-*-aros*)
      targ_defvec=bfd_elf32_i386_vec
@@ -23,7 +23,7 @@ diff -ruN binutils-2.18/bfd/config.bfd binutils-2.18.new/bfd/config.bfd
      targ_defvec=bfd_elf32_sparc_vec
 diff -ruN binutils-2.18/config.sub binutils-2.18.new/config.sub
 --- binutils-2.18/config.sub   2007-08-06 13:00:30.000000000 -0700
-+++ binutils-2.18.new/config.sub       2010-02-12 21:57:57.000000000 -0800
++++ binutils-2.18.new/config.sub       2010-02-27 15:18:45.000000000 -0800
 @@ -1207,7 +1207,7 @@
              | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
              | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
@@ -35,7 +35,7 @@ diff -ruN binutils-2.18/config.sub binutils-2.18.new/config.sub
              | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
 diff -ruN binutils-2.18/gas/configure.tgt binutils-2.18.new/gas/configure.tgt
 --- binutils-2.18/gas/configure.tgt    2007-08-28 10:19:36.000000000 -0700
-+++ binutils-2.18.new/gas/configure.tgt        2010-02-12 21:57:57.000000000 -0800
++++ binutils-2.18.new/gas/configure.tgt        2010-02-27 15:18:45.000000000 -0800
 @@ -173,6 +173,7 @@
    i386-*-beos*)                               fmt=elf ;;
    i386-*-coff)                                fmt=coff ;;
@@ -54,7 +54,7 @@ diff -ruN binutils-2.18/gas/configure.tgt binutils-2.18.new/gas/configure.tgt
    sparc-*-netbsdelf*)                 fmt=elf em=nbsd ;;
 diff -ruN binutils-2.18/ld/configure.tgt binutils-2.18.new/ld/configure.tgt
 --- binutils-2.18/ld/configure.tgt     2007-08-28 10:19:42.000000000 -0700
-+++ binutils-2.18.new/ld/configure.tgt 2010-02-12 21:57:57.000000000 -0800
++++ binutils-2.18.new/ld/configure.tgt 2010-02-27 15:18:45.000000000 -0800
 @@ -231,6 +231,7 @@
                        esac ;;
  i[3-7]86-*-netware)   targ_emul=i386nw ;;
@@ -73,7 +73,7 @@ diff -ruN binutils-2.18/ld/configure.tgt binutils-2.18.new/ld/configure.tgt
  sparc64-*-freebsd* | sparcv9-*-freebsd* | sparc64-*-kfreebsd*-gnu | sparcv9-*-kfreebsd*-gnu)
 diff -ruN binutils-2.18/ld/emulparams/elf32_sparc.sh binutils-2.18.new/ld/emulparams/elf32_sparc.sh
 --- binutils-2.18/ld/emulparams/elf32_sparc.sh 2007-08-12 12:00:07.000000000 -0700
-+++ binutils-2.18.new/ld/emulparams/elf32_sparc.sh     2010-02-12 21:57:57.000000000 -0800
++++ binutils-2.18.new/ld/emulparams/elf32_sparc.sh     2010-02-27 15:18:45.000000000 -0800
 @@ -3,7 +3,7 @@
  
  SCRIPT_NAME=elf
index 0099430..669ab27 100644 (file)
@@ -1,6 +1,6 @@
 diff -ruN gcc-4.3.2/config.sub gcc-4.3.2.new/config.sub
 --- gcc-4.3.2/config.sub       2008-01-22 18:37:40.000000000 -0800
-+++ gcc-4.3.2.new/config.sub   2010-02-12 22:02:57.000000000 -0800
++++ gcc-4.3.2.new/config.sub   2010-02-27 15:21:04.000000000 -0800
 @@ -1239,7 +1239,7 @@
              | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
              | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
@@ -12,23 +12,342 @@ diff -ruN gcc-4.3.2/config.sub gcc-4.3.2.new/config.sub
              | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
 diff -ruN gcc-4.3.2/gcc/config/i386/ros.h gcc-4.3.2.new/gcc/config/i386/ros.h
 --- gcc-4.3.2/gcc/config/i386/ros.h    1969-12-31 16:00:00.000000000 -0800
-+++ gcc-4.3.2.new/gcc/config/i386/ros.h        2010-02-12 22:02:57.000000000 -0800
-@@ -0,0 +1,11 @@
-+#undef TARGET_OS_CPP_BUILTINS
-+#define TARGET_OS_CPP_BUILTINS()      \
-+do {                                  \
-+      builtin_define_std ("ros");       \
-+      builtin_define_std ("unix");      \
-+      builtin_assert ("system=ros");    \
-+      builtin_assert ("system=unix");   \
-+} while(0);
-+#undef TARGET_VERSION
-+#define TARGET_VERSION fprintf(stderr, " (i386 ros)");
++++ gcc-4.3.2.new/gcc/config/i386/ros.h        2010-02-27 15:21:04.000000000 -0800
+@@ -0,0 +1,201 @@
++/* Definitions for Intel 386 running Linux-based GNU systems with ELF format.
++   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2004, 2005,
++   2006, 2007 Free Software Foundation, Inc.
++   Contributed by Eric Youngdale.
++   Modified for stabs-in-ELF by H.J. Lu.
++
++This file is part of GCC.
++
++GCC 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.
++
++GCC 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.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++/* Output at beginning of assembler file.  */
++/* The .file command should always begin the output.  */
++#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
++
++#define TARGET_VERSION fprintf (stderr, " (i386 ROS/ELF)");
++
++/* The svr4 ABI for the i386 says that records and unions are returned
++   in memory.  */
++#undef DEFAULT_PCC_STRUCT_RETURN
++#define DEFAULT_PCC_STRUCT_RETURN 1
++
++/* We arrange for the whole %gs segment to map the tls area.  */
++#undef TARGET_TLS_DIRECT_SEG_REFS_DEFAULT
++#define TARGET_TLS_DIRECT_SEG_REFS_DEFAULT MASK_TLS_DIRECT_SEG_REFS
++
++#undef ASM_COMMENT_START
++#define ASM_COMMENT_START "#"
++
++#undef DBX_REGISTER_NUMBER
++#define DBX_REGISTER_NUMBER(n) \
++  (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
++
++/* Output assembler code to FILE to call the profiler.
++   To the best of my knowledge, no Linux libc has required the label
++   argument to mcount.  */
++
++#define NO_PROFILE_COUNTERS   1
++
++#undef MCOUNT_NAME
++#define MCOUNT_NAME "mcount"
++
++/* The GLIBC version of mcount for the x86 assumes that there is a
++   frame, so we cannot allow profiling without a frame pointer.  */
++
++#undef SUBTARGET_FRAME_POINTER_REQUIRED
++#define SUBTARGET_FRAME_POINTER_REQUIRED current_function_profile
++
++#undef SIZE_TYPE
++#define SIZE_TYPE "unsigned int"
++ 
++#undef PTRDIFF_TYPE
++#define PTRDIFF_TYPE "int"
++  
++#undef WCHAR_TYPE
++#define WCHAR_TYPE "long int"
++   
++#undef WCHAR_TYPE_SIZE
++#define WCHAR_TYPE_SIZE BITS_PER_WORD
++    
++#define TARGET_OS_CPP_BUILTINS()              \
++  do                                          \
++    {                                         \
++      LINUX_TARGET_OS_CPP_BUILTINS();         \
++    }                                         \
++  while (0)
++
++#undef CPP_SPEC
++#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
++
++#undef CC1_SPEC
++#define CC1_SPEC "%(cc1_cpu) %{profile:-p}"
++
++/* Provide a LINK_SPEC appropriate for Linux.  Here we provide support
++   for the special GCC options -static and -shared, which allow us to
++   link things in one of these three modes by applying the appropriate
++   combinations of options at link-time. We like to support here for
++   as many of the other GNU linker options as possible. But I don't
++   have the time to search for those flags. I am sure how to add
++   support for -soname shared_object_name. H.J.
++
++   I took out %{v:%{!V:-V}}. It is too much :-(. They can use
++   -Wl,-V.
++
++   When the -shared link option is used a final link is not being
++   done.  */
++
++/* If ELF is the default format, we should not use /lib/elf.  */
++
++/* These macros may be overridden in k*bsd-gnu.h and i386/k*bsd-gnu.h. */
++#define LINK_EMULATION "elf_i386"
++#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
++
++#undef  SUBTARGET_EXTRA_SPECS
++#define SUBTARGET_EXTRA_SPECS \
++  { "link_emulation", LINK_EMULATION },\
++  { "dynamic_linker", GLIBC_DYNAMIC_LINKER }
++
++#undef        LINK_SPEC
++#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker:-dynamic-linker %(dynamic_linker)}} \
++      %{static:-static}}}"
++
++/* Similar to standard Linux, but adding -ffast-math support.  */
++#undef  ENDFILE_SPEC
++#define ENDFILE_SPEC \
++  "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
++   %{mpc32:crtprec32.o%s} \
++   %{mpc64:crtprec64.o%s} \
++   %{mpc80:crtprec80.o%s} \
++   %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
++
++/* A C statement (sans semicolon) to output to the stdio stream
++   FILE the assembler definition of uninitialized global DECL named
++   NAME whose size is SIZE bytes and alignment is ALIGN bytes.
++   Try to use asm_output_aligned_bss to implement this macro.  */
++
++#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
++  asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
++
++/* A C statement to output to the stdio stream FILE an assembler
++   command to advance the location counter to a multiple of 1<<LOG
++   bytes if it is within MAX_SKIP bytes.
++
++   This is used to align code labels according to Intel recommendations.  */
++
++#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
++#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP)                  \
++  do {                                                                        \
++    if ((LOG) != 0) {                                                 \
++      if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG));        \
++      else {                                                          \
++      fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP));     \
++      /* Make sure that we have at least 8 byte alignment if > 8 byte \
++         alignment is preferred.  */                                  \
++      if ((LOG) > 3 && (1 << (LOG)) > ((MAX_SKIP) + 1))               \
++        fprintf ((FILE), "\t.p2align 3\n");                           \
++      }                                                                       \
++    }                                                                 \
++  } while (0)
++#endif
++
++/* Handle special EH pointer encodings.  Absolute, pc-relative, and
++   indirect are handled automatically.  */
++#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \
++  do {                                                                        \
++    if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_datarel)               \
++      {                                                                       \
++        fputs (ASM_LONG, FILE);                       \
++        assemble_name (FILE, XSTR (ADDR, 0));                         \
++      fputs (((ENCODING) & DW_EH_PE_indirect ? "@GOT" : "@GOTOFF"), FILE); \
++        goto DONE;                                                    \
++      }                                                                       \
++  } while (0)
++
++/* Used by crtstuff.c to initialize the base of data-relative relocations.
++   These are GOT relative on x86, so return the pic register.  */
++#ifdef __PIC__
++#define CRT_GET_RFIB_DATA(BASE)                       \
++  {                                           \
++    register void *ebx_ __asm__("ebx");               \
++    BASE = ebx_;                              \
++  }
++#else
++#define CRT_GET_RFIB_DATA(BASE)                                               \
++  __asm__ ("call\t.LPR%=\n"                                           \
++         ".LPR%=:\n\t"                                                \
++         "pop{l}\t%0\n\t"                                             \
++         /* Due to a GAS bug, this cannot use EAX.  That encodes      \
++            smaller than the traditional EBX, which results in the    \
++            offset being off by one.  */                              \
++         "add{l}\t{$_GLOBAL_OFFSET_TABLE_+[.-.LPR%=],%0"              \
++                 "|%0,_GLOBAL_OFFSET_TABLE_+(.-.LPR%=)}"              \
++         : "=d"(BASE))
++#endif
++
++#undef NEED_INDICATE_EXEC_STACK
++#define NEED_INDICATE_EXEC_STACK 1
++
++/* This macro may be overridden in i386/k*bsd-gnu.h.  */
++#define REG_NAME(reg) reg
++
++#ifdef TARGET_LIBC_PROVIDES_SSP
++/* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
++#define TARGET_THREAD_SSP_OFFSET      0x14
++#endif
+diff -ruN gcc-4.3.2/gcc/config/ros.h gcc-4.3.2.new/gcc/config/ros.h
+--- gcc-4.3.2/gcc/config/ros.h 1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2.new/gcc/config/ros.h     2010-02-27 15:21:04.000000000 -0800
+@@ -0,0 +1,125 @@
++/* Definitions for Linux-based GNU systems with ELF format
++   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2006,
++   2007 Free Software Foundation, Inc.
++   Contributed by Eric Youngdale.
++   Modified for stabs-in-ELF by H.J. Lu (hjl@lucon.org).
++
++This file is part of GCC.
 +
++GCC 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.
++
++GCC 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.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++/* Don't assume anything about the header files.  */
++#define NO_IMPLICIT_EXTERN_C
++
++#undef ASM_APP_ON
++#define ASM_APP_ON "#APP\n"
++
++#undef ASM_APP_OFF
++#define ASM_APP_OFF "#NO_APP\n"
++
++#undef MD_EXEC_PREFIX
++#undef MD_STARTFILE_PREFIX
++
++/* Provide a STARTFILE_SPEC appropriate for GNU/Linux.  Here we add
++   the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
++   provides part of the support for getting C++ file-scope static
++   object constructed before entering `main'.  */
++   
++#undef        STARTFILE_SPEC
++#if defined HAVE_LD_PIE
++#define STARTFILE_SPEC \
++  "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \
++   crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
++#else
++#define STARTFILE_SPEC \
++  "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \
++   crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
++#endif
++
++/* Provide a ENDFILE_SPEC appropriate for GNU/Linux.  Here we tack on
++   the GNU/Linux magical crtend.o file (see crtstuff.c) which
++   provides part of the support for getting C++ file-scope static
++   object constructed before entering `main', followed by a normal
++   GNU/Linux "finalizer" file, `crtn.o'.  */
++
++#undef        ENDFILE_SPEC
++#define ENDFILE_SPEC \
++  "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
++
++/* This is for -profile to use -lc_p instead of -lc.  */
++#ifndef CC1_SPEC
++#define CC1_SPEC "%{profile:-p}"
++#endif
++
++/* The GNU C++ standard library requires that these macros be defined.  */
++#undef CPLUSPLUS_CPP_SPEC
++#define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
++
++#undef        LIB_SPEC
++#define LIB_SPEC \
++  "%{pthread:-lpthread} \
++   %{shared:-lc} \
++   %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}"
++
++#define LINUX_TARGET_OS_CPP_BUILTINS()                                \
++    do {                                                      \
++      builtin_define ("__gnu_ros__");                 \
++      builtin_define_std ("ros");                             \
++      builtin_define_std ("unix");                            \
++      builtin_assert ("system=ros");                  \
++      builtin_assert ("system=unix");                         \
++      builtin_assert ("system=posix");                        \
++    } while (0)
++
++#if defined(HAVE_LD_EH_FRAME_HDR)
++#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#endif
++
++/* Define this so we can compile MS code for use with WINE.  */
++#define HANDLE_PRAGMA_PACK_PUSH_POP
++
++#undef LINK_GCC_C_SEQUENCE_SPEC
++#define LINK_GCC_C_SEQUENCE_SPEC \
++  "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
++
++/* Use --as-needed -lgcc_s for eh support.  */
++#ifdef HAVE_LD_AS_NEEDED
++#define USE_LD_AS_NEEDED 1
++#endif
++
++/* Determine which dynamic linker to use depending on whether GLIBC or
++   uClibc is the default C library and whether -muclibc or -mglibc has
++   been passed to change the default.  */
++#if UCLIBC_DEFAULT
++#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}"
++#else
++#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}"
++#endif
++
++/* For most targets the following definitions suffice;
++   GLIBC_DYNAMIC_LINKER must be defined for each target using them, or
++   GLIBC_DYNAMIC_LINKER32 and GLIBC_DYNAMIC_LINKER64 for targets
++   supporting both 32-bit and 64-bit compilation.  */
++#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
++#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
++#define LINUX_DYNAMIC_LINKER \
++  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
++#define LINUX_DYNAMIC_LINKER32 \
++  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32)
++#define LINUX_DYNAMIC_LINKER64 \
++  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
++
++#define TARGET_POSIX_IO
 diff -ruN gcc-4.3.2/gcc/config/sparc/ros.h gcc-4.3.2.new/gcc/config/sparc/ros.h
 --- gcc-4.3.2/gcc/config/sparc/ros.h   1969-12-31 16:00:00.000000000 -0800
-+++ gcc-4.3.2.new/gcc/config/sparc/ros.h       2010-02-12 22:02:57.000000000 -0800
-@@ -0,0 +1,241 @@
++++ gcc-4.3.2.new/gcc/config/sparc/ros.h       2010-02-27 15:21:04.000000000 -0800
+@@ -0,0 +1,240 @@
 +/* Definitions for SPARC running Linux-based GNU systems with ELF.
 +   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
 +   2007 Free Software Foundation, Inc.
@@ -59,8 +378,8 @@ diff -ruN gcc-4.3.2/gcc/config/sparc/ros.h gcc-4.3.2.new/gcc/config/sparc/ros.h
 +      builtin_assert ("system=ros");          \
 +      builtin_assert ("system=unix");         \
 +      builtin_assert ("system=posix");                \
-+      if (TARGET_LONG_DOUBLE_128)               \
-+        builtin_define ("__LONG_DOUBLE_128__"); \
++      if (TARGET_LONG_DOUBLE_128)             \
++      builtin_define ("__LONG_DOUBLE_128__"); \
 +    }                                         \
 +  while (0)
 +
@@ -111,7 +430,7 @@ diff -ruN gcc-4.3.2/gcc/config/sparc/ros.h gcc-4.3.2.new/gcc/config/sparc/ros.h
 +#define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
 +
 +#undef TARGET_VERSION
-+#define TARGET_VERSION fprintf (stderr, " (sparc GNU/Linux with ELF)");
++#define TARGET_VERSION fprintf (stderr, " (sparc ROS/ELF)");
 +
 +#undef SIZE_TYPE
 +#define SIZE_TYPE "unsigned int"
@@ -208,14 +527,13 @@ diff -ruN gcc-4.3.2/gcc/config/sparc/ros.h gcc-4.3.2.new/gcc/config/sparc/ros.h
 +  sprintf (LABEL, "*.L%s%ld", PREFIX, (long)(NUM))
 +
 +\f
-+
 +/* Define for support of TFmode long double.
-+ *    SPARC ABI says that long double is 4 words.  */
++   SPARC ABI says that long double is 4 words.  */
 +#undef LONG_DOUBLE_TYPE_SIZE
 +#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64)
 +
 +/* Define this to set long double type size to use in libgcc2.c, which can
-+ *    not depend on target_flags.  */
++   not depend on target_flags.  */
 +#ifdef __LONG_DOUBLE_128__
 +#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
 +#else
@@ -272,13 +590,13 @@ diff -ruN gcc-4.3.2/gcc/config/sparc/ros.h gcc-4.3.2.new/gcc/config/sparc/ros.h
 +#define TARGET_ALTERNATE_LONG_DOUBLE_MANGLING
 diff -ruN gcc-4.3.2/gcc/config.gcc gcc-4.3.2.new/gcc/config.gcc
 --- gcc-4.3.2/gcc/config.gcc   2008-06-09 09:32:15.000000000 -0700
-+++ gcc-4.3.2.new/gcc/config.gcc       2010-02-12 22:02:57.000000000 -0800
++++ gcc-4.3.2.new/gcc/config.gcc       2010-02-27 15:21:04.000000000 -0800
 @@ -609,6 +609,12 @@
    # Assume that newlib is being used and so __cxa_atexit is provided.
    default_use_cxa_atexit=yes
    ;;
 +*-*-ros*)
-+  extra_parts="crti.o crtn.o crtbegin.o crtbeginS.o crtend.o crtendS.o"
++  extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
 +  gas=yes
 +  gnu_ld=yes
 +  default_use_cxa_atexit=yes
@@ -290,21 +608,22 @@ diff -ruN gcc-4.3.2/gcc/config.gcc gcc-4.3.2.new/gcc/config.gcc
        tmake_file="i386/t-i386elf t-svr4"
        use_fixproto=yes
        ;;
-+i[34567]86-*-ros*)
-+      tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/ros.h"
-+      tmake_file="i386/t-i386elf t-svr4 t-slibgcc-elf-ver"
++i[34567]86-*-ros*) 
++      tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h ros.h i386/ros.h"
++      tmake_file="t-slibgcc-elf-ver t-linux"
 +      use_fixproto=yes
 +      ;;
  x86_64-*-elf*)
        tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/x86-64.h"
        tmake_file="i386/t-i386elf t-svr4"
-@@ -2343,6 +2354,11 @@
+@@ -2343,6 +2354,12 @@
        extra_parts="crti.o crtn.o crtbegin.o crtend.o"
        use_fixproto=yes
        ;;
 +sparc-*-ros*)
-+      tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sp-elf.h sparc/ros.h"
++      tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/ros.h"
 +      tmake_file="sparc/t-elf sparc/t-crtfm t-slibgcc-elf-ver"
++      extra_parts="$extra_parts crtfastmath.o"
 +      use_fixproto=yes
 +      ;;
  sparc-*-linux*)               # SPARC's running GNU/Linux, libc6
@@ -312,8 +631,18 @@ diff -ruN gcc-4.3.2/gcc/config.gcc gcc-4.3.2.new/gcc/config.gcc
        extra_options="${extra_options} sparc/long-double-switch.opt"
 diff -ruN gcc-4.3.2/libgcc/config.host gcc-4.3.2.new/libgcc/config.host
 --- gcc-4.3.2/libgcc/config.host       2008-01-25 12:49:04.000000000 -0800
-+++ gcc-4.3.2.new/libgcc/config.host   2010-02-12 22:02:57.000000000 -0800
-@@ -323,6 +323,8 @@
++++ gcc-4.3.2.new/libgcc/config.host   2010-02-27 15:21:04.000000000 -0800
+@@ -166,6 +166,9 @@
+   # Must come before *-*-gnu* (because of *-*-linux-gnu* systems).
+   extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
+   ;;
++*-*-ros*)
++  extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
++  ;;
+ *-*-gnu*)
+   ;;
+ *-*-netbsd*)
+@@ -323,6 +326,8 @@
        ;;
  i[34567]86-*-openbsd*)
        ;;
@@ -322,18 +651,20 @@ diff -ruN gcc-4.3.2/libgcc/config.host gcc-4.3.2.new/libgcc/config.host
  i[34567]86-*-coff*)
        ;;
  i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu)
-@@ -572,6 +574,8 @@
+@@ -572,6 +577,10 @@
        ;;
  sparc-*-elf*)
        ;;
 +sparc-*-ros*)
++      extra_parts="$extra_parts crtfastmath.o"
++      tmake_file="${tmake_file} sparc/t-crtfm"
 +      ;;
  sparc-*-linux*)               # SPARC's running GNU/Linux, libc6
        extra_parts="$extra_parts crtfastmath.o"
        tmake_file="${tmake_file} sparc/t-crtfm"
 diff -ruN gcc-4.3.2/libstdc++-v3/configure gcc-4.3.2.new/libstdc++-v3/configure
 --- gcc-4.3.2/libstdc++-v3/configure   2008-07-07 12:49:54.000000000 -0700
-+++ gcc-4.3.2.new/libstdc++-v3/configure       2010-02-12 22:03:09.000000000 -0800
++++ gcc-4.3.2.new/libstdc++-v3/configure       2010-02-27 15:21:17.000000000 -0800
 @@ -112811,6 +112811,3153 @@
  _ACEOF
  
@@ -3490,7 +3821,7 @@ diff -ruN gcc-4.3.2/libstdc++-v3/configure gcc-4.3.2.new/libstdc++-v3/configure
      #  *-solaris2.5)
 diff -ruN gcc-4.3.2/libstdc++-v3/crossconfig.m4 gcc-4.3.2.new/libstdc++-v3/crossconfig.m4
 --- gcc-4.3.2/libstdc++-v3/crossconfig.m4      2008-01-14 16:15:43.000000000 -0800
-+++ gcc-4.3.2.new/libstdc++-v3/crossconfig.m4  2010-02-12 22:02:57.000000000 -0800
++++ gcc-4.3.2.new/libstdc++-v3/crossconfig.m4  2010-02-27 15:21:04.000000000 -0800
 @@ -299,6 +299,12 @@
      AC_DEFINE(HAVE_SINHF)
      AC_DEFINE(HAVE_SINHL)
diff --git a/tools/compilers/gcc-glibc/glibc-2.11.1-ros/malloc/Makefile b/tools/compilers/gcc-glibc/glibc-2.11.1-ros/malloc/Makefile
new file mode 100644 (file)
index 0000000..c634597
--- /dev/null
@@ -0,0 +1,154 @@
+# Copyright (C) 1991-1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2009
+# Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C Library 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
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+
+#
+#      Makefile for malloc routines
+#
+subdir := malloc
+
+all:
+
+dist-headers := malloc.h
+headers := $(dist-headers) obstack.h mcheck.h
+tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \
+        tst-mallocstate tst-mcheck tst-mallocfork tst-trim1
+test-srcs = tst-mtrace
+
+distribute = thread-m.h mtrace.pl mcheck-init.c stackinfo.h memusage.h \
+            memusage.sh memusagestat.c tst-mtrace.sh arena.c hooks.c
+
+# Things which get pasted together into gmalloc.c.
+gmalloc-routines := malloc morecore
+# Things to include in the standalone distribution.
+dist-routines = $(gmalloc-routines) mcheck mtrace
+routines = $(dist-routines) obstack
+
+install-lib := libmcheck.a
+non-lib.a := libmcheck.a
+
+# Additional library.
+extra-libs = libmemusage
+extra-libs-others = $(extra-libs)
+
+libmemusage-routines = memusage
+libmemusage-inhibit-o = $(filter-out .os,$(object-suffixes))
+
+# These should be removed by `make clean'.
+extra-objs = mcheck-init.o libmcheck.a
+
+# Include the cleanup handler.
+aux := set-freeres thread-freeres
+
+include ../Makeconfig
+
+CPPFLAGS-memusagestat = -DNOT_IN_libc
+
+# The Perl script to analyze the output of the mtrace functions.
+ifneq ($(PERL),no)
+install-bin-script = mtrace
+generated = mtrace
+
+# The Perl script will print addresses and to do this nicely we must know
+# whether we are on a 32 or 64 bit machine.
+ifneq ($(findstring wordsize-32,$(config-sysdirs)),)
+address-width=10
+else
+address-width=18
+endif
+endif
+
+# Unless we get a test for the availability of libgd which also works
+# for cross-compiling we disable the memusagestat generation in this
+# situation.
+ifneq ($(cross-compiling),yes)
+# If the gd library is available we build the `memusagestat' program.
+ifneq ($(LIBGD),no)
+others: $(objpfx)memusage
+install-bin = memusagestat
+install-bin-script += memusage
+generated += memusagestat memusage
+extra-objs += memusagestat.o
+
+# The configure.in check for libgd and its headers did not use $SYSINCLUDES.
+# The directory specified by --with-headers usually contains only the basic
+# kernel interface headers, not something like libgd.  So the simplest thing
+# is to presume that the standard system headers will be ok for this file.
+$(objpfx)memusagestat.o: sysincludes = # nothing
+endif
+endif
+
+# Another goal which can be used to override the configure decision.
+.PHONY: do-memusagestat
+do-memusagestat: $(objpfx)memusagestat
+
+memusagestat-modules = memusagestat
+$(objpfx)memusagestat: $(memusagestat-modules:%=$(objpfx)%.o)
+       $(LINK.o) -o $@ $^ $(libgd-LDFLAGS) -lgd -lpng -lz -lm
+
+include ../Rules
+
+CFLAGS-mcheck-init.c = $(PIC-ccflag)
+CFLAGS-obstack.c = $(uses-callbacks)
+
+$(objpfx)libmcheck.a: $(objpfx)mcheck-init.o
+       -rm -f $@
+       $(patsubst %/,cd % &&,$(objpfx)) \
+       $(LN_S) $(<F) $(@F)
+
+lib: $(objpfx)libmcheck.a
+
+ifeq (no,$(cross-compiling))
+ifeq (yes,$(build-shared))
+ifneq ($(PERL),no)
+tests: $(objpfx)tst-mtrace.out
+$(objpfx)tst-mtrace.out: tst-mtrace.sh $(objpfx)tst-mtrace
+       $(SHELL) -e $< $(common-objpfx)
+endif
+endif
+endif
+
+tst-mcheck-ENV = MALLOC_CHECK_=3
+
+ifeq ($(experimental-malloc),yes)
+CPPFLAGS-malloc.c += -DPER_THREAD -DATOMIC_FASTBINS
+endif
+# Uncomment this for test releases.  For public releases it is too expensive.
+#CPPFLAGS-malloc.o += -DMALLOC_DEBUG=1
+
+sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,')
+
+$(objpfx)mtrace: mtrace.pl
+       rm -f $@.new
+       sed -e 's|@PERL@|$(PERL)|' -e 's|@XXX@|$(address-width)|' \
+           -e 's|@VERSION@|$(version)|' $^ > $@.new \
+       && rm -f $@ && mv $@.new $@ && chmod +x $@
+
+$(objpfx)memusage: memusage.sh
+       rm -f $@.new
+       sed -e 's|@BASH@|$(BASH)|' -e 's|@VERSION@|$(version)|' \
+           -e 's|@SLIBDIR@|$(sLIBdir)|' -e 's|@BINDIR@|$(bindir)|' $^ > $@.new \
+       && rm -f $@ && mv $@.new $@ && chmod +x $@
+
+
+# The implementation uses `dlsym'
+$(objpfx)libmemusage.so: $(common-objpfx)dlfcn/libdl.so $(elfobjdir)/ld.so \
+                    $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a
+
+# Extra dependencies
+$(foreach o,$(all-object-suffixes),$(objpfx)malloc$(o)): arena.c hooks.c
diff --git a/tools/compilers/gcc-glibc/glibc-2.11.1-ros/sysdeps/i386/configure b/tools/compilers/gcc-glibc/glibc-2.11.1-ros/sysdeps/i386/configure
new file mode 100644 (file)
index 0000000..84e0890
--- /dev/null
@@ -0,0 +1,639 @@
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
+ # Local configure fragment for sysdeps/i386.
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                 inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+if test "${ac_cv_header_cpuid_h+set}" = set; then
+  { $as_echo "$as_me:$LINENO: checking for cpuid.h" >&5
+$as_echo_n "checking for cpuid.h... " >&6; }
+if test "${ac_cv_header_cpuid_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_cpuid_h" >&5
+$as_echo "$ac_cv_header_cpuid_h" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking cpuid.h usability" >&5
+$as_echo_n "checking cpuid.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+//#include <cpuid.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking cpuid.h presence" >&5
+$as_echo_n "checking cpuid.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <cpuid.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: cpuid.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: cpuid.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: cpuid.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: cpuid.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: cpuid.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: cpuid.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: cpuid.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: cpuid.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: cpuid.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: cpuid.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for cpuid.h" >&5
+$as_echo_n "checking for cpuid.h... " >&6; }
+if test "${ac_cv_header_cpuid_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_header_cpuid_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_cpuid_h" >&5
+$as_echo "$ac_cv_header_cpuid_h" >&6; }
+
+fi
+if test "x$ac_cv_header_cpuid_h" = x""yes; then
+  :
+else
+  { { $as_echo "$as_me:$LINENO: error: gcc must provide the <cpuid.h> header" >&5
+$as_echo "$as_me: error: gcc must provide the <cpuid.h> header" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: checking if -g produces usable source locations for assembler-with-cpp" >&5
+$as_echo_n "checking if -g produces usable source locations for assembler-with-cpp... " >&6; }
+if test "${libc_cv_cpp_asm_debuginfo+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.S <<EOF
+#include "confdefs.h"
+
+/* comment on
+   two lines */
+       ${libc_cv_dot_text}
+       ${libc_cv_asm_global_directive} foo
+foo:
+       /* Unfortunately this test only works for a real instruction,
+          not for any of the machine-independent pseudo-ops.
+          So we just have to assume everybody has a "nop".  */
+       nop
+       /* comment */
+       nop
+       /* comment */
+       nop
+EOF
+if { ac_try='${CC-cc} $CPPFLAGS $ASFLAGS -g -c conftest.S 1>&5'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } && {
+   ac_pattern='conftest\.S'
+   { ac_try='readelf --debug-dump=line conftest.o |
+                  grep $ac_pattern 1>&5'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }
+  }; then
+  libc_cv_cpp_asm_debuginfo=yes
+else
+  libc_cv_cpp_asm_debuginfo=no
+fi
+rm -f conftest*
+fi
+{ $as_echo "$as_me:$LINENO: result: $libc_cv_cpp_asm_debuginfo" >&5
+$as_echo "$libc_cv_cpp_asm_debuginfo" >&6; }
+if test $libc_cv_cpp_asm_debuginfo = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define HAVE_CPP_ASM_DEBUGINFO 1
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for SSE4 support" >&5
+$as_echo_n "checking for SSE4 support... " >&6; }
+if test "${libc_cv_cc_sse4+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if { ac_try='${CC-cc} -msse4 -xc /dev/null -S -o /dev/null'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  libc_cv_cc_sse4=yes
+else
+  libc_cv_cc_sse4=no
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $libc_cv_cc_sse4" >&5
+$as_echo "$libc_cv_cc_sse4" >&6; }
+if test $libc_cv_cc_sse4 = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define HAVE_SSE4_SUPPORT 1
+_ACEOF
+
+fi
diff --git a/tools/compilers/gcc-glibc/glibc-2.11.1-ros/sysdeps/i386/tlsdesc.sym b/tools/compilers/gcc-glibc/glibc-2.11.1-ros/sysdeps/i386/tlsdesc.sym
new file mode 100644 (file)
index 0000000..7bad6c2
--- /dev/null
@@ -0,0 +1,17 @@
+#include <stddef.h>
+#include <sysdep.h>
+#include <tls.h>
+#include <link.h>
+#include <dl-tlsdesc.h>
+
+--
+
+-- Abuse tls.h macros to derive offsets relative to the thread register.
+
+DTV_OFFSET                     offsetof(struct rthread, header.dtv)
+
+TLSDESC_ARG                    offsetof(struct tlsdesc, arg)
+
+TLSDESC_GEN_COUNT              offsetof(struct tlsdesc_dynamic_arg, gen_count)
+TLSDESC_MODID                  offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_module)
+TLSDESC_MODOFF                 offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_offset)
index e7f8718..2e3bff2 100644 (file)
@@ -1,7 +1,7 @@
 #include <unistd.h>
 #include <dirent.h>
 
-ssize_t __getdents(int fd, char* buf, size_t len)
+ssize_t internal_function __getdents(int fd, char* buf, size_t len)
 {
   return __libc_read(fd,buf,len);
 }
index 020425b..cdbb328 100644 (file)
 #include <sysdeps/generic/sysdep.h>
 
 #ifdef __ASSEMBLER__
-# define PTR_MANGLE(dst,src,tmp) movl src,dst
-# define PTR_DEMANGLE(dst,src,tmp) PTR_MANGLE(dst,src,tmp)
-# define PTR_MANGLE2(dst,src,tmp) PTR_MANGLE(dst,src,tmp)
-# define PTR_DEMANGLE2(dst,src,tmp) PTR_MANGLE2(dst,src,tmp)
+# define PTR_MANGLE(a)
+# define PTR_DEMANGLE(a)
 #else
 # define PTR_MANGLE(a) (a)
 # define PTR_DEMANGLE(a) (a)
index bd2ff77..eaf161f 100644 (file)
@@ -26,7 +26,7 @@
 # include <stddef.h>
 # include <stdint.h>
 # include <stdlib.h>
-# include <list.h>
+//# include <list.h>
 # include <sysdep.h>
 # include <kernel-features.h>
 
@@ -113,7 +113,7 @@ union user_desc_init
 
 
 /* Get the thread descriptor definition.  */
-# include <nptl/descr.h>
+//# include <nptl/descr.h>
 
 /* This is the size of the initial TCB.  Can't be just sizeof (tcbhead_t),
    because NPTL getpid, __libc_alloca_cutoff etc. need (almost) the whole