Remove _Unwind_{Get,Set}{GR,IP} from ARM EHABI build.

This commit partially reverts r219629.

This functions are not a part of ARM EHABI specification, and AFAIK,
the de facto implementation does not export these functions.

Without this change, any programs compiled with this unwind.h
will be incompatible with other implementations due to linkage
error.

llvm-svn: 226818
This commit is contained in:
Logan Chien 2015-01-22 13:25:55 +00:00
parent bf87a8b714
commit e8a0761737
2 changed files with 26 additions and 22 deletions

View File

@ -208,11 +208,37 @@ _Unwind_VRS_Pop(_Unwind_Context *context, _Unwind_VRS_RegClass regclass,
_Unwind_VRS_DataRepresentation representation);
#endif
#if LIBCXXABI_ARM_EHABI
static inline uintptr_t _Unwind_GetGR(struct _Unwind_Context* context,
int index) {
uintptr_t value = 0;
_Unwind_VRS_Get(context, _UVRSC_CORE, (uint32_t)index, _UVRSD_UINT32, &value);
return value;
}
static inline void _Unwind_SetGR(struct _Unwind_Context* context, int index,
uintptr_t new_value) {
_Unwind_VRS_Set(context, _UVRSC_CORE, (uint32_t)index,
_UVRSD_UINT32, &new_value);
}
static inline uintptr_t _Unwind_GetIP(struct _Unwind_Context* context) {
// remove the thumb-bit before returning
return (_Unwind_GetGR(context, 15) & (~(uintptr_t)0x1));
}
static inline void _Unwind_SetIP(struct _Unwind_Context* context,
uintptr_t new_value) {
uintptr_t thumb_bit = _Unwind_GetGR(context, 15) & ((uintptr_t)0x1);
_Unwind_SetGR(context, 15, new_value | thumb_bit);
}
#else
extern uintptr_t _Unwind_GetGR(struct _Unwind_Context *context, int index);
extern void _Unwind_SetGR(struct _Unwind_Context *context, int index,
uintptr_t new_value);
extern uintptr_t _Unwind_GetIP(struct _Unwind_Context *context);
extern void _Unwind_SetIP(struct _Unwind_Context *, uintptr_t new_value);
#endif
extern uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *context);
extern uintptr_t

View File

@ -206,28 +206,6 @@ uint32_t RegisterRange(uint8_t start, uint8_t count_minus_one) {
} // end anonymous namespace
uintptr_t _Unwind_GetGR(struct _Unwind_Context* context, int index) {
uintptr_t value = 0;
_Unwind_VRS_Get(context, _UVRSC_CORE, (uint32_t)index, _UVRSD_UINT32, &value);
return value;
}
void _Unwind_SetGR(struct _Unwind_Context* context, int index, uintptr_t
new_value) {
_Unwind_VRS_Set(context, _UVRSC_CORE, (uint32_t)index,
_UVRSD_UINT32, &new_value);
}
uintptr_t _Unwind_GetIP(struct _Unwind_Context* context) {
// remove the thumb-bit before returning
return (_Unwind_GetGR(context, 15) & (~(uintptr_t)0x1));
}
void _Unwind_SetIP(struct _Unwind_Context* context, uintptr_t new_value) {
uintptr_t thumb_bit = _Unwind_GetGR(context, 15) & ((uintptr_t)0x1);
_Unwind_SetGR(context, 15, new_value | thumb_bit);
}
/**
* Decodes an EHT entry.
*