14bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov/* 24bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * Copyright (C) 2015 The Android Open Source Project 34bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * 44bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * Licensed under the Apache License, Version 2.0 (the "License"); 54bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * you may not use this file except in compliance with the License. 64bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * You may obtain a copy of the License at 74bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * 84bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * http://www.apache.org/licenses/LICENSE-2.0 94bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * 104bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * Unless required by applicable law or agreed to in writing, software 114bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * distributed under the License is distributed on an "AS IS" BASIS, 124bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * See the License for the specific language governing permissions and 144bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov * limitations under the License. 154bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov */ 164bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov#include <dlfcn.h> 174bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov#include <stdio.h> 184bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov 194bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanovextern int test_dlsym_symbol; 204bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov 214bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanovint test_dlsym_symbol = -1; 224bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov 234bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanovextern "C" int* lookup_dlsym_symbol_using_RTLD_DEFAULT() { 244bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov dlerror(); 254bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov int* result = static_cast<int*>(dlsym(RTLD_DEFAULT, "test_dlsym_symbol")); 264bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov // TODO: remove this once b/20049306 is fixed 274bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov if (result == nullptr) { 284bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov printf("Cannot find the answer\n"); 294bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov } 304bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov return result; 314bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov} 324bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov 334bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanovextern "C" int* lookup_dlsym_symbol2_using_RTLD_DEFAULT() { 344bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov dlerror(); 354bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov int* result = static_cast<int*>(dlsym(RTLD_DEFAULT, "test_dlsym_symbol2")); 364bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov // TODO: remove this once b/20049306 is fixed 374bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov if (result == nullptr) { 384bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov printf("Cannot find the answer\n"); 394bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov } 404bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov return result; 414bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov} 424bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov 434bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanovextern "C" int* lookup_dlsym_symbol_using_RTLD_NEXT() { 444bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov dlerror(); 454bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov int* result = static_cast<int*>(dlsym(RTLD_NEXT, "test_dlsym_symbol")); 464bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov // TODO: remove this once b/20049306 is fixed 474bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov if (result == nullptr) { 484bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov printf("Cannot find the answer\n"); 494bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov } 504bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov return result; 514bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov} 524bac6ea463a8f20793f5c1425965729ded1419feDmitriy Ivanov 53