diff --git a/configs/olimex-lpc2378/nsh/Make.defs b/configs/olimex-lpc2378/nsh/Make.defs
index 77203891b55332c5a5d214e11076fec9bdd26492..2cd6ce63fdf11c0d6e9e1980a44f23dc7a14a7cf 100755
--- a/configs/olimex-lpc2378/nsh/Make.defs
+++ b/configs/olimex-lpc2378/nsh/Make.defs
@@ -40,48 +40,62 @@
 
 include ${TOPDIR}/.config
 
-# The default value for CROSSDEV can be overridden from the make command line:
-#   make                         -- Will build for the NuttX buildroot toolchain
-#   make CROSSDEV=arm-eabi-      -- Will build for the devkitARM toolchain
-#   make CROSSDEV=arm-none-eabi- -- Will build for the CodeSourcery toolchain
-#   make CROSSDEV=arm-elf-       -- Will build for the NuttX buildroot toolchain
-
-CROSSDEV		= arm-elf-
-CC			= $(CROSSDEV)gcc
-CXX			= $(CROSSDEV)g++
-CPP			= $(CROSSDEV)gcc -E
-LD			= $(CROSSDEV)ld
-AR			= $(CROSSDEV)ar rcs
-NM			= $(CROSSDEV)nm
-OBJCOPY			= $(CROSSDEV)objcopy
-OBJDUMP			= $(CROSSDEV)objdump
-
-HOSTOS			=  ${shell uname -o}
-
-ARCHCCVERSION		= ${shell $(CC) -v 2>&1 | sed -n '/^gcc version/p' | sed -e 's/^gcc version \([0-9\.]\)/\1/g' -e 's/[-\ ].*//g' -e '1q'}
-ARCHCCMAJOR		= ${shell echo $(ARCHCCVERSION) | cut -d'.' -f1}
+# Setup for the selected toolchain
 
-ifeq ($(ARCHCCMAJOR),4)
-ifneq ($(HOSTOS),Cygwin)
-OBJCOPYARGS		= -R .note -R .note.gnu.build-id -R .comment
+ifeq ($(CONFIG_OLIMEX_LPC2378_CODESOURCERYW),y)
+  # CodeSourcery under Windows
+  CROSSDEV = arm-none-eabi-
+  WINTOOL = y
+  MAXOPTIMIZATION = -O2
+endif
+ifeq ($(CONFIG_OLIMEX_LPC2378_CODESOURCERYL),y)
+  # CodeSourcery under Linux
+  CROSSDEV = arm-none-eabi-
+  MAXOPTIMIZATION = -O2
 endif
+ifeq ($(CONFIG_OLIMEX_LPC2378_DEVKITARM),y)
+  # devkitARM under Windows
+  CROSSDEV = arm-eabi-
+  WINTOOL = y
+endif
+ifeq ($(CONFIG_OLIMEX_LPC2378_BUILDROOT),y)
+  # NuttX buildroot under Linux or Cygwin
+  CROSSDEV = arm-elf-
+  MAXOPTIMIZATION = -Os
 endif
 
-ifeq ($(CROSSDEV),arm-elf-)
-  MKDEP			= $(TOPDIR)/tools/mkdeps.sh
-  ARCHINCLUDES		= -I. -isystem $(TOPDIR)/include
-  ARCHXXINCLUDES	= -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx
-  ARCHSCRIPT		= -T$(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/nsh/ld.script
-  MAXOPTIMIZATION	= -Os
+ifeq ($(WINTOOL),y)
+  # Windows-native toolchains
+  DIRLINK = $(TOPDIR)/tools/winlink.sh
+  DIRUNLINK = $(TOPDIR)/tools/unlink.sh
+  MKDEP = $(TOPDIR)/tools/mknulldeps.sh
+  ARCHINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)/include}"
+  ARCHXXINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)/include}" -isystem "${shell cygpath -w $(TOPDIR)/include/cxx}"
+  ARCHSCRIPT = -T "${shell cygpath -w $(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/nsh/ld.script}"
 else
-  WINTOOL		= y
-  DIRLINK		= $(TOPDIR)/tools/winlink.sh
-  DIRUNLINK		= $(TOPDIR)/tools/unlink.sh
-  MKDEP			= $(TOPDIR)/tools/mknulldeps.sh
-  ARCHINCLUDES		= -I. -isystem "${shell cygpath -w $(TOPDIR)/include}"
-  ARCHXXINCLUDES	= -I. -isystem "${shell cygpath -w $(TOPDIR)/include}" -isystem "${shell cygpath -w $(TOPDIR)/include/cxx}"
-  ARCHSCRIPT		= -T "${shell cygpath -w $(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/nsh/ld.script}"
-  MAXOPTIMIZATION	= -O2
+  # Linux/Cygwin-native toolchain 
+  MKDEP = $(TOPDIR)/tools/mkdeps.sh
+  ARCHINCLUDES = -I. -isystem $(TOPDIR)/include
+  ARCHXXINCLUDES = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx
+  ARCHSCRIPT = -T$(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/nsh/ld.script
+endif
+
+CC = $(CROSSDEV)gcc
+CXX = $(CROSSDEV)g++
+CPP = $(CROSSDEV)gcc -E
+LD = $(CROSSDEV)ld
+AR = $(CROSSDEV)ar rcs
+NM = $(CROSSDEV)nm
+OBJCOPY = $(CROSSDEV)objcopy
+OBJDUMP = $(CROSSDEV)objdump
+
+ARCHCCVERSION = ${shell $(CC) -v 2>&1 | sed -n '/^gcc version/p' | sed -e 's/^gcc version \([0-9\.]\)/\1/g' -e 's/[-\ ].*//g' -e '1q'}
+ARCHCCMAJOR = ${shell echo $(ARCHCCVERSION) | cut -d'.' -f1}
+
+ifeq ($(ARCHCCMAJOR),4)
+ifneq ($(HOSTOS),Cygwin)
+OBJCOPYARGS		= -R .note -R .note.gnu.build-id -R .comment
+endif
 endif
 
 ifeq ("${CONFIG_DEBUG}","y")
@@ -98,18 +112,26 @@ endif
 
 ARCHCFLAGS		= -fno-builtin
 ARCHCXXFLAGS		= -fno-builtin -fno-exceptions
-ARCHPICFLAGS		= -fpic
+ARCHPICFLAGS		= -fpic -msingle-pic-base -mpic-register=r10
 ARCHWARNINGS		= -Wall -Wstrict-prototypes -Wshadow
 ARCHWARNINGSXX		= -Wall -Wshadow
 ARCHDEFINES		=
 
 CFLAGS			= $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) \
 			  $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) -pipe
+CPICFLAGS		= $(ARCHPICFLAGS) $(CFLAGS)
 CXXFLAGS		= $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) \
 			  $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) -pipe
+CXXPICFLAGS		= $(ARCHPICFLAGS) $(CXXFLAGS)
 CPPFLAGS		= $(ARCHINCLUDES) $(ARCHDEFINES)
 AFLAGS			= $(CFLAGS) -D__ASSEMBLY__
 
+NXFLATLDFLAGS1		= -r -d -warn-common
+NXFLATLDFLAGS2		= $(NXFLATLDFLAGS1) \
+			  -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat.ld \
+			  -no-check-sections
+LDNXFLATFLAGS		= -e main -s 2048
+
 OBJEXT			= .o
 LIBEXT			= .a
 EXEEXT			=
diff --git a/configs/olimex-lpc2378/nsh/defconfig b/configs/olimex-lpc2378/nsh/defconfig
index f8b22ac91ea3187e101a32ff8072a966675c31e8..d0a5f15c375d1a8241bdd98f6168a2057cc78a1a 100755
--- a/configs/olimex-lpc2378/nsh/defconfig
+++ b/configs/olimex-lpc2378/nsh/defconfig
@@ -81,6 +81,13 @@ CONFIG_DRAM_END=(CONFIG_DRAM_START+CONFIG_DRAM_SIZE)
 CONFIG_ARCH_INTERRUPTSTACK=
 CONFIG_ARCH_STACKDUMP=y
 
+# Identify toolchain and linker options
+#
+CONFIG_OLIMEX_LPC2378_CODESOURCERYW=n
+CONFIG_OLIMEX_LPC2378_CODESOURCERYL=y
+CONFIG_OLIMEX_LPC2378_DEVKITARM=n
+CONFIG_OLIMEX_LPC2378_BUILDROOT=n
+
 #
 # LPC2378 specific chip initialization
 #CONFIG_PLL_CLKSRC - identifies the clock source to use
diff --git a/configs/olimex-lpc2378/ostest/Make.defs b/configs/olimex-lpc2378/ostest/Make.defs
index b025fd1bb9a8f19f8c1d7bdd3321ac95425586f9..bb44dce7d5ef02020f6f5d3f15f65c8257eeb585 100755
--- a/configs/olimex-lpc2378/ostest/Make.defs
+++ b/configs/olimex-lpc2378/ostest/Make.defs
@@ -40,48 +40,62 @@
 
 include ${TOPDIR}/.config
 
-# The default value for CROSSDEV can be overridden from the make command line:
-#   make                         -- Will build for the NuttX buildroot toolchain
-#   make CROSSDEV=arm-eabi-      -- Will build for the devkitARM toolchain
-#   make CROSSDEV=arm-none-eabi- -- Will build for the CodeSourcery toolchain
-#   make CROSSDEV=arm-elf-       -- Will build for the NuttX buildroot toolchain
-
-CROSSDEV		= arm-elf-
-CC			= $(CROSSDEV)gcc
-CXX			= $(CROSSDEV)g++
-CPP			= $(CROSSDEV)gcc -E
-LD			= $(CROSSDEV)ld
-AR			= $(CROSSDEV)ar rcs
-NM			= $(CROSSDEV)nm
-OBJCOPY			= $(CROSSDEV)objcopy
-OBJDUMP			= $(CROSSDEV)objdump
-
-HOSTOS			=  ${shell uname -o}
-
-ARCHCCVERSION		= ${shell $(CC) -v 2>&1 | sed -n '/^gcc version/p' | sed -e 's/^gcc version \([0-9\.]\)/\1/g' -e 's/[-\ ].*//g' -e '1q'}
-ARCHCCMAJOR		= ${shell echo $(ARCHCCVERSION) | cut -d'.' -f1}
+# Setup for the selected toolchain
 
-ifeq ($(ARCHCCMAJOR),4)
-ifneq ($(HOSTOS),Cygwin)
-OBJCOPYARGS		= -R .note -R .note.gnu.build-id -R .comment
+ifeq ($(CONFIG_OLIMEX_LPC2378_CODESOURCERYW),y)
+  # CodeSourcery under Windows
+  CROSSDEV = arm-none-eabi-
+  WINTOOL = y
+  MAXOPTIMIZATION = -O2
+endif
+ifeq ($(CONFIG_OLIMEX_LPC2378_CODESOURCERYL),y)
+  # CodeSourcery under Linux
+  CROSSDEV = arm-none-eabi-
+  MAXOPTIMIZATION = -O2
 endif
+ifeq ($(CONFIG_OLIMEX_LPC2378_DEVKITARM),y)
+  # devkitARM under Windows
+  CROSSDEV = arm-eabi-
+  WINTOOL = y
+endif
+ifeq ($(CONFIG_OLIMEX_LPC2378_BUILDROOT),y)
+  # NuttX buildroot under Linux or Cygwin
+  CROSSDEV = arm-elf-
+  MAXOPTIMIZATION = -Os
 endif
 
-ifeq ($(CROSSDEV),arm-elf-)
-  MKDEP			= $(TOPDIR)/tools/mkdeps.sh
-  ARCHINCLUDES		= -I. -isystem $(TOPDIR)/include
-  ARCHXXINCLUDES	= -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx
-  ARCHSCRIPT		= -T$(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/ostest/ld.script
-  MAXOPTIMIZATION	= -Os
+ifeq ($(WINTOOL),y)
+  # Windows-native toolchains
+  DIRLINK = $(TOPDIR)/tools/winlink.sh
+  DIRUNLINK = $(TOPDIR)/tools/unlink.sh
+  MKDEP = $(TOPDIR)/tools/mknulldeps.sh
+  ARCHINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)/include}"
+  ARCHXXINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)/include}" -isystem "${shell cygpath -w $(TOPDIR)/include/cxx}"
+  ARCHSCRIPT = -T "${shell cygpath -w $(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/ostest/ld.script}"
 else
-  WINTOOL		= y
-  DIRLINK		= $(TOPDIR)/tools/winlink.sh
-  DIRUNLINK		= $(TOPDIR)/tools/unlink.sh
-  MKDEP			= $(TOPDIR)/tools/mknulldeps.sh
-  ARCHINCLUDES		= -I. -isystem "${shell cygpath -w $(TOPDIR)/include}"
-  ARCHXXINCLUDES	= -I. -isystem "${shell cygpath -w $(TOPDIR)/include}" -isystem "${shell cygpath -w $(TOPDIR)/include/cxx}"
-  ARCHSCRIPT		= -T "${shell cygpath -w $(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/ostest/ld.script}"
-  MAXOPTIMIZATION	= -O2
+  # Linux/Cygwin-native toolchain 
+  MKDEP = $(TOPDIR)/tools/mkdeps.sh
+  ARCHINCLUDES = -I. -isystem $(TOPDIR)/include
+  ARCHXXINCLUDES = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx
+  ARCHSCRIPT = -T$(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/ostest/ld.script
+endif
+
+CC = $(CROSSDEV)gcc
+CXX = $(CROSSDEV)g++
+CPP = $(CROSSDEV)gcc -E
+LD = $(CROSSDEV)ld
+AR = $(CROSSDEV)ar rcs
+NM = $(CROSSDEV)nm
+OBJCOPY = $(CROSSDEV)objcopy
+OBJDUMP = $(CROSSDEV)objdump
+
+ARCHCCVERSION = ${shell $(CC) -v 2>&1 | sed -n '/^gcc version/p' | sed -e 's/^gcc version \([0-9\.]\)/\1/g' -e 's/[-\ ].*//g' -e '1q'}
+ARCHCCMAJOR = ${shell echo $(ARCHCCVERSION) | cut -d'.' -f1}
+
+ifeq ($(ARCHCCMAJOR),4)
+ifneq ($(HOSTOS),Cygwin)
+OBJCOPYARGS		= -R .note -R .note.gnu.build-id -R .comment
+endif
 endif
 
 ifeq ("${CONFIG_DEBUG}","y")
diff --git a/configs/olimex-lpc2378/ostest/defconfig b/configs/olimex-lpc2378/ostest/defconfig
index 1388956783c625bfd3c6ce9cf7191709d485b047..1315af2e72096bb0b58af1d121286e3013fe8bbe 100755
--- a/configs/olimex-lpc2378/ostest/defconfig
+++ b/configs/olimex-lpc2378/ostest/defconfig
@@ -81,6 +81,13 @@ CONFIG_DRAM_END=(CONFIG_DRAM_START+CONFIG_DRAM_SIZE)
 CONFIG_ARCH_INTERRUPTSTACK=
 CONFIG_ARCH_STACKDUMP=y
 
+# Identify toolchain and linker options
+#
+CONFIG_OLIMEX_LPC2378_CODESOURCERYW=n
+CONFIG_OLIMEX_LPC2378_CODESOURCERYL=y
+CONFIG_OLIMEX_LPC2378_DEVKITARM=n
+CONFIG_OLIMEX_LPC2378_BUILDROOT=n
+
 #
 # LPC2378 specific chip initialization
 #CONFIG_PLL_CLKSRC - identifies the clock source to use