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 17c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#include "bcc/ExecutionEngine/SymbolResolverProxy.h" 18862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang 19862f3ba997e14b61dce9d341a75688951e67fd1bZonr Changusing namespace bcc; 20862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang 21862f3ba997e14b61dce9d341a75688951e67fd1bZonr Changvoid *SymbolResolverProxy::getAddress(const char *pName) { 22862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang // Search the address of the symbol by following the chain of resolvers. 23862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang for (size_t i = 0; i < mChain.size(); i++) { 24862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang void *addr = mChain[i]->getAddress(pName); 25862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang if (addr != NULL) { 26862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang return addr; 27862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang } 28862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang } 29862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang // Symbol not found or there's no resolver containing in the chain. 30862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang return NULL; 31862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang} 32862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang 33862f3ba997e14b61dce9d341a75688951e67fd1bZonr Changvoid SymbolResolverProxy::chainResolver(SymbolResolverInterface &pResolver) { 34862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang mChain.push_back(&pResolver); 35862f3ba997e14b61dce9d341a75688951e67fd1bZonr Chang} 36