Project import
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..24529e5
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,127 @@
+#
+#    Copyright (c) 2010-2011 Nest, Inc.
+#    All rights reserved.
+#
+#    This document is the property of Nest. It is considered
+#    confidential and proprietary information.
+#
+#    This document may not be reproduced or transmitted in any form,
+#    in whole or in part, without the express written permission of
+#    Nest.
+#
+#    Description:
+#
+
+include pre.mak
+
+ifeq ($(BUILD_FEATURE_NEWLIB),1)
+
+PackageName		:= newlib
+
+PackageExtension	:= tar.gz
+PackageSeparator	:= -
+
+PackagePatchArgs 	:= -p1
+
+PackageVersion          := 1.20.0
+PackageArchive		:= $(PackageName)$(PackageSeparator)$(PackageVersion).$(PackageExtension)
+PackageSourceDir	:= $(PackageName)$(PackageSeparator)$(PackageVersion)
+
+PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)
+
+CleanPaths		+= $(PackageLicenseFile)
+
+all: $(PackageDefaultGoal)
+
+# Generate the package license contents.
+
+#$(PackageLicenseFile): $(PackageSourceDir)/COPYRIGHT
+#	$(copy-result)
+
+# Extract the source from the archive and apply patches, if any.
+
+$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
+	$(expand-and-patch-package)
+
+# Prepare the sources.
+
+.PHONY: source
+source: | $(PackageSourceDir)
+
+# Patch the sources, if necessary.
+
+.PHONY: patch
+patch: source
+
+# Configure the source for building.
+
+$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory)
+	cd $(BuildDirectory) && \
+	$(CURDIR)/$(PackageSourceDir)/configure \
+		--target=arm-none-eabi \
+		--prefix=/usr \
+		--enable-interwork \
+		--disable-newlib-supplied-syscalls \
+		--disable-newlib-io-float \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--disable-shared \
+		--disable-newlib-atexit-dynamic-alloc \
+		--disable-multilib
+
+
+
+.PHONY: configure
+configure: source $(PackageBuildMakefile)
+
+# Build the source.
+#
+
+.PHONY: build
+build: configure | $(BuildDirectory)
+	$(Verbose)unset MAKEFLAGS \
+		&& $(MAKE) -C $(BuildDirectory) \
+			CC_FOR_TARGET="$(CC)" \
+			CXX_FOR_TARGET="$(CXX)" \
+			AS_FOR_TARGET=$(AS) \
+			AR_FOR_TARGET=$(AR) \
+			LD_FOR_TARGET=$(LD) \
+			NM_FOR_TARGET=$(NM) \
+			OBJDUMP_FOR_TARGET=$(OBJDUMP) \
+			RANLIB_FOR_TARGET=$(RANLIB) \
+			READELF_FOR_TARGET=$(READELF) \
+			STRIP_FOR_TARGET=$(STRIP) \
+			CFLAGS_FOR_TARGET="-ffunction-sections -fdata-sections -DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -Os -fomit-frame-pointer -mcpu=cortex-m3 -mthumb -D__thumb2__ -D__BUFSIZ__=256 -DMALLOC_LOCK_FUNCTION=__nl_malloc_lock -DMALLOC_UNLOCK_FUNCTION=__nl_malloc_unlock" \
+			CCASFLAGS="-mcpu=cortex-m3 -mthumb -D__thumb2__"
+
+.PHONY: prepare
+prepare: stage
+
+# Stage the build to a temporary installation area.
+#
+.PHONY: stage
+stage: build | $(ResultDirectory)
+	$(Verbose)unset MAKEFLAGS && \
+	$(MAKE) -C $(BuildDirectory) \
+		CC_FOR_TARGET="$(CC)" \
+		CXX_FOR_TARGET="$(CXX)" \
+		AS_FOR_TARGET=$(AS) \
+		AR_FOR_TARGET=$(AR) \
+		LD_FOR_TARGET=$(LD) \
+		NM_FOR_TARGET=$(NM) \
+		OBJDUMP_FOR_TARGET=$(OBJDUMP) \
+		RANLIB_FOR_TARGET=$(RANLIB) \
+		READELF_FOR_TARGET=$(READELF) \
+		STRIP_FOR_TARGET=$(STRIP) \
+		DESTDIR=$(ResultDirectory) \
+		install
+
+
+clean:
+	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultDirectory)
+
+endif # ifeq ($(BUILD_FEATURE_NEWLIB),1)
+
+include post.mak
diff --git a/newlib-1.20.0.tar.gz b/newlib-1.20.0.tar.gz
new file mode 100644
index 0000000..cce6d27
--- /dev/null
+++ b/newlib-1.20.0.tar.gz
Binary files differ
diff --git a/newlib.patches/newlib-50.description b/newlib.patches/newlib-50.description
new file mode 100644
index 0000000..d86f4ed
--- /dev/null
+++ b/newlib.patches/newlib-50.description
@@ -0,0 +1 @@
+Fix for __USER_LABEL_PREFIX__ not being concatenated properly by clang preprocessor
diff --git a/newlib.patches/newlib-50.patch b/newlib.patches/newlib-50.patch
new file mode 100644
index 0000000..4f49eb6
--- /dev/null
+++ b/newlib.patches/newlib-50.patch
@@ -0,0 +1,42 @@
+diff -aruN newlib-1.20.0/libgloss/arm/Makefile.in newlib-1.20.0-new//libgloss/arm/Makefile.in
+--- newlib-1.20.0/libgloss/arm/Makefile.in  2011-06-29 08:32:09.000000000 -0700
++++ newlib-1.20.0-new//libgloss/arm/Makefile.in 2012-09-17 18:17:04.011270636 -0700
+@@ -93,7 +93,9 @@
+ # build a test program for each target board. Just trying to get
+ # it to link is a good test, so we ignore all the errors for now.
+ #
+-all: ${CRT0} ${LINUX_CRT0} ${LINUX_BSP} ${REDBOOT_CRT0} ${REDBOOT_OBJS} ${RDPMON_CRT0} ${RDPMON_BSP} ${RDIMON_CRT0} ${RDIMON_BSP}
++all: ${CRT0}
++
++#${LINUX_CRT0} ${LINUX_BSP} ${REDBOOT_CRT0} ${REDBOOT_OBJS} ${RDPMON_CRT0} ${RDPMON_BSP} ${RDIMON_CRT0} ${RDIMON_BSP}
+ 
+ #
+ # here's where we build the test programs for each target
+@@ -146,7 +148,9 @@
+    rm -f Makefile config.status *~
+ 
+ .PHONY: install info install-info clean-info
+-install: ${CRT0_INSTALL} ${LINUX_INSTALL} ${REDBOOT_INSTALL} ${RDPMON_INSTALL} ${RDIMON_INSTALL} ${IQ80310_INSTALL}  ${PID_INSTALL}
++install: ${CRT0_INSTALL} 
++
++#${LINUX_INSTALL} ${REDBOOT_INSTALL} ${RDPMON_INSTALL} ${RDIMON_INSTALL} ${IQ80310_INSTALL}  ${PID_INSTALL}
+ 
+ install-crt0:
+    ${INSTALL_DATA} ${CRT0} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x
+diff -aruN newlib-1.20.0/newlib/libc/machine/arm/setjmp.S newlib-1.20.0-new//newlib/libc/machine/arm/setjmp.S
+--- newlib-1.20.0/newlib/libc/machine/arm/setjmp.S  2009-05-13 11:31:55.000000000 -0700
++++ newlib-1.20.0-new//newlib/libc/machine/arm/setjmp.S 2012-09-17 18:12:26.807156599 -0700
+@@ -6,11 +6,8 @@
+ #define CONCAT(a, b)  CONCAT2(a, b)
+ #define CONCAT2(a, b) a##b
+ 
+-#ifndef __USER_LABEL_PREFIX__
+-#error  __USER_LABEL_PREFIX__ not defined
+-#endif
++#define SYM(x) _##x
+ 
+-#define SYM(x) CONCAT (__USER_LABEL_PREFIX__, x)
+ 
+ #ifdef __ELF__
+ #define TYPE(x) .type SYM(x),function
+
diff --git a/newlib.patches/newlib-51.description b/newlib.patches/newlib-51.description
new file mode 100644
index 0000000..4adb533
--- /dev/null
+++ b/newlib.patches/newlib-51.description
@@ -0,0 +1 @@
+s/__warning__/deprecated/
diff --git a/newlib.patches/newlib-51.patch b/newlib.patches/newlib-51.patch
new file mode 100644
index 0000000..7d2fb26
--- /dev/null
+++ b/newlib.patches/newlib-51.patch
@@ -0,0 +1,21 @@
+diff -aruN newlib-1.20.0/newlib/libc/include/stdlib.h newlib-1.20.0-new/newlib/libc/include/stdlib.h
+--- newlib-1.20.0/newlib/libc/include/stdlib.h	2010-07-19 11:21:11.000000000 -0700
++++ newlib-1.20.0-new/newlib/libc/include/stdlib.h	2012-09-25 17:54:04.708256826 -0700
+@@ -107,14 +107,14 @@
+ int	_EXFUN(mkostemps,(char *, int, int));
+ int	_EXFUN(mkstemp,(char *));
+ int	_EXFUN(mkstemps,(char *, int));
+-char *	_EXFUN(mktemp,(char *) _ATTRIBUTE ((__warning__ ("the use of `mktemp' is dangerous; use `mkstemp' instead"))));
++char *	_EXFUN(mktemp,(char *) _ATTRIBUTE ((deprecated("the use of `mktemp' is dangerous; use `mkstemp' instead"))));
+ #endif
+ char *	_EXFUN(_mkdtemp_r, (struct _reent *, char *));
+ int	_EXFUN(_mkostemp_r, (struct _reent *, char *, int));
+ int	_EXFUN(_mkostemps_r, (struct _reent *, char *, int, int));
+ int	_EXFUN(_mkstemp_r, (struct _reent *, char *));
+ int	_EXFUN(_mkstemps_r, (struct _reent *, char *, int));
+-char *	_EXFUN(_mktemp_r, (struct _reent *, char *) _ATTRIBUTE ((__warning__ ("the use of `mktemp' is dangerous; use `mkstemp' instead"))));
++char *	_EXFUN(_mktemp_r, (struct _reent *, char *) _ATTRIBUTE ((deprecated ("the use of `mktemp' is dangerous; use `mkstemp' instead"))));
+ #endif
+ _VOID	_EXFUN(qsort,(_PTR __base, size_t __nmemb, size_t __size, int(*_compar)(const _PTR, const _PTR)));
+ int	_EXFUN(rand,(_VOID));
+
diff --git a/newlib.patches/newlib-52.patch b/newlib.patches/newlib-52.patch
new file mode 100644
index 0000000..9afe2d7
--- /dev/null
+++ b/newlib.patches/newlib-52.patch
@@ -0,0 +1,43 @@
+--- newlib-1.20.0/newlib/libc/stdlib/mallocr.c	2010-05-31 12:15:41.000000000 -0700
++++ newlib-1.20.0-new/newlib/libc/stdlib/mallocr.c	2013-05-02 12:03:25.831542637 -0700
+@@ -303,13 +303,22 @@
+ 
+ #include <reent.h>
+ 
++#ifndef MALLOC_LOCK_FUNCTION
++#define MALLOC_LOCK_FUNCTION __malloc_lock
++#endif
++
++#ifndef MALLOC_UNLOCK_FUNCTION
++#define MALLOC_UNLOCK_FUNCTION __malloc_unlock
++#endif
++
+ #define POINTER_UINT unsigned _POINTER_INT
+ #define SEPARATE_OBJECTS
+ #define HAVE_MMAP 0
+ #define MORECORE(size) _sbrk_r(reent_ptr, (size))
+ #define MORECORE_CLEARS 0
+-#define MALLOC_LOCK __malloc_lock(reent_ptr)
+-#define MALLOC_UNLOCK __malloc_unlock(reent_ptr)
++
++#define MALLOC_LOCK MALLOC_LOCK_FUNCTION(reent_ptr)
++#define MALLOC_UNLOCK MALLOC_UNLOCK_FUNCTION(reent_ptr)
+ 
+ #ifdef __CYGWIN__
+ # undef _WIN32
+@@ -325,11 +334,11 @@
+ #endif
+ 
+ #if __STD_C
+-extern void __malloc_lock(struct _reent *);
+-extern void __malloc_unlock(struct _reent *);
++extern void MALLOC_LOCK_FUNCTION(struct _reent *);
++extern void MALLOC_UNLOCK_FUNCTION(struct _reent *);
+ #else
+-extern void __malloc_lock();
+-extern void __malloc_unlock();
++extern void MALLOC_LOCK_FUNCTION();
++extern void MALLOC_UNLOCK_FUNCTION();
+ #endif
+ 
+ #if __STD_C
diff --git a/newlib.patches/newlib-53.patch b/newlib.patches/newlib-53.patch
new file mode 100644
index 0000000..9c7ca88
--- /dev/null
+++ b/newlib.patches/newlib-53.patch
@@ -0,0 +1,11 @@
+--- newlib-1.20.0/newlib/libc/locale/ldpart.c	2008-11-24 13:27:33.000000000 -0800
++++ newlib-1.20.0/newlib/libc/locale/ldpart.c.new	2017-06-23 11:07:01.323063165 -0700
+@@ -94,7 +94,7 @@
+ 	if (!_PathLocale)
+ 		goto no_locale;
+ 	/* Range checking not needed, 'name' size is limited */
+-	strcpy(filename, _PathLocale);
++	strncpy(filename, _PathLocale, PATH_MAX);
+ 	strcat(filename, "/");
+ 	strcat(filename, name);
+ 	strcat(filename, "/");
diff --git a/newlib.patches/newlib-54.description b/newlib.patches/newlib-54.description
new file mode 100644
index 0000000..5e92588
--- /dev/null
+++ b/newlib.patches/newlib-54.description
@@ -0,0 +1,2 @@
+ANT-466: Fixed Security SAST Defect: 10491 - STRING_OVERFLOW, as detected by Coverity
+(strcpying into a fixed-size buffer from a non-fixed-size buffer)
diff --git a/newlib.patches/newlib-54.patch b/newlib.patches/newlib-54.patch
new file mode 100644
index 0000000..af70fee
--- /dev/null
+++ b/newlib.patches/newlib-54.patch
@@ -0,0 +1,14 @@
+diff -aruN newlib-1.20.0/newlib/libc/locale/lctype.c newlibDup/newlib/libc/locale/lctype.c
+--- newlib-1.20.0/newlib/libc/locale/lctype.c	2010-05-03 02:25:32.000000000 -0700
++++ newlibDup/newlib/libc/locale/lctype.c	2017-08-17 09:33:23.812683710 -0700
+@@ -82,7 +82,9 @@
+ 	  _ctype_using_locale = 0;
+ 	else
+ 	  {
+-	    _ctype_locale.codeset = strcpy (_ctype_locale_buf, charset);
++ 	    // Strncpy'ed to prevent memory overruns, limited to (_CTYPE_BUF_SIZE - 1) to prevent
++ 	    // overwriting of the last null char in _ctype_locale_buf that is needed for a string
++ 	    _ctype_locale.codeset = strncpy (_ctype_locale_buf, charset, (_CTYPE_BUF_SIZE - 1));
+ 	    char *mbc = _ctype_locale_buf + _CTYPE_BUF_SIZE - 2;
+ 	    mbc[0] = mb_cur_max;
+ 	    mbc[1] = '\0';
diff --git a/newlib.url b/newlib.url
new file mode 100644
index 0000000..858e60d
--- /dev/null
+++ b/newlib.url
@@ -0,0 +1 @@
+ftp://sourceware.org/pub/newlib/newlib-1.20.0.tar.gz
diff --git a/newlib.version b/newlib.version
new file mode 100644
index 0000000..3989355
--- /dev/null
+++ b/newlib.version
@@ -0,0 +1 @@
+1.20.0