From 23f8f350989f662198175a0ccc77d0797c9cd469 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Tue, 25 Dec 2018 19:38:44 +0800 Subject: [PATCH] Stop using system STL since it is no longer supported --- native/jni/Application.mk | 2 +- native/jni/include/new | 34 ++++++++++++++++++++++++++ native/jni/systemproperties/Android.mk | 2 +- native/jni/utils/Android.mk | 1 + native/jni/utils/new.cpp | 11 +++++++++ 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 native/jni/include/new create mode 100644 native/jni/utils/new.cpp diff --git a/native/jni/Application.mk b/native/jni/Application.mk index cc06d9516..30c0a5149 100644 --- a/native/jni/Application.mk +++ b/native/jni/Application.mk @@ -2,7 +2,7 @@ APP_ABI := armeabi-v7a x86 APP_CFLAGS := -Oz -std=gnu11 \ -DMAGISK_VERSION="${MAGISK_VERSION}" -DMAGISK_VER_CODE=${MAGISK_VER_CODE} APP_CPPFLAGS := -std=c++14 -APP_STL := system +APP_STL := none APP_PLATFORM := android-16 ifdef MAGISK_DEBUG diff --git a/native/jni/include/new b/native/jni/include/new new file mode 100644 index 000000000..401e0671b --- /dev/null +++ b/native/jni/include/new @@ -0,0 +1,34 @@ +#ifndef __NEW__ +#define __NEW__ + +#include +#include + +extern "C++" { + +namespace std { + using ::ptrdiff_t; + using ::size_t; + struct nothrow_t {}; + extern const nothrow_t nothrow; +} // namespace std + +void* operator new(std::size_t); +void* operator new[](std::size_t); +void operator delete(void*); +void operator delete[](void*); +void* operator new(std::size_t, const std::nothrow_t&); +void* operator new[](std::size_t, const std::nothrow_t&); +void operator delete(void*, const std::nothrow_t&); +void operator delete[](void*, const std::nothrow_t&); + +inline void* operator new(std::size_t, void* p) { return p; } +inline void* operator new[](std::size_t, void* p) { return p; } + +// these next two are not really required, since exceptions are off +inline void operator delete(void*, void*) { } +inline void operator delete[](void*, void*) { } + +} // extern C++ + +#endif // __NEW__ diff --git a/native/jni/systemproperties/Android.mk b/native/jni/systemproperties/Android.mk index 66788f014..1f0dbbb11 100644 --- a/native/jni/systemproperties/Android.mk +++ b/native/jni/systemproperties/Android.mk @@ -2,7 +2,7 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= libsystemproperties -LOCAL_C_INCLUDES := $(LIBSYSTEMPROPERTIES) +LOCAL_C_INCLUDES := jni/include $(LIBSYSTEMPROPERTIES) LOCAL_SRC_FILES := \ context_node.cpp \ contexts_serialized.cpp \ diff --git a/native/jni/utils/Android.mk b/native/jni/utils/Android.mk index 706b06630..9dee66452 100644 --- a/native/jni/utils/Android.mk +++ b/native/jni/utils/Android.mk @@ -4,6 +4,7 @@ include $(CLEAR_VARS) LOCAL_MODULE:= libutils LOCAL_C_INCLUDES := jni/include $(LIBUTILS) LOCAL_SRC_FILES := \ + new.cpp \ file.cpp \ misc.cpp \ selinux.cpp \ diff --git a/native/jni/utils/new.cpp b/native/jni/utils/new.cpp new file mode 100644 index 000000000..8db9b764e --- /dev/null +++ b/native/jni/utils/new.cpp @@ -0,0 +1,11 @@ +#include +#include + +void* operator new(std::size_t s) { return malloc(s); } +void* operator new[](std::size_t s) { return malloc(s); } +void operator delete(void *p) { free(p); } +void operator delete[](void *p) { free(p); } +void* operator new(std::size_t s, const std::nothrow_t&) { return malloc(s); } +void* operator new[](std::size_t s, const std::nothrow_t&) { return malloc(s); } +void operator delete(void *p, const std::nothrow_t&) { free(p); } +void operator delete[](void *p, const std::nothrow_t&) { free(p); }