17db96d56Sopenharmony_ci#!/bin/sh 27db96d56Sopenharmony_ci# 37db96d56Sopenharmony_ci# =========================================================================== 47db96d56Sopenharmony_ci# FILE: makexp_aix 57db96d56Sopenharmony_ci# TYPE: standalone executable 67db96d56Sopenharmony_ci# SYSTEM: AIX 77db96d56Sopenharmony_ci# 87db96d56Sopenharmony_ci# DESCRIPTION: This script creates an export list of ALL global symbols 97db96d56Sopenharmony_ci# from a list of object or archive files. 107db96d56Sopenharmony_ci# 117db96d56Sopenharmony_ci# USAGE: makexp_aix <OutputFile> "<FirstLine>" <InputFile> ... 127db96d56Sopenharmony_ci# 137db96d56Sopenharmony_ci# where: 147db96d56Sopenharmony_ci# <OutputFile> is the target export list filename. 157db96d56Sopenharmony_ci# <FirstLine> is the path/file string to be appended 167db96d56Sopenharmony_ci# after the "#!" symbols in the first line of the 177db96d56Sopenharmony_ci# export file. Passing "" means deferred resolution. 187db96d56Sopenharmony_ci# <InputFile> is an object (.o) or an archive file (.a). 197db96d56Sopenharmony_ci# 207db96d56Sopenharmony_ci# HISTORY: 217db96d56Sopenharmony_ci# 3-Apr-1998 -- remove C++ entries of the form Class::method 227db96d56Sopenharmony_ci# Vladimir Marangozov 237db96d56Sopenharmony_ci# 247db96d56Sopenharmony_ci# 1-Jul-1996 -- added header information 257db96d56Sopenharmony_ci# Vladimir Marangozov 267db96d56Sopenharmony_ci# 277db96d56Sopenharmony_ci# 28-Jun-1996 -- initial code 287db96d56Sopenharmony_ci# Vladimir Marangozov (Vladimir.Marangozov@imag.fr) 297db96d56Sopenharmony_ci# ========================================================================== 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci# Variables 327db96d56Sopenharmony_ciexpFileName=$1 337db96d56Sopenharmony_citoAppendStr=$2 347db96d56Sopenharmony_cishift; shift; 357db96d56Sopenharmony_ciinputFiles=$* 367db96d56Sopenharmony_ciautomsg="Generated automatically by makexp_aix" 377db96d56Sopenharmony_cinotemsg="NOTE: lists _all_ global symbols defined in the above file(s)." 387db96d56Sopenharmony_cicurwdir=`pwd` 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci# Create the export file and setup the header info 417db96d56Sopenharmony_ciecho "#!"$toAppendStr > $expFileName 427db96d56Sopenharmony_ciecho "*" >> $expFileName 437db96d56Sopenharmony_ciecho "* $automsg (`date -u`)" >> $expFileName 447db96d56Sopenharmony_ciecho "*" >> $expFileName 457db96d56Sopenharmony_ciecho "* Base Directory: $curwdir" >> $expFileName 467db96d56Sopenharmony_ciecho "* Input File(s) : $inputFiles" >> $expFileName 477db96d56Sopenharmony_ciecho "*" >> $expFileName 487db96d56Sopenharmony_ciecho "* $notemsg" >> $expFileName 497db96d56Sopenharmony_ciecho "*" >> $expFileName 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci# Extract the symbol list using 'nm' 527db96d56Sopenharmony_ci# Here are some hidden tricks: 537db96d56Sopenharmony_ci# - Use the -B flag to have a standard BSD representation 547db96d56Sopenharmony_ci# of the symbol list. 557db96d56Sopenharmony_ci# - Use the -x flag to have a hex representation of the symbol 567db96d56Sopenharmony_ci# values. This fills the leading whitespaces, thus simplifying 577db96d56Sopenharmony_ci# the sed statement. 587db96d56Sopenharmony_ci# - Eliminate all entries except those with either "B", "D" 597db96d56Sopenharmony_ci# or "T" key letters. We are interested only in the global 607db96d56Sopenharmony_ci# (extern) BSS, DATA and TEXT symbols. With the same statement 617db96d56Sopenharmony_ci# we eliminate object member lines relevant to AIX 4. 627db96d56Sopenharmony_ci# - Eliminate entries containing a dot. We can have a dot only 637db96d56Sopenharmony_ci# as a symbol prefix, but such symbols are undefined externs. 647db96d56Sopenharmony_ci# - Eliminate everything including the key letter, so that we're 657db96d56Sopenharmony_ci# left with just the symbol name. 667db96d56Sopenharmony_ci# - Eliminate all entries containing two colons, like Class::method 677db96d56Sopenharmony_ci# 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci/usr/ccs/bin/nm -Bex -X32_64 $inputFiles \ 707db96d56Sopenharmony_ci| sed -e '/ [^BDT] /d' -e '/\./d' -e 's/.* [BDT] //' -e '/::/d' \ 717db96d56Sopenharmony_ci| sort | uniq >> $expFileName 72