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