Viewing file: sanitizer_getauxval.h (1.8 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
//===-- sanitizer_getauxval.h -----------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Common getauxval() guards and definitions. // getauxval() is not defined until glibc version 2.16, or until API level 21 // for Android. // Implement the getauxval() compat function for NetBSD. // //===----------------------------------------------------------------------===//
#ifndef SANITIZER_GETAUXVAL_H #define SANITIZER_GETAUXVAL_H
#include "sanitizer_platform.h" #include "sanitizer_glibc_version.h"
#if SANITIZER_LINUX || SANITIZER_FUCHSIA
# if (__GLIBC_PREREQ(2, 16) || (SANITIZER_ANDROID && __ANDROID_API__ >= 21) || \ SANITIZER_FUCHSIA) && \ !SANITIZER_GO # define SANITIZER_USE_GETAUXVAL 1 # else # define SANITIZER_USE_GETAUXVAL 0 # endif
# if SANITIZER_USE_GETAUXVAL # include <sys/auxv.h> # else // The weak getauxval definition allows to check for the function at runtime. // This is useful for Android, when compiled at a lower API level yet running // on a more recent platform that offers the function. extern "C" SANITIZER_WEAK_ATTRIBUTE unsigned long getauxval(unsigned long type); # endif
#elif SANITIZER_NETBSD
#define SANITIZER_USE_GETAUXVAL 1
#include <dlfcn.h> #include <elf.h>
static inline decltype(AuxInfo::a_v) getauxval(decltype(AuxInfo::a_type) type) { for (const AuxInfo *aux = (const AuxInfo *)_dlauxinfo(); aux->a_type != AT_NULL; ++aux) { if (type == aux->a_type) return aux->a_v; }
return 0; }
#endif
#endif // SANITIZER_GETAUXVAL_H
|