// RUN: %llvmgcc %s -S -g -o /dev/null

typedef long unsigned int size_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long int uint64_t;
typedef uint16_t Elf64_Half;
typedef uint32_t Elf64_Word;
typedef uint64_t Elf64_Xword;
typedef uint64_t Elf64_Addr;
typedef uint64_t Elf64_Off;
typedef struct
{
  Elf64_Word p_type;
  Elf64_Off p_offset;
  Elf64_Addr p_vaddr;
  Elf64_Xword p_align;
}
Elf64_Phdr;
struct dl_phdr_info
{
  const char *dlpi_name;
  const Elf64_Phdr *dlpi_phdr;
  Elf64_Half dlpi_phnum;
  unsigned long long int dlpi_adds;
};
typedef unsigned _Unwind_Ptr;
struct object
{
  union
  {
    const struct dwarf_fde *single;
    struct dwarf_fde **array;
    struct fde_vector *sort;
  }
  u;
  union
  {
    struct
    {
    }
    b;
  }
  s;
  struct object *next;
};
typedef int sword;
typedef unsigned int uword;
struct dwarf_fde
{
  uword length;
  sword CIE_delta;
  unsigned char pc_begin[];
};
typedef struct dwarf_fde fde;
struct unw_eh_callback_data
{
  const fde *ret;
  struct frame_hdr_cache_element *link;
}
frame_hdr_cache[8];

_Unwind_Ptr
base_from_cb_data (struct unw_eh_callback_data *data)
{
}

void
_Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr)
{
  const unsigned char *p;
  const struct unw_eh_frame_hdr *hdr;
  struct object ob;
}
