X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fmkmap-symver.awk;h=744d9c8a71f9185ca312e020f62556cbece2ae10;hb=d9f9327b8c6432820044bc19bc99e02e9afec1da;hp=c6e3533f531b69db4a2c5ee2f9986fd1c2ccce05;hpb=f12b58b3384f7b4faba39eaa3ebc67c3049f2a3c;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/mkmap-symver.awk b/gcc/mkmap-symver.awk index c6e3533f531..744d9c8a71f 100644 --- a/gcc/mkmap-symver.awk +++ b/gcc/mkmap-symver.awk @@ -15,11 +15,16 @@ # # You should have received a copy of the GNU General Public License # along with GCC; see the file COPYING. If not, write to the Free -# Software Foundation, 59 Temple Place - Suite 330, Boston MA -# 02111-1307, USA. +# Software Foundation, 51 Franklin Street, Fifth Floor, Boston MA +# 02110-1301, USA. BEGIN { state = "nm"; + sawsymbol = 0; + if (leading_underscore) + prefix = "_"; + else + prefix = ""; } # Remove comment and blank lines. @@ -42,6 +47,7 @@ state == "nm" && ($1 == "U" || $2 == "U") { state == "nm" && NF == 3 { def[$3] = 1; + sawsymbol = 1; next; } @@ -54,6 +60,8 @@ state == "nm" { # for beginning and ending each section, and %inherit markers for # describing version inheritence. A symbol may appear in more than # one symbol version, and the last seen takes effect. +# The magic version name '%exclude' causes all the symbols given that +# version to be dropped from the output (unless a later version overrides). NF == 3 && $1 == "%inherit" { inherit[$2] = $3; @@ -61,7 +69,8 @@ NF == 3 && $1 == "%inherit" { } NF == 2 && $2 == "{" { - libs[$1] = 1; + if ($1 != "%exclude") + libs[$1] = 1; thislib = $1; next; } @@ -72,11 +81,20 @@ $1 == "}" { } { - ver[$1] = thislib; + sym = prefix $1; + if (thislib != "%exclude") + ver[sym] = thislib; + else + delete ver[sym]; next; } END { + if (!sawsymbol) + { + print "No symbols seen -- broken or mis-installed nm?" | "cat 1>&2"; + exit 1; + } for (l in libs) output(l); } @@ -88,13 +106,26 @@ function output(lib) { if (inherit[lib]) output(inherit[lib]); - printf("%s {\n", lib); - printf(" global:\n"); + empty=1 for (sym in ver) if ((ver[sym] == lib) && (sym in def)) - printf("\t%s;\n", sym); - - if (inherit[lib]) + { + if (empty) + { + printf("%s {\n", lib); + printf(" global:\n"); + empty = 0; + } + printf("\t%s;\n", sym); + } + + if (empty) + { + for (l in libs) + if (inherit[l] == lib) + inherit[l] = inherit[lib]; + } + else if (inherit[lib]) printf("} %s;\n", inherit[lib]); else printf ("\n local:\n\t*;\n};\n");