blob: 53cf756ff5dcdd6e2b0c6771d73e51f86cff0acc [file] [log] [blame]
cerion72a17232005-05-13 16:54:09 +0000113 May 05
2~~~~~~~~~
sewardj0be26102005-05-14 11:18:31 +00003ToDo: (arch)/dispatch.S: In dispatch_exceptional, there's no point
4testing the guest code return value against VG_TRC_INNER_COUNTERZERO,
5as vex never sets this flag. Need to check to see if it's possible to
6completely get rid of VG_TRC_INNER_COUNTERZERO.
cerion72a17232005-05-13 16:54:09 +00007
sewardjf15bba62005-03-02 14:22:49 +00008
sewardj4ec8a632005-05-11 23:37:18 +0000911 May 05
10~~~~~~~~~
sewardj0be26102005-05-14 11:18:31 +000011ToDo: vex-amd64: check above/below the line for reg-alloc
sewardj4ec8a632005-05-11 23:37:18 +000012
13
sewardj045a4052005-04-23 22:42:27 +00001423 Apr 05 (memcheck-on-amd64 notes)
15~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sewardj9b3328d2005-04-24 00:04:42 +000016* If a thread is given an initial stack with address range [lo .. hi],
njna60a7c12005-05-08 17:49:37 +000017 we need to tell memcheck that the area [lo - VGA_STACK_REDZONE_SZB
sewardj9b3328d2005-04-24 00:04:42 +000018 .. hi] is valid, rather than just [lo .. hi] as has been the case on
19 x86-only systems. However, am not sure where to look for the call
20 into memcheck that states the new stack area.
sewardj045a4052005-04-23 22:42:27 +000021
sewardj045a4052005-04-23 22:42:27 +000022
sewardj2c96ea52005-04-09 18:25:06 +0000239 Apr 05 (starting work on memcheck for 32/64-bit and big/little endian)
24~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
njn44acd3e2005-05-13 21:39:45 +000025* get rid of include/tool_asm.h. I think
26 this is left over from single-platform days, when it made
sewardj2c96ea52005-04-09 18:25:06 +000027 sense to have tool-helpers written in assembly. Looks like we
28 need to retain coregrind/core_asm.h, though.
29
njn44acd3e2005-05-13 21:39:45 +000030 [tool_asm.h will need to remain in some form -- there are still assembly
31 files that need to see VG_() and related macros. --njn]
njn7f7e7df2005-04-21 22:11:46 +000032
sewardj2c96ea52005-04-09 18:25:06 +000033
sewardj9926dce2005-03-23 13:31:48 +00003423 March 05
35~~~~~~~~~~~
36Do we still need ARCH_PTHREQ_RET (or *PTHREQ* for that matter) ?
37
sewardj21c25812005-03-11 03:07:23 +000038Notes pertaining to the 2.4.0 - 3.0 merge
39~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40As of 10 March (svn rev 3266, vex svn rev 1019) the merged code base
41can start and run programs with --tool=none. Both threaded and
42unthreaded programs appear to work (knode, opera, konqueror).
sewardjf15bba62005-03-02 14:22:49 +000043
sewardj21c25812005-03-11 03:07:23 +000044Known breakage is:
45
46* Basically only x86 works. I was part-way through getting amd64
47 to work when I stopped to do the merge. I think you can assume
48 amd64 is pretty much knackered right now.
49
50* No other tools work. Memcheck worked fine in 3.0 prior to the
51 merge but needs to have Jeremy's space-saving hacks folded in.
52 Also the leak checker improvements. Ditto addrcheck.
53 Cachegrind is broken because it is not Vex-aware, and Vex needs
54 to be changed to convey info on instruction boundaries to it.
55 Helgrind is not Vex aware. Also, Helgrind will not work because
56 thread-event-modelling does not work (see below). Memcheck
57 and Addrcheck could be made to work with minor effort, and
58 that should happen asap. Cachegrind also needs to be fixed
59 shortly.
60
61* Function wrapping a la 2.4.0 is disabled, and will likely remain
62 disabled for an extended period until I consider the software
63 engineering consequences of it, specifically if a cleaner
64 implementation is possible. Result of that is that thread-event
65 modelling and Helgrind are also disabled for that period.
66
sewardj21c25812005-03-11 03:07:23 +000067* signal contexts for x86 signal deliveries are partially broken. On
68 delivery of an rt-signal, a context frame is built, but only the 8
69 integer registers and %eflags are written into it, no SSE and no FP
70 state. Also, the vcpu state is restored on return to whatever it
71 was before the signal was delivered; it is not restored from the
72 sigcontext offered to the handler. That means handlers which
73 expect to be able to modify the machine state will not work.
74 This will be fixed; it requires a small amount of work on the
75 Vex side.
76
77* I got rid of extra UInt* flags arg for syscall pre wrappers,
78 so they can't add MayBlock after examining the args. Should
79 be reinstated. I commented out various *flags |= MayBlock"
80 so they can easily enough be put back in.
81
82* Tracking of device segments is somehow broken (I forget how)
83
sewardjd1212b92005-03-11 12:43:19 +000084* Core dumping is disabled (has been for a while in the 3.0 line)
85 because it needs to be factored per arch (or is it per arch+os).
86
sewardj21c25812005-03-11 03:07:23 +000087
88Other notes I made:
89
90* Check tests/filter_stderr_basic; I got confused whilst merging it
91
92* Dubious use of setjmp in run_thread_for_a_while -- I thought it
93 was only OK to use setjmp as the arg of an if: if (setjmp(...)) ...
94
95* EmWarn/Int confusion -- what type is it in the guest state?
96
97* Reinstate per-thread dispatch ctrs. First find out what the
98 rationale for per-thread counters is.
99
100* main: TL_(fini) is not given exitcode and it should be.
101
102* Prototype for VG_(_client_syscall) [note leading _] is in a
103 bad place.
104
105(It was a 3-way merge, using the most recent common ancestor
106 of the 2.4.0 and 3.0 lines:
107
108 cvs co -D "11/19/2004 17:45:00 GMT" valgrind
109
110 and the 2.4.0 line
111
112 obtained at Fri Mar 4 15:52:46 GMT 2005 by:
113 cvs co valgrind
114
115 and the 3.0 line, which is svn revision 3261.
116)
117
118
119Cleanup notes derived from making AMD64 work. JRS, started 2 March 05.
120~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sewardjf15bba62005-03-02 14:22:49 +0000121The following cleanups need to be done.
122
123AMD64 vsyscalls
124~~~~~~~~~~~~~~~
125The redirect mechanism should (could) be used to support vsyscalls on
126both amd64 and x86, by redirecting jumps to the vsyscall entry
127point(s) to appropriate helper stubs instead. There is no point in
128using the current x86 scheme of copying the trampoline code around the
129place and making the AT_SYSINFO entry point at it, as that mechanism
130does not work on amd64.
131
132On x86-linux, the vsyscall address is whatever the AT_SYSINFO entry
133says it is. Reroute all jumps to that to a suitable stub.
134
135On amd64, there are multiple vsyscall entry points at -10M +
1361024*vsyscall_no (currently there are only two). These each need to be
137redirected to suitable stubs which do normal syscalls instead.
138
139These redirects should be set up as part of platform-specific
140initialisation sequences. They should not be set up as at present in
141vg_symtab2.c. All this stuff should be within platform-specific
142startup code, and should not be visible in generic core service code.
143
144
145Redirection mechanism
146~~~~~~~~~~~~~~~~~~~~~
sewardj21c25812005-03-11 03:07:23 +0000147How this works is difficult to understand. This should be fixed. The
148list of unresolved redirections should be a seperate data structure
149from the currently active (addr, addr) mapping.
sewardjf15bba62005-03-02 14:22:49 +0000150
151There's a whole big #ifdef TEST section in vg_symtab2.c which has
152no apparent purpose.
153
sewardj6941a1a2005-03-02 16:01:23 +0000154The redirecting-symtab-loader seems like a good idea on the face
155of it: you can write functions whose name says, in effect
156 "i_am_a_replacement_for_FOO"
157and then all jumps/calls to FOO get redirected there. Problem is
158that nameing mechanism involves $ signs etc in symbol names, which
159makes it very fragile. TODO: (1) figure out if we still need
160this, and if so (2) fix.
161
sewardjf15bba62005-03-02 14:22:49 +0000162
163System call handlers
164~~~~~~~~~~~~~~~~~~~~
165The pre/post functions should be factored into: marshallers, which get
166the syscall args from wherever they live, and handlers proper, which
167do whatever pre/post checks/hanldling is needed. The handlers are
168more or less platform independent. The marshallers insulate the
169handlers from details of knowing how to get hold of syscall arg/result
170values given that different platforms use different and sometimes
171strange calling conventions.
172
173The syscall handlers assume that the result register (RES) does not
174overlap with any argument register (ARGn). They assume this by
175blithely referring to ARGn in the post-handlers. This should be fixed
176properly -- before the call, a copy of the args should be saved so
177they can be safely inspected after the call.
178
179The mechanisms by which a pre-handler can complete a syscall itself
180without handing it off to the kernel need to be cleaned up. The
181"Special" syscall designation no longer really makes sense (it never
182did) and should be removed.
183
sewardj6941a1a2005-03-02 16:01:23 +0000184Sockets: move the socketcall marshaller from vg_syscalls.c into
185x86-linux/syscalls.c; it is in the wrong place.
sewardjf15bba62005-03-02 14:22:49 +0000186