[llvm-branch-commits] [compiler-rt-branch] r287441 - [3.9.1] Merging r287359:

Renato Golin via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sat Nov 19 06:00:51 PST 2016


Author: rengolin
Date: Sat Nov 19 08:00:50 2016
New Revision: 287441

URL: http://llvm.org/viewvc/llvm-project?rev=287441&view=rev
Log:
[3.9.1] Merging r287359:

builtins: repair the builtins build with clang 3.8

When the C unwinding personality was corrected to match the ARM EHABI
specification, the unwind header in clang was updated with necessary
declarations.  However, when building with an older compiler, we would not have
the necessary declarations.  This would result in a build failure.  Provide a
supplementary header to ensure that the necessary declarations are present for
the build of the C unwinding personality.

Note that this is NOT an ABI break.  It merely is a compile time failure due to
the constants not being present.  The constants here are reproduced
equivalently.  This header should permit building with clang[<3.9] as well as
gcc.

Addresses PR31035!

Added:
    compiler-rt/branches/release_39/lib/builtins/unwind-ehabi-helpers.h
Modified:
    compiler-rt/branches/release_39/lib/builtins/gcc_personality_v0.c

Modified: compiler-rt/branches/release_39/lib/builtins/gcc_personality_v0.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/branches/release_39/lib/builtins/gcc_personality_v0.c?rev=287441&r1=287440&r2=287441&view=diff
==============================================================================
--- compiler-rt/branches/release_39/lib/builtins/gcc_personality_v0.c (original)
+++ compiler-rt/branches/release_39/lib/builtins/gcc_personality_v0.c Sat Nov 19 08:00:50 2016
@@ -12,6 +12,17 @@
 #include "int_lib.h"
 
 #include <unwind.h>
+#if defined(__arm__) && !defined(__ARM_DWARF_EH__) && !defined(__USING_SJLJ_EXCEPTIONS__)
+/*
+ * When building with older compilers (e.g. clang <3.9), it is possible that we
+ * have a version of unwind.h which does not provide the EHABI declarations
+ * which are quired for the C personality to conform to the specification.  In
+ * order to provide forward compatibility for such compilers, we re-declare the
+ * necessary interfaces in the helper to permit a standalone compilation of the
+ * builtins (which contains the C unwinding personality for historical reasons).
+ */
+#include "unwind-ehabi-helpers.h"
+#endif
 
 /*
  * Pointer encodings documented at:

Added: compiler-rt/branches/release_39/lib/builtins/unwind-ehabi-helpers.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/branches/release_39/lib/builtins/unwind-ehabi-helpers.h?rev=287441&view=auto
==============================================================================
--- compiler-rt/branches/release_39/lib/builtins/unwind-ehabi-helpers.h (added)
+++ compiler-rt/branches/release_39/lib/builtins/unwind-ehabi-helpers.h Sat Nov 19 08:00:50 2016
@@ -0,0 +1,55 @@
+/* ===-- arm-ehabi-helpers.h - Supplementary ARM EHABI declarations --------===
+ *
+ *                     The LLVM Compiler Infrastructure
+ *
+ * This file is dual licensed under the MIT and the University of Illinois Open
+ * Source Licenses. See LICENSE.TXT for details.
+ *
+ * ===--------------------------------------------------------------------=== */
+
+#ifndef UNWIND_EHABI_HELPERS_H
+#define UNWIND_EHABI_HELPERS_H
+
+#include <stdint.h>
+/* NOTE: see reasoning for this inclusion below */
+#include <unwind.h>
+
+#if !defined(__ARM_EABI_UNWINDER__)
+
+/*
+ * NOTE: _URC_OK, _URC_FAILURE must be present as preprocessor tokens.  This
+ * allows for a substitution of a constant which can be cast into the
+ * appropriate enumerated type.  This header is expected to always be included
+ * AFTER unwind.h (which is why it is forcefully included above).  This ensures
+ * that we do not overwrite the token for the enumeration.  Subsequent uses of
+ * the token would be clean to rewrite with constant values.
+ *
+ * The typedef redeclaration should be safe.  Due to the protection granted to
+ * us by the `__ARM_EABI_UNWINDER__` above, we are guaranteed that we are in a
+ * header not vended by gcc.  The HP unwinder (being an itanium unwinder) does
+ * not support EHABI, and the GNU unwinder, derived from the HP unwinder, also
+ * does not support EHABI as of the introduction of this header.  As such, we
+ * are fairly certain that we are in the LLVM case.  Here, _Unwind_State is a
+ * typedef, and so we can get away with a redeclaration.
+ *
+ * Guarded redefinitions of the needed unwind state prevent the redefinition of
+ * those states.
+ */
+
+#define _URC_OK       0
+#define _URC_FAILURE  9
+
+typedef uint32_t _Unwind_State;
+
+#if !defined(_US_UNWIND_FRAME_STARTING)
+#define _US_UNWIND_FRAME_STARTING ((_Unwind_State)1)
+#endif
+
+#if !defined(_US_ACTION_MASK)
+#define _US_ACTION_MASK ((_Unwind_State)3)
+#endif
+
+#endif
+
+#endif
+




More information about the llvm-branch-commits mailing list