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