1862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang/*
2862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang * Copyright 2012, The Android Open Source Project
3862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang *
4862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang * Licensed under the Apache License, Version 2.0 (the "License");
5862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang * you may not use this file except in compliance with the License.
6862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang * You may obtain a copy of the License at
7862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang *
8862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang *     http://www.apache.org/licenses/LICENSE-2.0
9862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang *
10862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang * Unless required by applicable law or agreed to in writing, software
11862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang * distributed under the License is distributed on an "AS IS" BASIS,
12862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang * See the License for the specific language governing permissions and
14862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang * limitations under the License.
15862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang */
16862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang
17862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang#ifndef BCC_EXECUTION_ENGINE_SYMBOL_RESOLVER_INTERFACE_H
18862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang#define BCC_EXECUTION_ENGINE_SYMBOL_RESOLVER_INTERFACE_H
19862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang
20862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang#include <cstddef>
21862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang
22862f3ba997e14b61dce9d341a75688951e67fd1bZonr Changnamespace bcc {
23862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang
24862f3ba997e14b61dce9d341a75688951e67fd1bZonr Changclass SymbolResolverInterface {
25862f3ba997e14b61dce9d341a75688951e67fd1bZonr Changpublic:
26862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang  static void *LookupFunction(void *pResolver, const char *pName) {
27862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang    SymbolResolverInterface *resolver =
28862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang        reinterpret_cast<SymbolResolverInterface*>(pResolver);
29862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang    return ((resolver != NULL) ? resolver->getAddress(pName) : NULL);
30862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang  }
31862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang
32862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang  // Should this be a const method?
33862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang  virtual void *getAddress(const char *pName) = 0;
34862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang
35862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang  virtual ~SymbolResolverInterface() { }
36862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang};
37862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang
38862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang} // end namespace bcc
39862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang
40862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang#endif // BCC_EXECUTION_ENGINE_SYMBOL_RESOLVER_INTERFACE_H
41