From owner-svn-soc-all@FreeBSD.ORG Fri Jun 10 20:54:46 2011 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from socsvn.FreeBSD.org (unknown [IPv6:2001:4f8:fff6::2f]) by hub.freebsd.org (Postfix) with SMTP id 5A3EF1065673 for ; Fri, 10 Jun 2011 20:54:44 +0000 (UTC) (envelope-from gk@FreeBSD.org) Received: by socsvn.FreeBSD.org (sSMTP sendmail emulation); Fri, 10 Jun 2011 20:54:44 +0000 Date: Fri, 10 Jun 2011 20:54:44 +0000 From: gk@FreeBSD.org To: svn-soc-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Message-Id: <20110610205444.5A3EF1065673@hub.freebsd.org> Cc: Subject: socsvn commit: r223083 - soc2011/gk/ino64-head/tools/tools/shlib-compat X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2011 20:54:46 -0000 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' ]: