X-Git-Url: https://git.sesse.net/?p=rdpsrv;a=blobdiff_plain;f=Xserver%2Fconfig%2Futil%2Felistgen.hp;fp=Xserver%2Fconfig%2Futil%2Felistgen.hp;h=0000000000000000000000000000000000000000;hp=60a4b526d44645f952e448f0ba332fdff8763ade;hb=ce66b81460e5353db09d45c02339d4583fbda255;hpb=7772d71ffd742cfc9b7ff214659d16c5bb56a391 diff --git a/Xserver/config/util/elistgen.hp b/Xserver/config/util/elistgen.hp deleted file mode 100644 index 60a4b52..0000000 --- a/Xserver/config/util/elistgen.hp +++ /dev/null @@ -1,202 +0,0 @@ -XCOMM!/bin/sh -XCOMM $XConsortium: elistgen.hp /main/2 1996/12/04 10:13:14 swick $ -XCOMM -XCOMM ######################################################################### -XCOMM Construct shared-library export lists for HP-UX based on standardized -XCOMM export list description file -XCOMM -XCOMM Usage: exportlistgen libfoo.sl libfoo.elist > libfoo.lopt -XCOMM -XCOMM libfoo.sl => shared library of interest -XCOMM libfoo.elist => Meta description of necessary export list. -XCOMM -XCOMM The output may then be passed to the linker to reconstruct the -XCOMM shared library. For unknown reasons naming only exported symbols -XCOMM with "+e" does not work for debuggable C++ code, even though "nm" -XCOMM reports no difference between the resulting libraries. The linker -XCOMM complains that "first non-inline virtual function" is not defined for -XCOMM vtables. We instead hide internal symbols with "-h" as a work-around. -XCOMM -XCOMM Author: Aloke Gupta 5/25/94. -XCOMM (c) Copyright 1996 Digital Equipment Corporation. -XCOMM (c) Copyright 1994,1996 Hewlett-Packard Company. -XCOMM (c) Copyright 1996 International Business Machines Corp. -XCOMM (c) Copyright 1996 Sun Microsystems, Inc. -XCOMM (c) Copyright 1996 Novell, Inc. -XCOMM (c) Copyright 1996 FUJITSU LIMITED. -XCOMM (c) Copyright 1996 Hitachi. -XCOMM -XCOMM ######################################################################### - -XCOMM Utility programs -FILTER=CXXFILT # C++ symbol demangler -AWK=awk # awk -PATH=/usr/bin:/bin:/usr/ucb # For nm, cat, pr, expand, awk, c++filt - -XCOMM Temporary files -EXPORTLIST=/tmp/elistgen1.$$ # list of export symbols from "libfoo.elist" -NMLIST=/tmp/elistgen2.$$ # name list from libfoo.sl -FILTLIST=/tmp/elistgen3.$$ # demangled (C++) version of NMLIST - -XCOMM Print useful information at the top of the output -echo "#" `date` -echo "# This linker options list was produced by" $0 -echo "# Input export list description taken from:" $2 -echo "# Target library:" $1 -echo "# Target Operating System:" `uname -msrv` -echo "# " - -XCOMM Extract the globally visible symbols from target library -XCOMM The NMLIST generated here is later used to cross-check the symbols in the -XCOMM supplied export-list. -XCOMM -nm -p $1 | $AWK ' - / [cCTDB][S ] [^\$]/{print $3} # Text, Data, BSS, or Secondary symbols -' > $NMLIST - -XCOMM Demangle the global library symbols. This operation is necessary to -XCOMM convert mangled C++ symbols into their C++ notation. -${FILTER:-cat} $NMLIST > $FILTLIST - -XCOMM -XCOMM Cleanup the export-list description file. -XCOMM Note that C++ symbols may have embedded spaces in them. -XCOMM -cat $2 | $AWK ' - BEGIN { - csyms = 0; # C language symbols in libfoo.list - cplusplus = 0; # C++ language symbols in libfoo.list - isyms = 0; # C internal symbols in libfoo.elist - icplusplus = 0; # C++ internal symbols in libfoo.elist - 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" || $1 == "public" || $1 == "private" { - csyms ++; - print $1 ";;" $2; - next; - } - $1 == "publicC++" || $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++" { - icplusplus ++; - string = $2; - for (n = 3; n <= NF; n++) - string = string " " $n; - print $1 ";;" string; - next; - } - END { - printf("# Exporting %d C and %d C++ symbols, hiding %d and %d.\n", - csyms, cplusplus, isyms, icplusplus) | "cat 1>&2"; - if (implicit != "") { - print "# Unspecified symbols are " implicit "." | "cat 1>&2"; - print "default;;" implicit; - } - } -' > $EXPORTLIST - -XCOMM Read in the above files and write result to stdout. The contents -XCOMM 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. -XCOMM -(pr -m -s";" -t -w1024 $NMLIST $FILTLIST| expand -t 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 { - # Parse our instructions for this symbol. - if ($1 == "internal" || $1 == "internalC++") - export = 1; - else if ($1 == "private" || $1 == "privateC++") - export = 2; - else if ($1 == "public" || $1 == "publicC++") - export = 3; - else # $1 == "force" - export = 4; - - # Process it. - 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 { - # Force implicit exporting of errno. - if (! donelist["errno"]) - donelist["errno"] = 4; - - # Complain about some implicit symbols. - for (i in syms) { - if (!donelist[i] && (length(syms[i]) > 0)) { - # Ignore automatic symbols generated by the C++ compiler. - if (implicit == 0 && - (syms[i] !~ /^__noperfopt__/) && - (syms[i] !~ /^__ptbl_vec__/) && - (syms[i] !~ /^__vtbl__[0-9]*_/) && - (syms[i] !~ /^__cfront_version_[0-9]*_xxxxxxxx$/)) - print "# Warning:", syms[i], - "was not in the export list" | "cat 1>&2"; - donelist[i] = implicit; - } - if ((donelist[i] > 1) && (length(syms[i]) > 0)) - print "-e", syms[i]; - } - } -' - -XCOMM Clean up temporary files -rm $EXPORTLIST -rm $NMLIST -rm $FILTLIST