1e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao/* libunwind - a platform-independent unwind library 2e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao Copyright (C) 2014 The Android Open Source Project 3e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 4e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoThis file is part of libunwind. 5e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 6e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoPermission is hereby granted, free of charge, to any person obtaining 7e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoa copy of this software and associated documentation files (the 8e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao"Software"), to deal in the Software without restriction, including 9e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaowithout limitation the rights to use, copy, modify, merge, publish, 10e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaodistribute, sublicense, and/or sell copies of the Software, and to 11e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaopermit persons to whom the Software is furnished to do so, subject to 12e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaothe following conditions: 13e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 14e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoThe above copyright notice and this permission notice shall be 15e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoincluded in all copies or substantial portions of the Software. 16e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 17e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 21e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 22e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 23e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ 24e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 25e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 26e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao#include "libunwind_i.h" 27e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao#include "map_info.h" 28e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 29e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoextern int local_get_elf_image (struct elf_image *, unw_word_t, 30e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao unsigned long *, unsigned long *, 31 char **); 32 33PROTECTED int 34tdep_get_elf_image (unw_addr_space_t as, struct elf_image *ei, 35 pid_t pid, unw_word_t ip, 36 unsigned long *segbase, unsigned long *mapoff, char **path) 37{ 38 struct map_info *map; 39 40 if (pid == getpid()) 41 return local_get_elf_image (ei, ip, segbase, mapoff, path); 42 43 map = map_find_from_addr (as->map_list, ip); 44 if (!map) 45 return -UNW_ENOINFO; 46 47 if (elf_map_cached_image (map, ip) < 0) 48 return -UNW_ENOINFO; 49 50 *ei = map->ei; 51 *segbase = map->start; 52 *mapoff = map->offset; 53 if (path != NULL) 54 { 55 *path = strdup (map->path); 56 } 57 return 0; 58} 59