1*fcaf7f86SDimitry Andric //===-- sanitizer_solaris.h -------------------------------------*- C++ -*-===// 2*fcaf7f86SDimitry Andric // 3*fcaf7f86SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*fcaf7f86SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*fcaf7f86SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*fcaf7f86SDimitry Andric // 7*fcaf7f86SDimitry Andric //===----------------------------------------------------------------------===// 8*fcaf7f86SDimitry Andric // 9*fcaf7f86SDimitry Andric // This file is a part of Sanitizer runtime. It contains Solaris-specific 10*fcaf7f86SDimitry Andric // definitions. 11*fcaf7f86SDimitry Andric // 12*fcaf7f86SDimitry Andric //===----------------------------------------------------------------------===// 13*fcaf7f86SDimitry Andric 14*fcaf7f86SDimitry Andric #ifndef SANITIZER_SOLARIS_H 15*fcaf7f86SDimitry Andric #define SANITIZER_SOLARIS_H 16*fcaf7f86SDimitry Andric 17*fcaf7f86SDimitry Andric #include "sanitizer_internal_defs.h" 18*fcaf7f86SDimitry Andric 19*fcaf7f86SDimitry Andric #if SANITIZER_SOLARIS 20*fcaf7f86SDimitry Andric 21*fcaf7f86SDimitry Andric #include <link.h> 22*fcaf7f86SDimitry Andric 23*fcaf7f86SDimitry Andric namespace __sanitizer { 24*fcaf7f86SDimitry Andric 25*fcaf7f86SDimitry Andric // Beginning of declaration from OpenSolaris/Illumos 26*fcaf7f86SDimitry Andric // $SRC/cmd/sgs/include/rtld.h. 27*fcaf7f86SDimitry Andric struct Rt_map { 28*fcaf7f86SDimitry Andric Link_map rt_public; 29*fcaf7f86SDimitry Andric const char *rt_pathname; 30*fcaf7f86SDimitry Andric ulong_t rt_padstart; 31*fcaf7f86SDimitry Andric ulong_t rt_padimlen; 32*fcaf7f86SDimitry Andric ulong_t rt_msize; 33*fcaf7f86SDimitry Andric uint_t rt_flags; 34*fcaf7f86SDimitry Andric uint_t rt_flags1; 35*fcaf7f86SDimitry Andric ulong_t rt_tlsmodid; 36*fcaf7f86SDimitry Andric }; 37*fcaf7f86SDimitry Andric 38*fcaf7f86SDimitry Andric // Structure matching the Solaris 11.4 struct dl_phdr_info used to determine 39*fcaf7f86SDimitry Andric // presence of dlpi_tls_modid field at runtime. Cf. Solaris 11.4 40*fcaf7f86SDimitry Andric // dl_iterate_phdr(3C), Example 2. 41*fcaf7f86SDimitry Andric struct dl_phdr_info_test { 42*fcaf7f86SDimitry Andric ElfW(Addr) dlpi_addr; 43*fcaf7f86SDimitry Andric const char *dlpi_name; 44*fcaf7f86SDimitry Andric const ElfW(Phdr) * dlpi_phdr; 45*fcaf7f86SDimitry Andric ElfW(Half) dlpi_phnum; 46*fcaf7f86SDimitry Andric u_longlong_t dlpi_adds; 47*fcaf7f86SDimitry Andric u_longlong_t dlpi_subs; 48*fcaf7f86SDimitry Andric size_t dlpi_tls_modid; 49*fcaf7f86SDimitry Andric void *dlpi_tls_data; 50*fcaf7f86SDimitry Andric }; 51*fcaf7f86SDimitry Andric 52*fcaf7f86SDimitry Andric } // namespace __sanitizer 53*fcaf7f86SDimitry Andric 54*fcaf7f86SDimitry Andric #endif // SANITIZER_SOLARIS 55*fcaf7f86SDimitry Andric 56*fcaf7f86SDimitry Andric #endif // SANITIZER_SOLARIS_H 57