18d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala/* libunwind - a platform-independent unwind library 28d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala Copyright (C) 2008 CodeSourcery 38d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> 48d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 58d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaThis file is part of libunwind. 68d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 78d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaPermission is hereby granted, free of charge, to any person obtaining 88d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalaa copy of this software and associated documentation files (the 98d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala"Software"), to deal in the Software without restriction, including 108d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalawithout limitation the rights to use, copy, modify, merge, publish, 118d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantaladistribute, sublicense, and/or sell copies of the Software, and to 128d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalapermit persons to whom the Software is furnished to do so, subject to 138d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalathe following conditions: 148d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 158d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaThe above copyright notice and this permission notice shall be 168d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalaincluded in all copies or substantial portions of the Software. 178d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 188d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 198d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 208d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 218d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 228d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 238d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 248d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ 258d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 268d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala#include <stdlib.h> 278d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala#include <string.h> 288d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 298d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala#include "unwind_i.h" 308d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 318d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala#ifdef UNW_REMOTE_ONLY 328d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 338d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala/* unw_local_addr_space is a NULL pointer in this case. */ 348d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaPROTECTED unw_addr_space_t unw_local_addr_space; 358d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 368d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala#else /* !UNW_REMOTE_ONLY */ 378d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 388d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalastatic struct unw_addr_space local_addr_space; 398d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 408d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaPROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space; 418d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 428d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalastatic inline void * 438d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalauc_addr (ucontext_t *uc, int reg) 448d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala{ 458d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala if (reg >= UNW_SH_R0 && reg <= UNW_SH_PR) 468d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala return &uc->uc_mcontext.gregs[reg]; 478d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala else 488d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala return NULL; 498d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala} 508d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 518d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala# ifdef UNW_LOCAL_ONLY 528d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 538d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaHIDDEN void * 548d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalatdep_uc_addr (ucontext_t *uc, int reg) 558d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala{ 568d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala return uc_addr (uc, reg); 578d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala} 588d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 598d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala# endif /* UNW_LOCAL_ONLY */ 608d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 618d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaHIDDEN unw_dyn_info_list_t _U_dyn_info_list; 628d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 638d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala/* XXX fix me: there is currently no way to locate the dyn-info list 648d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala by a remote unwinder. On ia64, this is done via a special 658d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala unwind-table entry. Perhaps something similar can be done with 668d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala DWARF2 unwind info. */ 678d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 688d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalastatic void 698d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalaput_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) 708d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala{ 718d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala /* it's a no-op */ 728d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala} 738d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 748d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalastatic int 758d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalaget_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, 768d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala void *arg) 778d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala{ 788d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; 798d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala return 0; 808d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala} 818d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 828d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalastatic int 838d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalaaccess_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, 848d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala void *arg) 858d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala{ 868d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala if (write) 878d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala { 887d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris /* ANDROID support update. */ 89cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris#ifdef UNW_LOCAL_ONLY 90f4a8df5f4f338f1a12c25213227e98b34b42447fChristopher Ferris if (map_local_is_writable (addr)) 917d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris { 92cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris#endif 937d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris Debug (16, "mem[%x] <- %x\n", addr, *val); 947d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris *(unw_word_t *) addr = *val; 95cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris#ifdef UNW_LOCAL_ONLY 967d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris } 977d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris else 987d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris { 997d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris Debug (16, "Unwritable memory mem[%x] <- %x\n", addr, *val); 1007d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris return -1; 1017d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris } 102cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris#endif 1037d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris /* End of ANDROID update. */ 1048d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala } 1058d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala else 1068d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala { 1077d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris /* ANDROID support update. */ 108cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris#ifdef UNW_LOCAL_ONLY 109f4a8df5f4f338f1a12c25213227e98b34b42447fChristopher Ferris if (map_local_is_readable (addr)) 1107d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris { 111cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris#endif 1127d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris *val = *(unw_word_t *) addr; 1137d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris Debug (16, "mem[%x] -> %x\n", addr, *val); 114cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris#ifdef UNW_LOCAL_ONLY 1157d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris } 1167d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris else 1177d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris { 1187d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris Debug (16, "Unreadable memory mem[%x] -> XXX\n", addr); 1197d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris return -1; 1207d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris } 121cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris#endif 1227d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris /* End of ANDROID update. */ 1238d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala } 1248d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala return 0; 1258d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala} 1268d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1278d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalastatic int 1288d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalaaccess_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, 1298d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala void *arg) 1308d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala{ 1318d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala unw_word_t *addr; 1328d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala ucontext_t *uc = arg; 1338d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1348d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala if (unw_is_fpreg (reg)) 1358d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala goto badreg; 1368d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1378d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala if (!(addr = uc_addr (uc, reg))) 1388d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala goto badreg; 1398d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1408d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala if (write) 1418d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala { 1428d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala *(unw_word_t *) addr = *val; 1438d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala Debug (12, "%s <- %x\n", unw_regname (reg), *val); 1448d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala } 1458d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala else 1468d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala { 1478d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala *val = *(unw_word_t *) addr; 1488d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala Debug (12, "%s -> %x\n", unw_regname (reg), *val); 1498d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala } 1508d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala return 0; 1518d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1528d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala badreg: 1538d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala Debug (1, "bad register number %u\n", reg); 1548d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala return -UNW_EBADREG; 1558d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala} 1568d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1578d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalastatic int 1588d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalaaccess_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, 1598d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala int write, void *arg) 1608d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala{ 1618d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala ucontext_t *uc = arg; 1628d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala unw_fpreg_t *addr; 1638d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1648d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala if (!unw_is_fpreg (reg)) 1658d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala goto badreg; 1668d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1678d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala if (!(addr = uc_addr (uc, reg))) 1688d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala goto badreg; 1698d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1708d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala if (write) 1718d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala { 1728d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala Debug (12, "%s <- %08lx.%08lx.%08lx\n", unw_regname (reg), 1738d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); 1748d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala *(unw_fpreg_t *) addr = *val; 1758d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala } 1768d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala else 1778d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala { 1788d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala *val = *(unw_fpreg_t *) addr; 1798d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala Debug (12, "%s -> %08lx.%08lx.%08lx\n", unw_regname (reg), 1808d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); 1818d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala } 1828d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala return 0; 1838d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1848d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala badreg: 1858d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala Debug (1, "bad register number %u\n", reg); 1868d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala /* attempt to access a non-preserved register */ 1878d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala return -UNW_EBADREG; 1888d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala} 1898d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1908d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalastatic int 1918d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalaget_static_proc_name (unw_addr_space_t as, unw_word_t ip, 1928d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala char *buf, size_t buf_len, unw_word_t *offp, 1938d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala void *arg) 1948d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala{ 1958d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala return _Uelf32_get_proc_name (as, getpid (), ip, buf, buf_len, offp); 1968d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala} 1978d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 1988d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaHIDDEN void 1998d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalash_local_addr_space_init (void) 2008d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala{ 2018d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala memset (&local_addr_space, 0, sizeof (local_addr_space)); 2028d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala local_addr_space.caching_policy = UNW_CACHE_GLOBAL; 2038d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala local_addr_space.acc.find_proc_info = dwarf_find_proc_info; 2048d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala local_addr_space.acc.put_unwind_info = put_unwind_info; 2058d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala local_addr_space.acc.get_dyn_info_list_addr = get_dyn_info_list_addr; 2068d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala local_addr_space.acc.access_mem = access_mem; 2078d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala local_addr_space.acc.access_reg = access_reg; 2088d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala local_addr_space.acc.access_fpreg = access_fpreg; 2098d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala local_addr_space.acc.resume = sh_local_resume; 2108d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala local_addr_space.acc.get_proc_name = get_static_proc_name; 2118d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala unw_flush_cache (&local_addr_space, 0, 0); 212f4a8df5f4f338f1a12c25213227e98b34b42447fChristopher Ferris 213f4a8df5f4f338f1a12c25213227e98b34b42447fChristopher Ferris map_local_init (); 2148d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala} 2158d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 2168d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala#endif /* !UNW_REMOTE_ONLY */ 217