1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 #pragma once 30 31 #include <sys/cdefs.h> 32 #include <stdbool.h> 33 #include <stdint.h> 34 35 __BEGIN_DECLS 36 37 // Types of an android_fdtrack_event. 38 enum android_fdtrack_event_type { 39 // File descriptor creation: create is the active member of android_fdtrack_event::data. 40 ANDROID_FDTRACK_EVENT_TYPE_CREATE, 41 42 // File descriptor closed. 43 ANDROID_FDTRACK_EVENT_TYPE_CLOSE, 44 }; 45 46 struct android_fdtrack_event { 47 // File descriptor for which this event occurred. 48 int fd; 49 50 // Type of event: this is one of the enumerators of android_fdtrack_event_type. 51 uint8_t type; 52 53 // Data for the event. 54 union { 55 struct { 56 const char* function_name; 57 } create; 58 } data; 59 }; 60 61 // Callback invoked upon file descriptor creation/closure. 62 typedef void (*android_fdtrack_hook_t)(struct android_fdtrack_event*); 63 64 // Register a hook which is called to track fd lifecycle events. 65 bool android_fdtrack_compare_exchange_hook(android_fdtrack_hook_t* expected, android_fdtrack_hook_t value) __INTRODUCED_IN(30); 66 67 // Enable/disable fdtrack *on the current thread*. 68 // This is primarily useful when performing operations which you don't want to track 69 // (e.g. when emitting already-recorded information). 70 bool android_fdtrack_get_enabled() __INTRODUCED_IN(30); 71 bool android_fdtrack_set_enabled(bool new_value) __INTRODUCED_IN(30); 72 73 // Globally enable/disable fdtrack. 74 // This is primaryily useful to reenable fdtrack after it's been automatically disabled post-fork. 75 void android_fdtrack_set_globally_enabled(bool new_value) __INTRODUCED_IN(31); 76 77 __END_DECLS 78