/*
    Copyright (c) 2005-2021 Intel Corporation

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/

{
global:

/* Assertions (assert.cpp) */
_ZN3tbb6detail2r117assertion_failureEPKciS3_S3_;

/* ITT (profiling.cpp) */
_ZN3tbb6detail2r112itt_task_endENS0_2d115itt_domain_enumE;
_ZN3tbb6detail2r114itt_region_endENS0_2d115itt_domain_enumEPvy;
_ZN3tbb6detail2r114itt_task_beginENS0_2d115itt_domain_enumEPvyS4_yNS0_2d021string_resource_indexE;
_ZN3tbb6detail2r115call_itt_notifyEiPv;
_ZN3tbb6detail2r115create_itt_syncEPvPKcS4_;
_ZN3tbb6detail2r116itt_region_beginENS0_2d115itt_domain_enumEPvyS4_yNS0_2d021string_resource_indexE;
_ZN3tbb6detail2r116itt_relation_addENS0_2d115itt_domain_enumEPvyNS0_2d012itt_relationES4_y;
_ZN3tbb6detail2r117itt_set_sync_nameEPvPKc;
_ZN3tbb6detail2r119itt_make_task_groupENS0_2d115itt_domain_enumEPvyS4_yNS0_2d021string_resource_indexE;
_ZN3tbb6detail2r120itt_metadata_str_addENS0_2d115itt_domain_enumEPvyNS0_2d021string_resource_indexEPKc;
_ZN3tbb6detail2r120itt_metadata_ptr_addENS0_2d115itt_domain_enumEPvyNS0_2d021string_resource_indexES4_;

/* Allocators (allocator.cpp) */
_ZN3tbb6detail2r115allocate_memoryEm;
_ZN3tbb6detail2r117deallocate_memoryEPv;
_ZN3tbb6detail2r122cache_aligned_allocateEm;
_ZN3tbb6detail2r124cache_aligned_deallocateEPv;
_ZN3tbb6detail2r115cache_line_sizeEv;
_ZN3tbb6detail2r117is_tbbmalloc_usedEv;

/* Small object pool (small_object_pool.cpp) */
_ZN3tbb6detail2r18allocateERPNS0_2d117small_object_poolEm;
_ZN3tbb6detail2r18allocateERPNS0_2d117small_object_poolEmRKNS2_14execution_dataE;
_ZN3tbb6detail2r110deallocateERNS0_2d117small_object_poolEPvm;
_ZN3tbb6detail2r110deallocateERNS0_2d117small_object_poolEPvmRKNS2_14execution_dataE;

/* Error handling (exception.cpp) */
_ZN3tbb6detail2r115throw_exceptionENS0_2d012exception_idE;
_ZTIN3tbb6detail2r114bad_last_allocE;
_ZTVN3tbb6detail2r114bad_last_allocE;
_ZTIN3tbb6detail2r112missing_waitE;
_ZTVN3tbb6detail2r112missing_waitE;
_ZTIN3tbb6detail2r110user_abortE;
_ZTVN3tbb6detail2r110user_abortE;
_ZTIN3tbb6detail2r111unsafe_waitE;
_ZTVN3tbb6detail2r111unsafe_waitE;

/* RTM Mutex (rtm_mutex.cpp) */
_ZN3tbb6detail2r17acquireERNS0_2d19rtm_mutexERNS3_11scoped_lockEb;
_ZN3tbb6detail2r17releaseERNS0_2d19rtm_mutex11scoped_lockE;
_ZN3tbb6detail2r111try_acquireERNS0_2d19rtm_mutexERNS3_11scoped_lockE;

/* RTM RW Mutex (rtm_rw_mutex.cpp) */
_ZN3tbb6detail2r114acquire_readerERNS0_2d112rtm_rw_mutexERNS3_11scoped_lockEb;
_ZN3tbb6detail2r114acquire_writerERNS0_2d112rtm_rw_mutexERNS3_11scoped_lockEb;
_ZN3tbb6detail2r118try_acquire_readerERNS0_2d112rtm_rw_mutexERNS3_11scoped_lockE;
_ZN3tbb6detail2r118try_acquire_writerERNS0_2d112rtm_rw_mutexERNS3_11scoped_lockE;
_ZN3tbb6detail2r17releaseERNS0_2d112rtm_rw_mutex11scoped_lockE;
_ZN3tbb6detail2r17upgradeERNS0_2d112rtm_rw_mutex11scoped_lockE;
_ZN3tbb6detail2r19downgradeERNS0_2d112rtm_rw_mutex11scoped_lockE;

/* Tasks and partitioners (task.cpp) */
_ZN3tbb6detail2r17suspendEPFvPvPNS1_18suspend_point_typeEES2_;
_ZN3tbb6detail2r16resumeEPNS1_18suspend_point_typeE;
_ZN3tbb6detail2r121current_suspend_pointEv;
_ZN3tbb6detail2r114notify_waitersEm;

/* Task dispatcher (task_dispatcher.cpp) */
_ZN3tbb6detail2r114execution_slotEPKNS0_2d114execution_dataE;
_ZN3tbb6detail2r14waitERNS0_2d112wait_contextERNS2_18task_group_contextE;
_ZN3tbb6detail2r15spawnERNS0_2d14taskERNS2_18task_group_contextE;
_ZN3tbb6detail2r15spawnERNS0_2d14taskERNS2_18task_group_contextEt;
_ZN3tbb6detail2r116execute_and_waitERNS0_2d14taskERNS2_18task_group_contextERNS2_12wait_contextES6_;
_ZN3tbb6detail2r16submitERNS0_2d14taskERNS2_18task_group_contextEPNS1_5arenaEm;
_ZN3tbb6detail2r115current_contextEv;

/* Task group context (task_group_context.cpp) */
_ZN3tbb6detail2r110initializeERNS0_2d118task_group_contextE;
_ZN3tbb6detail2r122cancel_group_executionERNS0_2d118task_group_contextE;
_ZN3tbb6detail2r128is_group_execution_cancelledERNS0_2d118task_group_contextE;
_ZN3tbb6detail2r15resetERNS0_2d118task_group_contextE;
_ZN3tbb6detail2r17destroyERNS0_2d118task_group_contextE;
_ZN3tbb6detail2r119capture_fp_settingsERNS0_2d118task_group_contextE;

/* Task arena (arena.cpp) */
_ZN3tbb6detail2r115max_concurrencyEPKNS0_2d115task_arena_baseE;
_ZN3tbb6detail2r110initializeERNS0_2d115task_arena_baseE;
_ZN3tbb6detail2r16attachERNS0_2d115task_arena_baseE;
_ZN3tbb6detail2r17executeERNS0_2d115task_arena_baseERNS2_13delegate_baseE;
_ZN3tbb6detail2r19terminateERNS0_2d115task_arena_baseE;
_ZN3tbb6detail2r120isolate_within_arenaERNS0_2d113delegate_baseEl;
_ZN3tbb6detail2r17enqueueERNS0_2d14taskEPNS2_15task_arena_baseE;
_ZN3tbb6detail2r17enqueueERNS0_2d14taskERNS2_18task_group_contextEPNS2_15task_arena_baseE;
_ZN3tbb6detail2r14waitERNS0_2d115task_arena_baseE;

/* System topology parsing and threads pinning (governor.cpp) */
_ZN3tbb6detail2r115numa_node_countEv;
_ZN3tbb6detail2r117fill_numa_indicesEPi;
_ZN3tbb6detail2r115core_type_countEl;
_ZN3tbb6detail2r122fill_core_type_indicesEPil;
_ZN3tbb6detail2r131constraints_default_concurrencyERKNS0_2d111constraintsEl;
_ZN3tbb6detail2r128constraints_threads_per_coreERKNS0_2d111constraintsEl;
_ZN3tbb6detail2r124numa_default_concurrencyEi;

/* Observer (observer_proxy.cpp) */
_ZN3tbb6detail2r17observeERNS0_2d123task_scheduler_observerEb;

/* Queuing RW Mutex (queuing_rw_mutex.cpp) */
_ZN3tbb6detail2r111try_acquireERNS0_2d116queuing_rw_mutexERNS3_11scoped_lockEb;
_ZN3tbb6detail2r117upgrade_to_writerERNS0_2d116queuing_rw_mutex11scoped_lockE;
_ZN3tbb6detail2r119downgrade_to_readerERNS0_2d116queuing_rw_mutex11scoped_lockE;
_ZN3tbb6detail2r17acquireERNS0_2d116queuing_rw_mutexERNS3_11scoped_lockEb;
_ZN3tbb6detail2r17releaseERNS0_2d116queuing_rw_mutex11scoped_lockE;
_ZN3tbb6detail2r19constructERNS0_2d116queuing_rw_mutexE;
_ZN3tbb6detail2r19is_writerERKNS0_2d116queuing_rw_mutex11scoped_lockE;

/* Global control (global_control.cpp) */
_ZN3tbb6detail2r16createERNS0_2d114global_controlE;
_ZN3tbb6detail2r17destroyERNS0_2d114global_controlE;
_ZN3tbb6detail2r127global_control_active_valueEi;
_ZN3tbb6detail2r18finalizeERNS0_2d121task_scheduler_handleEl;
_ZN3tbb6detail2r13getERNS0_2d121task_scheduler_handleE;

/* Parallel pipeline (parallel_pipeline.cpp) */
_ZN3tbb6detail2r117parallel_pipelineERNS0_2d118task_group_contextEmRKNS2_11filter_nodeE;
_ZN3tbb6detail2r116set_end_of_inputERNS0_2d111base_filterE;

/* Concurrent bounded queue (concurrent_bounded_queue.cpp) */
_ZN3tbb6detail2r126allocate_bounded_queue_repEm;
_ZN3tbb6detail2r126wait_bounded_queue_monitorEPNS1_18concurrent_monitorEmlRNS0_2d113delegate_baseE;
_ZN3tbb6detail2r128abort_bounded_queue_monitorsEPNS1_18concurrent_monitorE;
_ZN3tbb6detail2r128deallocate_bounded_queue_repEPhm;
_ZN3tbb6detail2r128notify_bounded_queue_monitorEPNS1_18concurrent_monitorEmm;

/* Concurrent monitor (address_waiter.cpp) */
_ZN3tbb6detail2r115wait_on_addressEPvRNS0_2d113delegate_baseEm;
_ZN3tbb6detail2r117notify_by_addressEPvm;
_ZN3tbb6detail2r121notify_by_address_oneEPv;
_ZN3tbb6detail2r121notify_by_address_allEPv;

/* Versioning (version.cpp) */
TBB_runtime_interface_version;
TBB_runtime_version;

local:
/* TODO: fill more precisely */
*;
};
