Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!wuarchive!udel!rochester!pt.cs.cmu.edu!gandalf.cs.cmu.edu!lindsay From: lindsay@gandalf.cs.cmu.edu (Donald Lindsay) Newsgroups: comp.arch Subject: Re: Compilers and efficiency Message-ID: <12784@pt.cs.cmu.edu> Date: 25 Apr 91 03:15:20 GMT References: <1991Apr23.162814.20093@Think.COM> Organization: Carnegie Mellon Lines: 24 In article <1991Apr23.162814.20093@Think.COM> barmar@think.com (Barry Margolin) writes: | ... The reason it was easy was because the machine code for a | procedure prologue, contained (get this) a *call* to the runtime | package... >...alternate versions of the operators could be >dynamically linked into the process (similar to the way personal computer >customizations patch trap vectors). The most notable uses of this are the >procedure call tracing mechanism and the metering facility. Another debugging feature available via this trick is break-when- expression-true. The expression is of course only evaluated on every procedure entry, not on every cycle. However, my personal experience (on a DEC 20) was very postive. I was usually trying to find out which routine was using a wild pointer, so per-call was the perfect granularity. Of course, there are other ways to achieve the same effect on vanilla hardware. Aside from page protection cleverness, one can run a snoop process on one of the other CPUs. (Multiprocessors *are* vanilla, right?) -- Don D.C.Lindsay Carnegie Mellon Robotics Institute