libcxx: Update 0001-libcxx-Port-to-NuttX-https-nuttx.apache.org-RTOS.patch

All changes come from:
from YAMAMOTO Takashi <yamamoto@midokura.com>

Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
Xiang Xiao 2020-11-08 18:09:47 +08:00 committed by Alan Carvalho de Assis
parent ab176cf1d3
commit b23bca5cb3

View File

@ -1,24 +1,62 @@
From f2c553278288eef4c98ac4bbebc07a03af033718 Mon Sep 17 00:00:00 2001
From 10891b1c9eda0c87e33b0c0ba87f17a83930093c Mon Sep 17 00:00:00 2001
From: Xiang Xiao <xiaoxiang@xiaomi.com>
Date: Mon, 15 Jun 2020 16:00:51 +0800
Date: Fri, 2 Oct 2020 13:25:43 +0800
Subject: [PATCH] [libcxx] Port to NuttX(https://nuttx.apache.org/) RTOS
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
Change-Id: I6ae68add2287aacbe66ae9d6a500a1fd1e131cd9
Since NuttX conform to POSIX standard, the code need to add is very simple
Co-authored-by: YAMAMOTO Takashi <yamamoto@midokura.com>
Differential Revision: https://reviews.llvm.org/D88718
---
include/__config | 1 +
include/__config | 31 +++++++++++++++++++++++++-
include/__locale | 2 ++
include/support/nuttx/xlocale.h | 27 +++++++++++++++++++++++++++
src/include/config_elast.h | 2 +-
include/support/nuttx/xlocale.h | 18 +++++++++++++++
src/include/config_elast.h | 4 ++++
src/locale.cpp | 2 +-
5 files changed, 32 insertions(+), 2 deletions(-)
5 files changed, 55 insertions(+), 2 deletions(-)
create mode 100644 include/support/nuttx/xlocale.h
diff --git a/include/__config libcxx/include/__config
index de09601e5..404c34b09 100644
index 575147cead4..32036094017 100644
--- a/include/__config
+++ libcxx/include/__config
@@ -1130,6 +1130,7 @@ extern "C" void __sanitizer_annotate_contiguous_container(
@@ -10,6 +10,34 @@
#ifndef _LIBCPP_CONFIG
#define _LIBCPP_CONFIG
+// NuttX is sometimes built as a native target.
+// In that case, the __NuttX__ macro is predefined by the compiler.
+// https://github.com/NuttX/buildroot
+//
+// In other cases, __NuttX__ is an ordinary user-definded macro.
+// It's especially the case for NuttX sim, which is a target to run
+// the entire NuttX as a program on the host OS, which can be Linux,
+// macOS, Windows, etc.
+// https://cwiki.apache.org/confluence/display/NUTTX/NuttX+Simulation
+// In that case, the host OS compiler is used to build NuttX.
+// Thus, eg. NuttX sim on macOS is built with __APPLE__.
+// We #undef predefined macros for those possible host OSes here
+// because the OS APIs this library should use are of NuttX,
+// not the host OS.
+#if defined(__NuttX__)
+#undef __linux__
+#undef __APPLE__
+#undef __FreeBSD__
+#undef __NetBSD__
+#undef _WIN32
+#undef __sun__
+#undef _AIX
+// For the current use of the __unix__ macro in this library,
+// NuttX is not __unix__.
+// This might need to be revisited in future.
+#undef __unix__
+#endif
+
#if defined(_MSC_VER) && !defined(__clang__)
# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
@@ -1125,6 +1153,7 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
# if defined(__FreeBSD__) || \
defined(__wasi__) || \
defined(__NetBSD__) || \
@ -26,8 +64,17 @@ index de09601e5..404c34b09 100644
defined(__linux__) || \
defined(__GNU__) || \
defined(__APPLE__) || \
@@ -1227,7 +1256,7 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
# endif
#endif
-#if defined(__BIONIC__) || defined(__CloudABI__) || \
+#if defined(__BIONIC__) || defined(__CloudABI__) || defined(__NuttX__) || \
defined(__Fuchsia__) || defined(__wasi__) || defined(_LIBCPP_HAS_MUSL_LIBC)
#define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE
#endif
diff --git a/include/__locale libcxx/include/__locale
index 6d10fa4d3..fb391861f 100644
index 6d10fa4d3d6..fb391861f23 100644
--- a/include/__locale
+++ libcxx/include/__locale
@@ -21,6 +21,8 @@
@ -41,10 +88,10 @@ index 6d10fa4d3..fb391861f 100644
#elif defined(__ANDROID__)
diff --git a/include/support/nuttx/xlocale.h libcxx/include/support/nuttx/xlocale.h
new file mode 100644
index 000000000..f10c0f982
index 00000000000..b70d6200504
--- /dev/null
+++ libcxx/include/support/nuttx/xlocale.h
@@ -0,0 +1,27 @@
@@ -0,0 +1,18 @@
+// -*- C++ -*-
+//===-------------------- support/nuttx/xlocale.h -------------------------===//
+//
@ -60,33 +107,30 @@ index 000000000..f10c0f982
+#if defined(__NuttX__)
+#include <support/xlocale/__posix_l_fallback.h>
+#include <support/xlocale/__strtonum_fallback.h>
+
+#define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE
+
+#undef __linux__
+#undef __unix__
+#undef __APPLE__
+#undef __GLIBC__
+#undef _NEWLIB_VERSION
+
+#endif // __NuttX__
+
+#endif
diff --git a/src/include/config_elast.h libcxx/src/include/config_elast.h
index 501cbc4ff..1c8650af5 100644
index 501cbc4ffeb..3113f9fb5cd 100644
--- a/src/include/config_elast.h
+++ libcxx/src/include/config_elast.h
@@ -19,7 +19,7 @@
@@ -17,10 +17,14 @@
#include <errno.h>
#endif
+// Note: _LIBCPP_ELAST needs to be defined only on platforms
+// where strerror/strerror_r can't handle out-of-range errno values.
#if defined(ELAST)
#define _LIBCPP_ELAST ELAST
-#elif defined(_NEWLIB_VERSION)
+#elif defined(__NuttX__) || defined(_NEWLIB_VERSION)
#elif defined(_NEWLIB_VERSION)
#define _LIBCPP_ELAST __ELASTERROR
+#elif defined(__NuttX__)
+// No _LIBCPP_ELAST needed on NuttX
#elif defined(__Fuchsia__)
// No _LIBCPP_ELAST needed on Fuchsia
#elif defined(__wasi__)
diff --git a/src/locale.cpp libcxx/src/locale.cpp
index b9180880e..25699f29e 100644
index b9180880e49..25699f29ec9 100644
--- a/src/locale.cpp
+++ libcxx/src/locale.cpp
@@ -30,7 +30,7 @@