thorinn@diku.UUCP (04/04/86)
In article <802@ttrdc.UUCP> levy@ttrdc.UUCP writes: >>The person who started this discussion was already able to create code >>in the .data space; whether it's done by the loader or at run-time by >>the program is irrelevant. The question is whether it's possible to >>_execute_ such a function. On a vax, you can. But you have to take care here; I quote from the "VAX-11 Architecture Reference Manual", 20 May 1982, Revision 6.1, page 2-20: 2.7 SEPARATION OF PROCEDURE AND DATA The VAX-11 architecture encourages (and provides the mechanisms to facilitate) separation of procedure (instructions) and writable data. Procedures may not write data which is to be subsequently executed as an instruction without an intervening REI instruction being executed (See Chapter 6) or an intervening context switch occurring (See Chapter 7). If no REI or context switch occurs between a procedure writing data as instructions to be executed, and those instructions being executed, the instructions executed are UNPREDICTABLE. The pretty sentiments apart, I suppose DEC want their hands free to use a separate I-cache without monitoring data writes. Come to think of it, even a simple pre-fetch approach could be compromised by the PDP-11 practice of using the immediate operand of an instruction as a data cell; eg. various RT-11 device drivers: "INC XXINIT, ... , TST (PC)+, XXINIT: .WORD 0" (According to section 8.3, "CACHE" (ibid.), the architecture guarantees consistent *data* behaviour even when faced with multiple processors and I/O devices. The above eliminates these headaches as well for the I-cache.) However, a cheap system call (eg. getpid() for UNIX) should eliminate this problem in the context of constructing new procedures. -- Lars Mathiesen, DIKU, U. of Copenhagen, Denmark ..mcvax!diku!thorinn