xref: /freebsd/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_dl.cpp (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
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