193c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao/*
293c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * Copyright (C) 2015 The Android Open Source Project
393c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * All rights reserved.
493c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao *
593c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * Redistribution and use in source and binary forms, with or without
693c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * modification, are permitted provided that the following conditions
793c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * are met:
893c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao *  * Redistributions of source code must retain the above copyright
993c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao *    notice, this list of conditions and the following disclaimer.
1093c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao *  * Redistributions in binary form must reproduce the above copyright
1193c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao *    notice, this list of conditions and the following disclaimer in
1293c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao *    the documentation and/or other materials provided with the
1393c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao *    distribution.
1493c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao *
1593c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1693c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1793c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
1893c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
1993c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
2093c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
2193c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
2293c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
2393c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
2493c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
2593c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2693c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao * SUCH DAMAGE.
2793c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao */
2893c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao#ifndef _PRIVATE_BIONIC_VDSO_H
2993c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao#define _PRIVATE_BIONIC_VDSO_H
3093c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao
3193c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao#include <time.h>
3293c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao
3393c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao#if defined(__aarch64__)
3493c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao#define VDSO_CLOCK_GETTIME_SYMBOL "__kernel_clock_gettime"
3593c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao#define VDSO_GETTIMEOFDAY_SYMBOL  "__kernel_gettimeofday"
3693c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao#elif defined(__x86_64__) || defined(__i386__)
3793c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao#define VDSO_CLOCK_GETTIME_SYMBOL "__vdso_clock_gettime"
3893c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao#define VDSO_GETTIMEOFDAY_SYMBOL  "__vdso_gettimeofday"
3993c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao#endif
4093c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao
4193c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gaoextern "C" int __clock_gettime(int, timespec*);
4293c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gaoextern "C" int __gettimeofday(timeval*, struct timezone*);
4393c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao
4493c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gaostruct vdso_entry {
4593c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao  const char* name;
4693c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao  void* fn;
4793c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao};
4893c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao
4993c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gaoenum {
5093c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao  VDSO_CLOCK_GETTIME = 0,
5193c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao  VDSO_GETTIMEOFDAY,
5293c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao  VDSO_END
5393c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao};
5493c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao
5593c0f5ee00d1357247fda333c9d49c8673c9c83bJosh Gao#endif  // _PRIVATE_BIONIC_VDSO_H
56