1*5f757f3fSDimitry Andric //===-- sanitizer_dl.cpp --------------------------------------------------===// 2*5f757f3fSDimitry Andric // 3*5f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*5f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*5f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*5f757f3fSDimitry Andric // 7*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 8*5f757f3fSDimitry Andric // 9*5f757f3fSDimitry Andric // This file has helper functions that depend on libc's dynamic loading 10*5f757f3fSDimitry Andric // introspection. 11*5f757f3fSDimitry Andric // 12*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 13*5f757f3fSDimitry Andric 14*5f757f3fSDimitry Andric #include "sanitizer_dl.h" 15*5f757f3fSDimitry Andric 16*5f757f3fSDimitry Andric #include "sanitizer_common/sanitizer_platform.h" 17*5f757f3fSDimitry Andric 18*5f757f3fSDimitry Andric #if SANITIZER_GLIBC 19*5f757f3fSDimitry Andric # include <dlfcn.h> 20*5f757f3fSDimitry Andric #endif 21*5f757f3fSDimitry Andric 22*5f757f3fSDimitry Andric namespace __sanitizer { 23*5f757f3fSDimitry Andric extern const char *SanitizerToolName; 24*5f757f3fSDimitry Andric 25*5f757f3fSDimitry Andric const char *DladdrSelfFName(void) { 26*5f757f3fSDimitry Andric #if SANITIZER_GLIBC 27*5f757f3fSDimitry Andric Dl_info info; 28*5f757f3fSDimitry Andric int ret = dladdr((void *)&SanitizerToolName, &info); 29*5f757f3fSDimitry Andric if (ret) { 30*5f757f3fSDimitry Andric return info.dli_fname; 31*5f757f3fSDimitry Andric } 32*5f757f3fSDimitry Andric #endif 33*5f757f3fSDimitry Andric 34*5f757f3fSDimitry Andric return nullptr; 35*5f757f3fSDimitry Andric } 36*5f757f3fSDimitry Andric 37*5f757f3fSDimitry Andric } // namespace __sanitizer 38