⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elistgen.sun

📁 远程桌面连接工具
💻 SUN
字号:
XCOMM!/bin/sh -fXCOMM $XConsortium: exportlistgen.sun /main/3 1996/10/11 13:54:11 swick $XCOMMXCOMM ########################################################################XCOMM Construct shared-library scoping mapfile for Solaris based on standardizedXCOMM export list description fileXCOMMXCOMM Usage: exportlistgen libfoo.so libfoo.elist > mapfile.scopeXCOMMXCOMM	libfoo.so    => shared library of interestXCOMM	libfoo.elist => Meta description of necessary export list.XCOMMXCOMM    The output file, "mapfile.scope" may then be passed to the Solaris XCOMM    linker to reconstruct the shared library, libfoo.so.XCOMMXCOMM ########################################################################XCOMM Utility programsFILTER=CXXFILT			# C++ symbol demanglerAWK=awk				# AwkXCOMM For nm, cat, pr, expand, awk, c++filtPATH=/usr/bin:/bin:/usr/ccs/bin:/usr/ucb:/opt/SUNWspro/binXCOMM Try to detect broken versions of c++filt.if [ `echo _okay | ${FILTER:-cat}` != "_okay" ]; then    if [ -x /opt/SUNWspro/bin/c++filt ]; then	echo "# Your $FILTER is broken -- using /opt/SUNWspro/bin/c++filt."	FILTER=/opt/SUNWspro/bin/c++filt    else	echo "# ERROR: no working $FILTER available."	exit 1    fi;fi;XCOMM Temporary filesEXPORTLIST=/tmp/elistgen1.$$	# export directives from "libfoo.list"NMLIST=/tmp/elistgen2.$$	# name list from libfoo.slFILTLIST=/tmp/elistgen3.$$	# demangled (C++) version of aboveXCOMM Print useful information at the top of the outputecho "#" `date`echo "# This scoping mapfile was produced by" $0echo "# Export list description taken from:" $2echo "# Target library:" $1echo "# Target Operating System:" `uname -msrv`echo "# "XCOMM Extract the globally visible symbols from target libraryXCOMM The NMLIST generated here is later used to cross-check the symbols in thenm -p $1 | $AWK '/ [ TDBS] /{print $3}' > $NMLISTXCOMM Extract the globally visible symbols from target libraryXCOMM The NMLIST generated here is later used to cross-check the symbols in the${FILTER:-cat} $NMLIST > $FILTLISTXCOMM Clean up the export-list description file.  Sort the directives.$AWK '    BEGIN {	csyms     = 0;	# C   public symbols in libfoo.list	cplusplus = 0;	# C++ public symbols in libfoo.list	isyms     = 0;	# C   internal symbols in libfoo.list	iplusplus = 0;	# C++ internal symbols in libfoo.list	implicit  = "";	# Handling of implicit symbols    }    $1 == "default" {	# A default clause suppresses warnings about implicit symbols.	if ($2 != "" && $2 != "force" && $2 != "public" && $2 != "private" && $2 != "internal") {	    print "# Warning: illegal default clause:", $2 | "cat 1>&2";	    next;	}	if (implicit != "")	    print "# Warning: multiple default clauses." | "cat 1>&2";	implicit = $2;	next;    }    $1 == "force" {	csyms ++;	print $1 ";;" $2;	next;    }    $1 == "public" {	csyms ++;	print $1 ";;" $2;	next;    }    $1 == "publicC++" {	cplusplus ++;	string = $2;	for (n = 3; n <= NF; n++)	    string = string " " $n;	print $1 ";;" string;	next;    }    $1 == "private" {	csyms ++;	print $1 ";;" $2;	next;    }    $1 == "privateC++" {	cplusplus ++;	string = $2;	for (n = 3; n <= NF; n++)	    string = string " " $n;	print $1 ";;" string;	next;    }    $1 == "internal" {	isyms ++;	print $1 ";;" $2;	next;    }    $1 == "internalC++" {	iplusplus ++;	string = $2;	for (n = 3; n <= NF; n++)	    string = string " " $n;	print $1 ";;" string;	next;    }    $1 == "#line" || $1 == "#" {	# cpp will have removed comments, but may have added other stuff.	next;    }    NF > 0 {	print "# Warning: unrecognized directive:", $0 | "cat 1>&2";	next;    }    END {	printf("# Exporting %d C and %d C++ symbols, hiding %d and %d.\n", csyms, cplusplus, isyms, iplusplus) | "cat 1>&2";	if (implicit != "") {	    print "# Unspecified symbols are " implicit "." | "cat 1>&2";	    print "default;;" implicit;	}    }' $2 1>$EXPORTLISTXCOMM Read in the above files and write result to stdout.  The contentsXCOMM of NMLIST and FILTLIST are used to construct a symbol lookup table.XCOMM The contents of EXPORTLIST are converted with the help of this table.XCOMM Use ";" as a delimiter in the symbol lookup table.(pr -m -s";" -t -w1024 $NMLIST $FILTLIST | expand -1; cat $EXPORTLIST) | $AWK '    BEGIN {	FS = ";";	implicit = 0;    }    NF == 2 {	# This is "pr" output, i.e., symbol translation table	syms[$2] = $1;	next;    }    NF == 3 && $1 == "default" {	# Treatment of unspecified symbols.	if ($3 == "internal" || $3 == "internalC++")	    implicit = 1;	else if ($3 == "private" || $3 == "privateC++")	    implicit = 2;	else if ($3 == "public" || $3 == "publicC++")	    implicit = 3;	else # $3 == "force"	    implicit = 4;	next;    }    NF == 3 {	# An export directive.  Parse our instructions for this symbol.	if ($1 == "internal" || $1 == "internalC++")	    export = 1;	else if ($3 == "private" || $3 == "privateC++")	    export = 2;	else if ($3 == "public" || $3 == "publicC++")	    export = 3;	else # $3 == "force"	    export = 4;	if (length(syms[$3]) > 0) {	    if (donelist[$3])		print "# Warning: Duplicate entry for", $3, "in export list" | "cat 1>&2";	    if (donelist[$3] < export)		donelist[$3] = export;	} else { 	    if (export == 4)		donelist[$3] = export;	    else		print "# Warning:", $3, "was not in the nm list for this library" | "cat 1>&2";	}	next;    }    END { 	# Ignore magic linker symbols.	if (implicit == 0) {	    if (!donelist["_DYNAMIC"])		donelist["_DYNAMIC"] = 1;	    if (!donelist["_GLOBAL_OFFSET_TABLE_"])		donelist["_GLOBAL_OFFSET_TABLE_"] = 1;	    if (!donelist["_PROCEDURE_LINKAGE_TABLE_"])		donelist["_PROCEDURE_LINKAGE_TABLE_"] = 1;	    if (!donelist["_edata"])		donelist["_edata"] = 1;	    if (!donelist["_end"])		donelist["_end"] = 1;	    if (!donelist["_etext"])		donelist["_etext"] = 1;        }	# Process implicit symbols.	for (i in syms) {	    if (donelist[i] == 0 && length(syms[i]) > 0) {		if (implicit == 0) {		    # Ignore magic symbols introduced by the C++ compiler.		    if ((syms[i] !~ /^__vtbl__[0-9]*_/) && (syms[i] !~ /^__ptbl_vec__/))			print "# Warning:", syms[i], "was not in the export list" | "cat 1>&2";		} else {		    donelist[i] = implicit;		}	    }	}	# Generate the linker file.	print "";	print "SUNW.1.1 {";	print "    global:";	for (i in syms)	    if (donelist[i] >= 2 && length(syms[i]) > 0)		print "        " syms[i] ";";	print "    local:";	print "        *;";	print "};";	print "";	print "SUNW_private.1.1 {";	print "    global:";	for (i in syms)	    if (donelist[i] == 1 && length(syms[i]) > 0)		print "        " syms[i] ";";	print "} SUNW.1.1;"    }'XCOMM Clean up temporary filesrm $EXPORTLISTrm $NMLISTrm $FILTLIST

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -