#
# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code 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
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#  

# Define public interface.

SUNWprivate_1.1 {
        global:

		# native methods of LinuxDebuggerLocal class
		Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_init0;
		Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_getAddressSize;
		Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_attach0__I;
		Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_attach0__Ljava_lang_String_2Ljava_lang_String_2;
		Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_detach0;
		Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_lookupByName0;
		Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_lookupByAddress0;
		Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_readBytesFromProcess0;
		Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_getThreadIntegerRegisterSet0;
	
                # Disassembler interface
                Java_sun_jvm_hotspot_asm_Disassembler_decode;
                Java_sun_jvm_hotspot_asm_Disassembler_load_1library;

		# proc_service.h functions - to be used by libthread_db
		ps_getpid;
		ps_pglobal_lookup;
		ps_pdread;
		ps_pdwrite;
		ps_lsetfpregs;
		ps_lsetregs;
		ps_lgetfpregs;
		ps_lgetregs;
		ps_get_thread_area;

                # used by attach test program
                init_libproc;
                Pgrab;
                Pgrab_core;
                Prelease;
	
	local:
		*;
};
