# 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.


# TODO: check the legacy comment below, currently use extra leading underscore everywhere.
# Sometimes macOS* requires leading underscore (e. g. in export list file), but sometimes not
# (e. g. when searching symbol in a dynamic library via dlsym()). Symbols in this file SHOULD
# be listed WITHOUT one leading underscore. __TBB_SYMBOL macro should add underscore when
# necessary, depending on the intended usage.

# 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

