Files
darling/platform-include/pthread/introspection.h
T
2017-01-24 22:22:04 +01:00

112 lines
3.1 KiB
C

/*
* Copyright (c) 2013, 2016 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#ifndef __PTHREAD_INTROSPECTION__
#define __PTHREAD_INTROSPECTION__
#include <sys/cdefs.h>
#include <pthread/pthread.h>
#include <Availability.h>
/*!
* @header
*
* @abstract
* Introspection API for libpthread.
*
* This should only be used for introspection and debugging tools. Do not rely
* on it in shipping code.
*/
__BEGIN_DECLS
/*!
* @typedef pthread_introspection_hook_t
*
* @abstract
* A function pointer called at various points in a PThread's lifetime. The
* function must be able to be called in contexts with invalid thread state.
*
* @param event
* One of the events in pthread_introspection_event_t.
*
* @param thread
* pthread_t associated with the event.
*
* @param addr
* Address associated with the event, e.g. stack address.
*
* @param size
* Size associated with the event, e.g. stack size.
*/
typedef void (*pthread_introspection_hook_t)(unsigned int event,
pthread_t thread, void *addr, size_t size);
/*!
* @enum pthread_introspection_event_t
*
* @constant PTHREAD_INTROSPECTION_THREAD_CREATE
* pthread_t was created.
*
* @constant PTHREAD_INTROSPECTION_THREAD_START
* Thread has started and stack was allocated.
*
* @constant PTHREAD_INTROSPECTION_THREAD_TERMINATE
* Thread is about to be terminated and stack will be deallocated.
*
* @constant PTHREAD_INTROSPECTION_THREAD_DESTROY
* pthread_t is about to be destroyed.
*/
enum {
PTHREAD_INTROSPECTION_THREAD_CREATE = 1,
PTHREAD_INTROSPECTION_THREAD_START,
PTHREAD_INTROSPECTION_THREAD_TERMINATE,
PTHREAD_INTROSPECTION_THREAD_DESTROY,
};
/*!
* @function pthread_introspection_hook_install
*
* @abstract
* Install introspection hook function into libpthread.
*
* @discussion
* The caller is responsible for implementing chaining to the hook that was
* previously installed (if any).
*
* @param hook
* Pointer to hook function.
*
* @result
* Previously installed hook function or NULL.
*/
__OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0)
__attribute__((__nonnull__, __warn_unused_result__))
extern pthread_introspection_hook_t
pthread_introspection_hook_install(pthread_introspection_hook_t hook);
__END_DECLS
#endif