[pypy-svn] r68665 - pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc
afa at codespeak.net
afa at codespeak.net
Tue Oct 20 18:33:13 CEST 2009
Author: afa
Date: Tue Oct 20 18:33:13 2009
New Revision: 68665
Modified:
pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/trackgcroot.py
Log:
Fix trackgcroot when compiled in debug mode
try to fix generated assembler. Someone should verify it.
Modified: pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/trackgcroot.py
==============================================================================
--- pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/trackgcroot.py (original)
+++ pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/trackgcroot.py Tue Oct 20 18:33:13 2009
@@ -250,6 +250,8 @@
match = self.r_localvar_ebp.match(localvar)
if match:
ofs_from_ebp = int(match.group(1) or '0')
+ if self.format == 'msvc':
+ ofs_from_ebp += int(match.group(2) or '0')
localvar = ofs_from_ebp - 4
assert localvar != 0 # that's the return address
return LocalVar(localvar, hint='ebp')
@@ -727,7 +729,7 @@
r_symboldefine = re.compile(r"([_a-z0-9]+\$) = ([-0-9]+)\s*;.+\n")
LOCALVAR = r"eax|edx|ecx|ebx|esi|edi|ebp|DWORD PTR [-+]?\d*\[esp[-+]\d+\]"
- LOCALVARFP = LOCALVAR + r"|-?\d*\[ebp\]"
+ LOCALVARFP = LOCALVAR + r"|DWORD PTR -?\d*\[ebp\]"
r_localvarnofp = re.compile(LOCALVAR)
r_localvarfp = re.compile(LOCALVARFP)
r_gcroot_marker = re.compile(r";.+ = pypy_asm_gcroot\(")
@@ -1004,10 +1006,16 @@
if self.format in ('darwin', 'mingw32', 'msvc'):
name = '_' + name
- if disp:
- return "%s + %s" % (name, disp)
+ if self.format == 'msvc':
+ if disp:
+ return "DWORD PTR [%s+%s]" % (name, disp)
+ else:
+ return name
else:
- return name
+ if disp:
+ return "%s + %s" % (name, disp)
+ else:
+ return name
def _globl(name):
if self.format == 'msvc':
@@ -1059,7 +1067,7 @@
def _offset(name):
if self.format == 'msvc':
- return "OFFSET %s" % _globalname(name)
+ return "DWORD PTR [%s]" % _globalname(name)
else:
return "$%s" % _globalname(name)
@@ -1071,7 +1079,7 @@
def _indirectjmp(arg):
if self.format == 'msvc':
- return arg
+ return "DWORD PTR " + arg
else:
return "*%" + arg
More information about the Pypy-commit
mailing list