Update of /cvsroot/sbcl/sbcl
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv24944
188.8.131.52: ppc: Calling-convention fixes for entry-point handling during named-call.
* For GC purposes, seven times never load reg_LIP before loading
whatever register points to the object it refers to.
* During named-call, load the function from the fdefn before
loading the raw-addr (which ends up in reg_LIP). For simple-fun
objects, this provides the reference base for reg_LIP. For other
objects this doesn't matter because reg_LIP ends up pointing to
either undefined_tramp or closure_tramp.
* This still leaves a race condition when updating fdefinitions,
but fixes the race condition surrounding function calling.
* To fix the remaining race condition, we would need to alter
the undefined function trampoline to appear to be a simple-fun
object and adjust the fdefn-fun accessors to compensate, then
arrange for "named" calls to load reg_LEXENV and do closure-fun
access in the same manner as the closure_tramp and the "unnamed"
call VOPs. This would add another instruction to the call path,
but not another memory access (as we would trade off loading the
fdefn-raw-addr for loading the closure-fun).
RCS file: /cvsroot/sbcl/sbcl/version.lisp-expr,v
retrieving revision 1.4938
retrieving revision 1.4939
diff -u -d -r1.4938 -r1.4939
--- version.lisp-expr 7 Aug 2010 15:19:29 -0000 1.4938
+++ version.lisp-expr 7 Aug 2010 15:19:41 -0000 1.4939
@@ -17,4 +17,4 @@
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)