#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include "unwind.h"

int main() {
#define CHECK_EQ(EXPECTED_VALUE, ACTUAL_VALUE) \
  do { \
    if ((int)(EXPECTED_VALUE) != (int)(ACTUAL_VALUE)) { \
      fprintf(stderr, "ASSERTION FAILURE: %s %d\n", __FILE__, __LINE__); \
      fprintf(stderr, "  expected value: %d (%s)\n", \
              (int)(EXPECTED_VALUE), #EXPECTED_VALUE); \
      fprintf(stderr, "  actual value: %d (%s)\n", \
              (int)(ACTUAL_VALUE), #ACTUAL_VALUE); \
      exit(EXIT_FAILURE); \
    } \
  } while (0)

#if defined(__arm__)
  CHECK_EQ(88, sizeof(struct _Unwind_Control_Block));
  CHECK_EQ(0, offsetof(struct _Unwind_Control_Block, exception_class));
  CHECK_EQ(8, offsetof(struct _Unwind_Control_Block, exception_cleanup));
#elif defined(__mips__)
  CHECK_EQ(24, sizeof(struct _Unwind_Exception));
  CHECK_EQ(0, offsetof(struct _Unwind_Exception, exception_class));
  CHECK_EQ(8, offsetof(struct _Unwind_Exception, exception_cleanup));
  CHECK_EQ(12, offsetof(struct _Unwind_Exception, private_1));
  CHECK_EQ(16, offsetof(struct _Unwind_Exception, private_2));
#elif defined(__i386__)
  CHECK_EQ(32, sizeof(struct _Unwind_Exception));
  CHECK_EQ(0, offsetof(struct _Unwind_Exception, exception_class));
  CHECK_EQ(8, offsetof(struct _Unwind_Exception, exception_cleanup));
  CHECK_EQ(12, offsetof(struct _Unwind_Exception, private_1));
  CHECK_EQ(16, offsetof(struct _Unwind_Exception, private_2));
#else
#error "unsupported architecture"
#endif

  return EXIT_SUCCESS;
}
