1932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang/*
2862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang * Copyright 2012, The Android Open Source Project
3932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang *
4932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License");
5932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * you may not use this file except in compliance with the License.
6932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * You may obtain a copy of the License at
7932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang *
8932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang *     http://www.apache.org/licenses/LICENSE-2.0
9932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang *
10932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * Unless required by applicable law or agreed to in writing, software
11932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS,
12932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * See the License for the specific language governing permissions and
14932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * limitations under the License.
15932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang */
16932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang
17c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#include "bcc/ExecutionEngine/BCCRuntimeSymbolResolver.h"
1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
19862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang// int_lib.h included by BCCRuntimeStub.h has the following line:
20862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang//
21862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang//            typedef      int si_int;
22862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang//
23862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang// However, there's already a macro also named "si_int" defined in siginfo.h
24862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang// bionic/libc/kernel/common/asm-generic/. This is #undef is a hack to avoid
25862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang// compiler mistakenly recognize the identifier "si_int" as a macro and abort
26862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang// the compilation.
27862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang//
28862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang// This line of hack should put in the header file since it invalidate a
29862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang// "system" scope macro definition.
30862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang#undef si_int
31862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang#include "BCCRuntimeStub.h"
32bbcef8ad069ee33c3bfc52dcd1bd6e1a7633e1f9Stephen Hines
33862f3ba997e14b61dce9d341a75688951e67fd1bZonr Changusing namespace bcc;
3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
357c0c78eca053b82d7b14408315789309f5966437Logan Chien#if defined(__arm__) || defined(__mips__)
3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  #define DEF_GENERIC_RUNTIME(func)   \
37932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang    extern void *func;
3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  #define DEF_VFP_RUNTIME(func) \
39932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang    extern void *func ## vfp;
4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  #define DEF_LLVM_RUNTIME(func)
41abd1e3dd923239043a865a9eeaca69b24857e77eShih-wei Liao  #define DEF_BCC_RUNTIME(func)
42862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang#include "BCCRuntime.def"
4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
45862f3ba997e14b61dce9d341a75688951e67fd1bZonr Changconst BCCRuntimeSymbolResolver::SymbolMap BCCRuntimeSymbolResolver::SymbolArray[] = {
467c0c78eca053b82d7b14408315789309f5966437Logan Chien#if defined(__arm__) || defined(__mips__)
4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  #define DEF_GENERIC_RUNTIME(func)   \
4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    { #func, (void*) &func },
4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  // TODO: enable only when target support VFP
5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  #define DEF_VFP_RUNTIME(func) \
5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    { #func, (void*) &func ## vfp },
5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#else
5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  // host compiler library must contain generic runtime
5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  #define DEF_GENERIC_RUNTIME(func)
5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  #define DEF_VFP_RUNTIME(func)
5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define DEF_LLVM_RUNTIME(func)   \
5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao  { #func, (void*) &func },
59abd1e3dd923239043a865a9eeaca69b24857e77eShih-wei Liao#define DEF_BCC_RUNTIME(func) \
60abd1e3dd923239043a865a9eeaca69b24857e77eShih-wei Liao  { #func, &func ## _bcc },
61862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang#include "BCCRuntime.def"
6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao};
6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
64862f3ba997e14b61dce9d341a75688951e67fd1bZonr Changconst size_t BCCRuntimeSymbolResolver::NumSymbols =
65862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang  sizeof(BCCRuntimeSymbolResolver::SymbolArray) /
66862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang    sizeof(BCCRuntimeSymbolResolver::SymbolArray[0]);
67