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