Delete some dead code containing bugs. (#205)

Fixes #203
main
David Chisnall 5 years ago committed by GitHub
parent 1094eb7a1c
commit 396c9b553a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -124,10 +124,6 @@ std::atomic<bool> done_setup;
* header in a `__cxa_exception`. * header in a `__cxa_exception`.
*/ */
std::atomic<ptrdiff_t> type_info_offset; std::atomic<ptrdiff_t> type_info_offset;
/**
* The offset of the reference count in a
*/
std::atomic<ptrdiff_t> refcount_offset;
/** /**
* The size of the `_Unwind_Exception` (including padding) in a * The size of the `_Unwind_Exception` (including padding) in a
* `__cxa_exception`. * `__cxa_exception`.
@ -459,32 +455,6 @@ BEGIN_PERSONALITY_FUNCTION(test_eh_personality)
{ {
uint64_t cls = __builtin_bswap64(exceptionClass); uint64_t cls = __builtin_bswap64(exceptionClass);
type_info_offset = find_backwards(exceptionObject, &typeid(MagicValueHolder)); 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<char*>(obj) + offset;
uintptr_t v = *reinterpret_cast<uintptr_t*>(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); exception_struct_size = find_forwards(exceptionObject, MagicValueHolder::magic);
cxx_exception_class = exceptionClass; cxx_exception_class = exceptionClass;
done_setup = true; done_setup = true;

Loading…
Cancel
Save