annotate Python/makeopcodetargets.py @ 61184:4fd3ab5fa71d

Make (most of) Python's tests pass under Thread Sanitizer. http://code.google.com/p/data-race-test/wiki/ThreadSanitizer is a dynamic data race detector that runs on top of valgrind. With this patch, the binaries at http://code.google.com/p/data-race-test/wiki/ThreadSanitizer#Binaries pass many but not all of the Python tests. All of regrtest still passes outside of tsan. I've implemented part of the C1x atomic types so that we can explicitly mark variables that are used across threads, and get defined behavior as compilers advance. I've added tsan's client header and implementation to the codebase in dynamic_annotations.{h,c} (docs at http://code.google.com/p/data-race-test/wiki/DynamicAnnotations). Unfortunately, I haven't been able to get helgrind and drd to give sensible error messages, even when I use their client annotations, so I'm not supporting them.
author Jeffrey Yasskin <jyasskin@gmail.com>
date Mon, 03 May 2010 19:29:34 +0000
parents 5c5de8acb33c
children cab14be0ada1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59523
5c5de8acb33c fix bootstrapping on machines with only 2.x installed
Benjamin Peterson <benjamin@python.org>
parents: 59522
diff changeset
1 #! /usr/bin/env python
51031
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
2 """Generate C code for the jump table of the threaded code interpreter
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
3 (for compilers supporting computed gotos or "labels-as-values", such as gcc).
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
4 """
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
5
51202
df090597afaa Make Python/makeopcodetargets runnable with Python 2.3. With any luck, this
Mark Dickinson <dickinsm@gmail.com>
parents: 51031
diff changeset
6 # This code should stay compatible with Python 2.3, at least while
df090597afaa Make Python/makeopcodetargets runnable with Python 2.3. With any luck, this
Mark Dickinson <dickinsm@gmail.com>
parents: 51031
diff changeset
7 # some of the buildbots have Python 2.3 as their system Python.
df090597afaa Make Python/makeopcodetargets runnable with Python 2.3. With any luck, this
Mark Dickinson <dickinsm@gmail.com>
parents: 51031
diff changeset
8
51031
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
9 import imp
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
10 import os
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
11
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
12
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
13 def find_module(modname):
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
14 """Finds and returns a module in the local dist/checkout.
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
15 """
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
16 modpath = os.path.join(
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
17 os.path.dirname(os.path.dirname(__file__)), "Lib")
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
18 return imp.load_module(modname, *imp.find_module(modname, [modpath]))
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
19
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
20 def write_contents(f):
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
21 """Write C code contents to the target file object.
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
22 """
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
23 opcode = find_module("opcode")
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
24 targets = ['_unknown_opcode'] * 256
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
25 for opname, op in opcode.opmap.items():
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
26 if opname == "STOP_CODE":
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
27 # XXX opcode not implemented
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
28 continue
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
29 targets[op] = "TARGET_%s" % opname
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
30 f.write("static void *opcode_targets[256] = {\n")
51202
df090597afaa Make Python/makeopcodetargets runnable with Python 2.3. With any luck, this
Mark Dickinson <dickinsm@gmail.com>
parents: 51031
diff changeset
31 f.write(",\n".join(["\t&&%s" % s for s in targets]))
51031
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
32 f.write("\n};\n")
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
33
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
34
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
35 if __name__ == "__main__":
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
36 import sys
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
37 assert len(sys.argv) < 3, "Too many arguments"
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
38 if len(sys.argv) == 2:
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
39 target = sys.argv[1]
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
40 else:
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
41 target = "Python/opcode_targets.h"
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
42 f = open(target, "w")
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
43 try:
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
44 write_contents(f)
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
45 finally:
d86e23318b41 Issue #4753: By enabling a configure option named '--with-computed-gotos'
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
46 f.close()