/* Copyright (C) 2021 Free Software Foundation, Inc.
   Contributed by Oracle.

   This file is part of GNU Binutils.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */

GLIBC_2.2.5 {
	global:
		 posix_spawn;
		 posix_spawnp;
		 pthread_mutex_lock;
                 pthread_mutex_unlock;
		 pthread_join;			
		 sem_wait;		
		 pthread_create;
                 dlopen;
                 popen;
                 timer_create;
		 pthread_cond_wait;		
		 pthread_cond_timedwait;
                 fopen;
                 fclose;
                 fdopen;
                 fgetpos;
                 fsetpos;
};

GLIBC_2.3.2 {
	global:
		 pthread_cond_wait;		
		 pthread_cond_timedwait;
};

GLIBC_2.3.3 {
	global:
		 timer_create;
};

GLIBC_2.15 {
	global:
		 posix_spawn;
		 posix_spawnp;
};

GLIBC_2.17 {
    global:
        posix_spawn;
        posix_spawnp;
        pthread_mutex_lock;
        pthread_mutex_unlock;
        pthread_join;			
        sem_wait;		
        pthread_create;
        dlopen;
        popen;
        timer_create;
        pthread_cond_wait;		
        pthread_cond_timedwait;
        fopen;
        fclose;
        fdopen;
        fgetpos;
        fsetpos;
};

