socsvn commit: r223083 - soc2011/gk/ino64-head/tools/tools/shlib-compat

gk at FreeBSD.org gk at FreeBSD.org
Fri Jun 10 20:54:46 UTC 2011


Author: gk
Date: Fri Jun 10 20:54:44 2011
New Revision: 223083
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=223083

Log:
  shlib-compat: support multiple --alias-prefix options
  
  Merge rev f7f9608225afc8c1f3f8

Modified:
  soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat

Modified: soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat
==============================================================================
--- soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat	Fri Jun 10 19:16:50 2011	(r223082)
+++ soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat	Fri Jun 10 20:54:44 2011	(r223083)
@@ -37,7 +37,7 @@
     no_dump = False
     version_filter = None
     symbol_filter = None
-    alias_prefix = None
+    alias_prefixes = []
     # misc opts
     objdump = 'objdump'
     dwarfdump = 'dwarfdump'
@@ -193,10 +193,10 @@
         return "CommonSymbol(%s, %s)" % (self.name, self.version)
 
 class SymbolAlias(object):
-    def __init__(self, alias, offset):
-        assert alias.startswith(Config.alias_prefix)
+    def __init__(self, alias, prefix, offset):
+        assert alias.startswith(prefix)
         self.alias = alias
-        self.name = alias[len(Config.alias_prefix):]
+        self.name = alias[len(prefix):]
         self.offset = offset
 
     def __repr__(self):
@@ -603,11 +603,13 @@
             if not self.versions.has_key(vername):
                 self.versions[vername] = VersionMap(vername)
             self.versions[vername].append(sym)
-        if Config.alias_prefix:
+        if Config.alias_prefixes:
             self.local_offsetmap = objdump.local_offsetmap
             for p in objdump.local_symbols:
-                if p['symbol'].startswith(Config.alias_prefix):
-                    alias = SymbolAlias(p['symbol'], p['offset'])
+                for prefix in Config.alias_prefixes:
+                    if not p['symbol'].startswith(prefix):
+                        continue
+                    alias = SymbolAlias(p['symbol'], prefix, p['offset'])
                     if self.alias_syms.has_key(alias.name):
                         print >> sys.stderr, "WARN: Symbol alias is already defined: %s/%s" % \
                                 (self.name, self.alias)
@@ -986,7 +988,7 @@
             version="%prog " + Config.version)
     parser.add_option('-v', '--verbose', action='count',
             help="verbose mode, may be specified several times")
-    parser.add_option('--alias-prefix', action='store',
+    parser.add_option('--alias-prefix', action='append',
             help="name prefix to try for symbol alias lookup", metavar="STR")
     parser.add_option('--dump', action='store_true',
             help="dump symbol definitions")
@@ -1019,7 +1021,8 @@
     if opts.verbose:
         Config.verbose = opts.verbose
     if opts.alias_prefix:
-        Config.alias_prefix = opts.alias_prefix
+        Config.alias_prefixes = opts.alias_prefix
+        Config.alias_prefixes.sort(key=lambda x: -len(x))
     for (k, v) in ({ '_sym': Config.symbol_filter,
             '_ver': Config.version_filter }).items():
         for a in [ 'exclude', 'include' ]:


More information about the svn-soc-all mailing list