socsvn commit: r225420 -
soc2011/gk/ino64-head/tools/tools/shlib-compat
gk at FreeBSD.org
gk at FreeBSD.org
Wed Aug 24 17:42:12 UTC 2011
Author: gk
Date: Wed Aug 24 17:42:09 2011
New Revision: 225420
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=225420
Log:
shlib-compat: Update
Modified:
soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat
soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat-dirs
Modified: soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat
==============================================================================
--- soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat Wed Aug 24 14:53:49 2011 (r225419)
+++ soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat Wed Aug 24 17:42:09 2011 (r225420)
@@ -44,6 +44,9 @@
# debug
cmpcache_enabled = True
dwarfcache_enabled = True
+ w_alias = True
+ w_cached = False
+ w_symbol = True
class FileConfig(object):
filename = None
@@ -63,6 +66,10 @@
class App(object):
result_code = 0
+def warn(cond, msg):
+ if cond:
+ print >> sys.stderr, "WARN: " + msg
+
# {{{ misc
class StrFilter(object):
@@ -125,8 +132,8 @@
if self.items.has_key(id) and obj is not self.items[id]:
#raise ValueError("Item is already cached: %d (%s, %s)" %
# (id, self.items[id], obj))
- print >> sys.stderr, "WARN: Item is already cached: %d (%s, %s)" % \
- (id, self.items[id], obj)
+ warn(Config.w_cached, "Item is already cached: %d (%s, %s)" % \
+ (id, self.items[id], obj))
self.items[id] = obj
def replace(self, id, obj):
@@ -325,8 +332,9 @@
return "%s*" % (t,)
class BaseTypeDef(Def):
+ inttypes = ['DW_ATE_signed', 'DW_ATE_unsigned', 'DW_ATE_unsigned_char']
def _pp(self, pp):
- if self.encoding in ['DW_ATE_signed', 'DW_ATE_unsigned', 'DW_ATE_unsigned_char' ]:
+ if self.encoding in self.inttypes:
sign = '' if self.encoding == 'DW_ATE_signed' else 'u'
bits = int(self.byte_size) * 8
return '%sint%s_t' % (sign, bits)
@@ -449,7 +457,11 @@
class MemberDef(Def):
def _pp(self, pp):
t = pp.run(self.type)
- return "%s %s;" % (t, self._name_opt())
+ if self.bit_size:
+ bits = ":%s" % self.bit_size
+ else:
+ bits = ""
+ return "%s %s%s;" % (t, self._name_opt(), bits)
class Dwarf(object):
@@ -465,6 +477,8 @@
return type
def build_subprogram(self, raw):
+ if raw.optname == None:
+ raw.setname('SUBPROGRAM_NONAME_' + raw.arg('low_pc'));
params = [ self.build(x) for x in raw.nested ]
result = self._build_optarg_type(raw)
return FunctionDef(raw.id, raw.name, params=params, result=result)
@@ -475,7 +489,7 @@
return FunctionTypeDef(raw.id, raw.optname, params=params, result=result)
def build_formal_parameter(self, raw):
- type = self.buildref(raw.unit, raw.arg('type'))
+ type = self._build_optarg_type(raw)
return ParameterDef(raw.id, raw.optname, type=type)
def build_pointer_type(self, raw):
@@ -484,7 +498,8 @@
def build_member(self, raw):
type = self.buildref(raw.unit, raw.arg('type'))
- return MemberDef(raw.id, raw.name, type=type)
+ return MemberDef(raw.id, raw.name, type=type,
+ bit_size=raw.optarg('bit_size', None))
def build_structure_type(self, raw):
incomplete = raw.unit.incomplete.get(raw.id)
@@ -519,7 +534,7 @@
return obj
def build_typedef(self, raw):
- type = self.buildref(raw.unit, raw.arg('type'))
+ type = self._build_optarg_type(raw)
return TypeAliasDef(raw.id, raw.name, type=type)
def build_const_type(self, raw):
@@ -527,7 +542,7 @@
return ConstTypeDef(raw.id, type=type)
def build_volatile_type(self, raw):
- type = self.buildref(raw.unit, raw.arg('type'))
+ type = self._build_optarg_type(raw)
return VolatileTypeDef(raw.id, type=type)
def build_enumeration_type(self, raw):
@@ -547,7 +562,7 @@
def build_subrange_type(self, raw):
type = self.buildref(raw.unit, raw.arg('type'))
return ArraySubrangeDef(raw.id, type=type,
- upper_bound=raw.arg('upper_bound'))
+ upper_bound=raw.optarg('upper_bound', 0))
def build_unspecified_parameters(self, raw):
return VarArgs(raw.id)
@@ -614,10 +629,10 @@
prevalias = self.alias_syms[alias.name]
if alias.name != prevalias.name or \
alias.offset != prevalias.offset:
- print >> sys.stderr, "WARN: Symbol alias is " \
+ warn(Config.w_alias, "Symbol alias is " \
"already defined: %s: %s at %08x -- %s at %08x" % \
(alias.alias, alias.name, alias.offset,
- prevalias.name, prevalias.offset)
+ prevalias.name, prevalias.offset))
self.alias_syms[alias.name] = alias
def parse_dwarfdump(self):
@@ -645,14 +660,17 @@
for sym in ver.symbols.values():
raw = lookup(sym);
if not raw:
- print >> sys.stderr, "WARN: Symbol %s (%s) not found at offset 0x%x" % \
- (sym.name_ver, self.libfile, sym.offset)
+ warn(Config.w_symbol, "Symbol %s (%s) not found at offset 0x%x" % \
+ (sym.name_ver, self.libfile, sym.offset))
continue
if Config.verbose >= 3:
print "Parsing symbol %s (%s)" % (sym.name_ver, self.libfile)
sym.definition = dwarf.build(raw)
def parse(self):
+ if not os.path.isfile(self.libfile):
+ print >> sys.stderr, ("No such file: %s" % self.libfile)
+ sys.exit(1)
self.parse_objdump()
self.parse_dwarfdump()
@@ -672,6 +690,10 @@
line = line.strip()
if (line):
self.parser(line)
+ err = fd.close()
+ if err:
+ print >> sys.stderr, ("Execution failed: %s" % self.proc)
+ sys.exit(2)
def parse_begin(self, line):
print(line)
@@ -772,6 +794,9 @@
def optname(self):
return self.optarg('name', None)
+ def setname(self, name):
+ self.args['DW_AT_name'] = name
+
def arg(self, a):
name = 'DW_AT_' + a
try:
@@ -979,8 +1004,8 @@
sym = ver.symbols[symname]
if not sym.origsym.definition or not sym.newsym.definition:
# XXX
- print >> sys.stderr, 'WARN: Missing symbol definition: %s@%s' % \
- (symname, ver.name)
+ warn(Config.w_symbol, 'Missing symbol definition: %s@%s' % \
+ (symname, ver.name))
continue
d_orig.run(sym.origsym)
d_new.run(sym.newsym)
@@ -1007,6 +1032,11 @@
parser.add_option('--include-ver', action='append', metavar="RE")
parser.add_option('--exclude-sym', action='append', metavar="RE")
parser.add_option('--include-sym', action='append', metavar="RE")
+ for opt in ['alias', 'cached', 'symbol']:
+ parser.add_option("--w-" + opt,
+ action="store_true", dest="w_" + opt)
+ parser.add_option("--w-no-" + opt,
+ action="store_false", dest="w_" + opt)
(opts, args) = parser.parse_args()
if len(args) != 2:
@@ -1036,6 +1066,11 @@
getattr(v, a).extend(opt)
Config.version_filter.compile()
Config.symbol_filter.compile()
+ for w in ['w_alias', 'w_cached', 'w_symbol']:
+ if hasattr(opts, w):
+ v = getattr(opts, w)
+ if v != None:
+ setattr(Config, w, v)
(Config.origfile.filename, Config.newfile.filename) = (args[0], args[1])
Modified: soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat-dirs
==============================================================================
--- soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat-dirs Wed Aug 24 14:53:49 2011 (r225419)
+++ soc2011/gk/ino64-head/tools/tools/shlib-compat/shlib-compat-dirs Wed Aug 24 17:42:09 2011 (r225420)
@@ -2,7 +2,7 @@
SHLIB_COMPAT=$(dirname $0)/shlib-compat
-if [ $# -ne 3 ]; then
+if [ $# -lt 3 ]; then
echo "Usage: $0 orig-dir new-dir output-dir"
exit 1
fi
@@ -10,6 +10,7 @@
orig=$1
new=$2
out=$3
+shift 3
remove_empty() {
local i
@@ -34,7 +35,7 @@
for i in $list; do
echo $i
test_file $orig/$i $new/$i || continue
- $SHLIB_COMPAT --out-orig $out/$i.orig.c --out-new $out/$i.new.c -v \
+ $SHLIB_COMPAT --out-orig $out/$i.orig.c --out-new $out/$i.new.c -v "$@" \
$orig/$i $new/$i > $out/$i.cmp 2> $out/$i.err || true
remove_empty $out/$i.orig.c $out/$i.new.c $out/$i.cmp $out/$i.err
if [ -f $out/$i.orig.c -a -f $out/$i.new.c ]; then
More information about the svn-soc-all
mailing list