#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#

#
# Copyright (c) 1992, 2010, Oracle and/or its affiliates. All rights reserved.
#
# Generic interface definition for usr/src/cmd/sgs/rtld.
#

#
# MAPFILE HEADER START
#
# WARNING:  STOP NOW.  DO NOT MODIFY THIS FILE.
# Object versioning must comply with the rules detailed in
#
#	usr/src/lib/README.mapfiles
#
# You should not be making modifications here until you've read the most current
# copy of that file. If you need help, contact a gatekeeper for guidance.
#
# MAPFILE HEADER END
#

$mapfile_version 2

#
# All symbols in ld.so.1 are private as no-one should bind to these directly.
#
SYMBOL_VERSION SUNWprivate_1.3 {
    protected:
	dladdr;	# Standard dlopen(3x) family
	dladdr1;
	dldump;
	dlclose;
	dlerror;
	dlinfo;
	dlopen;
	dlmopen;
	dlsym;

	_dladdr;	# these should not exist
	_dladdr1;
	_dldump;
	_dlclose;
	_dlerror;
	_dlinfo;
	_dlopen;
	_dlmopen;
	_dlsym;

	_ld_libc;	# provides libc initialization

	_elf_rtbndr;	# dbx expects to find these
	elf_rtbndr;
	_rt_boot;	# Provides basic adb symbol offsets

	rtld_db_dlactivity;	# Required to support librtld_db
	rtld_db_preinit;
	rtld_db_postinit;
	r_debug		{
			  ASSERT = {
				  TYPE = OBJECT;
$if _x86 && _ELF32
				  SIZE = 44;
$elif _x86 && _ELF64
				  SIZE = 80;
$elif _sparc && _ELF32
				  SIZE = 44;
$elif _sparc && _ELF64
				  SIZE = 80;
$else
$error Unknown platform
$endif
				};
			};

	elf_plt_write;
	is_so_loaded;
	lml_main	{
			  ASSERT = {
				  TYPE = OBJECT;
$if _ELF32
				  SIZE = addrsize[41];
$elif _ELF64
				  SIZE = addrsize[38];
$else
$error Unknown platform
$endif
				};
			};
	lookup_sym;

	alist_append;	# librtld support
	ld_entry_cnt	{ ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; };
	# Diagnostic support
	dbg_desc	{ ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; };
	dbg_print;
	eprintf;	# Error message printing
	veprintf;

	dgettext;	# Messaging support
	strerror;

	calloc;	# Memory management (mapmalloc).
	free;
	malloc;
	realloc;

	# PLT tracing getenv() support.
	_environ	{ ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; };
	environ		{
			  ASSERT = {
				  BINDING = WEAK;
				  ALIAS = _environ;
				};
			};

	memcpy;	# Some routines are useful for support
	snprintf;	# libraries such as liblddbg.
	sprintf;	# Note that some of these functions
	strcat;	# (like sprintf) may have reduced
	strcmp;	# functionality over libc, as a simpler
	strcpy;	# implementation is provided in ld.so.1.
	strlen;
	strrchr;
	strtok_r;
	___errno;
	qsort;
	dl_iterate_phdr;

$if _x86 && _ELF64
	# amd64 ABI exception unwinding
	_dlamd64getunwind;
	dlamd64getunwind;
$endif

	# doXX_reloc_rtld and relocXX_table are required to
	# support librtld.so.
$if _ELF32
	do32_reloc_rtld;
	reloc32_table	{
			  ASSERT = {
				  TYPE = OBJECT;
$if _x86
				  SIZE = addrsize[132];
$elif _sparc
				  SIZE = addrsize[264];
$else
$error Unknown architecture
$endif
				};
			};
$elif _ELF64
	do64_reloc_rtld;
	reloc64_table	{
			  ASSERT = {
				  TYPE = OBJECT;
$if _x86
				  SIZE = addrsize[86];
$elif _sparc
				  SIZE = addrsize[176];
$else
$error Unknown architecture
$endif
				};
			};
$else
$error unknown ELFCLASS
$endif
    local:
	*;
};
