# Symbols defined in the library which aren't specifically bound to a
# version node are effectively bound to an unspecified base version of
# the library. It is possible to bind all otherwise unspecified symbols
# to a given version node using `global: *' somewhere in the version script.
#
# The interfaces at the "v1" level.
# At this level we present these functions to the linker (and thus to an
# application).
# Any functions not defined in the global list (i.e. "local") will be internal
# to the library (i.e. not exported but used within the library).
# Thus the real function names, "numa_bind_v1" etc, are local and won't
# be known to the linker.

# the first 16 have v1 aliases
# 3 of the 5 system calls that libnuma provides are common to all versions:
libnuma_1.1 {
  global:
    set_mempolicy;
    get_mempolicy;
    mbind;
    numa_all_nodes;
    numa_alloc;
    numa_alloc_interleaved;
    numa_alloc_interleaved_subset;
    numa_alloc_local;
    numa_alloc_onnode;
    numa_available;
    numa_bind;
    numa_distance;
    numa_error;
    numa_exit_on_error;
    numa_free;
    numa_get_interleave_mask;
    numa_get_interleave_node;
    numa_get_membind;
    numa_get_run_node_mask;
    numa_interleave_memory;
    numa_max_node;
    numa_migrate_pages;
    numa_no_nodes;
    numa_node_size64;
    numa_node_size;
    numa_node_to_cpus;
    numa_pagesize;
    numa_parse_bitmap;
    numa_police_memory;
    numa_preferred;
    numa_run_on_node;
    numa_run_on_node_mask;
    numa_sched_getaffinity;
    numa_sched_setaffinity;
    numa_set_bind_policy;
    numa_set_interleave_mask;
    numa_set_localalloc;
    numa_set_membind;
    numa_set_preferred;
    numa_set_strict;
    numa_setlocal_memory;
    numa_tonode_memory;
    numa_tonodemask_memory;
    numa_warn;
    numa_exit_on_warn;
    numa_node_to_cpu_update;
  local:
    *;
};

# The interfaces at the "v2" level.
# The first 17 have v2 aliases
# We add the bitmask_ functions
# and the move_pages and migrate_pages system calls
# 1.2 depends on 1.1

libnuma_1.2 {
  global:
    copy_bitmask_to_nodemask;
    copy_nodemask_to_bitmask;
    copy_bitmask_to_bitmask;
    move_pages;
    migrate_pages;
    numa_all_cpus_ptr;
    numa_all_nodes_ptr;
    numa_alloc_interleaved_subset;
    numa_realloc;
    numa_allocate_cpumask;
    numa_allocate_nodemask;
    numa_bind;
    numa_bitmask_alloc;
    numa_bitmask_clearall;
    numa_bitmask_clearbit;
    numa_bitmask_equal;
    numa_bitmask_free;
    numa_bitmask_isbitset;
    numa_bitmask_nbytes;
    numa_bitmask_setall;
    numa_bitmask_setbit;
    numa_bitmask_weight;
    numa_get_interleave_mask;
    numa_get_membind;
    numa_get_mems_allowed;
    numa_get_run_node_mask;
    numa_interleave_memory;
    numa_max_possible_node;
    numa_move_pages;
    numa_no_nodes_ptr;
    numa_node_to_cpus;
    numa_node_of_cpu;
    numa_nodes_ptr;
    numa_num_configured_cpus;
    numa_num_configured_nodes;
    numa_num_possible_nodes;
    numa_num_task_cpus;
    numa_num_task_nodes;
    numa_num_thread_cpus;
    numa_num_thread_nodes;
    numa_parse_bitmap;
    numa_parse_cpustring;
    numa_parse_nodestring;
    numa_run_on_node_mask;
    numa_sched_getaffinity;
    numa_sched_setaffinity;
    numa_set_interleave_mask;
    numa_set_membind;
    numa_tonodemask_memory;
  local:
    *;
} libnuma_1.1;

# New parsing interface for cpu/numastrings
# was added into version 1.3

libnuma_1.3 {
  global:
    numa_parse_cpustring_all;
    numa_parse_nodestring_all;
    numa_num_possible_cpus;
  local:
    *;
} libnuma_1.2;

# New interface with customizable cpuset awareness
# was added into version 1.4
libnuma_1.4 {
  global:
    numa_run_on_node_mask_all;
  local:
    *;
} libnuma_1.3;

# New interface for membind with NUMA balancing optimization
libnuma_1.5 {
  global:
    numa_set_membind_balancing;
  local:
    *;
} libnuma_1.4;


libnuma_1.6{
  global:
    numa_has_preferred_many;
    numa_set_preferred_many;
    numa_preferred_many;
  local:
    *;
} libnuma_1.5;
