/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * 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:
	# EGL 1.4 API
	eglBindAPI;
	eglBindTexImage;
	eglChooseConfig;
	eglClientWaitSyncKHR;
	eglCopyBuffers;
	eglCreateContext;
	eglCreateImageKHR;
	eglCreatePbufferFromClientBuffer;
	eglCreatePbufferSurface;
	eglCreatePixmapSurface;
	eglCreateSyncKHR;
	eglCreateWindowSurface;
	eglDestroyContext;
	eglDestroyImageKHR;
	eglDestroySurface;
	eglDestroySyncKHR;
	eglGetConfigAttrib;
	eglGetConfigs;
	eglGetCurrentContext;
	eglGetCurrentDisplay;
	eglGetCurrentSurface;
	eglGetDisplay;
	eglGetError;
	eglGetProcAddress;
	eglGetSyncAttribKHR;
	eglInitialize;
	eglMakeCurrent;
	eglQueryAPI;
	eglQueryContext;
	eglQueryString;
	eglQuerySurface;
	eglReleaseTexImage;
	eglReleaseThread;
	eglSurfaceAttrib;
	eglSwapBuffers;
	eglSwapInterval;
	eglTerminate;
	eglWaitClient;
	eglWaitGL;
	eglWaitNative;

	# Type-strings and type-infos required by sanitizers
	_ZTS*;
	_ZTI*;

local:
	*;
};
