I know you said there was some mercurial weirdness that happened, but what's going on for x86 here? Is this a mistake and should it be addressed somehow? I don't want to pull if something will get erased/regressed/etc.
Gabe Korey Sewell wrote: > changeset 783bacbf839d in /z/repo/m5 > details: http://repo.m5sim.org/m5?cmd=changeset;node=783bacbf839d > description: > merge code > > diffstat: > > 12 files changed, 711 insertions(+), 667 deletions(-) > SConstruct | 2 > src/SConscript | 371 +++++++++++---------- > src/arch/x86/faults.cc | 10 > src/arch/x86/miscregfile.cc | 114 ++++-- > src/arch/x86/miscregfile.hh | 2 > src/arch/x86/miscregs.hh | 7 > src/arch/x86/predecoder.cc | 78 ---- > src/arch/x86/predecoder.hh | 5 > src/arch/x86/process.cc | 36 +- > src/arch/x86/tlb.cc | 749 +++++++++++++++++++++---------------------- > src/arch/x86/tlb.hh | 2 > src/sim/SConscript | 2 > > diffs (truncated from 1875 to 300 lines): > > diff -r 7e5c7412ac89 -r 783bacbf839d SConstruct > --- a/SConstruct Tue May 05 02:39:05 2009 -0400 > +++ b/SConstruct Tue May 05 02:44:21 2009 -0400 > @@ -394,7 +394,7 @@ > if main['GCC']: > main.Append(CCFLAGS='-pipe') > main.Append(CCFLAGS='-fno-strict-aliasing') > - main.Append(CCFLAGS=Split('-Wall -Wno-sign-compare -Werror -Wundef')) > + main.Append(CCFLAGS=['-Wall', '-Wno-sign-compare', '-Wundef']) > main.Append(CXXFLAGS='-Wno-deprecated') > elif main['ICC']: > pass #Fix me... add warning flags once we clean up icc warnings > diff -r 7e5c7412ac89 -r 783bacbf839d src/SConscript > --- a/src/SConscript Tue May 05 02:39:05 2009 -0400 > +++ b/src/SConscript Tue May 05 02:44:21 2009 -0400 > @@ -29,6 +29,7 @@ > # Authors: Nathan Binkert > > import array > +import bisect > import imp > import marshal > import os > @@ -50,122 +51,144 @@ > > build_env = dict([(opt, env[opt]) for opt in export_vars]) > > -def sort_list(_list): > - """return a sorted copy of '_list'""" > - if isinstance(_list, list): > - _list = _list[:] > - else: > - _list = list(_list) > - _list.sort() > - return _list > +######################################################################## > +# Code for adding source files of various types > +# > +class SourceMeta(type): > + def __init__(cls, name, bases, dict): > + super(SourceMeta, cls).__init__(name, bases, dict) > + cls.all = [] > + > + def get(cls, **kwargs): > + for src in cls.all: > + for attr,value in kwargs.iteritems(): > + if getattr(src, attr) != value: > + break > + else: > + yield src > > -class PySourceFile(object): > +class SourceFile(object): > + __metaclass__ = SourceMeta > + def __init__(self, source): > + tnode = source > + if not isinstance(source, SCons.Node.FS.File): > + tnode = File(source) > + > + self.tnode = tnode > + self.snode = tnode.srcnode() > + self.filename = str(tnode) > + self.dirname = dirname(self.filename) > + self.basename = basename(self.filename) > + index = self.basename.rfind('.') > + if index <= 0: > + # dot files aren't extensions > + self.extname = self.basename, None > + else: > + self.extname = self.basename[:index], self.basename[index+1:] > + > + for base in type(self).__mro__: > + if issubclass(base, SourceFile): > + bisect.insort_right(base.all, self) > + > + def __lt__(self, other): return self.filename < other.filename > + def __le__(self, other): return self.filename <= other.filename > + def __gt__(self, other): return self.filename > other.filename > + def __ge__(self, other): return self.filename >= other.filename > + def __eq__(self, other): return self.filename == other.filename > + def __ne__(self, other): return self.filename != other.filename > + > +class Source(SourceFile): > + '''Add a c/c++ source file to the build''' > + def __init__(self, source, Werror=True, swig=False, bin_only=False, > + skip_lib=False): > + super(Source, self).__init__(source) > + > + self.Werror = Werror > + self.swig = swig > + self.bin_only = bin_only > + self.skip_lib = bin_only or skip_lib > + > +class PySource(SourceFile): > + '''Add a python source file to the named package''' > invalid_sym_char = re.compile('[^A-z0-9_]') > - def __init__(self, package, tnode): > - snode = tnode.srcnode() > - filename = str(tnode) > - pyname = basename(filename) > - assert pyname.endswith('.py') > - name = pyname[:-3] > + modules = {} > + tnodes = {} > + symnames = {} > + > + def __init__(self, package, source): > + super(PySource, self).__init__(source) > + > + modname,ext = self.extname > + assert ext == 'py' > + > if package: > path = package.split('.') > else: > path = [] > > modpath = path[:] > - if name != '__init__': > - modpath += [name] > + if modname != '__init__': > + modpath += [ modname ] > modpath = '.'.join(modpath) > > - arcpath = path + [ pyname ] > - arcname = joinpath(*arcpath) > + arcpath = path + [ self.basename ] > + debugname = self.snode.abspath > + if not exists(debugname): > + debugname = self.tnode.abspath > > - debugname = snode.abspath > - if not exists(debugname): > - debugname = tnode.abspath > + self.package = package > + self.modname = modname > + self.modpath = modpath > + self.arcname = joinpath(*arcpath) > + self.debugname = debugname > + self.compiled = File(self.filename + 'c') > + self.assembly = File(self.filename + '.s') > + self.symname = "PyEMB_" + PySource.invalid_sym_char.sub('_', modpath) > > - self.tnode = tnode > - self.snode = snode > - self.pyname = pyname > - self.package = package > - self.modpath = modpath > - self.arcname = arcname > - self.debugname = debugname > - self.compiled = File(filename + 'c') > - self.assembly = File(filename + '.s') > - self.symname = "PyEMB_" + self.invalid_sym_char.sub('_', modpath) > - > + PySource.modules[modpath] = self > + PySource.tnodes[self.tnode] = self > + PySource.symnames[self.symname] = self > > -######################################################################## > -# Code for adding source files of various types > -# > -cc_lib_sources = [] > -def Source(source): > - '''Add a source file to the libm5 build''' > - if not isinstance(source, SCons.Node.FS.File): > - source = File(source) > - > - cc_lib_sources.append(source) > - > -cc_bin_sources = [] > -def BinSource(source): > - '''Add a source file to the m5 binary build''' > - if not isinstance(source, SCons.Node.FS.File): > - source = File(source) > - > - cc_bin_sources.append(source) > - > -py_sources = [] > -def PySource(package, source): > - '''Add a python source file to the named package''' > - if not isinstance(source, SCons.Node.FS.File): > - source = File(source) > - > - source = PySourceFile(package, source) > - py_sources.append(source) > - > -sim_objects_fixed = False > -sim_object_modfiles = set() > -def SimObject(source): > +class SimObject(PySource): > '''Add a SimObject python file as a python source object and add > it to a list of sim object modules''' > > - if sim_objects_fixed: > - raise AttributeError, "Too late to call SimObject now." > + fixed = False > + modnames = [] > > - if not isinstance(source, SCons.Node.FS.File): > - source = File(source) > + def __init__(self, source): > + super(SimObject, self).__init__('m5.objects', source) > + if self.fixed: > + raise AttributeError, "Too late to call SimObject now." > > - PySource('m5.objects', source) > - modfile = basename(str(source)) > - assert modfile.endswith('.py') > - modname = modfile[:-3] > - sim_object_modfiles.add(modname) > + bisect.insort_right(SimObject.modnames, self.modname) > > -swig_sources = [] > -def SwigSource(package, source): > +class SwigSource(SourceFile): > '''Add a swig file to build''' > - if not isinstance(source, SCons.Node.FS.File): > - source = File(source) > - val = source,package > - swig_sources.append(val) > + > + def __init__(self, package, source): > + super(SwigSource, self).__init__(source) > + > + modname,ext = self.extname > + assert ext == 'i' > + > + self.module = modname > + cc_file = joinpath(self.dirname, modname + '_wrap.cc') > + py_file = joinpath(self.dirname, modname + '.py') > + > + self.cc_source = Source(cc_file, swig=True) > + self.py_source = PySource(package, py_file) > > unit_tests = [] > def UnitTest(target, sources): > if not isinstance(sources, (list, tuple)): > sources = [ sources ] > - > - srcs = [] > - for source in sources: > - if not isinstance(source, SCons.Node.FS.File): > - source = File(source) > - srcs.append(source) > - > - unit_tests.append((target, srcs)) > + > + sources = [ Source(src, skip_lib=True) for src in sources ] > + unit_tests.append((target, sources)) > > # Children should have access > Export('Source') > -Export('BinSource') > Export('PySource') > Export('SimObject') > Export('SwigSource') > @@ -276,7 +299,8 @@ > if fullname.startswith('m5.internal'): > return None > > - if fullname in self.modules and exists(self.modules[fullname]): > + source = self.modules.get(fullname, None) > + if source is not None and exists(source.snode.abspath): > return self > > return None > @@ -295,34 +319,28 @@ > mod.__dict__['buildEnv'] = build_env > return mod > > - srcfile = self.modules[fullname] > - if basename(srcfile) == '__init__.py': > - mod.__path__ = fullname.split('.') > - mod.__file__ = srcfile > + source = self.modules[fullname] > + if source.modname == '__init__': > + mod.__path__ = source.modpath > + mod.__file__ = source.snode.abspath > > - exec file(srcfile, 'r') in mod.__dict__ > + exec file(source.snode.abspath, 'r') in mod.__dict__ > > return mod > > -py_modules = {} > -for source in py_sources: > - py_modules[source.modpath] = source.snode.abspath > - > # install the python importer so we can grab stuff from the source > # tree itself. We can't have SimObjects added after this point or > # else we won't know about them for the rest of the stuff. > -sim_objects_fixed = True > -importer = DictImporter(py_modules) > +SimObject.fixed = True > +importer = DictImporter(PySource.modules) > sys.meta_path[0:0] = [ importer ] > > import m5 > > # import all sim objects so we can populate the all_objects list > _______________________________________________ > m5-dev mailing list > [email protected] > http://m5sim.org/mailman/listinfo/m5-dev > _______________________________________________ m5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/m5-dev
