Merge "Add the exported include directory for libunwind."
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..39fec89
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,60 @@
+//
+// Copyright (C) 2014 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+LIBUNWIND_SRC_FILES = [
+ "src/libunwind.cpp",
+ "src/Unwind-EHABI.cpp",
+ "src/Unwind-sjlj.c",
+ "src/UnwindLevel1-gcc-ext.c",
+ "src/UnwindLevel1.c",
+ "src/UnwindRegistersSave.S",
+ "src/UnwindRegistersRestore.S",
+]
+
+LIBUNWIND_INCLUDES = [
+ "external/libcxx/include",
+]
+
+LIBUNWIND_LOCAL_INCLUDES = [
+ "include",
+]
+
+LIBUNWIND_CPPFLAGS = [
+ "-std=c++14",
+ "-fexceptions",
+ "-Wall",
+ "-Wextra",
+ "-Wno-unused-function",
+ "-Wno-unused-parameter",
+ "-Werror",
+]
+
+cc_library_static {
+ name: "libunwind_llvm",
+ clang: true,
+ srcs: LIBUNWIND_SRC_FILES,
+ include_dirs: LIBUNWIND_INCLUDES,
+ local_include_dirs: LIBUNWIND_LOCAL_INCLUDES,
+ cppflags: LIBUNWIND_CPPFLAGS,
+ stl: "none",
+ sanitize: ["never"],
+ enabled: false,
+ arch: {
+ arm: {
+ enabled: true,
+ },
+ },
+}
diff --git a/CREDITS.txt b/CREDITS.txt
new file mode 100644
index 0000000..9c910fc
--- /dev/null
+++ b/CREDITS.txt
@@ -0,0 +1,71 @@
+This file is a partial list of people who have contributed to the LLVM/libc++abi
+project. If you have contributed a patch or made some other contribution to
+LLVM/libc++abi, please submit a patch to this file to add yourself, and it will be
+done!
+
+The list is sorted by surname and formatted to allow easy grepping and
+beautification by scripts. The fields are: name (N), email (E), web-address
+(W), PGP key ID and fingerprint (P), description (D), and snail-mail address
+(S).
+
+N: Aaron Ballman
+E: [email protected]
+D: Minor patches
+
+N: Logan Chien
+E: [email protected]
+D: ARM EHABI Unwind & Exception Handling
+
+N: Marshall Clow
+E: [email protected]
+E: [email protected]
+D: Architect and primary coauthor of libc++abi
+
+N: Matthew Dempsky
+E: [email protected]
+D: Minor patches and bug fixes.
+
+N: Nowar Gu
+E: [email protected]
+D: Minor patches and fixes
+
+N: Howard Hinnant
+E: [email protected]
+D: Architect and primary coauthor of libc++abi
+
+N: Dana Jansens
+E: [email protected]
+D: ARM EHABI Unwind & Exception Handling
+
+N: Nick Kledzik
+E: [email protected]
+
+N: Antoine Labour
+E: [email protected]
+D: ARM EHABI Unwind & Exception Handling
+
+N: Bruce Mitchener, Jr.
+E: [email protected]
+D: Minor typo fixes
+
+N: Andrew Morrow
+E: [email protected]
+D: Minor patches and fixes
+
+N: Erik Olofsson
+E: [email protected]
+E: [email protected]
+D: Minor patches and fixes
+
+N: Jon Roelofs
+E: [email protected]
+D: ARM EHABI Unwind & Exception Handling, Bare-metal
+
+N: Nico Weber
+E: [email protected]
+D: ARM EHABI Unwind & Exception Handling
+
+N: Albert J. Wong
+E: [email protected]
+D: ARM EHABI Unwind & Exception Handling
+
diff --git a/MODULE_LICENSE_MIT b/MODULE_LICENSE_MIT
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_MIT
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..7381b74
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,76 @@
+==============================================================================
+libc++abi License
+==============================================================================
+
+The libc++abi library is dual licensed under both the University of Illinois
+"BSD-Like" license and the MIT license. As a user of this code you may choose
+to use it under either license. As a contributor, you agree to allow your code
+to be used under both.
+
+Full text of the relevant licenses is included below.
+
+==============================================================================
+
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT
+
+All rights reserved.
+
+Developed by:
+
+ LLVM Team
+
+ University of Illinois at Urbana-Champaign
+
+ http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimers.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimers in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the names of the LLVM Team, University of Illinois at
+ Urbana-Champaign, nor the names of its contributors may be used to
+ endorse or promote products derived from this Software without specific
+ prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+
+Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/src/DwarfInstructions.hpp b/src/DwarfInstructions.hpp
index dfe45fb..ce90aa0 100644
--- a/src/DwarfInstructions.hpp
+++ b/src/DwarfInstructions.hpp
@@ -170,7 +170,7 @@
const int lastReg = R::lastDwarfRegNum();
assert((int)CFI_Parser<A>::kMaxRegisterNumber > lastReg &&
"register range too large");
- assert(lastReg <= (int)cieInfo.returnAddressRegister &&
+ assert(lastReg >= (int)cieInfo.returnAddressRegister &&
"register range does not contain return address register");
for (int i = 0; i <= lastReg; ++i) {
if (prolog.savedRegisters[i].location !=
diff --git a/src/Registers.hpp b/src/Registers.hpp
index 4a441b7..d01ebf0 100644
--- a/src/Registers.hpp
+++ b/src/Registers.hpp
@@ -1689,7 +1689,7 @@
_saved_vfp_d16_d31 = true;
saveVFPv3(_vfp_d16_d31);
}
- _vfp_d16_d31[regNum - UNW_ARM_D0] = value;
+ _vfp_d16_d31[regNum - UNW_ARM_D16] = value;
} else if (regNum >= UNW_ARM_WR0 && regNum <= UNW_ARM_WR15) {
if (!_saved_iwmmx) {
_saved_iwmmx = true;
diff --git a/src/config.h b/src/config.h
index c9ec087..9b24634 100644
--- a/src/config.h
+++ b/src/config.h
@@ -72,7 +72,8 @@
#define _LIBUNWIND_BUILD_ZERO_COST_APIS (defined(__i386__) || \
defined(__x86_64__) || \
- defined(__arm__))
+ defined(__arm__) || \
+ defined(__aarch64__))
#define _LIBUNWIND_BUILD_SJLJ_APIS 0
#define _LIBUNWIND_SUPPORT_FRAME_APIS (defined(__i386__) || \
defined(__x86_64__))
diff --git a/src/libunwind.cpp b/src/libunwind.cpp
index 9a16e48..c408e06 100644
--- a/src/libunwind.cpp
+++ b/src/libunwind.cpp
@@ -58,12 +58,14 @@
#elif defined(__ppc__)
new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_ppc>(
context, LocalAddressSpace::sThisAddressSpace);
-#elif defined(__arm64__)
+#elif defined(__arm64__) || defined(__aarch64__)
new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_arm64>(
context, LocalAddressSpace::sThisAddressSpace);
#elif _LIBUNWIND_ARM_EHABI
new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_arm>(
context, LocalAddressSpace::sThisAddressSpace);
+#else
+#error Architecture not supported
#endif
AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;
co->setInfoBasedOnIPRegister();