17ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov/* 27ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * Copyright (C) 2014 The Android Open Source Project 37ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * 47ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * Licensed under the Apache License, Version 2.0 (the "License"); 57ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * you may not use this file except in compliance with the License. 67ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * You may obtain a copy of the License at 77ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * 87ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * http://www.apache.org/licenses/LICENSE-2.0 97ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * 107ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * Unless required by applicable law or agreed to in writing, software 117ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * distributed under the License is distributed on an "AS IS" BASIS, 127ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * See the License for the specific language governing permissions and 147ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov * limitations under the License. 157ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov */ 167ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov 177ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov#include <stdint.h> 187ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov#include <stdlib.h> 197ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov 207ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanovuint32_t dlopen_nodelete_2_taxicab_number = 1729; 217ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanovstatic bool* unload_flag_ptr = nullptr; 227ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov 237ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanovextern "C" void dlopen_nodelete_2_set_unload_flag_ptr(bool* ptr) { 247ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov unload_flag_ptr = ptr; 257ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov} 267ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov 277ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanovstatic void __attribute__((destructor)) unload_guard() { 287ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov if (unload_flag_ptr != nullptr) { 297ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov *unload_flag_ptr = true; 307ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov } 317ca96a075b778f1fa2ad265350879238cbcb4d09Dmitriy Ivanov} 32