Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site hcrvx1.UUCP
Path: utzoo!hcrvax!hcrvx1!tom
From: tom@hcrvx1.UUCP (Tom Kelly)
Newsgroups: net.arch
Subject: Re: Re: Where to do stack checking, etc.
Message-ID: <1232@hcrvx1.UUCP>
Date: Thu, 19-Sep-85 10:21:26 EDT
Article-I.D.: hcrvx1.1232
Posted: Thu Sep 19 10:21:26 1985
Date-Received: Fri, 20-Sep-85 12:14:53 EDT
References: <796@kuling.UUCP> <1713@orca.UUCP> <1599@peora.UUCP> <335@ihlpl.UUCP> <2384@uvacs.UUCP>
Reply-To: tom@hcrvx1.UUCP (Tom Kelly)
Organization: Human Computing Resources, Toronto
Lines: 26
Summary: 

In article <2384@uvacs.UUCP> mac@uvacs.UUCP (Alex Colvin) writes:
>
>I'm still looking for a machine that will trap references to uninitialized
>data.

The Burroughs B7700 and its relatives (B6700, etc.) can do this.  All
memory locations have a three bit "tag" that indicates what kind of
data is stored in the memory location (code, operand, pointer, ...).

One of the tags (6) is "reserved for software control".  The hardware
considers it an unitialized operand.  Reference to it for the purpose
of computation causes a fault.  (There is a special code sequence
that can be used to get at the contents, but the compilers don't
use that code when using it as a normal operand).  A normal store
operation would overwrite the tag 6.

The Pascal compiler I worked on initialized all scalar local variables
to have tag 6.  If you used them without initializing them, you'd
get an abort with the message "Invalid Operand".  The Tasmania
Pascal compiler for the B6700 also put a tag 6 into the control variable
of a for loop at loop exit, since the value is supposed to be indeterminate.

I found this to be very helpful in debugging programs.

Tom Kelly  (416) 922-1937
{utzoo, ihnp4, decvax}!hcr!hcrvx1!tom