xref: /aosp_15_r20/external/executorch/runtime/platform/system.h (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
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 Worker inline 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