1*523fa7a6SAndroid Build Coastguard Worker /* 2*523fa7a6SAndroid Build Coastguard Worker * Copyright (c) Meta Platforms, Inc. and affiliates. 3*523fa7a6SAndroid Build Coastguard Worker * All rights reserved. 4*523fa7a6SAndroid Build Coastguard Worker * 5*523fa7a6SAndroid Build Coastguard Worker * This source code is licensed under the BSD-style license found in the 6*523fa7a6SAndroid Build Coastguard Worker * LICENSE file in the root directory of this source tree. 7*523fa7a6SAndroid Build Coastguard Worker */ 8*523fa7a6SAndroid Build Coastguard Worker 9*523fa7a6SAndroid Build Coastguard Worker /** 10*523fa7a6SAndroid Build Coastguard Worker * @file 11*523fa7a6SAndroid Build Coastguard Worker * Platform abstraction layer to allow individual host OS to override 12*523fa7a6SAndroid Build Coastguard Worker * symbols in ExecuTorch. PAL functions are defined as C functions so an 13*523fa7a6SAndroid Build Coastguard Worker * implementer can use C in lieu of C++. 14*523fa7a6SAndroid Build Coastguard Worker */ 15*523fa7a6SAndroid Build Coastguard Worker #pragma once 16*523fa7a6SAndroid Build Coastguard Worker 17*523fa7a6SAndroid Build Coastguard Worker /** 18*523fa7a6SAndroid Build Coastguard Worker * To enable dynamic linking debugging capability on UNIX-like OS. If enabled 19*523fa7a6SAndroid Build Coastguard Worker * and see an error like: `undefined symbol: dladdr`, install `libdl` to fix. 20*523fa7a6SAndroid Build Coastguard Worker */ 21*523fa7a6SAndroid Build Coastguard Worker #if defined(ET_USE_LIBDL) 22*523fa7a6SAndroid Build Coastguard Worker #include <dlfcn.h> 23*523fa7a6SAndroid Build Coastguard Worker #endif 24*523fa7a6SAndroid Build Coastguard Worker 25*523fa7a6SAndroid Build Coastguard Worker static constexpr const char* DYNAMIC_LIBRARY_NOT_SUPPORTED = "NOT_SUPPORTED"; 26*523fa7a6SAndroid Build Coastguard Worker static constexpr const char* DYNAMIC_LIBRARY_NOT_FOUND = "NOT_FOUND"; 27*523fa7a6SAndroid Build Coastguard Worker 28*523fa7a6SAndroid Build Coastguard Worker extern "C" { 29*523fa7a6SAndroid Build Coastguard Worker 30*523fa7a6SAndroid Build Coastguard Worker /** 31*523fa7a6SAndroid Build Coastguard Worker * Return shared library . 32*523fa7a6SAndroid Build Coastguard Worker * 33*523fa7a6SAndroid Build Coastguard Worker * @param[in] addr Address to the symbol we are looking for in shared libraries. 34*523fa7a6SAndroid Build Coastguard Worker * @retval The path to the shared library containing the symbol. 35*523fa7a6SAndroid Build Coastguard Worker */ et_pal_get_shared_library_name(const void * addr)36*523fa7a6SAndroid Build Coastguard Workerinline const char* et_pal_get_shared_library_name(const void* addr) { 37*523fa7a6SAndroid Build Coastguard Worker #if defined(ET_USE_LIBDL) 38*523fa7a6SAndroid Build Coastguard Worker Dl_info info; 39*523fa7a6SAndroid Build Coastguard Worker if (dladdr(addr, &info) && info.dli_fname) { 40*523fa7a6SAndroid Build Coastguard Worker return info.dli_fname; 41*523fa7a6SAndroid Build Coastguard Worker } else { 42*523fa7a6SAndroid Build Coastguard Worker return DYNAMIC_LIBRARY_NOT_FOUND; 43*523fa7a6SAndroid Build Coastguard Worker } 44*523fa7a6SAndroid Build Coastguard Worker #endif 45*523fa7a6SAndroid Build Coastguard Worker (void)addr; 46*523fa7a6SAndroid Build Coastguard Worker return DYNAMIC_LIBRARY_NOT_SUPPORTED; 47*523fa7a6SAndroid Build Coastguard Worker } 48*523fa7a6SAndroid Build Coastguard Worker 49*523fa7a6SAndroid Build Coastguard Worker } // extern "C" 50