X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=gcc%2Fmkmap-flat.awk;fp=gcc%2Fmkmap-flat.awk;h=4afa69f4653d3f5435aa4b6b1dd043b7065fe337;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=4ff5bf5f05dee37f73eba7fd81e3b0777e8fb1be;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/gcc/mkmap-flat.awk b/gcc/mkmap-flat.awk index 4ff5bf5f..4afa69f4 100644 --- a/gcc/mkmap-flat.awk +++ b/gcc/mkmap-flat.awk @@ -1,11 +1,12 @@ # Generate a flat list of symbols to export. +# Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. # Contributed by Richard Henderson # # This file is part of GCC. # # GCC is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2, or (at your option) any later +# Software Foundation; either version 3, or (at your option) any later # version. # # GCC is distributed in the hope that it will be useful, but WITHOUT @@ -14,12 +15,21 @@ # License for more details. # # 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. +# along with GCC; see the file COPYING3. If not see +# . + +# Options: +# "-v leading_underscore=1" : Symbols in map need leading underscore. +# "-v pe_dll=1" : Create .DEF file for Windows PECOFF +# DLL link instead of map file. BEGIN { state = "nm"; + excluding = 0; + if (leading_underscore) + prefix = "_"; + else + prefix = ""; } # Remove comment and blank lines. @@ -51,28 +61,43 @@ state == "nm" { # Now we process a simplified variant of the Solaris symbol version # script. We have one symbol per line, no semicolons, simple markers # for beginning and ending each section, and %inherit markers for -# describing version inheritence. A symbol may appear in more than +# describing version inheritance. 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" { next; } NF == 2 && $2 == "{" { + if ($1 == "%exclude") + excluding = 1; next; } $1 == "}" { + excluding = 0; next; } { - export[$1] = 1; + sym = prefix $1; + if (excluding) + delete export[sym]; + else + export[sym] = 1; next; } END { + + if (pe_dll) { + print "LIBRARY " pe_dll; + print "EXPORTS"; + } + for (sym in export) - if (def[sym]) + if (def[sym] || (pe_dll && def["_" sym])) print sym; }