Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: Notesfiles $Revision: 1.7.0.10 $; site uiucdcsb Path: utzoo!watmath!clyde!burl!ulysses!mhuxr!mhuxn!ihnp4!inuxc!pur-ee!uiucdcs!uiucdcsb!robison From: robison@uiucdcsb.CS.UIUC.EDU Newsgroups: net.arch Subject: Re: pointers to freshly minted func Message-ID: <5600043@uiucdcsb> Date: Thu, 13-Mar-86 11:43:00 EST Article-I.D.: uiucdcsb.5600043 Posted: Thu Mar 13 11:43:00 1986 Date-Received: Sat, 15-Mar-86 03:30:53 EST References: <2277@phri.UUCP> Lines: 24 Nf-ID: #R:phri.UUCP:2277:uiucdcsb:5600043:000:1221 Nf-From: uiucdcsb.CS.UIUC.EDU!robison Mar 13 10:43:00 1986 > The Buroughs B5700 had (in addition to the strangest subroutine > linkage I've ever seen) a tagged architecture. Each memory word had a > (3-bit?) tag which defined the value stored there as integer, real, > pointer, instruction, etc. This tag was not directly accessible by a > programmer which made it kind of hard to implement a compiler. Presumably > (I never actually used a B5700) there was some magic way the OS used to > convert data into code, but I never ran accross any reference to it. > Much of the 5700's security was enforced by the compiler. Therefore ordinary users could not set the tags. There was a priviliged instruction which could set the tags. Thus all compilers had to run in priviledged mode. The early versios of the compiler didn't enforce the security rules well enough. Specifically, a pointer could be set to point to a variable more local than itself (i.e. an up-level pointer). When the variable disappeared, accessing the pointer could lead to total system failure. (In the compiler manual there was an index entry "total system failure"! The current compilers on the system disallow anything that even looks like an attempt to make an up-level pointer. - Arch Robison