Merge pull request #1450 from keith-packard/libstdc++-compat

Libstdc++ compat
This commit is contained in:
Chris Packham 2021-06-20 20:22:07 +12:00 committed by GitHub
commit 28101b8256
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 838 additions and 5 deletions

View File

@ -0,0 +1,307 @@
From 4cea8f51c23ce7112f21ff4091e7d97272b81664 Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Sun, 24 Jan 2021 14:20:33 -0800
Subject: [PATCH] Remove use of include_next from c++ headers
Using include_next bypasses the default header search path and lets
files later in the include path take priority over earlier files.
This makes replacing libc impossible as the default libc headers will
occur after the libstdc++ headers, and so be picked up in place of
headers inserted at the begining of the search path or appended to the
end of the search path.
Using include_next is a hack to work-around broken combinations of
libraries, and is not necessary in a well constructed toolchain.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
libstdc++-v3/include/bits/std_abs.h | 4 ++--
libstdc++-v3/include/c/cassert | 2 +-
libstdc++-v3/include/c/cctype | 2 +-
libstdc++-v3/include/c/cerrno | 2 +-
libstdc++-v3/include/c/cfloat | 2 +-
libstdc++-v3/include/c/climits | 2 +-
libstdc++-v3/include/c/clocale | 2 +-
libstdc++-v3/include/c/cmath | 2 +-
libstdc++-v3/include/c/csetjmp | 2 +-
libstdc++-v3/include/c/csignal | 2 +-
libstdc++-v3/include/c/cstdarg | 2 +-
libstdc++-v3/include/c/cstddef | 2 +-
libstdc++-v3/include/c/cstdio | 2 +-
libstdc++-v3/include/c/cstdlib | 2 +-
libstdc++-v3/include/c/cstring | 2 +-
libstdc++-v3/include/c/ctime | 2 +-
libstdc++-v3/include/c/cuchar | 2 +-
libstdc++-v3/include/c/cwchar | 2 +-
libstdc++-v3/include/c/cwctype | 2 +-
libstdc++-v3/include/c_global/cmath | 2 +-
libstdc++-v3/include/c_global/cstdlib | 2 +-
21 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/libstdc++-v3/include/bits/std_abs.h b/libstdc++-v3/include/bits/std_abs.h
index ae6bfc1b1ac..249ed53a3ce 100644
--- a/libstdc++-v3/include/bits/std_abs.h
+++ b/libstdc++-v3/include/bits/std_abs.h
@@ -35,9 +35,9 @@
#include <bits/c++config.h>
#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
-#include_next <stdlib.h>
+#include <stdlib.h>
#ifdef __CORRECT_ISO_CPP_MATH_H_PROTO
-# include_next <math.h>
+# include <math.h>
#endif
#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
diff --git a/libstdc++-v3/include/c/cassert b/libstdc++-v3/include/c/cassert
index abd8c0538ef..3e1b97f1626 100644
--- a/libstdc++-v3/include/c/cassert
+++ b/libstdc++-v3/include/c/cassert
@@ -31,4 +31,4 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <assert.h>
+#include <assert.h>
diff --git a/libstdc++-v3/include/c/cctype b/libstdc++-v3/include/c/cctype
index d53cb3d43f3..3def33f2077 100644
--- a/libstdc++-v3/include/c/cctype
+++ b/libstdc++-v3/include/c/cctype
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <ctype.h>
+#include <ctype.h>
#endif
diff --git a/libstdc++-v3/include/c/cerrno b/libstdc++-v3/include/c/cerrno
index a8d3869efb6..3725137c115 100644
--- a/libstdc++-v3/include/c/cerrno
+++ b/libstdc++-v3/include/c/cerrno
@@ -41,7 +41,7 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <errno.h>
+#include <errno.h>
// Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998
#ifndef errno
diff --git a/libstdc++-v3/include/c/cfloat b/libstdc++-v3/include/c/cfloat
index 5865d427c20..df821645e4d 100644
--- a/libstdc++-v3/include/c/cfloat
+++ b/libstdc++-v3/include/c/cfloat
@@ -32,6 +32,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <float.h>
+#include <float.h>
#endif
diff --git a/libstdc++-v3/include/c/climits b/libstdc++-v3/include/c/climits
index 849afadeffc..b153fa8c27c 100644
--- a/libstdc++-v3/include/c/climits
+++ b/libstdc++-v3/include/c/climits
@@ -32,6 +32,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <limits.h>
+#include <limits.h>
#endif
diff --git a/libstdc++-v3/include/c/clocale b/libstdc++-v3/include/c/clocale
index fc84745397d..5ebccdf5006 100644
--- a/libstdc++-v3/include/c/clocale
+++ b/libstdc++-v3/include/c/clocale
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <locale.h>
+#include <locale.h>
#endif
diff --git a/libstdc++-v3/include/c/cmath b/libstdc++-v3/include/c/cmath
index 2c51f2f13bc..2fcd09e4ef9 100644
--- a/libstdc++-v3/include/c/cmath
+++ b/libstdc++-v3/include/c/cmath
@@ -33,7 +33,7 @@
#include <bits/c++config.h>
-#include_next <math.h>
+#include <math.h>
// Get rid of those macros defined in <math.h> in lieu of real functions.
#undef abs
diff --git a/libstdc++-v3/include/c/csetjmp b/libstdc++-v3/include/c/csetjmp
index db83610d95f..5abafcb160d 100644
--- a/libstdc++-v3/include/c/csetjmp
+++ b/libstdc++-v3/include/c/csetjmp
@@ -31,7 +31,7 @@
#pragma GCC system_header
-#include_next <setjmp.h>
+#include <setjmp.h>
// Get rid of those macros defined in <setjmp.h> in lieu of real functions.
#undef longjmp
diff --git a/libstdc++-v3/include/c/csignal b/libstdc++-v3/include/c/csignal
index 986c5d3daca..77cb7634a69 100644
--- a/libstdc++-v3/include/c/csignal
+++ b/libstdc++-v3/include/c/csignal
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <signal.h>
+#include <signal.h>
#endif
diff --git a/libstdc++-v3/include/c/cstdarg b/libstdc++-v3/include/c/cstdarg
index 6b6e1850753..0dfc60cc6ba 100644
--- a/libstdc++-v3/include/c/cstdarg
+++ b/libstdc++-v3/include/c/cstdarg
@@ -32,6 +32,6 @@
#pragma GCC system_header
#undef __need___va_list
-#include_next <stdarg.h>
+#include <stdarg.h>
#endif
diff --git a/libstdc++-v3/include/c/cstddef b/libstdc++-v3/include/c/cstddef
index 7fc8ce34efc..fc90dfb3f18 100644
--- a/libstdc++-v3/include/c/cstddef
+++ b/libstdc++-v3/include/c/cstddef
@@ -35,6 +35,6 @@
#define __need_ptrdiff_t
#define __need_NULL
#define __need_offsetof
-#include_next <stddef.h>
+#include <stddef.h>
#endif
diff --git a/libstdc++-v3/include/c/cstdio b/libstdc++-v3/include/c/cstdio
index e943aa8e725..89bcd2d7391 100644
--- a/libstdc++-v3/include/c/cstdio
+++ b/libstdc++-v3/include/c/cstdio
@@ -31,7 +31,7 @@
#pragma GCC system_header
-#include_next <stdio.h>
+#include <stdio.h>
// Get rid of those macros defined in <stdio.h> in lieu of real functions.
#undef clearerr
diff --git a/libstdc++-v3/include/c/cstdlib b/libstdc++-v3/include/c/cstdlib
index 86d9587482f..a26013286be 100644
--- a/libstdc++-v3/include/c/cstdlib
+++ b/libstdc++-v3/include/c/cstdlib
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <stdlib.h>
+#include <stdlib.h>
#endif
diff --git a/libstdc++-v3/include/c/cstring b/libstdc++-v3/include/c/cstring
index 8b1e89b13b6..ca56c75e753 100644
--- a/libstdc++-v3/include/c/cstring
+++ b/libstdc++-v3/include/c/cstring
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <string.h>
+#include <string.h>
#endif
diff --git a/libstdc++-v3/include/c/ctime b/libstdc++-v3/include/c/ctime
index 367172b21eb..135da2a25c4 100644
--- a/libstdc++-v3/include/c/ctime
+++ b/libstdc++-v3/include/c/ctime
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <time.h>
+#include <time.h>
#endif
diff --git a/libstdc++-v3/include/c/cuchar b/libstdc++-v3/include/c/cuchar
index e63b55ae12c..c79708fba6a 100644
--- a/libstdc++-v3/include/c/cuchar
+++ b/libstdc++-v3/include/c/cuchar
@@ -39,7 +39,7 @@
#include <cwchar>
#if _GLIBCXX_USE_C11_UCHAR_CXX11
-# include_next <uchar.h>
+# include <uchar.h>
#endif
#endif // C++11
diff --git a/libstdc++-v3/include/c/cwchar b/libstdc++-v3/include/c/cwchar
index 05d4d70c6fc..0fc9a9a394a 100644
--- a/libstdc++-v3/include/c/cwchar
+++ b/libstdc++-v3/include/c/cwchar
@@ -36,7 +36,7 @@
#include <ctime>
#if _GLIBCXX_HAVE_WCHAR_H
-#include_next <wchar.h>
+#include <wchar.h>
#endif
// Need to do a bit of trickery here with mbstate_t as char_traits
diff --git a/libstdc++-v3/include/c/cwctype b/libstdc++-v3/include/c/cwctype
index 0626765d6c8..4839b693e46 100644
--- a/libstdc++-v3/include/c/cwctype
+++ b/libstdc++-v3/include/c/cwctype
@@ -34,7 +34,7 @@
#include <bits/c++config.h>
#if _GLIBCXX_HAVE_WCTYPE_H
-#include_next <wctype.h>
+#include <wctype.h>
#endif
#endif
diff --git a/libstdc++-v3/include/c_global/cmath b/libstdc++-v3/include/c_global/cmath
index 39a6b036b8c..bfb6dcd4c88 100644
--- a/libstdc++-v3/include/c_global/cmath
+++ b/libstdc++-v3/include/c_global/cmath
@@ -42,7 +42,7 @@
#include <bits/cpp_type_traits.h>
#include <ext/type_traits.h>
#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
-#include_next <math.h>
+#include <math.h>
#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
#include <bits/std_abs.h>
diff --git a/libstdc++-v3/include/c_global/cstdlib b/libstdc++-v3/include/c_global/cstdlib
index 47b954cf2fa..996a87b372c 100644
--- a/libstdc++-v3/include/c_global/cstdlib
+++ b/libstdc++-v3/include/c_global/cstdlib
@@ -72,7 +72,7 @@ namespace std
// Need to ensure this finds the C library's <stdlib.h> not a libstdc++
// wrapper that might already be installed later in the include search path.
#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
-#include_next <stdlib.h>
+#include <stdlib.h>
#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
#include <bits/std_abs.h>
--
2.30.0

View File

@ -0,0 +1,307 @@
From 9db1164d68ee1da7434af48db4f828d7df51b055 Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Sun, 24 Jan 2021 14:20:33 -0800
Subject: [PATCH] Remove use of include_next from c++ headers
Using include_next bypasses the default header search path and lets
files later in the include path take priority over earlier files.
This makes replacing libc impossible as the default libc headers will
occur after the libstdc++ headers, and so be picked up in place of
headers inserted at the begining of the search path or appended to the
end of the search path.
Using include_next is a hack to work-around broken combinations of
libraries, and is not necessary in a well constructed toolchain.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
libstdc++-v3/include/bits/std_abs.h | 4 ++--
libstdc++-v3/include/c/cassert | 2 +-
libstdc++-v3/include/c/cctype | 2 +-
libstdc++-v3/include/c/cerrno | 2 +-
libstdc++-v3/include/c/cfloat | 2 +-
libstdc++-v3/include/c/climits | 2 +-
libstdc++-v3/include/c/clocale | 2 +-
libstdc++-v3/include/c/cmath | 2 +-
libstdc++-v3/include/c/csetjmp | 2 +-
libstdc++-v3/include/c/csignal | 2 +-
libstdc++-v3/include/c/cstdarg | 2 +-
libstdc++-v3/include/c/cstddef | 2 +-
libstdc++-v3/include/c/cstdio | 2 +-
libstdc++-v3/include/c/cstdlib | 2 +-
libstdc++-v3/include/c/cstring | 2 +-
libstdc++-v3/include/c/ctime | 2 +-
libstdc++-v3/include/c/cuchar | 2 +-
libstdc++-v3/include/c/cwchar | 2 +-
libstdc++-v3/include/c/cwctype | 2 +-
libstdc++-v3/include/c_global/cmath | 2 +-
libstdc++-v3/include/c_global/cstdlib | 2 +-
21 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/libstdc++-v3/include/bits/std_abs.h b/libstdc++-v3/include/bits/std_abs.h
index ae6bfc1b1ac..249ed53a3ce 100644
--- a/libstdc++-v3/include/bits/std_abs.h
+++ b/libstdc++-v3/include/bits/std_abs.h
@@ -35,9 +35,9 @@
#include <bits/c++config.h>
#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
-#include_next <stdlib.h>
+#include <stdlib.h>
#ifdef __CORRECT_ISO_CPP_MATH_H_PROTO
-# include_next <math.h>
+# include <math.h>
#endif
#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
diff --git a/libstdc++-v3/include/c/cassert b/libstdc++-v3/include/c/cassert
index abd8c0538ef..3e1b97f1626 100644
--- a/libstdc++-v3/include/c/cassert
+++ b/libstdc++-v3/include/c/cassert
@@ -31,4 +31,4 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <assert.h>
+#include <assert.h>
diff --git a/libstdc++-v3/include/c/cctype b/libstdc++-v3/include/c/cctype
index d53cb3d43f3..3def33f2077 100644
--- a/libstdc++-v3/include/c/cctype
+++ b/libstdc++-v3/include/c/cctype
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <ctype.h>
+#include <ctype.h>
#endif
diff --git a/libstdc++-v3/include/c/cerrno b/libstdc++-v3/include/c/cerrno
index a8d3869efb6..3725137c115 100644
--- a/libstdc++-v3/include/c/cerrno
+++ b/libstdc++-v3/include/c/cerrno
@@ -41,7 +41,7 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <errno.h>
+#include <errno.h>
// Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998
#ifndef errno
diff --git a/libstdc++-v3/include/c/cfloat b/libstdc++-v3/include/c/cfloat
index 5865d427c20..df821645e4d 100644
--- a/libstdc++-v3/include/c/cfloat
+++ b/libstdc++-v3/include/c/cfloat
@@ -32,6 +32,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <float.h>
+#include <float.h>
#endif
diff --git a/libstdc++-v3/include/c/climits b/libstdc++-v3/include/c/climits
index 849afadeffc..b153fa8c27c 100644
--- a/libstdc++-v3/include/c/climits
+++ b/libstdc++-v3/include/c/climits
@@ -32,6 +32,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <limits.h>
+#include <limits.h>
#endif
diff --git a/libstdc++-v3/include/c/clocale b/libstdc++-v3/include/c/clocale
index fc84745397d..5ebccdf5006 100644
--- a/libstdc++-v3/include/c/clocale
+++ b/libstdc++-v3/include/c/clocale
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <locale.h>
+#include <locale.h>
#endif
diff --git a/libstdc++-v3/include/c/cmath b/libstdc++-v3/include/c/cmath
index 2c51f2f13bc..2fcd09e4ef9 100644
--- a/libstdc++-v3/include/c/cmath
+++ b/libstdc++-v3/include/c/cmath
@@ -33,7 +33,7 @@
#include <bits/c++config.h>
-#include_next <math.h>
+#include <math.h>
// Get rid of those macros defined in <math.h> in lieu of real functions.
#undef abs
diff --git a/libstdc++-v3/include/c/csetjmp b/libstdc++-v3/include/c/csetjmp
index db83610d95f..5abafcb160d 100644
--- a/libstdc++-v3/include/c/csetjmp
+++ b/libstdc++-v3/include/c/csetjmp
@@ -31,7 +31,7 @@
#pragma GCC system_header
-#include_next <setjmp.h>
+#include <setjmp.h>
// Get rid of those macros defined in <setjmp.h> in lieu of real functions.
#undef longjmp
diff --git a/libstdc++-v3/include/c/csignal b/libstdc++-v3/include/c/csignal
index 986c5d3daca..77cb7634a69 100644
--- a/libstdc++-v3/include/c/csignal
+++ b/libstdc++-v3/include/c/csignal
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <signal.h>
+#include <signal.h>
#endif
diff --git a/libstdc++-v3/include/c/cstdarg b/libstdc++-v3/include/c/cstdarg
index 6b6e1850753..0dfc60cc6ba 100644
--- a/libstdc++-v3/include/c/cstdarg
+++ b/libstdc++-v3/include/c/cstdarg
@@ -32,6 +32,6 @@
#pragma GCC system_header
#undef __need___va_list
-#include_next <stdarg.h>
+#include <stdarg.h>
#endif
diff --git a/libstdc++-v3/include/c/cstddef b/libstdc++-v3/include/c/cstddef
index 7fc8ce34efc..fc90dfb3f18 100644
--- a/libstdc++-v3/include/c/cstddef
+++ b/libstdc++-v3/include/c/cstddef
@@ -35,6 +35,6 @@
#define __need_ptrdiff_t
#define __need_NULL
#define __need_offsetof
-#include_next <stddef.h>
+#include <stddef.h>
#endif
diff --git a/libstdc++-v3/include/c/cstdio b/libstdc++-v3/include/c/cstdio
index e943aa8e725..89bcd2d7391 100644
--- a/libstdc++-v3/include/c/cstdio
+++ b/libstdc++-v3/include/c/cstdio
@@ -31,7 +31,7 @@
#pragma GCC system_header
-#include_next <stdio.h>
+#include <stdio.h>
// Get rid of those macros defined in <stdio.h> in lieu of real functions.
#undef clearerr
diff --git a/libstdc++-v3/include/c/cstdlib b/libstdc++-v3/include/c/cstdlib
index 86d9587482f..a26013286be 100644
--- a/libstdc++-v3/include/c/cstdlib
+++ b/libstdc++-v3/include/c/cstdlib
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <stdlib.h>
+#include <stdlib.h>
#endif
diff --git a/libstdc++-v3/include/c/cstring b/libstdc++-v3/include/c/cstring
index 8b1e89b13b6..ca56c75e753 100644
--- a/libstdc++-v3/include/c/cstring
+++ b/libstdc++-v3/include/c/cstring
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <string.h>
+#include <string.h>
#endif
diff --git a/libstdc++-v3/include/c/ctime b/libstdc++-v3/include/c/ctime
index 367172b21eb..135da2a25c4 100644
--- a/libstdc++-v3/include/c/ctime
+++ b/libstdc++-v3/include/c/ctime
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <time.h>
+#include <time.h>
#endif
diff --git a/libstdc++-v3/include/c/cuchar b/libstdc++-v3/include/c/cuchar
index e63b55ae12c..c79708fba6a 100644
--- a/libstdc++-v3/include/c/cuchar
+++ b/libstdc++-v3/include/c/cuchar
@@ -39,7 +39,7 @@
#include <cwchar>
#if _GLIBCXX_USE_C11_UCHAR_CXX11
-# include_next <uchar.h>
+# include <uchar.h>
#endif
#endif // C++11
diff --git a/libstdc++-v3/include/c/cwchar b/libstdc++-v3/include/c/cwchar
index 05d4d70c6fc..0fc9a9a394a 100644
--- a/libstdc++-v3/include/c/cwchar
+++ b/libstdc++-v3/include/c/cwchar
@@ -36,7 +36,7 @@
#include <ctime>
#if _GLIBCXX_HAVE_WCHAR_H
-#include_next <wchar.h>
+#include <wchar.h>
#endif
// Need to do a bit of trickery here with mbstate_t as char_traits
diff --git a/libstdc++-v3/include/c/cwctype b/libstdc++-v3/include/c/cwctype
index 0626765d6c8..4839b693e46 100644
--- a/libstdc++-v3/include/c/cwctype
+++ b/libstdc++-v3/include/c/cwctype
@@ -34,7 +34,7 @@
#include <bits/c++config.h>
#if _GLIBCXX_HAVE_WCTYPE_H
-#include_next <wctype.h>
+#include <wctype.h>
#endif
#endif
diff --git a/libstdc++-v3/include/c_global/cmath b/libstdc++-v3/include/c_global/cmath
index 39a6b036b8c..bfb6dcd4c88 100644
--- a/libstdc++-v3/include/c_global/cmath
+++ b/libstdc++-v3/include/c_global/cmath
@@ -42,7 +42,7 @@
#include <bits/cpp_type_traits.h>
#include <ext/type_traits.h>
#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
-#include_next <math.h>
+#include <math.h>
#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
#include <bits/std_abs.h>
diff --git a/libstdc++-v3/include/c_global/cstdlib b/libstdc++-v3/include/c_global/cstdlib
index 47b954cf2fa..996a87b372c 100644
--- a/libstdc++-v3/include/c_global/cstdlib
+++ b/libstdc++-v3/include/c_global/cstdlib
@@ -72,7 +72,7 @@ namespace std
// Need to ensure this finds the C library's <stdlib.h> not a libstdc++
// wrapper that might already be installed later in the include search path.
#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
-#include_next <stdlib.h>
+#include <stdlib.h>
#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
#include <bits/std_abs.h>
--
2.31.1

View File

@ -0,0 +1,30 @@
From 9d0640874425e9f3f265c9baff7a47139b25ea7d Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Thu, 14 Jan 2021 17:54:22 -0800
Subject: [PATCH 1/2] libc: Remove #include <sys/select.h> from sys/types.h
picolibc's sys/select.h is likely to be replaced by the underlying
operating system version (as it is on Zephyr). Don't include it from
sys/types.h as that version may depend on other definitions in
sys/types.h which haven't yet been defined.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
newlib/libc/include/sys/types.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/newlib/libc/include/sys/types.h b/newlib/libc/include/sys/types.h
index ea25222c2..1a0abcb83 100644
--- a/newlib/libc/include/sys/types.h
+++ b/newlib/libc/include/sys/types.h
@@ -75,7 +75,6 @@ typedef __intptr_t register_t;
#if __BSD_VISIBLE
#include <machine/endian.h>
-#include <sys/select.h>
# define physadr physadr_t
# define quad quad_t
--
2.30.0

View File

@ -0,0 +1,77 @@
From 9df2d784439720abbf67fa96c6515a5c4a9f230a Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Thu, 14 Jan 2021 18:48:44 -0800
Subject: [PATCH 2/2] tinystdio: Fix snprintf(buf, 0, ...) to not smash buffer
snprintf(buf, 0) should not write anything to the destination, not
even a trailing '\0'. The tinystdio implementation had a signed
comparison bug where this case would cause a null to be placed in the
output buffer at the size of the data that would have been written.
Add a test to make sure snprintf respects the 'len' parameter
correctly.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
newlib/libc/tinystdio/snprintf.c | 2 +-
test/printf_scanf.c | 31 +++++++++++++++++++++++++++++++
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/newlib/libc/tinystdio/snprintf.c b/newlib/libc/tinystdio/snprintf.c
index 52d2f84d3..1052c9338 100644
--- a/newlib/libc/tinystdio/snprintf.c
+++ b/newlib/libc/tinystdio/snprintf.c
@@ -56,7 +56,7 @@ snprintf(char *s, size_t n, const char *fmt, ...)
i = vfprintf(&f.file, fmt, ap);
va_end(ap);
- if (n >= 0 && i >= 0)
+ if ((int) n >= 0 && i >= 0)
s[i < n ? i : n] = 0;
return i;
diff --git a/test/printf_scanf.c b/test/printf_scanf.c
index 2bc83e1d0..f89f46e4f 100644
--- a/test/printf_scanf.c
+++ b/test/printf_scanf.c
@@ -96,6 +96,37 @@ main(int argc, char **argv)
fflush(stdout);
}
#endif
+
+ /*
+ * test snprintf to make sure it doesn't overwrite the specified buffer
+ * length (even if that is zero)
+ */
+ for (x = 0; x <= 6; x++) {
+ char tbuf[10] = "xxxxxxxxx";
+ const char ref[10] = "xxxxxxxxx";
+ int i = snprintf(tbuf, x, "%s", "123");
+ int y = x <= 4 ? x : 4;
+ if (i != 3) {
+ printf("snprintf(tbuf, %d, \"%%s\", \"123\") return %d instead of %d\n",
+ x, i, 3);
+ errors++;
+ }
+ int l = strlen(tbuf);
+ if (y > 0 && l != y - 1) {
+ printf("returned buffer len want %d got %d\n", y - 1, l);
+ errors++;
+ }
+ if (y > 0 && strncmp(tbuf, "123", y - 1) != 0) {
+ strncpy(buf, "123", y - 1);
+ buf[y-1] = '\0';
+ printf("returned buffer want %s got %s\n", buf, tbuf);
+ errors++;
+ }
+ if (memcmp(tbuf + y, ref + y, sizeof(tbuf) - y) != 0) {
+ printf("tail of buf mangled %s\n", tbuf + y);
+ errors++;
+ }
+ }
for (x = 0; x < 32; x++) {
unsigned int v = 0x12345678 >> x;
unsigned int r;
--
2.30.0

View File

@ -0,0 +1,108 @@
From f0c62653bbcf68291a7dd621db367a9fef666183 Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Sun, 24 Jan 2021 15:27:14 -0800
Subject: [PATCH 3/3] libc: Expose wchar stdio prototypes even for TINY_STDIO
This makes libstdc++ happy when wrapping these names, even though they
aren't actually available for appplications.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
newlib/libc/include/wchar.h | 39 +++++++++++++++++++------------------
1 file changed, 20 insertions(+), 19 deletions(-)
diff --git a/newlib/libc/include/wchar.h b/newlib/libc/include/wchar.h
index 8a9c4b0fe..5dc3af93c 100644
--- a/newlib/libc/include/wchar.h
+++ b/newlib/libc/include/wchar.h
@@ -217,8 +217,6 @@ float wcstof_l (const wchar_t *, wchar_t **, locale_t);
long double wcstold_l (const wchar_t *, wchar_t **, locale_t);
#endif
-#ifndef TINY_STDIO
-
wint_t fgetwc (__FILE *);
wchar_t *fgetws (wchar_t *__restrict, int, __FILE *__restrict);
wint_t fputwc (wchar_t, __FILE *);
@@ -232,6 +230,8 @@ wint_t putwc (wchar_t, __FILE *);
wint_t putwchar (wchar_t);
wint_t ungetwc (wint_t wc, __FILE *);
+#ifndef TINY_STDIO
+
struct _reent;
wint_t _fgetwc_r (struct _reent *, __FILE *);
@@ -253,6 +253,24 @@ wint_t _putwchar_r (struct _reent *, wchar_t);
wint_t _putwchar_unlocked_r (struct _reent *, wchar_t);
wint_t _ungetwc_r (struct _reent *, wint_t wc, __FILE *);
+int _fwprintf_r (struct _reent *, __FILE *, const wchar_t *, ...);
+int _swprintf_r (struct _reent *, wchar_t *, size_t, const wchar_t *, ...);
+int _vfwprintf_r (struct _reent *, __FILE *, const wchar_t *, va_list);
+int _vswprintf_r (struct _reent *, wchar_t *, size_t, const wchar_t *, va_list);
+int _vwprintf_r (struct _reent *, const wchar_t *, va_list);
+int _wprintf_r (struct _reent *, const wchar_t *, ...);
+
+int _fwscanf_r (struct _reent *, __FILE *, const wchar_t *, ...);
+int _swscanf_r (struct _reent *, const wchar_t *, const wchar_t *, ...);
+int _vfwscanf_r (struct _reent *, __FILE *, const wchar_t *, va_list);
+int _vswscanf_r (struct _reent *, const wchar_t *, const wchar_t *, va_list);
+int _vwscanf_r (struct _reent *, const wchar_t *, va_list);
+int _wscanf_r (struct _reent *, const wchar_t *, ...);
+
+__FILE *_open_wmemstream_r (struct _reent *, wchar_t **, size_t *);
+
+#endif
+
#if __GNU_VISIBLE
wint_t fgetwc_unlocked (__FILE *);
wchar_t *fgetws_unlocked (wchar_t *__restrict, int, __FILE *__restrict);
@@ -267,7 +285,6 @@ wint_t putwchar_unlocked (wchar_t);
#if __POSIX_VISIBLE >= 200809
__FILE *open_wmemstream (wchar_t **, size_t *);
#endif
-__FILE *_open_wmemstream_r (struct _reent *, wchar_t **, size_t *);
#if __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE >= 500
int fwprintf (__FILE *__restrict, const wchar_t *__restrict, ...);
@@ -281,13 +298,6 @@ int vwprintf (const wchar_t *__restrict, va_list);
int wprintf (const wchar_t *__restrict, ...);
#endif
-int _fwprintf_r (struct _reent *, __FILE *, const wchar_t *, ...);
-int _swprintf_r (struct _reent *, wchar_t *, size_t, const wchar_t *, ...);
-int _vfwprintf_r (struct _reent *, __FILE *, const wchar_t *, va_list);
-int _vswprintf_r (struct _reent *, wchar_t *, size_t, const wchar_t *, va_list);
-int _vwprintf_r (struct _reent *, const wchar_t *, va_list);
-int _wprintf_r (struct _reent *, const wchar_t *, ...);
-
#if __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE >= 500
int fwscanf (__FILE *__restrict, const wchar_t *__restrict, ...);
int swscanf (const wchar_t *__restrict,
@@ -300,13 +310,6 @@ int vwscanf (const wchar_t *__restrict, va_list);
int wscanf (const wchar_t *__restrict, ...);
#endif
-int _fwscanf_r (struct _reent *, __FILE *, const wchar_t *, ...);
-int _swscanf_r (struct _reent *, const wchar_t *, const wchar_t *, ...);
-int _vfwscanf_r (struct _reent *, __FILE *, const wchar_t *, va_list);
-int _vswscanf_r (struct _reent *, const wchar_t *, const wchar_t *, va_list);
-int _vwscanf_r (struct _reent *, const wchar_t *, va_list);
-int _wscanf_r (struct _reent *, const wchar_t *, ...);
-
#define getwc(fp) fgetwc(fp)
#define putwc(wc,fp) fputwc((wc), (fp))
#define getwchar() fgetwc(stdin)
@@ -319,8 +322,6 @@ int _wscanf_r (struct _reent *, const wchar_t *, ...);
#define putwchar_unlocked(wc) fputwc_unlocked((wc), stdout)
#endif
-#endif /* !TINY_STDIO */
-
_END_STD_C
#if __SSP_FORTIFY_LEVEL > 0
--
2.30.0

4
packages/picolibc/1.5.1/chksum vendored Normal file
View File

@ -0,0 +1,4 @@
md5 picolibc-1.5.1.tar.xz e2221b038181ae0c9f7b0bd3b1353d9e
sha1 picolibc-1.5.1.tar.xz ad86b3f02fa7fc62563984f2c1a20ee8b4e566b9
sha256 picolibc-1.5.1.tar.xz 06b34f34af4cef1be16e7d2e6de9f0c3aa9980dd7fd86c8b1b78331efbfa9db6
sha512 picolibc-1.5.1.tar.xz 882ad8a20ab6dd8816a8b468834c3fcd66dd57f668f9fcb53e92b99c643377e15df2c37e80f6212c82d4ec63320575e0f7158c071edf5d8f66bb58aa4eecfd24

View File

@ -1,4 +0,0 @@
md5 picolibc-1.5.tar.xz f883ccdb907f13bd79ccecb6b677cc99
sha1 picolibc-1.5.tar.xz 549b03479feab74042c58ca5903f2a5fd63dca65
sha256 picolibc-1.5.tar.xz 88bd1b6e050145e285cb61c8cf4ce75714a8eb5d80cf89d0d0edc4f3fa067db1
sha512 picolibc-1.5.tar.xz 7f50bc4bc7d8dbfb6feba09eee896918f5ac8b57d27c2d8158f17dc7d6778b80798c87edee92cf20d27b1dd2b3d1bfb157cfd9084019fdb7a6173ef959f03a92

4
packages/picolibc/1.6.2/chksum vendored Normal file
View File

@ -0,0 +1,4 @@
md5 picolibc-1.6.2.tar.xz 12a90c1886fff1b3169e16e005396160
sha1 picolibc-1.6.2.tar.xz 88e3aae511cbf86a7f095dfe387a0c5618fd697c
sha256 picolibc-1.6.2.tar.xz d2bd17409f11e7c3bf72c4c244244e70e2086c640e700a7800c7fa3513cd9c4d
sha512 picolibc-1.6.2.tar.xz 64ca47814c60e873989adc6ec33bfd94877ed78537a858f15f5795b0a5896a80fd900a2d54d6ad3241ef3da56b423181dc56fe4fa105951196ec71d0e0c6ece2

0
packages/picolibc/1.6.2/version.desc vendored Normal file
View File

View File

@ -1,6 +1,6 @@
origin='keithp.com' origin='keithp.com'
repository='git https://github.com/picolibc/picolibc.git' repository='git https://github.com/picolibc/picolibc.git'
milestones='1.4.7' milestones='1.4 1.5 1.6'
relevantpattern='*.*|.*. *.*|.' relevantpattern='*.*|.*. *.*|.'
archive_formats='.tar.xz' archive_formats='.tar.xz'
mirrors='https://github.com/picolibc/picolibc/releases/download/${CT_PICOLIBC_VERSION}' mirrors='https://github.com/picolibc/picolibc/releases/download/${CT_PICOLIBC_VERSION}'