sanitizer_getauxval.h revision 341825
1//===-- sanitizer_getauxval.h -----------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Common getauxval() guards and definitions.
11// getauxval() is not defined until glibc version 2.16, or until API level 21
12// for Android.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef SANITIZER_GETAUXVAL_H
17#define SANITIZER_GETAUXVAL_H
18
19#include "sanitizer_platform.h"
20
21#if SANITIZER_LINUX || SANITIZER_FUCHSIA
22
23# include <features.h>
24
25# ifndef __GLIBC_PREREQ
26#  define __GLIBC_PREREQ(x, y) 0
27# endif
28
29# if __GLIBC_PREREQ(2, 16) || (SANITIZER_ANDROID && __ANDROID_API__ >= 21) || \
30     SANITIZER_FUCHSIA
31#  define SANITIZER_USE_GETAUXVAL 1
32# else
33#  define SANITIZER_USE_GETAUXVAL 0
34# endif
35
36# if SANITIZER_USE_GETAUXVAL
37#  include <sys/auxv.h>
38# else
39// The weak getauxval definition allows to check for the function at runtime.
40// This is useful for Android, when compiled at a lower API level yet running
41// on a more recent platform that offers the function.
42extern "C" SANITIZER_WEAK_ATTRIBUTE
43unsigned long getauxval(unsigned long type);  // NOLINT
44# endif
45
46#endif // SANITIZER_LINUX || SANITIZER_FUCHSIA
47
48#endif // SANITIZER_GETAUXVAL_H
49