109ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao/*
209ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao * Copyright 2013, The Android Open Source Project
309ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao *
409ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License");
509ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao * you may not use this file except in compliance with the License.
609ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao * You may obtain a copy of the License at
709ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao *
809ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao *     http://www.apache.org/licenses/LICENSE-2.0
909ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao *
1009ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao * Unless required by applicable law or agreed to in writing, software
1109ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS,
1209ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1309ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao * See the License for the specific language governing permissions and
1409ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao * limitations under the License.
1509ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao */
1609ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao
1709ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao#ifndef BCC_EXECUTION_ENGINE_COMPILER_RT_SYMBOL_RESOLVERS_H
1809ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao#define BCC_EXECUTION_ENGINE_COMPILER_RT_SYMBOL_RESOLVERS_H
1909ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao
2009ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao#include "bcc/ExecutionEngine/SymbolResolvers.h"
2109ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao
2209ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liaonamespace bcc {
2309ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao
2409ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liaoclass CompilerRTSymbolResolver : public DyldSymbolResolver {
2509ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liaopublic:
2609ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao CompilerRTSymbolResolver() :
2709ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao      DyldSymbolResolver("/system/lib/libcompiler_rt.so") { }
2809ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao
2909ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao virtual void *getAddress(const char *pName) {
303ab9da1e1b3d7794994393af086d096397fb84dbStephen Hines   // Compiler runtime functions are always prefixed by "__"
313ab9da1e1b3d7794994393af086d096397fb84dbStephen Hines   if (pName && (pName[0] == '_') && (pName[1] == '_')) {
3209ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao     return DyldSymbolResolver::getAddress(pName);
3309ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao   } else {
3409ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao     return NULL;
3509ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao   }
3609ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao }
3709ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao};
3809ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao
3909ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao} // end namespace bcc
4009ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao
4109ca95426a7ec66def02e47048bb25289759c6fbShih-wei Liao#endif // BCC_EXECUTION_ENGINE_COMPILER_RT_SYMBOL_RESOLVERS_H
42