diff --git a/objcxx_eh.cc b/objcxx_eh.cc index fe8aae1..526ca70 100644 --- a/objcxx_eh.cc +++ b/objcxx_eh.cc @@ -124,10 +124,6 @@ std::atomic done_setup; * header in a `__cxa_exception`. */ std::atomic type_info_offset; -/** - * The offset of the reference count in a - */ -std::atomic refcount_offset; /** * The size of the `_Unwind_Exception` (including padding) in a * `__cxa_exception`. @@ -459,32 +455,6 @@ BEGIN_PERSONALITY_FUNCTION(test_eh_personality) { uint64_t cls = __builtin_bswap64(exceptionClass); type_info_offset = find_backwards(exceptionObject, &typeid(MagicValueHolder)); -#ifdef __LP64__ - // On 64-bit platforms, the refcount is added to the front of the - // structure. - ptrdiff_t refcount_backwards_offset = type_info_offset - sizeof(uintptr_t); -#else - // On 32-bit platforms, this should be immediately before the - // _Unwind_Exception in some spare padding, but libsupc++ puts it in - // the same place as for 64-bit. Try the one that's definitely in the - // object first and then fall back to the other... - ptrdiff_t refcount_backwards_offset = -sizeof(uint32_t); - auto read_offset = [](void *obj, ptrdiff_t offset) - { - char *addr = reinterpret_cast(obj) + offset; - uintptr_t v = *reinterpret_cast(addr); - return v; - }; - if (read_offset(exceptionObject, refcount_backwards_offset) != 1) - { - refcount_backwards_offset = type_info_offset - sizeof(uintptr_t); - } - if (read_offset(exceptionObject, refcount_backwards_offset) != 1) - { - fprintf(stderr, "Unable to find refcount field\n"); - abort(); - } -#endif exception_struct_size = find_forwards(exceptionObject, MagicValueHolder::magic); cxx_exception_class = exceptionClass; done_setup = true;