1a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project/* 2a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * 4a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * you may not use this file except in compliance with the License. 6a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * You may obtain a copy of the License at 7a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * 8a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * 10a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * See the License for the specific language governing permissions and 14a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * limitations under the License. 15a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project */ 16a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 17e2a8b1fd19fb3a8ead2ba28ddba27be19fa978b5Matt Fischer#include <dlfcn.h> 187ac975146ea7bc1ee7499bafc4e0b57b7ee56c98Elliott Hughes#include <link.h> 19a4aafd156068ee174012f28cd894dbecf0e4ab90Elliott Hughes#include <stdlib.h> 2079fd668bb4ddb22432eeda2ebd8d10359013d9a8Dmitriy Ivanov#include <stdbool.h> 21012cb4583a5f8564059142bb1900ea3a31e7cfa9Torne (Richard Coles)#include <android/dlext.h> 22a4aafd156068ee174012f28cd894dbecf0e4ab90Elliott Hughes 237ac975146ea7bc1ee7499bafc4e0b57b7ee56c98Elliott Hughes// These are stubs for functions that are actually defined 247ac975146ea7bc1ee7499bafc4e0b57b7ee56c98Elliott Hughes// in the dynamic linker and hijacked at runtime. 25cade4c36e7c9c62db3f476a0f9cfc329bac9acb7Elliott Hughes 267ac975146ea7bc1ee7499bafc4e0b57b7ee56c98Elliott Hughesvoid* dlopen(const char* filename __unused, int flag __unused) { return 0; } 279cf99cbad89c8495828788ce693a99ced434f66fDimitry Ivanov 287ac975146ea7bc1ee7499bafc4e0b57b7ee56c98Elliott Hughesconst char* dlerror(void) { return 0; } 299cf99cbad89c8495828788ce693a99ced434f66fDimitry Ivanov 307ac975146ea7bc1ee7499bafc4e0b57b7ee56c98Elliott Hughesvoid* dlsym(void* handle __unused, const char* symbol __unused) { return 0; } 319cf99cbad89c8495828788ce693a99ced434f66fDimitry Ivanov 329cf99cbad89c8495828788ce693a99ced434f66fDimitry Ivanovvoid* dlvsym(void* handle __unused, const char* symbol __unused, const char* version __unused) { 339cf99cbad89c8495828788ce693a99ced434f66fDimitry Ivanov return 0; 349cf99cbad89c8495828788ce693a99ced434f66fDimitry Ivanov} 359cf99cbad89c8495828788ce693a99ced434f66fDimitry Ivanov 367ac975146ea7bc1ee7499bafc4e0b57b7ee56c98Elliott Hughesint dladdr(const void* addr __unused, Dl_info* info __unused) { return 0; } 379cf99cbad89c8495828788ce693a99ced434f66fDimitry Ivanov 387ac975146ea7bc1ee7499bafc4e0b57b7ee56c98Elliott Hughesint dlclose(void* handle __unused) { return 0; } 3922d629211d72adaf46f3fc48f59540f8e5798b1eElliott Hughes 407ac975146ea7bc1ee7499bafc4e0b57b7ee56c98Elliott Hughes#if defined(__arm__) 417ac975146ea7bc1ee7499bafc4e0b57b7ee56c98Elliott Hughes_Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc __unused, int* pcount __unused) { return 0; } 4224053a461e7a20f34002262c1bb122023134989dChristopher Ferris#endif 4322d629211d72adaf46f3fc48f59540f8e5798b1eElliott Hughes 4442d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanovint dl_iterate_phdr(int (*cb)(struct dl_phdr_info* info, size_t size, void* data) __unused, 4542d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov void* data __unused) { 4642d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov return 0; 4742d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov} 48012cb4583a5f8564059142bb1900ea3a31e7cfa9Torne (Richard Coles) 49012cb4583a5f8564059142bb1900ea3a31e7cfa9Torne (Richard Coles)void android_get_LD_LIBRARY_PATH(char* buffer __unused, size_t buffer_size __unused) { } 50012cb4583a5f8564059142bb1900ea3a31e7cfa9Torne (Richard Coles)void android_update_LD_LIBRARY_PATH(const char* ld_library_path __unused) { } 51012cb4583a5f8564059142bb1900ea3a31e7cfa9Torne (Richard Coles) 5242d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanovvoid* android_dlopen_ext(const char* filename __unused, int flag __unused, 5342d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov const android_dlextinfo* extinfo __unused) { 5442d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov return 0; 5542d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov} 5679fd668bb4ddb22432eeda2ebd8d10359013d9a8Dmitriy Ivanov 5779fd668bb4ddb22432eeda2ebd8d10359013d9a8Dmitriy Ivanovvoid android_set_application_target_sdk_version(uint32_t target __unused) { } 5879fd668bb4ddb22432eeda2ebd8d10359013d9a8Dmitriy Ivanovuint32_t android_get_application_target_sdk_version() { return 0; } 5942d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov 601ffec1cc4d0e283bb1ff6f49843769a3493b8d73Dmitriy Ivanovbool android_init_namespaces(const char* public_ns_sonames __unused, 611ffec1cc4d0e283bb1ff6f49843769a3493b8d73Dmitriy Ivanov const char* anon_ns_library_path __unused) { 621ffec1cc4d0e283bb1ff6f49843769a3493b8d73Dmitriy Ivanov return false; 631ffec1cc4d0e283bb1ff6f49843769a3493b8d73Dmitriy Ivanov} 641ffec1cc4d0e283bb1ff6f49843769a3493b8d73Dmitriy Ivanov 6542d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanovstruct android_namespace_t* android_create_namespace(const char* name __unused, 6642d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov const char* ld_library_path __unused, 6742d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov const char* default_library_path __unused, 68e78deef364d952dd1141a2f3067a12060aaf11e6Dimitry Ivanov uint64_t type __unused, 69284ae3559ed909613b189b98bdc3efab94373a30Dimitry Ivanov const char* permitted_when_isolated_path __unused) { 7042d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov return 0; 7142d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov} 72df91dc2c192aa2789320c500037d28c919daa820Dimitry Ivanov 736be6ef563e15cec05ea758f76b493b63c760923cDimitry Ivanovvoid android_dlwarning(void* obj, void (*f)(void*, const char*)) { f(obj, 0); } 74