<div dir="ltr">Ping?<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Jan 17, 2015 at 3:58 PM, Logan Chien <span dir="ltr"><<a href="mailto:tzuhsiang.chien@gmail.com" target="_blank">tzuhsiang.chien@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi danalbert, rengolin, jroelofs,<br>
<br>
I found that declaring _Unwind_{Get,Set}{GR,IP} as the external<br>
functions will break the build with libgcc, which does not define<br>
these functions in their libraries.<br>
<br>
Besides, IMO, since these are not part of the ARM EHABI specification<br>
it will be better to avoid introducing ABI backward incompatible<br>
changes.<br>
<br>
This commit partially reverts r219629.<br>
<br>
Please have a look.  Thanks.<br>
<br>
(p.s. This is the 1/6 patch to fix the backtrace_test and libgcc support.)<br>
<br>
<a href="http://reviews.llvm.org/D7029" target="_blank">http://reviews.llvm.org/D7029</a><br>
<br>
Files:<br>
  include/unwind.h<br>
  src/Unwind/Unwind-EHABI.cpp<br>
<br>
Index: include/unwind.h<br>
===================================================================<br>
--- include/unwind.h<br>
+++ include/unwind.h<br>
@@ -208,11 +208,37 @@<br>
                 _Unwind_VRS_DataRepresentation representation);<br>
 #endif<br>
<br>
+#if LIBCXXABI_ARM_EHABI && !LIBCXXABI_USE_LLVM_UNWINDER<br>
+static inline uintptr_t _Unwind_GetGR(struct _Unwind_Context* context,<br>
+                                      int index) {<br>
+  uintptr_t value = 0;<br>
+  _Unwind_VRS_Get(context, _UVRSC_CORE, (uint32_t)index, _UVRSD_UINT32, &value);<br>
+  return value;<br>
+}<br>
+<br>
+static inline void _Unwind_SetGR(struct _Unwind_Context* context, int index,<br>
+                                 uintptr_t new_value) {<br>
+  _Unwind_VRS_Set(context, _UVRSC_CORE, (uint32_t)index,<br>
+                  _UVRSD_UINT32, &new_value);<br>
+}<br>
+<br>
+static inline uintptr_t _Unwind_GetIP(struct _Unwind_Context* context) {<br>
+  // remove the thumb-bit before returning<br>
+  return (_Unwind_GetGR(context, 15) & (~(uintptr_t)0x1));<br>
+}<br>
+<br>
+static inline void _Unwind_SetIP(struct _Unwind_Context* context,<br>
+                                 uintptr_t new_value) {<br>
+  uintptr_t thumb_bit = _Unwind_GetGR(context, 15) & ((uintptr_t)0x1);<br>
+  _Unwind_SetGR(context, 15, new_value | thumb_bit);<br>
+}<br>
+#else<br>
 extern uintptr_t _Unwind_GetGR(struct _Unwind_Context *context, int index);<br>
 extern void _Unwind_SetGR(struct _Unwind_Context *context, int index,<br>
                           uintptr_t new_value);<br>
 extern uintptr_t _Unwind_GetIP(struct _Unwind_Context *context);<br>
 extern void _Unwind_SetIP(struct _Unwind_Context *, uintptr_t new_value);<br>
+#endif<br>
<br>
 extern uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *context);<br>
 extern uintptr_t<br>
Index: src/Unwind/Unwind-EHABI.cpp<br>
===================================================================<br>
--- src/Unwind/Unwind-EHABI.cpp<br>
+++ src/Unwind/Unwind-EHABI.cpp<br>
@@ -206,28 +206,6 @@<br>
<br>
 } // end anonymous namespace<br>
<br>
-uintptr_t _Unwind_GetGR(struct _Unwind_Context* context, int index) {<br>
-  uintptr_t value = 0;<br>
-  _Unwind_VRS_Get(context, _UVRSC_CORE, (uint32_t)index, _UVRSD_UINT32, &value);<br>
-  return value;<br>
-}<br>
-<br>
-void _Unwind_SetGR(struct _Unwind_Context* context, int index, uintptr_t<br>
-    new_value) {<br>
-  _Unwind_VRS_Set(context, _UVRSC_CORE, (uint32_t)index,<br>
-                  _UVRSD_UINT32, &new_value);<br>
-}<br>
-<br>
-uintptr_t _Unwind_GetIP(struct _Unwind_Context* context) {<br>
-  // remove the thumb-bit before returning<br>
-  return (_Unwind_GetGR(context, 15) & (~(uintptr_t)0x1));<br>
-}<br>
-<br>
-void _Unwind_SetIP(struct _Unwind_Context* context, uintptr_t new_value) {<br>
-  uintptr_t thumb_bit = _Unwind_GetGR(context, 15) & ((uintptr_t)0x1);<br>
-  _Unwind_SetGR(context, 15, new_value | thumb_bit);<br>
-}<br>
-<br>
 /**<br>
  * Decodes an EHT entry.<br>
  *<br>
<br>
EMAIL PREFERENCES<br>
  <a href="http://reviews.llvm.org/settings/panel/emailpreferences/" target="_blank">http://reviews.llvm.org/settings/panel/emailpreferences/</a><br>
</blockquote></div><br></div>