[pypy-svn] r66860 - in pypy/branch/pyjitpl5/pypy/translator/c/gcc: . test test/darwin
pedronis at codespeak.net
pedronis at codespeak.net
Sun Aug 16 19:00:00 CEST 2009
Author: pedronis
Date: Sun Aug 16 18:59:59 2009
New Revision: 66860
Modified:
pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track0.s
pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track1.s
pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track2.s
pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track8.s
pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/test_trackgcroot.py
pypy/branch/pyjitpl5/pypy/translator/c/gcc/trackgcroot.py
Log:
WIP mainly deal with static functions properly and ignore our own handcrafted assembler
Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track0.s
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track0.s (original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track0.s Sun Aug 16 18:59:59 2009
@@ -1,4 +1,3 @@
-.globl _pypy_g_clear_large_memory_chunk
_pypy_g_clear_large_memory_chunk:
L80:
pushl %ebp
Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track1.s
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track1.s (original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track1.s Sun Aug 16 18:59:59 2009
@@ -1,4 +1,3 @@
-.globl _pypy_g_clear_large_memory_chunk
_pypy_g_clear_large_memory_chunk:
L137:
pushl %ebp
Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track2.s
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track2.s (original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track2.s Sun Aug 16 18:59:59 2009
@@ -1,4 +1,3 @@
-.globl _pypy_g_populate
_pypy_g_populate:
L2135:
subl $76, %esp
Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track8.s
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track8.s (original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track8.s Sun Aug 16 18:59:59 2009
@@ -1,4 +1,3 @@
-.globl _pypy_g_foo
_pypy_g_foo:
L1506:
subl $140, %esp
Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/test_trackgcroot.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/test_trackgcroot.py (original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/test_trackgcroot.py Sun Aug 16 18:59:59 2009
@@ -76,8 +76,12 @@
\t.align 4,0x90
.globl _pypy_g_ll_str__StringR_Ptr_GcStruct_rpy_strin_rpy_strin
_pypy_g_ll_str__StringR_Ptr_GcStruct_rpy_strin_rpy_strin:
+L0:
\tFOO
\t.align 4,0x90
+_static:
+\tSTATIC
+\t.align 4,0x90
.globl _pypy_g_ll_issubclass__object_vtablePtr_object_vtablePtr
_pypy_g_ll_issubclass__object_vtablePtr_object_vtablePtr:
\tBAR
@@ -92,13 +96,14 @@
"""
lines = source.splitlines(True)
parts = list(GcRootTracker(format='darwin').find_functions(iter(lines)))
- assert len(parts) == 6
- assert parts[0] == (False, lines[:2])
- assert parts[1] == (True, lines[2:6])
- assert parts[2] == (True, lines[6:9])
- assert parts[3] == (False, lines[9:13])
- assert parts[4] == (True, lines[13:16])
- assert parts[5] == (False, lines[16:])
+ assert len(parts) == 7
+ assert parts[0] == (False, lines[:3])
+ assert parts[1] == (True, lines[3:7])
+ assert parts[2] == (True, lines[7:11])
+ assert parts[3] == (True, lines[11:13])
+ assert parts[4] == (False, lines[13:18])
+ assert parts[5] == (True, lines[18:20])
+ assert parts[6] == (False, lines[20:])
def test_computegcmaptable():
tests = []
Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/trackgcroot.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/trackgcroot.py (original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/trackgcroot.py Sun Aug 16 18:59:59 2009
@@ -7,14 +7,14 @@
# darwin
r_textstart = re.compile(r"\t.text\s*$")
-r_sectionstart = re.compile(r"\t.(section|cstring|data).*$")
-r_functionstart_darwin = re.compile(r".globl\s+(\w+)\s*$")
+r_sectionstart = re.compile(r"\t.(section|cstring|const|data).*$")
+r_functionstart_darwin = re.compile(r"_(\w+):\s*$")
# inside functions
r_label = re.compile(r"([.]?\w+)[:]\s*$")
r_globl = re.compile(r"\t[.]globl\t(\w+)\s*$")
r_insn = re.compile(r"\t([a-z]\w*)\s")
-r_jump = re.compile(r"\tj\w+\s+([.]?\w+)\s*$")
+r_jump = re.compile(r"\tj\w+\s+([.]?[\w$]+)\s*$")
OPERAND = r'(?:[-\w$%+.:@"]+(?:[(][\w%,]+[)])?|[(][\w%,]+[)])'
r_unaryinsn = re.compile(r"\t[a-z]\w*\s+("+OPERAND+")\s*$")
r_unaryinsn_star= re.compile(r"\t[a-z]\w*\s+([*]"+OPERAND+")\s*$")
@@ -140,9 +140,9 @@
functionlines = []
in_text = False
in_function = False
- for line in iterlines:
+ for n, line in enumerate(iterlines):
if r_textstart.match(line):
- assert not in_text, "unexpected repeated .text start"
+ assert not in_text, "unexpected repeated .text start: %d" % n
in_text = True
elif r_sectionstart.match(line):
if in_function:
@@ -160,6 +160,8 @@
yield in_function, functionlines
def process(self, iterlines, newfile, entrypoint='main', filename='?'):
+ if self.format == 'darwin':
+ entrypoint = '_' + entrypoint
for in_function, lines in self.find_functions(iterlines):
if in_function:
lines = self.process_function(lines, entrypoint, filename)
@@ -170,6 +172,7 @@
def process_function(self, lines, entrypoint, filename):
tracker = FunctionGcRootTracker(lines, filetag=getidentifier(filename),
format=self.format)
+ print >> sys.stderr, entrypoint
tracker.is_main = tracker.funcname == entrypoint
if self.verbose == 1:
sys.stderr.write('.')
@@ -200,7 +203,7 @@
assert funcname == match.group(2)
elif format == 'darwin':
match = r_functionstart_darwin.match(lines[0])
- funcname = match.group(1)
+ funcname = '_'+match.group(1)
else:
assert False, "unknown format: %s" % format
@@ -280,13 +283,13 @@
def parse_instructions(self):
self.insns = [InsnFunctionStart()]
- in_APP = False
+ ignore_insns = False
for lineno, line in enumerate(self.lines):
self.currentlineno = lineno
insn = []
match = r_insn.match(line)
if match:
- if not in_APP:
+ if not ignore_insns:
opname = match.group(1)
try:
meth = getattr(self, 'visit_' + opname)
@@ -295,10 +298,10 @@
insn = meth(line)
elif r_gcroot_marker.match(line):
insn = self._visit_gcroot_marker(line)
- elif line == '#APP\n':
- in_APP = True
- elif line == '#NO_APP\n':
- in_APP = False
+ elif line == '\t/* ignore_in_trackgcroot */\n':
+ ignore_insns = True
+ elif line == '\t/* end_ignore_in_trackgcroot */\n':
+ ignore_insns = False
else:
match = r_label.match(line)
if match:
@@ -478,7 +481,7 @@
'rep', 'movs', 'lods', 'stos', 'scas', 'cwtl', 'prefetch',
# floating-point operations cannot produce GC pointers
'f',
- 'cvt', # sse2
+ 'cvt', 'ucomi', 'subs', 'subp' , 'xorp', 'movap', # sse2
# arithmetic operations should not produce GC pointers
'inc', 'dec', 'not', 'neg', 'or', 'and', 'sbb', 'adc',
'shl', 'shr', 'sal', 'sar', 'rol', 'ror', 'mul', 'imul', 'div', 'idiv',
@@ -1070,7 +1073,11 @@
output_raw_table = True
else:
break
- tracker = GcRootTracker(verbose=verbose, shuffle=shuffle)
+ if sys.platform == 'darwin':
+ format = 'darwin'
+ else:
+ format = 'elf'
+ tracker = GcRootTracker(verbose=verbose, shuffle=shuffle, format=format)
for fn in sys.argv[1:]:
tmpfn = fn + '.TMP'
f = open(fn, 'r')
More information about the Pypy-commit
mailing list