1.0.41.24: ppc: Calling-convention fixes for entry-point handling during named-call.
authorAlastair Bridgewater <lisphacker@users.sourceforge.net>
Sat, 7 Aug 2010 15:19:41 +0000 (15:19 +0000)
committerAlastair Bridgewater <lisphacker@users.sourceforge.net>
Sat, 7 Aug 2010 15:19:41 +0000 (15:19 +0000)
commit1f8efb3fd750d7c4127ce938a53bf245f190546d
tree97cf73d2bc6c792c5c6f3e113a68ab3c48896b52
parent8974d768a634343d958de35e9ce90cec235590a3
1.0.41.24: 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).
src/compiler/ppc/call.lisp
version.lisp-expr