Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!rutgers!ames!styx!ptsfa!ihnp4!chinet!steinmetz!davidsen From: davidsen@steinmetz.steinmetz.UUCP (William E. Davidsen Jr) Newsgroups: comp.sources.d,comp.unix.xenix,comp.arch,comp.unix.wizards Subject: Re: ARC on XENIX V/286 Message-ID: <5901@steinmetz.steinmetz.UUCP> Date: Wed, 29-Apr-87 12:24:03 EDT Article-I.D.: steinmet.5901 Posted: Wed Apr 29 12:24:03 1987 Date-Received: Sat, 2-May-87 10:10:27 EDT References: <259@devon.UUCP Reply-To: davidsen@kbsvax.steinmetz.UUCP (William E. Davidsen Jr) Organization: General Electric CRD, Schenectady, NY Lines: 38 Keywords: ARC port XENIX Xref: mnetor comp.sources.d:646 comp.unix.xenix:281 comp.arch:1142 comp.unix.wizards:2094 In article <259@devon.UUCP paul@devon.UUCP (Paul Sutcliffe Jr.) writes: So far I have seen three different versions of ARC 5.12 posted to net.sources. Each of these was supposedly working under some flavor of Un*x. Someone even posted diffs to the original saying that the changes allowed ARC to run under XENIX V/286. There is a bug in the version of ARC distributed, and I can tell you what it is (but not where, yet). The version distributed failed on my Xenix, too. I didn't much want to go after it with adb, but thought I'd take it home and use sdb on a unix-pc. Lo and behold, the memory fault went away and the program runs fine. Also ran on a SRV Vax. Then I decided that it was the 80286 archetecture (again) and tried it on Microport, where it worked, too. After MUCH digging I have located the source of the problem. Machines which load all user data space into one lump do memory management on the lump. On a Vax or 68k machine you get no problem if an array index is off by one, as long as the array isn't the last thing in memory. Microport seems to do about the same thing, starting a new segment only when really needed. Xenix large model seems to generate a large number of segments, one for each array larger than (something). This give full bounds checking on every array. The truth is that one of the array refs is WRONG, and clobbers something else in user memory. The only way this will fail is on hardware which does full bounds checking. I haven't found the actual location of the problem yet, if someone beats me, please post. I will certainly post it back to SEAware if I locate it myself. NOTE: I have cross posted this to several groups where there have been either discussions of segmented machines or where the users are interested in solving bizarre and obscure problems. -- bill davidsen sixhub \ ARPA: wedu@ge-crd.arpa ihnp4!seismo!rochester!steinmetz -> crdos1!davidsen chinet / "Stupidity, like virtue, is its own reward"