13883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher// RUN: %clang_cc1 %s -emit-llvm -g -o /dev/null
23883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
33883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef long unsigned int size_t;
43883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef unsigned short int uint16_t;
53883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef unsigned int uint32_t;
63883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef unsigned long int uint64_t;
73883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef uint16_t Elf64_Half;
83883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef uint32_t Elf64_Word;
93883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef uint64_t Elf64_Xword;
103883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef uint64_t Elf64_Addr;
113883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef uint64_t Elf64_Off;
123883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef struct
133883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher{
143883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  Elf64_Word p_type;
153883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  Elf64_Off p_offset;
163883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  Elf64_Addr p_vaddr;
173883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  Elf64_Xword p_align;
183883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher}
193883e66cfd55de70d89831cf26f9ae53931d11d3Eric ChristopherElf64_Phdr;
203883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstruct dl_phdr_info
213883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher{
223883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  const char *dlpi_name;
233883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  const Elf64_Phdr *dlpi_phdr;
243883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  Elf64_Half dlpi_phnum;
253883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned long long int dlpi_adds;
263883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher};
273883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef unsigned _Unwind_Ptr;
283883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstruct object
293883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher{
303883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  union
313883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  {
323883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    const struct dwarf_fde *single;
333883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    struct dwarf_fde **array;
343883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    struct fde_vector *sort;
353883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  }
363883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  u;
373883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  union
383883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  {
393883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    struct
403883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    {
413883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    }
423883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    b;
433883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  }
443883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  s;
453883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  struct object *next;
463883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher};
473883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef int sword;
483883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef unsigned int uword;
493883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstruct dwarf_fde
503883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher{
513883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  uword length;
523883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  sword CIE_delta;
533883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned char pc_begin[];
543883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher};
553883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef struct dwarf_fde fde;
563883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstruct unw_eh_callback_data
573883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher{
583883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  const fde *ret;
593883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  struct frame_hdr_cache_element *link;
603883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher}
613883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherframe_hdr_cache[8];
623883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
633883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher_Unwind_Ptr
643883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherbase_from_cb_data (struct unw_eh_callback_data *data)
653883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher{
663883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher}
673883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
683883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophervoid
693883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher_Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr)
703883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher{
713883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  const unsigned char *p;
723883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  const struct unw_eh_frame_hdr *hdr;
733883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  struct object ob;
743883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher}
75