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